Explorar el Código

数据统计更新数据库

wangyunpeng hace 7 meses
padre
commit
025cbe8da4

+ 10 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/crawler/DatastatSortStrategyRepository.java

@@ -0,0 +1,10 @@
+package com.tzld.longarticle.recommend.server.repository.crawler;
+
+import com.tzld.longarticle.recommend.server.repository.entity.crawler.DatastatSortStrategy;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface DatastatSortStrategyRepository extends JpaRepository<DatastatSortStrategy, DatastatSortStrategy.PK> {
+
+}

+ 100 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/entity/crawler/DatastatSortStrategy.java

@@ -0,0 +1,100 @@
+package com.tzld.longarticle.recommend.server.repository.entity.crawler;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "datastat_sort_strategy")
+@IdClass(DatastatSortStrategy.PK.class)
+public class DatastatSortStrategy  implements Serializable {
+
+    @Id
+    private String dateStr;
+    @Id
+    private String publishTime;
+    @Id
+    private String accountName;
+    @Id
+    private Integer position;
+
+    @Column(name = "account_mode")
+    private String accountMode;
+    @Column(name = "account_source")
+    private String accountSource;
+    @Column(name = "account_type")
+    private String accountType;
+    @Column(name = "account_status")
+    private String accountStatus;
+    @Column(name = "strategy")
+    private String strategy;
+    @Column(name = "fans")
+    private long fans;
+    @Column(name = "view_count")
+    private Integer viewCount;
+    @Column(name = "avg_view_count")
+    private Double avgViewCount;
+    @Column(name = "first_view_count")
+    private Integer firstViewCount;
+    @Column(name = "first_avg_view_count")
+    private Double firstAvgViewCount;
+    @Column(name = "first_level")
+    private Integer firstLevel;
+    @Column(name = "fission0")
+    private Integer fission0;
+    @Column(name = "fission1")
+    private Integer fission1;
+    @Column(name = "fission2")
+    private Integer fission2;
+    @Column(name = "read_rate")
+    private Double readRate;
+    @Column(name = "read_fans_rate")
+    private Double readFansRate;
+    @Column(name = "first_read_rate")
+    private Double firstReadRate;
+    @Column(name = "fission0_first_rate")
+    private Double fission0FirstRate;
+    @Column(name = "fission1_fission0_rate")
+    private Double fission1Fission0Rate;
+    @Column(name = "fission0_read_avg_rate")
+    private Double fission0ReadAvgRate;
+    @Column(name = "gh_id")
+    private String ghId;
+    @Column(name = "title")
+    private String title;
+    @Column(name = "link")
+    private String link;
+    @Column(name = "wx_sn")
+    private String wxSn;
+    @Column(name = "fission0_read_avg_100_rate")
+    private Double fission0ReadAvg100Rate;
+    @Column(name = "fission0_read_avg_500_rate")
+    private Double fission0ReadAvg500Rate;
+    @Column(name = "fission0_read_avg_1000_rate")
+    private Double fission0ReadAvg1000Rate;
+
+
+    @Data
+    public static class PK implements Serializable {
+
+        @Column(name = "date_str")
+        private String dateStr;
+        @Column(name = "publish_time")
+        private String publishTime;
+        @Column(name = "account_name")
+        private String accountName;
+        @Column(name = "position")
+        private Integer position;
+
+        public PK() {
+        }
+
+
+    }
+}

+ 8 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/mapper/crawler/CrawlerBaseMapper.java

@@ -1,5 +1,13 @@
 package com.tzld.longarticle.recommend.server.repository.mapper.crawler;
 
+import com.tzld.longarticle.recommend.server.repository.entity.crawler.DatastatSortStrategy;
+
+import java.util.List;
+
 public interface CrawlerBaseMapper {
 
+    void deleteByDateStrGreaterThanEqual(String dateStr);
+
+    void batchInsertDatastatSortStrategy(List<DatastatSortStrategy> list);
+
 }

+ 15 - 4
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/DataDashboardService.java

@@ -10,15 +10,14 @@ import com.tzld.longarticle.recommend.server.repository.crawler.AccountAvgInfoRe
 import com.tzld.longarticle.recommend.server.repository.crawler.ArticleDetailInfoRepository;
 import com.tzld.longarticle.recommend.server.repository.crawler.ArticleRepository;
 import com.tzld.longarticle.recommend.server.repository.crawler.PublishSortLogRepository;
-import com.tzld.longarticle.recommend.server.repository.entity.crawler.AccountAvgInfo;
-import com.tzld.longarticle.recommend.server.repository.entity.crawler.Article;
-import com.tzld.longarticle.recommend.server.repository.entity.crawler.ArticleDetailInfo;
-import com.tzld.longarticle.recommend.server.repository.entity.crawler.PublishSortLog;
+import com.tzld.longarticle.recommend.server.repository.entity.crawler.*;
+import com.tzld.longarticle.recommend.server.repository.mapper.crawler.CrawlerBaseMapper;
 import com.tzld.longarticle.recommend.server.util.DateUtils;
 import com.tzld.longarticle.recommend.server.util.MapBuilder;
 import com.tzld.longarticle.recommend.server.util.feishu.FeiShu;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.util.Pair;
 import org.springframework.http.*;
@@ -45,6 +44,8 @@ public class DataDashboardService {
     private AccountAvgInfoRepository accountAvgInfoRepository;
     @Autowired
     private PublishSortLogRepository publishSortLogRepository;
+    @Autowired
+    private CrawlerBaseMapper crawlerBaseMapper;
 
     @ApolloJsonValue("${export.account.ghId:[]}")
     private static List<String> ghIdList;
@@ -229,6 +230,16 @@ public class DataDashboardService {
         }
         result.sort(Comparator.comparing(NewSortStrategyExport::getDateStr).reversed()
                 .thenComparing(NewSortStrategyExport::getGhId).thenComparing(NewSortStrategyExport::getPosition));
+        if (CollectionUtils.isNotEmpty(result)) {
+            crawlerBaseMapper.deleteByDateStrGreaterThanEqual(dateStr);
+            List<DatastatSortStrategy> saveList = new ArrayList<>();
+            for (NewSortStrategyExport newSortStrategyExport : result) {
+                DatastatSortStrategy item = new DatastatSortStrategy();
+                BeanUtils.copyProperties(newSortStrategyExport, item);
+                saveList.add(item);
+            }
+            crawlerBaseMapper.batchInsertDatastatSortStrategy(saveList);
+        }
         return result;
     }
 

+ 22 - 0
long-article-recommend-service/src/main/resources/mapper/crawler/CrawlerBaseMapper.xml

@@ -2,5 +2,27 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.tzld.longarticle.recommend.server.repository.mapper.crawler.CrawlerBaseMapper">
 
+    <delete id="deleteByDateStrGreaterThanEqual">
+        delete from datastat_sort_strategy where date_str >= #{dateStr}
+    </delete>
 
+    <insert id="batchInsertDatastatSortStrategy">
+        INSERT INTO datastat_sort_strategy
+        (date_str, publish_time, account_mode, account_source, account_type, account_status, account_name, strategy,
+         fans, view_count, avg_view_count, first_view_count, first_avg_view_count, first_level, fission0, fission1,
+         fission2, read_rate, read_fans_rate, first_read_rate, fission0_first_rate, fission1_fission0_rate,
+         fission0_read_avg_rate, position, gh_id, title, link, wx_sn, fission0_read_avg_100_rate,
+         fission0_read_avg_500_rate, fission0_read_avg_1000_rate)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (#{item.dateStr}, #{item.publishTime}, #{item.accountMode}, #{item.accountSource}, #{item.accountType},
+             #{item.accountStatus}, #{item.accountName}, #{item.strategy}, #{item.fans}, #{item.viewCount},
+             #{item.avgViewCount}, #{item.firstViewCount}, #{item.firstAvgViewCount}, #{item.firstLevel},
+             #{item.fission0}, #{item.fission1}, #{item.fission2}, #{item.readRate}, #{item.readFansRate},
+             #{item.firstReadRate}, #{item.fission0FirstRate}, #{item.fission1Fission0Rate},
+             #{item.fission0ReadAvgRate}, #{item.position}, #{item.ghId}, #{item.title}, #{item.link},
+             #{item.wxSn}, #{item.fission0ReadAvg100Rate}, #{item.fission0ReadAvg500Rate},
+             #{item.fission0ReadAvg1000Rate})
+        </foreach>
+    </insert>
 </mapper>