소스 검색

短链接统计

zhijiezhao 2 년 전
부모
커밋
bbda4d59a6

+ 20 - 2
src/main/java/com/caimei/www/controller/unlimitedApi/ShortLinkApi.java

@@ -1,15 +1,21 @@
 package com.caimei.www.controller.unlimitedApi;
 
 import com.caimei.www.service.link.ShortLinkService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
+import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.http.server.reactive.ServerHttpResponse;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.server.ServerWebExchange;
 import org.thymeleaf.util.StringUtils;
 
+import javax.servlet.http.HttpServletRequest;
 import java.net.URI;
+import java.util.Objects;
 
 /**
  * Description
@@ -18,6 +24,7 @@ import java.net.URI;
  * @date : 2021/6/24
  */
 @RestController
+@Slf4j
 public class ShortLinkApi {
     private ShortLinkService shortLinkService;
 
@@ -33,8 +40,19 @@ public class ShortLinkApi {
      * @param response
      */
     @GetMapping("/t/{link}")
-    public void linkJump(@PathVariable String link, ServerHttpResponse response) {
-        String jumpLink = shortLinkService.linkJump(link);
+    public void linkJump(@PathVariable String link, ServerWebExchange serverWebExchange, ServerHttpResponse response) {
+        ServerHttpRequest request = serverWebExchange.getRequest();
+        String ip = "";
+        HttpHeaders headers = request.getHeaders();
+        ip = String.valueOf(headers.get("x-forwarded-for"));
+        if (StringUtils.isEmpty(ip)) {
+            ip = String.valueOf(headers.get("X-Real-IP"));
+        }
+        if (null != ip && "" != ip) {
+            ip = ip.replaceAll("[^\\d.]", "");
+        }
+        log.info("访问短链接Ip--------------------------------------》" + ip + "link------------------------------->" + link);
+        String jumpLink = shortLinkService.linkJump(link, ip);
         response.setStatusCode(HttpStatus.FOUND);
         if (StringUtils.isEmpty(jumpLink)) {
             response.getHeaders().setLocation(URI.create("https://www.caimei365.com/404.html"));

+ 3 - 0
src/main/java/com/caimei/www/mapper/ShortLinkDao.java

@@ -2,6 +2,7 @@ package com.caimei.www.mapper;
 
 import com.caimei.www.pojo.link.ShortLink;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * Description
@@ -26,4 +27,6 @@ public interface ShortLinkDao {
      * @param markId
      */
     void updateOnClick(Integer markId);
+
+    void updateShortLink(@Param("link")String link,@Param("ip") String ip);
 }

+ 1 - 1
src/main/java/com/caimei/www/service/link/ShortLinkService.java

@@ -14,5 +14,5 @@ public interface ShortLinkService {
      * @param link
      * @return
      */
-    String linkJump(String link);
+    String linkJump(String link, String ip);
 }

+ 2 - 1
src/main/java/com/caimei/www/service/link/impl/ShortLinkServiceImpl.java

@@ -19,8 +19,9 @@ public class ShortLinkServiceImpl implements ShortLinkService {
     private ShortLinkDao shortLinkDao;
 
     @Override
-    public String linkJump(String link) {
+    public String linkJump(String link, String ip) {
         ShortLink shortLink = shortLinkDao.findByShortLink(link);
+        shortLinkDao.updateShortLink(link, ip);
         if (shortLink == null) {
             return "";
         }

+ 15 - 8
src/main/resources/mapper/ShortLinkMapper.xml

@@ -4,16 +4,23 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.caimei.www.mapper.ShortLinkDao">
     <select id="findByShortLink" resultType="com.caimei.www.pojo.link.ShortLink">
-        SELECT
-          markId,
-          jumpLink
-        FROM
-          cm_short_link
-        WHERE
-          shortLink = #{link}
+        SELECT markId,
+               jumpLink
+        FROM cm_short_link
+        WHERE shortLink = #{link}
     </select>
 
     <update id="updateOnClick">
-        UPDATE cm_sms_statistics SET onClick = (onClick + 1) WHERE markId = #{markId}
+        UPDATE cm_sms_statistics
+        SET onClick = (onClick + 1)
+        WHERE markId = #{markId}
+    </update>
+    <update id="updateShortLink">
+        update cm_short_link
+        set viewTime = now()
+          <if test="ip != null and ip != ''">
+          ,ip = #{ip}
+          </if>
+        where shortLink = #{link}
     </update>
 </mapper>