Forráskód Böngészése

场景升级失败回滚

dengsixing 2 éve
szülő
commit
9375b5c803

+ 6 - 0
src/main/java/com/fdkankan/scene/entity/SceneRepairLog.java

@@ -53,6 +53,12 @@ public class SceneRepairLog implements Serializable {
     private String reason;
 
     /**
+     * 是否已回滚(0-否,1-是)
+     */
+    @TableField("is_rollback")
+    private Integer isRollback;
+
+    /**
      * 迁移耗时
      */
     @TableField("consum_time")

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

@@ -13,4 +13,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ISceneEditInfoService extends IService<SceneEditInfo> {
 
+    SceneEditInfo getByScenePlusId(long scenePlusId);
+
+
 }

+ 6 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.scene.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.mapper.ISceneEditInfoMapper;
 import com.fdkankan.scene.service.ISceneEditInfoService;
@@ -17,4 +18,9 @@ import org.springframework.stereotype.Service;
 @Service
 public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper, SceneEditInfo> implements ISceneEditInfoService {
 
+    @Override
+    public SceneEditInfo getByScenePlusId(long scenePlusId) {
+        return this.getOne(new LambdaQueryWrapper<SceneEditInfo>()
+            .eq(SceneEditInfo::getScenePlusId, scenePlusId));
+    }
 }

+ 26 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneUpgradeToV4Service.java

@@ -11,6 +11,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.RecStatus;
 import com.fdkankan.model.utils.CreateHouseJsonUtil;
+import com.fdkankan.scene.entity.ScenePlus;
+import com.fdkankan.scene.service.IScenePlusService;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
@@ -109,6 +111,8 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
     private IScenePlusExtService scenePlusExtService;
     @Resource
     private FYunFileServiceInterface fYunFileService;
+    @Autowired
+    private IScenePlusService scenePlusService;
 
     @Override
     public void upgrade(long sceneProId, boolean reUpgrade)  throws Exception{
@@ -476,6 +480,8 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
         }catch (Exception e){
             log.error(e.getMessage(), e);
 
+            this.rollback(num);
+
             //完成数据库操作更新进度条为0,状态失败
             this.updateProgress(num, 0, ProgressStatus.FAIL.code());
 
@@ -488,6 +494,26 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
         }
     }
 
+    private void rollback(String num){
+
+        //还原scenePro的升级状态
+        ScenePro scenePro = sceneProService.findBySceneNum(num);
+        scenePro.setIsUpgrade(CommonStatus.NO.code().intValue());
+        sceneProService.updateById(scenePro);
+
+        //删除v4数据
+        ScenePlus scenePlus = scenePlusService.getByNum(num);
+        SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+        sceneEditControlsService.remove(new LambdaQueryWrapper<SceneEditControls>()
+            .eq(SceneEditControls::getEditInfoId, sceneEditInfo.getId()));
+        sceneEditInfoExtService.remove(new LambdaQueryWrapper<SceneEditInfoExt>()
+            .eq(SceneEditInfoExt::getEditInfoId, sceneEditInfo.getId()));
+        sceneEditInfoService.removeById(sceneEditInfo.getId());
+        scenePlusExtService.remove(new LambdaQueryWrapper<ScenePlusExt>()
+            .eq(ScenePlusExt::getPlusId, scenePlus.getId()));
+        scenePlusService.removeById(scenePlus.getId());
+    }
+
     private void copyFileOss(String num, AtomicInteger completeCnt, AtomicInteger count, List<String> keyList, String sourcePath, String targetPah){
         if(CollUtil.isEmpty(keyList))
             return;