package com.fdkankan.fusion.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fdkankan.fusion.common.FilePath;
import com.fdkankan.fusion.common.util.OBJToGLBUtil;
import com.fdkankan.fusion.entity.CaseNumEntity;
import com.fdkankan.fusion.mapper.ICaseNumMapper;
import com.fdkankan.fusion.request.SceneNumParam;
import com.fdkankan.fusion.service.ICaseNumService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.fyun.oss.UploadToOssUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author
* @since 2022-07-27
*/
@Service
public class CaseNumServiceImpl extends ServiceImpl implements ICaseNumService {
@Autowired
UploadToOssUtil uploadToOssUtil;
@Value("${local.obj_path}")
private String OBJ_PATH;
@Value("${local.glb_path}")
private String GLB_PATH;
@Override
public List getByCaseId(Integer caseId) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CaseNumEntity::getCaseId,caseId);
return this.list(wrapper);
}
@Override
public void addBatch(Integer caseId, SceneNumParam sceneNumParam) {
List caseNumEntityList = this.getByCaseId(caseId);
List newCaseNums = new ArrayList<>();
for (String num : sceneNumParam.getNumList()) {
if(caseNumEntityList.size() >0){
List inNums = caseNumEntityList.parallelStream().map(CaseNumEntity::getNum).collect(Collectors.toList());
if(inNums.contains(num)){
continue;
}
}
CaseNumEntity caseNumEntity = new CaseNumEntity();
caseNumEntity.setCaseId(caseId);
caseNumEntity.setNumType(sceneNumParam.getType());
caseNumEntity.setNum(num);
caseNumEntity.setGlbUrl(getGlbUrl(sceneNumParam.getType(),num));
newCaseNums.add(caseNumEntity);
}
if(newCaseNums.size() >0){
this.saveBatch(newCaseNums);
}
}
private String getGlbUrl(Integer type, String num) {
if(type == 0 || type == 1){ //看看,看见
String objPath = String.format(OBJ_PATH ,num);
String glbPath = String.format(GLB_PATH,num);
String glbOssPath = FilePath.GLB_OSS_PATH +"/" + num;
List fileList = uploadToOssUtil.listKeysFromAli(String.format(FilePath.OBJ_OSS_PATH, num));
for (String fileName : fileList) {
File file = new File(objPath);
if(!file.exists()){
file.mkdirs();
}
String[] split = fileName.split("/");
uploadToOssUtil.downFormAli(fileName,objPath +"/"+split[split.length-1]);
}
OBJToGLBUtil.objToGlb(objPath,glbPath);
uploadToOssUtil.upload(glbPath,glbOssPath);
return glbOssPath;
}
return null;
}
@Override
public void deleteByCaseId(Integer caseId) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CaseNumEntity::getCaseId,caseId);
this.remove(wrapper);
}
@Override
public HashMap> getTypeMap(Integer caseId) {
List caseNumList = this.getByCaseId(caseId);
HashMap> typeMap = new HashMap<>();
for (CaseNumEntity caseNumEntity : caseNumList) {
List numList ;
if(typeMap.get(caseNumEntity.getNumType()) == null){
numList = new ArrayList<>();
}else {
numList = typeMap.get(caseNumEntity.getNumType());
}
numList.add(caseNumEntity.getNum());
typeMap.put(caseNumEntity.getNumType(),numList);
}
return typeMap;
}
@Override
public List getByNum(String num) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CaseNumEntity::getNum,num);
return this.list(wrapper);
}
}