xiewenjie 3 лет назад
Родитель
Сommit
c6d0563cd5

+ 3 - 3
src/main/java/com/fdkk/fdkkmeta/grpcService/sceneGrpcServer.java

@@ -216,7 +216,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			rotateRequestPO.setRotationAction(jsonObject);
 			//redisPublishService.sendJsonMessage(RedisQueueConstant.SET_CACHE_REQUEST_QUEUE,rotateRequestPO);
 			//redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(rotateRequestPO));
-			MapCacheUtil.cache.put("user_id",Arrays.asList(rotateRequestPO));
+			MapCacheUtil.appendCacheList("user_id",rotateRequestPO);
 			NormalReply.Builder builder = NormalReply.newBuilder();
 			builder.setCode(200);
 			responseObserver.onNext(builder.build());
@@ -324,7 +324,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 
 			moveRequestPO.setClicking_state(json_clicking_state);
 
-			MapCacheUtil.cache.put("user_id",Arrays.asList(moveRequestPO));
+			MapCacheUtil.appendCacheList("user_id",moveRequestPO);
 			/*
 			//UserEntity user = userService.findUserId(user_id);
 			//String appId = user.getAppId();
@@ -466,7 +466,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			//joystickPO.setDirAction(dirAction);
 			//redisPublishService.sendJsonMessage(RedisQueueConstant.SET_CACHE_REQUEST_QUEUE,joystickPO);
 			//redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(joystickPO));
-			MapCacheUtil.cache.put("user_id",Arrays.asList(joystickPO));
+			MapCacheUtil.appendCacheList("user_id",joystickPO);
 			/*
 			//速度不够,只是让人旋转
 			if(dirAction.getSpeedLevel()>7){

+ 15 - 17
src/main/java/com/fdkk/fdkkmeta/task/UpdateFrameMetaTask.java

@@ -1,6 +1,5 @@
 package com.fdkk.fdkkmeta.task;
 
-import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -9,7 +8,6 @@ import com.fdkk.fdkkmeta.domain.dto.RouteDto;
 import com.fdkk.fdkkmeta.domain.entity.mysql.BreakpointsEntity;
 import com.fdkk.fdkkmeta.domain.entity.mysql.MoveFrameEntity;
 import com.fdkk.fdkkmeta.domain.entity.mysql.RotateFrameEntity;
-import com.fdkk.fdkkmeta.domain.entity.mysql.UserEntity;
 import com.fdkk.fdkkmeta.domain.po.*;
 import com.fdkk.fdkkmeta.grpc.*;
 import com.fdkk.fdkkmeta.grpcService.SceneGrpcService;
@@ -21,7 +19,6 @@ import com.fdkk.fdkkmeta.service.RotateFrameService;
 import com.fdkk.fdkkmeta.util.MapCacheUtil;
 import com.fdkk.fdkkmeta.util.ProtoJsonUtils;
 import com.fdkk.fdkkmeta.util.kesar.GetRoute;
-import com.google.protobuf.util.JsonFormat;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -29,7 +26,6 @@ import org.springframework.stereotype.Component;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -70,11 +66,13 @@ public class UpdateFrameMetaTask {
 //                   handle( userEntity,list);
 //               }
 //       );
-        for(String userId : MapCacheUtil.cache.keySet()) {
-            System.out.println("Key = " +userId);
-            List<ActionPO> list = (List<ActionPO>)MapCacheUtil.cache.get(userId);
-            handle( userId,list);
-        }
+        MapCacheUtil.ActionCache.keySet().parallelStream().forEach(
+                userId -> {
+                        log.info("Key ={} " ,userId);
+                        List<ActionPO> list = MapCacheUtil.ActionCache.get(userId);
+                        handle( userId,list);
+               }
+       );
    }
    private void handle(String userId,List<ActionPO> list){
         try {
@@ -106,7 +104,7 @@ public class UpdateFrameMetaTask {
     }
     private void handleMove(JSONObject userInfo,ActionPO actionPO){
         String userId = userInfo.getString("userId");
-        List<ActionPO> list = (List<ActionPO>)MapCacheUtil.cache.get(userId);
+        List<ActionPO> list = (List<ActionPO>)MapCacheUtil.ActionCache.get(userId);
         boolean flag = isBreakForMove(userId);
         JSONArray path = userInfo.getJSONArray("path");
         if(path==null){
@@ -352,7 +350,7 @@ public class UpdateFrameMetaTask {
         builder.setGetStateType(0);
         builder.setCode(200);
         builder.setMsg("ok");
-        String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+rotateFrameEntity.getBreakPointId()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName()+"?m="+new Date().getTime();
+        String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+rotateFrameEntity.getBreakPointId()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName()+"?m="+System.currentTimeMillis();
         builder.setMediaSrc(mediaSrc);
         //删除记录并更新,合并
         userInfo.put("frameId",rotateFrameEntity.getId());
@@ -360,7 +358,7 @@ public class UpdateFrameMetaTask {
         /******************************************************************************/
     }
     private boolean isBreakForMove(String userId){
-        List<ActionPO> list = (List<ActionPO>)MapCacheUtil.cache.get(userId);
+        List<ActionPO> list = (List<ActionPO>)MapCacheUtil.ActionCache.get(userId);
         if(list.size()>1){
             return true;
         }
@@ -422,7 +420,7 @@ public class UpdateFrameMetaTask {
                     builder.setGetStateType(0);
                     builder.setCode(200);
                     builder.setMsg("ok");
-                    String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+_rotateFrameEntity.getBreakPointId()+"/"+_rotateFrameEntity.getDirectory()+"/"+_rotateFrameEntity.getFileName()+"?m="+new Date().getTime();
+                    String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+_rotateFrameEntity.getBreakPointId()+"/"+_rotateFrameEntity.getDirectory()+"/"+_rotateFrameEntity.getFileName()+"?m="+System.currentTimeMillis();
                     builder.setMediaSrc(mediaSrc);
                     userInfo.put("isRotating",1);
                     userInfo.put("frameId",_rotateFrameEntity.getId());
@@ -453,7 +451,7 @@ public class UpdateFrameMetaTask {
             builder.setGetStateType(0);
             builder.setCode(200);
             builder.setMsg("ok");
-            String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+rotateFrameEntity.getBreakPointId()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName()+"?m="+new Date().getTime();
+            String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+rotateFrameEntity.getBreakPointId()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName()+"?m="+System.currentTimeMillis();
             builder.setMediaSrc(mediaSrc);
 
             userInfo.put("cameraAngle",cameraAngle);
@@ -656,7 +654,7 @@ public class UpdateFrameMetaTask {
         builder.setMsg("ok");
         //newUserStates
 
-        String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+rotateFrameEntity.getBreakPointId()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName()+"?m="+new Date().getTime();
+        String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+rotateFrameEntity.getBreakPointId()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName()+"?m="+System.currentTimeMillis();
         builder.setMediaSrc(mediaSrc);
 
         redisCache.lLeftPush("updateFrameMetadata:"+userId, ProtoJsonUtils.toJson(builder));
@@ -699,7 +697,7 @@ public class UpdateFrameMetaTask {
         builder.setMsg("ok");
 
 
-        String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+moveFrameEntity.getStartBreakPointId()+"/"+moveFrameEntity.getDirectory()+"/"+moveFrameEntity.getFileName()+"?m="+new Date().getTime();
+        String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+moveFrameEntity.getStartBreakPointId()+"/"+moveFrameEntity.getDirectory()+"/"+moveFrameEntity.getFileName()+"?m="+System.currentTimeMillis();
         builder.setMediaSrc(mediaSrc);
         redisCache.lLeftPush("updateFrameMetadata:"+user_id,ProtoJsonUtils.toJson(builder));
     }
@@ -757,7 +755,7 @@ public class UpdateFrameMetaTask {
         builder.setCode(200);
         builder.setMsg("ok");
 
-        String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+rotateFrameEntity.getBreakPointId()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName()+"?m="+new Date().getTime();
+        String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+rotateFrameEntity.getBreakPointId()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName()+"?m="+System.currentTimeMillis();
         builder.setMediaSrc(mediaSrc);
         redisCache.lLeftPush("updateFrameMetadata:"+user.getUserId(),ProtoJsonUtils.toJson(builder));
 

+ 61 - 6
src/main/java/com/fdkk/fdkkmeta/util/MapCacheUtil.java

@@ -1,23 +1,78 @@
 package com.fdkk.fdkkmeta.util;
 
+import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSONObject;
-import lombok.Data;
+import com.fdkk.fdkkmeta.domain.po.ActionPO;
 
 import org.springframework.stereotype.Component;
 
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
 @Component
 public class MapCacheUtil {
 
-    public static Map<String,Object> cache=new ConcurrentHashMap<>();
+    public static Map<String,List<ActionPO>> ActionCache =new ConcurrentHashMap<>();
     public static Map<String, JSONObject> userCache=new ConcurrentHashMap<>();
 
-    public void put(String k,Object v){
-        cache.put(k, v);
+    /**
+     * 按指定key存入数组,如果为空则创建新的cache
+     *
+     * @param k key
+     * @param v       val
+     */
+    public static void appendCacheList(String k,ActionPO v){
+        if (ArrayUtil.isArray(ActionCache.get(k))) {
+            throw new RuntimeException("存入对象不是集合");
+        }
+        if (ActionCache.containsKey(k)){
+            List<ActionPO> o = ActionCache.get(k);
+            ActionCache.put(k, Arrays.asList(ArrayUtil.append(ArrayUtil.toArray(o, ActionPO.class),v)));
+        }else {
+            ActionCache.put(k, Arrays.asList(v));
+        }
     }
+    public static void removeCache(String k,int sIndex,int eIndex){
+        if (ArrayUtil.isArray(ActionCache.get(k))) {
+            throw new RuntimeException("存入对象不是集合");
+        }
+        if (ActionCache.containsKey(k)){
+            List<ActionPO> o = ActionCache.get(k);
+            ArrayList<ActionPO> p = new ArrayList<>(o);
+            p.subList(sIndex,eIndex+1).clear();
+            ActionCache.put(k, p);
+
+        }else {
+            throw new RuntimeException("对象不存在");
+        }
+     }
+
     public Object get(String k){
-        return cache.get(k);
+        return ActionCache.get(k);
+    }
+
+    public static void main(String[] args) {
+        ActionPO actionPO=new ActionPO();
+        actionPO.setUser_id("1");
+        MapCacheUtil.appendCacheList("test",actionPO);
+        actionPO=new ActionPO();
+        actionPO.setUser_id("2");
+
+        MapCacheUtil.appendCacheList("test",actionPO);
+        actionPO=new ActionPO();
+        actionPO.setUser_id("3");
+
+        MapCacheUtil.appendCacheList("test",actionPO);
+        actionPO=new ActionPO();
+        actionPO.setUser_id("4");
+        MapCacheUtil.appendCacheList("test",actionPO);
+        actionPO=new ActionPO();
+        actionPO.setUser_id("5");
+        MapCacheUtil.appendCacheList("test",actionPO);
+        System.out.println(MapCacheUtil.ActionCache.get("test"));
+        MapCacheUtil.removeCache("test",0,2);
+        System.out.println(MapCacheUtil.ActionCache.get("test"));
+        System.out.println("end");
+
     }
 }