GenerateObjFileServiceImpl.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.fdkankan.contro.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  4. import com.fdkankan.common.constant.CommonStatus;
  5. import com.fdkankan.common.constant.ErrorCode;
  6. import com.fdkankan.common.constant.SceneConstant;
  7. import com.fdkankan.common.constant.SceneKind;
  8. import com.fdkankan.common.exception.BusinessException;
  9. import com.fdkankan.contro.common.Result;
  10. import com.fdkankan.contro.entity.ScenePlus;
  11. import com.fdkankan.contro.entity.ScenePlusExt;
  12. import com.fdkankan.contro.entity.ScenePro;
  13. import com.fdkankan.contro.mapper.ISceneUpgradeMapper;
  14. import com.fdkankan.contro.service.*;
  15. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  16. import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
  17. import com.fdkankan.rabbitmq.util.RabbitMqProducer;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.beans.factory.annotation.Value;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.util.ObjectUtils;
  22. import javax.annotation.Resource;
  23. import java.util.Objects;
  24. @Service
  25. public class GenerateObjFileServiceImpl implements IGenerateObjFileService {
  26. @Value("${queue.modeling.obj.modeling-pre}")
  27. private String queueObjModelingPre;
  28. @Autowired
  29. private ISceneProService sceneProService;
  30. @Autowired
  31. private IScenePlusService scenePlusService;
  32. @Autowired
  33. private IScenePlusExtService scenePlusExtService;
  34. @Resource
  35. private FYunFileServiceInterface fYunFileService;
  36. @Resource
  37. private RabbitMqProducer mqProducer;
  38. @Autowired
  39. private ISceneUpgradeMapper sceneUpgradeMapper;
  40. @Override
  41. public Result generateObjFile(String num) {
  42. ScenePro sceneProEntity = sceneProService.getByNum(num);
  43. //v4版本生成obj
  44. if(ObjectUtils.isEmpty(sceneProEntity) || sceneProEntity.getIsUpgrade() == CommonStatus.YES.code().intValue()){
  45. return generatePlusObjFile(num);
  46. }
  47. //v3版本生成obj
  48. return generateProObjFile(num);
  49. }
  50. public Result generateProObjFile(String num) {
  51. ScenePro sceneProEntity = sceneProService.getByNum(num);
  52. if(sceneProEntity.getSceneSource() != 4 && sceneProEntity.getSceneSource() != 5){
  53. return Result.failure(ErrorCode.FAILURE_CODE_3003.code(), "只能操作激光场景");
  54. }
  55. // 拷贝文件
  56. String path = sceneProEntity.getDataSource();
  57. String ossPath = path.replace("/mnt/data","home")+"/data.fdage";
  58. if(!fYunFileService.fileExist(ossPath)){
  59. return Result.failure(ErrorCode.FAILURE_CODE_3037.code(), ErrorCode.FAILURE_CODE_3037.message());
  60. }
  61. LambdaUpdateWrapper<ScenePro> updateWrapper = new LambdaUpdateWrapper<>();
  62. updateWrapper
  63. .set(ScenePro::getStatus, 0)
  64. .set(ScenePro::getIsObj, 1)
  65. .set(ScenePro::getIsUpgrade, 2) // 升级中
  66. .eq(ScenePro::getNum, sceneProEntity.getNum());
  67. if(Objects.nonNull(sceneProEntity.getLaserTitle())){
  68. updateWrapper.set(ScenePro::getSceneName, sceneProEntity.getLaserTitle());
  69. }
  70. sceneProService.update(updateWrapper);
  71. // 获取最新的场景名称
  72. //同步到scenePlus、scenePlus
  73. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
  74. if(Objects.nonNull(scenePlus)){
  75. sceneUpgradeMapper.deleteScenePlus(num);
  76. sceneUpgradeMapper.deleteScenePlusExt(scenePlus.getId());
  77. }
  78. sceneUpgradeMapper.transferScenePlus(num);
  79. scenePlus = scenePlusService.getScenePlusByNum(num);
  80. String sceneKind = sceneProEntity.getSceneScheme() == 3 ? SceneKind.FACE.code():SceneKind.TILES.code();
  81. sceneUpgradeMapper.transferScenePlusExt(num, scenePlus.getId(), sceneKind);
  82. // 发送MQ
  83. BuildSceneCallMessage mqMsg = new BuildSceneCallMessage();
  84. mqMsg.setSceneNum(sceneProEntity.getNum());
  85. mqMsg.setAlgorithm(sceneProEntity.getAlgorithm());
  86. mqMsg.setBuildType(sceneProEntity.getBuildType());
  87. mqMsg.setPath(sceneProEntity.getDataSource());
  88. mqProducer.sendByWorkQueue(queueObjModelingPre,mqMsg);
  89. return Result.success();
  90. }
  91. public Result generatePlusObjFile(String num) {
  92. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
  93. if(ObjectUtils.isEmpty(scenePlus)){
  94. return Result.failure(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005);
  95. }
  96. if(scenePlus.getSceneSource() != 4 && scenePlus.getSceneSource() !=5){
  97. return Result.failure(ErrorCode.FAILURE_CODE_3003.code(), "只能操作激光场景");
  98. }
  99. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  100. String ossPath = scenePlusExt.getDataSource().replace("/mnt/data","home")+"/data.fdage";
  101. if(!fYunFileService.fileExist(ossPath)){
  102. return Result.failure(ErrorCode.FAILURE_CODE_3037.code(), ErrorCode.FAILURE_CODE_3037.message());
  103. }
  104. LambdaUpdateWrapper<ScenePlus> updateWrapper = new LambdaUpdateWrapper<>();
  105. updateWrapper
  106. .set(ScenePlus::getSceneStatus, 0)
  107. .eq(ScenePlus::getNum, num);
  108. if(Objects.nonNull(scenePlus.getLaserTitle())){
  109. updateWrapper.set(ScenePlus::getTitle, scenePlus.getLaserTitle());
  110. }
  111. scenePlusService.update(updateWrapper);
  112. LambdaUpdateWrapper<ScenePlusExt> plusExtUpdateWrapper = new LambdaUpdateWrapper<>();
  113. plusExtUpdateWrapper
  114. .set(ScenePlusExt::getIsObj, 1)
  115. .eq(ScenePlusExt::getPlusId, scenePlus.getId());
  116. scenePlusExtService.update(plusExtUpdateWrapper);
  117. // 发送MQ
  118. BuildSceneCallMessage mqMsg = new BuildSceneCallMessage();
  119. mqMsg.setSceneNum(num);
  120. mqMsg.setAlgorithm(scenePlusExt.getAlgorithm());
  121. mqMsg.setBuildType(scenePlusExt.getBuildType());
  122. mqMsg.setPath(scenePlusExt.getDataSource());
  123. mqProducer.sendByWorkQueue(queueObjModelingPre,mqMsg);
  124. return Result.success();
  125. }
  126. }