Browse Source

seo管理 月报

zq940222 4 months ago
parent
commit
13d662b98a
15 changed files with 253 additions and 13 deletions
  1. 4 4
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/controller/SeoKeywordsRankController.java
  2. 94 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/controller/SeoMonthPdfController.java
  3. 14 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/dto/MonthPdfDTO.java
  4. 4 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/mapper/SeoKeywordsSerpMapper.java
  5. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/mapper/xml/SeoKeywordsSerpMapper.xml
  6. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/service/ISeoKeywordsRankService.java
  7. 7 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/service/ISeoMonthPdfService.java
  8. 11 7
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/service/impl/SeoKeywordsRankServiceImpl.java
  9. 49 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/service/impl/SeoMonthPdfServiceImpl.java
  10. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/vo/KeywordsInfoVO.java
  11. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/vo/MonthPdfKeywordsRankVO.java
  12. 1 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/subscribePlan/mapper/SubscribePlanMapper.java
  13. 13 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/subscribePlan/mapper/xml/SubscribePlanMapper.xml
  14. 1 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/subscribePlan/service/ISubscribePlanService.java
  15. 4 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/subscribePlan/service/impl/SubscribePlanServiceImpl.java

+ 4 - 4
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/controller/SeoKeywordsRankController.java

@@ -46,8 +46,8 @@ public class SeoKeywordsRankController {
      * 获得综合统计信息
      */
     @GetMapping(value = "/comprehensiveInfo")
-    public Result<?> getComprehensiveInfo(@RequestParam String siteCode, @RequestParam String planId) throws ParseException {
-        ComprehensiveStatistics statistics = seoKeywordsRankService.getComprehensiveInfo(siteCode, planId);
+    public Result<?> getComprehensiveInfo(@RequestParam String siteCode) throws ParseException {
+        ComprehensiveStatistics statistics = seoKeywordsRankService.getComprehensiveInfo(siteCode);
         return Result.OK(statistics);
     }
 
@@ -55,8 +55,8 @@ public class SeoKeywordsRankController {
      * 获取关键字排名信息
      */
     @GetMapping(value = "/getRankInfo")
-    public Result<?> getRankInfo(@RequestParam("siteCode") String siteCode, @RequestParam("subscriptionId") String subscriptionId) throws ParseException {
-        Map map = seoKeywordsRankService.getRankInfo(siteCode, subscriptionId);
+    public Result<?> getRankInfo(@RequestParam("siteCode") String siteCode) throws ParseException {
+        Map map = seoKeywordsRankService.getRankInfo(siteCode);
         return Result.OK(map);
     }
 }

+ 94 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/controller/SeoMonthPdfController.java

@@ -0,0 +1,94 @@
+package org.jeecg.modules.adweb.seo.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CacheConstant;
+import org.jeecg.common.system.vo.DictPropertyModel;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.adweb.seo.dto.MonthPdfDTO;
+import org.jeecg.modules.adweb.seo.service.ISeoMonthPdfService;
+import org.jeecg.modules.adweb.seo.vo.MonthPdfKeywordsRankVO;
+import org.jeecg.modules.adweb.system.service.SysAdwebApi;
+import org.jeecg.modules.system.entity.SysDictItem;
+import org.jeecg.modules.system.service.ISysDictItemService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: seo_month_pdf @Author: jeecg-boot @Date: 2023-07-06 @Version: V1.0
+ */
+@RestController
+@RequestMapping("/seo/seoMonthPdf")
+@Slf4j
+public class SeoMonthPdfController {
+    
+    @Autowired private SysAdwebApi sysAdwebApi;
+    
+    @Autowired private ISysDictItemService sysDictItemService;
+
+    @Autowired private ISeoMonthPdfService seoMonthPdfService;
+
+    /**
+     * 获取seo月报当月以及下月优化计划能容(字典)
+     *
+     * @return
+     */
+    @GetMapping("/getSeoMonthPlanContent")
+    public Result<?> getSeoMonthPlanContent() {
+        List<DictPropertyModel> dictPropertyModels =
+                sysAdwebApi.queryDictInfoByDictCode("seo_month_report_template");
+        String currentItemText = null;
+        String nextItemText = null;
+        for (DictPropertyModel item : dictPropertyModels) {
+            if ("seo_current_month_report".equals(item.getLabel())) {
+                currentItemText = item.getValue();
+            } else {
+                nextItemText = item.getValue();
+            }
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("currentMonthPlan", currentItemText);
+        map.put("nextMonthPlan", nextItemText);
+
+        return Result.OK(map);
+    }
+
+    /**
+     * 编辑月报优化计划
+     *
+     * @param sysDictItem
+     * @return
+     */
+    @PutMapping("/editSeoMonthPlan")
+    @CacheEvict(value = CacheConstant.SYS_DICT_CACHE, allEntries = true)
+    public Result<?> editSeoMonthPlan(@RequestBody SysDictItem sysDictItem) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        sysDictItem.setUpdateBy(user.getUsername());
+        QueryWrapper<SysDictItem> currentQueryWrapper = new QueryWrapper();
+        currentQueryWrapper.eq("item_text", sysDictItem.getItemText());
+        SysDictItem sysDictItem1 = sysDictItemService.getOne(currentQueryWrapper);
+        sysDictItem.setId(sysDictItem1.getId());
+        boolean update = sysDictItemService.updateById(sysDictItem);
+        if (update) {
+            return Result.OK("编辑成功!");
+        }
+        return Result.error("编辑失败!");
+    }
+
+    @GetMapping("/getSeoKeywordsRank")
+    public Result<?> getSeoKeywordsRank(@RequestParam String siteCode, @RequestParam String exportMonth) {
+        log.info("siteCode:{},exportMonth:{}", siteCode, exportMonth);
+        MonthPdfKeywordsRankVO seoKeywordsRank = seoMonthPdfService.getSeoKeywordsRank(siteCode, exportMonth);
+        log.info("seoKeywordsRank:{}", seoKeywordsRank);
+        return Result.OK(seoKeywordsRank);
+    }
+}

+ 14 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/dto/MonthPdfDTO.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.adweb.seo.dto;
+
+import lombok.Data;
+
+/**
+ * @author Zenas
+ */
+@Data
+public class MonthPdfDTO {
+
+    private String siteCode;
+
+    private String exportMonth;
+}

+ 4 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/mapper/SeoKeywordsSerpMapper.java

@@ -4,6 +4,9 @@ package org.jeecg.modules.adweb.seo.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 import org.jeecg.modules.adweb.seo.entity.SeoKeywordsSerp;
+import org.jeecg.modules.adweb.seo.vo.KeywordsInfoVO;
+
+import java.util.List;
 
 /**
  * @Description: SEO关键词搜索排名
@@ -18,4 +21,5 @@ public interface SeoKeywordsSerpMapper extends BaseMapper<SeoKeywordsSerp> {
      */
     SeoKeywordsSerp getLatestSeoKeywordSerp(int keywordId);
 
+    List<KeywordsInfoVO> getSeoKeywordsRank(String siteCode, String date, Integer keywordsType);
 }

+ 17 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/mapper/xml/SeoKeywordsSerpMapper.xml

@@ -13,5 +13,22 @@
         se_date DESC
         LIMIT 1
     </select>
+    <select id="getSeoKeywordsRank" resultType="org.jeecg.modules.adweb.seo.vo.KeywordsInfoVO">
+        SELECT
+            t2.keywords,t1.keywords_id,t1.search_url,t1.rank_absolute,t1.se_datetime,t2.keyword_type
+        FROM seo_keywords_serp t1,
+             seo_keywords t2
+        WHERE
+            t1.keywords_id = t2.id
+        AND
+            t2.site_code = #{siteCode}
+        AND
+            t2.keyword_type = #{keywordsType}
+        AND
+            date(t1.se_datetime) = #{date}
+        ORDER BY
+            t1.rank_absolute
+        LIMIT 50
+    </select>
 
 </mapper>

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/service/ISeoKeywordsRankService.java

@@ -21,9 +21,9 @@ public interface ISeoKeywordsRankService {
 
     List<AdwebSite> getAllSites();
 
-    ComprehensiveStatistics getComprehensiveInfo(String siteCode, String subscriptionId);
+    ComprehensiveStatistics getComprehensiveInfo(String siteCode);
 
-    Map getRankInfo(String siteCode, String historyId) throws ParseException;
+    Map getRankInfo(String siteCode) throws ParseException;
 
     List<SeoRankInfoVO> getSeoRankInfo(String siteCode, String historyId)
             throws ParseException;

+ 7 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/service/ISeoMonthPdfService.java

@@ -0,0 +1,7 @@
+package org.jeecg.modules.adweb.seo.service;
+
+import org.jeecg.modules.adweb.seo.vo.MonthPdfKeywordsRankVO;
+
+public interface ISeoMonthPdfService {
+    MonthPdfKeywordsRankVO getSeoKeywordsRank(String siteCode, String exportMonth);
+}

+ 11 - 7
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/service/impl/SeoKeywordsRankServiceImpl.java

@@ -122,14 +122,15 @@ public class SeoKeywordsRankServiceImpl implements ISeoKeywordsRankService {
      * 获得综合统计的数据
      *
      * @param siteCode 站点code
-     * @param planId 套餐表id
      * @return 综合统计的数据
      */
     @Override
-    public ComprehensiveStatistics getComprehensiveInfo(String siteCode, String planId) {
+    public ComprehensiveStatistics getComprehensiveInfo(String siteCode) {
         ComprehensiveStatistics comprehensiveStatistics = new ComprehensiveStatistics();
-        SubscribePlan subscribePlan = subscribePlanMapper.selectById(planId);
-        log.info("planId:{}, subscribePlan:{}", planId, subscribePlan.toString());
+        // 根据站点code获取站点
+        AdwebSite siteByCode = adwebSiteService.getSiteByCode(siteCode);
+        // 1.获取套餐数据
+        SubscribePlan subscribePlan = subscribePlanMapper.getSubscribePlanBySiteId(siteByCode.getId());
         if (subscribePlan != null) {
             // 添加套餐数据
             comprehensiveStatistics.setPlanAppointKeywordNum(subscribePlan.getSpecifyKeyword());
@@ -156,9 +157,12 @@ public class SeoKeywordsRankServiceImpl implements ISeoKeywordsRankService {
     }
 
     @Override
-    public Map getRankInfo(String siteCode, String subscriptionId) throws ParseException {
-        List<SeoRankInfoVO> seoRankInfos = this.getSeoRankInfo(siteCode, subscriptionId);
-
+    public Map getRankInfo(String siteCode) throws ParseException {
+        //通过站点code获取站点id
+        AdwebSite siteByCode = adwebSiteService.getSiteByCode(siteCode);
+        SeoPlanSubscription seoPlanSubscription = seoPlanSubscriptionService.getCurrentSeoAndSiteSubscription(siteByCode.getId());
+        //通过站点获取订阅id
+        List<SeoRankInfoVO> seoRankInfos = this.getSeoRankInfo(siteCode, seoPlanSubscription.getId());
         Map map = new HashMap<>();
         map.put("appointKeyword", seoRankInfos.get(0));
         map.put("longTailKeyword", seoRankInfos.get(1));

+ 49 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/service/impl/SeoMonthPdfServiceImpl.java

@@ -0,0 +1,49 @@
+package org.jeecg.modules.adweb.seo.service.impl;
+
+import jakarta.annotation.Resource;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecg.modules.adweb.seo.mapper.SeoKeywordsSerpMapper;
+import org.jeecg.modules.adweb.seo.service.ISeoMonthPdfService;
+import org.jeecg.modules.adweb.seo.vo.KeywordsInfoVO;
+import org.jeecg.modules.adweb.seo.vo.MonthPdfKeywordsRankVO;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
+import java.util.List;
+
+/**
+ * @author Zenas
+ */
+@Service
+@Slf4j
+public class SeoMonthPdfServiceImpl implements ISeoMonthPdfService {
+
+    @Resource private SeoKeywordsSerpMapper seoKeywordsSerpMapper;
+
+    @Override
+    public MonthPdfKeywordsRankVO getSeoKeywordsRank(String siteCode, String exportMonth) {
+        String lastDayOfMonth = getLastDayOfMonth(exportMonth);
+        List<KeywordsInfoVO> seoKeywordsRank =
+                seoKeywordsSerpMapper.getSeoKeywordsRank(
+                        siteCode, lastDayOfMonth, 1);
+        List<KeywordsInfoVO> seoKeywordsRank2 =
+                seoKeywordsSerpMapper.getSeoKeywordsRank(
+                        siteCode, lastDayOfMonth, 2);
+        MonthPdfKeywordsRankVO monthPdfKeywordsRankVO = new MonthPdfKeywordsRankVO();
+        monthPdfKeywordsRankVO.setAppointKeywordsInfoList(seoKeywordsRank);
+        monthPdfKeywordsRankVO.setLongTailKeywordsInfoList(seoKeywordsRank2);
+        return monthPdfKeywordsRankVO;
+    }
+
+    public static String getLastDayOfMonth(String month) {
+        // 解析输入的月份字符串为LocalDate对象
+        LocalDate date = LocalDate.parse(month + "-01");
+        // 使用TemporalAdjusters类的lastDayOfMonth()方法获取该月的最后一天
+        LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth());
+        // 返回最后一天的字符串表示
+        return lastDay.toString();
+    }
+}

+ 16 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/vo/KeywordsInfoVO.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.adweb.seo.vo;
+
+import lombok.Data;
+
+/**
+ * @author Zenas
+ */
+@Data
+public class KeywordsInfoVO {
+
+    private String keyword;
+
+    private String positionUrl;
+
+    private Integer lastRank;
+}

+ 16 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/seo/vo/MonthPdfKeywordsRankVO.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.adweb.seo.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Zenas
+ */
+@Data
+public class MonthPdfKeywordsRankVO {
+
+    private List<KeywordsInfoVO> appointKeywordsInfoList;
+
+    private List<KeywordsInfoVO> longTailKeywordsInfoList;
+}

+ 1 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/subscribePlan/mapper/SubscribePlanMapper.java

@@ -11,4 +11,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface SubscribePlanMapper extends BaseMapper<SubscribePlan> {
 
+    SubscribePlan getSubscribePlanBySiteId(Integer siteId);
 }

+ 13 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/subscribePlan/mapper/xml/SubscribePlanMapper.xml

@@ -2,4 +2,17 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.adweb.subscribePlan.mapper.SubscribePlanMapper">
 
+    <select id="getSubscribePlanBySiteId"
+            resultType="org.jeecg.modules.adweb.subscribePlan.entity.SubscribePlan">
+        SELECT
+            t1.id,t1.plan_name,specify_keyword,long_tail_keyword,external_links,article
+        from
+            subscribe_plan t1,
+            seo_plan_subscription t2
+        where
+            t1.id = t2.plan_id
+            and t1.status = 1
+            and t2.status = 1
+            and t2.site_id = #{siteId}
+    </select>
 </mapper>

+ 1 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/subscribePlan/service/ISubscribePlanService.java

@@ -11,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ISubscribePlanService extends IService<SubscribePlan> {
 
+    SubscribePlan getSubscribePlanBySiteId(Integer siteId);
 }

+ 4 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/subscribePlan/service/impl/SubscribePlanServiceImpl.java

@@ -16,4 +16,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 public class SubscribePlanServiceImpl extends ServiceImpl<SubscribePlanMapper, SubscribePlan> implements ISubscribePlanService {
 
+    @Override
+    public SubscribePlan getSubscribePlanBySiteId(Integer siteId) {
+        return baseMapper.getSubscribePlanBySiteId(siteId);
+    }
 }