From c5450c6e0ca418ba32883d33d071395a55c3c661 Mon Sep 17 00:00:00 2001
From: JR <3573153686@qq.com>
Date: Wed, 16 Jul 2025 18:16:18 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=96=E8=B4=B8=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=EF=BC=8C=E9=87=87=E8=B4=AD=E5=A4=87=E6=B3=A8=E5=A4=8D?=
=?UTF-8?q?=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
fad-export/pom.xml | 15 ++-
.../ExportArticleCategoryController.java | 101 +++++++++++++++
.../controller/ExportArticleController.java | 101 +++++++++++++++
.../controller/ExportCarouselController.java | 101 +++++++++++++++
.../ruoyi/export/domain/ExportArticle.java | 78 ++++++++++++
.../export/domain/ExportArticleCategory.java | 64 ++++++++++
.../ruoyi/export/domain/ExportCarousel.java | 68 ++++++++++
.../export/domain/bo/ExportArticleBo.java | 82 ++++++++++++
.../domain/bo/ExportArticleCategoryBo.java | 65 ++++++++++
.../export/domain/bo/ExportCarouselBo.java | 70 +++++++++++
.../domain/vo/ExportArticleCategoryVo.java | 74 +++++++++++
.../export/domain/vo/ExportArticleVo.java | 92 ++++++++++++++
.../export/domain/vo/ExportCarouselVo.java | 80 ++++++++++++
.../mapper/ExportArticleCategoryMapper.java | 15 +++
.../export/mapper/ExportArticleMapper.java | 15 +++
.../export/mapper/ExportCarouselMapper.java | 15 +++
.../IExportArticleCategoryService.java | 49 ++++++++
.../export/service/IExportArticleService.java | 49 ++++++++
.../service/IExportCarouselService.java | 49 ++++++++
.../ExportArticleCategoryServiceImpl.java | 114 +++++++++++++++++
.../impl/ExportArticleServiceImpl.java | 117 ++++++++++++++++++
.../impl/ExportCarouselServiceImpl.java | 115 +++++++++++++++++
.../export/ExportArticleCategoryMapper.xml | 24 ++++
.../mapper/export/ExportArticleMapper.xml | 27 ++++
.../mapper/export/ExportCarouselMapper.xml | 25 ++++
pom.xml | 7 ++
ruoyi-admin/pom.xml | 6 +
.../impl/SysOaWarehouseTaskServiceImpl.java | 2 +
28 files changed, 1614 insertions(+), 6 deletions(-)
create mode 100644 fad-export/src/main/java/com/ruoyi/export/controller/ExportArticleCategoryController.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/controller/ExportArticleController.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/controller/ExportCarouselController.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/domain/ExportArticle.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/domain/ExportArticleCategory.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/domain/ExportCarousel.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportArticleBo.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportArticleCategoryBo.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportCarouselBo.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportArticleCategoryVo.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportArticleVo.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportCarouselVo.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/mapper/ExportArticleCategoryMapper.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/mapper/ExportArticleMapper.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/mapper/ExportCarouselMapper.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/service/IExportArticleCategoryService.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/service/IExportArticleService.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/service/IExportCarouselService.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/service/impl/ExportArticleCategoryServiceImpl.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/service/impl/ExportArticleServiceImpl.java
create mode 100644 fad-export/src/main/java/com/ruoyi/export/service/impl/ExportCarouselServiceImpl.java
create mode 100644 fad-export/src/main/resources/mapper/export/ExportArticleCategoryMapper.xml
create mode 100644 fad-export/src/main/resources/mapper/export/ExportArticleMapper.xml
create mode 100644 fad-export/src/main/resources/mapper/export/ExportCarouselMapper.xml
diff --git a/fad-export/pom.xml b/fad-export/pom.xml
index 85cfa44..3f855d8 100644
--- a/fad-export/pom.xml
+++ b/fad-export/pom.xml
@@ -10,11 +10,14 @@
fad-export
+ FAD外贸模块
-
- 8
- 8
- UTF-8
-
+
+
+
+ com.ruoyi
+ ruoyi-common
+
+
-
\ No newline at end of file
+
diff --git a/fad-export/src/main/java/com/ruoyi/export/controller/ExportArticleCategoryController.java b/fad-export/src/main/java/com/ruoyi/export/controller/ExportArticleCategoryController.java
new file mode 100644
index 0000000..4e0262f
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/controller/ExportArticleCategoryController.java
@@ -0,0 +1,101 @@
+package com.ruoyi.export.controller;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.export.domain.vo.ExportArticleCategoryVo;
+import com.ruoyi.export.domain.bo.ExportArticleCategoryBo;
+import com.ruoyi.export.service.IExportArticleCategoryService;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 文章分类
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/export/articleCategory")
+public class ExportArticleCategoryController extends BaseController {
+
+ private final IExportArticleCategoryService iExportArticleCategoryService;
+
+ /**
+ * 查询文章分类列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(ExportArticleCategoryBo bo, PageQuery pageQuery) {
+ return iExportArticleCategoryService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出文章分类列表
+ */
+ @Log(title = "文章分类", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(ExportArticleCategoryBo bo, HttpServletResponse response) {
+ List list = iExportArticleCategoryService.queryList(bo);
+ ExcelUtil.exportExcel(list, "文章分类", ExportArticleCategoryVo.class, response);
+ }
+
+ /**
+ * 获取文章分类详细信息
+ *
+ * @param categoryId 主键
+ */
+ @GetMapping("/{categoryId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long categoryId) {
+ return R.ok(iExportArticleCategoryService.queryById(categoryId));
+ }
+
+ /**
+ * 新增文章分类
+ */
+ @Log(title = "文章分类", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody ExportArticleCategoryBo bo) {
+ return toAjax(iExportArticleCategoryService.insertByBo(bo));
+ }
+
+ /**
+ * 修改文章分类
+ */
+ @Log(title = "文章分类", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody ExportArticleCategoryBo bo) {
+ return toAjax(iExportArticleCategoryService.updateByBo(bo));
+ }
+
+ /**
+ * 删除文章分类
+ *
+ * @param categoryIds 主键串
+ */
+ @Log(title = "文章分类", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{categoryIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] categoryIds) {
+ return toAjax(iExportArticleCategoryService.deleteWithValidByIds(Arrays.asList(categoryIds), true));
+ }
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/controller/ExportArticleController.java b/fad-export/src/main/java/com/ruoyi/export/controller/ExportArticleController.java
new file mode 100644
index 0000000..fec316a
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/controller/ExportArticleController.java
@@ -0,0 +1,101 @@
+package com.ruoyi.export.controller;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.export.domain.vo.ExportArticleVo;
+import com.ruoyi.export.domain.bo.ExportArticleBo;
+import com.ruoyi.export.service.IExportArticleService;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 文章
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/export/article")
+public class ExportArticleController extends BaseController {
+
+ private final IExportArticleService iExportArticleService;
+
+ /**
+ * 查询文章列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(ExportArticleBo bo, PageQuery pageQuery) {
+ return iExportArticleService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出文章列表
+ */
+ @Log(title = "文章", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(ExportArticleBo bo, HttpServletResponse response) {
+ List list = iExportArticleService.queryList(bo);
+ ExcelUtil.exportExcel(list, "文章", ExportArticleVo.class, response);
+ }
+
+ /**
+ * 获取文章详细信息
+ *
+ * @param articleId 主键
+ */
+ @GetMapping("/{articleId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long articleId) {
+ return R.ok(iExportArticleService.queryById(articleId));
+ }
+
+ /**
+ * 新增文章
+ */
+ @Log(title = "文章", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody ExportArticleBo bo) {
+ return toAjax(iExportArticleService.insertByBo(bo));
+ }
+
+ /**
+ * 修改文章
+ */
+ @Log(title = "文章", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody ExportArticleBo bo) {
+ return toAjax(iExportArticleService.updateByBo(bo));
+ }
+
+ /**
+ * 删除文章
+ *
+ * @param articleIds 主键串
+ */
+ @Log(title = "文章", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{articleIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] articleIds) {
+ return toAjax(iExportArticleService.deleteWithValidByIds(Arrays.asList(articleIds), true));
+ }
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/controller/ExportCarouselController.java b/fad-export/src/main/java/com/ruoyi/export/controller/ExportCarouselController.java
new file mode 100644
index 0000000..ac655a7
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/controller/ExportCarouselController.java
@@ -0,0 +1,101 @@
+package com.ruoyi.export.controller;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.export.domain.vo.ExportCarouselVo;
+import com.ruoyi.export.domain.bo.ExportCarouselBo;
+import com.ruoyi.export.service.IExportCarouselService;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 轮播图
+ *
+ * @author ruoyi
+ * @date 2025-07-16
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/export/carousel")
+public class ExportCarouselController extends BaseController {
+
+ private final IExportCarouselService iExportCarouselService;
+
+ /**
+ * 查询轮播图列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(ExportCarouselBo bo, PageQuery pageQuery) {
+ return iExportCarouselService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出轮播图列表
+ */
+ @Log(title = "轮播图", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(ExportCarouselBo bo, HttpServletResponse response) {
+ List list = iExportCarouselService.queryList(bo);
+ ExcelUtil.exportExcel(list, "轮播图", ExportCarouselVo.class, response);
+ }
+
+ /**
+ * 获取轮播图详细信息
+ *
+ * @param carouselId 主键
+ */
+ @GetMapping("/{carouselId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long carouselId) {
+ return R.ok(iExportCarouselService.queryById(carouselId));
+ }
+
+ /**
+ * 新增轮播图
+ */
+ @Log(title = "轮播图", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody ExportCarouselBo bo) {
+ return toAjax(iExportCarouselService.insertByBo(bo));
+ }
+
+ /**
+ * 修改轮播图
+ */
+ @Log(title = "轮播图", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody ExportCarouselBo bo) {
+ return toAjax(iExportCarouselService.updateByBo(bo));
+ }
+
+ /**
+ * 删除轮播图
+ *
+ * @param carouselIds 主键串
+ */
+ @Log(title = "轮播图", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{carouselIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] carouselIds) {
+ return toAjax(iExportCarouselService.deleteWithValidByIds(Arrays.asList(carouselIds), true));
+ }
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/domain/ExportArticle.java b/fad-export/src/main/java/com/ruoyi/export/domain/ExportArticle.java
new file mode 100644
index 0000000..3a71060
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/domain/ExportArticle.java
@@ -0,0 +1,78 @@
+package com.ruoyi.export.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 文章对象 export_article
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("export_article")
+public class ExportArticle extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 文章主键
+ */
+ @TableId(value = "article_id")
+ private Long articleId;
+ /**
+ * 所属文章分类ID
+ */
+ private Long categoryId;
+ /**
+ * 语言编码
+ */
+ private String langCode;
+ /**
+ * SEO 友好链接
+ */
+ private String slug;
+ /**
+ * 文章标题
+ */
+ private String title;
+ /**
+ * 摘要
+ */
+ private String summary;
+ /**
+ * 文章内容
+ */
+ private String content;
+ /**
+ * 发布状态(0=未发布,1=已发布)
+ */
+ private Integer isPublished;
+ /**
+ * 发布时间
+ */
+ private Date publishedTime;
+ /**
+ * 排序
+ */
+ private Long sortOrder;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/domain/ExportArticleCategory.java b/fad-export/src/main/java/com/ruoyi/export/domain/ExportArticleCategory.java
new file mode 100644
index 0000000..da3885b
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/domain/ExportArticleCategory.java
@@ -0,0 +1,64 @@
+package com.ruoyi.export.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 文章分类对象 export_article_category
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("export_article_category")
+public class ExportArticleCategory extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 文章分类主键
+ */
+ @TableId(value = "category_id")
+ private Long categoryId;
+ /**
+ * 上级分类ID
+ */
+ private Long parentId;
+ /**
+ * 语言编码
+ */
+ private String langCode;
+ /**
+ * 分类名称
+ */
+ private String categoryName;
+ /**
+ * 分类描述
+ */
+ private String description;
+ /**
+ * 排序
+ */
+ private Long sortOrder;
+ /**
+ * 是否启用(0=否,1=是)
+ */
+ private Integer isEnabled;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/domain/ExportCarousel.java b/fad-export/src/main/java/com/ruoyi/export/domain/ExportCarousel.java
new file mode 100644
index 0000000..5c8e5e2
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/domain/ExportCarousel.java
@@ -0,0 +1,68 @@
+package com.ruoyi.export.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 轮播图对象 export_carousel
+ *
+ * @author ruoyi
+ * @date 2025-07-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("export_carousel")
+public class ExportCarousel extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 轮播图主键
+ */
+ @TableId(value = "carousel_id")
+ private Long carouselId;
+ /**
+ * 语言编码
+ */
+ private String langCode;
+ /**
+ * 轮播标题
+ */
+ private String title;
+ /**
+ * 轮播说明
+ */
+ private String caption;
+ /**
+ * 图片链接
+ */
+ private String imageUrl;
+ /**
+ * 点击跳转 URL
+ */
+ private String linkUrl;
+ /**
+ * 排序
+ */
+ private Long sortOrder;
+ /**
+ * 是否启用(0=否,1=是)
+ */
+ private Integer isEnabled;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportArticleBo.java b/fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportArticleBo.java
new file mode 100644
index 0000000..b132694
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportArticleBo.java
@@ -0,0 +1,82 @@
+package com.ruoyi.export.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 文章业务对象 export_article
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ExportArticleBo extends BaseEntity {
+
+ /**
+ * 文章主键
+ */
+ private Long articleId;
+
+ /**
+ * 所属文章分类ID
+ */
+ private Long categoryId;
+
+ /**
+ * 语言编码
+ */
+ private String langCode;
+
+ /**
+ * SEO 友好链接
+ */
+ private String slug;
+
+ /**
+ * 文章标题
+ */
+ private String title;
+
+ /**
+ * 摘要
+ */
+ private String summary;
+
+ /**
+ * 文章内容
+ */
+ private String content;
+
+ /**
+ * 发布状态(0=未发布,1=已发布)
+ */
+ private Integer isPublished;
+
+ /**
+ * 发布时间
+ */
+ private Date publishedTime;
+
+ /**
+ * 排序
+ */
+ private Long sortOrder;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportArticleCategoryBo.java b/fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportArticleCategoryBo.java
new file mode 100644
index 0000000..204d7dc
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportArticleCategoryBo.java
@@ -0,0 +1,65 @@
+package com.ruoyi.export.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 文章分类业务对象 export_article_category
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ExportArticleCategoryBo extends BaseEntity {
+
+ /**
+ * 文章分类主键
+ */
+ private Long categoryId;
+
+ /**
+ * 上级分类ID
+ */
+ private Long parentId;
+
+ /**
+ * 语言编码
+ */
+ private String langCode;
+
+ /**
+ * 分类名称
+ */
+ private String categoryName;
+
+ /**
+ * 分类描述
+ */
+ private String description;
+
+ /**
+ * 排序
+ */
+ private Long sortOrder;
+
+ /**
+ * 是否启用(0=否,1=是)
+ */
+ private Integer isEnabled;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportCarouselBo.java b/fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportCarouselBo.java
new file mode 100644
index 0000000..0c55143
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/domain/bo/ExportCarouselBo.java
@@ -0,0 +1,70 @@
+package com.ruoyi.export.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 轮播图业务对象 export_carousel
+ *
+ * @author ruoyi
+ * @date 2025-07-16
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ExportCarouselBo extends BaseEntity {
+
+ /**
+ * 轮播图主键
+ */
+ private Long carouselId;
+
+ /**
+ * 语言编码
+ */
+ private String langCode;
+
+ /**
+ * 轮播标题
+ */
+ private String title;
+
+ /**
+ * 轮播说明
+ */
+ private String caption;
+
+ /**
+ * 图片链接
+ */
+ private String imageUrl;
+
+ /**
+ * 点击跳转 URL
+ */
+ private String linkUrl;
+
+ /**
+ * 排序
+ */
+ private Long sortOrder;
+
+ /**
+ * 是否启用(0=否,1=是)
+ */
+ private Integer isEnabled;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportArticleCategoryVo.java b/fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportArticleCategoryVo.java
new file mode 100644
index 0000000..71e3fe2
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportArticleCategoryVo.java
@@ -0,0 +1,74 @@
+package com.ruoyi.export.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 文章分类视图对象 export_article_category
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class ExportArticleCategoryVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 文章分类主键
+ */
+ @ExcelProperty(value = "文章分类主键")
+ private Long categoryId;
+
+ /**
+ * 上级分类ID
+ */
+ @ExcelProperty(value = "上级分类ID")
+ private Long parentId;
+
+ /**
+ * 语言编码
+ */
+ @ExcelProperty(value = "语言编码")
+ private String langCode;
+
+ /**
+ * 分类名称
+ */
+ @ExcelProperty(value = "分类名称")
+ private String categoryName;
+
+ /**
+ * 分类描述
+ */
+ @ExcelProperty(value = "分类描述")
+ private String description;
+
+ /**
+ * 排序
+ */
+ @ExcelProperty(value = "排序")
+ private Long sortOrder;
+
+ /**
+ * 是否启用(0=否,1=是)
+ */
+ @ExcelProperty(value = "是否启用", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "0==否,1=是")
+ private Integer isEnabled;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportArticleVo.java b/fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportArticleVo.java
new file mode 100644
index 0000000..7006e78
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportArticleVo.java
@@ -0,0 +1,92 @@
+package com.ruoyi.export.domain.vo;
+
+import java.util.Date;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+
+/**
+ * 文章视图对象 export_article
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class ExportArticleVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 文章主键
+ */
+ @ExcelProperty(value = "文章主键")
+ private Long articleId;
+
+ /**
+ * 所属文章分类ID
+ */
+ @ExcelProperty(value = "所属文章分类ID")
+ private Long categoryId;
+
+ /**
+ * 语言编码
+ */
+ @ExcelProperty(value = "语言编码")
+ private String langCode;
+
+ /**
+ * SEO 友好链接
+ */
+ @ExcelProperty(value = "SEO 友好链接")
+ private String slug;
+
+ /**
+ * 文章标题
+ */
+ @ExcelProperty(value = "文章标题")
+ private String title;
+
+ /**
+ * 摘要
+ */
+ @ExcelProperty(value = "摘要")
+ private String summary;
+
+ /**
+ * 文章内容
+ */
+ @ExcelProperty(value = "文章内容")
+ private String content;
+
+ /**
+ * 发布状态(0=未发布,1=已发布)
+ */
+ @ExcelProperty(value = "发布状态", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "0==未发布,1=已发布")
+ private Integer isPublished;
+
+ /**
+ * 发布时间
+ */
+ @ExcelProperty(value = "发布时间")
+ private Date publishedTime;
+
+ /**
+ * 排序
+ */
+ @ExcelProperty(value = "排序")
+ private Long sortOrder;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportCarouselVo.java b/fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportCarouselVo.java
new file mode 100644
index 0000000..49f8181
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/domain/vo/ExportCarouselVo.java
@@ -0,0 +1,80 @@
+package com.ruoyi.export.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 轮播图视图对象 export_carousel
+ *
+ * @author ruoyi
+ * @date 2025-07-16
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class ExportCarouselVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 轮播图主键
+ */
+ @ExcelProperty(value = "轮播图主键")
+ private Long carouselId;
+
+ /**
+ * 语言编码
+ */
+ @ExcelProperty(value = "语言编码")
+ private String langCode;
+
+ /**
+ * 轮播标题
+ */
+ @ExcelProperty(value = "轮播标题")
+ private String title;
+
+ /**
+ * 轮播说明
+ */
+ @ExcelProperty(value = "轮播说明")
+ private String caption;
+
+ /**
+ * 图片链接
+ */
+ @ExcelProperty(value = "图片链接")
+ private String imageUrl;
+
+ /**
+ * 点击跳转 URL
+ */
+ @ExcelProperty(value = "点击跳转 URL")
+ private String linkUrl;
+
+ /**
+ * 排序
+ */
+ @ExcelProperty(value = "排序")
+ private Long sortOrder;
+
+ /**
+ * 是否启用(0=否,1=是)
+ */
+ @ExcelProperty(value = "是否启用", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "0==否,1=是")
+ private Integer isEnabled;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/mapper/ExportArticleCategoryMapper.java b/fad-export/src/main/java/com/ruoyi/export/mapper/ExportArticleCategoryMapper.java
new file mode 100644
index 0000000..f5485e2
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/mapper/ExportArticleCategoryMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.export.mapper;
+
+import com.ruoyi.export.domain.ExportArticleCategory;
+import com.ruoyi.export.domain.vo.ExportArticleCategoryVo;
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 文章分类Mapper接口
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+public interface ExportArticleCategoryMapper extends BaseMapperPlus {
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/mapper/ExportArticleMapper.java b/fad-export/src/main/java/com/ruoyi/export/mapper/ExportArticleMapper.java
new file mode 100644
index 0000000..d58fb08
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/mapper/ExportArticleMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.export.mapper;
+
+import com.ruoyi.export.domain.ExportArticle;
+import com.ruoyi.export.domain.vo.ExportArticleVo;
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 文章Mapper接口
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+public interface ExportArticleMapper extends BaseMapperPlus {
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/mapper/ExportCarouselMapper.java b/fad-export/src/main/java/com/ruoyi/export/mapper/ExportCarouselMapper.java
new file mode 100644
index 0000000..99342c1
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/mapper/ExportCarouselMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.export.mapper;
+
+import com.ruoyi.export.domain.ExportCarousel;
+import com.ruoyi.export.domain.vo.ExportCarouselVo;
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 轮播图Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-07-16
+ */
+public interface ExportCarouselMapper extends BaseMapperPlus {
+
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/service/IExportArticleCategoryService.java b/fad-export/src/main/java/com/ruoyi/export/service/IExportArticleCategoryService.java
new file mode 100644
index 0000000..943970f
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/service/IExportArticleCategoryService.java
@@ -0,0 +1,49 @@
+package com.ruoyi.export.service;
+
+import com.ruoyi.export.domain.ExportArticleCategory;
+import com.ruoyi.export.domain.vo.ExportArticleCategoryVo;
+import com.ruoyi.export.domain.bo.ExportArticleCategoryBo;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.domain.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 文章分类Service接口
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+public interface IExportArticleCategoryService {
+
+ /**
+ * 查询文章分类
+ */
+ ExportArticleCategoryVo queryById(Long categoryId);
+
+ /**
+ * 查询文章分类列表
+ */
+ TableDataInfo queryPageList(ExportArticleCategoryBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询文章分类列表
+ */
+ List queryList(ExportArticleCategoryBo bo);
+
+ /**
+ * 新增文章分类
+ */
+ Boolean insertByBo(ExportArticleCategoryBo bo);
+
+ /**
+ * 修改文章分类
+ */
+ Boolean updateByBo(ExportArticleCategoryBo bo);
+
+ /**
+ * 校验并批量删除文章分类信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/service/IExportArticleService.java b/fad-export/src/main/java/com/ruoyi/export/service/IExportArticleService.java
new file mode 100644
index 0000000..28abcc1
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/service/IExportArticleService.java
@@ -0,0 +1,49 @@
+package com.ruoyi.export.service;
+
+import com.ruoyi.export.domain.ExportArticle;
+import com.ruoyi.export.domain.vo.ExportArticleVo;
+import com.ruoyi.export.domain.bo.ExportArticleBo;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.domain.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 文章Service接口
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+public interface IExportArticleService {
+
+ /**
+ * 查询文章
+ */
+ ExportArticleVo queryById(Long articleId);
+
+ /**
+ * 查询文章列表
+ */
+ TableDataInfo queryPageList(ExportArticleBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询文章列表
+ */
+ List queryList(ExportArticleBo bo);
+
+ /**
+ * 新增文章
+ */
+ Boolean insertByBo(ExportArticleBo bo);
+
+ /**
+ * 修改文章
+ */
+ Boolean updateByBo(ExportArticleBo bo);
+
+ /**
+ * 校验并批量删除文章信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/service/IExportCarouselService.java b/fad-export/src/main/java/com/ruoyi/export/service/IExportCarouselService.java
new file mode 100644
index 0000000..a71dab2
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/service/IExportCarouselService.java
@@ -0,0 +1,49 @@
+package com.ruoyi.export.service;
+
+import com.ruoyi.export.domain.ExportCarousel;
+import com.ruoyi.export.domain.vo.ExportCarouselVo;
+import com.ruoyi.export.domain.bo.ExportCarouselBo;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.domain.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 轮播图Service接口
+ *
+ * @author ruoyi
+ * @date 2025-07-16
+ */
+public interface IExportCarouselService {
+
+ /**
+ * 查询轮播图
+ */
+ ExportCarouselVo queryById(Long carouselId);
+
+ /**
+ * 查询轮播图列表
+ */
+ TableDataInfo queryPageList(ExportCarouselBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询轮播图列表
+ */
+ List queryList(ExportCarouselBo bo);
+
+ /**
+ * 新增轮播图
+ */
+ Boolean insertByBo(ExportCarouselBo bo);
+
+ /**
+ * 修改轮播图
+ */
+ Boolean updateByBo(ExportCarouselBo bo);
+
+ /**
+ * 校验并批量删除轮播图信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/service/impl/ExportArticleCategoryServiceImpl.java b/fad-export/src/main/java/com/ruoyi/export/service/impl/ExportArticleCategoryServiceImpl.java
new file mode 100644
index 0000000..0e5d366
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/service/impl/ExportArticleCategoryServiceImpl.java
@@ -0,0 +1,114 @@
+package com.ruoyi.export.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.ruoyi.export.domain.bo.ExportArticleCategoryBo;
+import com.ruoyi.export.domain.vo.ExportArticleCategoryVo;
+import com.ruoyi.export.domain.ExportArticleCategory;
+import com.ruoyi.export.mapper.ExportArticleCategoryMapper;
+import com.ruoyi.export.service.IExportArticleCategoryService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 文章分类Service业务层处理
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+@RequiredArgsConstructor
+@Service
+public class ExportArticleCategoryServiceImpl implements IExportArticleCategoryService {
+
+ private final ExportArticleCategoryMapper baseMapper;
+
+ /**
+ * 查询文章分类
+ */
+ @Override
+ public ExportArticleCategoryVo queryById(Long categoryId){
+ return baseMapper.selectVoById(categoryId);
+ }
+
+ /**
+ * 查询文章分类列表
+ */
+ @Override
+ public TableDataInfo queryPageList(ExportArticleCategoryBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询文章分类列表
+ */
+ @Override
+ public List queryList(ExportArticleCategoryBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(ExportArticleCategoryBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(bo.getParentId() != null, ExportArticleCategory::getParentId, bo.getParentId());
+ lqw.eq(StringUtils.isNotBlank(bo.getLangCode()), ExportArticleCategory::getLangCode, bo.getLangCode());
+ lqw.like(StringUtils.isNotBlank(bo.getCategoryName()), ExportArticleCategory::getCategoryName, bo.getCategoryName());
+ lqw.eq(StringUtils.isNotBlank(bo.getDescription()), ExportArticleCategory::getDescription, bo.getDescription());
+ lqw.eq(bo.getSortOrder() != null, ExportArticleCategory::getSortOrder, bo.getSortOrder());
+ lqw.eq(bo.getIsEnabled() != null, ExportArticleCategory::getIsEnabled, bo.getIsEnabled());
+ return lqw;
+ }
+
+ /**
+ * 新增文章分类
+ */
+ @Override
+ public Boolean insertByBo(ExportArticleCategoryBo bo) {
+ ExportArticleCategory add = BeanUtil.toBean(bo, ExportArticleCategory.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setCategoryId(add.getCategoryId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改文章分类
+ */
+ @Override
+ public Boolean updateByBo(ExportArticleCategoryBo bo) {
+ ExportArticleCategory update = BeanUtil.toBean(bo, ExportArticleCategory.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(ExportArticleCategory entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除文章分类
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/service/impl/ExportArticleServiceImpl.java b/fad-export/src/main/java/com/ruoyi/export/service/impl/ExportArticleServiceImpl.java
new file mode 100644
index 0000000..43d9811
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/service/impl/ExportArticleServiceImpl.java
@@ -0,0 +1,117 @@
+package com.ruoyi.export.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.ruoyi.export.domain.bo.ExportArticleBo;
+import com.ruoyi.export.domain.vo.ExportArticleVo;
+import com.ruoyi.export.domain.ExportArticle;
+import com.ruoyi.export.mapper.ExportArticleMapper;
+import com.ruoyi.export.service.IExportArticleService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 文章Service业务层处理
+ *
+ * @author JR
+ * @date 2025-07-16
+ */
+@RequiredArgsConstructor
+@Service
+public class ExportArticleServiceImpl implements IExportArticleService {
+
+ private final ExportArticleMapper baseMapper;
+
+ /**
+ * 查询文章
+ */
+ @Override
+ public ExportArticleVo queryById(Long articleId){
+ return baseMapper.selectVoById(articleId);
+ }
+
+ /**
+ * 查询文章列表
+ */
+ @Override
+ public TableDataInfo queryPageList(ExportArticleBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询文章列表
+ */
+ @Override
+ public List queryList(ExportArticleBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(ExportArticleBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(bo.getCategoryId() != null, ExportArticle::getCategoryId, bo.getCategoryId());
+ lqw.eq(StringUtils.isNotBlank(bo.getLangCode()), ExportArticle::getLangCode, bo.getLangCode());
+ lqw.eq(StringUtils.isNotBlank(bo.getSlug()), ExportArticle::getSlug, bo.getSlug());
+ lqw.eq(StringUtils.isNotBlank(bo.getTitle()), ExportArticle::getTitle, bo.getTitle());
+ lqw.eq(StringUtils.isNotBlank(bo.getSummary()), ExportArticle::getSummary, bo.getSummary());
+ lqw.eq(StringUtils.isNotBlank(bo.getContent()), ExportArticle::getContent, bo.getContent());
+ lqw.eq(bo.getIsPublished() != null, ExportArticle::getIsPublished, bo.getIsPublished());
+ lqw.eq(bo.getPublishedTime() != null, ExportArticle::getPublishedTime, bo.getPublishedTime());
+ lqw.eq(bo.getSortOrder() != null, ExportArticle::getSortOrder, bo.getSortOrder());
+ return lqw;
+ }
+
+ /**
+ * 新增文章
+ */
+ @Override
+ public Boolean insertByBo(ExportArticleBo bo) {
+ ExportArticle add = BeanUtil.toBean(bo, ExportArticle.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setArticleId(add.getArticleId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改文章
+ */
+ @Override
+ public Boolean updateByBo(ExportArticleBo bo) {
+ ExportArticle update = BeanUtil.toBean(bo, ExportArticle.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(ExportArticle entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除文章
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/fad-export/src/main/java/com/ruoyi/export/service/impl/ExportCarouselServiceImpl.java b/fad-export/src/main/java/com/ruoyi/export/service/impl/ExportCarouselServiceImpl.java
new file mode 100644
index 0000000..57f879f
--- /dev/null
+++ b/fad-export/src/main/java/com/ruoyi/export/service/impl/ExportCarouselServiceImpl.java
@@ -0,0 +1,115 @@
+package com.ruoyi.export.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.ruoyi.export.domain.bo.ExportCarouselBo;
+import com.ruoyi.export.domain.vo.ExportCarouselVo;
+import com.ruoyi.export.domain.ExportCarousel;
+import com.ruoyi.export.mapper.ExportCarouselMapper;
+import com.ruoyi.export.service.IExportCarouselService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 轮播图Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-07-16
+ */
+@RequiredArgsConstructor
+@Service
+public class ExportCarouselServiceImpl implements IExportCarouselService {
+
+ private final ExportCarouselMapper baseMapper;
+
+ /**
+ * 查询轮播图
+ */
+ @Override
+ public ExportCarouselVo queryById(Long carouselId){
+ return baseMapper.selectVoById(carouselId);
+ }
+
+ /**
+ * 查询轮播图列表
+ */
+ @Override
+ public TableDataInfo queryPageList(ExportCarouselBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询轮播图列表
+ */
+ @Override
+ public List queryList(ExportCarouselBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(ExportCarouselBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getLangCode()), ExportCarousel::getLangCode, bo.getLangCode());
+ lqw.eq(StringUtils.isNotBlank(bo.getTitle()), ExportCarousel::getTitle, bo.getTitle());
+ lqw.eq(StringUtils.isNotBlank(bo.getCaption()), ExportCarousel::getCaption, bo.getCaption());
+ lqw.eq(StringUtils.isNotBlank(bo.getImageUrl()), ExportCarousel::getImageUrl, bo.getImageUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getLinkUrl()), ExportCarousel::getLinkUrl, bo.getLinkUrl());
+ lqw.eq(bo.getSortOrder() != null, ExportCarousel::getSortOrder, bo.getSortOrder());
+ lqw.eq(bo.getIsEnabled() != null, ExportCarousel::getIsEnabled, bo.getIsEnabled());
+ return lqw;
+ }
+
+ /**
+ * 新增轮播图
+ */
+ @Override
+ public Boolean insertByBo(ExportCarouselBo bo) {
+ ExportCarousel add = BeanUtil.toBean(bo, ExportCarousel.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setCarouselId(add.getCarouselId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改轮播图
+ */
+ @Override
+ public Boolean updateByBo(ExportCarouselBo bo) {
+ ExportCarousel update = BeanUtil.toBean(bo, ExportCarousel.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(ExportCarousel entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除轮播图
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/fad-export/src/main/resources/mapper/export/ExportArticleCategoryMapper.xml b/fad-export/src/main/resources/mapper/export/ExportArticleCategoryMapper.xml
new file mode 100644
index 0000000..e8447ea
--- /dev/null
+++ b/fad-export/src/main/resources/mapper/export/ExportArticleCategoryMapper.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/fad-export/src/main/resources/mapper/export/ExportArticleMapper.xml b/fad-export/src/main/resources/mapper/export/ExportArticleMapper.xml
new file mode 100644
index 0000000..2324bf5
--- /dev/null
+++ b/fad-export/src/main/resources/mapper/export/ExportArticleMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/fad-export/src/main/resources/mapper/export/ExportCarouselMapper.xml b/fad-export/src/main/resources/mapper/export/ExportCarouselMapper.xml
new file mode 100644
index 0000000..fe1f519
--- /dev/null
+++ b/fad-export/src/main/resources/mapper/export/ExportCarouselMapper.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index ebd0e57..416ba28 100644
--- a/pom.xml
+++ b/pom.xml
@@ -373,6 +373,13 @@
${ruoyi-flowable-plus.version}
+
+
+ com.ruoyi
+ fad-export
+ ${ruoyi-flowable-plus.version}
+
+
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 41397ff..6c8c4c1 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -89,6 +89,12 @@
fad-app
+
+
+ com.ruoyi
+ fad-export
+
+
com.ruoyi
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseTaskServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseTaskServiceImpl.java
index 6202988..2e39211 100644
--- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseTaskServiceImpl.java
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseTaskServiceImpl.java
@@ -180,6 +180,7 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService
sysOaWarehouseMaster.setType(1L);
sysOaWarehouseMaster.setMasterNum(UUID.randomUUID().toString());
sysOaWarehouseMaster.setSignUser(LoginHelper.getNickName());
+ sysOaWarehouseMaster.setRemark(bo.getRemark());
masterMapper.insert(sysOaWarehouseMaster);
// 此masterId就是新的入库单id
masterId = sysOaWarehouseMaster.getMasterId();
@@ -250,6 +251,7 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService
sysOaWarehouseDetailBo.setSignPrice(bo.getPrice());
sysOaWarehouseDetailBo.setWarehouseId(warehouseId);
sysOaWarehouseDetailBo.setType(1L);
+ sysOaWarehouseDetailBo.setRemark(bo.getRemark());
detailService.insertByBo(sysOaWarehouseDetailBo);
SysOaWarehouseTask bean = BeanUtil.toBean(bo, SysOaWarehouseTask.class);
// 最后将此物料更新为完成入库