Browse Source

用户行为IP合并

huangzhiguo 2 years ago
parent
commit
9fe75fd749

+ 5 - 5
src/main/java/com/caimei365/tools/controller/BaseApi.java

@@ -41,13 +41,13 @@ public class BaseApi {
     }
 
     /**
-     * 创建优惠券
+     * 临时接口
      */
-    /*@GetMapping("/svip/Coupon")
+    /*@GetMapping("/record/update")
     public void svipCoupon(){
-        cmVipCouponService.openCoupon();
-    }*/
-
+        cmBehaviorRecordService.updateBehaviorUser();
+    }
+*/
     /**
      * 数据ip地址
      * @param startId

+ 8 - 0
src/main/java/com/caimei365/tools/mapper/CmBehaviorRecordMapper.java

@@ -74,5 +74,13 @@ public interface CmBehaviorRecordMapper {
     Integer selSvipCouponById();
 
     void insertRelation(CmVipCouponRelation cmVipCouponRelation);
+
+    List<CmBehaviorRecordPo> countNum(@Param("accessDate") String accessDate);
+
+    CmBehaviorRecordPo userIdAcc(@Param("IP") String IP, @Param("accessDate") String accessDate);
+
+    List<CmBehaviorRecordPo>  selBehaviorList(@Param("IP") String IP, @Param("accessDate") String accessDate);
+
+    void updateBehavior(CmBehaviorRecordPo cmBehaviorRecordPo);
 }
 

+ 13 - 1
src/main/java/com/caimei365/tools/model/po/CmBehaviorRecordPo.java

@@ -13,7 +13,7 @@ import java.util.Date;
 @Data
 public class CmBehaviorRecordPo {
 
-    private Integer recordID ;
+    private Integer recordID;
     /**
      * 访问人IP地址
      */
@@ -90,4 +90,16 @@ public class CmBehaviorRecordPo {
      * ip所属地
      */
     private String region;
+    /**
+     * 请求头 userAgent
+     */
+    private String userAgent;
+    /**
+     * 删除标记 0否 其余是
+     */
+    private String delFlag;
+    /**
+     * 统计数
+     */
+    private Integer count;
 }

+ 2 - 0
src/main/java/com/caimei365/tools/service/CmBehaviorRecordService.java

@@ -15,4 +15,6 @@ public interface CmBehaviorRecordService {
     void updateBehaviorTime();
 
     void setIpAddress(Integer startId, Integer endId);
+
+    void updateBehaviorUser();
 }

+ 58 - 2
src/main/java/com/caimei365/tools/service/impl/CmBehaviorRecordServiceImpl.java

@@ -160,7 +160,7 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
                             String value = split1[1];
                             String trim = value.trim();
                             if (StringUtils.isNotBlank(trim)) {
-                                log.info("referer============》"+trim);
+//                                log.info("referer============》"+trim);
                                 // 浏览器链接
                                 cmBehaviorRecordPo.setReferer(trim);
                                 // 访问来源
@@ -169,6 +169,24 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
                             }
                         }
                     }
+                    // 设置删除标记 判定爬虫
+                    cmBehaviorRecordPo.setDelFlag("0");
+                    // 浏览器userAgent
+                    if (str.startsWith("userAgent") && str.contains("=")) {
+                        String[] split1 = str.split("=");
+                        if (split1.length > 1) {
+                            String value = split1[1];
+                            String trim = value.trim();
+                            if (StringUtils.isNotBlank(trim)) {
+                                log.info("userAgent============》"+trim);
+                                // 浏览器userAgent
+                                cmBehaviorRecordPo.setUserAgent(trim);
+                                if (boolReptiles(trim)) {
+                                    cmBehaviorRecordPo.setDelFlag("1");
+                                }
+                            }
+                        }
+                    }
                 }
             }
 
@@ -254,6 +272,36 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
         }
     }
 
+    @Override
+    public void updateBehaviorUser() {
+        log.info("====合并IP====");
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.DAY_OF_MONTH,-1);
+        Date time = calendar.getTime();
+        String format = dateFormat.format(time);
+        // 前一天数据身份中是否只有 机构-游客、供应商-游客
+        List<CmBehaviorRecordPo> countNumList = recordMapper.countNum(format);
+        if (countNumList.size() != 0 && countNumList != null) {
+            for (CmBehaviorRecordPo countNum: countNumList) {
+                if (countNum.getCount() == 2) {
+                    // 查询机构/供应商ip、userID,用于调整游客数据
+                    CmBehaviorRecordPo recordPo = recordMapper.userIdAcc(countNum.getIP(), format);
+                    // 查询游客数据
+                    List<CmBehaviorRecordPo> behaviorList = recordMapper.selBehaviorList(countNum.getIP(), format);
+                    // 将游客数据中的ip和userId修改为机构/供应商数据
+                    for (CmBehaviorRecordPo cmBehaviorRecordPo : behaviorList) {
+                        cmBehaviorRecordPo.setIP(recordPo.getIP());
+                        cmBehaviorRecordPo.setUserId(recordPo.getUserId());
+                        recordMapper.updateBehavior(cmBehaviorRecordPo);
+                    }
+                }
+            }
+        }
+    }
+
 
     // 获取IP对应地址 ---- 太平洋
     public static String recordIp(String ip) throws IOException {
@@ -288,7 +336,7 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
             e.printStackTrace();
         } finally {
             if (connection != null) {
-                connection.disconnect();	//关闭谅解
+                connection.disconnect();	//关闭连接
             }
         }
         return region;
@@ -324,4 +372,12 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
         }
         return null;
     }
+    private boolean boolReptiles(String userAgent) {
+        if (userAgent.contains("serpstatbot") || userAgent.contains("spider") || userAgent.contains("Googlebot") || userAgent.contains("bingbot")
+            || userAgent.contains("SeznamBot") || userAgent.contains("YisouSpider") || userAgent.contains("petalbot") || userAgent.contains("YandexBot")
+            || userAgent.contains("AhrefsBot")) {
+            return true;
+        }
+        return false;
+    }
 }

+ 6 - 0
src/main/java/com/caimei365/tools/task/CmOrganValueSystemTask.java

@@ -45,6 +45,12 @@ public class CmOrganValueSystemTask {
         cmBehaviorRecordService.updateBehaviorTime();
     }
 
+    /**
+     * 每天修改前一天的符合条件的数据
+     */
+    @Scheduled(cron = "0 5 0 * * ?")
+    public void updateBehavior() { cmBehaviorRecordService.updateBehaviorUser();}
+
     /**
      * 每个季度创建专属优惠券
      */

+ 19 - 2
src/main/resources/mapper/CmBehaviorRecordMapper.xml

@@ -2,8 +2,8 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.caimei365.tools.mapper.CmBehaviorRecordMapper">
     <insert id="insertRecord">
-        INSERT INTO cm_behavior_record (IP, userID, pagePath, pageType, pageLabel, behaviorType, productID, accessTime, accessDuration, accessDate,referer,accessSource,accessClient,isReckon,region)
-        VALUES(#{IP},#{userId},#{pagePath},#{pageType},#{pageLabel},#{behaviorType},#{productId},#{accessTime},#{accessDuration},#{accessDate},#{referer},#{accessSource},#{accessClient},#{isReckon},#{region})
+        INSERT INTO cm_behavior_record (IP, userID, pagePath, pageType, pageLabel, behaviorType, productID, accessTime, accessDuration, accessDate,referer,accessSource,accessClient,isReckon,region,userAgent,delFlag)
+        VALUES(#{IP},#{userId},#{pagePath},#{pageType},#{pageLabel},#{behaviorType},#{productId},#{accessTime},#{accessDuration},#{accessDate},#{referer},#{accessSource},#{accessClient},#{isReckon},#{region},#{userAgent},#{delFlag})
     </insert>
 
     <select id="toDateRecode" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
@@ -170,5 +170,22 @@
         INSERT INTO cm_svip_coupon(couponId, montId, updateTime,delFlag)
         VALUES(#{couponId}, #{montId}, #{updateTime},#{delFlag})
     </insert>
+    <select id="countNum" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
+        SELECT IP as IP, COUNT(DISTINCT userID) as count FROM cm_behavior_record
+        where accessDate = #{accessDate}
+        GROUP BY IP, accessDate ORDER BY accessDate DESC
+    </select>
+    <select id="userIdAcc" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
+        SELECT IP as IP, userID as userId FROM cm_behavior_record WHERE IP = #{IP} AND accessDate = #{accessDate} GROUP BY IP ,userID ORDER BY userID DESC LIMIT 1
+    </select>
+    <select id="selBehaviorList" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
+        SELECT recordID as recordID, IP as IP, userID as userId FROM cm_behavior_record WHERE IP = #{IP} AND  userID = 0 AND accessDate = #{accessDate}
+    </select>
+    <update id="updateBehavior">
+        UPDATE cm_behavior_record
+        SET IP = #{IP},
+        userID = #{userId}
+        WHERE recordID = #{recordID}
+    </update>
 </mapper>