dengsixing 3 年之前
父節點
當前提交
5180a455d5

+ 6 - 0
pom.xml

@@ -143,6 +143,12 @@
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.dtflys.forest</groupId>
+            <artifactId>forest-spring-boot-starter</artifactId>
+            <version>1.5.19</version>
+        </dependency>
+
 
     </dependencies>
 

+ 2 - 0
src/main/java/com/fdkankan/repair/DataRepairApplication.java

@@ -1,5 +1,6 @@
 package com.fdkankan.repair;
 
+import com.dtflys.forest.springboot.annotation.ForestScan;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -15,6 +16,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
 @MapperScan("com.fdkankan.**.mapper")
 @EnableAsync
 @EnableDiscoveryClient
+@ForestScan(basePackages = "com.fdkankan.repair.httpclient")
 public class DataRepairApplication {
 
     public static void main(String[] args) {

+ 27 - 0
src/main/java/com/fdkankan/repair/bean/RequestSceneProV4.java

@@ -0,0 +1,27 @@
+package com.fdkankan.repair.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/24
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class RequestSceneProV4 {
+
+    private Long id;
+
+    private String webSite;
+
+
+}

+ 28 - 0
src/main/java/com/fdkankan/repair/callback/FdkkMiniReqErrorCallback.java

@@ -0,0 +1,28 @@
+package com.fdkankan.repair.callback;
+
+import com.dtflys.forest.callback.OnError;
+import com.dtflys.forest.exceptions.ForestRuntimeException;
+import com.dtflys.forest.http.ForestRequest;
+import com.dtflys.forest.http.ForestResponse;
+import com.fdkankan.common.constant.ServerCode;
+import com.fdkankan.common.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/25
+ **/
+@Slf4j
+public class FdkkMiniReqErrorCallback implements OnError {
+
+    @Override
+    public void onError(ForestRuntimeException e, ForestRequest forestRequest,
+        ForestResponse forestResponse) {
+        log.error("跨服务请求失败!", e);
+        throw new BusinessException(ServerCode.FEIGN_REQUEST_FAILD);
+    }
+}

+ 25 - 0
src/main/java/com/fdkankan/repair/callback/FdkkMiniReqSuccessCallback.java

@@ -0,0 +1,25 @@
+package com.fdkankan.repair.callback;
+
+import com.dtflys.forest.callback.OnSuccess;
+import com.dtflys.forest.http.ForestRequest;
+import com.dtflys.forest.http.ForestResponse;
+import com.fdkankan.common.response.Result;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/25
+ **/
+@Slf4j
+public class FdkkMiniReqSuccessCallback implements OnSuccess<Result> {
+
+    @Override
+    public void onSuccess(Result result, ForestRequest forestRequest,
+        ForestResponse forestResponse) {
+        log.info("请求v3成功,url:{},result:{}", forestRequest.getUrl(), forestResponse.getContent());
+    }
+}

+ 50 - 0
src/main/java/com/fdkankan/repair/callback/FdkkMiniReqSuccessCondition.java

@@ -0,0 +1,50 @@
+package com.fdkankan.repair.callback;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.dtflys.forest.callback.SuccessWhen;
+import com.dtflys.forest.http.ForestRequest;
+import com.dtflys.forest.http.ForestResponse;
+import com.fdkankan.common.constant.ServerCode;
+import com.fdkankan.common.response.Result;
+
+/**
+ * <p>
+ *  自定义成功/失败条件实现类
+ *  需要实现 SuccessWhen 接口
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/25
+ **/
+
+public class FdkkMiniReqSuccessCondition implements SuccessWhen {
+
+    /**
+     * 请求成功条件
+     * @param req Forest请求对象
+     * @param res Forest响应对象
+     * @return 是否成功,true: 请求成功,false: 请求失败
+     */
+    @Override
+    public boolean successWhen(ForestRequest req, ForestResponse res) {
+        boolean reqStatus = res.noException() &&   // 请求过程没有异常
+            res.statusOk() &&     // 并且状态码在 100 ~ 399 范围内
+            res.statusIsNot(203);
+        if(!reqStatus){
+            return reqStatus;
+        }
+
+        String content = res.getContent();
+        if(StrUtil.isEmpty(content)){
+            reqStatus = false;
+            return reqStatus;
+        }
+        Result result = JSON.parseObject(content, Result.class);
+        if(result.getCode() != ServerCode.SUCCESS.code()){
+            reqStatus = false;
+            return reqStatus;
+        }
+        return true;
+    }
+}

+ 6 - 1
src/main/java/com/fdkankan/repair/controller/SceneRepairController.java

@@ -9,10 +9,12 @@ import com.fdkankan.fyun.oss.UploadToOssUtil;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.repair.bean.RequestSceneProV4;
 import com.fdkankan.repair.bean.SceneRepairParamVO;
 import com.fdkankan.repair.bean.SceneUpgradeProgressBean;
 import com.fdkankan.repair.constant.ProgressStatus;
 import com.fdkankan.repair.entity.ScenePro;
+import com.fdkankan.repair.httpclient.FdkankanMiniClient;
 import com.fdkankan.repair.service.ISceneProService;
 import com.fdkankan.repair.service.ISceneResourceService;
 import com.fdkankan.repair.service.impl.SceneRepairService;
@@ -59,6 +61,10 @@ public class SceneRepairController {
     private RedisUtil redisUtil;
     @Autowired
     private RabbitMqProducer rabbitMqProducer;
+    @Autowired
+    private FdkankanMiniClient fdkankanMiniClient;
+    @Value("${http.host.4dkankanMini}")
+    private String fkankanMiniHost;
 
     /**
      * 最大线程数
@@ -69,7 +75,6 @@ public class SceneRepairController {
     @GetMapping("/test")
     public ResultData test(){
         //17264
-        rabbitMqProducer.sendByWorkQueue(upgradeToV4, 17264);
         return ResultData.ok();
     }
 

+ 31 - 0
src/main/java/com/fdkankan/repair/httpclient/FdkankanMiniClient.java

@@ -0,0 +1,31 @@
+package com.fdkankan.repair.httpclient;
+
+import cn.hutool.http.ContentType;
+import com.dtflys.forest.annotation.Address;
+import com.dtflys.forest.annotation.Body;
+import com.dtflys.forest.annotation.Get;
+import com.dtflys.forest.annotation.Post;
+import com.dtflys.forest.annotation.Var;
+import com.dtflys.forest.callback.OnError;
+import com.dtflys.forest.callback.OnSuccess;
+import com.fdkankan.common.response.Result;
+import com.fdkankan.repair.bean.RequestSceneProV4;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/24
+ **/
+public interface FdkankanMiniClient {
+
+    @Post(
+        url = "/api/scene/upgradeToV4ResultSync",
+        contentType = "application/json"
+    )
+    @Address(host = "{0}")
+    Result upgradeToV4ResultSync(String host, @Body RequestSceneProV4 param, OnSuccess<Result> onSuccess, OnError onError);
+
+}

+ 17 - 2
src/main/java/com/fdkankan/repair/service/impl/SceneUpgradeToV4Service.java

@@ -17,11 +17,15 @@ import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.MatrixToImageWriterUtil;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
 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.repair.bean.RequestSceneProV4;
 import com.fdkankan.repair.bean.SceneEditControlsBean;
 import com.fdkankan.repair.bean.SceneJsonBean;
 import com.fdkankan.repair.bean.SceneUpgradeProgressBean;
+import com.fdkankan.repair.callback.FdkkMiniReqErrorCallback;
+import com.fdkankan.repair.callback.FdkkMiniReqSuccessCallback;
 import com.fdkankan.repair.constant.ProgressStatus;
 import com.fdkankan.repair.entity.SceneEditControls;
 import com.fdkankan.repair.entity.SceneEditInfo;
@@ -32,6 +36,7 @@ import com.fdkankan.repair.entity.SceneProEdit;
 import com.fdkankan.repair.entity.SceneProEditExt;
 import com.fdkankan.repair.entity.SceneProExt;
 import com.fdkankan.repair.entity.SceneRepairLog;
+import com.fdkankan.repair.httpclient.FdkankanMiniClient;
 import com.fdkankan.repair.service.ISceneEditControlsService;
 import com.fdkankan.repair.service.ISceneEditInfoExtService;
 import com.fdkankan.repair.service.ISceneEditInfoService;
@@ -78,6 +83,8 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
     private String sceneProNewUrl;
     @Value("${oss.prefix.url}")
     private String ossUrlPrefix;
+    @Value("${http.host.4dkankanMini}")
+    private String fkankanMiniHost;
 
 
     @Autowired
@@ -106,6 +113,8 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
     private UploadToOssUtil uploadToOssUtil;
     @Autowired
     RedisUtil redisUtil;
+    @Autowired
+    FdkankanMiniClient fdkankanMiniClient;
 
     private static final String[] prefixArr = new String[]{
         "data/data%s/",
@@ -475,8 +484,11 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
 
             this.updateProgress(num, 100, ProgressStatus.SUCCESS.code());
 
-            // TODO: 2022/4/22 调用v3接口回写数据
-
+            // 调用v3接口回写数据
+            fdkankanMiniClient.upgradeToV4ResultSync(fkankanMiniHost,
+                RequestSceneProV4.builder().id(sceneProId).webSite(scenePro.getWebSite()).build(),
+                new FdkkMiniReqSuccessCallback(), new FdkkMiniReqErrorCallback()
+            );
 
         }catch (Exception e){
             log.error(e.getMessage(), e);
@@ -486,6 +498,9 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
             sceneRepairLog.setReason(ExceptionUtil.stacktraceToString(e));
             sceneRepairLog.setConsumTime(consumTime);
             sceneRepairLogService.updateById(sceneRepairLog);
+        } finally {
+            String lockKey = String.format(RedisLockKey.LOCK_SCENE_UPGRADE_V4, num);
+            redisUtil.del(lockKey);
         }
     }