package com.fdkankan.contro.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.fdkankan.common.constant.CommonStatus; import com.fdkankan.common.constant.ErrorCode; import com.fdkankan.common.constant.SceneConstant; import com.fdkankan.common.constant.SceneKind; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.contro.common.Result; import com.fdkankan.contro.entity.ScenePlus; import com.fdkankan.contro.entity.ScenePlusExt; import com.fdkankan.contro.entity.ScenePro; import com.fdkankan.contro.mapper.ISceneUpgradeMapper; import com.fdkankan.contro.service.*; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage; import com.fdkankan.rabbitmq.util.RabbitMqProducer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.util.Objects; @Service public class GenerateObjFileServiceImpl implements IGenerateObjFileService { @Value("${queue.modeling.obj.modeling-pre}") private String queueObjModelingPre; @Autowired private ISceneProService sceneProService; @Autowired private IScenePlusService scenePlusService; @Autowired private IScenePlusExtService scenePlusExtService; @Resource private FYunFileServiceInterface fYunFileService; @Resource private RabbitMqProducer mqProducer; @Autowired private ISceneUpgradeMapper sceneUpgradeMapper; @Override public Result generateObjFile(String num) { ScenePro sceneProEntity = sceneProService.getByNum(num); //v4版本生成obj if(ObjectUtils.isEmpty(sceneProEntity) || sceneProEntity.getIsUpgrade() == CommonStatus.YES.code().intValue()){ return generatePlusObjFile(num); } //v3版本生成obj return generateProObjFile(num); } public Result generateProObjFile(String num) { ScenePro sceneProEntity = sceneProService.getByNum(num); if(sceneProEntity.getSceneSource() != 4 && sceneProEntity.getSceneSource() != 5){ return Result.failure(ErrorCode.FAILURE_CODE_3003.code(), "只能操作激光场景"); } // 拷贝文件 String path = sceneProEntity.getDataSource(); String ossPath = path.replace("/mnt/data","home")+"/data.fdage"; if(!fYunFileService.fileExist(ossPath)){ return Result.failure(ErrorCode.FAILURE_CODE_3037.code(), ErrorCode.FAILURE_CODE_3037.message()); } LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper .set(ScenePro::getStatus, 0) .set(ScenePro::getIsObj, 1) .set(ScenePro::getIsUpgrade, 2) // 升级中 .eq(ScenePro::getNum, sceneProEntity.getNum()); if(Objects.nonNull(sceneProEntity.getLaserTitle())){ updateWrapper.set(ScenePro::getSceneName, sceneProEntity.getLaserTitle()); } sceneProService.update(updateWrapper); // 获取最新的场景名称 //同步到scenePlus、scenePlus ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num); if(Objects.nonNull(scenePlus)){ sceneUpgradeMapper.deleteScenePlus(num); sceneUpgradeMapper.deleteScenePlusExt(scenePlus.getId()); } sceneUpgradeMapper.transferScenePlus(num); scenePlus = scenePlusService.getScenePlusByNum(num); String sceneKind = sceneProEntity.getSceneScheme() == 3 ? SceneKind.FACE.code():SceneKind.TILES.code(); sceneUpgradeMapper.transferScenePlusExt(num, scenePlus.getId(), sceneKind); // 发送MQ BuildSceneCallMessage mqMsg = new BuildSceneCallMessage(); mqMsg.setSceneNum(sceneProEntity.getNum()); mqMsg.setAlgorithm(sceneProEntity.getAlgorithm()); mqMsg.setBuildType(sceneProEntity.getBuildType()); mqMsg.setPath(sceneProEntity.getDataSource()); mqProducer.sendByWorkQueue(queueObjModelingPre,mqMsg); return Result.success(); } public Result generatePlusObjFile(String num) { ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num); if(ObjectUtils.isEmpty(scenePlus)){ return Result.failure(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005); } if(scenePlus.getSceneSource() != 4 && scenePlus.getSceneSource() !=5){ return Result.failure(ErrorCode.FAILURE_CODE_3003.code(), "只能操作激光场景"); } ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId()); String ossPath = scenePlusExt.getDataSource().replace("/mnt/data","home")+"/data.fdage"; if(!fYunFileService.fileExist(ossPath)){ return Result.failure(ErrorCode.FAILURE_CODE_3037.code(), ErrorCode.FAILURE_CODE_3037.message()); } LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper .set(ScenePlus::getSceneStatus, 0) .eq(ScenePlus::getNum, num); if(Objects.nonNull(scenePlus.getLaserTitle())){ updateWrapper.set(ScenePlus::getTitle, scenePlus.getLaserTitle()); } scenePlusService.update(updateWrapper); LambdaUpdateWrapper plusExtUpdateWrapper = new LambdaUpdateWrapper<>(); plusExtUpdateWrapper .set(ScenePlusExt::getIsObj, 1) .eq(ScenePlusExt::getPlusId, scenePlus.getId()); scenePlusExtService.update(plusExtUpdateWrapper); // 发送MQ BuildSceneCallMessage mqMsg = new BuildSceneCallMessage(); mqMsg.setSceneNum(num); mqMsg.setAlgorithm(scenePlusExt.getAlgorithm()); mqMsg.setBuildType(scenePlusExt.getBuildType()); mqMsg.setPath(scenePlusExt.getDataSource()); mqProducer.sendByWorkQueue(queueObjModelingPre,mqMsg); return Result.success(); } }