dengsixing 3 anni fa
parent
commit
3c8a2429b2
75 ha cambiato i file con 1406 aggiunte e 543 eliminazioni
  1. 1 1
      4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/Camera.java
  2. 1 1
      4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/CameraDetail.java
  3. 1 2
      4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/Company.java
  4. 1 1
      4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/User.java
  5. 1 1
      4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/UserIncrement.java
  6. 2 2
      4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/feign/PlatformGoodsClient.java
  7. 11 1
      4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/feign/PlatformUserClient.java
  8. 2 2
      4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/vo/SceneCnt.java
  9. 69 0
      4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/dto/SceneEditControlsDTO.java
  10. 163 0
      4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/dto/SceneInfoDTO.java
  11. 1 1
      4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/vo/SceneProDTO.java
  12. 14 3
      4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/feign/SceneUserSceneClient.java
  13. 13 0
      4dkankan-center-platform/pom.xml
  14. 1 1
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/agent/service/impl/AgentServiceImpl.java
  15. 4 25
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/feign/GoodsFeign.java
  16. 13 12
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/feign/UserFeign.java
  17. 1 2
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/goods/service/impl/CameraServiceImpl.java
  18. 1 1
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/order/service/PayOrderService.java
  19. 4 0
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/IUserService.java
  20. 1 1
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/impl/ManagerServiceImpl.java
  21. 0 7
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/impl/UserSceneServiceImpl.java
  22. 9 0
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/impl/UserServiceImpl.java
  23. 3 3
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/sso/AppService.java
  24. 1 1
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/sso/SsoManagerService.java
  25. 39 11
      4dkankan-center-platform/src/main/resources/logback-spring.xml
  26. 11 0
      4dkankan-center-scene-download/pom.xml
  27. 3 1
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/SceneDownloadApplication.java
  28. 36 0
      4dkankan-center-scene-download/src/main/java/com/fdkankan/download/bean/CurrentDownloadNumUtil.java
  29. 1 1
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/bean/ImageType.java
  30. 1 1
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/bean/ImageTypeDetail.java
  31. 1 4
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/config/TaskPoolConfig.java
  32. 3 11
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/config/TestController.java
  33. 3 3
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/schedule/ScheduleJob.java
  34. 1 1
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/service/ISceneDownLoadService.java
  35. 65 0
      4dkankan-center-scene-download/src/main/java/com/fdkankan/download/service/impl/CheckProgressRunnerImpl.java
  36. 83 0
      4dkankan-center-scene-download/src/main/java/com/fdkankan/download/service/impl/SceneDownLoadServiceImpl.java
  37. 114 94
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/service/impl/SceneDownloadHandlerServiceImpl.java
  38. 0 51
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/service/impl/CheckProgressRunnerImpl.java
  39. 0 53
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/service/impl/SceneDownLoadServiceImpl.java
  40. 7 7
      4dkankan-center-scene-download/src/main/resources/bootstrap.yml
  41. 12 0
      4dkankan-center-scene/pom.xml
  42. 0 2
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/config/Test.java
  43. 0 7
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/SceneCooperationController.java
  44. 5 29
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/TestController.java
  45. 24 10
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/UserSceneController.java
  46. 6 0
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/entity/SceneDownloadLog.java
  47. 34 8
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/feign/UserSceenFeign.java
  48. 8 36
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/listener/BuildScenePreMQListener.java
  49. 8 20
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/listener/BuildSceneResultMQListener.java
  50. 2 1
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/schedule/ScheduleJob.java
  51. 3 0
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneDownloadLogService.java
  52. 3 0
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneEditInfoService.java
  53. 8 4
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/IUserSceneService.java
  54. 0 12
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/BuildScenePreServiceImpl.java
  55. 1 11
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneCooperationServiceImpl.java
  56. 20 1
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneDownloadLogServiceImpl.java
  57. 15 5
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java
  58. 2 4
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneEditServiceImpl.java
  59. 3 7
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneFileBuildServiceImpl.java
  60. 3 3
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneProAppServiceImpl.java
  61. 1 2
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java
  62. 90 11
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/UserSceneServiceImpl.java
  63. 23 0
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/SceneDownloadParamVO.java
  64. 91 0
      4dkankan-center-scene/src/main/resources/bootstrap-dev.yml
  65. 91 0
      4dkankan-center-scene/src/main/resources/bootstrap-pro.yml
  66. 91 0
      4dkankan-center-scene/src/main/resources/bootstrap-test.yml
  67. 91 38
      4dkankan-center-scene/src/main/resources/logback-spring.xml
  68. 55 0
      4dkankan-common/src/main/java/com/fdkankan/common/aop/FeignInterceptor.java
  69. 17 15
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/aop/PlatformAopInterceptor.java
  70. 1 1
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/bean/DownLoadProgressBean.java
  71. 3 1
      4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/bean/DownLoadTaskBean.java
  72. 4 4
      4dkankan-common/src/main/java/com/fdkankan/common/config/ShiroConfig.java
  73. 1 1
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/common/LogFactory.java
  74. 2 2
      4dkankan-common/src/main/java/com/fdkankan/common/user/SSOLoginHelper.java
  75. 2 2
      4dkankan-common/src/main/java/com/fdkankan/common/user/SSOLoginStore.java

+ 1 - 1
4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/Camera.java

@@ -1,4 +1,4 @@
-package com.fdkankan.platform.api.vo;
+package com.fdkankan.platform.api.dto;
 
 import lombok.Data;
 

+ 1 - 1
4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/CameraDetail.java

@@ -1,4 +1,4 @@
-package com.fdkankan.platform.api.vo;
+package com.fdkankan.platform.api.dto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 1 - 2
4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/Company.java

@@ -1,6 +1,5 @@
-package com.fdkankan.platform.api.vo;
+package com.fdkankan.platform.api.dto;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/User.java

@@ -1,4 +1,4 @@
-package com.fdkankan.platform.api.vo;
+package com.fdkankan.platform.api.dto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 1 - 1
4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/vo/UserIncrement.java

@@ -1,4 +1,4 @@
-package com.fdkankan.platform.api.vo;
+package com.fdkankan.platform.api.dto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 2 - 2
4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/feign/PlatformGoodsClient.java

@@ -1,8 +1,8 @@
 package com.fdkankan.platform.api.feign;
 
 import com.fdkankan.common.response.ResultData;
-import com.fdkankan.platform.api.vo.Camera;
-import com.fdkankan.platform.api.vo.CameraDetail;
+import com.fdkankan.platform.api.dto.Camera;
+import com.fdkankan.platform.api.dto.CameraDetail;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;

+ 11 - 1
4dkankan-center-api/4dkankan-center-platform-api/src/main/java/com/fdkankan/platform/api/feign/PlatformUserClient.java

@@ -2,7 +2,7 @@ package com.fdkankan.platform.api.feign;
 
 import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.user.SSOUser;
-import com.fdkankan.platform.api.vo.*;
+import com.fdkankan.platform.api.dto.*;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -50,4 +50,14 @@ public interface PlatformUserClient {
      */
     @PostMapping("/getUserLikeUserName")
     ResultData<List<User>> getUserLikeUserName(@RequestParam(value = "searchKey") String searchKey);
+
+    /**
+     * 更改用户场景已下载次数
+     * @param userId
+     * @param downLoadNum
+     * @return
+     */
+    @PostMapping("/updateDownloadNum")
+    ResultData updateDownloadNum(@RequestParam(value = "userId") long userId,
+        @RequestParam(value = "downLoadNum") int downLoadNum);
 }

+ 2 - 2
4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/vo/SceneCnt.java

@@ -1,4 +1,4 @@
-package com.fdkankan.scene.api.vo;
+package com.fdkankan.scene.api.dto;
 
 import java.io.Serializable;
 import lombok.AllArgsConstructor;
@@ -18,7 +18,7 @@ import lombok.NoArgsConstructor;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class SceneCnt implements Serializable {
+public class SceneCntDTO implements Serializable {
 
     /**
      * 双目场景数量

+ 69 - 0
4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/dto/SceneEditControlsDTO.java

@@ -0,0 +1,69 @@
+package com.fdkankan.scene.api.dto;
+
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/1/18
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneEditControlsDTO implements Serializable {
+
+    /**
+     * 是否展示小地图(0-不展示,1-展示)
+     */
+    private Integer showMap;
+
+    /**
+     * 是否需要密码(0-不需要,1-需要)
+     */
+    private Integer showLock;
+
+    /**
+     * 是否展示标题(0-不需要,1-需要)
+     */
+    private Integer showTitle;
+
+    /**
+     * 是否展示漫游按钮(0-不需要,1-需要)
+     */
+    private Integer showPanorama;
+
+    /**
+     * 是否展示3D按钮(0-不需要,1-需要)
+     */
+    private Integer showDollhouse;
+
+    /**
+     * 是否展示2D按钮(0-不需要,1-需要)
+     */
+    private Integer showFloorplan;
+
+    /**
+     * 是否展示VR(0-不需要,1-需要)
+     */
+    private Integer showVR;
+
+    /**
+     * 是否展示自动导览(0-不需要,1-需要)
+     */
+    private Integer showTour;
+
+    /**
+     * 是否展示测量线(0-不需要,1-需要)
+     */
+    private Integer showRule;
+
+
+}

+ 163 - 0
4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/dto/SceneInfoDTO.java

@@ -0,0 +1,163 @@
+package com.fdkankan.scene.api.dto;
+
+import java.util.Date;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/1/19
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneInfoDTO {
+
+    /**
+     * 场景码
+     */
+    private String num;
+
+    /**
+     * 地面logo名称
+     */
+    private String floorLogo;
+
+    /**
+     * 地面logo大小
+     */
+    private Integer floorLogoSize;
+
+    /**
+     * 地面logo文件名称
+     */
+    private String floorLogoFile;
+
+    /**
+     * 背景音乐
+     */
+    private String music;
+
+    /**
+     * 背景音乐文件名称
+     */
+    private String musicFile;
+
+    /**
+     * 浏览密码
+     */
+    private String scenePassword;
+
+    /**
+     * 场景标题
+     */
+    private String title;
+
+    /**
+     * 场景描述
+     */
+    private String description;
+
+    private SceneEditControlsDTO controls;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+//    /**
+//     * 点位数量
+//     */
+//    private Integer panoCount;
+//
+//    /**
+//     * 球幕视频数量
+//     */
+//    private Integer videoCount;
+
+    /**
+     * 版本
+     */
+    private Integer version;
+
+    /**
+     * 是否上传了户型图(0-否,1-是)
+     */
+    private Byte floorPlanUser;
+
+//    private String cadInfo;
+//
+//    private Byte isUploadObj;
+//
+//    private Integer floorEditVer;
+//
+//    private Integer floorPublishVer;
+
+    /**
+     * 初始点信息
+     */
+    private String entry;
+
+    /**
+     * 全景图加载方式,tiles/1k:1k瓦片图,tiles/2:2k瓦片图,tiles/4k:4k瓦片图,pan:全景图 ,local:本地切片,cube:立体图
+     */
+    private String sceneResolution;
+
+    /**
+     * 场景来源,lite:双目lite相机,pro:八目相机,minion:双面转台相机,laser:激光相机,virtual:虚拟场景,sketch:图片建模场景
+     */
+    private String sceneFrom;
+
+    /**
+     * 视频覆盖数据
+     */
+    private String boxVideos;
+
+    /**
+     *点位视频
+     */
+    private String videos;
+
+    /**
+     * 是否有热点数据
+     */
+    private Integer tags;
+
+    /**
+     * 加载logo名
+     */
+    private String loadingLogo;
+
+    /**
+     * 加载logo文件名
+     */
+    private String loadingLogoFile;
+
+    /**
+     * 数据同步方式
+     */
+    private String dataSync;
+
+    /**
+     * 户型角度
+     */
+    private Float floorPlanAngle;
+
+    /**
+     * 指南针角度
+     */
+    private Float floorPlanCompass;
+
+    private Integer sceneSource;
+
+
+
+
+}

+ 1 - 1
4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/vo/SceneProDTO.java

@@ -1,4 +1,4 @@
-package com.fdkankan.scene.api.vo;
+package com.fdkankan.scene.api.dto;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;

+ 14 - 3
4dkankan-center-api/4dkankan-center-scene-api/src/main/java/com/fdkankan/scene/api/feign/SceneUserSceneClient.java

@@ -1,8 +1,9 @@
 package com.fdkankan.scene.api.feign;
 
 import com.fdkankan.common.response.ResultData;
-import com.fdkankan.scene.api.vo.SceneCnt;
-import com.fdkankan.scene.api.vo.SceneProDTO;
+import com.fdkankan.scene.api.dto.SceneCntDTO;
+import com.fdkankan.scene.api.dto.SceneInfoDTO;
+import com.fdkankan.scene.api.dto.SceneProDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -13,7 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 public interface SceneUserSceneClient {
 
     @PostMapping("/getSceneCnt")
-    ResultData<SceneCnt> getSceneCnt(@RequestParam(value = "userId") Long userId, @RequestParam(value = "cameraId") Long cameraId) ;
+    ResultData<SceneCntDTO> getSceneCnt(@RequestParam(value = "userId") Long userId, @RequestParam(value = "cameraId") Long cameraId) ;
 
     @PostMapping("/getSceneNumByCameraId")
     ResultData<Integer> getSceneNumByCameraId(@RequestParam(value = "cameraId") Long cameraId) ;
@@ -21,4 +22,14 @@ public interface SceneUserSceneClient {
     @PostMapping("/getLastSceneByCameraId")
     ResultData<SceneProDTO> getLastSceneByCameraId(@RequestParam(value = "cameraId") Long cameraId) ;
 
+    @PostMapping("/updateSceneDownloadLog")
+    ResultData updateSceneDownloadLog(
+        @RequestParam(value = "num") String num,
+        @RequestParam(value = "status") Integer status,
+        @RequestParam(value = "url", required = false) String url,
+        @RequestParam(value = "reason", required = false) String reason);
+
+    @PostMapping("/getSceneViewInfo")
+    ResultData<SceneInfoDTO> getSceneViewInfo(@RequestParam(value = "num") String num) throws Exception;
+
 }

+ 13 - 0
4dkankan-center-platform/pom.xml

@@ -74,6 +74,19 @@
           <version>2.0.0-SNAPSHOT</version>
       </dependency>
 
+      <dependency>
+          <groupId>com.yomahub</groupId>
+          <artifactId>tlog-web-spring-boot-starter</artifactId>
+          <version>1.3.6</version>
+      </dependency>
+
+      <dependency>
+          <groupId>com.yomahub</groupId>
+          <artifactId>tlog-feign-spring-boot-starter</artifactId>
+          <version>1.3.6</version>
+      </dependency>
+
+
   </dependencies>
 
     <build>

+ 1 - 1
4dkankan-center-platform/src/main/java/com/fdkankan/platform/agent/service/impl/AgentServiceImpl.java

@@ -82,7 +82,7 @@ public class AgentServiceImpl extends ServiceImpl<IAgentMapper, Agent> implement
         if (!encryptPwd.equals(agent.getAgentPassword())){
             throw new BusinessException(ErrorCode.PASSWORD_ERROR);
         }
-        String token = ssoLoginHelper.login(LoginType.AGENT.name(), agent.getAgentId());
+        String token = ssoLoginHelper.login(LoginType.AGENT.code(), agent.getAgentId());
         JSONObject obj = new JSONObject();
         obj.put("token", token);
         return obj;

+ 4 - 25
4dkankan-center-platform/src/main/java/com/fdkankan/platform/feign/GoodsFeign.java

@@ -4,6 +4,7 @@ import com.fdkankan.platform.goods.entity.Camera;
 import com.fdkankan.platform.goods.entity.CameraDetail;
 import com.fdkankan.platform.goods.service.ICameraDetailService;
 import com.fdkankan.platform.goods.service.ICameraService;
+import com.fdkankan.scene.api.feign.SceneUserSceneClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,82 +28,60 @@ public class GoodsFeign {
     private ICameraService cameraService;
     @Autowired
     private ICameraDetailService cameraDetailService;
+    @Autowired
+    private SceneUserSceneClient sceneUserSceneClient;
 
     @PostMapping("/getCameraByChildName")
     public Camera getCameraByChildName(@RequestParam(value = "childName", required = false) String childName) {
-        log.info("scene服务调用:getCameraByChildName,参数:childName:{},",childName);
         Camera camera = cameraService.getByChildName(childName);
-        log.info("scene服务调用:getCameraByChildName,返回:{}",camera);
         return camera;
     }
 
     @PostMapping("/getCameraDetailByCameraId")
     public CameraDetail getCameraDetailByCameraId(@RequestParam(value = "cameraId", required = false) Long cameraId) {
-        log.info("scene服务调用:getCameraDetailByCameraId,参数:cameraId:{},",cameraId);
         CameraDetail detail = cameraDetailService.getByCameraId(cameraId);
-        log.info("scene服务调用:getCameraDetailByCameraId,返回:{}",detail);
         return detail;
     }
 
     @PostMapping("/updateCameraDetailByCameraIdAndSpace")
     public CameraDetail updateCameraDetailByCameraIdAndSpace(@RequestParam(value = "cameraId", required = false) Long cameraId,
                                                              @RequestParam(value = "space", required = false) Long space) {
-        log.info("scene服务调用:updateCameraDetailByCameraIdAndSpace,参数:cameraId:{},space:{},",cameraId,space);
         CameraDetail detail = cameraDetailService.updateCameraDetailByCameraIdAndSpace(cameraId,space);
-        log.info("scene服务调用:updateCameraDetailByCameraIdAndSpace,返回:{}",detail);
         return detail;
     }
 
     @PostMapping("/getCameraBySnCode")
     public Camera getCameraBySnCode(@RequestParam(value = "snCode", required = false) String snCode) {
-        log.info("scene服务调用:getCameraBySnCode,参数:snCode:{},",snCode);
         Camera detail = cameraService.getBySnCode(snCode);
-        log.info("scene服务调用:getCameraBySnCode,返回:{}",detail);
         return detail;
     }
 
     @PostMapping("/getByChildNameAndChildPassword")
     public Camera getByChildNameAndChildPassword(@RequestParam(value = "appUserName") String appUserName,
                                                   @RequestParam(value = "appPassword") String appPassword) {
-        log.info("scene服务调用:getCameraBySnCode,参数:appUserName:{},appPassword:{}" ,appUserName, appPassword);
         Camera camera = cameraService.getByChildNameAndChildPassword(appUserName, appPassword);
-        log.info("scene服务调用:findByChildNameAndChildPassword,返回:{}",camera);
         return camera;
     }
 
     @PostMapping("/findByChildNameAndChildPassword")
     public Camera findByChildNameAndChildPassword(@RequestParam(value = "appUserName") String appUserName,
                                                   @RequestParam(value = "appPassword") String appPassword) {
-        log.info("scene服务调用:findByChildNameAndChildPassword,参数:appUserName:{},appPassword:{}" ,appUserName, appPassword);
         Camera camera = cameraService.getByChildNameAndChildPassword(appUserName, appPassword);
-        log.info("scene服务调用:findByChildNameAndChildPassword,返回:{}",camera);
         return camera;
     }
 
     @PostMapping("/getCameraById")
     public Camera getCameraById(@RequestParam(value = "cameraId") Long cameraId) {
-        log.info("scene服务调用:getCameraById,参数:cameraId:{}" ,cameraId);
+        sceneUserSceneClient.getSceneNumByCameraId(1L);
         Camera camera = cameraService.getAvailableById(cameraId);
-        log.info("scene服务调用:getCameraById,返回:{}",camera);
         return camera;
     }
 
     @PostMapping("/getCameraLikeSnCode")
     List<Camera> getCameraLikeSnCode(@RequestParam(value = "searchKey")String searchKey){
-        log.info("scene服务调用:getCameraLikeSnCode,参数:searchKey:{}" ,searchKey);
         List<Camera> cameraList = cameraService.getCameraLikeSnCode(searchKey);
-        log.info("scene服务调用:getCameraLikeSnCode,返回:{}",cameraList);
         return cameraList;
     }
 
-    @PostMapping("/test")
-    public String test() {
-        log.info("scene服务调用:test");
-        String test = null;
-        test.equals("123");
-        log.info("scene服务调用:test");
-        return "success";
-    }
-
 }
 

+ 13 - 12
4dkankan-center-platform/src/main/java/com/fdkankan/platform/feign/UserFeign.java

@@ -1,5 +1,6 @@
 package com.fdkankan.platform.feign;
 
+import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.user.SSOUser;
 import com.fdkankan.platform.goods.entity.Company;
 import com.fdkankan.platform.goods.service.ICompanyService;
@@ -35,46 +36,46 @@ public class UserFeign {
 
     @PostMapping("/getUserByName")
     public User getUserByName(@RequestParam(value = "userName", required = false) String userName) {
-        log.info("modeling服务调用:getUserByName,参数:userName:{},",userName);
         User entity = userService.getUserByUserName(userName);
-        log.info("modeling服务调用:getUserByName,返回:{}",entity);
         return entity;
     }
     @PostMapping("/getUserIncrementByCameraId")
     public UserIncrement getUserIncrementByCameraId(@RequestParam(value = "cameraId", required = false) Long cameraId) {
-        log.info("modeling服务调用:getUserIncrementByCameraId,参数:cameraId:{},",cameraId);
         UserIncrement entity = userIncrementService.getByCameraId(cameraId);
-        log.info("modeling服务调用:getUserIncrementByCameraId,返回:{}",entity);
         return entity;
     }
     @PostMapping("/getSSOUserByUserId")
     public SSOUser getSSOUserByUserId(@RequestParam(value = "userId", required = false) Long userId) {
-        log.info("scene服务调用:getSSOUserByUserId,参数:userId:{},",userId);
         SSOUser ssoUser =  userService.getSSOUserByUserId(userId);
-        log.info("scene服务调用:getSSOUserByUserId,返回:{}",ssoUser);
         return ssoUser;
     }
     @PostMapping("/getCompanyById")
     public Company getCompanyById(@RequestParam(value = "companyId", required = false) Long companyId) {
-        log.info("scene服务调用: getCompanyById,参数:companyId:{},",companyId);
         Company entity = companyService.getById(companyId);
-        log.info("scene服务调用: getCompanyById,返回:{}",entity);
         return entity;
     }
 
     @PostMapping("/getUserByUserId")
     public User getUserByUserId(@RequestParam(value = "userId")  Long userId) {
-        log.info("feign调用: getUserByUserId,参数:userId:{},",userId);
         User user = userService.getUserByUserId(userId);
-        log.info("feign调用: getUserByUserId,返回:{},",user);
         return user;
     }
     @PostMapping("/getUserLikeUserName")
     List<User> getUserLikeUserName(@RequestParam(value = "searchKey") String searchKey){
-        log.info("feign调用: getUserLikeUserName,参数:searchKey:{},",searchKey);
         List<User> userList = userService.getUserLikeUserName(searchKey);
-        log.info("feign调用: getUserLikeUserName,返回:{},",userList);
         return userList;
     }
+
+    /**
+     * 更新用户已下载次数
+     * @param userId 用户id
+     * @param downLoadNum 下载次数
+     * @return
+     */
+    @PostMapping("/updateDownloadNum")
+    ResultData updateDownloadNum(@RequestParam(value = "userId") long userId,
+        @RequestParam(value = "downLoadNum") int downLoadNum){
+        return userService.updateDownloadNum(userId, downLoadNum);
+    }
 }
 

+ 1 - 2
4dkankan-center-platform/src/main/java/com/fdkankan/platform/goods/service/impl/CameraServiceImpl.java

@@ -28,8 +28,7 @@ import com.fdkankan.platform.user.vo.ResponseCamera;
 import com.fdkankan.platform.user.vo.ResponseCameraSpace;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.scene.api.feign.SceneUserSceneClient;
-import com.fdkankan.scene.api.vo.SceneCnt;
-import com.fdkankan.scene.api.vo.SceneProDTO;
+import com.fdkankan.scene.api.dto.SceneProDTO;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;

+ 1 - 1
4dkankan-center-platform/src/main/java/com/fdkankan/platform/order/service/PayOrderService.java

@@ -21,7 +21,7 @@ import com.fdkankan.pay.paypal.sdk.PaypalService;
 import com.fdkankan.pay.wx.WXPayDefaultConfig;
 import com.fdkankan.pay.wx.sdk.WXPay;
 import com.fdkankan.pay.wx.sdk.WXPayUtil;
-import com.fdkankan.platform.common.LogFactory;
+import com.fdkankan.common.factory.LogFactory;
 import com.paypal.api.payments.Links;
 import com.paypal.api.payments.Payment;
 import org.springframework.beans.factory.annotation.Autowired;

+ 4 - 0
4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/IUserService.java

@@ -2,6 +2,7 @@ package com.fdkankan.platform.user.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.user.SSOUser;
 import com.fdkankan.platform.goods.entity.CameraDetail;
 import com.fdkankan.platform.goods.entity.CameraDetailNumEntity;
@@ -15,6 +16,7 @@ import com.fdkankan.platform.user.vo.SSOUserVo;
 
 import java.util.HashMap;
 import java.util.List;
+import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * <p>
@@ -93,4 +95,6 @@ public interface IUserService extends IService<User> {
     List<User> getUserLikeUserName(String searchKey);
 
     List<ResponseCamera> findNewAll(Long userId, RequestCamera param) throws Exception;
+
+    ResultData updateDownloadNum(long userId, int downLoadNum);
 }

+ 1 - 1
4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/impl/ManagerServiceImpl.java

@@ -13,7 +13,7 @@ import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.*;
 import com.fdkankan.platform.common.ConstantExcel;
 import com.fdkankan.platform.common.ExcelUtil;
-import com.fdkankan.platform.common.LogFactory;
+import com.fdkankan.common.factory.LogFactory;
 import com.fdkankan.platform.goods.service.ICameraDetailService;
 import com.fdkankan.platform.goods.service.ICompanyService;
 import com.fdkankan.platform.order.constant.OrderEnum;

+ 0 - 7
4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/impl/UserSceneServiceImpl.java

@@ -3,25 +3,18 @@ package com.fdkankan.platform.user.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.response.ResultData;
 import com.fdkankan.platform.common.DownloadStatusEnum;
-import com.fdkankan.platform.goods.entity.Camera;
 import com.fdkankan.platform.goods.service.ICameraService;
 import com.fdkankan.platform.user.request.RequestUser;
 import com.fdkankan.platform.user.service.IUserSceneService;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.api.feign.SceneUserSceneClient;
-import com.fdkankan.scene.api.vo.SceneCnt;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.ObjectUtils;
 
 @Service
 public class UserSceneServiceImpl implements IUserSceneService {

+ 9 - 0
4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/impl/UserServiceImpl.java

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.common.constant.*;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.user.SSOLoginHelper;
 import com.fdkankan.common.user.SSOUser;
 import com.fdkankan.common.util.Base64Converter;
@@ -569,6 +570,14 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
 
         return result;
     }
+
+    @Override
+    public ResultData updateDownloadNum(long userId, int downLoadNum) {
+        this.update(new LambdaUpdateWrapper<User>()
+            .setSql("download_num = download_num + " + downLoadNum)
+            .eq(User::getId, userId));
+        return ResultData.ok();
+    }
 }
 
 

+ 3 - 3
4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/sso/AppService.java

@@ -72,7 +72,7 @@ public class AppService {
         if (cameraEntity == null){
             throw new BusinessException(ErrorCode.PASSWORD_ERROR);
         }
-        String token = ssoLoginHelper.login(LoginType.APP.name(), cameraEntity.getChildName(), RedisKey.CAMERA_EXPIRE_7_TIME);
+        String token = ssoLoginHelper.login(LoginType.APP.code(), cameraEntity.getChildName(), RedisKey.CAMERA_EXPIRE_7_TIME);
         HashMap<String,String> obj = new HashMap<>();
         obj.put("token", token);
         return obj;
@@ -97,12 +97,12 @@ public class AppService {
         if(ssoUser == null){
             throw new BusinessException(ErrorCode.USER_NOT_EXIST);
         }
-        ssoLoginHelper.logout(LoginType.APP.name(),user.getPhoneNum());
+        ssoLoginHelper.logout(LoginType.APP.code(),user.getPhoneNum());
         return this.setRedisToken(ssoUser,dbUser,user.getCameraType());
     }
 
     private SSOUserVo setRedisToken(SSOUser ssoUser,User userEntity,Integer CameraType){
-        String token = ssoLoginHelper.login(LoginType.APP.name(), ssoUser.getUserName());
+        String token = ssoLoginHelper.login(LoginType.APP.code(), ssoUser.getUserName());
         Integer cameraType = CameraType == null ? 4 : CameraType;
         return userService.getUserInfoByUser(cameraType, userEntity, token);
     }

+ 1 - 1
4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/sso/SsoManagerService.java

@@ -60,7 +60,7 @@ public class SsoManagerService {
         if (!encryptPwd.equals(managerEntity.getPassword())){
             throw new BusinessException(ErrorCode.PASSWORD_ERROR);
         }
-        String token = ssoLoginHelper.login(LoginType.MANAGER.name(), managerEntity.getUserName());
+        String token = ssoLoginHelper.login(LoginType.MANAGER.code(), managerEntity.getUserName());
         JSONObject obj = new JSONObject();
         obj.put("token", token);
         return obj;

+ 39 - 11
4dkankan-center-platform/src/main/resources/logback-spring.xml

@@ -61,6 +61,13 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_DEBUG_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<discardingThreshold>0</discardingThreshold>
+		<queueSize>2048</queueSize>
+		<includeCallerData>true</includeCallerData>
+		<appender-ref ref="DEBUG_FILE"/>
+	</appender>
+
 	<!-- 时间滚动输出 level为 INFO 日志 -->
 	<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
@@ -89,6 +96,13 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_INFO_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<discardingThreshold>0</discardingThreshold>
+		<queueSize>2048</queueSize>
+		<includeCallerData>true</includeCallerData>
+		<appender-ref ref="INFO_FILE"/>
+	</appender>
+
 	<!-- 时间滚动输出 level为 WARN 日志 -->
 	<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
@@ -116,6 +130,13 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_WARN_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<discardingThreshold>0</discardingThreshold>
+		<queueSize>2048</queueSize>
+		<includeCallerData>true</includeCallerData>
+		<appender-ref ref="WARN_FILE"/>
+	</appender>
+
 
 	<!-- 时间滚动输出 level为 ERROR 日志 -->
 	<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
@@ -144,6 +165,13 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_ERROR_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<discardingThreshold>0</discardingThreshold>
+		<queueSize>2048</queueSize>
+		<includeCallerData>true</includeCallerData>
+		<appender-ref ref="ERROR_FILE"/>
+	</appender>
+
 	<appender name="PROGRAM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
 		<file>${log.path}/program/log_program.log</file>
@@ -169,8 +197,8 @@
 		</filter>
 	</appender>
 	<logger name="programLog" level="INFO" additivity="true">
-        <appender-ref ref="PROGRAM_FILE"/>
-    </logger>
+			<appender-ref ref="PROGRAM_FILE"/>
+	</logger>
 
 	<appender name="VISIT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
@@ -196,9 +224,9 @@
 			<onMismatch>DENY</onMismatch>
 		</filter>
 	</appender>
-	<logger name="visitLog" level="INFO" additivity="true">
-        <appender-ref ref="VISIT_FILE"/>
-    </logger>
+	<logger name="visitLog" level="INFO" additivity="false">
+			<appender-ref ref="VISIT_FILE"/>
+	</logger>
 
 	<appender name="FEIGN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
@@ -225,8 +253,8 @@
 		</filter>
 	</appender>
 	<logger name="feignVisitLog" level="INFO" additivity="true">
-        <appender-ref ref="FEIGN_FILE"/>
-    </logger>
+			<appender-ref ref="FEIGN_FILE"/>
+	</logger>
 
 	<!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender>。<logger>仅有一个name属性, 一个可选的level和一个可选的addtivity属性。 name:用来指定受此logger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE,
 		DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。 addtivity:是否向上级logger传递打印信息。默认是true。 -->
@@ -237,10 +265,10 @@
 
 	<root level="info">
 		<appender-ref ref="CONSOLE" />
-		<appender-ref ref="DEBUG_FILE" />
-		<appender-ref ref="INFO_FILE" />
-		<appender-ref ref="WARN_FILE" />
-		<appender-ref ref="ERROR_FILE" />
+		<appender-ref ref="ASYNC_DEBUG_FILE" />
+		<appender-ref ref="ASYNC_INFO_FILE" />
+		<appender-ref ref="ASYNC_WARN_FILE" />
+		<appender-ref ref="ASYNC_ERROR_FILE" />
 	</root>
 
 	<!--生产环境:输出到文件 -->

+ 11 - 0
4dkankan-center-scene-download/pom.xml

@@ -46,6 +46,17 @@
       <version>1.7.2</version>
     </dependency>
 
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-center-platform-api</artifactId>
+      <version>2.0.0-SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-center-scene-api</artifactId>
+      <version>2.0.0-SNAPSHOT</version>
+    </dependency>
 
   </dependencies>
 

+ 3 - 1
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/SceneDownloadApplication.java

@@ -1,8 +1,9 @@
-package com.fdkankan.scene.download;
+package com.fdkankan.download;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
@@ -17,6 +18,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
  **/
 @SpringBootApplication
 @EnableScheduling
+@EnableFeignClients("com.fdkankan.*.api.feign")
 @ComponentScan(basePackages = {"com.fdkankan.*"})
 @RefreshScope
 @EnableAsync

+ 36 - 0
4dkankan-center-scene-download/src/main/java/com/fdkankan/download/bean/CurrentDownloadNumUtil.java

@@ -0,0 +1,36 @@
+package com.fdkankan.download.bean;
+
+import cn.hutool.core.collection.ConcurrentHashSet;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/29
+ **/
+public class CurrentDownloadNumUtil {
+
+    /**
+     * 正在下载的场景码
+     */
+    private static ConcurrentHashSet<String> downLoadingNumSet = new ConcurrentHashSet<>();
+
+    public static void addSceneNum(String num){
+        downLoadingNumSet.add(num);
+    }
+
+    public static boolean containSceneNum(String num){
+        return downLoadingNumSet.contains(num);
+    }
+
+    public static void removeSceneNum(String num){
+        downLoadingNumSet.remove(num);
+    }
+
+    public static int cntDownloadingLocal(){
+        return downLoadingNumSet.size();
+    }
+
+}

+ 1 - 1
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/bean/ImageType.java

@@ -1,4 +1,4 @@
-package com.fdkankan.scene.download.bean;
+package com.fdkankan.download.bean;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;

+ 1 - 1
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/bean/ImageTypeDetail.java

@@ -1,4 +1,4 @@
-package com.fdkankan.scene.download.bean;
+package com.fdkankan.download.bean;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;

+ 1 - 4
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/config/TaskPoolConfig.java

@@ -1,12 +1,9 @@
-package com.fdkankan.scene.download.config;
+package com.fdkankan.download.config;
 
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorCompletionService;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.client.ClientHttpRequestFactory;
 import org.springframework.http.client.SimpleClientHttpRequestFactory;
-import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.web.client.RestTemplate;
 

+ 3 - 11
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/config/TestController.java

@@ -1,17 +1,10 @@
-package com.fdkankan.scene.download.config;
+package com.fdkankan.download.config;
 
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
-import com.fdkankan.common.constant.ServerCode;
-import com.fdkankan.common.response.ResultData;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
 import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.scene.download.bean.DownLoadTaskBean;
-import com.fdkankan.scene.download.service.impl.SceneDownloadHandlerServiceImpl;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import com.fdkankan.common.bean.DownLoadTaskBean;
+import com.fdkankan.download.service.impl.SceneDownloadHandlerServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -70,7 +63,6 @@ public class TestController {
 
         redisUtil.lLeftPush("downloads:task:v4", JSON
             .toJSONString(DownLoadTaskBean.builder().num("eur-3wdeOQaa0").type("local").build()));
-        downloadHandlerService.download4Ali();
 
 //        List<String> strings = uploadToOssUtil.listKeysFromAws("data/datawJ6cAq3tc");
 

+ 3 - 3
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/schedule/ScheduleJob.java

@@ -1,6 +1,6 @@
-package com.fdkankan.scene.download.schedule;
+package com.fdkankan.download.schedule;
 
-import com.fdkankan.scene.download.service.ISceneDownLoadService;
+import com.fdkankan.download.service.ISceneDownLoadService;
 import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,7 +19,7 @@ public class ScheduleJob {
     @Scheduled(cron = "0/5 * * * * ? ")
     public void job4SceneDownload() throws Exception {
         log.info("场景下载定时任务执行。。。。");
-//        sceneDownLoadService.process();
+        sceneDownLoadService.process();
     }
 
 }

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

@@ -1,4 +1,4 @@
-package com.fdkankan.scene.download.service;
+package com.fdkankan.download.service;
 
 /**
  * <p>

+ 65 - 0
4dkankan-center-scene-download/src/main/java/com/fdkankan/download/service/impl/CheckProgressRunnerImpl.java

@@ -0,0 +1,65 @@
+package com.fdkankan.download.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.constant.RedisLockKey;
+import com.fdkankan.redis.util.RedisLockUtil;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.common.bean.DownLoadTaskBean;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>
+ * 应用启动校验是否有下载任务正在进行,如有过就重新入队头,从新下载
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/22
+ **/
+@Component
+public class CheckProgressRunnerImpl implements CommandLineRunner {
+
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    RedisTemplate redisTemplate;
+    @Autowired
+    RedisLockUtil redisLockUtil;
+
+    @Override
+    public void run(String... args) throws Exception {
+
+        //这里考虑到如果是集群部署,可能多个节点启动时,只需要一个节点进来就行了,所以加一个分布式锁
+        String lockKey = String.format(RedisLockKey.LOCK_SCENE_DOWNLOAD_ING);
+        boolean lock = redisLockUtil.lock(lockKey, RedisKey.EXPIRE_TIME_1_MINUTE);
+        if(!lock){
+            return;
+        }
+        try {
+            //查询还没下载完毕的场景
+            List<String> downLoadList = redisUtil.lGet(RedisKey.SCENE_DOWNLOAD_ING, 0, -1);
+            if(CollUtil.isEmpty(downLoadList)){
+                return;
+            }
+            //删除还没执行完毕的场景缓存
+            redisUtil.del(RedisKey.SCENE_DOWNLOAD_ING);
+
+            List<String> taskList = downLoadList.stream().map(num -> {
+                return JSON.toJSONString(DownLoadTaskBean.builder().num(num).type("local").build());
+            }).collect(Collectors.toList());
+
+            // TODO: 2022/2/22 这里上线是要改成RedisKey.DOWNLOAD_TASK
+            //从新入队
+            redisUtil.lLeftPushAll(RedisKey.SCENE_DOWNLOADS_TASK_V4, taskList);
+
+        }finally {
+            redisLockUtil.unlockLua(lockKey);
+        }
+    }
+}

+ 83 - 0
4dkankan-center-scene-download/src/main/java/com/fdkankan/download/service/impl/SceneDownLoadServiceImpl.java

@@ -0,0 +1,83 @@
+package com.fdkankan.download.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.fdkankan.common.bean.DownLoadTaskBean;
+import com.fdkankan.download.bean.CurrentDownloadNumUtil;
+import com.fdkankan.download.service.ISceneDownLoadService;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import java.util.Objects;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/22
+ **/
+@Service
+public class SceneDownLoadServiceImpl implements ISceneDownLoadService {
+
+    @Value("${scene.download.threadMax:3}")
+    private Integer downloadThreadMax;
+
+    @Autowired
+    RedisUtil redisUtil;
+
+//    @Autowired
+//    ExecutorCompletionService completionService;
+
+    @Autowired
+    SceneDownloadHandlerServiceImpl handlerService;
+
+
+    @Override
+    public void process() throws Exception {
+
+        //统计本节点正在下载任务数量
+        int downloadIngCnt = CurrentDownloadNumUtil.cntDownloadingLocal();
+        //如果正在下载的场景大于最大线程数,不往下执行
+        if(downloadIngCnt >= downloadThreadMax){
+            return;
+        }
+
+        for(int i = 0; i < downloadThreadMax - downloadIngCnt; i++){
+            DownLoadTaskBean downLoadTaskBean = this.getTaskSceneNum();
+            //获取任务队列中队头场景码,如果是空,标识没有场景要下载,则退出程序
+            if(Objects.isNull(downLoadTaskBean)){
+                continue;
+            }
+            handlerService.download(downLoadTaskBean);
+        }
+
+    }
+
+    private DownLoadTaskBean getTaskSceneNum() throws Exception{
+        //redis待下载任务出队
+        String downloadTask = redisUtil.lLeftPop(RedisKey.SCENE_DOWNLOADS_TASK_V4);
+        if(StrUtil.isEmpty(downloadTask)){
+            return null;
+        }
+        DownLoadTaskBean downLoadTaskBean = JSONUtil.toBean(downloadTask, DownLoadTaskBean.class);
+        if(downLoadTaskBean == null || StrUtil.isEmpty(downLoadTaskBean.getNum()) || !"local".equals(downLoadTaskBean.getType())){
+            throw new Exception("下载任务数据不正确,downloadTask:" +  downloadTask);
+        }
+        //如果场景正在下载中,就直接丢弃
+        String num = downLoadTaskBean.getNum();
+        if(CurrentDownloadNumUtil.containSceneNum(num)){
+            return null;
+        }
+        //本地缓存入队
+        CurrentDownloadNumUtil.addSceneNum(num);
+        //正在下载任务入队
+        redisUtil.lLeftPush(RedisKey.SCENE_DOWNLOAD_ING, num);
+        return downLoadTaskBean;
+    }
+
+
+}

+ 114 - 94
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/service/impl/SceneDownloadHandlerServiceImpl.java

@@ -1,50 +1,46 @@
-package com.fdkankan.scene.download.service.impl;
+package com.fdkankan.download.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.ConcurrentHashSet;
 import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSON;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
-import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.DownloadStatus;
+import com.fdkankan.common.constant.SceneDownloadProgressStatus;
 import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.constant.UploadFilePath;
 import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.download.bean.CurrentDownloadNumUtil;
 import com.fdkankan.fyun.constant.StorageType;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
+import com.fdkankan.platform.api.feign.PlatformUserClient;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.scene.download.bean.DownLoadProgressBean;
-import com.fdkankan.scene.download.bean.DownLoadTaskBean;
-import com.fdkankan.scene.download.bean.ImageType;
-import com.fdkankan.scene.download.bean.ImageTypeDetail;
+import com.fdkankan.common.bean.DownLoadProgressBean;
+import com.fdkankan.common.bean.DownLoadTaskBean;
+import com.fdkankan.scene.api.dto.SceneInfoDTO;
+import com.fdkankan.scene.api.feign.SceneUserSceneClient;
+import com.fdkankan.download.bean.ImageType;
+import com.fdkankan.download.bean.ImageTypeDetail;
 import com.google.common.collect.Lists;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.math.BigDecimal;
-import java.net.HttpURLConnection;
-import java.net.URL;
 import java.net.URLEncoder;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Calendar;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import lombok.extern.slf4j.Slf4j;
 import lombok.var;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.tools.zip.ZipFile;
 import org.apache.tools.zip.ZipOutputStream;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -64,12 +60,24 @@ import org.springframework.web.client.RestTemplate;
 @Service
 public class SceneDownloadHandlerServiceImpl {
 
+    @Autowired
+    private PlatformUserClient platformUserClient;
+    @Autowired
+    private SceneUserSceneClient sceneUserSceneClient;
+
     private static final String wwwroot = "wwwroot/";
+//    private static final String[] prefixArr = new String[]{
+//        "data/data%s/",
+//        "voice/voice%s/",
+//        "video/video%s/",
+//        "images/images%s/"
+//    };
+
     private static final String[] prefixArr = new String[]{
-        "data/data%s/",
-        "voice/voice%s/",
-        "video/video%s/",
-        "images/images%s/"
+        UploadFilePath.DATA_VIEW_PATH,
+        UploadFilePath.VOICE_VIEW_PATH,
+        UploadFilePath.VIDEOS_VIEW_PATH,
+        UploadFilePath.IMG_VIEW_PATH
     };
 
     private static final List<ImageType> imageTypes = Lists.newArrayList();
@@ -99,27 +107,42 @@ public class SceneDownloadHandlerServiceImpl {
     @Autowired
     UploadToOssUtil uploadToOssUtil;
 
+    @Async("sceneDownLoadExecutror")
+    public void download(DownLoadTaskBean downLoadTaskBean){
+        //场景码
+        String num = null;
 
+        try {
+            num = downLoadTaskBean.getNum();
 
-    @Async("sceneDownLoadExecutror")
-    public void download(){
-
-            StorageType storageType = StorageType.get(uploadType);
-            switch (storageType){
-                case OSS:
-                    this.download4Ali();
-                    break;
-                case AWS:
-                    this.download4Aws();
-                    break;
-            }
+            log.info("场景下载开始 - num[{}] - threadName[{}]", num, Thread.currentThread().getName());
+
+            long startTime = Calendar.getInstance().getTimeInMillis();
+
+            //执行场景下载逻辑
+            this.downloadHandler(downLoadTaskBean);
+
+            //耗时
+            long consumeTime = Calendar.getInstance().getTimeInMillis() - startTime;
 
+            log.info("场景下载结束 - num[{}] - threadName[{}] - consumeTime[{}]", num, Thread.currentThread().getName(), consumeTime);
+
+        }catch (Exception e){
+            log.error(ExceptionUtil.stacktraceToString(e));
+        }finally {
+            if(StrUtil.isNotEmpty(num)){
+                //本地正在下载任务出队
+                CurrentDownloadNumUtil.removeSceneNum(num);
+                //删除正在下载任务
+                redisUtil.lRemove(RedisKey.SCENE_DOWNLOAD_ING, 1, num);
+            }
+        }
     }
 
-    public void download4Ali(){
+    public void downloadHandler(DownLoadTaskBean downLoadTaskBean) throws Exception{
 
-        //场景码
-        String num = null;
+        String num = downLoadTaskBean.getNum();
+        Long userId = downLoadTaskBean.getUserId();
 
         //zip包路径
         String zipPath = null;
@@ -131,12 +154,6 @@ public class SceneDownloadHandlerServiceImpl {
         try {
             Set<String> cacheKeys = new HashSet<>();
 
-            //获取任务队列中队头场景码,如果是空,标识没有场景要下载,则退出程序
-            num = this.getTaskSceneNum();
-            if(StrUtil.isEmpty(num)){
-                return;
-            }
-
             Map<String, List<String>> allFiles = this.getAllFiles(num, v3localPath);
             List<String> ossFilePaths = allFiles.get("ossFilePaths");
             List<String> v3localFilePaths = allFiles.get("v3localFilePaths");
@@ -152,14 +169,20 @@ public class SceneDownloadHandlerServiceImpl {
 
             JSONObject getInfoJson = this.zipGetInfoJson(out, num);
             String resolution = "2k";
-            if(getInfoJson.getInt("sceneSource") == 3 || getInfoJson.getInt("sceneSource") == 4){
+            if(getInfoJson.getInt("sceneSource") != null &&
+                (getInfoJson.getInt("sceneSource") == 3 || getInfoJson.getInt("sceneSource") == 4)){
                 resolution = "4k";
             }
             int imagesVersion = -1;
-            if(getInfoJson.getInt("imagesVersion") != null){
-                imagesVersion = getInfoJson.getInt("imagesVersion");
+            // TODO: 2022/3/29  V4版本目前没有imagesVersion字段,暂时用version字段替代
+//            if(getInfoJson.getInt("imagesVersion") != null){
+//                imagesVersion = getInfoJson.getInt("imagesVersion");
+//            }
+            if(getInfoJson.getInt("version") != null){
+                imagesVersion = getInfoJson.getInt("version");
             }
 
+
             //固定文件写入
             count = this.zipLocalFiles(out, v3localFilePaths, v3localPath, num, count, total);
 
@@ -176,18 +199,25 @@ public class SceneDownloadHandlerServiceImpl {
             uploadToOssUtil.upload(zipPath, uploadPath);
 
             //更新进度100
-            this.updateProgress(new BigDecimal("100"), num, 1002, this.publicUrl + uploadPath);
+            String url = this.publicUrl + uploadPath;
+            this.updateProgress(null, num, SceneDownloadProgressStatus.DOWNLOAD_SUCCESS.code(), url);
+
+            //更新用户场景已下载次数
+            platformUserClient.updateDownloadNum(userId, 1);
+
+            //更新下载log状态为成功
+            sceneUserSceneClient.updateSceneDownloadLog(num, DownloadStatus.SUCCESS.code(), url, null);
 
         }catch (Exception e){
-            log.error(ExceptionUtil.stacktraceToString(e));
             //更新进度为下载失败
-            this.updateProgress( null, num, 1003, null);
+            this.updateProgress( null, num, SceneDownloadProgressStatus.DOWNLOAD_FAILED.code(), null);
+            //更新下载log状态为成功
+            sceneUserSceneClient.updateSceneDownloadLog(num, DownloadStatus.FAILD.code(), null, ExceptionUtil.stacktraceToString(e));
+            throw e;
         }finally {
-            if(StrUtil.isNotEmpty(num)){
-                //删除正在下载任务
-                redisUtil.lRemove(RedisKey.SCENE_DOWNLOAD_ING, 1, num);
+            if(StrUtil.isNotBlank(zipPath)){
                 //删除本地zip包
-//                FileUtils.deleteFile(zipPath);
+                FileUtils.deleteFile(zipPath);
             }
         }
     }
@@ -197,7 +227,8 @@ public class SceneDownloadHandlerServiceImpl {
         for (String filePath : ossFilePaths) {
             if(filePath.contains(imageNumPath + "/panorama/panorama_edit/")){
                 //如果是编辑目录,只需要更新进度,不需要放进压缩包
-                this.updateProgress(new BigDecimal(++count).divide(new BigDecimal(total), 6, BigDecimal.ROUND_HALF_UP), num, 1000, null);
+                this.updateProgress(new BigDecimal(++count).divide(new BigDecimal(total), 6, BigDecimal.ROUND_HALF_UP), 
+                    num, SceneDownloadProgressStatus.DOWNLOADING.code(), null);
                 continue;
             }else if((filePath.contains(imageNumPath + "/panorama/") && filePath.contains("tiles/" + resolution)) || filePath.contains(imageNumPath + "/tiles/" + resolution + "/")) {
                 this.processImage(filePath, out, resolution, imagesVersion, cacheKeys);
@@ -206,7 +237,8 @@ public class SceneDownloadHandlerServiceImpl {
             }
 
             //更新进度
-            this.updateProgress(new BigDecimal(++count).divide(new BigDecimal(total), 6, BigDecimal.ROUND_HALF_UP),  num, 1000, null);
+            this.updateProgress(new BigDecimal(++count).divide(new BigDecimal(total), 6, BigDecimal.ROUND_HALF_UP),  
+                num, SceneDownloadProgressStatus.DOWNLOAD_COMPRESSING.code(), null);
         }
         return count;
     }
@@ -221,7 +253,7 @@ public class SceneDownloadHandlerServiceImpl {
             //更新进度
             this.updateProgress(
                 new BigDecimal(++count).divide(new BigDecimal(total), 6, BigDecimal.ROUND_HALF_UP),
-                num, 1000, null);
+                num, SceneDownloadProgressStatus.DOWNLOAD_COMPRESSING.code(), null);
         }
         //写入code.txt
         this.zipBytes(out, "code.txt", num.getBytes());
@@ -233,7 +265,8 @@ public class SceneDownloadHandlerServiceImpl {
         this.zipBytes(out, exeName, batContent.getBytes());
 
         //更新进度为90%
-        this.updateProgress(new BigDecimal("90"), num, 1001, null);
+        this.updateProgress(new BigDecimal("0.9").divide(new BigDecimal("0.8"), 6, BigDecimal.ROUND_HALF_UP), num,
+            SceneDownloadProgressStatus.DOWNLOAD_COMPRESSING.code(), null);
     }
 
     private Map<String, List<String>> getAllFiles(String num, String v3localPath) throws Exception{
@@ -268,38 +301,28 @@ public class SceneDownloadHandlerServiceImpl {
     }
 
     private JSONObject zipGetInfoJson(ZipOutputStream out, String num) throws Exception{
-        String url = serverUrl + "api/scene/getInfo?num=" + num;
-        String getInfoStr = restTemplate.getForObject(url, String.class);
-        ResultData resultData = JSONUtil.toBean(getInfoStr, ResultData.class);
-        if(resultData == null || ServerCode.SUCCESS.code() != resultData.getCode()){
-            throw new Exception("getInfo请求失败,url:" + url);
+
+        ResultData<SceneInfoDTO> sceneViewInfo = sceneUserSceneClient.getSceneViewInfo(num);
+        if(!sceneViewInfo.getSuccess()){
+            throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
         }
-        JSONObject getInfoJson = JSONUtil.parseObj(resultData.getData());
+        SceneInfoDTO data = sceneViewInfo.getData();
+        JSONObject getInfoJson = null;
+        if(Objects.isNull(data)){
+            getInfoJson = new JSONObject();
+        }else {
+            getInfoJson = JSONUtil.parseObj(data);
+        }
+
         getInfoJson.set("sceneScheme", 3);
         getInfoJson.set("needKey", 0);
         getInfoJson.set("sceneKey","");
-        //        写入getInfo.json
+        //写入getInfo.json
         String getInfoJsonPath = "wwwroot/data/data"+num + "/getInfo.json";
         this.zipBytes(out, getInfoJsonPath, getInfoJson.toString().getBytes());
         return getInfoJson;
     }
 
-    private String getTaskSceneNum() throws Exception{
-        //redis待下载任务出队
-        String downloadTask = redisUtil.lLeftPop("downloads:task:v4");
-        if(StrUtil.isEmpty(downloadTask)){
-            return null;
-        }
-        DownLoadTaskBean downLoadTaskBean = JSONUtil.toBean(downloadTask, DownLoadTaskBean.class);
-        if(downLoadTaskBean == null || StrUtil.isEmpty(downLoadTaskBean.getNum()) || !"local".equals(downLoadTaskBean.getType())){
-            throw new Exception("下载任务数据不正确,downloadTask:" +  downloadTask);
-        }
-        String num = downLoadTaskBean.getNum();
-        //正在下载任务入队
-        redisUtil.lLeftPush(RedisKey.SCENE_DOWNLOAD_ING, num);
-        return num;
-    }
-
     private void processImage(String key, ZipOutputStream out, String resolution, int imagesVersion, Set<String> imgKeys) throws Exception{
 
         String fileName = key.substring(key.lastIndexOf("/")+1, key.indexOf("."));
@@ -391,22 +414,27 @@ public class SceneDownloadHandlerServiceImpl {
 
     public void updateProgress(BigDecimal precent, String num, Integer status, String url){
 
-        if(precent == null){
-            precent = new BigDecimal(0);
-        }
-        if(status == null){
-            precent = precent.multiply(new BigDecimal("0.8")).multiply(new BigDecimal("100"));
+        SceneDownloadProgressStatus progressStatus = SceneDownloadProgressStatus.get(status);
+        switch (progressStatus){
+            case DOWNLOAD_SUCCESS:
+                precent = new BigDecimal("100");
+                break;
+            case DOWNLOAD_FAILED:
+                precent = new BigDecimal("0");
+                break;
+            default:
+                precent = precent.multiply(new BigDecimal("0.8")).multiply(new BigDecimal("100"));
         }
 
         DownLoadProgressBean progress = null;
-        String key = String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS, num);
+        String key = String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4, num);
         String progressStr = redisUtil.get(key);
         if(StrUtil.isEmpty(progressStr)){
             progress =  DownLoadProgressBean.builder().percent(precent.intValue()).status(status).url(url).build();
         }else{
             progress = JSONUtil.toBean(progressStr, DownLoadProgressBean.class);
             //如果下载失败,进度不变
-            if(status == 1003 && progress.getPercent() != null){
+            if(status == SceneDownloadProgressStatus.DOWNLOAD_FAILED.code() && progress.getPercent() != null){
                 precent = new BigDecimal(progress.getPercent());
             }
             progress.setPercent(precent.intValue());
@@ -432,12 +460,4 @@ public class SceneDownloadHandlerServiceImpl {
     }
 
 
-    public void download4Aws(){
-
-
-    }
-
-
-
-
 }

+ 0 - 51
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/service/impl/CheckProgressRunnerImpl.java

@@ -1,51 +0,0 @@
-package com.fdkankan.scene.download.service.impl;
-
-import cn.hutool.core.collection.CollUtil;
-import com.alibaba.fastjson.JSON;
-import com.fdkankan.redis.constant.RedisKey;
-import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.scene.download.bean.DownLoadTaskBean;
-import java.util.List;
-import java.util.stream.Collectors;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.stereotype.Component;
-
-/**
- * <p>
- * 应用启动校验是否有下载任务正在进行,如有过就重新入队头,从新下载
- * </p>
- *
- * @author dengsixing
- * @since 2022/2/22
- **/
-@Component
-public class CheckProgressRunnerImpl implements CommandLineRunner {
-
-    @Autowired
-    RedisUtil redisUtil;
-    @Autowired
-    RedisTemplate redisTemplate;
-
-    @Override
-    public void run(String... args) throws Exception {
-
-        //查询还没下载完毕的场景
-        List<String> downLoadList = redisUtil.lGet(RedisKey.SCENE_DOWNLOAD_ING, 0, -1);
-        if(CollUtil.isEmpty(downLoadList)){
-            return;
-        }
-        List<String> taskList = downLoadList.stream().map(num -> {
-            return JSON.toJSONString(DownLoadTaskBean.builder().num(num).type("local").build());
-        }).collect(Collectors.toList());
-
-        //删除还没执行完毕的场景缓存
-        redisUtil.del(RedisKey.SCENE_DOWNLOAD_ING);
-
-        // TODO: 2022/2/22 这里上线是要改成RedisKey.DOWNLOAD_TASK
-        //从新入队
-        redisUtil.lLeftPushAll("downloads:task:v4", taskList);
-
-    }
-}

+ 0 - 53
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/service/impl/SceneDownLoadServiceImpl.java

@@ -1,53 +0,0 @@
-package com.fdkankan.scene.download.service.impl;
-
-import com.fdkankan.scene.download.service.ISceneDownLoadService;
-import com.fdkankan.redis.constant.RedisKey;
-import com.fdkankan.redis.util.RedisUtil;
-import java.util.concurrent.ExecutorCompletionService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * TODO
- * </p>
- *
- * @author dengsixing
- * @since 2022/2/22
- **/
-@Service
-public class SceneDownLoadServiceImpl implements ISceneDownLoadService {
-
-    @Value("${scene.download.threadMax:3}")
-    private Integer downloadThreadMax;
-
-    @Autowired
-    RedisUtil redisUtil;
-
-//    @Autowired
-//    ExecutorCompletionService completionService;
-
-    @Autowired
-    SceneDownloadHandlerServiceImpl handlerService;
-
-
-    @Override
-    public void process() throws Exception {
-
-        long downloadIngCnt = redisUtil.lGetSize(RedisKey.SCENE_DOWNLOAD_ING);
-        //如果正在下载的场景大于最大线程数,不往下执行
-        if(downloadIngCnt >= downloadThreadMax){
-            return;
-        }
-
-        for(int i = 0; i < downloadThreadMax - downloadIngCnt; i++){
-            handlerService.download();
-        }
-
-    }
-
-
-
-}

+ 7 - 7
4dkankan-center-scene-download/src/main/resources/bootstrap.yml

@@ -25,7 +25,7 @@ spring:
             group: DEFAULT_GROUP
             refresh: true
 
-          - data-id: common-upload-config2.yaml
+          - data-id: common-upload-config.yaml
             group: DEFAULT_GROUP
             refresh: true
       discovery:
@@ -34,12 +34,12 @@ spring:
 
 download:
   config:
-#    server-url: https://test.4dkankan.com/
-#    public-url: https://4dkk.4dage.com/
-#    resource-url: https://4dkankan.oss-cn-shenzhen.aliyuncs.com/
-    server-url: https://eur.4dkankan.com/
-    public-url: https://eurs3.4dkankan.com/
-    resource-url: https://eurs3.4dkankan.com/
+    server-url: https://test.4dkankan.com/
+    public-url: https://4dkk.4dage.com/
+    resource-url: https://4dkankan.oss-cn-shenzhen.aliyuncs.com/
+#    server-url: https://eur.4dkankan.com/
+#    public-url: https://eurs3.4dkankan.com/
+#    resource-url: https://eurs3.4dkankan.com/
     exe-name: start-browser.bat
     exe-content: | # | 表示不转义特殊字符
       taskkill /f /t /im http.exe

+ 12 - 0
4dkankan-center-scene/pom.xml

@@ -91,6 +91,18 @@
             <version>2.0.0-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.yomahub</groupId>
+            <artifactId>tlog-web-spring-boot-starter</artifactId>
+            <version>1.3.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yomahub</groupId>
+            <artifactId>tlog-feign-spring-boot-starter</artifactId>
+            <version>1.3.6</version>
+        </dependency>
+
 
     </dependencies>
 

+ 0 - 2
4dkankan-center-scene/src/main/java/com/fdkankan/scene/config/Test.java

@@ -1,7 +1,5 @@
 package com.fdkankan.scene.config;
 
-import com.fdkankan.platform.api.vo.User;
-
 /**
  * <p>
  *  这是一个测试类

+ 0 - 7
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/SceneCooperationController.java

@@ -11,20 +11,13 @@ import com.fdkankan.common.user.SSOLoginHelper;
 import com.fdkankan.common.user.SSOUser;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.common.util.PageInfoUtils;
-import com.fdkankan.platform.api.feign.PlatformGoodsClient;
-import com.fdkankan.platform.api.vo.Camera;
-import com.fdkankan.scene.entity.Folder;
 import com.fdkankan.scene.entity.SceneCooperation;
-import com.fdkankan.scene.entity.ScenePro;
 import com.fdkankan.scene.service.IFolderService;
 import com.fdkankan.scene.service.ISceneCooperationService;
 import com.fdkankan.scene.vo.SceneCooperationParamVO;
 import com.fdkankan.scene.vo.SceneParamVO;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;

+ 5 - 29
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/TestController.java

@@ -1,54 +1,32 @@
 package com.fdkankan.scene.controller;
 
-import cn.hutool.core.collection.ConcurrentHashSet;
-import com.alibaba.csp.sentinel.annotation.SentinelResource;
 import com.alibaba.druid.pool.DruidDataSource;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.fdkankan.common.constant.ConstantFilePath;
-import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.response.ResultData;
-import com.fdkankan.common.util.CreateObjUtil;
-import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.common.util.MatrixToImageWriterUtil;
-import com.fdkankan.common.util.SpringUtil;
-import com.fdkankan.common.util.StrExtUtil;
-import com.fdkankan.mq.message.BuildSceneMqMessage;
 import com.fdkankan.mq.util.RocketMQProducer;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.Camera;
-import com.fdkankan.platform.api.vo.Company;
-import com.fdkankan.platform.api.vo.User;
-import com.fdkankan.redis.constant.RedisKey;
-import com.fdkankan.redis.constant.RedisLockKey;
+import com.fdkankan.platform.api.dto.Camera;
+import com.fdkankan.platform.api.dto.Company;
+import com.fdkankan.platform.api.dto.User;
 import com.fdkankan.redis.util.RedisLockUtil;
 import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.scene.entity.Folder;
-import com.fdkankan.scene.listener.TestListener;
 import com.fdkankan.scene.service.IFolderService;
 import com.fdkankan.scene.service.IScene3dNumService;
 import com.fdkankan.scene.service.ISceneService;
 import com.fdkankan.scene.vo.SceneVO;
 import com.google.common.collect.Lists;
-import java.util.concurrent.TimeUnit;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.sql.DataSource;
-import java.io.File;
-import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.List;
@@ -110,10 +88,8 @@ public class TestController {
 //            CreateObjUtil.build3dModel(path , "1");
 //        }
 
-        File file = new File(
-            "/mnt/data/06f6aa555/851814909602693120/4898cab06133_202106081015476130_ajk/results/upload.json");
-        log.info("文件="+file.getAbsolutePath());
-        log.info("文件是否存在"+file.exists());
+        platformGoodsClient.getCameraById(1L);
+
 
         return "123";
 

+ 24 - 10
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/UserSceneController.java

@@ -5,10 +5,12 @@ import com.fdkankan.common.controller.BaseController;
 import com.fdkankan.common.response.PageInfo;
 import com.fdkankan.common.response.ResultData;
 import com.fdkankan.scene.service.IUserSceneService;
+import com.fdkankan.scene.vo.SceneDownloadParamVO;
 import com.fdkankan.scene.vo.SceneParamVO;
 import com.fdkankan.scene.vo.SceneVO;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -52,22 +54,34 @@ public class UserSceneController extends BaseController {
      * @param param
      * @return
      */
-//    @ApiOperation("获取用户场景列表-文件夹形式")
     @RequestMapping(value = "/newList", method = RequestMethod.POST)
-//    @ApiImplicitParams({
-//        @ApiImplicitParam(name = "pageNum", value = "分页", dataType = "number"),
-//        @ApiImplicitParam(name = "sceneSource", value = "0表示看看,1表示看见", dataType = "number"),
-//        @ApiImplicitParam(name = "sceneType", value = "场景类型,0表示其他,1表示文博,2表示地产,3表示电商,4表示餐饮,5表示家居", dataType = "number"),
-//        @ApiImplicitParam(name = "startTime", value = "开始时间", dataType = "String"),
-//        @ApiImplicitParam(name = "endTime", value = "结束时间", dataType = "String"),
-//        @ApiImplicitParam(name = "folderId", value = "文件夹id,根目录则不用传", dataType = "number"),
-//        @ApiImplicitParam(name = "folderType", value = "文件夹类型,根目录传,0我的场景,1协作场景", dataType = "number"),
-//        @ApiImplicitParam(name = "pageSize", value = "每页大小", dataType = "number")})
     public ResultData<PageInfo<SceneVO>> getNewScenes(@RequestBody SceneParamVO param) throws Exception {
         param.setUserId(this.getUserId());
         return userSceneService.getNewScenes( param);
     }
 
+    /**
+     * 场景下载
+     * @param param
+     * @return
+     */
+    @PostMapping(value = "/downloadScene")
+    public ResultData downloadScene(@RequestBody @Validated SceneDownloadParamVO param) throws Exception{
+        return userSceneService.downloadScene(this.getUserId(), param);
+    }
+
+    /**
+     * 获取下载进度
+     * @param param
+     * @return
+     */
+    @RequestMapping(value = "/downloadProcess", method = RequestMethod.POST)
+    public ResultData downloadProcess(@RequestBody @Validated SceneDownloadParamVO param) throws Exception{
+        return userSceneService.getSceneDownloadProcess(this.getUserId(), param);
+    }
+
+
+
 
 
 }

+ 6 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/entity/SceneDownloadLog.java

@@ -56,6 +56,12 @@ public class SceneDownloadLog implements Serializable {
     private Integer downloadStatus;
 
     /**
+     * 下载失败原因
+     */
+    @TableField("reason")
+    private Integer reason;
+
+    /**
      * 创建时间
      */
     @TableField("create_time")

+ 34 - 8
4dkankan-center-scene/src/main/java/com/fdkankan/scene/feign/UserSceenFeign.java

@@ -1,10 +1,17 @@
 package com.fdkankan.scene.feign;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.fdkankan.common.constant.SceneInfoReqType;
 import com.fdkankan.common.response.ResultData;
-import com.fdkankan.scene.api.vo.SceneCnt;
-import com.fdkankan.scene.api.vo.SceneProDTO;
-import com.fdkankan.scene.entity.ScenePro;
+import com.fdkankan.scene.api.dto.SceneCntDTO;
+import com.fdkankan.scene.api.dto.SceneInfoDTO;
+import com.fdkankan.scene.api.dto.SceneProDTO;
+import com.fdkankan.scene.service.ISceneDownloadLogService;
+import com.fdkankan.scene.service.ISceneEditInfoService;
 import com.fdkankan.scene.service.IUserSceneService;
+import com.fdkankan.scene.vo.SceneInfoParamVO;
+import com.fdkankan.scene.vo.SceneInfoVO;
+import java.util.Objects;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -22,16 +29,21 @@ public class UserSceenFeign {
 
     @Autowired
     IUserSceneService userSceneService;
+    @Autowired
+    ISceneDownloadLogService sceneDownloadLogService;
+    @Autowired
+    ISceneEditInfoService sceneEditInfoService;
 
     @PostMapping("/getSceneCnt")
-    ResultData<SceneCnt> getSceneCnt(@RequestParam(value = "userId") Long userId, Long cameraId){
-        SceneCnt sceneCnt = userSceneService.getSceneCnt(userId, cameraId);
-        return ResultData.ok(sceneCnt);
+    ResultData<SceneCntDTO> getSceneCnt(@RequestParam(value = "userId") Long userId, Long cameraId){
+        SceneCntDTO sceneCntDTO = userSceneService.getSceneCnt(userId, cameraId);
+        return ResultData.ok(sceneCntDTO);
     }
 
     @PostMapping("/getSceneNumByCameraId")
-    ResultData<Integer> getSceneNumByCameraId(@RequestParam(value = "cameraId") Long cameraId){
-        return ResultData.ok(userSceneService.getSceneNumByCameraId(cameraId));
+    public ResultData<Integer> getSceneNumByCameraId(@RequestParam(value = "cameraId") Long cameraId){
+        Integer sceneNum = userSceneService.getSceneNumByCameraId(cameraId);
+        return ResultData.ok(sceneNum);
     }
 
     @PostMapping("/getLastSceneByCameraId")
@@ -39,6 +51,20 @@ public class UserSceenFeign {
         return ResultData.ok(userSceneService.getLastSceneByCameraId(cameraId));
     }
 
+    @PostMapping("/updateSceneDownloadLog")
+    ResultData updateSceneDownloadLog(@RequestParam(value = "num") String num,
+        @RequestParam(value = "status") Integer status, String url, String reason){
+        sceneDownloadLogService.updateSceneDownloadLog(num, status, url, reason);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/getSceneViewInfo")
+    ResultData<SceneInfoDTO> getSceneViewInfo(@RequestParam(value = "num") String num) throws Exception{
+        return ResultData.ok(
+            sceneEditInfoService.getSceneInfo4Download(
+                SceneInfoParamVO.builder().num(num).build()));
+    }
+
 
 }
 

+ 8 - 36
4dkankan-center-scene/src/main/java/com/fdkankan/scene/listener/BuildScenePreMQListener.java

@@ -1,32 +1,12 @@
 package com.fdkankan.scene.listener;
 
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.constant.BuildStatus;
-import com.fdkankan.common.constant.ConstantFilePath;
-import com.fdkankan.common.constant.ExpiredStatus;
-import com.fdkankan.common.constant.SceneFrom;
-import com.fdkankan.common.constant.SceneResolution;
-import com.fdkankan.common.constant.SceneSource;
-import com.fdkankan.common.constant.SceneStatus;
-import com.fdkankan.common.constant.ServerCode;
-import com.fdkankan.common.constant.UploadFilePath;
-import com.fdkankan.common.response.ResultData;
-import com.fdkankan.common.util.ComputerUtil;
-import com.fdkankan.common.util.MatrixToImageWriterUtil;
 import com.fdkankan.common.util.SceneUtil;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
 import com.fdkankan.mq.message.BuildSceneMqMessage;
-import com.fdkankan.mq.message.BuildSceneResultMqMessage;
 import com.fdkankan.mq.util.RocketMQProducer;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.CameraDetail;
-import com.fdkankan.platform.api.vo.UserIncrement;
-import com.fdkankan.scene.entity.SceneEditControls;
-import com.fdkankan.scene.entity.SceneEditInfo;
-import com.fdkankan.scene.entity.SceneFileBuild;
-import com.fdkankan.scene.entity.ScenePro;
-import com.fdkankan.scene.entity.SceneProExt;
 import com.fdkankan.scene.service.IBuildScenePreService;
 import com.fdkankan.scene.service.ISceneEditControlsService;
 import com.fdkankan.scene.service.ISceneEditInfoService;
@@ -34,18 +14,10 @@ import com.fdkankan.scene.service.ISceneFileBuildService;
 import com.fdkankan.scene.service.ISceneProExtService;
 import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.service.ISceneService;
-import com.fdkankan.scene.service.impl.BuildScenePreServiceImpl;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.rocketmq.spring.annotation.MessageModel;
-import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
 import org.apache.rocketmq.spring.core.RocketMQListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
 
 
 /**
@@ -56,14 +28,14 @@ import org.springframework.stereotype.Component;
  * @date 2022/2/23
  **/
 @Slf4j
-@Component
-@RocketMQMessageListener(
-        consumerGroup = "${rocketmq.consumer.build-scene-pre-group}",
-        topic = "${rocketmq.build-scene.topicName.topic-modeling-a-pre}",
-        messageModel = MessageModel.CLUSTERING,//负载均衡模式
-        consumeThreadMax = 10,
-        consumeTimeout = 172801000L
-)
+//@Component
+//@RocketMQMessageListener(
+//        consumerGroup = "${rocketmq.consumer.build-scene-pre-group}",
+//        topic = "${rocketmq.build-scene.topicName.topic-modeling-a-pre}",
+//        messageModel = MessageModel.CLUSTERING,//负载均衡模式
+//        consumeThreadMax = 10,
+//        consumeTimeout = 172801000L
+//)
 public class BuildScenePreMQListener implements RocketMQListener<String> {
 
 

+ 8 - 20
4dkankan-center-scene/src/main/java/com/fdkankan/scene/listener/BuildSceneResultMQListener.java

@@ -1,8 +1,6 @@
 package com.fdkankan.scene.listener;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.http.HttpStatus;
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -17,21 +15,17 @@ import com.fdkankan.common.constant.SceneStatus;
 import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.constant.UploadFilePath;
 import com.fdkankan.common.response.ResultData;
-import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.MatrixToImageWriterUtil;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
 import com.fdkankan.mq.message.BuildSceneResultMqMessage;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.CameraDetail;
-import com.fdkankan.platform.api.vo.UserIncrement;
+import com.fdkankan.platform.api.dto.CameraDetail;
+import com.fdkankan.platform.api.dto.UserIncrement;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.scene.bean.SceneJsonBean;
-import com.fdkankan.scene.entity.Scene;
 import com.fdkankan.scene.entity.SceneEditControls;
 import com.fdkankan.scene.entity.SceneEditInfo;
-import com.fdkankan.scene.entity.SceneExt;
 import com.fdkankan.scene.entity.SceneFileBuild;
 import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.entity.ScenePlusExt;
@@ -46,21 +40,15 @@ import com.fdkankan.scene.service.IScenePlusService;
 import com.fdkankan.scene.service.ISceneProExtService;
 import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.service.ISceneService;
-import com.fdkankan.scene.service.impl.BuildScenePreServiceImpl;
 import java.io.File;
 import java.util.Calendar;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.stream.Collectors;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.rocketmq.spring.annotation.MessageModel;
-import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
 import org.apache.rocketmq.spring.core.RocketMQListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import org.springframework.transaction.annotation.Transactional;
@@ -74,12 +62,12 @@ import org.springframework.transaction.annotation.Transactional;
  * @date 2022/2/23
  **/
 @Slf4j
-@Component
-@RocketMQMessageListener(
-        consumerGroup = "${rocketmq.consumer.build-scene-result-group}",
-        topic = "${rocketmq.build-scene-result.topicName.topic-modeling-a}",
-        messageModel = MessageModel.CLUSTERING//负载均衡模式
-)
+//@Component
+//@RocketMQMessageListener(
+//        consumerGroup = "${rocketmq.consumer.build-scene-result-group}",
+//        topic = "${rocketmq.build-scene-result.topicName.topic-modeling-a}",
+//        messageModel = MessageModel.CLUSTERING//负载均衡模式
+//)
 public class BuildSceneResultMQListener implements RocketMQListener<String> {
 
     @Value("${rocketmq.consumer.build-scene-result-group}")

+ 2 - 1
4dkankan-center-scene/src/main/java/com/fdkankan/scene/schedule/ScheduleJob.java

@@ -1,5 +1,6 @@
 package com.fdkankan.scene.schedule;
 
+import com.fdkankan.common.factory.LogFactory;
 import com.fdkankan.scene.service.IScene3dNumService;
 import com.fdkankan.scene.service.ISceneService;
 import lombok.extern.slf4j.Slf4j;
@@ -47,7 +48,7 @@ public class ScheduleJob {
      * @author dengsixing
      * @date 2022/3/26
      **/
-    @Scheduled(cron = "0 0/10 * * * ? ")
+    @Scheduled(cron = "0 0/1 * * * ? ")
     public void generateSceneCode(){
         log.info("执行定时任务开始:批量生成场景码");
         scene3dNumService.batchCreateSceneNum();

+ 3 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneDownloadLogService.java

@@ -2,6 +2,7 @@ package com.fdkankan.scene.service;
 
 import com.fdkankan.scene.entity.SceneDownloadLog;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * <p>
@@ -19,4 +20,6 @@ public interface ISceneDownloadLogService extends IService<SceneDownloadLog> {
 
     SceneDownloadLog findByStatusAndNum(String sceneNum, Integer status);
 
+    void updateSceneDownloadLog(String num, Integer status, String url, String reason);
+
 }

+ 3 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneEditInfoService.java

@@ -1,6 +1,7 @@
 package com.fdkankan.scene.service;
 
 import com.fdkankan.common.response.ResultData;
+import com.fdkankan.scene.api.dto.SceneInfoDTO;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.scene.vo.*;
@@ -30,6 +31,8 @@ public interface ISceneEditInfoService extends IService<SceneEditInfo> {
 
     SceneInfoVO getSceneInfo(SceneInfoParamVO param) throws Exception;
 
+    SceneInfoDTO getSceneInfo4Download(SceneInfoParamVO param) throws Exception;
+
     ResultData saveUpload(SaveUploadParamVO param) throws Exception;
 
     ResultData saveCad(BaseDataParamVO param) throws Exception;

+ 8 - 4
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/IUserSceneService.java

@@ -2,11 +2,11 @@ package com.fdkankan.scene.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.common.response.ResultData;
-import com.fdkankan.scene.api.vo.SceneCnt;
-import com.fdkankan.scene.api.vo.SceneProDTO;
+import com.fdkankan.scene.api.dto.SceneCntDTO;
+import com.fdkankan.scene.api.dto.SceneProDTO;
+import com.fdkankan.scene.vo.SceneDownloadParamVO;
 import com.fdkankan.scene.vo.SceneParamVO;
 import com.fdkankan.scene.vo.SceneVO;
-import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * <p>
@@ -20,7 +20,7 @@ public interface IUserSceneService {
 
     Page<SceneVO> getScenes(String token, SceneParamVO param);
 
-    SceneCnt getSceneCnt(Long userId, Long cameraId);
+    SceneCntDTO getSceneCnt(Long userId, Long cameraId);
 
     ResultData findSceneNumber(long userId, String snCode) throws Exception;
 
@@ -30,5 +30,9 @@ public interface IUserSceneService {
 
     SceneProDTO getLastSceneByCameraId( Long cameraId);
 
+    ResultData downloadScene(Long userId, SceneDownloadParamVO param) throws Exception;
+
+    ResultData getSceneDownloadProcess(Long userId, SceneDownloadParamVO param);
+
 
 }

+ 0 - 12
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/BuildScenePreServiceImpl.java

@@ -12,18 +12,13 @@ import static com.fdkankan.push.PushMessageConfig.IOS_SECRET_Z;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.ConstantFilePath;
 import com.fdkankan.common.constant.ConstantUrl;
-import com.fdkankan.common.constant.ExpiredStatus;
 import com.fdkankan.common.constant.PayStatus;
-import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.constant.UploadFilePath;
-import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.util.CreateObjUtil;
 import com.fdkankan.common.util.FileUtil;
 import com.fdkankan.common.util.FileUtils;
@@ -33,8 +28,6 @@ import com.fdkankan.fyun.oss.UploadToOssUtil;
 import com.fdkankan.mq.message.BuildSceneMqMessage;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.CameraDetail;
-import com.fdkankan.platform.api.vo.UserIncrement;
 import com.fdkankan.push.PushMessageConfig;
 import com.fdkankan.push.PushMsgUtil;
 import com.fdkankan.scene.bean.SceneJsonBean;
@@ -42,19 +35,15 @@ import com.fdkankan.scene.entity.SceneEditControls;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.entity.ScenePlusExt;
-import com.fdkankan.scene.entity.ScenePro;
-import com.fdkankan.scene.entity.SceneProExt;
 import com.fdkankan.scene.service.IBuildScenePreService;
 import com.fdkankan.scene.service.IScenePlusService;
 import com.fdkankan.scene.vo.SceneEditControlsVO;
-import com.fdkankan.scene.vo.SceneEditInfoVO;
 import com.taobao.api.ApiException;
 import java.io.File;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -62,7 +51,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
-import javafx.application.Platform;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 11
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneCooperationServiceImpl.java

@@ -3,20 +3,16 @@ package com.fdkankan.scene.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.common.constant.RecStatus;
 import com.fdkankan.common.constant.TbStatus;
 import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.user.SSOLoginHelper;
-import com.fdkankan.common.user.SSOUser;
 import com.fdkankan.common.util.PageInfoUtils;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
-import com.fdkankan.platform.api.vo.Camera;
+import com.fdkankan.platform.api.dto.Camera;
 import com.fdkankan.scene.entity.Folder;
-import com.fdkankan.scene.entity.FolderScene;
 import com.fdkankan.scene.entity.SceneCooperation;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
 import com.fdkankan.scene.entity.ScenePro;
@@ -34,19 +30,13 @@ import com.fdkankan.scene.vo.SceneCooperationParamVO;
 import com.fdkankan.scene.vo.SceneParamVO;
 import com.fdkankan.scene.vo.SceneVO;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.stream.Collectors;
-import javax.annotation.Resource;
-import javax.xml.transform.Result;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import java.util.Calendar;
 import java.util.List;
 import java.util.Objects;
 import org.springframework.util.ObjectUtils;
-import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>

+ 20 - 1
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneDownloadLogServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.DownloadStatus;
@@ -12,6 +13,7 @@ import com.fdkankan.scene.entity.SceneDownloadLog;
 import com.fdkankan.scene.mapper.ISceneDownloadLogMapper;
 import com.fdkankan.scene.service.ISceneDownloadLogService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.stream.Collectors;
 import org.springframework.stereotype.Service;
 
 import java.util.Calendar;
@@ -33,7 +35,6 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
         this.update(new LambdaUpdateWrapper<SceneDownloadLog>()
                 .eq(SceneDownloadLog::getNum, sceneNum)
                 .eq(SceneDownloadLog::getTbStatus, TbStatus.VALID.code())
-                .set(SceneDownloadLog::getUpdateTime, Calendar.getInstance().getTime())
                 .set(SceneDownloadLog::getDownloadStatus, status));
     }
 
@@ -64,4 +65,22 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
 
     }
 
+    @Override
+    public void updateSceneDownloadLog(String num, Integer status, String url, String reason) {
+
+        List<SceneDownloadLog> downloadLogIngList = this.list(
+            new LambdaQueryWrapper<SceneDownloadLog>().eq(SceneDownloadLog::getNum, num)
+                .select(SceneDownloadLog::getId)
+                .eq(SceneDownloadLog::getDownloadStatus, DownloadStatus.DOWNLOADING.code()));
+        if(CollUtil.isEmpty(downloadLogIngList)){
+            return;
+        }
+        List<Long> idList = downloadLogIngList.stream().map(SceneDownloadLog::getId).collect(Collectors.toList());
+        this.update(new LambdaUpdateWrapper<SceneDownloadLog>()
+            .set(SceneDownloadLog::getDownloadStatus, status)
+            .set(SceneDownloadLog::getDownloadUrl, url)
+            .set(SceneDownloadLog::getReason, reason)
+            .in(SceneDownloadLog::getId, idList));
+    }
+
 }

+ 15 - 5
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -3,11 +3,9 @@ package com.fdkankan.scene.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.amazonaws.services.devicefarm.model.UploadType;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -24,13 +22,13 @@ import com.fdkankan.fyun.constant.StorageType;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.Camera;
-import com.fdkankan.platform.api.vo.CameraDetail;
-import com.fdkankan.platform.api.vo.Company;
+import com.fdkankan.platform.api.dto.CameraDetail;
+import com.fdkankan.platform.api.dto.Company;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.constant.RedisLockKey;
 import com.fdkankan.redis.util.RedisLockUtil;
 import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.scene.api.dto.SceneInfoDTO;
 import com.fdkankan.scene.bean.SceneJsonBean;
 import com.fdkankan.scene.entity.SceneDataDownload;
 import com.fdkankan.scene.entity.SceneEditControls;
@@ -345,6 +343,18 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         return null;
     }
 
+    @Override
+    public SceneInfoDTO getSceneInfo4Download(SceneInfoParamVO param) throws Exception{
+        SceneInfoVO sceneInfo4View = this.getSceneInfo4View(param.getNum());
+        if(Objects.isNull(sceneInfo4View)){
+            return null;
+        }
+        SceneInfoDTO sceneInfoDTO = BeanUtil.copyProperties(sceneInfo4View, SceneInfoDTO.class);
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
+        sceneInfoDTO.setSceneSource(scenePlus.getSceneSource());
+        return sceneInfoDTO;
+    }
+
     /**
      * <p>
             编辑页面获取场景详情信息

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

@@ -11,17 +11,15 @@ import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.util.DateExtUtil;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.Camera;
-import com.fdkankan.platform.api.vo.UserIncrement;
+import com.fdkankan.platform.api.dto.Camera;
+import com.fdkankan.platform.api.dto.UserIncrement;
 import com.fdkankan.scene.entity.ScenePlus;
-import com.fdkankan.scene.entity.ScenePro;
 import com.fdkankan.scene.service.ISceneEditService;
 import com.fdkankan.scene.service.IScenePlusService;
 import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.vo.BaseSceneParamVO;
 import com.fdkankan.scene.vo.SceneAuthVO;
 import java.util.Date;
-import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 

+ 3 - 7
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneFileBuildServiceImpl.java

@@ -22,11 +22,10 @@ import com.fdkankan.mq.message.BuildSceneMqMessage;
 import com.fdkankan.mq.util.RocketMQProducer;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.Camera;
-import com.fdkankan.platform.api.vo.CameraDetail;
-import com.fdkankan.platform.api.vo.Company;
+import com.fdkankan.platform.api.dto.Camera;
+import com.fdkankan.platform.api.dto.CameraDetail;
+import com.fdkankan.platform.api.dto.Company;
 import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.scene.bean.SceneJsonBean;
 import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.mapper.ISceneFileBuildMapper;
 import com.fdkankan.scene.service.*;
@@ -43,9 +42,6 @@ import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.transform.Result;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;

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

@@ -13,9 +13,9 @@ import com.fdkankan.common.constant.*;
 import com.fdkankan.common.util.*;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.Camera;
-import com.fdkankan.platform.api.vo.CameraDetail;
-import com.fdkankan.platform.api.vo.User;
+import com.fdkankan.platform.api.dto.Camera;
+import com.fdkankan.platform.api.dto.CameraDetail;
+import com.fdkankan.platform.api.dto.User;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.constant.RedisLockKey;
 import com.fdkankan.redis.util.RedisLockUtil;

+ 1 - 2
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java

@@ -20,7 +20,7 @@ import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
 import com.fdkankan.fyun.qiniu.QiniuUpload;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.User;
+import com.fdkankan.platform.api.dto.User;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.constant.RedisLockKey;
 import com.fdkankan.redis.util.RedisLockUtil;
@@ -28,7 +28,6 @@ import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.mapper.ISceneMapper;
 import com.fdkankan.scene.mapper.ISceneProMapper;
-import com.fdkankan.scene.service.IScene3dNumService;
 import com.fdkankan.scene.service.ISceneDataDownloadService;
 import com.fdkankan.scene.service.ISceneExtService;
 import com.fdkankan.scene.service.ISceneProExtService;

+ 90 - 11
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/UserSceneServiceImpl.java

@@ -3,9 +3,14 @@ package com.fdkankan.scene.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.common.bean.DownLoadProgressBean;
+import com.fdkankan.common.bean.DownLoadTaskBean;
+import com.fdkankan.common.constant.DownloadStatus;
 import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.SceneDownloadProgressStatus;
 import com.fdkankan.common.constant.SceneSource;
 import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.exception.BusinessException;
@@ -16,15 +21,20 @@ import com.fdkankan.common.user.SSOUser;
 import com.fdkankan.common.util.PageInfoUtils;
 import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
-import com.fdkankan.platform.api.vo.Camera;
-import com.fdkankan.platform.api.vo.User;
-import com.fdkankan.scene.api.vo.SceneCnt;
-import com.fdkankan.scene.api.vo.SceneProDTO;
+import com.fdkankan.platform.api.dto.Camera;
+import com.fdkankan.platform.api.dto.User;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.scene.api.dto.SceneCntDTO;
+import com.fdkankan.scene.api.dto.SceneProDTO;
 import com.fdkankan.scene.entity.Folder;
 import com.fdkankan.scene.entity.FolderScene;
 import com.fdkankan.scene.entity.Scene;
 import com.fdkankan.scene.entity.SceneCooperation;
+import com.fdkankan.scene.entity.SceneDownloadLog;
+import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
+import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.entity.ScenePro;
 import com.fdkankan.scene.entity.SceneProExt;
 import com.fdkankan.scene.entity.SceneProPO;
@@ -32,12 +42,16 @@ import com.fdkankan.scene.mapper.ISceneProMapper;
 import com.fdkankan.scene.service.IFolderSceneService;
 import com.fdkankan.scene.service.IFolderService;
 import com.fdkankan.scene.service.ISceneCooperationService;
+import com.fdkankan.scene.service.ISceneDownloadLogService;
 import com.fdkankan.scene.service.ISceneEditInfoExtService;
+import com.fdkankan.scene.service.ISceneEditInfoService;
+import com.fdkankan.scene.service.IScenePlusService;
 import com.fdkankan.scene.service.ISceneProExtService;
 import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.service.ISceneService;
 import com.fdkankan.scene.service.IUserSceneService;
 import com.fdkankan.scene.vo.FolderVO;
+import com.fdkankan.scene.vo.SceneDownloadParamVO;
 import com.fdkankan.scene.vo.SceneParamVO;
 import com.fdkankan.scene.vo.SceneVO;
 import java.util.ArrayList;
@@ -45,7 +59,6 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
-import java.util.concurrent.locks.Condition;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -54,7 +67,6 @@ import org.springframework.stereotype.Service;
 
 import java.util.List;
 import java.util.stream.Collectors;
-import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 
 @Service
@@ -83,6 +95,14 @@ public class UserSceneServiceImpl implements IUserSceneService {
     private ISceneProMapper sceneProMapper;
     @Autowired
     private ISceneEditInfoExtService sceneEditInfoExtService;
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    private ISceneDownloadLogService sceneDownloadLogService;
 
     @Override
     public Page<SceneVO> getScenes(String token, SceneParamVO param) {
@@ -145,7 +165,7 @@ public class UserSceneServiceImpl implements IUserSceneService {
     }
 
     @Override
-    public SceneCnt getSceneCnt(Long userId, Long cameraId) {
+    public SceneCntDTO getSceneCnt(Long userId, Long cameraId) {
 
         //双目场景数量
         LambdaQueryWrapper<Scene> sceneWrapper =
@@ -180,7 +200,7 @@ public class UserSceneServiceImpl implements IUserSceneService {
         long cooperaCount = sceneCooperationService.count(
             new LambdaQueryWrapper<SceneCooperation>().eq(SceneCooperation::getUserId, userId));
 
-        return SceneCnt.builder().sceneCnt(sceneCount).sceneProCnt(sceneProCount).CooperSceneCnt(cooperaCount).build();
+        return SceneCntDTO.builder().sceneCnt(sceneCount).sceneProCnt(sceneProCount).CooperSceneCnt(cooperaCount).build();
     }
 
     @Override
@@ -201,9 +221,9 @@ public class UserSceneServiceImpl implements IUserSceneService {
         }
 
         //双目场景数量
-        SceneCnt sceneCnt = this.getSceneCnt(userId, Objects.isNull(camera) ? null : camera.getId());
-        map.put("sceneNum", sceneCnt.getSceneCnt() + sceneCnt.getSceneProCnt());
-        map.put("cooperatimeNum", sceneCnt.getCooperSceneCnt());
+        SceneCntDTO sceneCntDTO = this.getSceneCnt(userId, Objects.isNull(camera) ? null : camera.getId());
+        map.put("sceneNum", sceneCntDTO.getSceneCnt() + sceneCntDTO.getSceneProCnt());
+        map.put("cooperatimeNum", sceneCntDTO.getCooperSceneCnt());
 
         return ResultData.ok(map);
     }
@@ -291,6 +311,65 @@ public class UserSceneServiceImpl implements IUserSceneService {
         return BeanUtil.copyProperties(sceneProPO, SceneProDTO.class);
     }
 
+    @Override
+    public ResultData downloadScene(Long userId, SceneDownloadParamVO param) throws Exception {
+
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getSceneNum());
+        if(scenePlus == null){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+
+        SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+        if(sceneEditInfo == null){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfo.getId());
+
+        Map<String, Object> result = new HashMap<>();
+
+        ResultData<User> userResultData = platformUserClient.getUserByUserId(userId);
+        if(!userResultData.getSuccess()){
+            throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
+        }
+        User user = userResultData.getData();
+
+        if(user != null || user.getDownloadNumTotal().compareTo(user.getDownloadNum()) < 1){
+            result.put("downloadStatus", -1);
+            ResultData.ok(result);
+        }
+
+        // 存储redis 开始下载任务
+        String downLoadTaskJson = JSON.toJSONString(
+            DownLoadTaskBean.builder()
+                .num(param.getSceneNum())
+                .type("local")
+                .userId(userId).build());
+        redisUtil.lRightPush(RedisKey.SCENE_DOWNLOADS_TASK_V4, downLoadTaskJson);
+
+        SceneDownloadLog sceneDownloadLog = new SceneDownloadLog();
+        sceneDownloadLog.setUserId(userId);
+        sceneDownloadLog.setNum(param.getSceneNum());
+        sceneDownloadLog.setSceneVersion(sceneEditInfo.getVersion());
+        sceneDownloadLog.setDownloadStatus(DownloadStatus.DOWNLOADING.code());
+        sceneDownloadLogService.save(sceneDownloadLog);
+
+        result.put("downloadStatus", 1);
+        return ResultData.ok(result);
+    }
+
+    @Override
+    public ResultData getSceneDownloadProcess(Long userId, SceneDownloadParamVO param) {
+        // 获取下载进度
+        String processStr = redisUtil.get(String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4, param.getSceneNum()));
+        if (StringUtils.isEmpty(processStr)) {
+            return ResultData.ok(
+                DownLoadProgressBean.builder()
+                    .status(SceneDownloadProgressStatus.DOWNLOADING.code())
+                    .percent(0).url("").build());
+        }
+        return ResultData.ok(JSON.parseObject(processStr, DownLoadProgressBean.class));
+    }
+
     public Map<String, Object> getNewScenesPagerByUserId(Long userId, SceneParamVO param) throws Exception {
 
         List<SceneProPO> sceneList = new ArrayList<>();

+ 23 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/SceneDownloadParamVO.java

@@ -0,0 +1,23 @@
+package com.fdkankan.scene.vo;
+
+import javax.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/22
+ **/
+@Data
+public class SceneDownloadParamVO {
+
+    /**
+     * 场景码
+     */
+    @NotBlank(message = "场景码不能为空")
+    private String sceneNum;
+
+}

+ 91 - 0
4dkankan-center-scene/src/main/resources/bootstrap-dev.yml

@@ -0,0 +1,91 @@
+spring:
+#  jackson:
+#    serialization:
+#      #关闭jackson转换 实体属性空值校验
+#      FAIL_ON_EMPTY_BEANS: false
+#    date-format: yyyy-MM-dd HH:mm:ss
+#    time-zone: GMT+8
+  application:
+    name: 4dkankan-center-scene
+#  servlet:
+#    multipart:
+#      # 设置单个文件大小
+#      max-file-size: 50MB
+#      # 设置单次请求文件的总大小
+#      max-request-size: 50MB
+#  mvc:
+#    throw-exception-if-no-handler-found: true
+  cloud:
+    nacos:
+      config:
+        server-addr: 192.168.0.47:8848
+        file-extension: yaml
+        namespace: 4dkankan-dev
+        extension-configs:
+          - data-id: 4dkankan-center-scene.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+        shared-configs:
+          - data-id: common-db-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-redis-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-mq-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: other-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-upload-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+      discovery:
+        server-addr: 192.168.0.47:8848
+        namespace: 4dkankan-dev
+    sentinel:
+      transport:
+        dashboard: 192.168.0.47:8888
+#        dashboard: localhost:8888
+        heartbeat-interval-ms: 500
+        port: 8719
+      eager: true #取消sentinel控制台懒加载
+      #sentinel配置持久化nacos
+      datasource:
+        #流控规则
+        flow:
+          nacos:
+            server-addr: ${spring.cloud.nacos.config.server-addr}
+            dataId: ${spring.application.name}-flow-rules
+            groupId: SENTINEL_GROUP
+            namespace: 4dkankan-dev
+            rule-type: flow
+        #熔断规则
+        degrade:
+          nacos:
+            server-addr: ${spring.cloud.nacos.config.server-addr}
+            dataId: ${spring.application.name}-degrade-rules
+            groupId: SENTINEL_GROUP
+            namespace: 4dkankan-dev
+            rule-type: degrade
+#      log:
+#        dir: ./logs # 默认值${home}/logs/csp/
+#        switch-pid: true # 日志带上线程id
+
+#开启feign熔断降级,如果没有开启,feign调用链路不会显示再sentinel控制中
+#feign:
+#  sentinel:
+#    enabled: true
+
+feign:
+  httpclient:
+    connection-timeout: 200000
+
+
+
+

+ 91 - 0
4dkankan-center-scene/src/main/resources/bootstrap-pro.yml

@@ -0,0 +1,91 @@
+spring:
+#  jackson:
+#    serialization:
+#      #关闭jackson转换 实体属性空值校验
+#      FAIL_ON_EMPTY_BEANS: false
+#    date-format: yyyy-MM-dd HH:mm:ss
+#    time-zone: GMT+8
+  application:
+    name: 4dkankan-center-scene
+#  servlet:
+#    multipart:
+#      # 设置单个文件大小
+#      max-file-size: 50MB
+#      # 设置单次请求文件的总大小
+#      max-request-size: 50MB
+#  mvc:
+#    throw-exception-if-no-handler-found: true
+  cloud:
+    nacos:
+      config:
+        server-addr: 192.168.0.47:8848
+        file-extension: yaml
+        namespace: 4dkankan-pro
+        extension-configs:
+          - data-id: 4dkankan-center-scene.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+        shared-configs:
+          - data-id: common-db-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-redis-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-mq-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: other-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-upload-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+      discovery:
+        server-addr: 192.168.0.47:8848
+        namespace: 4dkankan-pro
+    sentinel:
+      transport:
+        dashboard: 192.168.0.47:8888
+#        dashboard: localhost:8888
+        heartbeat-interval-ms: 500
+        port: 8719
+      eager: true #取消sentinel控制台懒加载
+      #sentinel配置持久化nacos
+      datasource:
+        #流控规则
+        flow:
+          nacos:
+            server-addr: ${spring.cloud.nacos.config.server-addr}
+            dataId: ${spring.application.name}-flow-rules
+            groupId: SENTINEL_GROUP
+            namespace: 4dkankan-pro
+            rule-type: flow
+        #熔断规则
+        degrade:
+          nacos:
+            server-addr: ${spring.cloud.nacos.config.server-addr}
+            dataId: ${spring.application.name}-degrade-rules
+            groupId: SENTINEL_GROUP
+            namespace: 4dkankan-pro
+            rule-type: degrade
+#      log:
+#        dir: ./logs # 默认值${home}/logs/csp/
+#        switch-pid: true # 日志带上线程id
+
+#开启feign熔断降级,如果没有开启,feign调用链路不会显示再sentinel控制中
+#feign:
+#  sentinel:
+#    enabled: true
+
+feign:
+  httpclient:
+    connection-timeout: 200000
+
+
+
+

+ 91 - 0
4dkankan-center-scene/src/main/resources/bootstrap-test.yml

@@ -0,0 +1,91 @@
+spring:
+#  jackson:
+#    serialization:
+#      #关闭jackson转换 实体属性空值校验
+#      FAIL_ON_EMPTY_BEANS: false
+#    date-format: yyyy-MM-dd HH:mm:ss
+#    time-zone: GMT+8
+  application:
+    name: 4dkankan-center-scene
+#  servlet:
+#    multipart:
+#      # 设置单个文件大小
+#      max-file-size: 50MB
+#      # 设置单次请求文件的总大小
+#      max-request-size: 50MB
+#  mvc:
+#    throw-exception-if-no-handler-found: true
+  cloud:
+    nacos:
+      config:
+        server-addr: 192.168.0.47:8848
+        file-extension: yaml
+        namespace: 4dkankan-test
+        extension-configs:
+          - data-id: 4dkankan-center-scene.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+        shared-configs:
+          - data-id: common-db-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-redis-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-mq-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: other-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-upload-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+      discovery:
+        server-addr: 192.168.0.47:8848
+        namespace: 4dkankan-test
+    sentinel:
+      transport:
+        dashboard: 192.168.0.47:8888
+#        dashboard: localhost:8888
+        heartbeat-interval-ms: 500
+        port: 8719
+      eager: true #取消sentinel控制台懒加载
+      #sentinel配置持久化nacos
+      datasource:
+        #流控规则
+        flow:
+          nacos:
+            server-addr: ${spring.cloud.nacos.config.server-addr}
+            dataId: ${spring.application.name}-flow-rules
+            groupId: SENTINEL_GROUP
+            namespace: 4dkankan-test
+            rule-type: flow
+        #熔断规则
+        degrade:
+          nacos:
+            server-addr: ${spring.cloud.nacos.config.server-addr}
+            dataId: ${spring.application.name}-degrade-rules
+            groupId: SENTINEL_GROUP
+            namespace: 4dkankan-test
+            rule-type: degrade
+#      log:
+#        dir: ./logs # 默认值${home}/logs/csp/
+#        switch-pid: true # 日志带上线程id
+
+#开启feign熔断降级,如果没有开启,feign调用链路不会显示再sentinel控制中
+#feign:
+#  sentinel:
+#    enabled: true
+
+feign:
+  httpclient:
+    connection-timeout: 200000
+
+
+
+

+ 91 - 38
4dkankan-center-scene/src/main/resources/logback-spring.xml

@@ -60,6 +60,16 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_DEBUG_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
+		<appender-ref ref="DEBUG_FILE"/>
+	</appender>
+
 	<!-- 时间滚动输出 level为 INFO 日志 -->
 	<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
@@ -88,6 +98,16 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_INFO_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
+		<appender-ref ref="INFO_FILE"/>
+	</appender>
+
 	<!-- 时间滚动输出 level为 WARN 日志 -->
 	<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
@@ -115,6 +135,16 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_WARN_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
+		<appender-ref ref="WARN_FILE"/>
+	</appender>
+
 
 	<!-- 时间滚动输出 level为 ERROR 日志 -->
 	<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
@@ -142,34 +172,17 @@
 			<onMismatch>DENY</onMismatch>
 		</filter>
 	</appender>
-	
-	<appender name="PROGRAM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<!-- 正在记录的日志文件的路径及文件名 -->
-		<file>${log.path}/program/log_program.log</file>
-		<!--日志文件输出格式 -->
-		<encoder>
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}[%L] - %msg%n</pattern>
-			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
-		</encoder>
-		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${log.path}/program/log-program-%d{yyyy-MM-dd}.%i.log
-			</fileNamePattern>
-			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-				<maxFileSize>100MB</maxFileSize>
-			</timeBasedFileNamingAndTriggeringPolicy>
-			<!--日志文件保留天数 -->
-			<maxHistory>15</maxHistory>
-		</rollingPolicy>
-		<!-- 此日志文件只记录ERROR级别的 -->
-		<filter class="ch.qos.logback.classic.filter.LevelFilter">
-			<onMatch>ACCEPT</onMatch>
-			<onMismatch>DENY</onMismatch>
-		</filter>
+
+	<appender name="ASYNC_ERROR_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
+		<appender-ref ref="ERROR_FILE"/>
 	</appender>
-	<logger name="programLog" level="INFO" additivity="true">
-        <appender-ref ref="PROGRAM_FILE"/>
-    </logger>
+
 
 	<appender name="VISIT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
@@ -190,15 +203,25 @@
 			<!--日志文件保留天数 -->
 			<maxHistory>15</maxHistory>
 		</rollingPolicy>
-		<!-- 此日志文件只记录ERROR级别的 -->
+		<!-- 此日志文件只记录info级别的 -->
 		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>info</level>
 			<onMatch>ACCEPT</onMatch>
 			<onMismatch>DENY</onMismatch>
 		</filter>
 	</appender>
-	<logger name="visitLog" level="INFO" additivity="true">
-        <appender-ref ref="VISIT_FILE"/>
-    </logger>
+	<appender name="ASYNC_VISIT_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
+		<appender-ref ref="VISIT_FILE"/>
+	</appender>
+	<logger name="visitLog" level="INFO" additivity="false">
+		<appender-ref ref="ASYNC_VISIT_FILE"/>
+	</logger>
 
 	<!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender>。<logger>仅有一个name属性, 一个可选的level和一个可选的addtivity属性。 name:用来指定受此logger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE,
 		DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。 addtivity:是否向上级logger传递打印信息。默认是true。 -->
@@ -207,13 +230,43 @@
 	<!-- 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: 第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别: -->
 	<!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能设置为INHERITED或者同义词NULL。默认是DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 -->
 
-			<root level="info">
-				<appender-ref ref="CONSOLE" />
-				<appender-ref ref="DEBUG_FILE" />
-				<appender-ref ref="INFO_FILE" />
-				<appender-ref ref="WARN_FILE" />
-				<appender-ref ref="ERROR_FILE" />
-			</root>
+	<root level="info">
+		<appender-ref ref="CONSOLE" />
+		<appender-ref ref="ASYNC_DEBUG_FILE" />
+		<appender-ref ref="ASYNC_INFO_FILE" />
+		<appender-ref ref="ASYNC_WARN_FILE" />
+		<appender-ref ref="ASYNC_ERROR_FILE" />
+	</root>
+
+	<springProfile name="dev">
+		<root level="info">
+			<appender-ref ref="CONSOLE" />
+			<appender-ref ref="ASYNC_DEBUG_FILE" />
+			<appender-ref ref="ASYNC_INFO_FILE" />
+			<appender-ref ref="ASYNC_WARN_FILE" />
+			<appender-ref ref="ASYNC_ERROR_FILE" />
+		</root>
+	</springProfile>
+
+	<springProfile name="test">
+		<root level="info">
+			<appender-ref ref="CONSOLE" />
+			<appender-ref ref="ASYNC_DEBUG_FILE" />
+			<appender-ref ref="ASYNC_INFO_FILE" />
+			<appender-ref ref="ASYNC_WARN_FILE" />
+			<appender-ref ref="ASYNC_ERROR_FILE" />
+		</root>
+	</springProfile>
+
+	<springProfile name="pro">
+		<root level="info">
+			<appender-ref ref="CONSOLE" />
+			<appender-ref ref="ASYNC_DEBUG_FILE" />
+			<appender-ref ref="ASYNC_INFO_FILE" />
+			<appender-ref ref="ASYNC_WARN_FILE" />
+			<appender-ref ref="ASYNC_ERROR_FILE" />
+		</root>
+	</springProfile>
 
 <!--	<springProfile name="dev">-->
 <!--		<root level="info">-->

+ 55 - 0
4dkankan-common/src/main/java/com/fdkankan/common/aop/FeignInterceptor.java

@@ -0,0 +1,55 @@
+package com.fdkankan.common.aop;
+
+import com.alibaba.fastjson.JSON;
+import com.fdkankan.common.constant.LogFormatConstant;
+import java.util.Enumeration;
+import javax.servlet.http.HttpServletRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+@Component
+@Aspect
+@Slf4j
+public class FeignInterceptor {
+
+	// 切入点表达式
+	@Pointcut("execution(* com.fdkankan.*.feign..*.*(..))")
+	public void privilege() {
+	}
+
+	@Around("privilege()")
+	public Object around(ProceedingJoinPoint pjp) throws Throwable {
+
+		// 获取类名
+		String className = pjp.getTarget().getClass().getName();
+		// 获取执行的方法名称
+		String methodName = pjp.getSignature().getName();
+		// 获取参数名称
+		String[] parameterNamesArgs = ((MethodSignature) pjp.getSignature()).getParameterNames();
+		// 定义返回参数
+		Object result = null;
+		// 获取方法参数
+		Object[] args = pjp.getArgs();
+		StringBuilder params = new StringBuilder();
+		for(int i = 0; i < parameterNamesArgs.length; i++){
+			params.append(",").append(parameterNamesArgs[i]).append("=").append(args[i]);
+		}
+		log.info(LogFormatConstant.FEIGN_LOG_START, className, methodName, params.substring(1));
+		// 执行目标方法
+		result = pjp.proceed();
+
+		log.info(LogFormatConstant.FEIGN_LOG_END, className, methodName, JSON.toJSONString(result));
+
+		return result;
+	}
+}
+

+ 17 - 15
4dkankan-center-platform/src/main/java/com/fdkankan/platform/aop/PlatformAopInterceptor.java

@@ -1,5 +1,10 @@
-package com.fdkankan.platform.aop;
+package com.fdkankan.common.aop;
 
+import com.fdkankan.common.constant.LogFormatConstant;
+import com.fdkankan.common.factory.LogFactory;
+import java.util.Enumeration;
+import javax.servlet.http.HttpServletRequest;
+import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -11,17 +16,13 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import javax.servlet.http.HttpServletRequest;
-import java.util.Enumeration;
-
-@Component // 将对象交由spring进行管理
-@Aspect // 代表此类为一个切面类
-public class PlatformAopInterceptor {
-	/** 初始化日志打印 */
-	public static final Logger log = LoggerFactory.getLogger("visitLog");
+@Component
+@Aspect
+@Slf4j
+public class VisitLogInterceptor {
 
 	// 切入点表达式
-	@Pointcut("execution(public * com.fdkankan.platform.*.controller.*.*.*(..))")
+	@Pointcut("execution(public * com.fdkankan.*..controller..*.*(..))")
 	public void privilege() {
 	}
 
@@ -66,12 +67,13 @@ public class PlatformAopInterceptor {
 		// 记录开始时间
 		long start = System.currentTimeMillis();
 
-		log.info("请求| ip:{} | 请求接口:{} | 请求类:{} | 方法 :{} | 参数:{} | 请求header:{}|请求时间 :{}", ip, requestURL, className, methodName, paramsBuf.toString(),
-				headerBuf.toString(), start);
+		log.info(LogFormatConstant.REQUEST_LOG_START, ip, requestURL, className, methodName, paramsBuf.toString(), headerBuf.toString());
+
 		// 执行目标方法
 		result = pjp.proceed();
+
 		// 获取执行完的时间 打印返回报文
-		log.info("返回| 请求接口:{}| 方法 :{} | 请求时间:{} | 处理时间:{} 毫秒 | 返回结果 :{}", requestURL, methodName, start, (System.currentTimeMillis() - start), result);
+		log.info(LogFormatConstant.REQUEST_LOG_END, requestURL, className, methodName, result, (System.currentTimeMillis() - start));
 		return result;
 	}
 
@@ -95,7 +97,7 @@ public class PlatformAopInterceptor {
 			ipAddress = request.getRemoteAddr();
 		}
 
-// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+		//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
 		if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
 			// = 15
 			if (ipAddress.indexOf(",") > 0) {
@@ -103,7 +105,7 @@ public class PlatformAopInterceptor {
 			}
 		}
 		// 或者这样也行,对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
-//return ipAddress!=null&&!"".equals(ipAddress)?ipAddress.split(",")[0]:null;
+		//return ipAddress!=null&&!"".equals(ipAddress)?ipAddress.split(",")[0]:null;
 		return ipAddress;
 	}
 }

+ 1 - 1
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/bean/DownLoadProgressBean.java

@@ -1,4 +1,4 @@
-package com.fdkankan.scene.download.bean;
+package com.fdkankan.common.bean;
 
 import java.io.Serializable;
 import lombok.AllArgsConstructor;

+ 3 - 1
4dkankan-center-scene-download/src/main/java/com/fdkankan/scene/download/bean/DownLoadTaskBean.java

@@ -1,4 +1,4 @@
-package com.fdkankan.scene.download.bean;
+package com.fdkankan.common.bean;
 
 import java.io.Serializable;
 import lombok.AllArgsConstructor;
@@ -20,6 +20,8 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 public class DownLoadTaskBean implements Serializable {
 
+    private Long userId;
+
     private String num;
 
     private String type;

+ 4 - 4
4dkankan-common/src/main/java/com/fdkankan/common/config/ShiroConfig.java

@@ -35,10 +35,10 @@ public class ShiroConfig {
 
         // 添加自己的过滤器并且取名为jwt
         Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
-        filterMap.put("user_jwt", new JwtFilter(LoginType.USER.toString()));
-        filterMap.put("manager_jwt", new JwtFilter(LoginType.MANAGER.toString()));
-        filterMap.put("agent_jwt", new JwtFilter(LoginType.AGENT.toString()));
-        filterMap.put("app_jwt", new JwtFilter(LoginType.APP.toString()));
+        filterMap.put("user_jwt", new JwtFilter(LoginType.USER.code()));
+        filterMap.put("manager_jwt", new JwtFilter(LoginType.MANAGER.code()));
+        filterMap.put("agent_jwt", new JwtFilter(LoginType.AGENT.code()));
+        filterMap.put("app_jwt", new JwtFilter(LoginType.APP.code()));
         shiroFilterFactoryBean.setFilters(filterMap);
         //<!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边
         filterChainDefinitionMap.put(FilterConstant.FILTER_USER_URL + "/**", "user_jwt");

+ 1 - 1
4dkankan-center-platform/src/main/java/com/fdkankan/platform/common/LogFactory.java

@@ -1,4 +1,4 @@
-package com.fdkankan.platform.common;
+package com.fdkankan.common.factory;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

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

@@ -27,12 +27,12 @@ public class SSOLoginHelper {
         return this.login(loginType,userName,time, null);
     }
     public String login(SSOUser ssoUser) {
-        String loginType = LoginType.USER.name();
+        String loginType = LoginType.USER.code();
         String userName = ssoUser.getUserName();
         return this.login(loginType,userName,null, ssoUser);
     }
     public String login(SSOUser ssoUser,Integer time) {
-        String loginType = LoginType.USER.name();
+        String loginType = LoginType.USER.code();
         String userName = ssoUser.getUserName();
         return this.login(loginType,userName,time, ssoUser);
     }

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

@@ -37,7 +37,7 @@ public class SSOLoginStore {
         if(redisUtil.hasKey(redisKey)){
             redisUtil.del(redisKey);
         }
-        if(LoginType.USER.name().equals(loginType)  ){
+        if(LoginType.USER.code().equals(loginType)  ){
             String ssoUserRedisKey = getSsoUserRedisKey(userName);
             if(redisUtil.hasKey(ssoUserRedisKey)){
                 redisUtil.del(ssoUserRedisKey);
@@ -59,7 +59,7 @@ public class SSOLoginStore {
         }
         String redisKey = getTokenRedisKey(loginType,userName);
         redisUtil.set(redisKey, token, time);
-        if(LoginType.USER.name().equals(loginType) && ssoUser!=null ){
+        if(LoginType.USER.code().equals(loginType) && ssoUser!=null ){
             redisUtil.set(getSsoUserRedisKey(userName),JSONObject.toJSONString(ssoUser),time);
         }
     }