dsx 1 year ago
parent
commit
7944b9d0c1

+ 6 - 0
pom.xml

@@ -183,6 +183,12 @@
             <version>8.0.32</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-redis</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+        </dependency>
+
     </dependencies>
 
     <dependencyManagement>

+ 10 - 0
src/main/java/com/fdkankan/external/bean/DownloadProcessBean.java

@@ -0,0 +1,10 @@
+package com.fdkankan.external.bean;
+
+import lombok.Data;
+
+@Data
+public class DownloadProcessBean {
+    private Integer status = 1000;
+    private String url;
+    private Integer percent = 0;
+}

+ 1 - 1
src/main/java/com/fdkankan/external/service/ISceneOfflinePackagePushService.java

@@ -17,6 +17,6 @@ public interface ISceneOfflinePackagePushService extends IService<SceneOfflinePa
 
     SceneOfflinePackagePush getLastByCondition(SceneOfflinePackagePush condition);
 
-    void scenePushHandler(SceneOfflinePackagePush push, Map<String, Object> headers);
+    void scenePushHandler(SceneOfflinePackagePush push);
 
 }

+ 51 - 63
src/main/java/com/fdkankan/external/service/impl/SceneOfflinePackagePushServiceImpl.java

@@ -5,31 +5,35 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.TimeInterval;
 import cn.hutool.core.thread.ExecutorBuilder;
-import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.CommonSuccessStatus;
 import com.fdkankan.common.constant.SceneSource;
 import com.fdkankan.common.util.DateExtUtil;
+import com.fdkankan.external.bean.DownloadProcessBean;
 import com.fdkankan.external.callback.ErrorCallback;
 import com.fdkankan.external.callback.SuccessCallback;
 import com.fdkankan.external.entity.*;
 import com.fdkankan.external.httpclient.HttpClient;
+import com.fdkankan.external.mapper.SceneOfflinePackagePushMapper;
 import com.fdkankan.external.service.*;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.web.response.ResultData;
-import com.mybatisflex.annotation.UseDataSource;
 import com.mybatisflex.core.query.QueryWrapper;
 import com.mybatisflex.spring.service.impl.ServiceImpl;
-import com.fdkankan.external.mapper.SceneOfflinePackagePushMapper;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
-import java.math.BigInteger;
-import java.util.*;
-import java.util.concurrent.Callable;
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.stream.Collectors;
 
@@ -43,17 +47,9 @@ import java.util.stream.Collectors;
 @Service
 public class SceneOfflinePackagePushServiceImpl extends ServiceImpl<SceneOfflinePackagePushMapper, SceneOfflinePackagePush> implements ISceneOfflinePackagePushService {
 
-    @Value("${host.4dkk.manage}")
-    private String fdkkManageHost;
     @Value("${host.4dkk.scene}")
     private String fdkkSceneHost;
 
-    @Value("${api.4dkk.manage.checkDownLoad}")
-    private String checkDownLoadUrl;
-    @Value("${api.4dkk.manage.downScene}")
-    private String downSceneUrl;
-    @Value("${api.4dkk.manage.downloadProcess}")
-    private String downloadProcessUrl;
     @Value("${api.4dkk.scene.getInfo}")
     private String getInfoUrl;
 
@@ -66,17 +62,17 @@ public class SceneOfflinePackagePushServiceImpl extends ServiceImpl<SceneOffline
     @Autowired
     private IScenePlusService scenePlusService;
     @Autowired
-    private ISsoService ssoService;
-    @Autowired
     private IScenePlusExtService scenePlusExtService;
     @Autowired
     private ISceneOfflinePackagePushService sceneOfflinePackagePushService;
     @Autowired
     private ISceneService sceneService;
-    @Autowired
+    @Resource
     private HttpClient httpClient;
     @Autowired
     private ICameraService cameraService;
+    @Resource
+    private RedisUtil redisUtil;
 
 
 
@@ -105,11 +101,6 @@ public class SceneOfflinePackagePushServiceImpl extends ServiceImpl<SceneOffline
             return;
         }
 
-        //模拟管理后台登录
-        String token = ssoService.manageLogin(department.getManageUserName(), department.getManagePassword());
-        Map<String, Object> headers = new HashMap<>();
-        headers.put("token", token);
-
         SceneOfflinePackagePush condition =
                 SceneOfflinePackagePush.builder()
                         .departmentId(department.getId())
@@ -144,7 +135,7 @@ public class SceneOfflinePackagePushServiceImpl extends ServiceImpl<SceneOffline
                             push.setZipType("laser");
                             push.setVersion(scene.getOfflineVerForPush());
                             try {
-                                sceneOfflinePackagePushService.scenePushHandler(push, headers);
+                                sceneOfflinePackagePushService.scenePushHandler(push);
                             }catch (Exception e){
                                 log.error("场景推送失败,num:{}",scenePlus.getNum(), e);
                             }
@@ -174,7 +165,7 @@ public class SceneOfflinePackagePushServiceImpl extends ServiceImpl<SceneOffline
                             push.setZipType("kankan");
                             push.setVersion(version);
                             try {
-                                sceneOfflinePackagePushService.scenePushHandler(push, headers);
+                                sceneOfflinePackagePushService.scenePushHandler(push);
                             }catch (Exception e){
                                 log.error("场景推送失败,num:{}",scenePlus.getNum(), e);
                             }
@@ -206,49 +197,46 @@ public class SceneOfflinePackagePushServiceImpl extends ServiceImpl<SceneOffline
     }
 
     @Override
-    public void scenePushHandler(SceneOfflinePackagePush push, Map<String, Object> headers){
+    public void scenePushHandler(SceneOfflinePackagePush push){
         String num = push.getNum();
         String zipType = push.getZipType();
         String downloadUrl = null;
 
+        String downloadTaskKey = RedisKey.SCENE_DOWNLOADS_TASK_V4;
+        String progressKey = String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4, num);
+
         try {
-            //校验场景下载
-            String url = fdkkManageHost.concat(String.format(checkDownLoadUrl, num));
-            ResultData<Map<String, Object>> resultData = httpClient.get(url, headers, new SuccessCallback(), new ErrorCallback());
-            Map<String, Object> data = resultData.getData();
-            int downloadStatus = (int) data.get("downloadStatus");
-            if (downloadStatus == 3) {
-                downloadUrl = (String) data.get("downloadUrl");
-            } else {
-                if (downloadStatus == 0 || downloadStatus == 2) {
-                    url = this.fdkkManageHost.concat(String.format(downSceneUrl, num));
-                    httpClient.get(url, headers, new SuccessCallback(), new ErrorCallback());
+            TimeInterval timer = DateUtil.timer();
+            Map<String,String> playod = new HashMap<>(2);
+            playod.put("type","local");
+            playod.put("sceneNum",num);
+            redisUtil.lRightPush(downloadTaskKey, JSONObject.toJSONString(playod));
+            boolean exit = false;
+            String progress = null;
+            DownloadProcessBean downloadProcessBean = null;
+            do {
+                progress = redisUtil.get(progressKey);
+                if(StringUtils.isEmpty(progress)){
+                    downloadProcessBean = new DownloadProcessBean();
+                }else{
+                    downloadProcessBean = JSONObject.parseObject(progress, DownloadProcessBean.class);
                 }
-
-                //计时
-                TimeInterval timer = DateUtil.timer();
-                url = this.fdkkManageHost.concat(String.format(this.downloadProcessUrl, num));
-                boolean exit = false;
-                do {
-                    ResultData<Map<String, Object>> mapResultData = httpClient.get(url, headers, new SuccessCallback(), new ErrorCallback());
-                    data = mapResultData.getData();
-                    int status = (int) data.get("status");
-                    if (status == 1002) {
-                        downloadUrl = (String) data.get("url");
-                        exit = true;
-                    }
-                    if (status == 1003) {
-                        exit = true;
-                        log.error("下载失败,num:{}", num);
-                        throw new RuntimeException("下载失败,num:" + num);
-                    }
-                    if (timer.intervalMinute() > 8 * 60) {
-                        exit = true;
-                        log.error("下载超时,num:{}", num);
-                        throw new RuntimeException("下载超时,num:" + num);
-                    }
-                } while (!exit);
-            }
+                Integer status = downloadProcessBean.getStatus();
+                if (Objects.nonNull(status) && status == 1002) {
+                    downloadUrl = downloadProcessBean.getUrl();
+                    exit = true;
+                }
+                if (Objects.nonNull(status) && status == 1003) {
+                    exit = true;
+                    log.error("下载失败,num:{}", num);
+                    throw new RuntimeException("下载失败,num:" + num);
+                }
+                if (timer.intervalMinute() > 8 * 60) {
+                    exit = true;
+                    log.error("下载超时,num:{}", num);
+                    throw new RuntimeException("下载超时,num:" + num);
+                }
+            } while (!exit);
 
             //开始推送到第三方服务
             if(StrUtil.isNotEmpty(downloadUrl)){
@@ -261,7 +249,7 @@ public class SceneOfflinePackagePushServiceImpl extends ServiceImpl<SceneOffline
                 params.put("downloadUrl", downloadUrl);
                 params.put("version", push.getVersion());
                 params.put("calcTime", DateExtUtil.format(scenePlusExt.getAlgorithmTime(), DateExtUtil.dateStyle8));
-                ResultData pushRes = httpClient.post2(push.getDestUrl(), params, new SuccessCallback(), new ErrorCallback());
+                httpClient.post2(push.getDestUrl(), params, new SuccessCallback(), new ErrorCallback());
             }
             push.setPushStatus(CommonSuccessStatus.SUCCESS.code());
             push.setZipPath(downloadUrl);

+ 13 - 0
src/main/resources/application-prod.yml

@@ -3,6 +3,19 @@ server:
 spring:
   application:
     name: 4dkankan-center-external
+  redis:
+    host: r-wz9owsphxqwi4ztqlf.redis.rds.aliyuncs.com
+    port: 6379
+    timeout: 6000ms
+    password: 3oo19bgh0cae2406&
+    jedis:
+      pool:
+        max-active: 10  #连接池最大连接数(使用负值表示没有限制)
+        max-idle: 10 # 连接池中的最大空闲连接
+        min-idle: 5 # 连接池中的最小空闲连接
+        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
+    lettuce:
+      shutdown-timeout: 0ms
 account:
   username: super-admin
   password: Aa123456

+ 13 - 0
src/main/resources/application.yml

@@ -3,6 +3,19 @@ server:
 spring:
   application:
     name: 4dkankan-center-external
+  redis:
+    host: 120.24.144.164
+    port: 6379
+    timeout: 6000ms
+    password: bgh0cae240
+    jedis:
+      pool:
+        max-active: 10  #连接池最大连接数(使用负值表示没有限制)
+        max-idle: 10 # 连接池中的最大空闲连接
+        min-idle: 5 # 连接池中的最小空闲连接
+        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
+    lettuce:
+      shutdown-timeout: 0ms
 account:
   username: super-admin
   password: Aa123456