package com.fdkankan.fusion.controller; import com.alibaba.fastjson.JSONObject; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.ResultData; import com.fdkankan.fusion.common.util.CameraUtil; import com.fdkankan.fusion.entity.*; import com.fdkankan.fusion.entity.jsonEntity.Transform; import com.fdkankan.fusion.exception.BusinessException; import com.fdkankan.fusion.request.FusionParam; import com.fdkankan.fusion.response.FusionNumVo; import com.fdkankan.fusion.response.SceneVo; import com.fdkankan.fusion.service.*; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @author * @since 2022-08-04 */ @RestController @RequestMapping("/caseFusion") public class CaseFusionController extends BaseController{ @Autowired ICaseFusionService caseFusionService; @Autowired IFusionNumService fusionNumService; @Autowired IFusionMeterService fusionMeterService; @Autowired ICaseTagPointService caseTagPointService; @Autowired IModelService modelService; @Autowired IScenePlusService scenePlusService; @Autowired IScenePlusExtService scenePlusExtService; @GetMapping("/list") public ResultData allList(@RequestParam(required = false) Integer fusionId){ return ResultData.ok(getSceneListVo(fusionId)); } @GetMapping("/info") public ResultData info(@RequestParam(required = false) Integer fusionId){ CaseFusion caseFusion = caseFusionService.getById(fusionId); if(caseFusion == null){ throw new BusinessException(ResultCode.RECORD_NOT_EXIST); } return ResultData.ok(caseFusion); } @PostMapping("/add") public ResultData add(@RequestBody FusionParam param){ if( param.getFusionId() == null ){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } if((param.getIsObj() == null || StringUtils.isBlank(param.getNum())) && param.getUploadId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } ScenePlus scenePlus = scenePlusService.getByNum(param.getNum()); ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId()); scenePlus.setScenePlusExt(scenePlusExt); return ResultData.ok(fusionNumService.add(param,scenePlus,param.getIsObj())); } @PostMapping("/updateInfo") public ResultData updateInfo(@RequestBody CaseFusion caseFusion){ if(caseFusion.getFusionId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } caseFusion.setUpdateTime(null); caseFusionService.updateById(caseFusion); return ResultData.ok(); } @PostMapping("/delFusion") public ResultData delFusion(@RequestBody CaseFusion caseFusion){ if(caseFusion.getFusionId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } caseFusionService.removeById(caseFusion.getFusionId()); return ResultData.ok(); } /** * 修改模型相关信息 */ @PostMapping("/update") public ResultData update(@RequestBody FusionParam param){ fusionNumService.updateModel(param); return ResultData.ok(); } @PostMapping("/delete") public ResultData delete(@RequestBody FusionParam param){ if(param.getFusionNumId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } fusionNumService.deleteById(param.getFusionNumId()); return ResultData.ok(); } private List getSceneListVo(Integer fusionId) { List sceneVos = new ArrayList<>(); List fusionNumList = fusionNumService.getByFusionId(fusionId); List modelIds = fusionNumList.stream().map(FusionNum::getModelId).collect(Collectors.toList()); List listByModelIds = modelService.getListByModelIds(modelIds); HashMap modelMap = new HashMap<>(); listByModelIds.stream().forEach(e -> modelMap.put(e.getModelId(),e)); List numList = listByModelIds.stream().filter(e -> e.getNum() != null).map(Model::getNum).collect(Collectors.toList()); List scenePlusList = scenePlusService.getByNumList(numList); HashMap map = new HashMap<>(); scenePlusList.stream().forEach(e -> map.put(e.getNum(),e)); List plusIds = scenePlusList.stream().map(ScenePlus::getId).collect(Collectors.toList()); List extList = scenePlusExtService.getByPlusIds(plusIds); HashMap mapext = new HashMap<>(); extList.stream().forEach(e -> mapext.put(e.getPlusId(),e)); for (FusionNum fusionNum : fusionNumList) { Transform transform = JSONObject.parseObject(fusionNum.getTransform(),Transform.class); FusionNumVo vo = new FusionNumVo(); vo.setTransform(transform); BeanUtils.copyProperties(fusionNum,vo); SceneVo sceneVo = new SceneVo(); Model model = modelMap.get(fusionNum.getModelId()); if(model != null){ BeanUtils.copyProperties(model,sceneVo); if(model.getNum() != null ){ ScenePlus scenePlus = map.get(model.getNum()); if(scenePlus != null){ BeanUtils.copyProperties(scenePlus,sceneVo); sceneVo.setStatus(scenePlus.getSceneStatus() == -2 ? 2:scenePlus.getSceneStatus()); sceneVo.setName(scenePlus.getTitle()); sceneVo.setSceneName(scenePlus.getTitle()); sceneVo.setCreateTime(scenePlus.getCreateTime()); ScenePlusExt scenePlusExt = mapext.get(scenePlus.getId()); if(scenePlusExt != null){ sceneVo.setRtkLocation(scenePlusExt.getRtkLocation()); sceneVo.setOrientation(scenePlusExt.getOrientation()); } } }else { sceneVo.setStatus(2); } sceneVo.setSourceName(CameraUtil.getSourceName(model.getType())); } vo.setSceneData(sceneVo); sceneVos.add(vo); } return sceneVos; } }