浏览代码

更新统计信息,添加redis

lyhzzz 3 年之前
父节点
当前提交
5c205a3ea4

+ 5 - 0
pom.xml

@@ -23,6 +23,11 @@
             <version>2.0.0-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-redis</artifactId>
+            <version>2.0.0-SNAPSHOT</version>
+        </dependency>
 
         <dependency>
             <groupId>org.projectlombok</groupId>

+ 5 - 11
src/main/java/com/cdf/business/LoginService.java

@@ -15,6 +15,7 @@ import com.cdf.service.impl.FdkkSceneService;
 import com.cdf.util.Base64Converter;
 import com.cdf.util.JwtUtil;
 import com.cdf.util.SecurityUtil;
+import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -31,16 +32,14 @@ public class LoginService {
     IUserService userService;
     @Autowired
     IFdkkUserService fdkkUserService;
-    @Resource
-    FdkkClient fdkkClient;
     @Autowired
     private IDeptService deptService;
     @Autowired
     private IRoleService roleService;
     @Autowired
-    private IUserTokenService userTokenService;
-    @Autowired
     private FdkkSceneService fdkkSceneService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     public LoginResponse  login(LoginRequest param) {
         //对前端传的密码解密
@@ -73,17 +72,12 @@ public class LoginService {
 
         fdkkSceneService.getFdkkToken(token);
 
-        UserToken userToken = new UserToken();
-        userToken.setUserId(user.getId());
-        userToken.setLoginToken(token);
-        userTokenService.saveOrUpdate(userToken);
+        redisUtil.set("token:"+token,JSONObject.toJSONString(user),2 * 60 * 60);
 
         return loginResponse;
     }
 
     public void logout(String token) {
-        LambdaQueryWrapper<UserToken> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(UserToken::getLoginToken,token);
-        userTokenService.remove(wrapper);
+      redisUtil.del("token:"+token);
     }
 }

+ 1 - 1
src/main/java/com/cdf/config/WebAppConfig.java

@@ -29,7 +29,7 @@ public class WebAppConfig implements WebMvcConfigurer {
 
 	@Override
 	public void addInterceptors(InterceptorRegistry registry) {
-		//registry.addInterceptor(tokenInterceptor).addPathPatterns("/**").excludePathPatterns("/**/login/**");
+		registry.addInterceptor(tokenInterceptor).addPathPatterns("/**").excludePathPatterns("/**/login/**");
 		registry.addInterceptor(backUserInterceptor).addPathPatterns("/back/**").excludePathPatterns("/**/login/**");
 		registry.addInterceptor(sceneInterceptor).addPathPatterns("/service/**")
 				.excludePathPatterns("/service/scene/edit/tag/save","/service/scene/edit/tag/delete",

+ 3 - 5
src/main/java/com/cdf/controller/api/PageDataApiController.java

@@ -90,11 +90,9 @@ public class PageDataApiController {
     }
 
     @GetMapping("/pageData")
-    public ResultData getPageData(@RequestParam (required = false) String day){
-        if(StringUtils.isEmpty(day)){
-            day = DateUtil.getDay(new Date(),-1);
-        }
-        return ResultData.ok(totalDataService.getById(day));
+    public ResultData getPageData(@RequestParam (required = false) String day,
+                                  @RequestParam(required = false,defaultValue = "0") Integer type) throws Exception {
+        return ResultData.ok(totalDataService.getByType(type,day));
     }
 }
 

+ 10 - 34
src/main/java/com/cdf/interceptor/BackUserInterceptor.java

@@ -6,9 +6,11 @@ import com.cdf.common.ResultCode;
 import com.cdf.common.ResultData;
 import com.cdf.entity.User;
 import com.cdf.entity.UserToken;
+import com.cdf.exception.BusinessException;
 import com.cdf.service.IUserService;
 import com.cdf.service.IUserTokenService;
 import com.cdf.util.JwtUtil;
+import com.fdkankan.redis.util.RedisUtil;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,7 +20,6 @@ import org.springframework.web.servlet.HandlerInterceptor;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.util.List;
 
 @Component
 public class BackUserInterceptor implements HandlerInterceptor {
@@ -26,9 +27,7 @@ public class BackUserInterceptor implements HandlerInterceptor {
 	private static final Log log = LogFactory.getLog("programLog");
 
 	@Autowired
-	private IUserService userService;
-	@Autowired
-	private IUserTokenService userTokenService;
+	private RedisUtil redisUtil;
 
 	@Override
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
@@ -48,26 +47,19 @@ public class BackUserInterceptor implements HandlerInterceptor {
 	}
 
 	public boolean checkUser(String token,HttpServletRequest request, HttpServletResponse response) throws Exception {
-		Integer userId = JwtUtil.getId(token);
-		User user = userService.getById(userId);
-		LambdaQueryWrapper<UserToken> wrapper = new LambdaQueryWrapper<>();
-		wrapper.eq(UserToken::getLoginToken,token);
-		List<UserToken> list = userTokenService.list(wrapper);
-		if(list == null || list.size() <= 0){
+		if(!redisUtil.hasKey("token:" + token)){
 			this.needLogin(request, response);
 			return  false;
 		}
-//		if(!token.equals(userToken.getLoginToken())){
-//			this.otherLogin(request, response);
-//			return  false;
-//		}
-		if(user == null ){
-			this.userNotExist(request, response);
-			return  false;
-		}
 		return true;
 	}
 
+	public void checkUser(String token)  {
+		if(!redisUtil.hasKey("token:" + token)){
+			throw new BusinessException(ResultCode.NOT_LOGIN);
+		}
+	}
+
 
 	private void needLogin(HttpServletRequest request, HttpServletResponse response) {
 		try {
@@ -77,22 +69,6 @@ public class BackUserInterceptor implements HandlerInterceptor {
 			e.printStackTrace();
 		}
 	}
-	private void otherLogin(HttpServletRequest request, HttpServletResponse response) {
-		try {
-			response.getWriter().append(ResultData.errorString(ResultCode.OTHER_LOGIN));
-		} catch (IOException e) {
-			log.info("LoginInterceptor|needLogin|IOException|" + e);
-			e.printStackTrace();
-		}
-	}
-	private void userNotExist(HttpServletRequest request, HttpServletResponse response) {
-		try {
-			response.getWriter().append(ResultData.errorString(ResultCode.USER_NOT_EXIST));
-		} catch (IOException e) {
-			log.info("LoginInterceptor|needLogin|IOException|" + e);
-			e.printStackTrace();
-		}
-	}
 
 }
 

+ 0 - 8
src/main/java/com/cdf/interceptor/SceneInterceptor.java

@@ -43,13 +43,9 @@ public class SceneInterceptor implements HandlerInterceptor {
 
 	private static final Log log = LogFactory.getLog("programLog");
 
-	@Value("${fdkk.hot-local-path}")
-	private String hotLocalPath;
 	@Resource
 	FdkkClient fdkkClient;
 	@Autowired
-	private BackUserInterceptor backUserInterceptor;
-	@Autowired
 	private FdkkSceneService fdkkSceneService;
 
 	@Override
@@ -61,10 +57,6 @@ public class SceneInterceptor implements HandlerInterceptor {
 			return false;
 		}
 		try {
-			boolean b = backUserInterceptor.checkUser(token, request, response);
-			if(!b){
-				return false;
-			}
 			String fdkkToken = fdkkSceneService.getFdkkToken(token);
 			String requestURI =   request.getRequestURI();
 			if(request.getMethod().equals("GET")){

+ 4 - 17
src/main/java/com/cdf/interceptor/TokenInterceptor.java

@@ -10,6 +10,7 @@ import com.cdf.service.IUserService;
 import com.cdf.service.IUserTokenService;
 import com.cdf.util.DateUtil;
 import com.cdf.util.JwtUtil;
+import com.fdkankan.redis.util.RedisUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -26,12 +27,8 @@ import java.util.List;
 @Component
 public class TokenInterceptor implements HandlerInterceptor {
 
-	private static final Log log = LogFactory.getLog("programLog");
-
-	@Autowired
-	private IUserService userService;
 	@Autowired
-	private IUserTokenService userTokenService;
+	private RedisUtil redisUtil;
 
 	@Override
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
@@ -40,18 +37,8 @@ public class TokenInterceptor implements HandlerInterceptor {
 		if(StringUtils.isEmpty(token)){
 			return true;
 		}
-		LambdaQueryWrapper<UserToken> wrapper = new LambdaQueryWrapper<>();
-		wrapper.eq(UserToken::getLoginToken,token);
-		List<UserToken> list = userTokenService.list(wrapper);
-		if(list!=null && list.size() >0){
-			UserToken userToken = list.get(0);
-			long time = new Date().getTime() - DateUtil.getDateTime(userToken.getUpdateTime());
-			if(time > 60 * 60 *1000){
-				userTokenService.removeById(userToken);
-			}else {
-				userToken.setUpdateTime(DateUtil.getDateTime(new Date()));
-				userTokenService.updateById(userToken);
-			}
+		if(redisUtil.hasKey("token:" + token)){
+			redisUtil.expire("token:"+token,2 * 60 * 60);
 		}
 		return true;
 	}

+ 4 - 0
src/main/java/com/cdf/mapper/ITotalDataMapper.java

@@ -3,6 +3,7 @@ package com.cdf.mapper;
 import com.cdf.entity.TotalData;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -15,4 +16,7 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface ITotalDataMapper extends BaseMapper<TotalData> {
 
+    TotalData getMonth(@Param("time") String time);
+
+    TotalData getWeek(@Param("startTime") String weekStart, @Param("endTime") String weekEnd);
 }

+ 1 - 0
src/main/java/com/cdf/service/ITotalDataService.java

@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ITotalDataService extends IService<TotalData> {
 
+    TotalData getByType(Integer type, String day) throws Exception;
 }

+ 4 - 0
src/main/java/com/cdf/service/impl/FdkkSceneService.java

@@ -10,6 +10,7 @@ import com.cdf.exception.BusinessException;
 import com.cdf.httpClient.client.FdkkClient;
 import com.cdf.httpClient.request.*;
 import com.cdf.httpClient.response.FdkkResponse;
+import com.cdf.interceptor.BackUserInterceptor;
 import com.cdf.service.IFdkkUserService;
 import com.cdf.service.IUserService;
 import com.cdf.util.Base64Converter;
@@ -31,8 +32,11 @@ public class FdkkSceneService {
     private IFdkkUserService fdkkUserService;
     @Autowired
     private IUserService userService;
+    @Autowired
+    private BackUserInterceptor backUserInterceptor;
 
     public String getFdkkToken(String token){
+        backUserInterceptor.checkUser(token);
         Integer userId = JwtUtil.getId(token);
         User user = userService.getById(userId);
         if(user == null || user.getFdkkUserId() == null){

+ 38 - 0
src/main/java/com/cdf/service/impl/TotalDataServiceImpl.java

@@ -1,11 +1,17 @@
 package com.cdf.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.cdf.entity.TotalData;
 import com.cdf.mapper.ITotalDataMapper;
 import com.cdf.service.ITotalDataService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cdf.util.DateUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +23,36 @@ import org.springframework.stereotype.Service;
 @Service
 public class TotalDataServiceImpl extends ServiceImpl<ITotalDataMapper, TotalData> implements ITotalDataService {
 
+    @Override
+    public TotalData getByType(Integer type, String time) throws Exception {
+        switch (type){
+            case 0:     //日
+                if(StringUtils.isEmpty(time)){
+                    time = DateUtil.getDay(new Date(),-1);
+                }
+                return  this.getById(time);
+            case 1:     //周
+                String weekStart =null;
+                if(StringUtils.isEmpty(time)){
+                     weekStart = DateUtil.getWeekStart();
+                }else {
+                    Date date = DateUtil.getDate(time);
+                    weekStart = DateUtil.getWeekStart(date);
+                }
+                String weekEnd = DateUtil.getWeekEnd(weekStart);
+                TotalData week = this.getBaseMapper().getWeek(weekStart, weekEnd);
+                week.setId(weekStart);
+                return week;
+            case 2:     //月
+                if(StringUtils.isEmpty(time)){
+                    time = DateUtil.getLastMonth();
+                }
+                time = DateUtil.getMonth(time);
+                TotalData month = this.getBaseMapper().getMonth(time);
+                month.setId(time);
+                return month;
+            default:
+                throw new IllegalStateException("Unexpected value: " + type);
+        }
+    }
 }

+ 69 - 0
src/main/java/com/cdf/util/DateUtil.java

@@ -4,9 +4,11 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.GregorianCalendar;
 
 public class DateUtil {
 
+    public static String MONTH_FORMAT = "yyyy-MM";
     public static String DAY_FORMAT = "yyyy-MM-dd";
     public static String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
 
@@ -26,7 +28,74 @@ public class DateUtil {
     public static long getDateTime(String time) throws Exception {
         return  new SimpleDateFormat(TIME_FORMAT).parse(time).getTime();
     }
+    public static Date getDate(String time) throws Exception {
+        return  new SimpleDateFormat(DAY_FORMAT).parse(time);
+    }
     public static String getDateTime(Date time) {
         return  new SimpleDateFormat(TIME_FORMAT).format(time);
     }
+
+    /**
+     * 获取上个月月份
+     */
+    public static  String getLastMonth() {
+        SimpleDateFormat format = new SimpleDateFormat(MONTH_FORMAT);
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        // 设置为当前时间
+        calendar.setTime(date);
+        calendar.add(Calendar.MONTH,-1);
+        // 设置为上一个月
+        //calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
+        date = calendar.getTime();
+        return format.format(date);
+    }
+    /**
+     * 获取上周周的第一天
+     * @return String
+     * **/
+    public static String getWeekStart(Date date){
+        Calendar cal=Calendar.getInstance();
+        cal.setTime(date);
+        cal.add(Calendar.WEEK_OF_MONTH, 0);
+        cal.set(Calendar.DAY_OF_WEEK, 2);
+        Date time=cal.getTime();
+        return new SimpleDateFormat(DAY_FORMAT).format(time);
+    }
+    /**
+     * 获取上周周的第一天
+     * @return String
+     * **/
+    public static String getWeekStart(){
+        Calendar cal=Calendar.getInstance();
+        cal.add(Calendar.WEEK_OF_MONTH, -1);
+        cal.set(Calendar.DAY_OF_WEEK, 2);
+        Date time=cal.getTime();
+        return new SimpleDateFormat(DAY_FORMAT).format(time);
+    }
+
+    /**
+     * 获取周的最后一天
+     * @return String
+     * **/
+    public static String getWeekEnd(String day) throws Exception {
+        Date date = DateUtil.getDate(day);
+        Calendar cal=Calendar.getInstance();
+        cal.setTime(date);
+        cal.set(Calendar.DAY_OF_WEEK, cal.getActualMaximum(Calendar.DAY_OF_WEEK));
+        cal.add(Calendar.DAY_OF_WEEK, 1);
+        Date time=cal.getTime();
+        return new SimpleDateFormat(DAY_FORMAT).format(time);
+    }
+
+
+    public static String getMonth(String time) {
+        try {
+            Date date = DateUtil.getDate(time);
+            return new SimpleDateFormat(MONTH_FORMAT).format(date);
+        }catch (Exception e){
+            return time;
+        }
+    }
+
 }

+ 17 - 0
src/main/resources/application-eurpord.yaml

@@ -6,6 +6,23 @@ spring:
       url: jdbc:mysql://127.0.0.1:3306/cdf_gm?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&allowMultiQueries=true
       username: root
       password: 4Dage@zhongmian#@168
+  redis:
+    host: 127.0.0.1
+    port: 6379
+    timeout: 6000ms
+    password: JK20220120%4dkk
+    # cluster:
+    #   max-redirects: 3  # 获取失败 最大重定向次数
+    #   nodes:
+    #     - 120.25.146.52:6379
+    jedis:
+      pool:
+        max-active: 10  #连接池最大连接数(使用负值表示没有限制)
+        max-idle: 10 # 连接池中的最大空闲连接
+        min-idle: 5 # 连接池中的最小空闲连接
+        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
+    lettuce:
+      shutdown-timeout: 0ms
 logging:
   config: classpath:logback-spring.xml
 mybatis-plus:

+ 17 - 0
src/main/resources/application-local.yaml

@@ -6,6 +6,23 @@ spring:
       url: jdbc:mysql://127.0.0.1:3306/cdf_gm?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&allowMultiQueries=true
       username: root
       password: 123456
+  redis:
+    host: 120.24.144.164
+    port: 6379
+    timeout: 6000ms
+    password:
+    # cluster:
+    #   max-redirects: 3  # 获取失败 最大重定向次数
+    #   nodes:
+    #     - 120.25.146.52:6379
+    jedis:
+      pool:
+        max-active: 10  #连接池最大连接数(使用负值表示没有限制)
+        max-idle: 10 # 连接池中的最大空闲连接
+        min-idle: 5 # 连接池中的最小空闲连接
+        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
+    lettuce:
+      shutdown-timeout: 0ms
 logging:
   config: classpath:logback-spring.xml
 mybatis-plus:

+ 21 - 0
src/main/resources/mapper/TotalDataMapper.xml

@@ -2,4 +2,25 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.cdf.mapper.ITotalDataMapper">
 
+    <sql id="baseRow">
+            SUM(avg_stop_time) AS avg_stop_time ,
+            SUM(avg_jump)AS avg_jump ,
+            SUM(avg_click_game)AS avg_click_game ,
+            SUM(avg_click_shop)AS avg_click_shop ,
+            SUM(avg_step_num)AS avg_step_num ,
+            SUM(video_num)AS video_num
+    </sql>
+
+
+    <select id="getMonth" resultType="com.cdf.entity.TotalData">
+        SELECT
+        <include refid="baseRow"></include>
+        FROM t_total_data WHERE id like CONCAT('%',#{time},'%')
+    </select>
+
+    <select id="getWeek" resultType="com.cdf.entity.TotalData">
+        SELECT
+         <include refid="baseRow"></include>
+        FROM t_total_data WHERE id &gt;= #{startTime} and id &lt;=#{endTime}
+    </select>
 </mapper>

+ 3 - 2
vr场景统计结果接口文档.md

@@ -17,7 +17,8 @@
  
  | 参数名称      | 参数说明      | 是否必须 | 数据类型     | 示例     |
  | ------------ | -----------   | -------- | -------     | -----    |
- | day          | 具体日期       |  false   |   String   |2022-06-18 |
+ | day          | 具体日期(默认昨天,type为1时,返回日期所在周的数据,type为2时,返回日期所在月份的数据)      |  false   |   String   |2022-06-18 |
+ | type          | 类型(0:日,1:周,2:月)默认0    |  false   |   int      |0    |
 
  
  
@@ -30,7 +31,7 @@
   "code": 0,             
   "message": "操作成功",
   "data": {
-    "id": "2022-06-18",   //日期
+    "id": "2022-06-18",   //日期 ,type为1时日期所在周的第一天,type为2时返回月份
     "avgStopTime": 2,     //平均停留时间 /秒
     "avgJump": 0,         //跳出率  保留4位小数
     "avgClickGame": 0,    //寻宝游戏点击率  保留4位小数