package com.fdkankan.fusion.controller;
import com.fdkankan.fusion.aop.PushJm;
import com.fdkankan.fusion.common.ResultCode;
import com.fdkankan.fusion.common.ResultData;
import com.fdkankan.fusion.entity.CaseFusion;
import com.fdkankan.fusion.entity.FusionNum;
import com.fdkankan.fusion.entity.Model;
import com.fdkankan.fusion.entity.ScenePlus;
import com.fdkankan.fusion.exception.BusinessException;
import com.fdkankan.fusion.request.FusionParam;
import com.fdkankan.fusion.response.CaseFusionVo;
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;
@GetMapping("/list")
public ResultData allList(@RequestParam(required = false) Integer caseId){
return ResultData.ok(fusionNumService.getListByCaseId(caseId,null));
}
@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);
}
CaseFusionVo vo = new CaseFusionVo();
BeanUtils.copyProperties(caseFusion,vo);
List sceneVos = new ArrayList<>();
List fusionNumList = fusionNumService.getByFusionId(fusionId);
List modelIds = fusionNumList.stream().map(FusionNum::getModelId).collect(Collectors.toList());
List listByModelIds = modelService.getListByModelIds(modelIds);
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));
for (Model model : listByModelIds) {
SceneVo sceneVo = new SceneVo();
BeanUtils.copyProperties(model,sceneVo);
ScenePlus scenePlus = map.get(model.getNum());
if(model.getNum() != null && scenePlus != null){
BeanUtils.copyProperties(scenePlus,sceneVo);
sceneVo.setStatus(scenePlus.getSceneStatus() == -2 ? 2:scenePlus.getSceneStatus());
sceneVo.setName(scenePlus.getTitle());
sceneVo.setSceneName(scenePlus.getTitle());
}
if(model.getNum() == null){
sceneVo.setStatus(2);
}
sceneVos.add(sceneVo);
}
vo.setSceneVoList(sceneVos);
return ResultData.ok(vo);
}
@PostMapping("/add")
@PushJm(event_content = "添加模型")
public ResultData add(@RequestBody FusionParam param){
if( param.getFusionId() == null || StringUtils.isNotBlank(param.getNum())){
throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
}
ScenePlus scenePlus = scenePlusService.getByNum(param.getNum());
if(scenePlus == null){
throw new BusinessException(ResultCode.RECORD_NOT_EXIST);
}
return ResultData.ok(fusionNumService.add(param,scenePlus));
}
/**
* 修改模型相关信息
*/
@PostMapping("/update")
@PushJm(event_content = "修改模型")
public ResultData update(@RequestBody FusionParam param){
fusionNumService.updateModel(param);
return ResultData.ok();
}
@PostMapping("/delete")
@PushJm(event_content = "删除模型")
public ResultData delete(@RequestBody FusionParam param){
if(param.getFusionNumId() == null){
throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
}
fusionNumService.deleteById(param.getFusionNumId());
return ResultData.ok();
}
}