CaseNumServiceImpl.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  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.FileWriterUtil;
  6. import com.fdkankan.fusion.common.util.OBJToGLBUtil;
  7. import com.fdkankan.fusion.common.util.UploadToOssUtil;
  8. import com.fdkankan.fusion.entity.CaseNumEntity;
  9. import com.fdkankan.fusion.entity.Model;
  10. import com.fdkankan.fusion.mapper.ICaseNumMapper;
  11. import com.fdkankan.fusion.request.SceneNumParam;
  12. import com.fdkankan.fusion.service.*;
  13. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  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.*;
  19. import java.util.stream.Collectors;
  20. /**
  21. * <p>
  22. * 服务实现类
  23. * </p>
  24. *
  25. * @author
  26. * @since 2022-07-27
  27. */
  28. @Service
  29. public class CaseNumServiceImpl extends ServiceImpl<ICaseNumMapper, CaseNumEntity> implements ICaseNumService {
  30. @Autowired
  31. UploadToOssUtil uploadToOssUtil;
  32. @Value("${local.obj_path}")
  33. private String OBJ_PATH;
  34. @Value("${local.glb_path}")
  35. private String GLB_PATH;
  36. @Value("${upload.query-path}")
  37. private String queryPath;
  38. @Autowired
  39. IModelService modelService;
  40. @Autowired
  41. IFusionNumService fusionNumService;
  42. @Autowired
  43. ICaseViewService caseViewService;
  44. @Autowired
  45. IFusionMeterService fusionMeterService;
  46. @Autowired
  47. IFusionGuidePathService fusionGuidePathService;
  48. @Autowired
  49. ICaseTagService caseTagService;
  50. @Autowired
  51. ICaseTagPointService caseTagPointService;
  52. @Override
  53. public List<CaseNumEntity> getByCaseId(Integer caseId) {
  54. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  55. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  56. return this.list(wrapper);
  57. }
  58. @Override
  59. public void addBatch(Integer caseId, List<SceneNumParam> sceneNumParam) {
  60. List<String> addNumList = this.updateByNumList(caseId, sceneNumParam);
  61. if(addNumList == null || addNumList.size()<=0){
  62. return;
  63. }
  64. List<CaseNumEntity> newCaseNums = new ArrayList<>();
  65. List<Model> modelList = new ArrayList<>();
  66. for (SceneNumParam param : sceneNumParam) {
  67. List<String> numList = param.getNumList();
  68. HashSet<String> setNum = new HashSet<>(numList);
  69. for (String num : setNum) {
  70. if(!addNumList.contains(num)){
  71. continue;
  72. }
  73. CaseNumEntity caseNumEntity = new CaseNumEntity();
  74. caseNumEntity.setCaseId(caseId);
  75. caseNumEntity.setNumType(param.getType());
  76. caseNumEntity.setNum(num);
  77. newCaseNums.add(caseNumEntity);
  78. if(param.getType() == 3){ //用户上传三维模型跳过
  79. continue;
  80. }
  81. Model model = modelService.getIsNullNewByNum(num);
  82. model.setModelDateType("obj");
  83. model.setType(param.getType());
  84. model.setModelType("pointcloud"); //深时点云类型
  85. if(param.getType() != 2){ //不为深时
  86. model.setModelObjUrl(String.format(OBJ_PATH ,num) +"/mesh.obj");
  87. model.setModelGlbUrl(getGlbUrl(param.getType(),num,model));
  88. model.setModelType("glb");
  89. }
  90. model.setNum(num);
  91. model.setCreateStatus(1);
  92. modelList.add(model);
  93. }
  94. }
  95. if(newCaseNums.size() >0){
  96. this.saveBatch(newCaseNums);
  97. }
  98. if(modelList.size() >0){
  99. modelService.saveOrUpdateBatch(modelList);
  100. }
  101. }
  102. private String getGlbUrl(Integer type, String num,Model model) {
  103. if(type == 0 || type == 1){ //看看,看见
  104. String objPath = String.format(OBJ_PATH ,num);
  105. String glbPath = String.format(GLB_PATH,num) +"/mesh.glb";
  106. String glbOssPath = String.format(FilePath.GLB_OSS_PATH , num);
  107. // if(uploadToOssUtil.existKey(glbOssPath)){
  108. // return queryPath + "/"+glbOssPath;
  109. // }
  110. List<String> fileList = uploadToOssUtil.listKeysFromAli(String.format(FilePath.OBJ_OSS_PATH, num));
  111. for (String fileName : fileList) {
  112. File file = new File(objPath);
  113. if(!file.exists()){
  114. file.mkdirs();
  115. }
  116. String[] split = fileName.split("/");
  117. String localPath = objPath +"/"+split[split.length-1];
  118. uploadToOssUtil.downFormAli(fileName,localPath);
  119. }
  120. OBJToGLBUtil.objToGlb(objPath,glbPath );
  121. File file = new File(glbPath);
  122. if(file!=null){
  123. model.setModelSize(FileWriterUtil.setFileSize(file.length()));
  124. }
  125. uploadToOssUtil.uploadOss(glbPath,glbOssPath);
  126. FileUtil.del(objPath);
  127. return queryPath + "/"+glbOssPath;
  128. }
  129. return null;
  130. }
  131. private List<String> updateByNumList(Integer caseId, List<SceneNumParam> sceneNumParam) {
  132. List<String> updateNumList = new ArrayList<>();
  133. for (SceneNumParam param : sceneNumParam) {
  134. List<String> numList = param.getNumList();
  135. updateNumList.addAll(numList);
  136. }
  137. if(updateNumList.size()<=0){
  138. deleteByCaseId(caseId);
  139. return null;
  140. }
  141. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  142. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  143. List<CaseNumEntity> list = this.list(wrapper);
  144. List<String> hanNumList = list.parallelStream().map(CaseNumEntity::getNum).collect(Collectors.toList());
  145. List<String> delList = new ArrayList<>();
  146. List<String> addList = new ArrayList<>();
  147. for (String num : hanNumList) {
  148. if(!updateNumList.contains(num)){
  149. delList.add(num);
  150. }
  151. }
  152. for (String num : updateNumList) {
  153. if(!hanNumList.contains(num)){
  154. addList.add(num);
  155. }
  156. }
  157. this.deleteByNum(caseId,delList);
  158. return addList;
  159. }
  160. @Override
  161. public void deleteByNum(Integer caseId, List<String> delList) {
  162. if(delList.size() >0){
  163. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  164. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  165. wrapper.in(CaseNumEntity::getNum,delList);
  166. this.remove(wrapper);
  167. fusionNumService.deleteByNumList(caseId,delList,true);
  168. }
  169. }
  170. @Override
  171. public void deleteByCaseId(Integer caseId) {
  172. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  173. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  174. this.remove(wrapper);
  175. fusionNumService.deleteByCaseId(caseId);
  176. caseViewService.deleteByCaseId(caseId);
  177. fusionGuidePathService.deleteByCaseId(caseId);
  178. fusionMeterService.deleteByCaseId(caseId);
  179. caseTagService.deletePointByCaseId(caseId);
  180. }
  181. @Override
  182. public HashMap<Integer, List<String>> getTypeMap(Integer caseId) {
  183. List<CaseNumEntity> caseNumList = this.getByCaseId(caseId);
  184. HashMap<Integer,List<String>> typeMap = new HashMap<>();
  185. for (CaseNumEntity caseNumEntity : caseNumList) {
  186. List<String> numList ;
  187. if(typeMap.get(caseNumEntity.getNumType()) == null){
  188. numList = new ArrayList<>();
  189. }else {
  190. numList = typeMap.get(caseNumEntity.getNumType());
  191. }
  192. numList.add(caseNumEntity.getNum());
  193. typeMap.put(caseNumEntity.getNumType(),numList);
  194. }
  195. return typeMap;
  196. }
  197. @Override
  198. public List<CaseNumEntity> getByNum(String num) {
  199. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  200. wrapper.eq(CaseNumEntity::getNum,num);
  201. return this.list(wrapper);
  202. }
  203. }