|
@@ -24,9 +24,7 @@ import com.fdkankan.common.exception.BusinessException;
|
|
import com.fdkankan.common.util.*;
|
|
import com.fdkankan.common.util.*;
|
|
import com.fdkankan.contro.bean.SendCallAlgorithmDetail;
|
|
import com.fdkankan.contro.bean.SendCallAlgorithmDetail;
|
|
import com.fdkankan.contro.common.Result;
|
|
import com.fdkankan.contro.common.Result;
|
|
-import com.fdkankan.contro.constant.ApiConstant;
|
|
|
|
-import com.fdkankan.contro.constant.RedisConstants;
|
|
|
|
-import com.fdkankan.contro.constant.ZipConstant;
|
|
|
|
|
|
+import com.fdkankan.contro.constant.*;
|
|
import com.fdkankan.contro.entity.*;
|
|
import com.fdkankan.contro.entity.*;
|
|
import com.fdkankan.contro.enums.CameraTypeEnum;
|
|
import com.fdkankan.contro.enums.CameraTypeEnum;
|
|
import com.fdkankan.contro.httpclient.MyClient;
|
|
import com.fdkankan.contro.httpclient.MyClient;
|
|
@@ -727,6 +725,12 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
String buildType = "V2";
|
|
String buildType = "V2";
|
|
Long cameraType = 10L;
|
|
Long cameraType = 10L;
|
|
|
|
|
|
|
|
+ Set<String> notExistsFiles = commonService.checkUploadFile(mac, fileId, folderName, fYunFileConfig.getFyunType());
|
|
|
|
+ if(CollUtil.isNotEmpty(notExistsFiles)){
|
|
|
|
+ log.error("文件缺失, unicode:{}, 缺失文件:{}", folderName, notExistsFiles);
|
|
|
|
+ throw new BusinessException(ModelingControlRespCode.FILE_EMPTY.code(), ModelingControlRespCode.FILE_EMPTY.message());
|
|
|
|
+ }
|
|
|
|
+
|
|
if(!fYunFileService.fileExist(ConstantFilePath.OSS_PREFIX + prefixBuffer + "data.fdage")){
|
|
if(!fYunFileService.fileExist(ConstantFilePath.OSS_PREFIX + prefixBuffer + "data.fdage")){
|
|
log.error("data.fdage文件不存在");
|
|
log.error("data.fdage文件不存在");
|
|
throw new BusinessException(CameraConstant.FAILURE_6009);
|
|
throw new BusinessException(CameraConstant.FAILURE_6009);
|
|
@@ -879,6 +883,13 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
//云目录
|
|
//云目录
|
|
StringBuilder prefixBuffer = new StringBuilder(mac).append(File.separator).append(fileId).append(File.separator).append(folderName).append(File.separator);
|
|
StringBuilder prefixBuffer = new StringBuilder(mac).append(File.separator).append(fileId).append(File.separator).append(folderName).append(File.separator);
|
|
|
|
|
|
|
|
+ Set<String> notExistsFiles = commonService.checkUploadFile(mac, fileId, folderName, fYunFileConfig.getFyunType());
|
|
|
|
+ if(CollUtil.isNotEmpty(notExistsFiles)){
|
|
|
|
+ log.error("文件缺失, unicode:{}, 缺失文件:{}", folderName, notExistsFiles);
|
|
|
|
+ throw new BusinessException(ModelingControlRespCode.FILE_EMPTY.code(), ModelingControlRespCode.FILE_EMPTY.message());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
if(!fYunFileService.fileExist(ConstantFilePath.OSS_PREFIX + prefixBuffer + "data.fdage")){
|
|
if(!fYunFileService.fileExist(ConstantFilePath.OSS_PREFIX + prefixBuffer + "data.fdage")){
|
|
log.error("data.fdage文件不存在");
|
|
log.error("data.fdage文件不存在");
|
|
throw new BusinessException(CameraConstant.FAILURE_6009);
|
|
throw new BusinessException(CameraConstant.FAILURE_6009);
|
|
@@ -2036,7 +2047,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
|
|
|
|
log.info("upload-params: "+params);
|
|
log.info("upload-params: "+params);
|
|
if (StringUtils.isEmpty(params)){
|
|
if (StringUtils.isEmpty(params)){
|
|
- throw new BusinessException(ErrorCode.PARAM_REQUIRED);
|
|
|
|
|
|
+ throw new BusinessException(ErrorCode.PARAM_REQUIRED);
|
|
}
|
|
}
|
|
params = params.replaceAll("%2B", "+");
|
|
params = params.replaceAll("%2B", "+");
|
|
Base64 base64 = new Base64();
|
|
Base64 base64 = new Base64();
|
|
@@ -2048,7 +2059,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
log.info("upload-params解密结果:" + restr);
|
|
log.info("upload-params解密结果:" + restr);
|
|
String[] strArr = restr.split(SPLICE);
|
|
String[] strArr = restr.split(SPLICE);
|
|
if (strArr.length != 6) {
|
|
if (strArr.length != 6) {
|
|
- throw new BusinessException(ErrorCode.PARAM_REQUIRED);
|
|
|
|
|
|
+ throw new BusinessException(ErrorCode.PARAM_REQUIRED);
|
|
}
|
|
}
|
|
String mac = strArr[0];
|
|
String mac = strArr[0];
|
|
String fileId = strArr[1];
|
|
String fileId = strArr[1];
|
|
@@ -2060,24 +2071,24 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
|
|
|
|
ResultData result = null;
|
|
ResultData result = null;
|
|
if (file.isEmpty()){
|
|
if (file.isEmpty()){
|
|
- log.error("文件为空。");
|
|
|
|
- throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"文件为空。");
|
|
|
|
|
|
+ log.error("文件为空。");
|
|
|
|
+ throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"文件为空。");
|
|
}
|
|
}
|
|
if (StringUtils.isEmpty(fileId)){
|
|
if (StringUtils.isEmpty(fileId)){
|
|
- log.error("文件Id为空。");
|
|
|
|
- throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"文件Id为空。");
|
|
|
|
|
|
+ log.error("文件Id为空。");
|
|
|
|
+ throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"文件Id为空。");
|
|
}
|
|
}
|
|
if (picNum == null){
|
|
if (picNum == null){
|
|
- log.error("照片数目为空。");
|
|
|
|
- throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"照片数目为空。");
|
|
|
|
|
|
+ log.error("照片数目为空。");
|
|
|
|
+ throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"照片数目为空。");
|
|
}
|
|
}
|
|
if (StringUtils.isEmpty(mac)){
|
|
if (StringUtils.isEmpty(mac)){
|
|
- log.error("mac为空。");
|
|
|
|
- throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"mac为空。");
|
|
|
|
|
|
+ log.error("mac为空。");
|
|
|
|
+ throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"mac为空。");
|
|
}
|
|
}
|
|
if (StringUtils.isEmpty(md5)){
|
|
if (StringUtils.isEmpty(md5)){
|
|
- log.error("md5为空。");
|
|
|
|
- throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"md5为空。");
|
|
|
|
|
|
+ log.error("md5为空。");
|
|
|
|
+ throw new BusinessException(ErrorCode.PARAM_REQUIRED.code(),"md5为空。");
|
|
}
|
|
}
|
|
long size = file.getSize();
|
|
long size = file.getSize();
|
|
log.info("mac:{}, fileId:{}, picNum:{}, md5:{}, chunk:{}", mac, fileId, picNum, md5, chunk);
|
|
log.info("mac:{}, fileId:{}, picNum:{}, md5:{}, chunk:{}", mac, fileId, picNum, md5, chunk);
|
|
@@ -2088,13 +2099,13 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
// 获取文件的后缀名
|
|
// 获取文件的后缀名
|
|
String folderName = redisUtil.get(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId));
|
|
String folderName = redisUtil.get(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId));
|
|
if(StringUtils.isEmpty(folderName)){
|
|
if(StringUtils.isEmpty(folderName)){
|
|
- SceneFileBuild fileBuild = findByFileId(fileId);
|
|
|
|
- if(ObjectUtils.isEmpty(fileBuild)){
|
|
|
|
- log.error("数据不正常,fileBuild没找到");
|
|
|
|
- throw new BusinessException(ErrorCode.FAILURE_CODE_5012);
|
|
|
|
- }
|
|
|
|
- folderName = fileBuild.getUnicode();
|
|
|
|
- redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName,2 * 24 * 60 * 60);
|
|
|
|
|
|
+ SceneFileBuild fileBuild = findByFileId(fileId);
|
|
|
|
+ if(ObjectUtils.isEmpty(fileBuild)){
|
|
|
|
+ log.error("数据不正常,fileBuild没找到");
|
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_5012);
|
|
|
|
+ }
|
|
|
|
+ folderName = fileBuild.getUnicode();
|
|
|
|
+ redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName,2 * 24 * 60 * 60);
|
|
}
|
|
}
|
|
// 1. 判断该文件是否已经上传过
|
|
// 1. 判断该文件是否已经上传过
|
|
// 2. 如果已经上传过,判断MD5值和文件大小是否相等。如果相等,更新数据记录。如果不相等,删除该文件,重新上传。
|
|
// 2. 如果已经上传过,判断MD5值和文件大小是否相等。如果相等,更新数据记录。如果不相等,删除该文件,重新上传。
|
|
@@ -2105,87 +2116,91 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
|
|
.concat(filePath).concat(File.separator).concat(dir).concat(fileName);
|
|
.concat(filePath).concat(File.separator).concat(dir).concat(fileName);
|
|
log.info("yunFilePath:{}", yunFilePath);
|
|
log.info("yunFilePath:{}", yunFilePath);
|
|
|
|
|
|
|
|
+ String key = RedisKeyExt.CAM_FILE_LIST.replace("@unicode@", folderName);
|
|
|
|
+ String value = size + "_" + fileName;
|
|
boolean needUpload = false;
|
|
boolean needUpload = false;
|
|
File yunFile = new File(yunFilePath);
|
|
File yunFile = new File(yunFilePath);
|
|
if (yunFile.exists()){
|
|
if (yunFile.exists()){
|
|
- String fileMD5 = FileMd5Util.getFileMD5(yunFile);
|
|
|
|
- if (md5.equals(fileMD5) && yunFile.length() == size){
|
|
|
|
- log.info("文件已存在,MD5和文件大小一致。");
|
|
|
|
- SceneFileUpload uploadEntity = sceneFileUploadService.findByFileIdAndChunk(fileId, Integer.valueOf(chunk));
|
|
|
|
- if (uploadEntity != null){
|
|
|
|
- uploadEntity.setSize((int) size);
|
|
|
|
- uploadEntity.setMd5(md5);
|
|
|
|
- uploadEntity.setFilePath(yunFilePath);
|
|
|
|
- uploadEntity.setFileSourceName(fileName);
|
|
|
|
- uploadEntity.setUploadStatus(1);
|
|
|
|
- sceneFileUploadService.updateById(uploadEntity);
|
|
|
|
- }else{
|
|
|
|
- SceneFileUpload sceneFileUploadEntity = new SceneFileUpload();
|
|
|
|
- sceneFileUploadEntity.setSize((int) size);
|
|
|
|
- sceneFileUploadEntity.setMd5(md5);
|
|
|
|
- sceneFileUploadEntity.setFilePath(yunFilePath.toString());
|
|
|
|
- sceneFileUploadEntity.setFileSourceName(fileName);
|
|
|
|
- sceneFileUploadEntity.setUploadStatus(1);
|
|
|
|
- sceneFileUploadEntity.setFileId(fileId);
|
|
|
|
- sceneFileUploadEntity.setChunk(Integer.valueOf(chunk));
|
|
|
|
- sceneFileUploadService.save(sceneFileUploadEntity);
|
|
|
|
- }
|
|
|
|
- result = ResultData.ok();
|
|
|
|
- }else if (!md5.equals(fileMD5)) {
|
|
|
|
- log.error("文件已上传,上传MD5:"+md5+",服务器MD5:"+fileMD5+"。不一致。上传失败");
|
|
|
|
- FileUtils.delFile(yunFilePath.toString());
|
|
|
|
- needUpload = true;
|
|
|
|
- }else if (yunFile.length() != size){
|
|
|
|
- log.error("文件已上传,文件大小不一致。上传失败");
|
|
|
|
- FileUtils.delFile(yunFilePath);
|
|
|
|
- needUpload = true;
|
|
|
|
- }
|
|
|
|
|
|
+ String fileMD5 = FileMd5Util.getFileMD5(yunFile);
|
|
|
|
+ if (md5.equals(fileMD5) && yunFile.length() == size){
|
|
|
|
+ log.info("文件已存在,MD5和文件大小一致。");
|
|
|
|
+ SceneFileUpload uploadEntity = sceneFileUploadService.findByFileIdAndChunk(fileId, Integer.valueOf(chunk));
|
|
|
|
+ if (uploadEntity != null){
|
|
|
|
+ uploadEntity.setSize((int) size);
|
|
|
|
+ uploadEntity.setMd5(md5);
|
|
|
|
+ uploadEntity.setFilePath(yunFilePath);
|
|
|
|
+ uploadEntity.setFileSourceName(fileName);
|
|
|
|
+ uploadEntity.setUploadStatus(1);
|
|
|
|
+ sceneFileUploadService.updateById(uploadEntity);
|
|
|
|
+ }else{
|
|
|
|
+ SceneFileUpload sceneFileUploadEntity = new SceneFileUpload();
|
|
|
|
+ sceneFileUploadEntity.setSize((int) size);
|
|
|
|
+ sceneFileUploadEntity.setMd5(md5);
|
|
|
|
+ sceneFileUploadEntity.setFilePath(yunFilePath.toString());
|
|
|
|
+ sceneFileUploadEntity.setFileSourceName(fileName);
|
|
|
|
+ sceneFileUploadEntity.setUploadStatus(1);
|
|
|
|
+ sceneFileUploadEntity.setFileId(fileId);
|
|
|
|
+ sceneFileUploadEntity.setChunk(Integer.valueOf(chunk));
|
|
|
|
+ sceneFileUploadService.save(sceneFileUploadEntity);
|
|
|
|
+ }
|
|
|
|
+ redisUtil.sSet(key, value);
|
|
|
|
+
|
|
|
|
+ result = ResultData.ok();
|
|
|
|
+ }else if (!md5.equals(fileMD5)) {
|
|
|
|
+ log.warn("文件已上传,上传MD5:"+md5+",服务器MD5:"+fileMD5+"。不一致。上传失败");
|
|
|
|
+ FileUtils.delFile(yunFilePath.toString());
|
|
|
|
+ needUpload = true;
|
|
|
|
+ }else if (yunFile.length() != size){
|
|
|
|
+ log.warn("文件已上传,文件大小不一致。上传失败");
|
|
|
|
+ FileUtils.delFile(yunFilePath);
|
|
|
|
+ needUpload = true;
|
|
|
|
+ }
|
|
}else {
|
|
}else {
|
|
- log.error("文件不存在,需要重新上传");
|
|
|
|
- needUpload = true;
|
|
|
|
|
|
+ log.info("文件不存在,需要重新上传");
|
|
|
|
+ needUpload = true;
|
|
}
|
|
}
|
|
|
|
|
|
// 4. 上传成功后,校验MD5和文件大小是否相等
|
|
// 4. 上传成功后,校验MD5和文件大小是否相等
|
|
// 5. 如果相等,更新数据记录。如果不相等,返回上传失败结果。
|
|
// 5. 如果相等,更新数据记录。如果不相等,返回上传失败结果。
|
|
try {
|
|
try {
|
|
- if (needUpload){
|
|
|
|
- fYunFileService.uploadFile(file.getInputStream(),ConstantFilePath.OSS_PREFIX.concat(filePath).concat(File.separator).concat(dir).concat(fileName));
|
|
|
|
- File uploadFile = new File(yunFilePath);
|
|
|
|
- String fileMD5 = FileMd5Util.getFileMD5(uploadFile);
|
|
|
|
-
|
|
|
|
- SceneFileUpload sceneFileUploadEntity = new SceneFileUpload();
|
|
|
|
- sceneFileUploadEntity.setSize((int) size);
|
|
|
|
- sceneFileUploadEntity.setMd5(md5);
|
|
|
|
- sceneFileUploadEntity.setFilePath(yunFilePath);
|
|
|
|
- sceneFileUploadEntity.setFileSourceName(fileName);
|
|
|
|
- sceneFileUploadEntity.setFileId(fileId);
|
|
|
|
- sceneFileUploadEntity.setChunk(Integer.valueOf(chunk));
|
|
|
|
-
|
|
|
|
- if (md5.equals(fileMD5) && uploadFile.length() == size){
|
|
|
|
- log.info("文件已上传,MD5和文件大小一致。上传成功");
|
|
|
|
-
|
|
|
|
- sceneFileUploadEntity.setUploadStatus(1);
|
|
|
|
- sceneFileUploadService.save(sceneFileUploadEntity);
|
|
|
|
- result = ResultData.ok();
|
|
|
|
- }else if (!md5.equals(fileMD5)) {
|
|
|
|
- log.error("文件已上传,上传MD5:"+md5+",服务器MD5:"+fileMD5+"。不一致。上传失败");
|
|
|
|
- sceneFileUploadEntity.setUploadStatus(-1);
|
|
|
|
- sceneFileUploadService.save(sceneFileUploadEntity);
|
|
|
|
- result = ResultData.error(ErrorCode.SYSTEM_ERROR,"上传失败, 请重新上传。");
|
|
|
|
- }else if (uploadFile.length() != size){
|
|
|
|
- log.error("文件已上传,文件大小不一致。上传失败");
|
|
|
|
- sceneFileUploadEntity.setUploadStatus(-1);
|
|
|
|
- sceneFileUploadService.save(sceneFileUploadEntity);
|
|
|
|
- result = ResultData.error(ErrorCode.SYSTEM_ERROR,"上传失败, 请重新上传。");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ if (needUpload){
|
|
|
|
+ fYunFileService.uploadFile(file.getInputStream(),ConstantFilePath.OSS_PREFIX.concat(filePath).concat(File.separator).concat(dir).concat(fileName));
|
|
|
|
+ File uploadFile = new File(yunFilePath);
|
|
|
|
+ String fileMD5 = FileMd5Util.getFileMD5(uploadFile);
|
|
|
|
+
|
|
|
|
+ SceneFileUpload sceneFileUploadEntity = new SceneFileUpload();
|
|
|
|
+ sceneFileUploadEntity.setSize((int) size);
|
|
|
|
+ sceneFileUploadEntity.setMd5(md5);
|
|
|
|
+ sceneFileUploadEntity.setFilePath(yunFilePath);
|
|
|
|
+ sceneFileUploadEntity.setFileSourceName(fileName);
|
|
|
|
+ sceneFileUploadEntity.setFileId(fileId);
|
|
|
|
+ sceneFileUploadEntity.setChunk(Integer.valueOf(chunk));
|
|
|
|
+
|
|
|
|
+ if (md5.equals(fileMD5) && uploadFile.length() == size){
|
|
|
|
+ log.info("文件已上传,MD5和文件大小一致。上传成功");
|
|
|
|
+ sceneFileUploadEntity.setUploadStatus(1);
|
|
|
|
+ sceneFileUploadService.save(sceneFileUploadEntity);
|
|
|
|
+ redisUtil.sSet(key, value);
|
|
|
|
+ result = ResultData.ok();
|
|
|
|
+ }else if (!md5.equals(fileMD5)) {
|
|
|
|
+ log.error("文件已上传,上传MD5:"+md5+",服务器MD5:"+fileMD5+"。不一致。上传失败");
|
|
|
|
+ sceneFileUploadEntity.setUploadStatus(-1);
|
|
|
|
+ sceneFileUploadService.save(sceneFileUploadEntity);
|
|
|
|
+ result = ResultData.error(ErrorCode.SYSTEM_ERROR,"上传失败, 请重新上传。");
|
|
|
|
+ }else if (uploadFile.length() != size){
|
|
|
|
+ log.error("文件已上传,文件大小不一致。上传失败");
|
|
|
|
+ sceneFileUploadEntity.setUploadStatus(-1);
|
|
|
|
+ sceneFileUploadService.save(sceneFileUploadEntity);
|
|
|
|
+ result = ResultData.error(ErrorCode.SYSTEM_ERROR,"上传失败, 请重新上传。");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}catch (IllegalStateException | IOException e) {
|
|
}catch (IllegalStateException | IOException e) {
|
|
- log.error("上传失败, 请重新上传,md5:{},chunk:{}", md5, chunk);
|
|
|
|
- log.error("上传失败", e);
|
|
|
|
- result = ResultData.error(ErrorCode.SYSTEM_ERROR,"上传失败, 请重新上传。");
|
|
|
|
|
|
+ log.error("上传失败, 请重新上传,md5:{},chunk:{}", md5, chunk);
|
|
|
|
+ log.error("上传失败", e);
|
|
|
|
+ result = ResultData.error(ErrorCode.SYSTEM_ERROR,"上传失败, 请重新上传。");
|
|
}
|
|
}
|
|
return result;
|
|
return result;
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public ResultData sendCallAlgorithm(SendCallAlgorithmParam param) throws Exception {
|
|
public ResultData sendCallAlgorithm(SendCallAlgorithmParam param) throws Exception {
|