|
@@ -63,152 +63,157 @@ public class UpdateFrameMetaTask {
|
|
|
}
|
|
|
|
|
|
private void handle(UserEntity user,List<ActionPO> list){
|
|
|
+ try {
|
|
|
+ if(list.size() == 0){
|
|
|
+ //写入一个默认数据到redis里
|
|
|
+ createDefaultFrameMetadata( user);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- if(list.size() == 0){
|
|
|
- //写入一个默认数据到redis里
|
|
|
- createDefaultFrameMetadata( user);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- List<ActionPO> rotateJoystickList = new ArrayList<ActionPO>();
|
|
|
- JSONObject myState = redisCache.getCacheObject("UserState"+user.getUserId());
|
|
|
-
|
|
|
- ActionPO _actionPO = list.get(0);
|
|
|
- int firstActionType = _actionPO.getAction_type();
|
|
|
- JSONArray path = _actionPO.getPath();
|
|
|
- if(firstActionType == 1014||firstActionType == 15){
|
|
|
- rotateJoystickList.add(_actionPO);
|
|
|
- }
|
|
|
- else if(firstActionType == 1){
|
|
|
- long startBreakPointId = path.getLongValue(0);
|
|
|
- long endBreakPointId = path.getLongValue(1);
|
|
|
- BreakpointsEntity startBreakpointsEntity = breakpointsService.findById(startBreakPointId);
|
|
|
- BreakpointsEntity endBreakpointsEntity = breakpointsService.findById(endBreakPointId);
|
|
|
-
|
|
|
- //过渡
|
|
|
- if(myState.getIntValue("isMoving") == 1){
|
|
|
- MoveFrameEntity moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex()+1);
|
|
|
- //准备过渡下一段
|
|
|
- if(moveFrameEntity==null){
|
|
|
- RotateFrameEntity rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getAppId(),endBreakPointId,_actionPO.getCameraAngle().getYaw());
|
|
|
- path.remove(0);
|
|
|
- if(path.size()>1){
|
|
|
- startBreakPointId = endBreakPointId;
|
|
|
- endBreakPointId = path.getLongValue(1);
|
|
|
- _actionPO.setPath(path);
|
|
|
- _actionPO.setFrameIndex(0);
|
|
|
- _actionPO.setStartPostion(null);
|
|
|
- _actionPO.setEndPosition(null);
|
|
|
-
|
|
|
- int subFrameIndex = moveFrameService.getCountByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle( user.getAppId(),startBreakPointId,endBreakPointId, _actionPO.getCameraAngle().getYaw()%45);
|
|
|
- _actionPO.setSubFrameIndex(subFrameIndex);
|
|
|
- _actionPO.setPlayerPosition(endBreakpointsEntity.getPosition());
|
|
|
-
|
|
|
- startBreakpointsEntity = breakpointsService.findById(startBreakPointId);
|
|
|
- endBreakpointsEntity = breakpointsService.findById(endBreakPointId);
|
|
|
- int _angle = sceneGrpcService.calAngleForBreakPointId(startBreakpointsEntity,endBreakpointsEntity);
|
|
|
- AnglePO playerAngle = user.getPlayerAngle();
|
|
|
- playerAngle.setYaw(_angle);
|
|
|
- _actionPO.setPlayerAngle(playerAngle);
|
|
|
- //更新redis记录
|
|
|
- redisCache.setCacheListByIndex("setCacheRequest"+user.getUserId(),0,_actionPO);
|
|
|
-
|
|
|
- myState.put("isMoving",0);
|
|
|
- redisCache.setCacheObject("UserState"+user.getUserId(),myState);
|
|
|
-
|
|
|
- //moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),0);
|
|
|
- user.setFrameId(rotateFrameEntity.getId());
|
|
|
- user.setPlayerAngle(playerAngle);
|
|
|
- user.setBreakPointId(startBreakPointId);
|
|
|
- user.setPlayerPosition(startBreakpointsEntity.getPosition());
|
|
|
- userService.updateById(user);
|
|
|
- }
|
|
|
- //过渡全部结束
|
|
|
- else{
|
|
|
- //删除redis里的数据
|
|
|
- redisCache.lTrim("setCacheRequest"+user.getUserId(),1,-1);
|
|
|
- //更新user表
|
|
|
- //moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex());
|
|
|
- user.setPlayerPosition(endBreakpointsEntity.getPosition());
|
|
|
- user.setFrameId(rotateFrameEntity.getId());
|
|
|
- user.setPlayerAngle(_actionPO.getPlayerAngle());
|
|
|
- user.setBreakPointId(endBreakPointId);
|
|
|
- userService.updateById(user);
|
|
|
-
|
|
|
- myState.put("isMoving",0);
|
|
|
- redisCache.setCacheObject("UserState"+user.getUserId(),myState);
|
|
|
- //执行下一条记录
|
|
|
- list.remove(0);
|
|
|
- }
|
|
|
+ List<ActionPO> rotateJoystickList = new ArrayList<ActionPO>();
|
|
|
+ JSONObject myState = redisCache.getCacheObject("UserState"+user.getUserId());
|
|
|
|
|
|
- handle( user,list);
|
|
|
- return ;
|
|
|
- }
|
|
|
- //更新
|
|
|
- if(_actionPO.getStartPostion() == null){
|
|
|
- _actionPO.setStartPostion(startBreakpointsEntity.getPosition());
|
|
|
- _actionPO.setEndPosition(endBreakpointsEntity.getPosition());
|
|
|
- }
|
|
|
- _actionPO.setFrameIndex(_actionPO.getFrameIndex()+1);
|
|
|
- PointPO playerPosition = new PointPO();
|
|
|
- playerPosition.setX((_actionPO.getEndPosition().getX() - _actionPO.getStartPostion().getX())/_actionPO.getSubFrameIndex()*_actionPO.getFrameIndex());
|
|
|
- playerPosition.setY((_actionPO.getEndPosition().getY() - _actionPO.getStartPostion().getY())/_actionPO.getSubFrameIndex()*_actionPO.getFrameIndex());
|
|
|
- playerPosition.setZ((_actionPO.getEndPosition().getZ() - _actionPO.getStartPostion().getZ())/_actionPO.getSubFrameIndex()*_actionPO.getFrameIndex());
|
|
|
- createMoveFrameMetadata(user.getUserId(),_actionPO.getPlayerAngle(), playerPosition, moveFrameEntity,_actionPO.getTrace_id());
|
|
|
- //更新redis里的数据
|
|
|
- redisCache.setCacheListByIndex("setCacheRequest"+user.getUserId(),0,_actionPO);
|
|
|
+ ActionPO _actionPO = list.get(0);
|
|
|
+ int firstActionType = _actionPO.getAction_type();
|
|
|
+ JSONArray path = _actionPO.getPath();
|
|
|
+ if(firstActionType == 1014||firstActionType == 15){
|
|
|
+ rotateJoystickList.add(_actionPO);
|
|
|
}
|
|
|
- else if(myState.getIntValue("isMoving") == 0){
|
|
|
- if(list.size()>0){
|
|
|
- //中断,执行下一条记录
|
|
|
- list.remove(0);
|
|
|
- redisCache.lTrim("setCacheRequest"+user.getUserId(),1,-1);
|
|
|
- handle( user,list);
|
|
|
- return ;
|
|
|
- }
|
|
|
- else{
|
|
|
- //过渡
|
|
|
- myState.put("isMoving",1);
|
|
|
- redisCache.setCacheObject("UserState"+user.getUserId(),myState);
|
|
|
-
|
|
|
+ else if(firstActionType == 1){
|
|
|
+ long startBreakPointId = path.getLongValue(0);
|
|
|
+ long endBreakPointId = path.getLongValue(1);
|
|
|
+ BreakpointsEntity startBreakpointsEntity = breakpointsService.findById(startBreakPointId);
|
|
|
+ BreakpointsEntity endBreakpointsEntity = breakpointsService.findById(endBreakPointId);
|
|
|
+
|
|
|
+ //过渡
|
|
|
+ if(myState.getIntValue("isMoving") == 1){
|
|
|
MoveFrameEntity moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex()+1);
|
|
|
+ //准备过渡下一段
|
|
|
+ if(moveFrameEntity==null){
|
|
|
+ RotateFrameEntity rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getAppId(),endBreakPointId,_actionPO.getCameraAngle().getYaw());
|
|
|
+ path.remove(0);
|
|
|
+ if(path.size()>1){
|
|
|
+ startBreakPointId = endBreakPointId;
|
|
|
+ endBreakPointId = path.getLongValue(1);
|
|
|
+ _actionPO.setPath(path);
|
|
|
+ _actionPO.setFrameIndex(0);
|
|
|
+ _actionPO.setStartPostion(null);
|
|
|
+ _actionPO.setEndPosition(null);
|
|
|
+
|
|
|
+ int subFrameIndex = moveFrameService.getCountByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle( user.getAppId(),startBreakPointId,endBreakPointId, _actionPO.getCameraAngle().getYaw()%45);
|
|
|
+ _actionPO.setSubFrameIndex(subFrameIndex);
|
|
|
+ _actionPO.setPlayerPosition(endBreakpointsEntity.getPosition());
|
|
|
+
|
|
|
+ startBreakpointsEntity = breakpointsService.findById(startBreakPointId);
|
|
|
+ endBreakpointsEntity = breakpointsService.findById(endBreakPointId);
|
|
|
+ int _angle = sceneGrpcService.calAngleForBreakPointId(startBreakpointsEntity,endBreakpointsEntity);
|
|
|
+ AnglePO playerAngle = user.getPlayerAngle();
|
|
|
+ playerAngle.setYaw(_angle);
|
|
|
+ _actionPO.setPlayerAngle(playerAngle);
|
|
|
+ //更新redis记录
|
|
|
+ redisCache.setCacheListByIndex("setCacheRequest"+user.getUserId(),0,_actionPO);
|
|
|
+
|
|
|
+ myState.put("isMoving",0);
|
|
|
+ redisCache.setCacheObject("UserState"+user.getUserId(),myState);
|
|
|
+
|
|
|
+ //moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),0);
|
|
|
+ user.setFrameId(rotateFrameEntity.getId());
|
|
|
+ user.setPlayerAngle(playerAngle);
|
|
|
+ user.setBreakPointId(startBreakPointId);
|
|
|
+ user.setPlayerPosition(startBreakpointsEntity.getPosition());
|
|
|
+ userService.updateById(user);
|
|
|
+ }
|
|
|
+ //过渡全部结束
|
|
|
+ else{
|
|
|
+ //删除redis里的数据
|
|
|
+ redisCache.lTrim("setCacheRequest"+user.getUserId(),1,-1);
|
|
|
+ //更新user表
|
|
|
+ //moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex());
|
|
|
+ user.setPlayerPosition(endBreakpointsEntity.getPosition());
|
|
|
+ user.setFrameId(rotateFrameEntity.getId());
|
|
|
+ user.setPlayerAngle(_actionPO.getPlayerAngle());
|
|
|
+ user.setBreakPointId(endBreakPointId);
|
|
|
+ userService.updateById(user);
|
|
|
+
|
|
|
+ myState.put("isMoving",0);
|
|
|
+ redisCache.setCacheObject("UserState"+user.getUserId(),myState);
|
|
|
+ //执行下一条记录
|
|
|
+ list.remove(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ handle( user,list);
|
|
|
+ return ;
|
|
|
+ }
|
|
|
//更新
|
|
|
- int _angle = sceneGrpcService.calAngleForBreakPointId(startBreakpointsEntity,endBreakpointsEntity);
|
|
|
- AnglePO playerAngle = user.getPlayerAngle();
|
|
|
- playerAngle.setYaw(_angle);
|
|
|
- createMoveFrameMetadata( user.getUserId(),playerAngle,startBreakpointsEntity.getPosition(), moveFrameEntity,_actionPO.getTrace_id());
|
|
|
+ if(_actionPO.getStartPostion() == null){
|
|
|
+ _actionPO.setStartPostion(startBreakpointsEntity.getPosition());
|
|
|
+ _actionPO.setEndPosition(endBreakpointsEntity.getPosition());
|
|
|
+ }
|
|
|
_actionPO.setFrameIndex(_actionPO.getFrameIndex()+1);
|
|
|
- _actionPO.setStartPostion(startBreakpointsEntity.getPosition());
|
|
|
- _actionPO.setEndPosition(endBreakpointsEntity.getPosition());
|
|
|
+ PointPO playerPosition = new PointPO();
|
|
|
+ playerPosition.setX((_actionPO.getEndPosition().getX() - _actionPO.getStartPostion().getX())/_actionPO.getSubFrameIndex()*_actionPO.getFrameIndex());
|
|
|
+ playerPosition.setY((_actionPO.getEndPosition().getY() - _actionPO.getStartPostion().getY())/_actionPO.getSubFrameIndex()*_actionPO.getFrameIndex());
|
|
|
+ playerPosition.setZ((_actionPO.getEndPosition().getZ() - _actionPO.getStartPostion().getZ())/_actionPO.getSubFrameIndex()*_actionPO.getFrameIndex());
|
|
|
+ createMoveFrameMetadata(user.getUserId(),_actionPO.getPlayerAngle(), playerPosition, moveFrameEntity,_actionPO.getTrace_id());
|
|
|
//更新redis里的数据
|
|
|
redisCache.setCacheListByIndex("setCacheRequest"+user.getUserId(),0,_actionPO);
|
|
|
}
|
|
|
+ else if(myState.getIntValue("isMoving") == 0){
|
|
|
+ if(list.size()>0){
|
|
|
+ //中断,执行下一条记录
|
|
|
+ list.remove(0);
|
|
|
+ redisCache.lTrim("setCacheRequest"+user.getUserId(),1,-1);
|
|
|
+ handle( user,list);
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ //过渡
|
|
|
+ myState.put("isMoving",1);
|
|
|
+ redisCache.setCacheObject("UserState"+user.getUserId(),myState);
|
|
|
+
|
|
|
+ MoveFrameEntity moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(user.getAppId(), startBreakPointId, endBreakPointId,_actionPO.getCameraAngle().getYaw(),_actionPO.getFrameIndex()+1);
|
|
|
+ //更新
|
|
|
+ int _angle = sceneGrpcService.calAngleForBreakPointId(startBreakpointsEntity,endBreakpointsEntity);
|
|
|
+ AnglePO playerAngle = user.getPlayerAngle();
|
|
|
+ playerAngle.setYaw(_angle);
|
|
|
+ createMoveFrameMetadata( user.getUserId(),playerAngle,startBreakpointsEntity.getPosition(), moveFrameEntity,_actionPO.getTrace_id());
|
|
|
+ _actionPO.setFrameIndex(_actionPO.getFrameIndex()+1);
|
|
|
+ _actionPO.setStartPostion(startBreakpointsEntity.getPosition());
|
|
|
+ _actionPO.setEndPosition(endBreakpointsEntity.getPosition());
|
|
|
+ //更新redis里的数据
|
|
|
+ redisCache.setCacheListByIndex("setCacheRequest"+user.getUserId(),0,_actionPO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /****************************************************************************************/
|
|
|
+ return;
|
|
|
}
|
|
|
- /****************************************************************************************/
|
|
|
- return;
|
|
|
- }
|
|
|
- long lastFrameId = _actionPO.getFrameId();
|
|
|
- for(int i=1;i<list.size();++i){
|
|
|
- ActionPO actionPO = list.get(i);
|
|
|
+ long lastFrameId = _actionPO.getFrameId();
|
|
|
+ for(int i=1;i<list.size();++i){
|
|
|
+ ActionPO actionPO = list.get(i);
|
|
|
// if(firstActionType != actionPO.getAction_type()){
|
|
|
// break;
|
|
|
// }
|
|
|
- //旋转
|
|
|
- if(actionPO.getAction_type() == 1014||actionPO.getAction_type() == 15){
|
|
|
- rotateJoystickList.add(actionPO);
|
|
|
- lastFrameId = actionPO.getFrameId();
|
|
|
- continue;
|
|
|
- }
|
|
|
- else{
|
|
|
- break;
|
|
|
+ //旋转
|
|
|
+ if(actionPO.getAction_type() == 1014||actionPO.getAction_type() == 15){
|
|
|
+ rotateJoystickList.add(actionPO);
|
|
|
+ lastFrameId = actionPO.getFrameId();
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
+ createRotateFrameMetadata( user, rotateJoystickList, firstActionType);
|
|
|
+ //删除redis里的数据
|
|
|
+ redisCache.lTrim("setCacheRequest"+user.getUserId(),rotateJoystickList.size(),-1);
|
|
|
+ //更新user表
|
|
|
+ user.setFrameId(lastFrameId);
|
|
|
+ userService.updateById(user);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ log.info("handleException{}",e.getMessage());
|
|
|
+
|
|
|
}
|
|
|
- createRotateFrameMetadata( user, rotateJoystickList, firstActionType);
|
|
|
- //删除redis里的数据
|
|
|
- redisCache.lTrim("setCacheRequest"+user.getUserId(),rotateJoystickList.size(),-1);
|
|
|
- //更新user表
|
|
|
- user.setFrameId(lastFrameId);
|
|
|
- userService.updateById(user);
|
|
|
}
|
|
|
|
|
|
private void createDefaultFrameMetadata(UserEntity user){
|