SceneCommonService.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. package com.fdkankan.manage_jp.service.impl;
  2. import cn.hutool.cache.CacheUtil;
  3. import cn.hutool.core.io.FileUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import cn.hutool.extra.qrcode.QrCodeUtil;
  6. import cn.hutool.extra.qrcode.QrConfig;
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.JSONObject;
  9. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  10. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  11. import com.fdkankan.common.constant.SceneVersionType;
  12. import com.fdkankan.common.util.FileUtils;
  13. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  14. import com.fdkankan.image.MatrixToImageWriterUtil;
  15. import com.fdkankan.manage_jp.common.RedisKeyUtil;
  16. import com.fdkankan.manage_jp.common.ResultCode;
  17. import com.fdkankan.manage_jp.common.SceneSourceUtil;
  18. import com.fdkankan.manage_jp.entity.*;
  19. import com.fdkankan.manage_jp.exception.BusinessException;
  20. import com.fdkankan.manage_jp.httpClient.service.LaserService;
  21. import com.fdkankan.manage_jp.service.*;
  22. import com.fdkankan.manage_jp.util.SceneResourcePath;
  23. import com.fdkankan.manage_jp.util.SnowflakeIdGenerator;
  24. import com.fdkankan.redis.util.RedisUtil;
  25. import lombok.extern.slf4j.Slf4j;
  26. import org.apache.commons.lang3.ObjectUtils;
  27. import org.apache.commons.lang3.StringUtils;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.scheduling.annotation.Async;
  30. import org.springframework.stereotype.Service;
  31. import java.io.File;
  32. import java.util.*;
  33. @Service
  34. @Slf4j
  35. public class SceneCommonService {
  36. @Autowired
  37. FYunFileServiceInterface fYunFileServiceInterface;
  38. @Autowired
  39. IScene3dNumService scene3dNumService;
  40. @Autowired
  41. IScenePlusService scenePlusService;
  42. @Autowired
  43. IScenePlusExtService scenePlusExtService;
  44. @Autowired
  45. ISceneEditInfoService sceneEditInfoService;
  46. @Autowired
  47. ISceneEditInfoExtService sceneEditInfoExtService;
  48. @Autowired
  49. ISceneEditControlsService sceneEditControlsService;
  50. @Autowired
  51. ISurveillanceService surveillanceService;
  52. @Autowired
  53. LaserService laserService;
  54. @Autowired
  55. ISceneProService sceneProService;
  56. @Autowired
  57. ISceneProEditService sceneProEditService;
  58. @Autowired
  59. RedisUtil redisUtil;
  60. @Autowired
  61. ICameraDetailService cameraDetailService;
  62. @Autowired
  63. ISceneCopyLogService sceneCopyLogService;
  64. public String getNewNum(String oldNum ){
  65. String newNum = scene3dNumService.generateNum();
  66. if(oldNum.contains("-")){
  67. String pre = oldNum.split("-")[0];
  68. if(!"t".equals(pre) && !"njs".equals(pre)){
  69. return pre +"-"+ newNum;
  70. }
  71. }
  72. return newNum;
  73. }
  74. /**
  75. * 生成新的dataSouce
  76. */
  77. public String getNewDataSource(String oldDataSource){
  78. String newDataSource = null;
  79. if(StringUtils.isBlank(oldDataSource)){
  80. throw new BusinessException(ResultCode.SCENE_DATA_ERROR);
  81. }
  82. File oldDataSouceFile = new File(oldDataSource);
  83. if(!oldDataSouceFile.exists()){
  84. throw new BusinessException(ResultCode.SCENE_DATA_ERROR);
  85. }
  86. if(!oldDataSource.contains("/")){
  87. throw new BusinessException(ResultCode.SCENE_DATA_ERROR);
  88. }
  89. String time = com.fdkankan.common.util.DateUtil.date2String(new Date(), com.fdkankan.common.util.DateUtil.YYYYMMDDHHMMSSSSS_DATA_FORMAT);
  90. String[] split = oldDataSource.split("/");
  91. if(split.length == 6 ){
  92. String oldFileId = split[4];
  93. Long fileId = SnowflakeIdGenerator.snowflakeIdGenerator.nextId();
  94. newDataSource = oldDataSource.replace(oldFileId,fileId.toString());
  95. String snCodeTime = split[5];
  96. if(!snCodeTime.contains("_") || snCodeTime.split("_").length <= 1){
  97. throw new BusinessException(ResultCode.SCENE_DATA_ERROR);
  98. }
  99. newDataSource = newDataSource.replace(snCodeTime.split("_")[1],time);
  100. this.copyFdage(oldDataSource,newDataSource,time);
  101. }
  102. if(newDataSource == null){
  103. throw new BusinessException(ResultCode.SCENE_DATA_ERROR);
  104. }
  105. return newDataSource;
  106. }
  107. public void createNewQrCode(String sceneVersion,String logoPath ,String newNum, String webSite){
  108. String localLogoPath = null;
  109. try {
  110. if(StringUtils.isNotBlank(logoPath)){
  111. if(sceneVersion.equals(SceneVersionType.V3.code())){
  112. localLogoPath =SceneResourcePath.nasBasePath + logoPath;
  113. }else{
  114. localLogoPath = SceneResourcePath.qrCodeBasePath + newNum +"/logo/logo.png";
  115. fYunFileServiceInterface.downloadFile(logoPath,localLogoPath);
  116. }
  117. }
  118. String outPathZh = SceneResourcePath.qrCodeBasePath + newNum + ".png";
  119. String outPathEn = SceneResourcePath.qrCodeBasePath + newNum + "_en.png";
  120. QrConfig qrConfig = QrConfig.create();
  121. qrConfig.setWidth(1024);
  122. qrConfig.setHeight(1024);
  123. if(!ObjectUtils.isEmpty(localLogoPath)){
  124. qrConfig.setImg(localLogoPath);
  125. }
  126. QrCodeUtil.generate(webSite, qrConfig, FileUtil.file(outPathZh));
  127. QrCodeUtil.generate(webSite + "&lang=en", qrConfig, FileUtil.file(outPathEn));
  128. fYunFileServiceInterface.uploadFile(outPathZh, String.format(SceneResourcePath.DOWNLOADS_QRCODE, newNum) + newNum + ".png");
  129. fYunFileServiceInterface.uploadFile(outPathEn, String.format(SceneResourcePath.DOWNLOADS_QRCODE, newNum) + newNum + "_en.png");
  130. }catch (Exception e){
  131. log.info("copy-scene-error:{},newNum:{},error:{}",newNum,e);
  132. }
  133. }
  134. public void updateNasSceneJson(String targetPath, String oldNum, String newNum,String oldSceneName,String newSceneName,String sceneVersion) {
  135. String localPath = SceneResourcePath.nasBasePath + targetPath + "scene.json";
  136. File file = new File(localPath);
  137. if(!file.exists()){
  138. log.error("sceneCopy-error--localFileExist:localPath:{},oldNum:{},newNum:{}",localPath,oldNum,newNum);
  139. throw new BusinessException(ResultCode.SYSTEM_ERROR);
  140. }
  141. String fileContent = cn.hutool.core.io.FileUtil.readUtf8String(file);
  142. if(StringUtils.isNotBlank(fileContent)){
  143. String newJson = fileContent.replaceAll(oldNum,newNum);
  144. newJson = newJson.replaceAll(oldSceneName,newSceneName);
  145. try {
  146. com.fdkankan.manage_jp.util.FileUtil.writeFile(localPath,newJson);
  147. }catch (Exception e){
  148. log.error("writeFile-error:{}",e);
  149. throw new BusinessException(ResultCode.SYSTEM_ERROR);
  150. }
  151. }
  152. if("v3".equals(sceneVersion)){
  153. String sceneJsonPath = String.format(SceneResourcePath.dataPath+"/scene.json", newNum);
  154. fYunFileServiceInterface.uploadFile(localPath, sceneJsonPath);
  155. }
  156. if("v4".equals(sceneVersion)){
  157. String sceneJsonPath = String.format(SceneResourcePath.DATA_VIEW_PATH+"scene.json", newNum);
  158. fYunFileServiceInterface.uploadFile(localPath, sceneJsonPath);
  159. }
  160. }
  161. public void updateOssJson(String targetPath,String oldNum, String newNum,String vision,String newTitle,String fileName) {
  162. String ossStatusJsonPath = targetPath + fileName;
  163. if(!fYunFileServiceInterface.fileExist(ossStatusJsonPath)){
  164. log.error("sceneCopy-error--ossFileExist:targetPath:{},oldNum:{},newNum:{}",ossStatusJsonPath,oldNum,newNum);
  165. throw new BusinessException(ResultCode.SYSTEM_ERROR);
  166. }
  167. String localPath = SceneResourcePath.nasBasePath + ossStatusJsonPath;
  168. File file = new File(localPath);
  169. if(!file.getParentFile().exists()){
  170. file.getParentFile().mkdirs();
  171. }
  172. String fileContent = fYunFileServiceInterface.getFileContent(ossStatusJsonPath);
  173. if(StringUtils.isNotBlank(fileContent)){
  174. String newJson = fileContent.replaceAll(oldNum,newNum);
  175. try {
  176. JSONObject jsonObject = JSONObject.parseObject(newJson);
  177. if(fileName.contains("scene.json")){
  178. if("v3".equals(vision)){
  179. jsonObject.put("sceneName",newTitle);
  180. }
  181. if("v4".equals(vision)) {
  182. jsonObject.put("title",newTitle);
  183. }
  184. }
  185. com.fdkankan.manage_jp.util.FileUtil.writeFile(localPath,newJson);
  186. fYunFileServiceInterface.uploadFile(localPath,ossStatusJsonPath);
  187. }catch (Exception e){
  188. log.error("writeFile-error:{}",e);
  189. throw new BusinessException(ResultCode.SYSTEM_ERROR);
  190. }
  191. }
  192. }
  193. public void copyFdage(String oldDataSource,String newDataSource,String time){
  194. String ossOldPath = oldDataSource.replace("/mnt/data","home");
  195. String ossNewPath = newDataSource.replace("/mnt/data","home");
  196. fYunFileServiceInterface.copyFileInBucket(ossOldPath,ossNewPath);
  197. String fileName = "/data.fdage";
  198. String fileContent = fYunFileServiceInterface.getFileContent(ossNewPath + fileName);
  199. if(StringUtils.isNotBlank(fileContent)){
  200. JSONObject jsonObject = JSONObject.parseObject(fileContent);
  201. jsonObject.put("uuidtime",time);
  202. FileUtils.writeFile(newDataSource +fileName, jsonObject.toJSONString());
  203. fYunFileServiceInterface.uploadFile(newDataSource +fileName,ossNewPath +fileName);
  204. }
  205. }
  206. @Async
  207. public void v4Async(ScenePlusExt plusExt, String oldNum, String newNum, ScenePlus scenePlus, Long plusId, String oldSceneName){
  208. try {
  209. String oldDataSource = plusExt.getDataSource();
  210. String newDataSource = this.getNewDataSource(oldDataSource);
  211. log.info("sceneCopy-V4-oldNum:{},oldDataSource:{},newNum:{},newDataSource:{}",
  212. oldNum,oldDataSource,newNum,newDataSource);
  213. String newVideos = plusExt.getVideos();
  214. if(StrUtil.isNotEmpty(newVideos)){
  215. newVideos = plusExt.getVideos().replaceAll("/data/data" + oldNum, "/scene_view_data/" + newNum + "/data").replaceAll(oldNum, newNum);
  216. }
  217. plusExt.setId(null);
  218. plusExt.setPlusId(scenePlus.getId());
  219. plusExt.setDataSource(newDataSource);
  220. plusExt.setWebSite(plusExt.getWebSite().replace(oldNum, newNum));
  221. plusExt.setThumb(plusExt.getThumb().replace(oldNum, newNum));
  222. plusExt.setVideos(newVideos);
  223. plusExt.setViewCount(0);
  224. scenePlusExtService.save(plusExt);
  225. SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(plusId);
  226. Long sceneEditInfoId = sceneEditInfo.getId();
  227. sceneEditInfo.setId(null);
  228. sceneEditInfo.setScenePlusId(scenePlus.getId());
  229. sceneEditInfo.setSceneProId(null);
  230. sceneEditInfo.setTitle(scenePlus.getTitle());
  231. sceneEditInfoService.save(sceneEditInfo);
  232. SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfoId);
  233. sceneEditInfoExt.setId(null);
  234. sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
  235. sceneEditInfoExt.setScenePlusId(scenePlus.getId());
  236. sceneEditInfoExt.setSceneProId(null);
  237. sceneEditInfoExtService.save(sceneEditInfoExt);
  238. SceneEditControls sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfoId);
  239. sceneEditControls.setId(null);
  240. sceneEditControls.setEditInfoId(sceneEditInfo.getId());
  241. sceneEditControlsService.save(sceneEditControls);
  242. List<Surveillance> list = surveillanceService.list(new LambdaQueryWrapper<Surveillance>().eq(Surveillance::getNum, oldNum));
  243. if (!Objects.isNull(list)) {
  244. list.stream().forEach(item -> {
  245. item.setNum(newNum);
  246. item.setId(null);
  247. surveillanceService.save(item);
  248. });
  249. }
  250. if(SceneSourceUtil.isLaser(scenePlus.getSceneSource())){ //深时复制
  251. laserService.copy(oldNum,newNum,newDataSource,true);
  252. }else {
  253. laserService.cloudPointBuild(oldNum,newNum);
  254. }
  255. //重新生成编辑页基础设置二维码
  256. this.createNewQrCode(SceneVersionType.V4.code(),sceneEditInfoExt.getShareLogoImg(),newNum,plusExt.getWebSite());
  257. //copyDataSource
  258. cn.hutool.core.io.FileUtil.copyContent(new File(oldDataSource),new File(newDataSource),true);
  259. this.copyOssAndNas(oldNum,newNum);
  260. //修改 oss status.json ,nas scene.json
  261. String targetData = String.format(SceneResourcePath.DATA_VIEW_PATH,newNum);
  262. this.updateOssJson(targetData,oldNum,newNum,"v4", scenePlus.getTitle(),"status.json");
  263. this.updateOssJson(targetData,oldNum,newNum,"v4", scenePlus.getTitle(),"scene.json");
  264. //修改马赛克图片
  265. this.updateOssFileName(oldNum,newNum);
  266. if(SceneSourceUtil.isLaser(scenePlus.getSceneSource())){ //深时复制
  267. laserService.copy(oldNum,newNum,newDataSource,false);
  268. }
  269. String redisKey = RedisKeyUtil.laserCopyLock + newNum;
  270. long startTime = new Date().getTime();
  271. long startTime2 = new Date().getTime();
  272. while (redisUtil.hasKey(redisKey) ){ //深时场景复制同步锁
  273. long waitTime = new Date().getTime();
  274. if(waitTime - startTime2 >1000){
  275. startTime2 = new Date().getTime();
  276. log.info("等待激光复制业务结束----:{}",(waitTime - startTime) /1000);
  277. }
  278. }
  279. scenePlus.setSceneStatus(-2);
  280. scenePlusService.updateById(scenePlus);
  281. }catch (Exception e){
  282. log.info("复制场景失败:oldNum:{},newNum:{},error:{}",oldNum,newNum,e);
  283. scenePlus.setSceneStatus(-1);
  284. scenePlusService.updateById(scenePlus);
  285. }
  286. }
  287. private void updateOssFileName(String oldNum, String newNum) {
  288. //修改图片名称
  289. try {
  290. String filePath = String.format(SceneResourcePath.USER_VIEW_PATH, newNum) ;
  291. List<String> files = fYunFileServiceInterface.listRemoteFiles(filePath);
  292. for (String ossFilePath : files) {
  293. if(ossFilePath.contains(oldNum)){
  294. String oldName = ossFilePath;
  295. ossFilePath = ossFilePath.replace(oldNum,newNum);
  296. fYunFileServiceInterface.copyFileInBucket(oldName,ossFilePath);
  297. fYunFileServiceInterface.deleteFile(oldName);
  298. }
  299. }
  300. }catch (Exception e){
  301. log.info("修改名称失败:oldName:{},newNum:{}",oldNum,newNum);
  302. }
  303. }
  304. private void copyOssAndNas(String oldNum,String newNum){
  305. // 拷贝场景编辑资源
  306. String oldEditPath = String.format(SceneResourcePath.EDIT_PATH_v4, oldNum);
  307. String newEditPath = String.format(SceneResourcePath.EDIT_PATH_v4, newNum);
  308. fYunFileServiceInterface.copyFileInBucket(oldEditPath, newEditPath);
  309. // 拷贝场景展示资源
  310. String oldViewPath = String.format(SceneResourcePath.VIEW_PATH_v4, oldNum);
  311. String newViewPath = String.format(SceneResourcePath.VIEW_PATH_v4, newNum);
  312. fYunFileServiceInterface.copyFileInBucket(oldViewPath, newViewPath);
  313. //复制计算结果文件
  314. String oldResultPath = String.format(SceneResourcePath.SCENE_RESULT_DATA_PATH, oldNum);
  315. String newResultPath = String.format(SceneResourcePath.SCENE_RESULT_DATA_PATH, newNum);
  316. fYunFileServiceInterface.copyFileInBucket(oldResultPath, newResultPath);
  317. // 拷贝本地资源
  318. String oldPath = SceneResourcePath.nasBasePath + oldNum;
  319. String newPath = SceneResourcePath.nasBasePath + newNum;
  320. if(new File(oldPath).exists()){
  321. FileUtil.copyContent(new File(oldPath), new File(newPath),true);
  322. }
  323. String oldPath_v4 = SceneResourcePath.nasBasePath_v4 + oldNum;
  324. String newPath_v4 = SceneResourcePath.nasBasePath_v4 + newNum;
  325. if(new File(oldPath_v4).exists()){
  326. FileUtil.copyContent(new File(oldPath_v4), new File(newPath_v4),true);
  327. }
  328. }
  329. @Async
  330. public void v3Async(ScenePro scenePro,String oldNum,String newNum,Long sceneProId,String oldSceneName){
  331. try {
  332. String oldDataSource = scenePro.getDataSource();
  333. String newDataSource = this.getNewDataSource(oldDataSource);
  334. log.info("sceneCopy--oldNum:{},oldDataSource:{},newNum:{},newDataSource:{}",
  335. oldNum,oldDataSource,newNum,newDataSource);
  336. scenePro.setDataSource(newDataSource);
  337. sceneProService.updateById(scenePro);
  338. SceneProEdit oldEditScene = sceneProEditService.getByProId(sceneProId);
  339. oldEditScene.setId(null);
  340. oldEditScene.setProId(scenePro.getId());
  341. oldEditScene.setScreencapVoiceSrc(oldEditScene.getScreencapVoiceSrc() == null ? null : oldEditScene.getScreencapVoiceSrc().replace(oldNum, scenePro.getNum()));
  342. oldEditScene.setScreencapVoiceSound(oldEditScene.getScreencapVoiceSound() == null ? null : oldEditScene.getScreencapVoiceSound().replace(oldNum, scenePro.getNum()));
  343. oldEditScene.setScreencapVoiceSoundsync(oldEditScene.getScreencapVoiceSoundsync() == null ? null : oldEditScene.getScreencapVoiceSoundsync().replace(oldNum, scenePro.getNum()));
  344. oldEditScene.setPlayData(oldEditScene.getPlayData() == null ? null : oldEditScene.getPlayData().replace(oldNum, scenePro.getNum()));
  345. oldEditScene.setScreencapThumb(oldEditScene.getScreencapThumb() == null ? null : oldEditScene.getScreencapThumb().replace(oldNum, scenePro.getNum()));
  346. oldEditScene.setFloorPlanPng(oldEditScene.getFloorPlanPng() == null ? null : oldEditScene.getFloorPlanPng().replace(oldNum, scenePro.getNum()));
  347. sceneProEditService.save(oldEditScene);
  348. if(SceneSourceUtil.isLaser(scenePro.getSceneSource())){ //深时复制
  349. laserService.copy(oldNum,newNum,newDataSource,false);
  350. }
  351. /*
  352. *cp oss nas
  353. * data/data{SceneNum}
  354. * images/images{SceneNum}
  355. * video/video{SceneNum}
  356. * voice/voice{SceneNum}
  357. */
  358. //重新生成编辑页基础设置二维码
  359. this.createNewQrCode(SceneVersionType.V3.code(),oldEditScene.getShareLogo(),newNum,scenePro.getWebSite());
  360. //copyDataSource
  361. cn.hutool.core.io.FileUtil.copyContent(new File(oldDataSource),new File(newDataSource),true);
  362. String sourceData = String.format(SceneResourcePath.dataPath, oldNum);
  363. String targetData = String.format(SceneResourcePath.dataPath, scenePro.getNum());
  364. this.copyOssAndNas(oldNum,scenePro.getNum(),sourceData,targetData);
  365. //修改 oss status.json ,nas scene.json
  366. this.updateOssJson(targetData,oldNum,newNum,"v3", scenePro.getSceneName(),"status.json");
  367. this.updateOssJson(targetData,oldNum,newNum,"v3", scenePro.getSceneName(),"scene.json");
  368. String sourceImages = String.format(SceneResourcePath.imagesPath, oldNum);
  369. String targetImages = String.format(SceneResourcePath.imagesPath, scenePro.getNum());
  370. this.copyOssAndNas(oldNum,scenePro.getNum(),sourceImages,targetImages);
  371. String sourceVideo = String.format(SceneResourcePath.videoPath, oldNum);
  372. String targetVideo = String.format(SceneResourcePath.videoPath, scenePro.getNum());
  373. this.copyOssAndNas(oldNum,scenePro.getNum(),sourceVideo,targetVideo);
  374. String sourceVoice = String.format(SceneResourcePath.voicePath, oldNum);
  375. String targetVoice = String.format(SceneResourcePath.voicePath, scenePro.getNum());
  376. this.copyOssAndNas(oldNum,scenePro.getNum(),sourceVoice,targetVoice);
  377. if(SceneSourceUtil.isLaser(scenePro.getSceneSource())){ //深时复制
  378. laserService.copy(oldNum,newNum,newDataSource,true);
  379. }
  380. scenePro.setStatus(-2);
  381. sceneProService.updateById(scenePro);
  382. }catch (Exception e){
  383. log.info("复制场景失败:oldNum:{},newNum:{},error:{}",oldNum,newNum,e);
  384. scenePro.setStatus(-1);
  385. sceneProService.updateById(scenePro);
  386. }
  387. }
  388. private void copyOssAndNas(String oldNum ,String newNum ,String sourcePath,String targetPath){
  389. log.info("sceneCopy-ossSource-oldNum:{},newNum:{},sourcePath:{},targetPath:{}",oldNum,newNum,sourcePath,targetPath);
  390. fYunFileServiceInterface.copyFileInBucket(sourcePath,targetPath);
  391. File fileData = new File(SceneResourcePath.nasBasePath + sourcePath);
  392. if(fileData.exists()){
  393. cn.hutool.core.io.FileUtil.copyContent(fileData,new File(SceneResourcePath.nasBasePath + targetPath),true);
  394. }
  395. }
  396. public void copyResult(String newNum) {
  397. ScenePro scenePro = sceneProService.getByNum(newNum);
  398. ScenePlus scenePlus = scenePlusService.getByNum(newNum);
  399. if(scenePro == null && scenePlus == null){
  400. log.info("复制失败:{}",newNum);
  401. return;
  402. }
  403. List<SceneCopyLog> sceneCopyLogs = sceneCopyLogService.getByNewNum(newNum);
  404. if(sceneCopyLogs == null || sceneCopyLogs.isEmpty()){
  405. log.info("复制失败:{}",newNum);
  406. return;
  407. }
  408. if(scenePlus != null){
  409. ScenePlus scenePlus1 = scenePlusService.getByNum(sceneCopyLogs.get(0).getOldNum());
  410. LambdaUpdateWrapper<ScenePlus> wrapper = new LambdaUpdateWrapper<>();
  411. wrapper.eq(ScenePlus::getId,scenePlus.getId());
  412. wrapper.set(ScenePlus::getSceneStatus,-2);
  413. if(scenePlus1 != null && StringUtils.isNotBlank(scenePlus1.getLaserTitle())){
  414. wrapper.set(ScenePlus::getLaserTitle,scenePlus1.getLaserTitle() +"(copy)");
  415. }
  416. scenePlusService.update(wrapper);
  417. }
  418. if(scenePro != null){
  419. ScenePro scenePro1 = sceneProService.getByNum(sceneCopyLogs.get(0).getOldNum());
  420. LambdaUpdateWrapper<ScenePro> wrapper2 = new LambdaUpdateWrapper<>();
  421. wrapper2.eq(ScenePro::getId,scenePro.getId());
  422. wrapper2.set(ScenePro::getStatus,-2);
  423. if(scenePro1 != null && StringUtils.isNotBlank(scenePro1.getLaserTitle())){
  424. wrapper2.set(ScenePro::getLaserTitle,scenePro1.getLaserTitle() +"(copy)");
  425. }
  426. sceneProService.update(wrapper2);
  427. }
  428. }
  429. }