diff --git a/dl_admin/pom.xml b/dl_admin/pom.xml
index 3419081..6f16c4d 100644
--- a/dl_admin/pom.xml
+++ b/dl_admin/pom.xml
@@ -10,7 +10,7 @@
ruoyi
http://www.ruoyi.vip
- 通告快接管理后台
+ 成事达管理后台
3.8.9
@@ -37,6 +37,8 @@
5.3.39
5.8.26
3.5.1
+ 3.17.4
+ 4.5.13
@@ -229,7 +231,18 @@
ruoyi-common
${ruoyi.version}
-
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ ${aliyun.sdk.oss.version}
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ ${httpclient.version}
+
diff --git a/dl_admin/ruoyi-admin/pom.xml b/dl_admin/ruoyi-admin/pom.xml
index 544ff2b..8666b85 100644
--- a/dl_admin/ruoyi-admin/pom.xml
+++ b/dl_admin/ruoyi-admin/pom.xml
@@ -9,13 +9,25 @@
4.0.0
jar
- ruoyi-admin
+ nuxt-site
web服务入口
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.17.4
+
+
+
+ commons-io
+ commons-io
+ 2.11.0
+
@@ -106,6 +118,38 @@
weixin-java-common
4.6.0
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+
+
+
+ org.apache.httpcomponents
+ httpclient
+
+
+ org.springframework
+ spring-websocket
+ 5.3.31
+
+
+
+ org.lionsoul
+ ip2region
+ 2.7.0
+
+
+ org.jsoup
+ jsoup
+ 1.11.3
+
+
+
+ com.google.api-ads
+ google-ads
+ 38.0.0
+
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseAppController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseAppController.java
new file mode 100644
index 0000000..86536a7
--- /dev/null
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseAppController.java
@@ -0,0 +1,112 @@
+package com.ruoyi.base.controller;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.base.domain.BaseApp;
+import com.ruoyi.base.service.IBaseAppService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * app版本管理Controller
+ *
+ * @author vinjor-m
+ * @date 2025-08-25
+ */
+@RestController
+@RequestMapping("/base/app")
+public class BaseAppController extends BaseController
+{
+ @Autowired
+ private IBaseAppService baseAppService;
+
+ /**
+ * 查询app版本管理列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:app:list')")
+ @GetMapping("/list")
+ public AjaxResult list(BaseApp baseApp,
+ @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
+ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
+ {
+ Page page = new Page<>(pageNum, pageSize);
+ IPage list = baseAppService.queryListPage(baseApp,page);
+ return success(list);
+ }
+
+ /**
+ * 导出app版本管理列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:app:export')")
+ @Log(title = "app版本管理", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BaseApp baseApp)
+ {
+ List list = baseAppService.list();
+ ExcelUtil util = new ExcelUtil(BaseApp.class);
+ util.exportExcel(response, list, "app版本管理数据");
+ }
+
+ /**
+ * 获取app版本管理详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('base:app:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(baseAppService.getById(id));
+ }
+
+ /**
+ * 新增app版本管理
+ */
+ @PreAuthorize("@ss.hasPermi('base:app:add')")
+ @Log(title = "app版本管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody BaseApp baseApp)
+ {
+ return toAjax(baseAppService.save(baseApp));
+ }
+
+ /**
+ * 修改app版本管理
+ */
+ @PreAuthorize("@ss.hasPermi('base:app:edit')")
+ @Log(title = "app版本管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody BaseApp baseApp)
+ {
+ return toAjax(baseAppService.updateById(baseApp));
+ }
+
+ /**
+ * 删除app版本管理
+ */
+ @PreAuthorize("@ss.hasPermi('base:app:remove')")
+ @Log(title = "app版本管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ List list = new ArrayList<>(Arrays.asList(ids));
+ return toAjax(baseAppService.removeByIds(list));
+ }
+}
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseInquiryController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseInquiryController.java
new file mode 100644
index 0000000..be221d9
--- /dev/null
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseInquiryController.java
@@ -0,0 +1,74 @@
+package com.ruoyi.base.controller;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.base.domain.BaseInquiry;
+import com.ruoyi.base.service.IBaseInquiryService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 在线询盘设置Controller
+ *
+ * @author vinjor-m
+ * @date 2025-06-24
+ */
+@RestController
+@RequestMapping("/base/inquiry")
+public class BaseInquiryController extends BaseController
+{
+ @Autowired
+ private IBaseInquiryService baseInquiryService;
+
+ /**
+ * 获取在线询盘设置详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('base:inquiry:query')")
+ @GetMapping(value = "/getInquiry")
+ public AjaxResult getInquiry(String tenantId)
+ {
+ return success(baseInquiryService.getInquiry(tenantId));
+ }
+
+ /**
+ * 新增在线询盘设置
+ */
+ @PreAuthorize("@ss.hasPermi('base:inquiry:add')")
+ @Log(title = "在线询盘设置", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody BaseInquiry baseInquiry)
+ {
+ return toAjax(baseInquiryService.saveOrUpdate(baseInquiry));
+ }
+
+ /**
+ * 修改在线询盘设置
+ */
+ @PreAuthorize("@ss.hasPermi('base:inquiry:edit')")
+ @Log(title = "在线询盘设置", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody BaseInquiry baseInquiry)
+ {
+ return toAjax(baseInquiryService.saveOrUpdate(baseInquiry));
+ }
+
+}
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseManagerController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseManagerController.java
new file mode 100644
index 0000000..39eb5e7
--- /dev/null
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseManagerController.java
@@ -0,0 +1,118 @@
+package com.ruoyi.base.controller;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.base.vo.ManagerVO;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.base.domain.BaseManager;
+import com.ruoyi.base.service.IBaseManagerService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 站点分配Controller
+ *
+ * @author vinjor-m
+ * @date 2025-08-11
+ */
+@RestController
+@RequestMapping("/base/manager")
+public class BaseManagerController extends BaseController
+{
+ @Autowired
+ private IBaseManagerService baseManagerService;
+
+ /**
+ * 查询站点分配列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:manager:list')")
+ @GetMapping("/list")
+ public AjaxResult list(ManagerVO baseManager,
+ @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
+ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
+ {
+ Page page = new Page<>(pageNum, pageSize);
+ IPage list = baseManagerService.queryListPage(baseManager,page);
+ return success(list);
+ }
+
+ /**
+ * 导出站点分配列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:manager:export')")
+ @Log(title = "站点分配", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BaseManager baseManager)
+ {
+ List list = baseManagerService.list();
+ ExcelUtil util = new ExcelUtil(BaseManager.class);
+ util.exportExcel(response, list, "站点分配数据");
+ }
+
+ /**
+ * 获取站点分配详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('base:manager:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(baseManagerService.getById(id));
+ }
+
+ /**
+ * 新增站点分配
+ */
+ @PreAuthorize("@ss.hasPermi('base:manager:add')")
+ @Log(title = "站点分配", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ManagerVO baseManager) {
+ baseManager.setTenantId(baseManager.getSiteId());
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper()
+ .eq(BaseManager::getTenantId,baseManager.getSiteId());
+ baseManagerService.remove(lambdaQueryWrapper);
+ return toAjax(baseManagerService.save(baseManager));
+ }
+
+ /**
+ * 修改站点分配
+ */
+ @PreAuthorize("@ss.hasPermi('base:manager:edit')")
+ @Log(title = "站点分配", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody BaseManager baseManager)
+ {
+ return toAjax(baseManagerService.updateById(baseManager));
+ }
+
+ /**
+ * 删除站点分配
+ */
+ @PreAuthorize("@ss.hasPermi('base:manager:remove')")
+ @Log(title = "站点分配", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ List list = new ArrayList<>(Arrays.asList(ids));
+ return toAjax(baseManagerService.removeByIds(list));
+ }
+}
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BasePicController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BasePicController.java
new file mode 100644
index 0000000..b760788
--- /dev/null
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BasePicController.java
@@ -0,0 +1,112 @@
+package com.ruoyi.base.controller;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.base.domain.BasePic;
+import com.ruoyi.base.service.IBasePicService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 轮播图管理Controller
+ *
+ * @author vinjor-m
+ * @date 2025-06-23
+ */
+@RestController
+@RequestMapping("/base/pic")
+public class BasePicController extends BaseController
+{
+ @Autowired
+ private IBasePicService basePicService;
+
+ /**
+ * 查询轮播图管理列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:pic:list')")
+ @GetMapping("/list")
+ public AjaxResult list(BasePic basePic,
+ @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
+ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
+ {
+ Page page = new Page<>(pageNum, pageSize);
+ IPage list = basePicService.queryListPage(basePic,page);
+ return success(list);
+ }
+
+ /**
+ * 导出轮播图管理列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:pic:export')")
+ @Log(title = "轮播图管理", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BasePic basePic)
+ {
+ List list = basePicService.list();
+ ExcelUtil util = new ExcelUtil(BasePic.class);
+ util.exportExcel(response, list, "轮播图管理数据");
+ }
+
+ /**
+ * 获取轮播图管理详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('base:pic:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(basePicService.getById(id));
+ }
+
+ /**
+ * 新增轮播图管理
+ */
+ @PreAuthorize("@ss.hasPermi('base:pic:add')")
+ @Log(title = "轮播图管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody BasePic basePic)
+ {
+ return toAjax(basePicService.save(basePic));
+ }
+
+ /**
+ * 修改轮播图管理
+ */
+ @PreAuthorize("@ss.hasPermi('base:pic:edit')")
+ @Log(title = "轮播图管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody BasePic basePic)
+ {
+ return toAjax(basePicService.updateById(basePic));
+ }
+
+ /**
+ * 删除轮播图管理
+ */
+ @PreAuthorize("@ss.hasPermi('base:pic:remove')")
+ @Log(title = "轮播图管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ List list = new ArrayList<>(Arrays.asList(ids));
+ return toAjax(basePicService.removeByIds(list));
+ }
+}
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BasePicsController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BasePicsController.java
new file mode 100644
index 0000000..7982696
--- /dev/null
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BasePicsController.java
@@ -0,0 +1,118 @@
+package com.ruoyi.base.controller;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.base.vo.PicsVO;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.base.domain.BasePics;
+import com.ruoyi.base.service.IBasePicsService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 图片库Controller
+ *
+ * @author vinjor-m
+ * @date 2025-06-24
+ */
+@RestController
+@RequestMapping("/base/pics")
+public class BasePicsController extends BaseController
+{
+ @Autowired
+ private IBasePicsService basePicsService;
+
+ /**
+ * 查询图片库列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:pics:list')")
+ @GetMapping("/list")
+ public AjaxResult list(BasePics basePics,
+ @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
+ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
+ {
+ Page page = new Page<>(pageNum, pageSize);
+ IPage list = basePicsService.queryListPage(basePics,page);
+ return success(list);
+ }
+
+ /**
+ * 导出图片库列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:pics:export')")
+ @Log(title = "图片库", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BasePics basePics)
+ {
+ List list = basePicsService.list();
+ ExcelUtil util = new ExcelUtil(BasePics.class);
+ util.exportExcel(response, list, "图片库数据");
+ }
+
+ /**
+ * 获取图片库详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('base:pics:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(basePicsService.getById(id));
+ }
+
+ /**
+ * 新增图片库
+ */
+ @PreAuthorize("@ss.hasPermi('base:pics:add')")
+ @Log(title = "图片库", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody PicsVO basePics)
+ {
+ List basePicsList = basePics.getFileList();
+ basePicsList.forEach(item->{
+ item.setFileType(basePics.getFileType());
+ item.setTenantId(basePics.getTenantId());
+ });
+ return toAjax(basePicsService.saveBatch(basePicsList));
+ }
+
+ /**
+ * 修改图片库
+ */
+ @PreAuthorize("@ss.hasPermi('base:pics:edit')")
+ @Log(title = "图片库", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody BasePics basePics)
+ {
+ return toAjax(basePicsService.updateById(basePics));
+ }
+
+ /**
+ * 删除图片库
+ */
+ @PreAuthorize("@ss.hasPermi('base:pics:remove')")
+ @Log(title = "图片库", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ List list = new ArrayList<>(Arrays.asList(ids));
+ return toAjax(basePicsService.removeByIds(list));
+ }
+}
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSeoController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSeoController.java
new file mode 100644
index 0000000..73e7437
--- /dev/null
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSeoController.java
@@ -0,0 +1,88 @@
+package com.ruoyi.base.controller;
+
+import java.util.*;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletResponse;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.base.vo.KeywordVO;
+import com.ruoyi.busi.service.GoogleKeywordService;
+import com.ruoyi.common.config.GoogleConfig;
+import com.ruoyi.common.utils.StringUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.base.domain.BaseSeo;
+import com.ruoyi.base.service.IBaseSeoService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+import static com.ruoyi.constant.StrConstants.COUNTRY;
+import static com.ruoyi.constant.StrConstants.LANGUAGE;
+
+/**
+ * SEO用到的国家和语言Controller
+ *
+ * @author vinjor-m
+ * @date 2025-08-04
+ */
+@RestController
+@RequestMapping("/base/seo")
+public class BaseSeoController extends BaseController {
+ @Autowired
+ private GoogleConfig googleConfig;
+ @Autowired
+ private IBaseSeoService baseSeoService;
+ @Autowired
+ private GoogleKeywordService googleKeywordService;
+
+ /**
+ * 查询SEO用到的国家和语言列表
+ */
+ @GetMapping("/list")
+ public AjaxResult list() {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().orderByAsc(BaseSeo::getSort);
+ List list = baseSeoService.list(queryWrapper);
+ List languageList = list.stream().filter(item -> LANGUAGE.equals(item.getDataType())).collect(Collectors.toList());
+ List countryList = list.stream().filter(item -> COUNTRY.equals(item.getDataType())).collect(Collectors.toList());
+ languageList.forEach(item->item.setTitle(item.getTitle()+"("+item.getCn()+")"));
+ countryList.forEach(item->item.setTitle(item.getTitle()+"("+item.getCn()+")"));
+ Map rtnMap = new HashMap<>();
+ rtnMap.put("language", languageList);
+ rtnMap.put("country", countryList);
+ return success(rtnMap);
+ }
+
+ /**
+ * 获取google关键词
+ *
+ * @param language 语言
+ * @param country 国家
+ * @param title 关键词
+ * @param url 产品预览网址
+ * @return com.ruoyi.common.core.domain.AjaxResult
+ * @author vinjor-M
+ * @date 17:51 2025/8/4
+ **/
+ @GetMapping("/getKeywords")
+ public AjaxResult getKeywords(String language, String country, String title, String url) {
+ Map rtnMap = new HashMap<>();
+ rtnMap.put("searchDown",googleConfig.getSearchDown());
+ rtnMap.put("dataList",googleKeywordService.getKeywords(language, country, title, url));
+ return success(rtnMap);
+ }
+}
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteController.java
index a06b7a4..8e98259 100644
--- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteController.java
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteController.java
@@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.base.vo.SiteVO;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -48,7 +49,7 @@ public class BaseSiteController extends BaseController {
@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page page = new Page<>(pageNum, pageSize);
- IPage list = baseSiteService.queryListPage(baseSite, page);
+ IPage list = baseSiteService.queryListPage(baseSite, page);
return success(list);
}
@@ -61,7 +62,7 @@ public class BaseSiteController extends BaseController {
**/
@GetMapping("/listAll")
public AjaxResult list() {
- return success(baseSiteService.list());
+ return success(baseSiteService.getMySiteList());
}
/**
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteInfoController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteInfoController.java
index fc442dd..8e7add3 100644
--- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteInfoController.java
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteInfoController.java
@@ -39,41 +39,15 @@ public class BaseSiteInfoController extends BaseController
@Autowired
private IBaseSiteInfoService baseSiteInfoService;
- /**
- * 查询站点基础信息列表
- */
- @PreAuthorize("@ss.hasPermi('base:info:list')")
- @GetMapping("/list")
- public AjaxResult list(BaseSiteInfo baseSiteInfo,
- @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
- @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
- {
- Page page = new Page<>(pageNum, pageSize);
- IPage list = baseSiteInfoService.queryListPage(baseSiteInfo,page);
- return success(list);
- }
-
- /**
- * 导出站点基础信息列表
- */
- @PreAuthorize("@ss.hasPermi('base:info:export')")
- @Log(title = "站点基础信息", businessType = BusinessType.EXPORT)
- @PostMapping("/export")
- public void export(HttpServletResponse response, BaseSiteInfo baseSiteInfo)
- {
- List list = baseSiteInfoService.list();
- ExcelUtil util = new ExcelUtil(BaseSiteInfo.class);
- util.exportExcel(response, list, "站点基础信息数据");
- }
/**
* 获取站点基础信息详细信息
*/
@PreAuthorize("@ss.hasPermi('base:info:query')")
- @GetMapping(value = "/{id}")
- public AjaxResult getInfo(@PathVariable("id") String id)
+ @GetMapping(value = "/getSiteInfo")
+ public AjaxResult getInfo(String tenantId)
{
- return success(baseSiteInfoService.getById(id));
+ return success(baseSiteInfoService.getSiteInfo(tenantId));
}
/**
@@ -84,7 +58,7 @@ public class BaseSiteInfoController extends BaseController
@PostMapping
public AjaxResult add(@RequestBody BaseSiteInfo baseSiteInfo)
{
- return toAjax(baseSiteInfoService.save(baseSiteInfo));
+ return toAjax(baseSiteInfoService.saveOrUpdate(baseSiteInfo));
}
/**
@@ -98,15 +72,4 @@ public class BaseSiteInfoController extends BaseController
return toAjax(baseSiteInfoService.updateById(baseSiteInfo));
}
- /**
- * 删除站点基础信息
- */
- @PreAuthorize("@ss.hasPermi('base:info:remove')")
- @Log(title = "站点基础信息", businessType = BusinessType.DELETE)
- @DeleteMapping("/{ids}")
- public AjaxResult remove(@PathVariable String[] ids)
- {
- List list = new ArrayList<>(Arrays.asList(ids));
- return toAjax(baseSiteInfoService.removeByIds(list));
- }
}
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseTempController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseTempController.java
new file mode 100644
index 0000000..08a514b
--- /dev/null
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseTempController.java
@@ -0,0 +1,112 @@
+package com.ruoyi.base.controller;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.base.domain.BaseTemp;
+import com.ruoyi.base.service.IBaseTempService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 模板库Controller
+ *
+ * @author pqz
+ * @date 2025-08-07
+ */
+@RestController
+@RequestMapping("/base/temp")
+public class BaseTempController extends BaseController
+{
+ @Autowired
+ private IBaseTempService baseTempService;
+
+ /**
+ * 查询模板库列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:temp:list')")
+ @GetMapping("/list")
+ public AjaxResult list(BaseTemp baseTemp,
+ @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
+ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
+ {
+ Page page = new Page<>(pageNum, pageSize);
+ IPage list = baseTempService.queryListPage(baseTemp,page);
+ return success(list);
+ }
+
+ /**
+ * 导出模板库列表
+ */
+ @PreAuthorize("@ss.hasPermi('base:temp:export')")
+ @Log(title = "模板库", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BaseTemp baseTemp)
+ {
+ List list = baseTempService.list();
+ ExcelUtil util = new ExcelUtil(BaseTemp.class);
+ util.exportExcel(response, list, "模板库数据");
+ }
+
+ /**
+ * 获取模板库详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('base:temp:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(baseTempService.getById(id));
+ }
+
+ /**
+ * 新增模板库有3万块钱的购物卡么
+ */
+ @PreAuthorize("@ss.hasPermi('base:temp:add')")
+ @Log(title = "模板库", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody BaseTemp baseTemp)
+ {
+ return toAjax(baseTempService.save(baseTemp));
+ }
+
+ /**
+ * 修改模板库
+ */
+ @PreAuthorize("@ss.hasPermi('base:temp:edit')")
+ @Log(title = "模板库", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody BaseTemp baseTemp)
+ {
+ return toAjax(baseTempService.updateById(baseTemp));
+ }
+
+ /**
+ * 删除模板库
+ */
+ @PreAuthorize("@ss.hasPermi('base:temp:remove')")
+ @Log(title = "模板库", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ List list = new ArrayList<>(Arrays.asList(ids));
+ return toAjax(baseTempService.removeByIds(list));
+ }
+}
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/ChatController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/ChatController.java
new file mode 100644
index 0000000..7ae39d2
--- /dev/null
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/ChatController.java
@@ -0,0 +1,91 @@
+package com.ruoyi.base.controller;
+
+import cn.hutool.json.JSONArray;
+import com.ruoyi.busi.domain.BusiChatItem;
+import com.ruoyi.busi.domain.BusiChatMain;
+import com.ruoyi.busi.service.IBusiChatItemService;
+import com.ruoyi.busi.service.IBusiChatMainService;
+import com.ruoyi.busi.utils.CommonUtils;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 会话接口 专用Controller
+ *
+ * @author vinjor-m
+ * @date 2025-06-23
+ */
+@Api("会话接口")
+@RestController
+@RequestMapping("/chat")
+public class ChatController {
+ @Autowired
+ private IBusiChatMainService busiChatMainService;
+ @Autowired
+ private CommonUtils commonUtils;
+ @Autowired
+ private IBusiChatItemService busiChatItemService;
+ /**
+ * 创建新会话
+ */
+ @PostMapping("/newChat")
+ public AjaxResult createSession(@RequestBody BusiChatMain busiChatMain, HttpServletRequest request) {
+ Map ipMap = commonUtils.getIPAndCountry(request);
+ busiChatMain.setIp(ipMap.get("ip"));
+ busiChatMain.setNational(ipMap.get("national"));
+ busiChatMain.setOceania(ipMap.get("oceania"));
+ return AjaxResult.success(busiChatMainService.createSession(busiChatMain));
+ }
+ /**
+ * 发送消息
+ */
+ @PostMapping("/newMes")
+ public AjaxResult sendMessage(@RequestBody BusiChatItem message) {
+ return AjaxResult.success(busiChatItemService.sendMessage(message));
+ }
+
+ /**
+ * 查询用户活跃会话
+ */
+ @GetMapping("/active")
+ public AjaxResult getActiveSession(String tenantId, String deviceCode,@RequestParam(value = "prodId", required = false) String prodId, HttpServletRequest request) {
+ BusiChatMain session = busiChatMainService.selectActiveSession(tenantId, CommonUtils.getIpAddr(request), deviceCode,prodId);
+ return AjaxResult.success(session);
+ }
+
+ /**
+ * 结束会话
+ */
+ @PutMapping("/close/{sessionId}")
+ public AjaxResult closeSession(@PathVariable String sessionId) {
+ boolean success = busiChatMainService.closeSession(sessionId);
+ return success ? AjaxResult.success() : AjaxResult.error("结束会话失败");
+ }
+
+ /**
+ * 根据会话ID查询消息列表
+ */
+ @GetMapping("/session/{sessionId}")
+ public AjaxResult getBySessionId(@PathVariable String sessionId) {
+ List messages = busiChatItemService.selectBySessionId(sessionId);
+ return AjaxResult.success(messages);
+ }
+
+ /**
+ * 标记消息为已读
+ */
+ @PutMapping("/read/{sessionId}")
+ public AjaxResult markAsRead(@PathVariable String sessionId, @RequestParam String receiverId) {
+ busiChatItemService.markAsRead(sessionId, receiverId);
+ return AjaxResult.success();
+ }
+}
diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java
new file mode 100644
index 0000000..2c7060c
--- /dev/null
+++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java
@@ -0,0 +1,526 @@
+package com.ruoyi.base.controller;
+
+import cn.hutool.json.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.base.domain.BaseApp;
+import com.ruoyi.base.domain.BaseInquiry;
+import com.ruoyi.base.domain.BasePic;
+import com.ruoyi.base.domain.BaseSiteInfo;
+import com.ruoyi.base.service.*;
+import com.ruoyi.busi.domain.*;
+import com.ruoyi.busi.service.*;
+import com.ruoyi.busi.utils.CommonUtils;
+import com.ruoyi.busi.vo.BusiCategoryVO;
+import com.ruoyi.busi.vo.SiteMapVO;
+import com.ruoyi.busi.vo.WebDetailVO;
+import com.ruoyi.common.config.GoogleConfig;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.service.ISysDictDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.OutputStream;
+import java.util.*;
+
+import static com.ruoyi.constant.DictConstants.*;
+import static com.ruoyi.constant.DictConstants.CATG_TYPE_WZ;
+
+/**
+ * Web 专用Controller
+ *
+ * @author vinjor-m
+ * @date 2025-06-23
+ */
+@Api("站点接口")
+@RestController
+@RequestMapping("/web")
+public class WebController extends BaseController {
+ @Autowired
+ private IBasePicService basePicService;
+ @Autowired
+ private IBaseInquiryService baseInquiryService;
+ @Autowired
+ private IBusiCategoryService categoryService;
+ @Autowired
+ private IBaseSiteInfoService siteInfoService;
+ @Autowired
+ private IBusiProdNewService prodNewService;
+ @Autowired
+ private IBusiInquiryItemService inquiryItemService;
+ @Autowired
+ private IBusiChatMainService busiChatMainService;
+ @Autowired
+ private IBusiPageService pageService;
+ @Autowired
+ private CommonUtils commonUtils;
+ @Autowired
+ private ISysDictDataService dictDataService;
+ @Autowired
+ private IBaseAppService appService;
+ @Autowired
+ private GoogleConfig googleConfig;
+
+ /**
+ * 导航栏接口--所有分类
+ *
+ * @return com.ruoyi.common.core.domain.AjaxResult
+ * @author vinjor-M
+ * @date 10:04 2025/7/8
+ **/
+ @ApiOperation("获取站点分类树--所有分类")
+ @ApiImplicitParam(name = "tenantId", value = "站点唯一码", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class)
+ @GetMapping("/category")
+ public R> categoryList(@RequestParam(required = true) String tenantId) {
+ BusiCategory category = new BusiCategory();
+ category.setTenantId(tenantId);
+ List busiCategoryVOList = categoryService.treeCategory(category);
+ return R.ok(categoryService.dealFirstId(busiCategoryVOList));
+ }
+
+ /**
+ * 获取站点产品分类树--产品分类
+ *
+ * @return com.ruoyi.common.core.domain.AjaxResult
+ * @author vinjor-M
+ * @date 10:04 2025/7/8
+ **/
+ @ApiOperation("获取站点分类树--根据一级分类ID查询所有子级分类树")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "tenantId", value = "站点唯一码", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class),
+ @ApiImplicitParam(name = "catgId", value = "一级分类ID", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class)
+ })
+ @GetMapping("/prodCategory")
+ public R> prodCategoryList(@RequestParam(required = true) String tenantId, @RequestParam(required = true) String catgId) {
+ BusiCategory category = new BusiCategory();
+ category.setTenantId(tenantId);
+ List busiCategoryVOList = categoryService.treeCategory(category);
+ for (BusiCategoryVO categoryVO : busiCategoryVOList) {
+ if (catgId.equals(categoryVO.getId())) {
+ return R.ok(categoryVO.getChildren());
+ }
+ }
+ //最顶级的产品分类不反回
+ return R.ok();
+ }
+
+ /**
+ * @param id 查询单个分类栏目详情--单页面栏目和询盘栏目使用
+ * @return com.ruoyi.common.core.domain.R
+ * @author vinjor-M
+ * @date 15:44 2025/7/8
+ **/
+ @ApiOperation("查询单个分类栏目详情--单页面栏目和询盘栏目使用")
+ @ApiImplicitParam(name = "id", value = "主键ID", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class)
+ @GetMapping("/categoryInfo")
+ public R categoryInfo(@RequestParam(required = true) String id) {
+ return R.ok(categoryService.getById(id));
+ }
+
+ /**
+ * 轮播图
+ *
+ * @return com.ruoyi.common.core.domain.AjaxResult
+ * @author vinjor-M
+ * @date 10:04 2025/7/8
+ **/
+ @ApiOperation("轮播图")
+ @ApiImplicitParam(name = "tenantId", value = "站点唯一码", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class)
+ @GetMapping("/pic")
+ public R> picList(@RequestParam(required = true) String tenantId) {
+ return R.ok(basePicService.list(tenantId));
+ }
+
+ /**
+ * 公司介绍-富文本-首页展示区域
+ *
+ * @return com.ruoyi.common.core.domain.AjaxResult
+ * @author vinjor-M
+ * @date 10:04 2025/7/8
+ **/
+ @ApiOperation("公司介绍-富文本-首页展示区域")
+ @ApiImplicitParam(name = "tenantId", value = "站点唯一码", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class)
+ @GetMapping("/indexCompanyInfo")
+ public R