CaseNumServiceImpl.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package com.fdkankan.fusion.service.impl;
  2. import cn.hutool.core.io.FileUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.fdkankan.fusion.common.FilePath;
  5. import com.fdkankan.fusion.common.util.OBJToGLBUtil;
  6. import com.fdkankan.fusion.common.util.UploadToOssUtil;
  7. import com.fdkankan.fusion.entity.CaseNumEntity;
  8. import com.fdkankan.fusion.entity.Model;
  9. import com.fdkankan.fusion.mapper.ICaseNumMapper;
  10. import com.fdkankan.fusion.request.SceneNumParam;
  11. import com.fdkankan.fusion.service.ICaseNumService;
  12. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  13. import com.fdkankan.fusion.service.IModelService;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.beans.factory.annotation.Value;
  16. import org.springframework.stereotype.Service;
  17. import java.io.File;
  18. import java.util.ArrayList;
  19. import java.util.HashMap;
  20. import java.util.HashSet;
  21. import java.util.List;
  22. import java.util.stream.Collectors;
  23. /**
  24. * <p>
  25. * 服务实现类
  26. * </p>
  27. *
  28. * @author
  29. * @since 2022-07-27
  30. */
  31. @Service
  32. public class CaseNumServiceImpl extends ServiceImpl<ICaseNumMapper, CaseNumEntity> implements ICaseNumService {
  33. @Autowired
  34. UploadToOssUtil uploadToOssUtil;
  35. @Value("${local.obj_path}")
  36. private String OBJ_PATH;
  37. @Value("${local.glb_path}")
  38. private String GLB_PATH;
  39. @Value("${upload.query-path}")
  40. private String queryPath;
  41. @Autowired
  42. IModelService modelService;
  43. @Override
  44. public List<CaseNumEntity> getByCaseId(Integer caseId) {
  45. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  46. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  47. return this.list(wrapper);
  48. }
  49. @Override
  50. public void addBatch(Integer caseId, List<SceneNumParam> sceneNumParam) {
  51. this.deleteByCaseId(caseId);
  52. List<CaseNumEntity> newCaseNums = new ArrayList<>();
  53. List<Model> modelList = new ArrayList<>();
  54. for (SceneNumParam param : sceneNumParam) {
  55. List<String> numList = param.getNumList();
  56. HashSet<String> setNum = new HashSet<>(numList);
  57. for (String num : setNum) {
  58. CaseNumEntity caseNumEntity = new CaseNumEntity();
  59. caseNumEntity.setCaseId(caseId);
  60. caseNumEntity.setNumType(param.getType());
  61. caseNumEntity.setNum(num);
  62. newCaseNums.add(caseNumEntity);
  63. if(param.getType() == 3){ //用户上传三维模型跳过
  64. continue;
  65. }
  66. Model model = modelService.getIsNullNewByNum(num);
  67. model.setModelDateType("obj");
  68. model.setType(param.getType());
  69. model.setModelType("pointcloud"); //深时点云类型
  70. if(param.getType() != 2){ //不为深时
  71. model.setModelObjUrl(String.format(OBJ_PATH ,num) +"/mesh.obj");
  72. model.setModelGlbUrl(getGlbUrl(param.getType(),num));
  73. model.setModelType("glb");
  74. }
  75. model.setNum(num);
  76. model.setCreateStatus(1);
  77. modelList.add(model);
  78. }
  79. }
  80. if(newCaseNums.size() >0){
  81. this.saveBatch(newCaseNums);
  82. }
  83. if(modelList.size() >0){
  84. modelService.saveOrUpdateBatch(modelList);
  85. }
  86. }
  87. private String getGlbUrl(Integer type, String num) {
  88. if(type == 0 || type == 1){ //看看,看见
  89. String objPath = String.format(OBJ_PATH ,num);
  90. String glbPath = String.format(GLB_PATH,num) +"/mesh.glb";
  91. String glbOssPath = String.format(FilePath.GLB_OSS_PATH , num);
  92. if(uploadToOssUtil.existKey(glbOssPath)){
  93. return queryPath + "/"+glbOssPath;
  94. }
  95. List<String> fileList = uploadToOssUtil.listKeysFromAli(String.format(FilePath.OBJ_OSS_PATH, num));
  96. for (String fileName : fileList) {
  97. File file = new File(objPath);
  98. if(!file.exists()){
  99. file.mkdirs();
  100. }
  101. String[] split = fileName.split("/");
  102. String localPath = objPath +"/"+split[split.length-1];
  103. uploadToOssUtil.downFormAli(fileName,localPath);
  104. }
  105. OBJToGLBUtil.objToGlb(objPath,glbPath );
  106. uploadToOssUtil.upload(glbPath,glbOssPath);
  107. FileUtil.del(objPath);
  108. return queryPath + "/"+glbOssPath;
  109. }
  110. return null;
  111. }
  112. @Override
  113. public void deleteByCaseId(Integer caseId) {
  114. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  115. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  116. List<CaseNumEntity> list = this.list(wrapper);
  117. if(list.size() >0){
  118. List<String> numList = list.parallelStream().map(CaseNumEntity::getNum).collect(Collectors.toList());
  119. modelService.deleteByNum(numList);
  120. this.remove(wrapper);
  121. }
  122. }
  123. @Override
  124. public HashMap<Integer, List<String>> getTypeMap(Integer caseId) {
  125. List<CaseNumEntity> caseNumList = this.getByCaseId(caseId);
  126. HashMap<Integer,List<String>> typeMap = new HashMap<>();
  127. for (CaseNumEntity caseNumEntity : caseNumList) {
  128. List<String> numList ;
  129. if(typeMap.get(caseNumEntity.getNumType()) == null){
  130. numList = new ArrayList<>();
  131. }else {
  132. numList = typeMap.get(caseNumEntity.getNumType());
  133. }
  134. numList.add(caseNumEntity.getNum());
  135. typeMap.put(caseNumEntity.getNumType(),numList);
  136. }
  137. return typeMap;
  138. }
  139. @Override
  140. public List<CaseNumEntity> getByNum(String num) {
  141. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  142. wrapper.eq(CaseNumEntity::getNum,num);
  143. return this.list(wrapper);
  144. }
  145. }