Просмотр исходного кода

Merge remote-tracking branch 'origin/master' into master

肖路 4 недель назад
Родитель
Сommit
8916995279
100 измененных файлов с 7640 добавлено и 1 удалено
  1. 3 1
      ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java
  2. 114 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpAdLeftController.java
  3. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpAdModuleConfigController.java
  4. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpAdModuleItemController.java
  5. 108 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpCarouselController.java
  6. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpCategoryItemController.java
  7. 107 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpCategoryMainController.java
  8. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpHeaderCategoryController.java
  9. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpHotWordController.java
  10. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpQuickEntryItemsController.java
  11. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpQuickEntryModuleController.java
  12. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpRecommendCategoryConfigController.java
  13. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpRecommendThemeConfigController.java
  14. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpScenarioCardsController.java
  15. 106 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpScenarioGlobalSettingsController.java
  16. 115 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpSearchConfigController.java
  17. 57 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpAdLeft.java
  18. 89 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpAdModuleConfig.java
  19. 90 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpAdModuleItem.java
  20. 67 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpCarousel.java
  21. 67 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpCategoryItem.java
  22. 77 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpCategoryMain.java
  23. 67 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpHeaderCategory.java
  24. 62 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpHotWord.java
  25. 77 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpQuickEntryItems.java
  26. 52 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpQuickEntryModule.java
  27. 87 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpRecommendCategoryConfig.java
  28. 52 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpRecommendThemeConfig.java
  29. 72 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpScenarioCards.java
  30. 67 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpScenarioGlobalSettings.java
  31. 96 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpSearchConfig.java
  32. 49 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpAdLeftBo.java
  33. 81 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpAdModuleConfigBo.java
  34. 83 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpAdModuleItemBo.java
  35. 59 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpCarouselBo.java
  36. 59 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpCategoryItemBo.java
  37. 76 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpCategoryMainBo.java
  38. 61 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpHeaderCategoryBo.java
  39. 52 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpHotWordBo.java
  40. 69 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpQuickEntryItemsBo.java
  41. 44 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpQuickEntryModuleBo.java
  42. 79 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpRecommendCategoryConfigBo.java
  43. 44 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpRecommendThemeConfigBo.java
  44. 64 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpScenarioCardsBo.java
  45. 59 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpScenarioGlobalSettingsBo.java
  46. 96 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpSearchConfigBo.java
  47. 64 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpAdLeftVo.java
  48. 98 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpAdModuleConfigVo.java
  49. 101 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpAdModuleItemVo.java
  50. 76 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpCarouselVo.java
  51. 74 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpCategoryItemVo.java
  52. 95 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpCategoryMainVo.java
  53. 143 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpCategoryResponseVo.java
  54. 74 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpHeaderCategoryVo.java
  55. 65 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpHotWordVo.java
  56. 86 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpQuickEntryItemsVo.java
  57. 56 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpQuickEntryModuleVo.java
  58. 98 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpRecommendCategoryConfigVo.java
  59. 56 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpRecommendThemeConfigVo.java
  60. 80 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpScenarioCardsVo.java
  61. 74 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpScenarioGlobalSettingsVo.java
  62. 115 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpSearchConfigVo.java
  63. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpAdLeftMapper.java
  64. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpAdModuleConfigMapper.java
  65. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpAdModuleItemMapper.java
  66. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpCarouselMapper.java
  67. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpCategoryItemMapper.java
  68. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpCategoryMainMapper.java
  69. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpHeaderCategoryMapper.java
  70. 16 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpHotWordMapper.java
  71. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpQuickEntryItemsMapper.java
  72. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpQuickEntryModuleMapper.java
  73. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpRecommendCategoryConfigMapper.java
  74. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpRecommendThemeConfigMapper.java
  75. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpScenarioCardsMapper.java
  76. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpScenarioGlobalSettingsMapper.java
  77. 15 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpSearchConfigMapper.java
  78. 76 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpAdLeftService.java
  79. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpAdModuleConfigService.java
  80. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpAdModuleItemService.java
  81. 74 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpCarouselService.java
  82. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpCategoryItemService.java
  83. 71 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpCategoryMainService.java
  84. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpHeaderCategoryService.java
  85. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpHotWordService.java
  86. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpQuickEntryItemsService.java
  87. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpQuickEntryModuleService.java
  88. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpRecommendCategoryConfigService.java
  89. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpRecommendThemeConfigService.java
  90. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpScenarioCardsService.java
  91. 70 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpScenarioGlobalSettingsService.java
  92. 77 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpSearchConfigService.java
  93. 150 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpAdLeftServiceImpl.java
  94. 176 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpAdModuleConfigServiceImpl.java
  95. 142 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpAdModuleItemServiceImpl.java
  96. 143 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpCarouselServiceImpl.java
  97. 138 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpCategoryItemServiceImpl.java
  98. 300 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpCategoryMainServiceImpl.java
  99. 138 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpHeaderCategoryServiceImpl.java
  100. 137 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpHotWordServiceImpl.java

+ 3 - 1
ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java

@@ -125,7 +125,8 @@ public class PlatformDataScopeInterceptor implements Interceptor {
         "sys_user_wechat",
         "mini_page_set",
         "maintain_info",
-        "maintenance_server_item"
+        "maintenance_server_item",
+        "ep_"
         // 注意:前缀匹配需特殊处理(如 qrtz_),见 isIgnoreTable 方法
     ));
 
@@ -248,6 +249,7 @@ public class PlatformDataScopeInterceptor implements Interceptor {
             || tableName.startsWith("external_")
             || tableName.startsWith("protocol_")
             || tableName.startsWith("ns_diy_")
+            || tableName.startsWith("ep_")
             ;
     }
 

+ 114 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpAdLeftController.java

@@ -0,0 +1,114 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpAdLeftVo;
+import org.dromara.mall.domain.bo.EpAdLeftBo;
+import org.dromara.mall.service.IEpAdLeftService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 首页左侧广告配置
+ * 前端访问路由地址为:/mall/adLeft
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/adLeft")
+public class EpAdLeftController extends BaseController {
+
+    private final IEpAdLeftService epAdLeftService;
+
+    /**
+     * 查询首页左侧广告配置列表
+     */
+    //@SaCheckPermission("mall:adLeft:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpAdLeftVo> list(EpAdLeftBo bo, PageQuery pageQuery) {
+        return epAdLeftService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出首页左侧广告配置列表
+     */
+    //@SaCheckPermission("mall:adLeft:export")
+    @Log(title = "首页左侧广告配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpAdLeftBo bo, HttpServletResponse response) {
+        List<EpAdLeftVo> list = epAdLeftService.queryList(bo);
+        ExcelUtil.exportExcel(list, "首页左侧广告配置", EpAdLeftVo.class, response);
+    }
+
+    /**
+     * 获取首页左侧广告配置详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:adLeft:query")
+    @GetMapping("/{id}")
+    public R<EpAdLeftVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epAdLeftService.queryById(id));
+    }
+
+    /**
+     * 新增首页左侧广告配置
+     */
+    //@SaCheckPermission("mall:adLeft:add")
+    @Log(title = "首页左侧广告配置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpAdLeftBo bo) {
+        return toAjax(epAdLeftService.insertByBo(bo));
+    }
+
+    /**
+     * 修改首页左侧广告配置
+     */
+    //@SaCheckPermission("mall:adLeft:edit")
+    @Log(title = "首页左侧广告配置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpAdLeftBo bo) {
+        return toAjax(epAdLeftService.updateByBo(bo));
+    }
+
+    /**
+     * 删除首页左侧广告配置
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:adLeft:remove")
+    @Log(title = "首页左侧广告配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epAdLeftService.deleteWithValidByIds(List.of(ids), true));
+    }
+
+    /**
+     * 获取当前左侧广告设置
+     */
+    @GetMapping("/current")
+    public R<EpAdLeftVo> getCurrent() {
+        return R.ok(epAdLeftService.getCurrentAdLeft());
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpAdModuleConfigController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpAdModuleConfigVo;
+import org.dromara.mall.domain.bo.EpAdModuleConfigBo;
+import org.dromara.mall.service.IEpAdModuleConfigService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 广告模块主配置
+ * 前端访问路由地址为:/mall/adModuleConfig
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/adModuleConfig")
+public class EpAdModuleConfigController extends BaseController {
+
+    private final IEpAdModuleConfigService epAdModuleConfigService;
+
+    /**
+     * 查询广告模块主配置列表
+     */
+    //@SaCheckPermission("mall:adModuleConfig:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpAdModuleConfigVo> list(EpAdModuleConfigBo bo, PageQuery pageQuery) {
+        return epAdModuleConfigService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出广告模块主配置列表
+     */
+    //@SaCheckPermission("mall:adModuleConfig:export")
+    @Log(title = "广告模块主配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpAdModuleConfigBo bo, HttpServletResponse response) {
+        List<EpAdModuleConfigVo> list = epAdModuleConfigService.queryList(bo);
+        ExcelUtil.exportExcel(list, "广告模块主配置", EpAdModuleConfigVo.class, response);
+    }
+
+    /**
+     * 获取广告模块主配置详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:adModuleConfig:query")
+    @GetMapping("/{id}")
+    public R<EpAdModuleConfigVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epAdModuleConfigService.queryById(id));
+    }
+
+    /**
+     * 新增广告模块主配置
+     */
+    //@SaCheckPermission("mall:adModuleConfig:add")
+    @Log(title = "广告模块主配置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpAdModuleConfigBo bo) {
+        return toAjax(epAdModuleConfigService.insertByBo(bo));
+    }
+
+    /**
+     * 修改广告模块主配置
+     */
+    //@SaCheckPermission("mall:adModuleConfig:edit")
+    @Log(title = "广告模块主配置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpAdModuleConfigBo bo) {
+        return toAjax(epAdModuleConfigService.updateByBo(bo));
+    }
+
+    /**
+     * 删除广告模块主配置
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:adModuleConfig:remove")
+    @Log(title = "广告模块主配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epAdModuleConfigService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpAdModuleItemController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpAdModuleItemVo;
+import org.dromara.mall.domain.bo.EpAdModuleItemBo;
+import org.dromara.mall.service.IEpAdModuleItemService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 广告模块子项
+ * 前端访问路由地址为:/mall/adModuleItem
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/adModuleItem")
+public class EpAdModuleItemController extends BaseController {
+
+    private final IEpAdModuleItemService epAdModuleItemService;
+
+    /**
+     * 查询广告模块子项列表
+     */
+    //@SaCheckPermission("mall:adModuleItem:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpAdModuleItemVo> list(EpAdModuleItemBo bo, PageQuery pageQuery) {
+        return epAdModuleItemService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出广告模块子项列表
+     */
+    //@SaCheckPermission("mall:adModuleItem:export")
+    @Log(title = "广告模块子项", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpAdModuleItemBo bo, HttpServletResponse response) {
+        List<EpAdModuleItemVo> list = epAdModuleItemService.queryList(bo);
+        ExcelUtil.exportExcel(list, "广告模块子项", EpAdModuleItemVo.class, response);
+    }
+
+    /**
+     * 获取广告模块子项详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:adModuleItem:query")
+    @GetMapping("/{id}")
+    public R<EpAdModuleItemVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epAdModuleItemService.queryById(id));
+    }
+
+    /**
+     * 新增广告模块子项
+     */
+    //@SaCheckPermission("mall:adModuleItem:add")
+    @Log(title = "广告模块子项", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpAdModuleItemBo bo) {
+        return toAjax(epAdModuleItemService.insertByBo(bo));
+    }
+
+    /**
+     * 修改广告模块子项
+     */
+    //@SaCheckPermission("mall:adModuleItem:edit")
+    @Log(title = "广告模块子项", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpAdModuleItemBo bo) {
+        return toAjax(epAdModuleItemService.updateByBo(bo));
+    }
+
+    /**
+     * 删除广告模块子项
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:adModuleItem:remove")
+    @Log(title = "广告模块子项", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epAdModuleItemService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 108 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpCarouselController.java

@@ -0,0 +1,108 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.mall.domain.vo.EpAdLeftVo;
+import org.dromara.mall.domain.vo.EpSearchConfigVo;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpCarouselVo;
+import org.dromara.mall.domain.bo.EpCarouselBo;
+import org.dromara.mall.service.IEpCarouselService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 首页广告轮播图配置
+ * 前端访问路由地址为:/mall/carousel
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/carousel")
+public class EpCarouselController extends BaseController {
+
+    private final IEpCarouselService epCarouselService;
+
+    /**
+     * 查询首页广告轮播图配置列表
+     */
+    //@SaCheckPermission("mall:carousel:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpCarouselVo> list(EpCarouselBo bo, PageQuery pageQuery) {
+        return epCarouselService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出首页广告轮播图配置列表
+     */
+    //@SaCheckPermission("mall:carousel:export")
+    @Log(title = "首页广告轮播图配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpCarouselBo bo, HttpServletResponse response) {
+        List<EpCarouselVo> list = epCarouselService.queryList(bo);
+        ExcelUtil.exportExcel(list, "首页广告轮播图配置", EpCarouselVo.class, response);
+    }
+
+    /**
+     * 获取首页广告轮播图配置详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:carousel:query")
+    @GetMapping("/{id}")
+    public R<EpCarouselVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epCarouselService.queryById(id));
+    }
+
+    /**
+     * 新增首页广告轮播图配置
+     */
+    //@SaCheckPermission("mall:carousel:add")
+    @Log(title = "首页广告轮播图配置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpCarouselBo bo) {
+        return toAjax(epCarouselService.insertByBo(bo));
+    }
+
+    /**
+     * 修改首页广告轮播图配置
+     */
+    //@SaCheckPermission("mall:carousel:edit")
+    @Log(title = "首页广告轮播图配置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpCarouselBo bo) {
+        return toAjax(epCarouselService.updateByBo(bo));
+    }
+
+    /**
+     * 删除首页广告轮播图配置
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:carousel:remove")
+    @Log(title = "首页广告轮播图配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epCarouselService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpCategoryItemController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpCategoryItemVo;
+import org.dromara.mall.domain.bo.EpCategoryItemBo;
+import org.dromara.mall.service.IEpCategoryItemService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 分类标签与便签关联
+ * 前端访问路由地址为:/mall/categoryItem
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/categoryItem")
+public class EpCategoryItemController extends BaseController {
+
+    private final IEpCategoryItemService epCategoryItemService;
+
+    /**
+     * 查询分类标签与便签关联列表
+     */
+    //@SaCheckPermission("mall:categoryItem:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpCategoryItemVo> list(EpCategoryItemBo bo, PageQuery pageQuery) {
+        return epCategoryItemService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出分类标签与便签关联列表
+     */
+    //@SaCheckPermission("mall:categoryItem:export")
+    @Log(title = "分类标签与便签关联", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpCategoryItemBo bo, HttpServletResponse response) {
+        List<EpCategoryItemVo> list = epCategoryItemService.queryList(bo);
+        ExcelUtil.exportExcel(list, "分类标签与便签关联", EpCategoryItemVo.class, response);
+    }
+
+    /**
+     * 获取分类标签与便签关联详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:categoryItem:query")
+    @GetMapping("/{id}")
+    public R<EpCategoryItemVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epCategoryItemService.queryById(id));
+    }
+
+    /**
+     * 新增分类标签与便签关联
+     */
+    //@SaCheckPermission("mall:categoryItem:add")
+    @Log(title = "分类标签与便签关联", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpCategoryItemBo bo) {
+        return toAjax(epCategoryItemService.insertByBo(bo));
+    }
+
+    /**
+     * 修改分类标签与便签关联
+     */
+    //@SaCheckPermission("mall:categoryItem:edit")
+    @Log(title = "分类标签与便签关联", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpCategoryItemBo bo) {
+        return toAjax(epCategoryItemService.updateByBo(bo));
+    }
+
+    /**
+     * 删除分类标签与便签关联
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:categoryItem:remove")
+    @Log(title = "分类标签与便签关联", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epCategoryItemService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 107 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpCategoryMainController.java

@@ -0,0 +1,107 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpCategoryMainVo;
+import org.dromara.mall.domain.vo.EpCategoryResponseVo;
+import org.dromara.mall.domain.bo.EpCategoryMainBo;
+import org.dromara.mall.service.IEpCategoryMainService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 分类设置主
+ * 前端访问路由地址为:/mall/categoryMain
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/categoryMain")
+public class EpCategoryMainController extends BaseController {
+
+    private final IEpCategoryMainService epCategoryMainService;
+
+    /**
+     * 查询分类设置主列表
+     */
+    //@SaCheckPermission("mall:categoryMain:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpCategoryMainVo> list(EpCategoryMainBo bo, PageQuery pageQuery) {
+        return epCategoryMainService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出分类设置主列表
+     */
+    //@SaCheckPermission("mall:categoryMain:export")
+    @Log(title = "分类设置主", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpCategoryMainBo bo, HttpServletResponse response) {
+        List<EpCategoryMainVo> list = epCategoryMainService.queryList(bo);
+        ExcelUtil.exportExcel(list, "分类设置主", EpCategoryMainVo.class, response);
+    }
+
+    /**
+     * 获取分类设置主详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:categoryMain:query")
+    @GetMapping("/{id}")
+    public R<EpCategoryMainVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epCategoryMainService.queryById(id));
+    }
+
+    /**
+     * 新增分类设置主
+     */
+    //@SaCheckPermission("mall:categoryMain:add")
+    @Log(title = "分类设置主", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpCategoryMainBo bo) {
+        return toAjax(epCategoryMainService.insertByBo(bo));
+    }
+
+    /**
+     * 修改分类设置主
+     */
+    //@SaCheckPermission("mall:categoryMain:edit")
+    @Log(title = "分类设置主", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpCategoryMainBo bo) {
+        return toAjax(epCategoryMainService.updateByBo(bo));
+    }
+
+    /**
+     * 删除分类设置主
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:categoryMain:remove")
+    @Log(title = "分类设置主", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epCategoryMainService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpHeaderCategoryController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpHeaderCategoryVo;
+import org.dromara.mall.domain.bo.EpHeaderCategoryBo;
+import org.dromara.mall.service.IEpHeaderCategoryService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 头部分类管理
+ * 前端访问路由地址为:/mall/headerCategory
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/headerCategory")
+public class EpHeaderCategoryController extends BaseController {
+
+    private final IEpHeaderCategoryService epHeaderCategoryService;
+
+    /**
+     * 查询头部分类管理列表
+     */
+    //@SaCheckPermission("mall:headerCategory:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpHeaderCategoryVo> list(EpHeaderCategoryBo bo, PageQuery pageQuery) {
+        return epHeaderCategoryService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出头部分类管理列表
+     */
+    //@SaCheckPermission("mall:headerCategory:export")
+    @Log(title = "头部分类管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpHeaderCategoryBo bo, HttpServletResponse response) {
+        List<EpHeaderCategoryVo> list = epHeaderCategoryService.queryList(bo);
+        ExcelUtil.exportExcel(list, "头部分类管理", EpHeaderCategoryVo.class, response);
+    }
+
+    /**
+     * 获取头部分类管理详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:headerCategory:query")
+    @GetMapping("/{id}")
+    public R<EpHeaderCategoryVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epHeaderCategoryService.queryById(id));
+    }
+
+    /**
+     * 新增头部分类管理
+     */
+    //@SaCheckPermission("mall:headerCategory:add")
+    @Log(title = "头部分类管理", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpHeaderCategoryBo bo) {
+        return toAjax(epHeaderCategoryService.insertByBo(bo));
+    }
+
+    /**
+     * 修改头部分类管理
+     */
+    //@SaCheckPermission("mall:headerCategory:edit")
+    @Log(title = "头部分类管理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpHeaderCategoryBo bo) {
+        return toAjax(epHeaderCategoryService.updateByBo(bo));
+    }
+
+    /**
+     * 删除头部分类管理
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:headerCategory:remove")
+    @Log(title = "头部分类管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epHeaderCategoryService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpHotWordController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.mall.domain.bo.EpHotWordBo;
+import org.dromara.mall.domain.vo.EpHotWordVo;
+import org.dromara.mall.service.IEpHotWordService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 搜索热词配置
+ * 前端访问路由地址为:/system/hotWord
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/hotWord")
+public class EpHotWordController extends BaseController {
+
+    private final IEpHotWordService epHotWordService;
+
+    /**
+     * 查询搜索热词配置列表
+     */
+    //@SaCheckPermission("system:hotWord:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpHotWordVo> list(EpHotWordBo bo, PageQuery pageQuery) {
+        return epHotWordService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出搜索热词配置列表
+     */
+    //@SaCheckPermission("system:hotWord:export")
+    @Log(title = "搜索热词配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpHotWordBo bo, HttpServletResponse response) {
+        List<EpHotWordVo> list = epHotWordService.queryList(bo);
+        ExcelUtil.exportExcel(list, "搜索热词配置", EpHotWordVo.class, response);
+    }
+
+    /**
+     * 获取搜索热词配置详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("system:hotWord:query")
+    @GetMapping("/{id}")
+    public R<EpHotWordVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epHotWordService.queryById(id));
+    }
+
+    /**
+     * 新增搜索热词配置
+     */
+    //@SaCheckPermission("system:hotWord:add")
+    @Log(title = "搜索热词配置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpHotWordBo bo) {
+        return toAjax(epHotWordService.insertByBo(bo));
+    }
+
+    /**
+     * 修改搜索热词配置
+     */
+    //@SaCheckPermission("system:hotWord:edit")
+    @Log(title = "搜索热词配置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpHotWordBo bo) {
+        return toAjax(epHotWordService.updateByBo(bo));
+    }
+
+    /**
+     * 删除搜索热词配置
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("system:hotWord:remove")
+    @Log(title = "搜索热词配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epHotWordService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpQuickEntryItemsController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpQuickEntryItemsVo;
+import org.dromara.mall.domain.bo.EpQuickEntryItemsBo;
+import org.dromara.mall.service.IEpQuickEntryItemsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 快捷入口项列
+ * 前端访问路由地址为:/mall/quickEntryItems
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/quickEntryItems")
+public class EpQuickEntryItemsController extends BaseController {
+
+    private final IEpQuickEntryItemsService epQuickEntryItemsService;
+
+    /**
+     * 查询快捷入口项列列表
+     */
+    //@SaCheckPermission("mall:quickEntryItems:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpQuickEntryItemsVo> list(EpQuickEntryItemsBo bo, PageQuery pageQuery) {
+        return epQuickEntryItemsService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出快捷入口项列列表
+     */
+    //@SaCheckPermission("mall:quickEntryItems:export")
+    @Log(title = "快捷入口项列", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpQuickEntryItemsBo bo, HttpServletResponse response) {
+        List<EpQuickEntryItemsVo> list = epQuickEntryItemsService.queryList(bo);
+        ExcelUtil.exportExcel(list, "快捷入口项列", EpQuickEntryItemsVo.class, response);
+    }
+
+    /**
+     * 获取快捷入口项列详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:quickEntryItems:query")
+    @GetMapping("/{id}")
+    public R<EpQuickEntryItemsVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epQuickEntryItemsService.queryById(id));
+    }
+
+    /**
+     * 新增快捷入口项列
+     */
+    //@SaCheckPermission("mall:quickEntryItems:add")
+    @Log(title = "快捷入口项列", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpQuickEntryItemsBo bo) {
+        return toAjax(epQuickEntryItemsService.insertByBo(bo));
+    }
+
+    /**
+     * 修改快捷入口项列
+     */
+    //@SaCheckPermission("mall:quickEntryItems:edit")
+    @Log(title = "快捷入口项列", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpQuickEntryItemsBo bo) {
+        return toAjax(epQuickEntryItemsService.updateByBo(bo));
+    }
+
+    /**
+     * 删除快捷入口项列
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:quickEntryItems:remove")
+    @Log(title = "快捷入口项列", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epQuickEntryItemsService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpQuickEntryModuleController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpQuickEntryModuleVo;
+import org.dromara.mall.domain.bo.EpQuickEntryModuleBo;
+import org.dromara.mall.service.IEpQuickEntryModuleService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 快捷入口模块配置
+ * 前端访问路由地址为:/mall/quickEntryModule
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/quickEntryModule")
+public class EpQuickEntryModuleController extends BaseController {
+
+    private final IEpQuickEntryModuleService epQuickEntryModuleService;
+
+    /**
+     * 查询快捷入口模块配置列表
+     */
+    //@SaCheckPermission("mall:quickEntryModule:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpQuickEntryModuleVo> list(EpQuickEntryModuleBo bo, PageQuery pageQuery) {
+        return epQuickEntryModuleService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出快捷入口模块配置列表
+     */
+    //@SaCheckPermission("mall:quickEntryModule:export")
+    @Log(title = "快捷入口模块配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpQuickEntryModuleBo bo, HttpServletResponse response) {
+        List<EpQuickEntryModuleVo> list = epQuickEntryModuleService.queryList(bo);
+        ExcelUtil.exportExcel(list, "快捷入口模块配置", EpQuickEntryModuleVo.class, response);
+    }
+
+    /**
+     * 获取快捷入口模块配置详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:quickEntryModule:query")
+    @GetMapping("/{id}")
+    public R<EpQuickEntryModuleVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epQuickEntryModuleService.queryById(id));
+    }
+
+    /**
+     * 新增快捷入口模块配置
+     */
+    //@SaCheckPermission("mall:quickEntryModule:add")
+    @Log(title = "快捷入口模块配置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpQuickEntryModuleBo bo) {
+        return toAjax(epQuickEntryModuleService.insertByBo(bo));
+    }
+
+    /**
+     * 修改快捷入口模块配置
+     */
+    //@SaCheckPermission("mall:quickEntryModule:edit")
+    @Log(title = "快捷入口模块配置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpQuickEntryModuleBo bo) {
+        return toAjax(epQuickEntryModuleService.updateByBo(bo));
+    }
+
+    /**
+     * 删除快捷入口模块配置
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:quickEntryModule:remove")
+    @Log(title = "快捷入口模块配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epQuickEntryModuleService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpRecommendCategoryConfigController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpRecommendCategoryConfigVo;
+import org.dromara.mall.domain.bo.EpRecommendCategoryConfigBo;
+import org.dromara.mall.service.IEpRecommendCategoryConfigService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 为你推荐分类配置
+ * 前端访问路由地址为:/mall/recommendCategoryConfig
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/recommendCategoryConfig")
+public class EpRecommendCategoryConfigController extends BaseController {
+
+    private final IEpRecommendCategoryConfigService epRecommendCategoryConfigService;
+
+    /**
+     * 查询为你推荐分类配置列表
+     */
+    //@SaCheckPermission("mall:recommendCategoryConfig:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpRecommendCategoryConfigVo> list(EpRecommendCategoryConfigBo bo, PageQuery pageQuery) {
+        return epRecommendCategoryConfigService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出为你推荐分类配置列表
+     */
+    //@SaCheckPermission("mall:recommendCategoryConfig:export")
+    @Log(title = "为你推荐分类配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpRecommendCategoryConfigBo bo, HttpServletResponse response) {
+        List<EpRecommendCategoryConfigVo> list = epRecommendCategoryConfigService.queryList(bo);
+        ExcelUtil.exportExcel(list, "为你推荐分类配置", EpRecommendCategoryConfigVo.class, response);
+    }
+
+    /**
+     * 获取为你推荐分类配置详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:recommendCategoryConfig:query")
+    @GetMapping("/{id}")
+    public R<EpRecommendCategoryConfigVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epRecommendCategoryConfigService.queryById(id));
+    }
+
+    /**
+     * 新增为你推荐分类配置
+     */
+    //@SaCheckPermission("mall:recommendCategoryConfig:add")
+    @Log(title = "为你推荐分类配置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpRecommendCategoryConfigBo bo) {
+        return toAjax(epRecommendCategoryConfigService.insertByBo(bo));
+    }
+
+    /**
+     * 修改为你推荐分类配置
+     */
+    //@SaCheckPermission("mall:recommendCategoryConfig:edit")
+    @Log(title = "为你推荐分类配置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpRecommendCategoryConfigBo bo) {
+        return toAjax(epRecommendCategoryConfigService.updateByBo(bo));
+    }
+
+    /**
+     * 删除为你推荐分类配置
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:recommendCategoryConfig:remove")
+    @Log(title = "为你推荐分类配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epRecommendCategoryConfigService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpRecommendThemeConfigController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpRecommendThemeConfigVo;
+import org.dromara.mall.domain.bo.EpRecommendThemeConfigBo;
+import org.dromara.mall.service.IEpRecommendThemeConfigService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 为你推荐全局主题配置
+ * 前端访问路由地址为:/mall/recommendThemeConfig
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/recommendThemeConfig")
+public class EpRecommendThemeConfigController extends BaseController {
+
+    private final IEpRecommendThemeConfigService epRecommendThemeConfigService;
+
+    /**
+     * 查询为你推荐全局主题配置列表
+     */
+    //@SaCheckPermission("mall:recommendThemeConfig:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpRecommendThemeConfigVo> list(EpRecommendThemeConfigBo bo, PageQuery pageQuery) {
+        return epRecommendThemeConfigService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出为你推荐全局主题配置列表
+     */
+    //@SaCheckPermission("mall:recommendThemeConfig:export")
+    @Log(title = "为你推荐全局主题配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpRecommendThemeConfigBo bo, HttpServletResponse response) {
+        List<EpRecommendThemeConfigVo> list = epRecommendThemeConfigService.queryList(bo);
+        ExcelUtil.exportExcel(list, "为你推荐全局主题配置", EpRecommendThemeConfigVo.class, response);
+    }
+
+    /**
+     * 获取为你推荐全局主题配置详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:recommendThemeConfig:query")
+    @GetMapping("/{id}")
+    public R<EpRecommendThemeConfigVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epRecommendThemeConfigService.queryById(id));
+    }
+
+    /**
+     * 新增为你推荐全局主题配置
+     */
+    //@SaCheckPermission("mall:recommendThemeConfig:add")
+    @Log(title = "为你推荐全局主题配置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpRecommendThemeConfigBo bo) {
+        return toAjax(epRecommendThemeConfigService.insertByBo(bo));
+    }
+
+    /**
+     * 修改为你推荐全局主题配置
+     */
+    //@SaCheckPermission("mall:recommendThemeConfig:edit")
+    @Log(title = "为你推荐全局主题配置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpRecommendThemeConfigBo bo) {
+        return toAjax(epRecommendThemeConfigService.updateByBo(bo));
+    }
+
+    /**
+     * 删除为你推荐全局主题配置
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:recommendThemeConfig:remove")
+    @Log(title = "为你推荐全局主题配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epRecommendThemeConfigService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpScenarioCardsController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpScenarioCardsVo;
+import org.dromara.mall.domain.bo.EpScenarioCardsBo;
+import org.dromara.mall.service.IEpScenarioCardsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 场景解决方案卡片
+ * 前端访问路由地址为:/mall/scenarioCards
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/scenarioCards")
+public class EpScenarioCardsController extends BaseController {
+
+    private final IEpScenarioCardsService epScenarioCardsService;
+
+    /**
+     * 查询场景解决方案卡片列表
+     */
+    //@SaCheckPermission("mall:scenarioCards:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpScenarioCardsVo> list(EpScenarioCardsBo bo, PageQuery pageQuery) {
+        return epScenarioCardsService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出场景解决方案卡片列表
+     */
+    //@SaCheckPermission("mall:scenarioCards:export")
+    @Log(title = "场景解决方案卡片", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpScenarioCardsBo bo, HttpServletResponse response) {
+        List<EpScenarioCardsVo> list = epScenarioCardsService.queryList(bo);
+        ExcelUtil.exportExcel(list, "场景解决方案卡片", EpScenarioCardsVo.class, response);
+    }
+
+    /**
+     * 获取场景解决方案卡片详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:scenarioCards:query")
+    @GetMapping("/{id}")
+    public R<EpScenarioCardsVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epScenarioCardsService.queryById(id));
+    }
+
+    /**
+     * 新增场景解决方案卡片
+     */
+    //@SaCheckPermission("mall:scenarioCards:add")
+    @Log(title = "场景解决方案卡片", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpScenarioCardsBo bo) {
+        return toAjax(epScenarioCardsService.insertByBo(bo));
+    }
+
+    /**
+     * 修改场景解决方案卡片
+     */
+    //@SaCheckPermission("mall:scenarioCards:edit")
+    @Log(title = "场景解决方案卡片", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpScenarioCardsBo bo) {
+        return toAjax(epScenarioCardsService.updateByBo(bo));
+    }
+
+    /**
+     * 删除场景解决方案卡片
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:scenarioCards:remove")
+    @Log(title = "场景解决方案卡片", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epScenarioCardsService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpScenarioGlobalSettingsController.java

@@ -0,0 +1,106 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpScenarioGlobalSettingsVo;
+import org.dromara.mall.domain.bo.EpScenarioGlobalSettingsBo;
+import org.dromara.mall.service.IEpScenarioGlobalSettingsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 场景解决方案全局设置
+ * 前端访问路由地址为:/mall/scenarioGlobalSettings
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/scenarioGlobalSettings")
+public class EpScenarioGlobalSettingsController extends BaseController {
+
+    private final IEpScenarioGlobalSettingsService epScenarioGlobalSettingsService;
+
+    /**
+     * 查询场景解决方案全局设置列表
+     */
+    //@SaCheckPermission("mall:scenarioGlobalSettings:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpScenarioGlobalSettingsVo> list(EpScenarioGlobalSettingsBo bo, PageQuery pageQuery) {
+        return epScenarioGlobalSettingsService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出场景解决方案全局设置列表
+     */
+    //@SaCheckPermission("mall:scenarioGlobalSettings:export")
+    @Log(title = "场景解决方案全局设置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpScenarioGlobalSettingsBo bo, HttpServletResponse response) {
+        List<EpScenarioGlobalSettingsVo> list = epScenarioGlobalSettingsService.queryList(bo);
+        ExcelUtil.exportExcel(list, "场景解决方案全局设置", EpScenarioGlobalSettingsVo.class, response);
+    }
+
+    /**
+     * 获取场景解决方案全局设置详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:scenarioGlobalSettings:query")
+    @GetMapping("/{id}")
+    public R<EpScenarioGlobalSettingsVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epScenarioGlobalSettingsService.queryById(id));
+    }
+
+    /**
+     * 新增场景解决方案全局设置
+     */
+    //@SaCheckPermission("mall:scenarioGlobalSettings:add")
+    @Log(title = "场景解决方案全局设置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpScenarioGlobalSettingsBo bo) {
+        return toAjax(epScenarioGlobalSettingsService.insertByBo(bo));
+    }
+
+    /**
+     * 修改场景解决方案全局设置
+     */
+    //@SaCheckPermission("mall:scenarioGlobalSettings:edit")
+    @Log(title = "场景解决方案全局设置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpScenarioGlobalSettingsBo bo) {
+        return toAjax(epScenarioGlobalSettingsService.updateByBo(bo));
+    }
+
+    /**
+     * 删除场景解决方案全局设置
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:scenarioGlobalSettings:remove")
+    @Log(title = "场景解决方案全局设置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epScenarioGlobalSettingsService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 115 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/EpSearchConfigController.java

@@ -0,0 +1,115 @@
+package org.dromara.mall.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.mall.domain.vo.MiniPageSetVo;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.mall.domain.vo.EpSearchConfigVo;
+import org.dromara.mall.domain.bo.EpSearchConfigBo;
+import org.dromara.mall.service.IEpSearchConfigService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 搜索栏全局配置(单行配置)
+ * 前端访问路由地址为:/mall/searchConfig
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/searchConfig")
+public class EpSearchConfigController extends BaseController {
+
+    private final IEpSearchConfigService epSearchConfigService;
+
+    /**
+     * 查询搜索栏全局配置(单行配置)列表
+     */
+    //@SaCheckPermission("mall:searchConfig:list")
+    @GetMapping("/list")
+    public TableDataInfo<EpSearchConfigVo> list(EpSearchConfigBo bo, PageQuery pageQuery) {
+        return epSearchConfigService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出搜索栏全局配置(单行配置)列表
+     */
+    //@SaCheckPermission("mall:searchConfig:export")
+    @Log(title = "搜索栏全局配置(单行配置)", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(EpSearchConfigBo bo, HttpServletResponse response) {
+        List<EpSearchConfigVo> list = epSearchConfigService.queryList(bo);
+        ExcelUtil.exportExcel(list, "搜索栏全局配置(单行配置)", EpSearchConfigVo.class, response);
+    }
+
+    /**
+     * 获取搜索栏全局配置(单行配置)详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("mall:searchConfig:query")
+    @GetMapping("/{id}")
+    public R<EpSearchConfigVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(epSearchConfigService.queryById(id));
+    }
+
+    /**
+     * 新增搜索栏全局配置(单行配置)
+     */
+    //@SaCheckPermission("mall:searchConfig:add")
+    @Log(title = "搜索栏全局配置(单行配置)", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody EpSearchConfigBo bo) {
+        return toAjax(epSearchConfigService.insertByBo(bo));
+    }
+
+    /**
+     * 修改搜索栏全局配置(单行配置)
+     */
+    //@SaCheckPermission("mall:searchConfig:edit")
+    @Log(title = "搜索栏全局配置(单行配置)", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody EpSearchConfigBo bo) {
+        return toAjax(epSearchConfigService.updateByBo(bo));
+    }
+
+    /**
+     * 删除搜索栏全局配置(单行配置)
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("mall:searchConfig:remove")
+    @Log(title = "搜索栏全局配置(单行配置)", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(epSearchConfigService.deleteWithValidByIds(List.of(ids), true));
+    }
+
+    /**
+     * 获取当前搜索页面设置
+     */
+    @GetMapping("/current")
+    public R<EpSearchConfigVo> getCurrent() {
+        return R.ok(epSearchConfigService.getCurrentSearchConfig());
+    }
+}

+ 57 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpAdLeft.java

@@ -0,0 +1,57 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 首页左侧广告配置对象 ep_ad_left
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_ad_left")
+public class EpAdLeft extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 广告图片URL(建议尺寸790*460)
+     */
+    private String imageUrl;
+
+    /**
+     * 跳转地址(全路径)
+     */
+    private String link;
+
+    /**
+     * 状态:1启用 0禁用
+     */
+    private Long status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 89 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpAdModuleConfig.java

@@ -0,0 +1,89 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.mall.domain.bo.EpAdModuleItemBo;
+import org.dromara.mall.domain.vo.EpAdModuleItemVo;
+
+import java.io.Serial;
+import java.util.List;
+
+/**
+ * 广告模块主配置对象 ep_ad_module_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_ad_module_config")
+public class EpAdModuleConfig extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 模块编码
+     */
+    private String moduleCode;
+
+    /**
+     * 模块名称
+     */
+    private String moduleName;
+
+    /**
+     * 主标题
+     */
+    private String mainTitle;
+
+    /**
+     * 主标题颜色
+     */
+    private String mainTitleColor;
+
+    /**
+     * 副标题
+     */
+    private String subTitle;
+
+    /**
+     * 副标题颜色
+     */
+    private String subTitleColor;
+
+    /**
+     * 跳转链接
+     */
+    private String jumpLink;
+
+    /**
+     * 排序
+     */
+    private Long sortOrder;
+
+    /**
+     * 状态 (1启用 0禁用)
+     */
+    private Long status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 90 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpAdModuleItem.java

@@ -0,0 +1,90 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.math.BigDecimal;
+
+/**
+ * 广告模块子项对象 ep_ad_module_item
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_ad_module_item")
+public class EpAdModuleItem extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 关联模块ID
+     */
+    private Long moduleId;
+
+    private Long brandId;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 商品或品牌名称
+     */
+    private String productName;
+
+    /**
+     * 图片链接
+     */
+    private String imageUrl;
+
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+
+    /**
+     * 标签文本
+     */
+    private String tagText;
+
+    /**
+     * 标签链接
+     */
+    private String tagLink;
+
+    /**
+     * 销量
+     */
+    private Long salesCount;
+
+    /**
+     * 排序
+     */
+    private Long sortOrder;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 67 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpCarousel.java

@@ -0,0 +1,67 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 首页广告轮播图配置对象 ep_carousel
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_carousel")
+public class EpCarousel extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 轮播图片URL(建议尺寸552*190)
+     */
+    private String imageUrl;
+
+    /**
+     * 点击跳转地址(全路径)
+     */
+    private String link;
+
+    /**
+     * 打开方式:_self当前页 _blank新窗口
+     */
+    private String target;
+
+    /**
+     * 排序,值越小越靠前
+     */
+    private Long sortOrder;
+
+    /**
+     * 状态:1启用 0禁用
+     */
+    private Long status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 67 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpCategoryItem.java

@@ -0,0 +1,67 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 分类标签与便签关联对象 ep_category_item
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_category_item")
+public class EpCategoryItem extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 关联的主表ID (对应: categoryForm.id)
+     */
+    private Long categoryId;
+
+    /**
+     * 类型: tag(左侧标签), note(右侧便签)
+     */
+    private String itemType;
+
+    /**
+     * 名称 (对应: tag.name 或 note.name)
+     */
+    private String name;
+
+    /**
+     * 跳转地址 (对应: tag.link 或 note.link)
+     */
+    private String link;
+
+    /**
+     * 排序,值越小越靠前
+     */
+    private Long sortOrder;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 77 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpCategoryMain.java

@@ -0,0 +1,77 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 分类设置主对象 ep_category_main
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_category_main")
+public class EpCategoryMain extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 菜单名称
+     */
+    private String name;
+
+    /**
+     * 图标URL
+     */
+    private String icon;
+
+    /**
+     * 同步分类id
+     */
+    private Long syncCategoryId;
+
+    /**
+     * 同步分类
+     */
+    private String syncCategory;
+
+    /**
+     * 启用状态: 1-启用, 0-禁用
+     */
+    private Long status;
+
+    /**
+     * 面板主标题
+     */
+    private String panelMainTitle;
+
+    /**
+     * 面板副标题
+     */
+    private String panelSubTitle;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 67 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpHeaderCategory.java

@@ -0,0 +1,67 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 头部分类管理对象 ep_header_category
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_header_category")
+public class EpHeaderCategory extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 分类名称 
+     */
+    private String title;
+
+    /**
+     * 分类图标URL 
+     */
+    private String icon;
+
+    /**
+     * 跳转地址 
+     */
+    private String link;
+
+    /**
+     * 打开方式: current(当前页), new(新窗口) (对应前端: headerForm.openMode)
+     */
+    private String openMode;
+
+    /**
+     * 启用状态: 1-启用, 0-禁用
+     */
+    private Long status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 62 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpHotWord.java

@@ -0,0 +1,62 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 搜索热词配置对象 ep_hot_word
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_hot_word")
+public class EpHotWord extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 热词名称
+     */
+    private String name;
+
+    /**
+     * 点击跳转地址
+     */
+    private String link;
+
+    /**
+     * 排序,值越小越靠前
+     */
+    private Long sortOrder;
+
+    /**
+     * 状态:1启用 0禁用
+     */
+    private Long status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 77 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpQuickEntryItems.java

@@ -0,0 +1,77 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 快捷入口项列对象 ep_quick_entry_items
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_quick_entry_items")
+public class EpQuickEntryItems extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 关联模块ID
+     */
+    private Long moduleId;
+
+    /**
+     * 排序权重
+     */
+    private Long sortOrder;
+
+    /**
+     * 入口名称
+     */
+    private String name;
+
+    /**
+     * 图标地址
+     */
+    private String iconUrl;
+
+    /**
+     * 角标文字
+     */
+    private String tagText;
+
+    /**
+     * 入口跳转地址
+     */
+    private String jumpLink;
+
+    /**
+     * 状态 (1启用 0禁用)
+     */
+    private Long status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 52 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpQuickEntryModule.java

@@ -0,0 +1,52 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 快捷入口模块配置对象 ep_quick_entry_module
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_quick_entry_module")
+public class EpQuickEntryModule extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 模块名称
+     */
+    private String moduleName;
+
+    /**
+     * 模块跳转链接
+     */
+    private String jumpLink;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 87 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpRecommendCategoryConfig.java

@@ -0,0 +1,87 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 为你推荐分类配置对象 ep_recommend_category_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_recommend_category_config")
+public class EpRecommendCategoryConfig extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 主标题
+     */
+    private String name;
+
+    /**
+     * 副标题
+     */
+    private String subTitle;
+
+    /**
+     * 分类图标URL
+     */
+    private String iconUrl;
+
+    /**
+     * 数据类型: select=商品自选, category=分类映射
+     */
+    private String dataType;
+
+    /**
+     * 映射分类ID路径
+     */
+    private String categoryPath;
+
+    /**
+     * 映射分类名称路径
+     */
+    private String categoryLabel;
+
+    /**
+     * 自选商品ID集合(JSON)
+     */
+    private String selectedProductIds;
+
+    /**
+     * 排序
+     */
+    private Long sortOrder;
+
+    /**
+     * 状态(1启用 0禁用)
+     */
+    private Long status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 52 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpRecommendThemeConfig.java

@@ -0,0 +1,52 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 为你推荐全局主题配置对象 ep_recommend_theme_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_recommend_theme_config")
+public class EpRecommendThemeConfig extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 主题选中色调
+     */
+    private String themeColor;
+
+    /**
+     * 商品列表主题色
+     */
+    private String productThemeColor;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 72 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpScenarioCards.java

@@ -0,0 +1,72 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 场景解决方案卡片对象 ep_scenario_cards
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_scenario_cards")
+public class EpScenarioCards extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 排序权重
+     */
+    private Long sortOrder;
+
+    /**
+     * 卡片主标题
+     */
+    private String title;
+
+    /**
+     * 标题颜色
+     */
+    private String titleColor;
+
+    /**
+     * 卡片副标题
+     */
+    private String subTitle;
+
+    /**
+     * 封面图片URL
+     */
+    private String imageUrl;
+
+    /**
+     * 卡片跳转链接
+     */
+    private String jumpLink;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 67 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpScenarioGlobalSettings.java

@@ -0,0 +1,67 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 场景解决方案全局设置对象 ep_scenario_global_settings
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_scenario_global_settings")
+public class EpScenarioGlobalSettings extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 场景主标题
+     */
+    private String mainTitle;
+
+    /**
+     * 场景副标题
+     */
+    private String subTitle;
+
+    /**
+     * 按钮文字
+     */
+    private String btnText;
+
+    /**
+     * 全局跳转链接
+     */
+    private String jumpLink;
+
+    /**
+     * 主题背景色
+     */
+    private String themeColor;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 96 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/EpSearchConfig.java

@@ -0,0 +1,96 @@
+package org.dromara.mall.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+
+import java.io.Serial;
+
+/**
+ * 搜索栏全局配置(单行配置)对象 ep_search_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ep_search_config")
+public class EpSearchConfig extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 页面主标题
+     */
+    private String mainTitle;
+
+    /**
+     * 副标题/Slogan
+     */
+    private String subTitle;
+
+    /**
+     * 搜索框滚动占位文字,英文逗号分隔
+     */
+    private String placeholderText;
+
+    /**
+     * 全局主题色(HEX)
+     */
+    private String themeColor;
+
+    /**
+     * 右侧功能按钮文字
+     */
+    private String rightBtnText;
+
+    /**
+     * 右侧功能按钮图标URL
+     */
+    private String rightBtnIcon;
+
+    /**
+     * 右侧功能按钮跳转地址
+     */
+    private String rightBtnLink;
+
+    /**
+     * 左侧广告图片URL
+     */
+    private String leftAdImage;
+
+    /**
+     * 左侧广告跳转地址
+     */
+    private String leftAdLink;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+    /*分类主题色*/
+    private String categoryThemeColor;
+
+    /*头部主题色*/
+    private String headerThemeColor;
+
+
+}

+ 49 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpAdLeftBo.java

@@ -0,0 +1,49 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpAdLeft;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 首页左侧广告配置业务对象 ep_ad_left
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpAdLeft.class, reverseConvertGenerate = false)
+public class EpAdLeftBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 广告图片URL(建议尺寸790*460)
+     */
+    private String imageUrl;
+
+    /**
+     * 跳转地址(全路径)
+     */
+    private String link;
+
+    /**
+     * 状态:1启用 0禁用
+     */
+    private Long status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 81 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpAdModuleConfigBo.java

@@ -0,0 +1,81 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpAdModuleConfig;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+import java.util.List;
+
+/**
+ * 广告模块主配置业务对象 ep_ad_module_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpAdModuleConfig.class, reverseConvertGenerate = false)
+public class EpAdModuleConfigBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 模块编码
+     */
+    private String moduleCode;
+
+    /**
+     * 模块名称
+     */
+    private String moduleName;
+
+    /**
+     * 主标题
+     */
+    private String mainTitle;
+
+    /**
+     * 主标题颜色
+     */
+    private String mainTitleColor;
+
+    /**
+     * 副标题
+     */
+    private String subTitle;
+
+    /**
+     * 副标题颜色
+     */
+    private String subTitleColor;
+
+    /**
+     * 跳转链接
+     */
+    private String jumpLink;
+
+    /**
+     * 排序
+     */
+    private Long sortOrder;
+
+    /**
+     * 状态 (1启用 0禁用)
+     */
+    private Long status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    List<EpAdModuleItemBo> adModuleItemList;
+}

+ 83 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpAdModuleItemBo.java

@@ -0,0 +1,83 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpAdModuleItem;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+import java.math.BigDecimal;
+
+/**
+ * 广告模块子项业务对象 ep_ad_module_item
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpAdModuleItem.class, reverseConvertGenerate = false)
+public class EpAdModuleItemBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 关联模块ID
+     */
+    private Long moduleId;
+
+    private Long brandId;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 商品或品牌名称
+     */
+    private String productName;
+
+    /**
+     * 图片链接
+     */
+    private String imageUrl;
+
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+
+    /**
+     * 标签文本
+     */
+    private String tagText;
+
+    /**
+     * 标签链接
+     */
+    private String tagLink;
+
+    /**
+     * 销量
+     */
+    private Long salesCount;
+
+    /**
+     * 排序
+     */
+    private Long sortOrder;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 59 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpCarouselBo.java

@@ -0,0 +1,59 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpCarousel;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 首页广告轮播图配置业务对象 ep_carousel
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpCarousel.class, reverseConvertGenerate = false)
+public class EpCarouselBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 轮播图片URL(建议尺寸552*190)
+     */
+    private String imageUrl;
+
+    /**
+     * 点击跳转地址(全路径)
+     */
+    private String link;
+
+    /**
+     * 打开方式:_self当前页 _blank新窗口
+     */
+    private String target;
+
+    /**
+     * 排序,值越小越靠前
+     */
+    private Long sortOrder;
+
+    /**
+     * 状态:1启用 0禁用
+     */
+    private Long status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 59 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpCategoryItemBo.java

@@ -0,0 +1,59 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpCategoryItem;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 分类标签与便签关联业务对象 ep_category_item
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpCategoryItem.class, reverseConvertGenerate = false)
+public class EpCategoryItemBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 关联的主表ID (对应: categoryForm.id)
+     */
+    private Long categoryId;
+
+    /**
+     * 类型: tag(左侧标签), note(右侧便签)
+     */
+    private String itemType;
+
+    /**
+     * 名称 (对应: tag.name 或 note.name)
+     */
+    private String name;
+
+    /**
+     * 跳转地址 (对应: tag.link 或 note.link)
+     */
+    private String link;
+
+    /**
+     * 排序,值越小越靠前
+     */
+    private Long sortOrder;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 76 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpCategoryMainBo.java

@@ -0,0 +1,76 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpCategoryItem;
+import org.dromara.mall.domain.EpCategoryMain;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+import java.util.List;
+
+/**
+ * 分类设置主业务对象 ep_category_main
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpCategoryMain.class, reverseConvertGenerate = false)
+public class EpCategoryMainBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 菜单名称
+     */
+    private String name;
+
+    /**
+     * 图标URL
+     */
+    private String icon;
+
+    /**
+     * 同步分类id
+     */
+    private Long syncCategoryId;
+
+    /**
+     * 同步分类
+     */
+    private String syncCategory;
+
+    /**
+     * 启用状态: 1-启用, 0-禁用
+     */
+    private Long status;
+
+    /**
+     * 面板主标题
+     */
+    private String panelMainTitle;
+
+    /**
+     * 面板副标题
+     */
+    private String panelSubTitle;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 分类项列表
+     */
+    List<EpCategoryItemBo> categoryItemList;
+
+}

+ 61 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpHeaderCategoryBo.java

@@ -0,0 +1,61 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpHeaderCategory;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 头部分类管理业务对象 ep_header_category
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpHeaderCategory.class, reverseConvertGenerate = false)
+public class EpHeaderCategoryBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 分类名称 
+     */
+    private String title;
+
+    /**
+     * 分类图标URL 
+     */
+    //@NotBlank(message = "分类图标URL 不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String icon;
+
+    /**
+     * 跳转地址 
+     */
+    //@NotBlank(message = "跳转地址 不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String link;
+
+    /**
+     * 打开方式: current(当前页), new(新窗口) (对应前端: headerForm.openMode)
+     */
+    private String openMode;
+
+    /**
+     * 启用状态: 1-启用, 0-禁用
+     */
+    private Long status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 52 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpHotWordBo.java

@@ -0,0 +1,52 @@
+package org.dromara.mall.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.mall.domain.EpHotWord;
+
+/**
+ * 搜索热词配置业务对象 ep_hot_word
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpHotWord.class, reverseConvertGenerate = false)
+public class EpHotWordBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 热词名称
+     */
+    //@NotBlank(message = "热词名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String name;
+
+    /**
+     * 点击跳转地址
+     */
+    private String link;
+
+    /**
+     * 排序,值越小越靠前
+     */
+    private Long sortOrder;
+
+    /**
+     * 状态:1启用 0禁用
+     */
+    private Long status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 69 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpQuickEntryItemsBo.java

@@ -0,0 +1,69 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpQuickEntryItems;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 快捷入口项列业务对象 ep_quick_entry_items
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpQuickEntryItems.class, reverseConvertGenerate = false)
+public class EpQuickEntryItemsBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 关联模块ID
+     */
+    private Long moduleId;
+
+    /**
+     * 排序权重
+     */
+    private Long sortOrder;
+
+    /**
+     * 入口名称
+     */
+    private String name;
+
+    /**
+     * 图标地址
+     */
+    private String iconUrl;
+
+    /**
+     * 角标文字
+     */
+    private String tagText;
+
+    /**
+     * 入口跳转地址
+     */
+    private String jumpLink;
+
+    /**
+     * 状态 (1启用 0禁用)
+     */
+    private Long status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 44 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpQuickEntryModuleBo.java

@@ -0,0 +1,44 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpQuickEntryModule;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 快捷入口模块配置业务对象 ep_quick_entry_module
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpQuickEntryModule.class, reverseConvertGenerate = false)
+public class EpQuickEntryModuleBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 模块名称
+     */
+    private String moduleName;
+
+    /**
+     * 模块跳转链接
+     */
+    private String jumpLink;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 79 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpRecommendCategoryConfigBo.java

@@ -0,0 +1,79 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpRecommendCategoryConfig;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 为你推荐分类配置业务对象 ep_recommend_category_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpRecommendCategoryConfig.class, reverseConvertGenerate = false)
+public class EpRecommendCategoryConfigBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 主标题
+     */
+    private String name;
+
+    /**
+     * 副标题
+     */
+    private String subTitle;
+
+    /**
+     * 分类图标URL
+     */
+    private String iconUrl;
+
+    /**
+     * 数据类型: select=商品自选, category=分类映射
+     */
+    private String dataType;
+
+    /**
+     * 映射分类ID路径
+     */
+    private String categoryPath;
+
+    /**
+     * 映射分类名称路径
+     */
+    private String categoryLabel;
+
+    /**
+     * 自选商品ID集合(JSON)
+     */
+    private String selectedProductIds;
+
+    /**
+     * 排序
+     */
+    private Long sortOrder;
+
+    /**
+     * 状态(1启用 0禁用)
+     */
+    private Long status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 44 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpRecommendThemeConfigBo.java

@@ -0,0 +1,44 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpRecommendThemeConfig;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 为你推荐全局主题配置业务对象 ep_recommend_theme_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpRecommendThemeConfig.class, reverseConvertGenerate = false)
+public class EpRecommendThemeConfigBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 主题选中色调
+     */
+    private String themeColor;
+
+    /**
+     * 商品列表主题色
+     */
+    private String productThemeColor;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 64 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpScenarioCardsBo.java

@@ -0,0 +1,64 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpScenarioCards;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 场景解决方案卡片业务对象 ep_scenario_cards
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpScenarioCards.class, reverseConvertGenerate = false)
+public class EpScenarioCardsBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 排序权重
+     */
+    private Long sortOrder;
+
+    /**
+     * 卡片主标题
+     */
+    private String title;
+
+    /**
+     * 标题颜色
+     */
+    private String titleColor;
+
+    /**
+     * 卡片副标题
+     */
+    private String subTitle;
+
+    /**
+     * 封面图片URL
+     */
+    private String imageUrl;
+
+    /**
+     * 卡片跳转链接
+     */
+    private String jumpLink;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 59 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpScenarioGlobalSettingsBo.java

@@ -0,0 +1,59 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpScenarioGlobalSettings;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 场景解决方案全局设置业务对象 ep_scenario_global_settings
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpScenarioGlobalSettings.class, reverseConvertGenerate = false)
+public class EpScenarioGlobalSettingsBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 场景主标题
+     */
+    private String mainTitle;
+
+    /**
+     * 场景副标题
+     */
+    private String subTitle;
+
+    /**
+     * 按钮文字
+     */
+    private String btnText;
+
+    /**
+     * 全局跳转链接
+     */
+    private String jumpLink;
+
+    /**
+     * 主题背景色
+     */
+    private String themeColor;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 96 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/EpSearchConfigBo.java

@@ -0,0 +1,96 @@
+package org.dromara.mall.domain.bo;
+
+import org.dromara.mall.domain.EpSearchConfig;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+import org.dromara.mall.domain.vo.EpHotWordVo;
+
+import java.util.List;
+
+/**
+ * 搜索栏全局配置(单行配置)业务对象 ep_search_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = EpSearchConfig.class, reverseConvertGenerate = false)
+public class EpSearchConfigBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 页面主标题
+     */
+    private String mainTitle;
+
+    /**
+     * 副标题/Slogan
+     */
+    //@NotBlank(message = "副标题/Slogan不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String subTitle;
+
+    /**
+     * 搜索框滚动占位文字,英文逗号分隔
+     */
+    //@NotBlank(message = "搜索框滚动占位文字,英文逗号分隔不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String placeholderText;
+
+    /**
+     * 全局主题色(HEX)
+     */
+    private String themeColor;
+
+    /**
+     * 右侧功能按钮文字
+     */
+    private String rightBtnText;
+
+    /**
+     * 右侧功能按钮图标URL
+     */
+    private String rightBtnIcon;
+
+    /**
+     * 右侧功能按钮跳转地址
+     */
+    private String rightBtnLink;
+
+    /**
+     * 左侧广告图片URL
+     */
+    private String leftAdImage;
+
+    /**
+     * 左侧广告跳转地址
+     */
+    private String leftAdLink;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /*分类主题色*/
+    private String categoryThemeColor;
+
+    /*头部主题色*/
+    private String headerThemeColor;
+
+    /**
+     * 热词列表
+     */
+    List<EpHotWordBo> hotWordList;
+
+}

+ 64 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpAdLeftVo.java

@@ -0,0 +1,64 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpAdLeft;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 首页左侧广告配置视图对象 ep_ad_left
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpAdLeft.class)
+public class EpAdLeftVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 广告图片URL(建议尺寸790*460)
+     */
+    @ExcelProperty(value = "广告图片URL", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "建=议尺寸790*460")
+    private String imageUrl;
+
+    /**
+     * 跳转地址(全路径)
+     */
+    @ExcelProperty(value = "跳转地址", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "全=路径")
+    private String link;
+
+    /**
+     * 状态:1启用 0禁用
+     */
+    @ExcelProperty(value = "状态:1启用 0禁用")
+    private Long status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 98 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpAdModuleConfigVo.java

@@ -0,0 +1,98 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpAdModuleConfig;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 广告模块主配置视图对象 ep_ad_module_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpAdModuleConfig.class)
+public class EpAdModuleConfigVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 模块编码
+     */
+    @ExcelProperty(value = "模块编码")
+    private String moduleCode;
+
+    /**
+     * 模块名称
+     */
+    @ExcelProperty(value = "模块名称")
+    private String moduleName;
+
+    /**
+     * 主标题
+     */
+    @ExcelProperty(value = "主标题")
+    private String mainTitle;
+
+    /**
+     * 主标题颜色
+     */
+    @ExcelProperty(value = "主标题颜色")
+    private String mainTitleColor;
+
+    /**
+     * 副标题
+     */
+    @ExcelProperty(value = "副标题")
+    private String subTitle;
+
+    /**
+     * 副标题颜色
+     */
+    @ExcelProperty(value = "副标题颜色")
+    private String subTitleColor;
+
+    /**
+     * 跳转链接
+     */
+    @ExcelProperty(value = "跳转链接")
+    private String jumpLink;
+
+    /**
+     * 排序
+     */
+    @ExcelProperty(value = "排序")
+    private Long sortOrder;
+
+    /**
+     * 状态 (1启用 0禁用)
+     */
+    @ExcelProperty(value = "状态 (1启用 0禁用)")
+    private Long status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+    List<EpAdModuleItemVo> adModuleItemList;
+}

+ 101 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpAdModuleItemVo.java

@@ -0,0 +1,101 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpAdModuleItem;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+
+/**
+ * 广告模块子项视图对象 ep_ad_module_item
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpAdModuleItem.class)
+public class EpAdModuleItemVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 关联模块ID
+     */
+    @ExcelProperty(value = "关联模块ID")
+    private Long moduleId;
+
+    /**
+     * 产品id
+     */
+    @ExcelProperty(value = "产品id")
+    private Long productId;
+
+    private Long brandId;
+
+    /**
+     * 商品或品牌名称
+     */
+    @ExcelProperty(value = "商品或品牌名称")
+    private String productName;
+
+    /**
+     * 图片链接
+     */
+    @ExcelProperty(value = "图片链接")
+    private String imageUrl;
+
+    /**
+     * 价格
+     */
+    @ExcelProperty(value = "价格")
+    private BigDecimal price;
+
+    /**
+     * 标签文本
+     */
+    @ExcelProperty(value = "标签文本")
+    private String tagText;
+
+    /**
+     * 标签链接
+     */
+    @ExcelProperty(value = "标签链接")
+    private String tagLink;
+
+    /**
+     * 销量
+     */
+    @ExcelProperty(value = "销量")
+    private Long salesCount;
+
+    /**
+     * 排序
+     */
+    @ExcelProperty(value = "排序")
+    private Long sortOrder;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 76 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpCarouselVo.java

@@ -0,0 +1,76 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpCarousel;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 首页广告轮播图配置视图对象 ep_carousel
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpCarousel.class)
+public class EpCarouselVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 轮播图片URL(建议尺寸552*190)
+     */
+    @ExcelProperty(value = "轮播图片URL", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "建=议尺寸552*190")
+    private String imageUrl;
+
+    /**
+     * 点击跳转地址(全路径)
+     */
+    @ExcelProperty(value = "点击跳转地址", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "全=路径")
+    private String link;
+
+    /**
+     * 打开方式:_self当前页 _blank新窗口
+     */
+    @ExcelProperty(value = "打开方式:_self当前页 _blank新窗口")
+    private String target;
+
+    /**
+     * 排序,值越小越靠前
+     */
+    @ExcelProperty(value = "排序,值越小越靠前")
+    private Long sortOrder;
+
+    /**
+     * 状态:1启用 0禁用
+     */
+    @ExcelProperty(value = "状态:1启用 0禁用")
+    private Long status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 74 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpCategoryItemVo.java

@@ -0,0 +1,74 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpCategoryItem;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 分类标签与便签关联视图对象 ep_category_item
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpCategoryItem.class)
+public class EpCategoryItemVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 关联的主表ID (对应: categoryForm.id)
+     */
+    @ExcelProperty(value = "关联的主表ID (对应: categoryForm.id)")
+    private Long categoryId;
+
+    /**
+     * 类型: tag(左侧标签), note(右侧便签)
+     */
+    @ExcelProperty(value = "类型: tag(左侧标签), note(右侧便签)")
+    private String itemType;
+
+    /**
+     * 名称 (对应: tag.name 或 note.name)
+     */
+    @ExcelProperty(value = "名称 (对应: tag.name 或 note.name)")
+    private String name;
+
+    /**
+     * 跳转地址 (对应: tag.link 或 note.link)
+     */
+    @ExcelProperty(value = "跳转地址 (对应: tag.link 或 note.link)")
+    private String link;
+
+    /**
+     * 排序,值越小越靠前
+     */
+    @ExcelProperty(value = "排序,值越小越靠前")
+    private Long sortOrder;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 95 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpCategoryMainVo.java

@@ -0,0 +1,95 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpCategoryMain;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 分类设置主视图对象 ep_category_main
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpCategoryMain.class)
+public class EpCategoryMainVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 菜单名称
+     */
+    @ExcelProperty(value = "菜单名称")
+    private String name;
+
+    /**
+     * 图标URL
+     */
+    @ExcelProperty(value = "图标URL")
+    private String icon;
+
+    /**
+     * 同步分类id
+     */
+    @ExcelProperty(value = "同步分类id")
+    private Long syncCategoryId;
+
+    /**
+     * 同步分类
+     */
+    @ExcelProperty(value = "同步分类")
+    private String syncCategory;
+
+    /**
+     * 启用状态: 1-启用, 0-禁用
+     */
+    @ExcelProperty(value = "启用状态: 1-启用, 0-禁用")
+    private Long status;
+
+    /**
+     * 面板主标题
+     */
+    @ExcelProperty(value = "面板主标题")
+    private String panelMainTitle;
+
+    /**
+     * 面板副标题
+     */
+    @ExcelProperty(value = "面板副标题")
+    private String panelSubTitle;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+    /**
+     * 左侧分类标签项
+     */
+    List<EpCategoryItemVo> leftCategoryItemList;
+
+    /*
+    * 右侧分类标签项*/
+    List<EpCategoryItemVo> rightCategoryItemList;
+
+
+}

+ 143 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpCategoryResponseVo.java

@@ -0,0 +1,143 @@
+package org.dromara.mall.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 分类设置响应对象(前端格式)
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+public class EpCategoryResponseVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 菜单名称
+     */
+    private String name;
+
+    /**
+     * 图标URL
+     */
+    private String icon;
+
+    /**
+     * 同步分类
+     */
+    private String syncCategory;
+
+    /**
+     * 标签列表(左侧tag类型)
+     */
+    private List<TagItem> tags = new ArrayList<>();
+
+    /**
+     * 启用状态: 1-启用, 0-禁用
+     */
+    private Long status;
+
+    /**
+     * 面板数据
+     */
+    private PanelData panelData = new PanelData();
+
+    /**
+     * 标签项
+     */
+    @Data
+    public static class TagItem implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * 主键ID
+         */
+        private Long id;
+
+        /**
+         * 名称
+         */
+        private String name;
+
+        /**
+         * 跳转地址
+         */
+        private String link;
+
+        /**
+         * 排序
+         */
+        private Long sortOrder;
+    }
+
+    /**
+     * 面板数据
+     */
+    @Data
+    public static class PanelData implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * 主标题
+         */
+        private String mainTitle;
+
+        /**
+         * 副标题
+         */
+        private String subTitle;
+
+        /**
+         * 便签列表(右侧note类型)
+         */
+        private List<NoteItem> notes = new ArrayList<>();
+
+        /**
+         * 分组列表(预留字段)
+         */
+        private List<Object> groups = new ArrayList<>();
+    }
+
+    /**
+     * 便签项
+     */
+    @Data
+    public static class NoteItem implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * 主键ID
+         */
+        private Long id;
+
+        /**
+         * 名称
+         */
+        private String name;
+
+        /**
+         * 跳转地址
+         */
+        private String link;
+
+        /**
+         * 排序
+         */
+        private Long sortOrder;
+    }
+}

+ 74 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpHeaderCategoryVo.java

@@ -0,0 +1,74 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpHeaderCategory;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 头部分类管理视图对象 ep_header_category
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpHeaderCategory.class)
+public class EpHeaderCategoryVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 分类名称 
+     */
+    @ExcelProperty(value = "分类名称 ")
+    private String title;
+
+    /**
+     * 分类图标URL 
+     */
+    @ExcelProperty(value = "分类图标URL ")
+    private String icon;
+
+    /**
+     * 跳转地址 
+     */
+    @ExcelProperty(value = "跳转地址 ")
+    private String link;
+
+    /**
+     * 打开方式: current(当前页), new(新窗口) (对应前端: headerForm.openMode)
+     */
+    @ExcelProperty(value = "打开方式: current(当前页), new(新窗口) (对应前端: headerForm.openMode)")
+    private String openMode;
+
+    /**
+     * 启用状态: 1-启用, 0-禁用
+     */
+    @ExcelProperty(value = "启用状态: 1-启用, 0-禁用")
+    private Long status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 65 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpHotWordVo.java

@@ -0,0 +1,65 @@
+package org.dromara.mall.domain.vo;
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.mall.domain.EpHotWord;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+
+/**
+ * 搜索热词配置视图对象 ep_hot_word
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpHotWord.class)
+public class EpHotWordVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 热词名称
+     */
+    @ExcelProperty(value = "热词名称")
+    private String name;
+
+    /**
+     * 点击跳转地址
+     */
+    @ExcelProperty(value = "点击跳转地址")
+    private String link;
+
+    /**
+     * 排序,值越小越靠前
+     */
+    @ExcelProperty(value = "排序,值越小越靠前")
+    private Long sortOrder;
+
+    /**
+     * 状态:1启用 0禁用
+     */
+    @ExcelProperty(value = "状态:1启用 0禁用")
+    private Long status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 86 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpQuickEntryItemsVo.java

@@ -0,0 +1,86 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpQuickEntryItems;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 快捷入口项列视图对象 ep_quick_entry_items
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpQuickEntryItems.class)
+public class EpQuickEntryItemsVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 关联模块ID
+     */
+    @ExcelProperty(value = "关联模块ID")
+    private Long moduleId;
+
+    /**
+     * 排序权重
+     */
+    @ExcelProperty(value = "排序权重")
+    private Long sortOrder;
+
+    /**
+     * 入口名称
+     */
+    @ExcelProperty(value = "入口名称")
+    private String name;
+
+    /**
+     * 图标地址
+     */
+    @ExcelProperty(value = "图标地址")
+    private String iconUrl;
+
+    /**
+     * 角标文字
+     */
+    @ExcelProperty(value = "角标文字")
+    private String tagText;
+
+    /**
+     * 入口跳转地址
+     */
+    @ExcelProperty(value = "入口跳转地址")
+    private String jumpLink;
+
+    /**
+     * 状态 (1启用 0禁用)
+     */
+    @ExcelProperty(value = "状态 (1启用 0禁用)")
+    private Long status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 56 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpQuickEntryModuleVo.java

@@ -0,0 +1,56 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpQuickEntryModule;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 快捷入口模块配置视图对象 ep_quick_entry_module
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpQuickEntryModule.class)
+public class EpQuickEntryModuleVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 模块名称
+     */
+    @ExcelProperty(value = "模块名称")
+    private String moduleName;
+
+    /**
+     * 模块跳转链接
+     */
+    @ExcelProperty(value = "模块跳转链接")
+    private String jumpLink;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 98 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpRecommendCategoryConfigVo.java

@@ -0,0 +1,98 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpRecommendCategoryConfig;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 为你推荐分类配置视图对象 ep_recommend_category_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpRecommendCategoryConfig.class)
+public class EpRecommendCategoryConfigVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 主标题
+     */
+    @ExcelProperty(value = "主标题")
+    private String name;
+
+    /**
+     * 副标题
+     */
+    @ExcelProperty(value = "副标题")
+    private String subTitle;
+
+    /**
+     * 分类图标URL
+     */
+    @ExcelProperty(value = "分类图标URL")
+    private String iconUrl;
+
+    /**
+     * 数据类型: select=商品自选, category=分类映射
+     */
+    @ExcelProperty(value = "数据类型: select=商品自选, category=分类映射")
+    private String dataType;
+
+    /**
+     * 映射分类ID路径
+     */
+    @ExcelProperty(value = "映射分类ID路径")
+    private String categoryPath;
+
+    /**
+     * 映射分类名称路径
+     */
+    @ExcelProperty(value = "映射分类名称路径")
+    private String categoryLabel;
+
+    /**
+     * 自选商品ID集合(JSON)
+     */
+    @ExcelProperty(value = "自选商品ID集合(JSON)")
+    private String selectedProductIds;
+
+    /**
+     * 排序
+     */
+    @ExcelProperty(value = "排序")
+    private Long sortOrder;
+
+    /**
+     * 状态(1启用 0禁用)
+     */
+    @ExcelProperty(value = "状态(1启用 0禁用)")
+    private Long status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 56 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpRecommendThemeConfigVo.java

@@ -0,0 +1,56 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpRecommendThemeConfig;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 为你推荐全局主题配置视图对象 ep_recommend_theme_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpRecommendThemeConfig.class)
+public class EpRecommendThemeConfigVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 主题选中色调
+     */
+    @ExcelProperty(value = "主题选中色调")
+    private String themeColor;
+
+    /**
+     * 商品列表主题色
+     */
+    @ExcelProperty(value = "商品列表主题色")
+    private String productThemeColor;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 80 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpScenarioCardsVo.java

@@ -0,0 +1,80 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpScenarioCards;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 场景解决方案卡片视图对象 ep_scenario_cards
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpScenarioCards.class)
+public class EpScenarioCardsVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 排序权重
+     */
+    @ExcelProperty(value = "排序权重")
+    private Long sortOrder;
+
+    /**
+     * 卡片主标题
+     */
+    @ExcelProperty(value = "卡片主标题")
+    private String title;
+
+    /**
+     * 标题颜色
+     */
+    @ExcelProperty(value = "标题颜色")
+    private String titleColor;
+
+    /**
+     * 卡片副标题
+     */
+    @ExcelProperty(value = "卡片副标题")
+    private String subTitle;
+
+    /**
+     * 封面图片URL
+     */
+    @ExcelProperty(value = "封面图片URL")
+    private String imageUrl;
+
+    /**
+     * 卡片跳转链接
+     */
+    @ExcelProperty(value = "卡片跳转链接")
+    private String jumpLink;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 74 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpScenarioGlobalSettingsVo.java

@@ -0,0 +1,74 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.mall.domain.EpScenarioGlobalSettings;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 场景解决方案全局设置视图对象 ep_scenario_global_settings
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpScenarioGlobalSettings.class)
+public class EpScenarioGlobalSettingsVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 场景主标题
+     */
+    @ExcelProperty(value = "场景主标题")
+    private String mainTitle;
+
+    /**
+     * 场景副标题
+     */
+    @ExcelProperty(value = "场景副标题")
+    private String subTitle;
+
+    /**
+     * 按钮文字
+     */
+    @ExcelProperty(value = "按钮文字")
+    private String btnText;
+
+    /**
+     * 全局跳转链接
+     */
+    @ExcelProperty(value = "全局跳转链接")
+    private String jumpLink;
+
+    /**
+     * 主题背景色
+     */
+    @ExcelProperty(value = "主题背景色")
+    private String themeColor;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 115 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/EpSearchConfigVo.java

@@ -0,0 +1,115 @@
+package org.dromara.mall.domain.vo;
+
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+import org.dromara.mall.domain.EpSearchConfig;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 搜索栏全局配置(单行配置)视图对象 ep_search_config
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = EpSearchConfig.class)
+public class EpSearchConfigVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 页面主标题
+     */
+    @ExcelProperty(value = "页面主标题")
+    private String mainTitle;
+
+    /**
+     * 副标题/Slogan
+     */
+    @ExcelProperty(value = "副标题/Slogan")
+    private String subTitle;
+
+    /**
+     * 搜索框滚动占位文字,英文逗号分隔
+     */
+    @ExcelProperty(value = "搜索框滚动占位文字,英文逗号分隔")
+    private String placeholderText;
+
+    /**
+     * 全局主题色(HEX)
+     */
+    @ExcelProperty(value = "全局主题色(HEX)")
+    private String themeColor;
+
+    /**
+     * 右侧功能按钮文字
+     */
+    @ExcelProperty(value = "右侧功能按钮文字")
+    private String rightBtnText;
+
+    /**
+     * 右侧功能按钮图标URL
+     */
+    @ExcelProperty(value = "右侧功能按钮图标URL")
+    private String rightBtnIcon;
+
+    /**
+     * 右侧功能按钮跳转地址
+     */
+    @ExcelProperty(value = "右侧功能按钮跳转地址")
+    private String rightBtnLink;
+
+    /**
+     * 左侧广告图片URL
+     */
+    @ExcelProperty(value = "左侧广告图片URL")
+    private String leftAdImage;
+
+    /**
+     * 左侧广告图片URLUrl
+     */
+    @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "leftAdImage")
+    private String leftAdImageUrl;
+    /**
+     * 左侧广告跳转地址
+     */
+    @ExcelProperty(value = "左侧广告跳转地址")
+    private String leftAdLink;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+    /*分类主题色*/
+    private String categoryThemeColor;
+
+    /*头部主题色*/
+    private String headerThemeColor;
+
+    /**
+     * 热词列表
+     */
+    List<EpHotWordVo> hotWordList;
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpAdLeftMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpAdLeft;
+import org.dromara.mall.domain.vo.EpAdLeftVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 首页左侧广告配置Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpAdLeftMapper extends BaseMapperPlus<EpAdLeft, EpAdLeftVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpAdModuleConfigMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpAdModuleConfig;
+import org.dromara.mall.domain.vo.EpAdModuleConfigVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 广告模块主配置Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpAdModuleConfigMapper extends BaseMapperPlus<EpAdModuleConfig, EpAdModuleConfigVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpAdModuleItemMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpAdModuleItem;
+import org.dromara.mall.domain.vo.EpAdModuleItemVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 广告模块子项Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpAdModuleItemMapper extends BaseMapperPlus<EpAdModuleItem, EpAdModuleItemVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpCarouselMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpCarousel;
+import org.dromara.mall.domain.vo.EpCarouselVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 首页广告轮播图配置Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpCarouselMapper extends BaseMapperPlus<EpCarousel, EpCarouselVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpCategoryItemMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpCategoryItem;
+import org.dromara.mall.domain.vo.EpCategoryItemVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 分类标签与便签关联Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpCategoryItemMapper extends BaseMapperPlus<EpCategoryItem, EpCategoryItemVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpCategoryMainMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpCategoryMain;
+import org.dromara.mall.domain.vo.EpCategoryMainVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 分类设置主Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpCategoryMainMapper extends BaseMapperPlus<EpCategoryMain, EpCategoryMainVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpHeaderCategoryMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpHeaderCategory;
+import org.dromara.mall.domain.vo.EpHeaderCategoryVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 头部分类管理Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpHeaderCategoryMapper extends BaseMapperPlus<EpHeaderCategory, EpHeaderCategoryVo> {
+
+}

+ 16 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpHotWordMapper.java

@@ -0,0 +1,16 @@
+package org.dromara.mall.mapper;
+
+
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.mall.domain.EpHotWord;
+import org.dromara.mall.domain.vo.EpHotWordVo;
+
+/**
+ * 搜索热词配置Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpHotWordMapper extends BaseMapperPlus<EpHotWord, EpHotWordVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpQuickEntryItemsMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpQuickEntryItems;
+import org.dromara.mall.domain.vo.EpQuickEntryItemsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 快捷入口项列Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpQuickEntryItemsMapper extends BaseMapperPlus<EpQuickEntryItems, EpQuickEntryItemsVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpQuickEntryModuleMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpQuickEntryModule;
+import org.dromara.mall.domain.vo.EpQuickEntryModuleVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 快捷入口模块配置Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpQuickEntryModuleMapper extends BaseMapperPlus<EpQuickEntryModule, EpQuickEntryModuleVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpRecommendCategoryConfigMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpRecommendCategoryConfig;
+import org.dromara.mall.domain.vo.EpRecommendCategoryConfigVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 为你推荐分类配置Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpRecommendCategoryConfigMapper extends BaseMapperPlus<EpRecommendCategoryConfig, EpRecommendCategoryConfigVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpRecommendThemeConfigMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpRecommendThemeConfig;
+import org.dromara.mall.domain.vo.EpRecommendThemeConfigVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 为你推荐全局主题配置Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpRecommendThemeConfigMapper extends BaseMapperPlus<EpRecommendThemeConfig, EpRecommendThemeConfigVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpScenarioCardsMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpScenarioCards;
+import org.dromara.mall.domain.vo.EpScenarioCardsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 场景解决方案卡片Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpScenarioCardsMapper extends BaseMapperPlus<EpScenarioCards, EpScenarioCardsVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpScenarioGlobalSettingsMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpScenarioGlobalSettings;
+import org.dromara.mall.domain.vo.EpScenarioGlobalSettingsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 场景解决方案全局设置Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpScenarioGlobalSettingsMapper extends BaseMapperPlus<EpScenarioGlobalSettings, EpScenarioGlobalSettingsVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/mapper/EpSearchConfigMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.mall.mapper;
+
+import org.dromara.mall.domain.EpSearchConfig;
+import org.dromara.mall.domain.vo.EpSearchConfigVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 搜索栏全局配置(单行配置)Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface EpSearchConfigMapper extends BaseMapperPlus<EpSearchConfig, EpSearchConfigVo> {
+
+}

+ 76 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpAdLeftService.java

@@ -0,0 +1,76 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpAdLeft;
+import org.dromara.mall.domain.vo.EpAdLeftVo;
+import org.dromara.mall.domain.bo.EpAdLeftBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 首页左侧广告配置Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpAdLeftService extends IService<EpAdLeft>{
+
+    /**
+     * 查询首页左侧广告配置
+     *
+     * @param id 主键
+     * @return 首页左侧广告配置
+     */
+    EpAdLeftVo queryById(Long id);
+
+    /**
+     * 分页查询首页左侧广告配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 首页左侧广告配置分页列表
+     */
+    TableDataInfo<EpAdLeftVo> queryPageList(EpAdLeftBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的首页左侧广告配置列表
+     *
+     * @param bo 查询条件
+     * @return 首页左侧广告配置列表
+     */
+    List<EpAdLeftVo> queryList(EpAdLeftBo bo);
+
+    /**
+     * 新增首页左侧广告配置
+     *
+     * @param bo 首页左侧广告配置
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpAdLeftBo bo);
+
+    /**
+     * 修改首页左侧广告配置
+     *
+     * @param bo 首页左侧广告配置
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpAdLeftBo bo);
+
+    /**
+     * 校验并批量删除首页左侧广告配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /**
+     * 获取当前广告设置
+     *
+     */
+    EpAdLeftVo getCurrentAdLeft();
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpAdModuleConfigService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpAdModuleConfig;
+import org.dromara.mall.domain.vo.EpAdModuleConfigVo;
+import org.dromara.mall.domain.bo.EpAdModuleConfigBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 广告模块主配置Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpAdModuleConfigService extends IService<EpAdModuleConfig>{
+
+    /**
+     * 查询广告模块主配置
+     *
+     * @param id 主键
+     * @return 广告模块主配置
+     */
+    EpAdModuleConfigVo queryById(Long id);
+
+    /**
+     * 分页查询广告模块主配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 广告模块主配置分页列表
+     */
+    TableDataInfo<EpAdModuleConfigVo> queryPageList(EpAdModuleConfigBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的广告模块主配置列表
+     *
+     * @param bo 查询条件
+     * @return 广告模块主配置列表
+     */
+    List<EpAdModuleConfigVo> queryList(EpAdModuleConfigBo bo);
+
+    /**
+     * 新增广告模块主配置
+     *
+     * @param bo 广告模块主配置
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpAdModuleConfigBo bo);
+
+    /**
+     * 修改广告模块主配置
+     *
+     * @param bo 广告模块主配置
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpAdModuleConfigBo bo);
+
+    /**
+     * 校验并批量删除广告模块主配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpAdModuleItemService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpAdModuleItem;
+import org.dromara.mall.domain.vo.EpAdModuleItemVo;
+import org.dromara.mall.domain.bo.EpAdModuleItemBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 广告模块子项Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpAdModuleItemService extends IService<EpAdModuleItem>{
+
+    /**
+     * 查询广告模块子项
+     *
+     * @param id 主键
+     * @return 广告模块子项
+     */
+    EpAdModuleItemVo queryById(Long id);
+
+    /**
+     * 分页查询广告模块子项列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 广告模块子项分页列表
+     */
+    TableDataInfo<EpAdModuleItemVo> queryPageList(EpAdModuleItemBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的广告模块子项列表
+     *
+     * @param bo 查询条件
+     * @return 广告模块子项列表
+     */
+    List<EpAdModuleItemVo> queryList(EpAdModuleItemBo bo);
+
+    /**
+     * 新增广告模块子项
+     *
+     * @param bo 广告模块子项
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpAdModuleItemBo bo);
+
+    /**
+     * 修改广告模块子项
+     *
+     * @param bo 广告模块子项
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpAdModuleItemBo bo);
+
+    /**
+     * 校验并批量删除广告模块子项信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 74 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpCarouselService.java

@@ -0,0 +1,74 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpCarousel;
+import org.dromara.mall.domain.vo.EpAdLeftVo;
+import org.dromara.mall.domain.vo.EpCarouselVo;
+import org.dromara.mall.domain.bo.EpCarouselBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.mall.domain.vo.EpSearchConfigVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 首页广告轮播图配置Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpCarouselService extends IService<EpCarousel>{
+
+    /**
+     * 查询首页广告轮播图配置
+     *
+     * @param id 主键
+     * @return 首页广告轮播图配置
+     */
+    EpCarouselVo queryById(Long id);
+
+    /**
+     * 分页查询首页广告轮播图配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 首页广告轮播图配置分页列表
+     */
+    TableDataInfo<EpCarouselVo> queryPageList(EpCarouselBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的首页广告轮播图配置列表
+     *
+     * @param bo 查询条件
+     * @return 首页广告轮播图配置列表
+     */
+    List<EpCarouselVo> queryList(EpCarouselBo bo);
+
+    /**
+     * 新增首页广告轮播图配置
+     *
+     * @param bo 首页广告轮播图配置
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpCarouselBo bo);
+
+    /**
+     * 修改首页广告轮播图配置
+     *
+     * @param bo 首页广告轮播图配置
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpCarouselBo bo);
+
+    /**
+     * 校验并批量删除首页广告轮播图配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpCategoryItemService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpCategoryItem;
+import org.dromara.mall.domain.vo.EpCategoryItemVo;
+import org.dromara.mall.domain.bo.EpCategoryItemBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 分类标签与便签关联Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpCategoryItemService extends IService<EpCategoryItem>{
+
+    /**
+     * 查询分类标签与便签关联
+     *
+     * @param id 主键
+     * @return 分类标签与便签关联
+     */
+    EpCategoryItemVo queryById(Long id);
+
+    /**
+     * 分页查询分类标签与便签关联列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 分类标签与便签关联分页列表
+     */
+    TableDataInfo<EpCategoryItemVo> queryPageList(EpCategoryItemBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的分类标签与便签关联列表
+     *
+     * @param bo 查询条件
+     * @return 分类标签与便签关联列表
+     */
+    List<EpCategoryItemVo> queryList(EpCategoryItemBo bo);
+
+    /**
+     * 新增分类标签与便签关联
+     *
+     * @param bo 分类标签与便签关联
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpCategoryItemBo bo);
+
+    /**
+     * 修改分类标签与便签关联
+     *
+     * @param bo 分类标签与便签关联
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpCategoryItemBo bo);
+
+    /**
+     * 校验并批量删除分类标签与便签关联信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 71 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpCategoryMainService.java

@@ -0,0 +1,71 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpCategoryMain;
+import org.dromara.mall.domain.vo.EpCategoryMainVo;
+import org.dromara.mall.domain.vo.EpCategoryResponseVo;
+import org.dromara.mall.domain.bo.EpCategoryMainBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 分类设置主Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpCategoryMainService extends IService<EpCategoryMain>{
+
+    /**
+     * 查询分类设置主
+     *
+     * @param id 主键
+     * @return 分类设置主
+     */
+    EpCategoryMainVo queryById(Long id);
+
+    /**
+     * 分页查询分类设置主列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 分类设置主分页列表
+     */
+    TableDataInfo<EpCategoryMainVo> queryPageList(EpCategoryMainBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的分类设置主列表
+     *
+     * @param bo 查询条件
+     * @return 分类设置主列表
+     */
+    List<EpCategoryMainVo> queryList(EpCategoryMainBo bo);
+
+    /**
+     * 新增分类设置主
+     *
+     * @param bo 分类设置主
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpCategoryMainBo bo);
+
+    /**
+     * 修改分类设置主
+     *
+     * @param bo 分类设置主
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpCategoryMainBo bo);
+
+    /**
+     * 校验并批量删除分类设置主信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpHeaderCategoryService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpHeaderCategory;
+import org.dromara.mall.domain.vo.EpHeaderCategoryVo;
+import org.dromara.mall.domain.bo.EpHeaderCategoryBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 头部分类管理Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpHeaderCategoryService extends IService<EpHeaderCategory>{
+
+    /**
+     * 查询头部分类管理
+     *
+     * @param id 主键
+     * @return 头部分类管理
+     */
+    EpHeaderCategoryVo queryById(Long id);
+
+    /**
+     * 分页查询头部分类管理列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 头部分类管理分页列表
+     */
+    TableDataInfo<EpHeaderCategoryVo> queryPageList(EpHeaderCategoryBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的头部分类管理列表
+     *
+     * @param bo 查询条件
+     * @return 头部分类管理列表
+     */
+    List<EpHeaderCategoryVo> queryList(EpHeaderCategoryBo bo);
+
+    /**
+     * 新增头部分类管理
+     *
+     * @param bo 头部分类管理
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpHeaderCategoryBo bo);
+
+    /**
+     * 修改头部分类管理
+     *
+     * @param bo 头部分类管理
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpHeaderCategoryBo bo);
+
+    /**
+     * 校验并批量删除头部分类管理信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpHotWordService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.mall.domain.EpHotWord;
+import org.dromara.mall.domain.bo.EpHotWordBo;
+import org.dromara.mall.domain.vo.EpHotWordVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 搜索热词配置Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpHotWordService extends IService<EpHotWord>{
+
+    /**
+     * 查询搜索热词配置
+     *
+     * @param id 主键
+     * @return 搜索热词配置
+     */
+    EpHotWordVo queryById(Long id);
+
+    /**
+     * 分页查询搜索热词配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 搜索热词配置分页列表
+     */
+    TableDataInfo<EpHotWordVo> queryPageList(EpHotWordBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的搜索热词配置列表
+     *
+     * @param bo 查询条件
+     * @return 搜索热词配置列表
+     */
+    List<EpHotWordVo> queryList(EpHotWordBo bo);
+
+    /**
+     * 新增搜索热词配置
+     *
+     * @param bo 搜索热词配置
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpHotWordBo bo);
+
+    /**
+     * 修改搜索热词配置
+     *
+     * @param bo 搜索热词配置
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpHotWordBo bo);
+
+    /**
+     * 校验并批量删除搜索热词配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpQuickEntryItemsService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpQuickEntryItems;
+import org.dromara.mall.domain.vo.EpQuickEntryItemsVo;
+import org.dromara.mall.domain.bo.EpQuickEntryItemsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 快捷入口项列Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpQuickEntryItemsService extends IService<EpQuickEntryItems>{
+
+    /**
+     * 查询快捷入口项列
+     *
+     * @param id 主键
+     * @return 快捷入口项列
+     */
+    EpQuickEntryItemsVo queryById(Long id);
+
+    /**
+     * 分页查询快捷入口项列列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 快捷入口项列分页列表
+     */
+    TableDataInfo<EpQuickEntryItemsVo> queryPageList(EpQuickEntryItemsBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的快捷入口项列列表
+     *
+     * @param bo 查询条件
+     * @return 快捷入口项列列表
+     */
+    List<EpQuickEntryItemsVo> queryList(EpQuickEntryItemsBo bo);
+
+    /**
+     * 新增快捷入口项列
+     *
+     * @param bo 快捷入口项列
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpQuickEntryItemsBo bo);
+
+    /**
+     * 修改快捷入口项列
+     *
+     * @param bo 快捷入口项列
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpQuickEntryItemsBo bo);
+
+    /**
+     * 校验并批量删除快捷入口项列信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpQuickEntryModuleService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpQuickEntryModule;
+import org.dromara.mall.domain.vo.EpQuickEntryModuleVo;
+import org.dromara.mall.domain.bo.EpQuickEntryModuleBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 快捷入口模块配置Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpQuickEntryModuleService extends IService<EpQuickEntryModule>{
+
+    /**
+     * 查询快捷入口模块配置
+     *
+     * @param id 主键
+     * @return 快捷入口模块配置
+     */
+    EpQuickEntryModuleVo queryById(Long id);
+
+    /**
+     * 分页查询快捷入口模块配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 快捷入口模块配置分页列表
+     */
+    TableDataInfo<EpQuickEntryModuleVo> queryPageList(EpQuickEntryModuleBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的快捷入口模块配置列表
+     *
+     * @param bo 查询条件
+     * @return 快捷入口模块配置列表
+     */
+    List<EpQuickEntryModuleVo> queryList(EpQuickEntryModuleBo bo);
+
+    /**
+     * 新增快捷入口模块配置
+     *
+     * @param bo 快捷入口模块配置
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpQuickEntryModuleBo bo);
+
+    /**
+     * 修改快捷入口模块配置
+     *
+     * @param bo 快捷入口模块配置
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpQuickEntryModuleBo bo);
+
+    /**
+     * 校验并批量删除快捷入口模块配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpRecommendCategoryConfigService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpRecommendCategoryConfig;
+import org.dromara.mall.domain.vo.EpRecommendCategoryConfigVo;
+import org.dromara.mall.domain.bo.EpRecommendCategoryConfigBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 为你推荐分类配置Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpRecommendCategoryConfigService extends IService<EpRecommendCategoryConfig>{
+
+    /**
+     * 查询为你推荐分类配置
+     *
+     * @param id 主键
+     * @return 为你推荐分类配置
+     */
+    EpRecommendCategoryConfigVo queryById(Long id);
+
+    /**
+     * 分页查询为你推荐分类配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 为你推荐分类配置分页列表
+     */
+    TableDataInfo<EpRecommendCategoryConfigVo> queryPageList(EpRecommendCategoryConfigBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的为你推荐分类配置列表
+     *
+     * @param bo 查询条件
+     * @return 为你推荐分类配置列表
+     */
+    List<EpRecommendCategoryConfigVo> queryList(EpRecommendCategoryConfigBo bo);
+
+    /**
+     * 新增为你推荐分类配置
+     *
+     * @param bo 为你推荐分类配置
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpRecommendCategoryConfigBo bo);
+
+    /**
+     * 修改为你推荐分类配置
+     *
+     * @param bo 为你推荐分类配置
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpRecommendCategoryConfigBo bo);
+
+    /**
+     * 校验并批量删除为你推荐分类配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpRecommendThemeConfigService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpRecommendThemeConfig;
+import org.dromara.mall.domain.vo.EpRecommendThemeConfigVo;
+import org.dromara.mall.domain.bo.EpRecommendThemeConfigBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 为你推荐全局主题配置Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpRecommendThemeConfigService extends IService<EpRecommendThemeConfig>{
+
+    /**
+     * 查询为你推荐全局主题配置
+     *
+     * @param id 主键
+     * @return 为你推荐全局主题配置
+     */
+    EpRecommendThemeConfigVo queryById(Long id);
+
+    /**
+     * 分页查询为你推荐全局主题配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 为你推荐全局主题配置分页列表
+     */
+    TableDataInfo<EpRecommendThemeConfigVo> queryPageList(EpRecommendThemeConfigBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的为你推荐全局主题配置列表
+     *
+     * @param bo 查询条件
+     * @return 为你推荐全局主题配置列表
+     */
+    List<EpRecommendThemeConfigVo> queryList(EpRecommendThemeConfigBo bo);
+
+    /**
+     * 新增为你推荐全局主题配置
+     *
+     * @param bo 为你推荐全局主题配置
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpRecommendThemeConfigBo bo);
+
+    /**
+     * 修改为你推荐全局主题配置
+     *
+     * @param bo 为你推荐全局主题配置
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpRecommendThemeConfigBo bo);
+
+    /**
+     * 校验并批量删除为你推荐全局主题配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpScenarioCardsService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpScenarioCards;
+import org.dromara.mall.domain.vo.EpScenarioCardsVo;
+import org.dromara.mall.domain.bo.EpScenarioCardsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 场景解决方案卡片Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpScenarioCardsService extends IService<EpScenarioCards>{
+
+    /**
+     * 查询场景解决方案卡片
+     *
+     * @param id 主键
+     * @return 场景解决方案卡片
+     */
+    EpScenarioCardsVo queryById(Long id);
+
+    /**
+     * 分页查询场景解决方案卡片列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 场景解决方案卡片分页列表
+     */
+    TableDataInfo<EpScenarioCardsVo> queryPageList(EpScenarioCardsBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的场景解决方案卡片列表
+     *
+     * @param bo 查询条件
+     * @return 场景解决方案卡片列表
+     */
+    List<EpScenarioCardsVo> queryList(EpScenarioCardsBo bo);
+
+    /**
+     * 新增场景解决方案卡片
+     *
+     * @param bo 场景解决方案卡片
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpScenarioCardsBo bo);
+
+    /**
+     * 修改场景解决方案卡片
+     *
+     * @param bo 场景解决方案卡片
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpScenarioCardsBo bo);
+
+    /**
+     * 校验并批量删除场景解决方案卡片信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpScenarioGlobalSettingsService.java

@@ -0,0 +1,70 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpScenarioGlobalSettings;
+import org.dromara.mall.domain.vo.EpScenarioGlobalSettingsVo;
+import org.dromara.mall.domain.bo.EpScenarioGlobalSettingsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 场景解决方案全局设置Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpScenarioGlobalSettingsService extends IService<EpScenarioGlobalSettings>{
+
+    /**
+     * 查询场景解决方案全局设置
+     *
+     * @param id 主键
+     * @return 场景解决方案全局设置
+     */
+    EpScenarioGlobalSettingsVo queryById(Long id);
+
+    /**
+     * 分页查询场景解决方案全局设置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 场景解决方案全局设置分页列表
+     */
+    TableDataInfo<EpScenarioGlobalSettingsVo> queryPageList(EpScenarioGlobalSettingsBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的场景解决方案全局设置列表
+     *
+     * @param bo 查询条件
+     * @return 场景解决方案全局设置列表
+     */
+    List<EpScenarioGlobalSettingsVo> queryList(EpScenarioGlobalSettingsBo bo);
+
+    /**
+     * 新增场景解决方案全局设置
+     *
+     * @param bo 场景解决方案全局设置
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpScenarioGlobalSettingsBo bo);
+
+    /**
+     * 修改场景解决方案全局设置
+     *
+     * @param bo 场景解决方案全局设置
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpScenarioGlobalSettingsBo bo);
+
+    /**
+     * 校验并批量删除场景解决方案全局设置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 77 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IEpSearchConfigService.java

@@ -0,0 +1,77 @@
+package org.dromara.mall.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.mall.domain.EpSearchConfig;
+import org.dromara.mall.domain.vo.EpSearchConfigVo;
+import org.dromara.mall.domain.bo.EpSearchConfigBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.mall.domain.vo.MiniPageSetVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 搜索栏全局配置(单行配置)Service接口
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+public interface IEpSearchConfigService extends IService<EpSearchConfig>{
+
+    /**
+     * 查询搜索栏全局配置(单行配置)
+     *
+     * @param id 主键
+     * @return 搜索栏全局配置(单行配置)
+     */
+    EpSearchConfigVo queryById(Long id);
+
+    /**
+     * 分页查询搜索栏全局配置(单行配置)列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 搜索栏全局配置(单行配置)分页列表
+     */
+    TableDataInfo<EpSearchConfigVo> queryPageList(EpSearchConfigBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的搜索栏全局配置(单行配置)列表
+     *
+     * @param bo 查询条件
+     * @return 搜索栏全局配置(单行配置)列表
+     */
+    List<EpSearchConfigVo> queryList(EpSearchConfigBo bo);
+
+    /**
+     * 新增搜索栏全局配置(单行配置)
+     *
+     * @param bo 搜索栏全局配置(单行配置)
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(EpSearchConfigBo bo);
+
+    /**
+     * 修改搜索栏全局配置(单行配置)
+     *
+     * @param bo 搜索栏全局配置(单行配置)
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(EpSearchConfigBo bo);
+
+    /**
+     * 校验并批量删除搜索栏全局配置(单行配置)信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /**
+     * 获取当前搜索页面设置
+     *
+     */
+    EpSearchConfigVo getCurrentSearchConfig();
+}

+ 150 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpAdLeftServiceImpl.java

@@ -0,0 +1,150 @@
+package org.dromara.mall.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.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 lombok.extern.slf4j.Slf4j;
+import org.dromara.mall.domain.vo.EpCarouselVo;
+import org.springframework.stereotype.Service;
+import org.dromara.mall.domain.bo.EpAdLeftBo;
+import org.dromara.mall.domain.vo.EpAdLeftVo;
+import org.dromara.mall.domain.EpAdLeft;
+import org.dromara.mall.mapper.EpAdLeftMapper;
+import org.dromara.mall.service.IEpAdLeftService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 首页左侧广告配置Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class EpAdLeftServiceImpl extends ServiceImpl<EpAdLeftMapper, EpAdLeft> implements IEpAdLeftService {
+
+    private final EpAdLeftMapper baseMapper;
+
+    /**
+     * 查询首页左侧广告配置
+     *
+     * @param id 主键
+     * @return 首页左侧广告配置
+     */
+    @Override
+    public EpAdLeftVo queryById(Long id) {
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询首页左侧广告配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 首页左侧广告配置分页列表
+     */
+    @Override
+    public TableDataInfo<EpAdLeftVo> queryPageList(EpAdLeftBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EpAdLeft> lqw = buildQueryWrapper(bo);
+        Page<EpAdLeftVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的首页左侧广告配置列表
+     *
+     * @param bo 查询条件
+     * @return 首页左侧广告配置列表
+     */
+    @Override
+    public List<EpAdLeftVo> queryList(EpAdLeftBo bo) {
+        LambdaQueryWrapper<EpAdLeft> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EpAdLeft> buildQueryWrapper(EpAdLeftBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EpAdLeft> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(EpAdLeft::getId);
+        lqw.eq(StringUtils.isNotBlank(bo.getImageUrl()), EpAdLeft::getImageUrl, bo.getImageUrl());
+        lqw.eq(StringUtils.isNotBlank(bo.getLink()), EpAdLeft::getLink, bo.getLink());
+        lqw.eq(bo.getStatus() != null, EpAdLeft::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), EpAdLeft::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增首页左侧广告配置
+     *
+     * @param bo 首页左侧广告配置
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(EpAdLeftBo bo) {
+        EpAdLeft add = MapstructUtils.convert(bo, EpAdLeft.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改首页左侧广告配置
+     *
+     * @param bo 首页左侧广告配置
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(EpAdLeftBo bo) {
+        EpAdLeft update = MapstructUtils.convert(bo, EpAdLeft.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(EpAdLeft entity) {
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除首页左侧广告配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    @Override
+    public EpAdLeftVo getCurrentAdLeft() {
+        // 查询是否有配置
+        LambdaQueryWrapper<EpAdLeft> lqw = Wrappers.lambdaQuery();
+        lqw.last("LIMIT 1");
+        EpAdLeft config = baseMapper.selectOne(lqw);
+        EpAdLeftVo vo = null;
+        if (null != config) {
+            vo = baseMapper.selectVoById(config.getId());
+        }
+        return vo;
+    }
+}

+ 176 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpAdModuleConfigServiceImpl.java

@@ -0,0 +1,176 @@
+package org.dromara.mall.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.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 lombok.extern.slf4j.Slf4j;
+import org.dromara.mall.domain.EpAdModuleItem;
+import org.dromara.mall.domain.bo.EpAdModuleItemBo;
+import org.dromara.mall.domain.vo.EpAdModuleItemVo;
+import org.dromara.mall.mapper.EpAdModuleItemMapper;
+import org.springframework.stereotype.Service;
+import org.dromara.mall.domain.bo.EpAdModuleConfigBo;
+import org.dromara.mall.domain.vo.EpAdModuleConfigVo;
+import org.dromara.mall.domain.EpAdModuleConfig;
+import org.dromara.mall.mapper.EpAdModuleConfigMapper;
+import org.dromara.mall.service.IEpAdModuleConfigService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 广告模块主配置Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class EpAdModuleConfigServiceImpl  extends ServiceImpl<EpAdModuleConfigMapper, EpAdModuleConfig> implements IEpAdModuleConfigService {
+
+    private final EpAdModuleConfigMapper baseMapper;
+
+    private final EpAdModuleItemMapper adModuleItemMapper;
+
+    /**
+     * 查询广告模块主配置
+     *
+     * @param id 主键
+     * @return 广告模块主配置
+     */
+    @Override
+    public EpAdModuleConfigVo queryById(Long id){
+        EpAdModuleConfigVo configVo = baseMapper.selectVoById(id);
+        List<EpAdModuleItem> adModuleItemList = adModuleItemMapper.selectList(Wrappers.<EpAdModuleItem>lambdaQuery().eq(EpAdModuleItem::getModuleId, id));
+        configVo.setAdModuleItemList(MapstructUtils.convert(adModuleItemList, EpAdModuleItemVo.class));
+        return configVo;
+    }
+
+    /**
+     * 分页查询广告模块主配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 广告模块主配置分页列表
+     */
+    @Override
+    public TableDataInfo<EpAdModuleConfigVo> queryPageList(EpAdModuleConfigBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EpAdModuleConfig> lqw = buildQueryWrapper(bo);
+        Page<EpAdModuleConfigVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的广告模块主配置列表
+     *
+     * @param bo 查询条件
+     * @return 广告模块主配置列表
+     */
+    @Override
+    public List<EpAdModuleConfigVo> queryList(EpAdModuleConfigBo bo) {
+        LambdaQueryWrapper<EpAdModuleConfig> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EpAdModuleConfig> buildQueryWrapper(EpAdModuleConfigBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EpAdModuleConfig> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(EpAdModuleConfig::getId);
+        lqw.eq(StringUtils.isNotBlank(bo.getModuleCode()), EpAdModuleConfig::getModuleCode, bo.getModuleCode());
+        lqw.like(StringUtils.isNotBlank(bo.getModuleName()), EpAdModuleConfig::getModuleName, bo.getModuleName());
+        lqw.eq(StringUtils.isNotBlank(bo.getMainTitle()), EpAdModuleConfig::getMainTitle, bo.getMainTitle());
+        lqw.eq(StringUtils.isNotBlank(bo.getMainTitleColor()), EpAdModuleConfig::getMainTitleColor, bo.getMainTitleColor());
+        lqw.eq(StringUtils.isNotBlank(bo.getSubTitle()), EpAdModuleConfig::getSubTitle, bo.getSubTitle());
+        lqw.eq(StringUtils.isNotBlank(bo.getSubTitleColor()), EpAdModuleConfig::getSubTitleColor, bo.getSubTitleColor());
+        lqw.eq(StringUtils.isNotBlank(bo.getJumpLink()), EpAdModuleConfig::getJumpLink, bo.getJumpLink());
+        lqw.eq(bo.getSortOrder() != null, EpAdModuleConfig::getSortOrder, bo.getSortOrder());
+        lqw.eq(bo.getStatus() != null, EpAdModuleConfig::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), EpAdModuleConfig::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增广告模块主配置
+     *
+     * @param bo 广告模块主配置
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(EpAdModuleConfigBo bo) {
+        EpAdModuleConfig add = MapstructUtils.convert(bo, EpAdModuleConfig.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+            List<EpAdModuleItemBo> adModuleItemList = bo.getAdModuleItemList();
+            if (adModuleItemList != null && !adModuleItemList.isEmpty()) {
+                for (EpAdModuleItemBo adModuleItem : adModuleItemList) {
+                    adModuleItem.setModuleId(add.getId());
+                }
+                // 将BO转换为实体并批量插入
+                List<EpAdModuleItem> items = MapstructUtils.convert(adModuleItemList, EpAdModuleItem.class);
+                adModuleItemMapper.insertBatch(items);
+            }
+        }
+        return flag;
+    }
+
+    /**
+     * 修改广告模块主配置
+     *
+     * @param bo 广告模块主配置
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(EpAdModuleConfigBo bo) {
+        EpAdModuleConfig update = MapstructUtils.convert(bo, EpAdModuleConfig.class);
+        validEntityBeforeSave(update);
+        boolean flag = baseMapper.updateById(update) > 0;
+        if (flag) {
+            // 先根据moduleId删除原有的子项
+            adModuleItemMapper.delete(Wrappers.<EpAdModuleItem>lambdaQuery().eq(EpAdModuleItem::getModuleId, update.getId()));
+
+            // 再重新添加新的子项
+            List<EpAdModuleItemBo> adModuleItemList = bo.getAdModuleItemList();
+            if (adModuleItemList != null && !adModuleItemList.isEmpty()) {
+                for (EpAdModuleItemBo adModuleItem : adModuleItemList) {
+                    adModuleItem.setModuleId(update.getId());
+                }
+                // 将BO转换为实体并批量插入
+                List<EpAdModuleItem> items = MapstructUtils.convert(adModuleItemList, EpAdModuleItem.class);
+                adModuleItemMapper.insertBatch(items);
+            }
+        }
+        return flag;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(EpAdModuleConfig entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除广告模块主配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 142 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpAdModuleItemServiceImpl.java

@@ -0,0 +1,142 @@
+package org.dromara.mall.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.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 lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.mall.domain.bo.EpAdModuleItemBo;
+import org.dromara.mall.domain.vo.EpAdModuleItemVo;
+import org.dromara.mall.domain.EpAdModuleItem;
+import org.dromara.mall.mapper.EpAdModuleItemMapper;
+import org.dromara.mall.service.IEpAdModuleItemService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 广告模块子项Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class EpAdModuleItemServiceImpl  extends ServiceImpl<EpAdModuleItemMapper, EpAdModuleItem> implements IEpAdModuleItemService {
+
+    private final EpAdModuleItemMapper baseMapper;
+
+    /**
+     * 查询广告模块子项
+     *
+     * @param id 主键
+     * @return 广告模块子项
+     */
+    @Override
+    public EpAdModuleItemVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询广告模块子项列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 广告模块子项分页列表
+     */
+    @Override
+    public TableDataInfo<EpAdModuleItemVo> queryPageList(EpAdModuleItemBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EpAdModuleItem> lqw = buildQueryWrapper(bo);
+        Page<EpAdModuleItemVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的广告模块子项列表
+     *
+     * @param bo 查询条件
+     * @return 广告模块子项列表
+     */
+    @Override
+    public List<EpAdModuleItemVo> queryList(EpAdModuleItemBo bo) {
+        LambdaQueryWrapper<EpAdModuleItem> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EpAdModuleItem> buildQueryWrapper(EpAdModuleItemBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EpAdModuleItem> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(EpAdModuleItem::getId);
+        lqw.eq(bo.getModuleId() != null, EpAdModuleItem::getModuleId, bo.getModuleId());
+        lqw.eq(bo.getProductId() != null, EpAdModuleItem::getProductId, bo.getProductId());
+        lqw.like(StringUtils.isNotBlank(bo.getProductName()), EpAdModuleItem::getProductName, bo.getProductName());
+        lqw.eq(StringUtils.isNotBlank(bo.getImageUrl()), EpAdModuleItem::getImageUrl, bo.getImageUrl());
+        lqw.eq(bo.getPrice() != null, EpAdModuleItem::getPrice, bo.getPrice());
+        lqw.eq(StringUtils.isNotBlank(bo.getTagText()), EpAdModuleItem::getTagText, bo.getTagText());
+        lqw.eq(StringUtils.isNotBlank(bo.getTagLink()), EpAdModuleItem::getTagLink, bo.getTagLink());
+        lqw.eq(bo.getSalesCount() != null, EpAdModuleItem::getSalesCount, bo.getSalesCount());
+        lqw.eq(bo.getSortOrder() != null, EpAdModuleItem::getSortOrder, bo.getSortOrder());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), EpAdModuleItem::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增广告模块子项
+     *
+     * @param bo 广告模块子项
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(EpAdModuleItemBo bo) {
+        EpAdModuleItem add = MapstructUtils.convert(bo, EpAdModuleItem.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改广告模块子项
+     *
+     * @param bo 广告模块子项
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(EpAdModuleItemBo bo) {
+        EpAdModuleItem update = MapstructUtils.convert(bo, EpAdModuleItem.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(EpAdModuleItem entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除广告模块子项信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 143 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpCarouselServiceImpl.java

@@ -0,0 +1,143 @@
+package org.dromara.mall.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.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 lombok.extern.slf4j.Slf4j;
+import org.dromara.mall.domain.EpAdLeft;
+import org.dromara.mall.domain.EpSearchConfig;
+import org.dromara.mall.domain.vo.EpAdLeftVo;
+import org.dromara.mall.domain.vo.EpHotWordVo;
+import org.dromara.mall.domain.vo.EpSearchConfigVo;
+import org.springframework.stereotype.Service;
+import org.dromara.mall.domain.bo.EpCarouselBo;
+import org.dromara.mall.domain.vo.EpCarouselVo;
+import org.dromara.mall.domain.EpCarousel;
+import org.dromara.mall.mapper.EpCarouselMapper;
+import org.dromara.mall.service.IEpCarouselService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 首页广告轮播图配置Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class EpCarouselServiceImpl  extends ServiceImpl<EpCarouselMapper, EpCarousel> implements IEpCarouselService {
+
+    private final EpCarouselMapper baseMapper;
+
+    /**
+     * 查询首页广告轮播图配置
+     *
+     * @param id 主键
+     * @return 首页广告轮播图配置
+     */
+    @Override
+    public EpCarouselVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询首页广告轮播图配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 首页广告轮播图配置分页列表
+     */
+    @Override
+    public TableDataInfo<EpCarouselVo> queryPageList(EpCarouselBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EpCarousel> lqw = buildQueryWrapper(bo);
+        Page<EpCarouselVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的首页广告轮播图配置列表
+     *
+     * @param bo 查询条件
+     * @return 首页广告轮播图配置列表
+     */
+    @Override
+    public List<EpCarouselVo> queryList(EpCarouselBo bo) {
+        LambdaQueryWrapper<EpCarousel> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EpCarousel> buildQueryWrapper(EpCarouselBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EpCarousel> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(EpCarousel::getId);
+        lqw.eq(StringUtils.isNotBlank(bo.getImageUrl()), EpCarousel::getImageUrl, bo.getImageUrl());
+        lqw.eq(StringUtils.isNotBlank(bo.getLink()), EpCarousel::getLink, bo.getLink());
+        lqw.eq(StringUtils.isNotBlank(bo.getTarget()), EpCarousel::getTarget, bo.getTarget());
+        lqw.eq(bo.getSortOrder() != null, EpCarousel::getSortOrder, bo.getSortOrder());
+        lqw.eq(bo.getStatus() != null, EpCarousel::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), EpCarousel::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增首页广告轮播图配置
+     *
+     * @param bo 首页广告轮播图配置
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(EpCarouselBo bo) {
+        EpCarousel add = MapstructUtils.convert(bo, EpCarousel.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改首页广告轮播图配置
+     *
+     * @param bo 首页广告轮播图配置
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(EpCarouselBo bo) {
+        EpCarousel update = MapstructUtils.convert(bo, EpCarousel.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(EpCarousel entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除首页广告轮播图配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 138 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpCategoryItemServiceImpl.java

@@ -0,0 +1,138 @@
+package org.dromara.mall.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.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 lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.mall.domain.bo.EpCategoryItemBo;
+import org.dromara.mall.domain.vo.EpCategoryItemVo;
+import org.dromara.mall.domain.EpCategoryItem;
+import org.dromara.mall.mapper.EpCategoryItemMapper;
+import org.dromara.mall.service.IEpCategoryItemService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 分类标签与便签关联Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class EpCategoryItemServiceImpl  extends ServiceImpl<EpCategoryItemMapper, EpCategoryItem> implements IEpCategoryItemService {
+
+    private final EpCategoryItemMapper baseMapper;
+
+    /**
+     * 查询分类标签与便签关联
+     *
+     * @param id 主键
+     * @return 分类标签与便签关联
+     */
+    @Override
+    public EpCategoryItemVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询分类标签与便签关联列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 分类标签与便签关联分页列表
+     */
+    @Override
+    public TableDataInfo<EpCategoryItemVo> queryPageList(EpCategoryItemBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EpCategoryItem> lqw = buildQueryWrapper(bo);
+        Page<EpCategoryItemVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的分类标签与便签关联列表
+     *
+     * @param bo 查询条件
+     * @return 分类标签与便签关联列表
+     */
+    @Override
+    public List<EpCategoryItemVo> queryList(EpCategoryItemBo bo) {
+        LambdaQueryWrapper<EpCategoryItem> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EpCategoryItem> buildQueryWrapper(EpCategoryItemBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EpCategoryItem> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(EpCategoryItem::getId);
+        lqw.eq(bo.getCategoryId() != null, EpCategoryItem::getCategoryId, bo.getCategoryId());
+        lqw.eq(StringUtils.isNotBlank(bo.getItemType()), EpCategoryItem::getItemType, bo.getItemType());
+        lqw.like(StringUtils.isNotBlank(bo.getName()), EpCategoryItem::getName, bo.getName());
+        lqw.eq(StringUtils.isNotBlank(bo.getLink()), EpCategoryItem::getLink, bo.getLink());
+        lqw.eq(bo.getSortOrder() != null, EpCategoryItem::getSortOrder, bo.getSortOrder());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), EpCategoryItem::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增分类标签与便签关联
+     *
+     * @param bo 分类标签与便签关联
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(EpCategoryItemBo bo) {
+        EpCategoryItem add = MapstructUtils.convert(bo, EpCategoryItem.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改分类标签与便签关联
+     *
+     * @param bo 分类标签与便签关联
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(EpCategoryItemBo bo) {
+        EpCategoryItem update = MapstructUtils.convert(bo, EpCategoryItem.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(EpCategoryItem entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除分类标签与便签关联信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 300 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpCategoryMainServiceImpl.java

@@ -0,0 +1,300 @@
+package org.dromara.mall.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.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 lombok.extern.slf4j.Slf4j;
+import org.dromara.mall.domain.EpCategoryItem;
+import org.dromara.mall.domain.bo.EpCategoryItemBo;
+import org.dromara.mall.domain.vo.EpCategoryItemVo;
+import org.dromara.mall.domain.vo.EpCategoryResponseVo;
+import org.dromara.mall.mapper.EpCategoryItemMapper;
+import org.springframework.stereotype.Service;
+import org.dromara.mall.domain.bo.EpCategoryMainBo;
+import org.dromara.mall.domain.vo.EpCategoryMainVo;
+import org.dromara.mall.domain.EpCategoryMain;
+import org.dromara.mall.mapper.EpCategoryMainMapper;
+import org.dromara.mall.service.IEpCategoryMainService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * 分类设置主Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class EpCategoryMainServiceImpl  extends ServiceImpl<EpCategoryMainMapper, EpCategoryMain> implements IEpCategoryMainService {
+
+    private final EpCategoryMainMapper baseMapper;
+
+    private final EpCategoryItemMapper categoryItemMapper;
+
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+
+    /**
+     * 查询分类设置主
+     *
+     * @param id 主键
+     * @return 分类设置主
+     */
+    @Override
+    public EpCategoryMainVo queryById(Long id){
+        // 查询主表数据
+        EpCategoryMainVo mainVo = baseMapper.selectVoById(id);
+        if (mainVo == null) {
+            return null;
+        }
+
+        // 构建响应对象
+        EpCategoryResponseVo responseVo = new EpCategoryResponseVo();
+        responseVo.setId(mainVo.getId());
+        responseVo.setName(mainVo.getName());
+        responseVo.setIcon(mainVo.getIcon());
+        responseVo.setSyncCategory(mainVo.getSyncCategory());
+        responseVo.setStatus(mainVo.getStatus());
+
+        // 设置面板数据
+        EpCategoryResponseVo.PanelData panelData = new EpCategoryResponseVo.PanelData();
+        panelData.setMainTitle(mainVo.getPanelMainTitle());
+        panelData.setSubTitle(mainVo.getPanelSubTitle());
+        responseVo.setPanelData(panelData);
+
+        // 查询子项数据
+        List<EpCategoryItemVo> itemVoList = categoryItemMapper.selectVoList(
+            Wrappers.<EpCategoryItem>lambdaQuery()
+                .eq(EpCategoryItem::getCategoryId, id)
+                .orderByAsc(EpCategoryItem::getSortOrder)
+        );
+
+        if (itemVoList != null && !itemVoList.isEmpty()) {
+            // 分离tag和note类型
+            List<EpCategoryResponseVo.TagItem> tags = new java.util.ArrayList<>();
+            List<EpCategoryResponseVo.NoteItem> notes = new java.util.ArrayList<>();
+
+            for (EpCategoryItemVo itemVo : itemVoList) {
+                if ("tag".equals(itemVo.getItemType())) {
+                    // 转换为TagItem
+                    EpCategoryResponseVo.TagItem tag = new EpCategoryResponseVo.TagItem();
+                    tag.setId(itemVo.getId());
+                    tag.setName(itemVo.getName());
+                    tag.setLink(itemVo.getLink());
+                    tag.setSortOrder(itemVo.getSortOrder());
+                    tags.add(tag);
+                } else if ("note".equals(itemVo.getItemType())) {
+                    // 转换为NoteItem
+                    EpCategoryResponseVo.NoteItem note = new EpCategoryResponseVo.NoteItem();
+                    note.setId(itemVo.getId());
+                    note.setName(itemVo.getName());
+                    note.setLink(itemVo.getLink());
+                    note.setSortOrder(itemVo.getSortOrder());
+                    notes.add(note);
+                }
+            }
+
+            responseVo.setTags(tags);
+            panelData.setNotes(notes);
+        }
+        EpCategoryMainVo vo = baseMapper.selectVoById(id);
+        return vo;
+    }
+
+
+
+    /**
+     * 分页查询分类设置主列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 分类设置主分页列表
+     */
+    @Override
+    public TableDataInfo<EpCategoryMainVo> queryPageList(EpCategoryMainBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EpCategoryMain> lqw = buildQueryWrapper(bo);
+        Page<EpCategoryMainVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的分类设置主列表
+     *
+     * @param bo 查询条件
+     * @return 分类设置主列表
+     */
+    @Override
+    public List<EpCategoryMainVo> queryList(EpCategoryMainBo bo) {
+        LambdaQueryWrapper<EpCategoryMain> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EpCategoryMain> buildQueryWrapper(EpCategoryMainBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EpCategoryMain> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(EpCategoryMain::getId);
+        lqw.like(StringUtils.isNotBlank(bo.getName()), EpCategoryMain::getName, bo.getName());
+        lqw.eq(StringUtils.isNotBlank(bo.getIcon()), EpCategoryMain::getIcon, bo.getIcon());
+        lqw.eq(bo.getSyncCategoryId() != null, EpCategoryMain::getSyncCategoryId, bo.getSyncCategoryId());
+        lqw.eq(StringUtils.isNotBlank(bo.getSyncCategory()), EpCategoryMain::getSyncCategory, bo.getSyncCategory());
+        lqw.eq(bo.getStatus() != null, EpCategoryMain::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPanelMainTitle()), EpCategoryMain::getPanelMainTitle, bo.getPanelMainTitle());
+        lqw.eq(StringUtils.isNotBlank(bo.getPanelSubTitle()), EpCategoryMain::getPanelSubTitle, bo.getPanelSubTitle());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), EpCategoryMain::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增分类设置主
+     *
+     * @param bo 分类设置主
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(EpCategoryMainBo bo) {
+        EpCategoryMain add = MapstructUtils.convert(bo, EpCategoryMain.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+            
+            // 保存分类项列表
+            saveCategoryItems(add.getId(), bo);
+        }
+        return flag;
+    }
+
+    /**
+     * 修改分类设置主
+     *
+     * @param bo 分类设置主
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(EpCategoryMainBo bo) {
+        EpCategoryMain update = MapstructUtils.convert(bo, EpCategoryMain.class);
+        validEntityBeforeSave(update);
+        boolean flag = baseMapper.updateById(update) > 0;
+        if (flag) {
+            // 先根据categoryId删除原有的子项
+            categoryItemMapper.delete(Wrappers.<EpCategoryItem>lambdaQuery().eq(EpCategoryItem::getCategoryId, update.getId()));
+
+            // 再重新添加新的子项
+            saveCategoryItems(update.getId(), bo);
+        }
+        return flag;
+    }
+
+    /**
+     * 保存分类项(从 remark 和 categoryItemList 中解析)
+     *
+     * @param categoryId 分类ID
+     * @param bo 业务对象
+     */
+    private void saveCategoryItems(Long categoryId, EpCategoryMainBo bo) {
+        List<EpCategoryItem> items = new java.util.ArrayList<>();
+        
+        // 1. 处理 remark 中的 JSON 数据
+        String remark = bo.getRemark();
+        if (StringUtils.isNotBlank(remark)) {
+            try {
+                JsonNode rootNode = objectMapper.readTree(remark);
+                
+                // 处理 tags
+                JsonNode tagsNode = rootNode.get("tags");
+                if (tagsNode != null && tagsNode.isArray()) {
+                    int sortOrder = 0;
+                    for (JsonNode tagNode : tagsNode) {
+                        EpCategoryItem item = new EpCategoryItem();
+                        item.setCategoryId(categoryId);
+                        item.setItemType("tag");
+                        item.setName(tagNode.has("name") ? tagNode.get("name").asText() : null);
+                        item.setLink(tagNode.has("link") ? tagNode.get("link").asText() : null);
+                        item.setSortOrder((long) sortOrder++);
+                        items.add(item);
+                    }
+                }
+                
+                // 处理 notes
+                JsonNode notesNode = rootNode.get("notes");
+                if (notesNode != null && notesNode.isArray()) {
+                    int sortOrder = items.size();
+                    for (JsonNode noteNode : notesNode) {
+                        EpCategoryItem item = new EpCategoryItem();
+                        item.setCategoryId(categoryId);
+                        item.setItemType("note");
+                        item.setName(noteNode.has("name") ? noteNode.get("name").asText() : null);
+                        item.setLink(noteNode.has("link") ? noteNode.get("link").asText() : null);
+                        item.setSortOrder((long) sortOrder++);
+                        items.add(item);
+                    }
+                }
+                
+                // 处理 groups(如果需要)
+                JsonNode groupsNode = rootNode.get("groups");
+                if (groupsNode != null && groupsNode.isArray()) {
+                    int sortOrder = items.size();
+                    for (JsonNode groupNode : groupsNode) {
+                        EpCategoryItem item = new EpCategoryItem();
+                        item.setCategoryId(categoryId);
+                        item.setItemType("group");
+                        item.setName(groupNode.has("name") ? groupNode.get("name").asText() : null);
+                        item.setLink(groupNode.has("link") ? groupNode.get("link").asText() : null);
+                        item.setSortOrder((long) sortOrder++);
+                        items.add(item);
+                    }
+                }
+            } catch (Exception e) {
+                log.error("解析 remark JSON 数据失败", e);
+            }
+        }
+        
+        // 2. 处理 categoryItemList(如果存在,优先级更高)
+        List<EpCategoryItemBo> categoryItemList = bo.getCategoryItemList();
+        if (categoryItemList != null && !categoryItemList.isEmpty()) {
+            for (EpCategoryItemBo categoryItemBo : categoryItemList) {
+                categoryItemBo.setCategoryId(categoryId);
+                EpCategoryItem item = MapstructUtils.convert(categoryItemBo, EpCategoryItem.class);
+                items.add(item);
+            }
+        }
+        
+        // 3. 批量插入
+        if (!items.isEmpty()) {
+            categoryItemMapper.insertBatch(items);
+        }
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(EpCategoryMain entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除分类设置主信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 138 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpHeaderCategoryServiceImpl.java

@@ -0,0 +1,138 @@
+package org.dromara.mall.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.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 lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.mall.domain.bo.EpHeaderCategoryBo;
+import org.dromara.mall.domain.vo.EpHeaderCategoryVo;
+import org.dromara.mall.domain.EpHeaderCategory;
+import org.dromara.mall.mapper.EpHeaderCategoryMapper;
+import org.dromara.mall.service.IEpHeaderCategoryService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 头部分类管理Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class EpHeaderCategoryServiceImpl  extends ServiceImpl<EpHeaderCategoryMapper, EpHeaderCategory> implements IEpHeaderCategoryService {
+
+    private final EpHeaderCategoryMapper baseMapper;
+
+    /**
+     * 查询头部分类管理
+     *
+     * @param id 主键
+     * @return 头部分类管理
+     */
+    @Override
+    public EpHeaderCategoryVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询头部分类管理列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 头部分类管理分页列表
+     */
+    @Override
+    public TableDataInfo<EpHeaderCategoryVo> queryPageList(EpHeaderCategoryBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EpHeaderCategory> lqw = buildQueryWrapper(bo);
+        Page<EpHeaderCategoryVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的头部分类管理列表
+     *
+     * @param bo 查询条件
+     * @return 头部分类管理列表
+     */
+    @Override
+    public List<EpHeaderCategoryVo> queryList(EpHeaderCategoryBo bo) {
+        LambdaQueryWrapper<EpHeaderCategory> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EpHeaderCategory> buildQueryWrapper(EpHeaderCategoryBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EpHeaderCategory> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(EpHeaderCategory::getId);
+        lqw.eq(StringUtils.isNotBlank(bo.getTitle()), EpHeaderCategory::getTitle, bo.getTitle());
+        lqw.eq(StringUtils.isNotBlank(bo.getIcon()), EpHeaderCategory::getIcon, bo.getIcon());
+        lqw.eq(StringUtils.isNotBlank(bo.getLink()), EpHeaderCategory::getLink, bo.getLink());
+        lqw.eq(StringUtils.isNotBlank(bo.getOpenMode()), EpHeaderCategory::getOpenMode, bo.getOpenMode());
+        lqw.eq(bo.getStatus() != null, EpHeaderCategory::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), EpHeaderCategory::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增头部分类管理
+     *
+     * @param bo 头部分类管理
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(EpHeaderCategoryBo bo) {
+        EpHeaderCategory add = MapstructUtils.convert(bo, EpHeaderCategory.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改头部分类管理
+     *
+     * @param bo 头部分类管理
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(EpHeaderCategoryBo bo) {
+        EpHeaderCategory update = MapstructUtils.convert(bo, EpHeaderCategory.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(EpHeaderCategory entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除头部分类管理信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 137 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/EpHotWordServiceImpl.java

@@ -0,0 +1,137 @@
+package org.dromara.mall.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.mall.domain.EpHotWord;
+import org.dromara.mall.domain.bo.EpHotWordBo;
+import org.dromara.mall.domain.vo.EpHotWordVo;
+import org.dromara.mall.mapper.EpHotWordMapper;
+import org.dromara.mall.service.IEpHotWordService;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 搜索热词配置Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-05-18
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class EpHotWordServiceImpl extends ServiceImpl<EpHotWordMapper, EpHotWord> implements IEpHotWordService {
+
+    private final EpHotWordMapper baseMapper;
+
+    /**
+     * 查询搜索热词配置
+     *
+     * @param id 主键
+     * @return 搜索热词配置
+     */
+    @Override
+    public EpHotWordVo queryById(Long id) {
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询搜索热词配置列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 搜索热词配置分页列表
+     */
+    @Override
+    public TableDataInfo<EpHotWordVo> queryPageList(EpHotWordBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<EpHotWord> lqw = buildQueryWrapper(bo);
+        Page<EpHotWordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的搜索热词配置列表
+     *
+     * @param bo 查询条件
+     * @return 搜索热词配置列表
+     */
+    @Override
+    public List<EpHotWordVo> queryList(EpHotWordBo bo) {
+        LambdaQueryWrapper<EpHotWord> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<EpHotWord> buildQueryWrapper(EpHotWordBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<EpHotWord> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(EpHotWord::getId);
+        lqw.like(StringUtils.isNotBlank(bo.getName()), EpHotWord::getName, bo.getName());
+        lqw.eq(StringUtils.isNotBlank(bo.getLink()), EpHotWord::getLink, bo.getLink());
+        lqw.eq(bo.getSortOrder() != null, EpHotWord::getSortOrder, bo.getSortOrder());
+        lqw.eq(bo.getStatus() != null, EpHotWord::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), EpHotWord::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增搜索热词配置
+     *
+     * @param bo 搜索热词配置
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(EpHotWordBo bo) {
+        EpHotWord add = MapstructUtils.convert(bo, EpHotWord.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改搜索热词配置
+     *
+     * @param bo 搜索热词配置
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(EpHotWordBo bo) {
+        EpHotWord update = MapstructUtils.convert(bo, EpHotWord.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(EpHotWord entity) {
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除搜索热词配置信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов