fengchang 1 year ago
parent
commit
68d4720912

+ 4 - 0
hichina-main-back/src/main/java/com/hichina/main/back/hichinamainback/controller/PublicPageStatsController.java

@@ -19,6 +19,10 @@ public class PublicPageStatsController {
     @PostMapping("/pv/{pageName}")
     public HichinaResponse pageViewTrack(@PathVariable String pageName){
         HichinaResponse ret = new HichinaResponse();
+        String clientIp = pageStatsService.logPv(pageName);
+        ret.setData(clientIp);
+        ret.setOk(true);
+        ret.setMessage("Succeed log pv for : "+ pageName);
         return ret;
     }
 

+ 17 - 0
hichina-main-back/src/main/java/com/hichina/main/back/hichinamainback/model/mongo/HichinaPv.java

@@ -0,0 +1,17 @@
+package com.hichina.main.back.hichinamainback.model.mongo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+import java.util.Date;
+
+@Document("HichinaPv")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class HichinaPv {
+    private String pageName;
+    private String clientIp;
+    private Date timestamp;
+}

+ 11 - 0
hichina-main-back/src/main/java/com/hichina/main/back/hichinamainback/repository/PvRepository.java

@@ -0,0 +1,11 @@
+package com.hichina.main.back.hichinamainback.repository;
+
+import com.hichina.main.back.hichinamainback.model.mongo.HichinaPv;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.Query;
+
+
+public interface PvRepository extends MongoRepository<HichinaPv, String> {
+
+
+}

+ 43 - 1
hichina-main-back/src/main/java/com/hichina/main/back/hichinamainback/service/PageStatsService.java

@@ -1,19 +1,62 @@
 package com.hichina.main.back.hichinamainback.service;
 
 import com.hichina.main.back.hichinamainback.config.Constants;
+import com.hichina.main.back.hichinamainback.model.mongo.HichinaPv;
 import com.hichina.main.back.hichinamainback.model.mongo.PageObjectView;
 import com.hichina.main.back.hichinamainback.repository.PageObjectViewRepository;
+import com.hichina.main.back.hichinamainback.repository.PvRepository;
+import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 @Service
 public class PageStatsService {
 
+    @Autowired
+    private HttpServletRequest request;
+
     @Autowired
     private PageObjectViewRepository pageObjectViewRepository;
 
+    @Autowired
+    private PvRepository pvRepository;
+
+    public String logPv(String pageName){
+        String clientIp = getClientIp();
+        Date now = new Date();
+
+        HichinaPv hichinaPv = new HichinaPv();
+        hichinaPv.setClientIp(clientIp);
+        hichinaPv.setTimestamp(now);
+        hichinaPv.setPageName(pageName);
+
+        pvRepository.save(hichinaPv);
+
+        return clientIp;
+    }
+
+    public String getClientIp() {
+        String clientIp = request.getHeader("X-Forwarded-For");
+        if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
+            clientIp = request.getHeader("Proxy-Client-IP");
+        }
+        if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
+            clientIp = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
+            clientIp = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
+            clientIp = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
+            clientIp = request.getRemoteAddr();
+        }
+        return clientIp;
+    }
 
     public Long LogPageObjectView(String skuGroupId, String objType){
         List<PageObjectView> pageViews =  pageObjectViewRepository.queryByIdAndType(skuGroupId, objType);
@@ -31,6 +74,5 @@ public class PageStatsService {
             pageObjectViewRepository.save(firstObj);
             return firstObj.getViewCnt();
         }
-
     }
 }

+ 11 - 0
hichina-main-front/src/views/blog/index.vue

@@ -187,8 +187,19 @@
       }
     }, 500)
   }
+  function logPv(){
+    AXIOS.post("/api/public/pagestats/pv/blog")
+    .then((res) => {
+      console.log("log pv:")
+      console.log(res.data);
+    })
+    .catch((err) => {
+      console.error("Error:", err);
+    });
+  }
 
   onMounted(() => {
+    logPv();
     loadVideos();
     loadSliders();
     getNextBatch();

+ 12 - 0
hichina-main-front/src/views/destination/detail.vue

@@ -153,7 +153,19 @@
     });
   }
 
+  function logPv(){
+    AXIOS.post("/api/public/pagestats/pv/destination-detail-"+route.params.destinationId)
+    .then((res) => {
+      console.log("log pv:")
+      console.log(res.data);
+    })
+    .catch((err) => {
+      console.error("Error:", err);
+    });
+  }
+
   onMounted(() => {
+    logPv()
     logView()
     console.log("on mounted destination detail page")
     loadDestinations()

+ 13 - 0
hichina-main-front/src/views/destination/index.vue

@@ -277,7 +277,20 @@ function loadDestinations() {
         console.log(error);
       });
 }
+
+function logPv(){
+  AXIOS.post("/api/public/pagestats/pv/destination")
+  .then((res) => {
+    console.log("log pv:")
+    console.log(res.data);
+  })
+  .catch((err) => {
+    console.error("Error:", err);
+  });
+}
+
 onMounted(() => {
+  logPv()
   loadDestinations();
   getNextBatch();
 });

+ 12 - 0
hichina-main-front/src/views/guideintro/index.vue

@@ -87,7 +87,19 @@
     });
   }
 
+  function logPv(){
+    AXIOS.post("/api/public/pagestats/pv/guideintro")
+    .then((res) => {
+      console.log("log pv:")
+      console.log(res.data);
+    })
+    .catch((err) => {
+      console.error("Error:", err);
+    });
+  }
+
   onMounted(() => {
+    logPv()
     loadSliders()
     loadGuideBooks()
   })

+ 12 - 2
hichina-main-front/src/views/home/index.vue

@@ -214,6 +214,17 @@
     router.push({path: "/contact"})
   }
 
+  function logPv(){
+    AXIOS.post("/api/public/pagestats/pv/home")
+    .then((res) => {
+      console.log("log pv:")
+      console.log(res.data);
+    })
+    .catch((err) => {
+      console.error("Error:", err);
+    });
+  }
+
   function loadHomeSliders(){
     AXIOS.get('/api/public/pagecontent/homesliders').then(response=>{
        sliders.value = response.data.data
@@ -227,8 +238,6 @@
 
   function loadHomePost(){
     AXIOS.get('/api/public/pagecontent/homepost').then(response=>{
-      console.log("loaded home post: ")
-       console.log(response.data.data)
        homePostLink.value = response.data.data.postLink;
        homePostImageUrl.value = response.data.data.postImageUrl;
     }).catch(e=>{
@@ -245,6 +254,7 @@
   }
 
   onMounted(() => {
+    logPv()
     // load slider
     loadHomeSliders()
 

+ 12 - 0
hichina-main-front/src/views/product/detail.vue

@@ -490,6 +490,17 @@
     }
   }
 
+  function logPv(){
+    AXIOS.post("/api/public/pagestats/pv/product-detail-"+route.params.skuGroupId)
+    .then((res) => {
+      console.log("log pv:")
+      console.log(res.data);
+    })
+    .catch((err) => {
+      console.error("Error:", err);
+    });
+  }
+
   function logView(){
     AXIOS.post("/api/public/pagestats/view-product/"+route.params.skuGroupId)
     .then((res) => {
@@ -517,6 +528,7 @@
   }
 
   onMounted(() => {
+    logPv()
     logView()
     loadSkusInGroup()
   })

+ 12 - 0
hichina-main-front/src/views/product/index.vue

@@ -142,6 +142,17 @@
     }, 500)
   }
 
+  function logPv(){
+    AXIOS.post("/api/public/pagestats/pv/product")
+    .then((res) => {
+      console.log("log pv:")
+      console.log(res.data);
+    })
+    .catch((err) => {
+      console.error("Error:", err);
+    });
+  }
+
   function loadAllProducts(){
     var params = {}
     params.pageSize = pageSize.value;
@@ -160,6 +171,7 @@
   }
 
   onMounted(() => {
+    logPv()
     setActiveTab(0)
       // loadAllProducts()
     getNextBatch()