From 94540e4d640ef5d49e73f49ec7e9ffd62b9db836 Mon Sep 17 00:00:00 2001 From: Vinjor Date: Mon, 4 Aug 2025 15:02:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E6=8E=A5=E5=8F=A3=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/base/controller/WebController.java | 44 ++++++++-- .../com/ruoyi/busi/domain/BusiProdNew.java | 6 ++ .../busi/service/GoogleKeywordService.java | 2 +- .../busi/service/IBusiCategoryService.java | 10 +++ .../busi/service/IBusiProdNewService.java | 11 +++ .../service/impl/BusiCategoryServiceImpl.java | 32 ++++++++ .../service/impl/BusiProdNewServiceImpl.java | 81 +++++++++++++++++-- .../java/com/ruoyi/busi/vo/SiteMapVO.java | 42 ++++++++++ .../com/ruoyi/constant/DictConstants.java | 21 +++++ dl_vue/.env.production | 4 +- 10 files changed, 238 insertions(+), 15 deletions(-) create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/vo/SiteMapVO.java 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 index 2b13766..1fb542b 100644 --- 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 @@ -18,6 +18,7 @@ import com.ruoyi.busi.service.*; import com.ruoyi.busi.utils.CommonUtils; import com.ruoyi.busi.vo.BusiCategoryVO; import com.ruoyi.busi.vo.ProdNewVO; +import com.ruoyi.busi.vo.SiteMapVO; import com.ruoyi.busi.vo.WebDetailVO; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; @@ -40,8 +41,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.*; -import static com.ruoyi.constant.DictConstants.DATA_TYPE_NEWS; -import static com.ruoyi.constant.DictConstants.DATA_TYPE_PRODUCT; +import static com.ruoyi.constant.DictConstants.*; +import static com.ruoyi.constant.DictConstants.CATG_TYPE_WZ; /** * Web 专用Controller @@ -239,7 +240,16 @@ public class WebController extends BaseController { queryWrapper.in(BusiProdNew::getCatgId,catgIdList); } queryWrapper.orderByDesc(BusiProdNew::getSort); - return R.ok(prodNewService.page(page,queryWrapper)); + //查所有栏目 + BusiCategory category = new BusiCategory(); + category.setTenantId(tenantId); + category.setCatgType(CATG_TYPE_CP); + List busiCategoryVOList = categoryService.treeCategory(category); + //转map + Map catgMap = categoryService.dealFirstIdRtnMap(busiCategoryVOList); + IPage rtnPage = prodNewService.page(page,queryWrapper); + rtnPage.getRecords().forEach(item->item.setMaxCatgId(catgMap.getOrDefault(item.getCatgId(),""))); + return R.ok(rtnPage); } /** @@ -275,7 +285,16 @@ public class WebController extends BaseController { queryWrapper.in(BusiProdNew::getCatgId,catgIdList); } queryWrapper.orderByDesc(BusiProdNew::getSort); - return R.ok(prodNewService.page(page,queryWrapper)); + //查所有栏目 + BusiCategory category = new BusiCategory(); + category.setTenantId(tenantId); + category.setCatgType(CATG_TYPE_WZ); + List busiCategoryVOList = categoryService.treeCategory(category); + //转map + Map catgMap = categoryService.dealFirstIdRtnMap(busiCategoryVOList); + IPage rtnPage = prodNewService.page(page,queryWrapper); + rtnPage.getRecords().forEach(item->item.setMaxCatgId(catgMap.getOrDefault(item.getCatgId(),""))); + return R.ok(rtnPage); } /** @@ -288,7 +307,6 @@ public class WebController extends BaseController { @ApiImplicitParam(name = "id", value = "产品或新闻ID", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class) @GetMapping("/prodNewsInfo") public R prodNewsInfo(@RequestParam(required = true) String id){ - WebDetailVO webDetailVO = new WebDetailVO(); return R.ok(prodNewService.getProdNewInfo(id)); } @@ -416,4 +434,20 @@ public class WebController extends BaseController { googleKeywordService.test(); return R.ok(); } + + /** + * 导航栏接口--所有分类 + * @author vinjor-M + * @date 10:04 2025/7/8 + * @return com.ruoyi.common.core.domain.AjaxResult + **/ + @ApiOperation("站点地图使用接口") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "catgType", value = "栏目类型", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "tenantId", value = "站点编码", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class) + }) + @GetMapping("/siteMap") + public R> siteMap(@RequestParam(required = true) String tenantId, @RequestParam(required = true) String catgType){ + return R.ok(prodNewService.getSiteMap(tenantId,catgType)); + } } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiProdNew.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiProdNew.java index fa75a05..d9edbc9 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiProdNew.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiProdNew.java @@ -1,5 +1,6 @@ package com.ruoyi.busi.domain; +import com.baomidou.mybatisplus.annotation.TableField; import com.ruoyi.common.annotation.Excel; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; @@ -115,4 +116,9 @@ public class BusiProdNew extends DlBaseEntity @ApiModelProperty("站点唯一编码(租户id)") private String tenantId; + /** 最父级分类id */ + @ApiModelProperty("最父级分类id") + @TableField(exist = false) + private String maxCatgId; + } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/GoogleKeywordService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/GoogleKeywordService.java index e72e5fd..39c7d41 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/GoogleKeywordService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/GoogleKeywordService.java @@ -106,7 +106,7 @@ public class GoogleKeywordService { googleAdsClient.getLatestVersion().createKeywordPlanIdeaServiceClient()) { GenerateKeywordIdeasRequest.Builder requestBuilder = GenerateKeywordIdeasRequest.newBuilder() .setCustomerId(Long.toString(customerId)) - .setLanguage(language) + .setLanguage(String.valueOf(1000)) .addAllGeoTargetConstants(Collections.singletonList(geoTarget)) .setKeywordPlanNetwork(KeywordPlanNetworkEnum.KeywordPlanNetwork.GOOGLE_SEARCH_AND_PARTNERS) .setKeywordAndUrlSeed(seed); diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiCategoryService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiCategoryService.java index 63a7776..2007913 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiCategoryService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiCategoryService.java @@ -6,6 +6,7 @@ import com.ruoyi.busi.vo.BusiCategoryVO; import com.ruoyi.busi.vo.ProdNewVO; import java.util.List; +import java.util.Map; /** * 网站栏目Service接口 @@ -50,4 +51,13 @@ public interface IBusiCategoryService extends IService { * @return java.util.List **/ List dealFirstId(List busiCategoryVOList); + + /** + * 给所有子级设置最父级ID并且反回map格式 + * @author vinjor-M + * @date 11:23 2025/7/19 + * @param busiCategoryVOList 栏目树 + * @return java.util.List + **/ + Map dealFirstIdRtnMap(List busiCategoryVOList); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiProdNewService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiProdNewService.java index 6cf390b..9866acc 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiProdNewService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiProdNewService.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.busi.domain.BusiProdNew; import com.ruoyi.busi.vo.ProdNewVO; +import com.ruoyi.busi.vo.SiteMapVO; import com.ruoyi.busi.vo.WebDetailVO; /** @@ -83,4 +84,14 @@ public interface IBusiProdNewService extends IService * @return java.util.List **/ List checkContent(ProdNewVO prodNewVO); + + /** + * 获取站点分类地图 + * @author vinjor-M + * @date 14:12 2025/8/4 + * @param tenantId 站点编码 + * @param catgType 栏目类型 + * @return java.util.List + **/ + List getSiteMap(String tenantId, String catgType); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiCategoryServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiCategoryServiceImpl.java index 4d4c1b6..776a40b 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiCategoryServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiCategoryServiceImpl.java @@ -226,4 +226,36 @@ public class BusiCategoryServiceImpl extends ServiceImpl + **/ + @Override + public Map dealFirstIdRtnMap(List busiCategoryVOList){ + Map rtnMap = new HashMap<>(); + busiCategoryVOList.forEach(item->{ + String thisMaxParentId = item.getId(); + item.setMaxParentId(thisMaxParentId); + rtnMap.put(item.getId(),thisMaxParentId); + if(null!=item.getChildren() && !item.getChildren().isEmpty()){ + //有子级 + this.setChildMaxParentIdMap(item.getChildren(),thisMaxParentId,rtnMap); + } + }); + return rtnMap; + } + + private void setChildMaxParentIdMap(List childList,String maxParentId,Map rtnMap){ + childList.forEach(item->{ + item.setMaxParentId(maxParentId); + rtnMap.put(item.getId(),maxParentId); + if(null!=item.getChildren()&& !item.getChildren().isEmpty()){ + this.setChildMaxParentIdMap(item.getChildren(),maxParentId,rtnMap); + } + }); + } } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiProdNewServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiProdNewServiceImpl.java index 5eea029..151d338 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiProdNewServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiProdNewServiceImpl.java @@ -5,18 +5,18 @@ import java.util.*; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.ruoyi.busi.domain.BusiCategory; import com.ruoyi.busi.domain.BusiProdRandom; import com.ruoyi.busi.mapper.BusiProdRandomMapper; import com.ruoyi.busi.service.IBusiCategoryService; import com.ruoyi.busi.utils.SimHash; import com.ruoyi.busi.utils.TextPreprocessor; -import com.ruoyi.busi.vo.ProdNewVO; -import com.ruoyi.busi.vo.ProdRandomVO; -import com.ruoyi.busi.vo.WebDetailVO; +import com.ruoyi.busi.vo.*; import com.ruoyi.common.utils.DateUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -24,8 +24,7 @@ import com.ruoyi.busi.mapper.BusiProdNewMapper; import com.ruoyi.busi.domain.BusiProdNew; import com.ruoyi.busi.service.IBusiProdNewService; -import static com.ruoyi.constant.DictConstants.DATA_TYPE_NEWS; -import static com.ruoyi.constant.DictConstants.DATA_TYPE_PRODUCT; +import static com.ruoyi.constant.DictConstants.*; import static com.ruoyi.constant.StrConstants.HASH_BITS; import static com.ruoyi.constant.StrConstants.MAX_HAMMING_DISTANCE; @@ -155,7 +154,16 @@ public class BusiProdNewServiceImpl extends ServiceImpl busiCategoryVOList = categoryService.treeCategory(category); + //转map + Map catgMap = categoryService.dealFirstIdRtnMap(busiCategoryVOList); + List rtnList= this.page(page,queryWrapper).getRecords(); + rtnList.forEach(item->item.setMaxCatgId(catgMap.getOrDefault(item.getCatgId(),""))); + return rtnList; } /** @@ -203,7 +211,15 @@ public class BusiProdNewServiceImpl extends ServiceImpl rtnPage = this.page(page,queryWrapper); + //查所有栏目 + BusiCategory category = new BusiCategory(); + category.setTenantId(tenantId); + List busiCategoryVOList = categoryService.treeCategory(category); + //转map + Map catgMap = categoryService.dealFirstIdRtnMap(busiCategoryVOList); + rtnPage.getRecords().forEach(item->item.setMaxCatgId(catgMap.getOrDefault(item.getCatgId(),""))); + return rtnPage; } /** @@ -241,4 +257,55 @@ public class BusiProdNewServiceImpl extends ServiceImpl Double.compare(b.getSimilarity(), a.getSimilarity())); return similarArticles; } + + /** + * 获取站点分类地图 + * + * @param tenantId 站点编码 + * @param catgType 栏目类型 + * @return java.util.List + * @author vinjor-M + * @date 14:12 2025/8/4 + **/ + @Override + public List getSiteMap(String tenantId, String catgType) { + List rtnList = new ArrayList<>(); + //查所有栏目 + BusiCategory category = new BusiCategory(); + category.setTenantId(tenantId); + List busiCategoryVOList = categoryService.treeCategory(category); + //转map + Map catgMap = categoryService.dealFirstIdRtnMap(busiCategoryVOList); + if(CATG_TYPE_XP.equals(catgType) || CATG_TYPE_DYM.equals(catgType)){ + //查所有询盘或单页面栏目 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(BusiCategory::getTenantId,tenantId) + .eq(BusiCategory::getCatgType,catgType) + .orderByDesc(BusiCategory::getSort); + List list = categoryService.list(queryWrapper); + list.forEach(item->{ + SiteMapVO siteMapVO = new SiteMapVO(); + siteMapVO.setId(item.getId()); + siteMapVO.setTitle(item.getCatgName()); + siteMapVO.setUpdateTime(item.getUpdateTime()); + siteMapVO.setMaxCatgId(catgMap.getOrDefault(item.getId(),"")); + rtnList.add(siteMapVO); + }); + }else{ + //产品或文章 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(BusiProdNew::getTenantId,tenantId) + .eq(BusiProdNew::getDataType,CATG_TYPE_CP.equals(catgType)?DATA_TYPE_PRODUCT:DATA_TYPE_NEWS) + .eq(BusiProdNew::getIfPublic,true) + .orderByDesc(BusiProdNew::getSort); + List list = this.list(queryWrapper); + list.forEach(item->{ + SiteMapVO siteMapVO = new SiteMapVO(); + BeanUtils.copyProperties(item,siteMapVO); + siteMapVO.setMaxCatgId(catgMap.getOrDefault(item.getCatgId(),"")); + rtnList.add(siteMapVO); + }); + } + return rtnList; + } } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/vo/SiteMapVO.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/vo/SiteMapVO.java new file mode 100644 index 0000000..d49a6cd --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/vo/SiteMapVO.java @@ -0,0 +1,42 @@ +package com.ruoyi.busi.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * 站点地图使用VO + * @author vinjor-M + * @date 14:09 2025/8/4 +**/ +@Data +@ApiModel(value = "SiteMapVO", description = "站点地图使用VO") +public class SiteMapVO { + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + /** + * 所属栏目id + */ + @ApiModelProperty("所属栏目id") + private String catgId; + /** + * 最父级栏目ID + */ + @ApiModelProperty("最父级栏目ID") + private String maxCatgId; + /** + * 最后更新时间 + */ + @ApiModelProperty("最后更新时间") + private Date updateTime; +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/constant/DictConstants.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/constant/DictConstants.java index 1b12197..fe030c9 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/constant/DictConstants.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/constant/DictConstants.java @@ -71,6 +71,27 @@ public class DictConstants */ public static final String THIRD_SOFT_EMAIL ="Email"; + /** + * 栏目类型字典-KEY + */ + public static final String CATG_TYPE_KEY ="third_soft"; + /** + * 栏目类型字典-产品 + */ + public static final String CATG_TYPE_CP ="cp"; + /** + * 栏目类型字典-文章 + */ + public static final String CATG_TYPE_WZ ="wz"; + /** + * 栏目类型字典-询盘 + */ + public static final String CATG_TYPE_XP ="xp"; + /** + * 栏目类型字典-单页面 + */ + public static final String CATG_TYPE_DYM ="dym"; + /** * 是否字典--是 diff --git a/dl_vue/.env.production b/dl_vue/.env.production index 1abe0a7..2bfeba0 100644 --- a/dl_vue/.env.production +++ b/dl_vue/.env.production @@ -5,7 +5,7 @@ VUE_APP_TITLE = 成事达管理平台 ENV = 'production' # 成事达管理平台/生产环境 -VUE_APP_BASE_API = 'http://122.51.230.86:8099' +VUE_APP_BASE_API = 'http://114.132.197.85:8099' # websocket -VUE_APP_WEBSOCKET = 'ws://122.51.230.86:8099/ws/asset/' +VUE_APP_WEBSOCKET = 'ws://114.132.197.85:8099/ws/asset/'