ソースを参照

Merge branch 'dev-v4.2.0-20220519' into test

dengsixing 3 年 前
コミット
3a55963ea9

+ 80 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/Interceptor/CheckCooperationPermitAspect.java

@@ -0,0 +1,80 @@
+package com.fdkankan.scene.Interceptor;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.ServerCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.user.SSOLoginHelper;
+import com.fdkankan.common.util.WebUtil;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.scene.entity.ScenePlus;
+import com.fdkankan.scene.service.IScenePlusService;
+import java.io.IOException;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import lombok.extern.log4j.Log4j2;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+@Log4j2
+@Aspect
+@Component
+@Order(101)
+public class CheckCooperationPermitAspect {
+
+	@Autowired
+	private SSOLoginHelper ssoLoginHelper;
+	@Autowired
+	private RedisUtil redisUtil;
+	@Autowired
+	private IScenePlusService scenePlusService;
+
+
+	@Pointcut("@annotation(com.fdkankan.scene.annotation.CheckCooperationPermit)")
+	public void checkCooperationPermit() {
+	}
+
+	/**
+	 * 前置通知 用于判断用户协作场景是否有协作权限
+	 *
+	 * @param joinPoint
+	 *            切点
+	 * @throws IOException
+	 */
+	@Before("checkCooperationPermit()")
+	public void doBefore(JoinPoint joinPoint) throws Exception {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+		// 读取session中的用户
+		com.fdkankan.common.model.SSOUser user = ssoLoginHelper.loginCheckV3(request.getHeader("token"));
+		String num = WebUtil.getNum(joinPoint, request);
+		if(StrUtil.isEmpty(num)){
+			throw new BusinessException(ErrorCode.PARAM_REQUIRED);
+		}
+
+
+		//判断是不是场景原用户,如果是,跳出
+        ScenePlus scenePlus= scenePlusService.getScenePlusByNum(num);
+        if(scenePlus.getUserId().equals(user.getId())){
+            return;
+        }
+
+        //如果不是用户自己的场景,判断是否有协作权限
+        String userId = redisUtil.hget(RedisKey.SCENE_COOPERATION_NUM_USERID, num);
+        if(StrUtil.isEmpty(userId)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
+        }
+        if(!userId.equals(String.valueOf(user.getId()))){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
+        }
+	}
+
+}

+ 14 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/annotation/CheckCooperationPermit.java

@@ -0,0 +1,14 @@
+package com.fdkankan.scene.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.PARAMETER, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface CheckCooperationPermit {
+    String description() default "";
+}

+ 44 - 3
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/SceneEditController.java

@@ -4,6 +4,7 @@ import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.SceneInfoReqType;
 import com.fdkankan.common.controller.BaseController;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.scene.annotation.CheckCooperationPermit;
 import com.fdkankan.scene.service.ISceneEditInfoService;
 import com.fdkankan.scene.service.ISceneEditService;
 import com.fdkankan.scene.service.ISceneProService;
@@ -60,6 +61,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/base/save")
     public SceneEditInfoVO saveScene(@RequestBody @Validated SceneEditInfoParamVO param){
         return sceneEditInfoService.saveScene(param);
@@ -74,6 +76,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/publicScene")
     public ResultData publicScene(@RequestBody @Validated SceneEditInfoParamVO param) throws Exception {
         return sceneEditInfoService.publicScene(param);
@@ -190,6 +193,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/saveInitialPage")
     public ResultData saveInitialPage(@RequestBody @Validated FileNameAndDataParamVO param) throws Exception {
         return sceneProService.saveInitialPage(param);
@@ -246,6 +250,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/tag/save")
     public ResultData saveTag(@RequestBody @Validated SaveTagsParamVO param) throws Exception {
         return sceneProService.addOrUpdateTag(param);
@@ -260,6 +265,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/tag/delete")
     public ResultData deleteTag(@RequestBody @Validated DeleteHotParamVO param) throws Exception {
         return sceneProService.deleteTag(param);
@@ -279,6 +285,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/icons/delete")
     public ResultData deleteIcons(@RequestBody @Validated DeleteHotIconParamVO param) throws Exception {
         return sceneProService.deleteIcons(param);
@@ -407,6 +414,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/saveRoam")
     public ResultData saveRoam(@RequestBody @Validated BaseDataParamVO param) throws Exception {
         return sceneProService.saveRoam(param);
@@ -416,6 +424,7 @@ public class SceneEditController extends BaseController {
      * 保存热点可见性的数据
      * @return
      */
+    @CheckCooperationPermit
     @PostMapping(value = "/saveTagsVisible")
     public ResultData saveTagsVisible(@RequestBody @Validated SaveTagsVisibleParamVO param) throws Exception {
         return sceneProService.saveTagsVisible(param);
@@ -518,6 +527,7 @@ public class SceneEditController extends BaseController {
     /**
      * 肖安需求,下载场景obj和贴图
      */
+    @CheckCooperationPermit
     @PostMapping(value = "/downloadModel")
     public ResultData downloadTexData(@RequestParam("num") String num) throws Exception {
         return sceneProService.downloadTexData(num);
@@ -529,6 +539,7 @@ public class SceneEditController extends BaseController {
      * @return
      */
 //    @SystemControllerLog(description = "上传修改后的obj和贴图")
+    @CheckCooperationPermit
     @PostMapping(value = "/uploadModel")
     public ResultData uploadObjAndImg(@RequestParam("num") String num, @RequestParam("file") MultipartFile file) throws Exception {
         return sceneProService.uploadObjAndImg(num, file);
@@ -673,6 +684,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/cad/save")
     public ResultData saveCad(@RequestBody @Validated BaseDataParamVO param) throws Exception{
         return sceneEditInfoService.saveCad(param);
@@ -687,6 +699,7 @@ public class SceneEditController extends BaseController {
      * @param num
      * @return
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/cad/reset")
     public ResultData resetCad(@RequestParam(value = "num") String num){
         return sceneEditInfoService.resetCad(num);
@@ -700,6 +713,7 @@ public class SceneEditController extends BaseController {
      * @date 2022/2/16
      * @return
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/cad/rename")
     public ResultData renameCad(@RequestBody @Validated RenameCadParamVO param) throws IOException {
         return sceneEditInfoService.renameCad(param);
@@ -716,7 +730,7 @@ public class SceneEditController extends BaseController {
 
     /**
      * <p>
-            批量上传全景照片
+            上传全景图
      * </p>
      * @author dengsixing
      * @date 2022/2/16
@@ -724,6 +738,7 @@ public class SceneEditController extends BaseController {
      * @param file
      * @return java.util.List<java.lang.String>
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/uploadPanorama")
     public ResultData uploadPanorama(@RequestParam(value = "num") String num,
         @RequestParam("file") MultipartFile file) throws Exception {
@@ -738,6 +753,7 @@ public class SceneEditController extends BaseController {
      * @date 2022/2/16
      * @return java.util.List<java.lang.String>
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/downloadPanorama")
     public ResultData downloadPanorama(@RequestBody @Validated FileParamVO param) throws Exception {
         return sceneEditInfoService.downloadPanorama(param);
@@ -752,6 +768,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/video/box/save")
     public ResultData saveVideoBox(@RequestBody @Validated FileNameAndDataParamVO param) throws Exception {
         return sceneEditInfoService.saveVideoBox(param);
@@ -766,6 +783,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/video/box/delete")
     public ResultData deleteVideoBox(@RequestBody @Validated DeleteSidParamVO param) throws Exception {
         return sceneEditInfoService.deleteVideoBox(param);
@@ -780,6 +798,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/photo/box/save")
     public ResultData savePhotoBox(@RequestBody @Validated BaseDataParamVO param) throws Exception {
         return sceneEditInfoService.saveBoxPhoto(param);
@@ -794,6 +813,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "/photo/box/delete")
     public ResultData deletePhotoBox(@RequestBody @Validated DeleteSidParamVO param) throws Exception {
         return sceneEditInfoService.deleteBoxPhoto(param);
@@ -809,6 +829,7 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.scene.vo.DownloadVO
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "downloadBallScreenVideo")
     public DownloadVO downloadBallScreenVideo(@RequestBody @Validated BallScreenVideoParamVO param){
         return sceneEditInfoService.downloadBallScreenVideo(param);
@@ -825,6 +846,7 @@ public class SceneEditController extends BaseController {
      * @param file
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping(value = "uploadBallScreenVideo")
     public ResultData uploadBallScreenVideo(
             @RequestParam("num") String num,
@@ -843,6 +865,7 @@ public class SceneEditController extends BaseController {
      * type 操作类型 0添加,1替换
      * uploadPath 上传路径,此字段为扩展字段,前端可自定义上传路径,注意是完全的文件路径
      */
+    @CheckCooperationPermit
     @RequestMapping(value = "/upload/files", method = RequestMethod.POST)
     public String uploads(@RequestParam(value = "base64",required = false) String base64,
         @RequestParam(value = "fileName",required = false) String fileName,
@@ -874,6 +897,7 @@ public class SceneEditController extends BaseController {
      * @param paramVO
      * @return com.fdkankan.common.response.ResultData
      **/
+    @CheckCooperationPermit
     @PostMapping("/delete/file")
     public ResultData delete(@RequestBody @Validated DeleteFileParamVO paramVO) throws Exception{
         return sceneUploadService.delete(paramVO);
@@ -882,6 +906,7 @@ public class SceneEditController extends BaseController {
     /**
      * 场景同步
      */
+    @CheckCooperationPermit
     @PostMapping(value = "/sceneSync")
     public ResultData sceneSync(
         @RequestParam("num") String num,
@@ -899,9 +924,10 @@ public class SceneEditController extends BaseController {
      * @return
      * @throws Exception
      */
+    @CheckCooperationPermit
     @PostMapping(value = "/getAuth")
-    public SceneAuthVO getAuth(BaseSceneParamVO param) throws Exception{
-        return sceneEditService.getAuth(param, this.getToken());
+    public SceneAuthVO getAuth(@RequestParam("num") String num) throws Exception{
+        return sceneEditService.getAuth(num, this.getToken());
     }
 
     /**
@@ -927,16 +953,31 @@ public class SceneEditController extends BaseController {
      * @return
      * @throws Exception
      */
+    @CheckCooperationPermit
     @PostMapping(value = "/tour/save")
     public ResultData saveTour(@RequestBody @Validated BaseDataParamVO param) throws Exception{
         return sceneEditService.saveTour(param);
     }
 
+    /**
+     * 删除导览
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @CheckCooperationPermit
     @PostMapping(value = "/tour/delete")
     public ResultData deleteTour(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
         return sceneEditService.deleteTour(param);
     }
 
+    /**
+     * 添加马赛克
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @CheckCooperationPermit
     @PostMapping(value = "/mosaics/add")
     public ResultData addMosaics(@RequestBody @Validated BaseDataParamVO param) throws Exception{
         return sceneEditInfoService.addMosaics(param);

+ 1 - 1
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneEditService.java

@@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestBody;
  **/
 public interface ISceneEditService {
 
-    SceneAuthVO getAuth(BaseSceneParamVO param, String token) throws Exception;
+    SceneAuthVO getAuth(String num, String token) throws Exception;
 
     ResultData locales(LocalesParamVO param) throws Exception;
 

+ 4 - 4
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneEditServiceImpl.java

@@ -97,10 +97,10 @@ public class SceneEditServiceImpl implements ISceneEditService {
     private String URL_ISLOGIN;
 
     @Override
-    public SceneAuthVO getAuth(BaseSceneParamVO param, String token) throws Exception{
+    public SceneAuthVO getAuth(String num, String token) throws Exception{
 
         // TODO: 2022/5/19 请求v3的接口,获取场景的状态 待v3停机后要换成v4d的逻辑-------------------------start
-        String url = fkankanMiniHost + URL_GET_SCENEPRO_BY_NUM + param.getNum();
+        String url = fkankanMiniHost + URL_GET_SCENEPRO_BY_NUM + num;
         Result<SceneProV3> result = fdkankanMiniClient
             .getSceneProByNum(url, new FdkkMiniReqSuccessCallback(),
                 new FdkkMiniReqErrorCallback());
@@ -121,7 +121,7 @@ public class SceneEditServiceImpl implements ISceneEditService {
         // TODO: 2022/5/19 请求v3的接口,获取场景的状态 待v3停机后要换成v4d的逻辑-------------------------send
 
         ScenePlus scenePlus = scenePlusService.getOne(
-            new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getNum, param.getNum())
+            new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getNum, num)
                 .eq(ScenePlus::getPayStatus, PayStatus.PAY.code()));
 //                .in(ScenePlus::getSceneStatus, SceneStatus.SUCCESS.code(), SceneStatus.NO_DISPLAY.code()));
         if(scenePlus == null){
@@ -168,7 +168,7 @@ public class SceneEditServiceImpl implements ISceneEditService {
 //            }
 //        }
         // TODO: 2022/4/25 v3v4共存过渡期结束需要删除,恢复上面注释内容 ------------------------------------------start
-        url = fkankanMiniHost + URL_ISLOGIN + param.getNum();
+        url = fkankanMiniHost + URL_ISLOGIN + num;
         Result<Map<String, Object>> isLoginResult = fdkankanMiniClient
             .getIsLogin(url, token, new FdkkMiniReqSuccessCallback(),
                 new FdkkMiniReqErrorCallback());

+ 29 - 0
4dkankan-common/src/main/java/com/fdkankan/common/model/SSOUser.java

@@ -0,0 +1,29 @@
+package com.fdkankan.common.model;
+
+import java.io.Serializable;
+import java.util.Set;
+import lombok.Data;
+
+/**
+ * sso user
+ *
+ *  2018-04-02 19:59:49
+ */
+@Data
+public class SSOUser implements Serializable {
+
+    private static final long serialVersionUID = -2560069033053679931L;
+
+    private Long id;
+
+    private String userName;
+
+    private String password;
+
+    private String email;
+
+    private Set<String> permissionSet;
+
+    private Set<String> roleSet;
+
+}

+ 12 - 0
4dkankan-common/src/main/java/com/fdkankan/common/user/SSOLoginHelper.java

@@ -7,8 +7,10 @@ import org.springframework.stereotype.Component;
 
 @Component
 public class SSOLoginHelper {
+
     @Autowired
     private SSOLoginStore ssoLoginStore;
+
     public  SSOUser loginCheck(String token) {
         if (token != null && token.trim().length() > 0) {
             String username = JwtUtil.getUsername(token);
@@ -20,6 +22,16 @@ public class SSOLoginHelper {
         return null;
     }
 
+    public com.fdkankan.common.model.SSOUser loginCheckV3(String token) {
+        if (token != null && token.trim().length() > 0) {
+            com.fdkankan.common.model.SSOUser ssoUser = ssoLoginStore.getV3(token);
+            if (ssoUser != null) {
+                return ssoUser;
+            }
+        }
+        return null;
+    }
+
     public String login(String loginType,String userName) {
         return this.login(loginType,userName,null, null);
     }

+ 25 - 0
4dkankan-common/src/main/java/com/fdkankan/common/user/SSOLoginStore.java

@@ -1,13 +1,23 @@
 package com.fdkankan.common.user;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.constant.LoginType;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Objects;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 
+@Slf4j
 @Component
 public class SSOLoginStore {
 
@@ -27,6 +37,20 @@ public class SSOLoginStore {
         return null;
     }
 
+
+    @Resource
+    @Qualifier("redisTemplate2")
+    private RedisTemplate redisTemplate2;
+
+    public  com.fdkankan.common.model.SSOUser getV3(String token) {
+        String redisKey = "token#".concat(token);
+        Object obj = redisTemplate2.opsForValue().get(redisKey);
+        if(Objects.nonNull(obj)){
+            return (com.fdkankan.common.model.SSOUser)obj;
+        }
+        return null;
+    }
+
     /**
      * remove
      * @param loginType     登录类型
@@ -74,4 +98,5 @@ public class SSOLoginStore {
         return String.format(RedisKey.SSO_USER,userName);
     }
 
+
 }

+ 38 - 0
4dkankan-common/src/main/java/com/fdkankan/common/util/WebUtil.java

@@ -0,0 +1,38 @@
+package com.fdkankan.common.util;
+
+import cn.hutool.http.ContentType;
+import com.alibaba.fastjson.JSON;
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/6/9
+ **/
+public class WebUtil {
+
+    /**
+     * 获取请求参数中的场景码
+     * @param pjp
+     * @param request
+     * @return
+     */
+    public static String getNum(JoinPoint pjp, HttpServletRequest request){
+        Object[] args = pjp.getArgs();
+        String contentType = request.getContentType();
+        if(ContentType.JSON.getValue().equals(contentType)){
+            HashMap hashMap = JSON.parseObject(JSON.toJSONString(args[0]), HashMap.class);
+            return (String) hashMap.get("num");
+        }
+        return request.getParameter("num");
+    }
+
+}