|
@@ -14,6 +14,7 @@ import com.fdkankan.common.exception.BusinessException;
|
|
|
import com.fdkankan.common.util.DateExtUtil;
|
|
|
import com.fdkankan.common.util.FileUtils;
|
|
|
import com.fdkankan.common.util.SnowflakeIdGenerator;
|
|
|
+import com.fdkankan.contro.constant.RedisConstants;
|
|
|
import com.fdkankan.contro.entity.*;
|
|
|
import com.fdkankan.contro.mapper.ISceneFileBuildMapper;
|
|
|
import com.fdkankan.contro.service.*;
|
|
@@ -169,51 +170,46 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
|
}
|
|
|
|
|
|
log.info("mac:{} 准备上传文件,folderName:{}", mac, folderName);
|
|
|
- String dataSource = scenePlusService.getDataSourceLikeUnicode("/" + folderName);
|
|
|
- if(StrUtil.isNotEmpty(dataSource)){
|
|
|
- int n = dataSource.split("/").length;
|
|
|
- if(n > 1){
|
|
|
- String fileId = dataSource.split("/")[n - 2];
|
|
|
-
|
|
|
- ResponseSceneFile responseSceneFile = new ResponseSceneFile();
|
|
|
- responseSceneFile.setFileId(fileId);
|
|
|
- //可以重复上传,文件id保存50年(因为该redis工具无法设置永久保存)
|
|
|
- redisUtil.set(fileId, folderName, 1537920000);
|
|
|
- return responseSceneFile;
|
|
|
- }
|
|
|
+ ResponseSceneFile responseSceneFile = new ResponseSceneFile();
|
|
|
|
|
|
- }else {
|
|
|
- SceneFileBuild sceneFileBuild = this.findByUnicode(folderName);
|
|
|
- if(sceneFileBuild != null){
|
|
|
- String fileId = sceneFileBuild.getFileId();
|
|
|
-
|
|
|
- ResponseSceneFile responseSceneFile = new ResponseSceneFile();
|
|
|
- responseSceneFile.setFileId(fileId);
|
|
|
- //可以重复上传,文件id保存50年(因为该redis工具无法设置永久保存)
|
|
|
- redisUtil.set(fileId, folderName, 1537920000);
|
|
|
- return responseSceneFile;
|
|
|
- }
|
|
|
+ // 检测是否有生成
|
|
|
+ String fileId = redisUtil.get(String.format(RedisConstants.FOLDER_FILEID_BUILD, folderName));
|
|
|
+ if (!ObjectUtils.isEmpty(fileId)) {
|
|
|
+ responseSceneFile.setFileId(fileId);
|
|
|
+ return responseSceneFile;
|
|
|
+ }
|
|
|
+
|
|
|
+ SceneFileBuild sceneFileBuild = this.findByUnicode(folderName);
|
|
|
+ if (sceneFileBuild != null) {
|
|
|
+ fileId = sceneFileBuild.getFileId();
|
|
|
+ responseSceneFile.setFileId(fileId);
|
|
|
+ //可以重复上传,文件id保存50年(因为该redis工具无法设置永久保存)
|
|
|
+ redisUtil.set(String.format(RedisConstants.FOLDER_FILEID_BUILD, folderName), fileId);
|
|
|
+ return responseSceneFile;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加锁
|
|
|
+ long incr = redisUtil.incr(String.format(RedisConstants.FOLDER_LOCK_BUILD, folderName), 1);
|
|
|
+ if (incr > 1) {
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_5052);
|
|
|
}
|
|
|
+ redisUtil.expire(String.format(RedisConstants.FOLDER_LOCK_BUILD, folderName), 120);
|
|
|
+
|
|
|
log.info("开始新生成build数据");
|
|
|
- // 构造方法设置机器码:第0个机房的第0台机器
|
|
|
- SnowflakeIdGenerator snowflakeIdGenerator = new SnowflakeIdGenerator(0, 0);
|
|
|
- long fileId = snowflakeIdGenerator.nextId();
|
|
|
+ fileId = new SnowflakeIdGenerator(0, 0).nextId() + "";
|
|
|
log.info("新生成build数据,{}", fileId);
|
|
|
|
|
|
- SceneFileBuild sceneFileBuild = new SceneFileBuild();
|
|
|
+ sceneFileBuild = new SceneFileBuild();
|
|
|
sceneFileBuild.setChildName(mac);
|
|
|
- sceneFileBuild.setFileId(String.valueOf(fileId));
|
|
|
+ sceneFileBuild.setFileId(fileId);
|
|
|
sceneFileBuild.setUnicode(folderName);
|
|
|
- sceneFileBuild.setUploadStatus(0);
|
|
|
- sceneFileBuild.setBuildStatus(0);
|
|
|
sceneFileBuild.setTotalPicNum(Integer.valueOf(totalPicNum));
|
|
|
sceneFileBuild.setChunks(Integer.valueOf(chunks));
|
|
|
this.save(sceneFileBuild);
|
|
|
+ redisUtil.set(String.format(RedisConstants.FOLDER_FILEID_BUILD, folderName), fileId);
|
|
|
+ redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName);
|
|
|
|
|
|
- ResponseSceneFile responseSceneFile = new ResponseSceneFile();
|
|
|
- responseSceneFile.setFileId(String.valueOf(fileId));
|
|
|
- //可以重复上传,文件id保存50年(因为该redis工具无法设置永久保存)
|
|
|
- redisUtil.set(String.valueOf(fileId), folderName, 1537920000);
|
|
|
+ responseSceneFile.setFileId(fileId);
|
|
|
return responseSceneFile;
|
|
|
}
|
|
|
|
|
@@ -376,21 +372,15 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
|
}
|
|
|
String mac = strArr[0];
|
|
|
String fileId = strArr[1];
|
|
|
- Object folderNameObject = redisUtil.get(fileId);
|
|
|
- String folderName = folderNameObject == null ? null : (String)folderNameObject;
|
|
|
- if(StringUtils.isEmpty(folderName)){
|
|
|
- ScenePlus scenePlus = scenePlusService.getByFileId("/" + fileId + "/");
|
|
|
- if(scenePlus != null){
|
|
|
- ScenePlusExt plusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
|
|
|
- folderName = plusExt.getDataSource().substring(plusExt.getDataSource().lastIndexOf("/") + 1);
|
|
|
- }
|
|
|
+ String folderName = redisUtil.get(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId));
|
|
|
|
|
|
- if(StringUtils.isEmpty(folderName)){
|
|
|
- SceneFileBuild sceneFileBuild = this.findByFileId(fileId);
|
|
|
- if(sceneFileBuild != null){
|
|
|
- folderName = sceneFileBuild.getUnicode();
|
|
|
- }
|
|
|
+ if(StringUtils.isEmpty(folderName)){
|
|
|
+ SceneFileBuild fileBuild = findByFileId(fileId);
|
|
|
+ if(ObjectUtils.isEmpty(fileBuild)){
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_5012);
|
|
|
}
|
|
|
+ folderName = fileBuild.getUnicode();
|
|
|
+ redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName);
|
|
|
}
|
|
|
StringBuilder prefixBuffer = new StringBuilder(mac).append(File.separator).append(fileId).append(File.separator).append(folderName).append(File.separator);
|
|
|
|
|
@@ -434,23 +424,17 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
|
}
|
|
|
String mac = strArr[0];
|
|
|
String fileId = strArr[1];
|
|
|
- Object folderNameObject = redisUtil.get(fileId);
|
|
|
- String folderName = folderNameObject == null ? null : (String)folderNameObject;
|
|
|
- if(StringUtils.isEmpty(folderName)){
|
|
|
- ScenePlusExt scenePlusExt = scenePlusExtService.list(
|
|
|
- new LambdaQueryWrapper<ScenePlusExt>()
|
|
|
- .like(ScenePlusExt::getDataSource, "%/" + fileId + "/%")).get(0);
|
|
|
- if(scenePlusExt != null){
|
|
|
- folderName = scenePlusExt.getDataSource().substring(scenePlusExt.getDataSource().lastIndexOf("/") + 1);
|
|
|
- }
|
|
|
+ String folderName = redisUtil.get(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId));
|
|
|
|
|
|
- if(StringUtils.isEmpty(folderName)){
|
|
|
- SceneFileBuild sceneFileBuild = this.findByFileId(fileId);
|
|
|
- if(sceneFileBuild != null){
|
|
|
- folderName = sceneFileBuild.getUnicode();
|
|
|
- }
|
|
|
+ if(StringUtils.isEmpty(folderName)){
|
|
|
+ SceneFileBuild fileBuild = findByFileId(fileId);
|
|
|
+ if(ObjectUtils.isEmpty(fileBuild)){
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_5012);
|
|
|
}
|
|
|
+ folderName = fileBuild.getUnicode();
|
|
|
+ redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName);
|
|
|
}
|
|
|
+
|
|
|
//判断 是否为激光相机
|
|
|
Camera camera = cameraService.getByChildName(mac);
|
|
|
CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
|