package com.fdkankan.fusion.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.entity.CaseFusion; import com.fdkankan.fusion.entity.FusionNum; import com.fdkankan.fusion.entity.Model; import com.fdkankan.fusion.entity.jsonEntity.Transform; import com.fdkankan.fusion.exception.BusinessException; import com.fdkankan.fusion.mapper.IFusionNumMapper; import com.fdkankan.fusion.request.CaseParam; import com.fdkankan.fusion.request.FusionParam; import com.fdkankan.fusion.response.FusionNumVo; import com.fdkankan.fusion.response.SceneVo; import com.fdkankan.fusion.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author * @since 2022-08-04 */ @Service public class FusionNumServiceImpl extends ServiceImpl implements IFusionNumService { @Autowired ICaseFusionService caseFusionService; @Autowired ICaseService caseService; @Autowired IModelService modelService; @Autowired IFusionMeterService fusionMeterService; @Autowired ICaseTagPointService caseTagPointService; @Override public List getByNum(String num) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(FusionNum::getModelId,num); return this.list(wrapper); } @Override public List getListByFusionIdList(List fusionIdList) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(FusionNum::getFusionId,fusionIdList); wrapper.orderByDesc(FusionNum::getCreateTime); return this.list(wrapper); } @Override public List getListByCaseId(Integer caseId, Integer fusionNumId,String token) { List fusionNumList = new ArrayList<>(); if(fusionNumId!=null){ FusionNum fusionNum = this.getById(fusionNumId); if(fusionNum!=null){ fusionNumList = Collections.singletonList(fusionNum); } }else { List fusionList = caseFusionService.getListByCaseId(caseId); if(fusionList.size()<=0){ return new ArrayList<>(); } List fusionIdList = fusionList.parallelStream().map(CaseFusion::getFusionId).collect(Collectors.toList()); fusionNumList = getListByFusionIdList(fusionIdList); } if(fusionNumList.size() <=0){ return new ArrayList<>(); } CaseParam param =new CaseParam(); HashMap> typeMap = this.getTypeMap(fusionNumList); param.setTypeMap(typeMap); param.setCaseId(caseId); List sceneVos = caseService.sceneList(param, token); HashMap sceneMap = new HashMap<>(); sceneVos.forEach(entity -> sceneMap.put(entity.getModelId(),entity)); List numVoList = new ArrayList<>(); for (FusionNum fusionNum : fusionNumList) { SceneVo sceneVo = sceneMap.get(fusionNum.getModelId()); if(sceneVo == null ){ continue; } if(sceneVo.getStatus() == null){ sceneVo.setStatus(2); } FusionNumVo fusionNumVo = new FusionNumVo(); BeanUtils.copyProperties(fusionNum,fusionNumVo); Transform transform = JSONObject.parseObject(fusionNum.getTransform(), Transform.class); fusionNumVo.setTransform(transform); fusionNumVo.setSceneData(sceneVo); numVoList.add(fusionNumVo); } return numVoList; } private HashMap> getTypeMap( List list) { HashMap> typeMap = new HashMap<>(); List modelIds = list.parallelStream().map(FusionNum::getModelId).collect(Collectors.toList()); List modelList = modelService.getListByModelIds(modelIds); for (Model model : modelList) { List numList ; if(typeMap.get(model.getType()) == null){ numList = new ArrayList<>(); }else { numList = typeMap.get(model.getType()); } String num = StringUtils.isEmpty(model.getNum()) ? model.getModelId().toString(): model.getNum(); numList.add(num); typeMap.put(model.getType(),numList); } return typeMap; } @Override public FusionNumVo add(FusionParam param) { if(param.getModelId()==null || param.getCaseId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } Model model = modelService.getById(param.getModelId()); if(model == null){ throw new BusinessException(ResultCode.MODEL_NOT_EXIST); } List list = caseFusionService.getListByCaseId(param.getCaseId()); CaseFusion caseFusion = null; if(list.size() <=0){ caseFusion = new CaseFusion(); caseFusion.setCaseId(param.getCaseId()); caseFusionService.save(caseFusion); list.add(caseFusion); } caseFusion = list.get(0); FusionNum fusionNum = new FusionNum(); BeanUtils.copyProperties(param,fusionNum); fusionNum.setFusionId(caseFusion.getFusionId()); fusionNum.setTransform(JSONObject.toJSONString(param.getTransform())); this.save(fusionNum); List numVoList = this.getListByCaseId(param.getCaseId(), fusionNum.getFusionNumId(), param.getToken()); if(numVoList.size()<=0){ throw new BusinessException(ResultCode.ERROR); } return numVoList.get(0); } @Override public void updateModel(FusionParam param) { if(param.getFusionNumId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(FusionNum::getFusionNumId,param.getFusionNumId()); if(param.getTransform()!=null){ wrapper.set(FusionNum::getTransform,JSONObject.toJSONString(param.getTransform())); } if(param.getOpacity()!=null){ wrapper.set(FusionNum::getOpacity,param.getOpacity()); } if(param.getBottom()!=null){ wrapper.set(FusionNum::getBottom,param.getBottom()); } if(param.getHide()!=null){ wrapper.set(FusionNum::getHide,param.getHide()); } this.update(wrapper); } @Override public void deleteByCaseId(Integer caseId) { List caseFusionList = caseFusionService.getListByCaseId(caseId); if(caseFusionList.size() >0){ List fusionIds = caseFusionList.parallelStream().map(CaseFusion::getFusionId).collect(Collectors.toList()); if(fusionIds.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(FusionNum::getFusionId,fusionIds); this.remove(wrapper); } } } /** * 删除视图不存在的场景码 */ @Override public void deleteByNumList(Integer caseId,List deleteNum) { if(deleteNum.size() <=0){ return; } List caseFusionList = caseFusionService.getListByCaseId(caseId); if(caseFusionList.size() >0){ List fusionIds = caseFusionList.parallelStream().map(CaseFusion::getFusionId).collect(Collectors.toList()); if(fusionIds.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(Model::getNum,deleteNum); List list = modelService.list(wrapper); LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); wrapper2.in(Model::getModelId,deleteNum); List list2 = modelService.list(wrapper); list.addAll(list2); if(list.size()<=0){ return; } List modelIds = list.parallelStream().map(Model::getModelId).collect(Collectors.toList()); LambdaQueryWrapper deleteWr = new LambdaQueryWrapper<>(); deleteWr.in(FusionNum::getFusionId,fusionIds); deleteWr.in(FusionNum::getModelId,modelIds); List list1 = this.list(deleteWr); for (FusionNum fusionNum : list1) { fusionMeterService.deleteByModelId(fusionNum.getModelId()); } List models = list1.parallelStream().map(FusionNum::getModelId).collect(Collectors.toList()); caseTagPointService.deleteByModelIds(models); this.remove(deleteWr); } } } @Override public void deleteByModelId(Integer modelId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(FusionNum::getModelId,modelId); this.remove(wrapper); } }