Просмотр исходного кода

Merge branch 'release-相机上传防重复提交' into test

# Conflicts:
#	src/main/java/com/fdkankan/contro/service/impl/RelocationInitServiceImpl.java
#	src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java
dengsixing 1 неделя назад
Родитель
Сommit
1249f5f74c

+ 2 - 0
src/main/java/com/fdkankan/contro/service/IBuildService.java

@@ -11,4 +11,6 @@ public interface IBuildService {
 
     void writeDataJson(BuildSceneCallMessage message, JSONObject dataFdage, Map<String, String> dataMap, Map<String, Object> dataExtras);
 
+    void lockUnicode(String unicode, int lockTime);
+
 }

+ 17 - 0
src/main/java/com/fdkankan/contro/service/impl/BuildServiceImpl.java

@@ -3,13 +3,18 @@ package com.fdkankan.contro.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.contro.service.IBuildService;
 import com.fdkankan.contro.util.ScenePluginUtil;
 import com.fdkankan.model.enums.ModelTypeEnums;
 import com.fdkankan.model.utils.ComputerUtil;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.fdkankan.redis.constant.RedisLockKey;
+import com.fdkankan.redis.util.RedisLockUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
@@ -20,6 +25,9 @@ import java.util.Objects;
 @Service
 public class BuildServiceImpl implements IBuildService {
 
+    @Autowired
+    private RedisLockUtil lockUtil;
+
     @Override
     public Map<String, String> getTypeString(String cameraType, String algorithm, String resolution, JSONObject fdageData){
         Map<String, String> map = new HashMap<>();
@@ -115,4 +123,13 @@ public class BuildServiceImpl implements IBuildService {
         }
         ComputerUtil.createProjectAndDataFile(message.getPath(), message.getSceneNum(), dataMap.get("splitType"), dataMap.get("skyboxType"),null, dataExtras);
     }
+
+    @Override
+    public void lockUnicode(String unicode, int lockTime) {
+        String lockKey = "notice:build:unicode:" + unicode;
+        boolean lock = lockUtil.lock(lockKey, lockTime);
+        if(!lock){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_2001);
+        }
+    }
 }

+ 10 - 0
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -208,6 +208,8 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     @Autowired
     private IWbService wbService;
     @Autowired
+    private IBuildService buildService;
+    @Autowired
     private IRelocationBindService relocationBindService;
     @Autowired
     private ISceneZxgdService sceneZxgdService;
@@ -712,6 +714,10 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             folderName = fileBuild.getUnicode();
             redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName, 2 * 24 * 60 * 60);
         }
+
+        //由于刘欢说相机网络不好,有时候会没接收到接口的返回信息,所以会触发重发机制,所以这里增加了防重复提交锁,锁住unicode两分钟,
+        buildService.lockUnicode(folderName, 120);
+
         sceneUploadCountService.resetCountByUuid(folderName);
 
         StringBuilder prefixBuffer = new StringBuilder(mac).append(File.separator).append(fileId).append(File.separator).append(folderName).append(File.separator);
@@ -863,6 +869,10 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName);
         }
 
+        //由于刘欢说相机网络不好,有时候会没接收到接口的返回信息,所以会触发重发机制,所以这里增加了防重复提交锁,锁住unicode两分钟,
+        // 这个方案是徐总同意了,详见计算失败群2026年3月27日12.04分聊天记录
+        buildService.lockUnicode(folderName, 120);
+
         sceneUploadCountService.resetCountByUuid(folderName);
 
         //云目录

+ 7 - 0
src/main/java/com/fdkankan/contro/service/impl/SceneUploadUserLogServiceImpl.java

@@ -1,5 +1,7 @@
 package com.fdkankan.contro.service.impl;
 
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.contro.entity.SceneUploadUserLog;
 import com.fdkankan.contro.entity.User;
@@ -45,4 +47,9 @@ public class SceneUploadUserLogServiceImpl extends ServiceImpl<ISceneUploadUserL
         }
         this.save(sceneUploadUserLog);
     }
+
+    public static void main(String[] args) {
+        JSONObject jsonObject = JSON.parseObject(FileUtil.readUtf8String("D:\\Downloads\\data.fdage"));
+        System.out.println(jsonObject.getLong("account"));
+    }
 }