CaseNumServiceImpl.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. package com.fdkankan.fusion.service.impl;
  2. import cn.hutool.core.io.FileUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.fdkankan.fusion.common.FilePath;
  6. import com.fdkankan.fusion.common.ResultCode;
  7. import com.fdkankan.fusion.common.util.*;
  8. import com.fdkankan.fusion.entity.CaseNumEntity;
  9. import com.fdkankan.fusion.entity.Model;
  10. import com.fdkankan.fusion.exception.BusinessException;
  11. import com.fdkankan.fusion.httpClient.client.FdKKClient;
  12. import com.fdkankan.fusion.mapper.ICaseNumMapper;
  13. import com.fdkankan.fusion.request.SceneNumParam;
  14. import com.fdkankan.fusion.service.*;
  15. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.apache.commons.lang3.StringUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.beans.factory.annotation.Value;
  20. import org.springframework.stereotype.Service;
  21. import javax.annotation.Resource;
  22. import java.io.File;
  23. import java.sql.BatchUpdateException;
  24. import java.util.*;
  25. import java.util.stream.Collectors;
  26. /**
  27. * <p>
  28. * 服务实现类
  29. * </p>
  30. *
  31. * @author
  32. * @since 2022-07-27
  33. */
  34. @Service
  35. @Slf4j
  36. public class CaseNumServiceImpl extends ServiceImpl<ICaseNumMapper, CaseNumEntity> implements ICaseNumService {
  37. @Autowired
  38. UploadToOssUtil uploadToOssUtil;
  39. @Value("${upload.query-path}")
  40. private String queryPath;
  41. @Value("${spring.profiles.active}")
  42. private String environment;
  43. @Autowired
  44. IModelService modelService;
  45. @Autowired
  46. IFusionNumService fusionNumService;
  47. @Autowired
  48. ICaseViewService caseViewService;
  49. @Autowired
  50. IFusionMeterService fusionMeterService;
  51. @Autowired
  52. IFusionGuidePathService fusionGuidePathService;
  53. @Autowired
  54. ICaseTagService caseTagService;
  55. @Autowired
  56. ICaseTagPointService caseTagPointService;
  57. @Autowired
  58. ThreadService threadService;
  59. @Override
  60. public List<CaseNumEntity> getByCaseId(Integer caseId) {
  61. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  62. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  63. return this.list(wrapper);
  64. }
  65. @Override
  66. public void addBatch(Integer caseId, List<SceneNumParam> sceneNumParam) {
  67. List<String> addNumList = this.updateByNumList(caseId, sceneNumParam);
  68. if(addNumList == null || addNumList.size()<=0){
  69. return;
  70. }
  71. List<CaseNumEntity> newCaseNums = new ArrayList<>();
  72. List<Model> modelList = new ArrayList<>();
  73. for (SceneNumParam param : sceneNumParam) {
  74. List<String> numList = param.getNumList();
  75. HashSet<String> setNum = new HashSet<>(numList);
  76. for (String num : setNum) {
  77. if(!addNumList.contains(num)){
  78. continue;
  79. }
  80. CaseNumEntity caseNumEntity = new CaseNumEntity();
  81. caseNumEntity.setCaseId(caseId);
  82. caseNumEntity.setNumType(param.getType());
  83. caseNumEntity.setNum(num);
  84. newCaseNums.add(caseNumEntity);
  85. if(param.getType() == 3){ //用户上传三维模型跳过
  86. continue;
  87. }
  88. Model model = modelService.getIsNullNewByNum(num,param.getType());
  89. model.setModelDateType("obj");
  90. model.setType(param.getType());
  91. model.setModelType("pointcloud"); //深时点云类型
  92. // if(param.getType() == 0 || param.getType() == 1 || param.getType() == 4 || param.getType() == 6){ //看看,看见
  93. // model.setModelObjUrl(String.format(FilePath.OBJ_LOCAL_PATH,environment ,num) +"/mesh.obj");
  94. // model.setModelGlbUrl(getGlbUrl(param.getType(),num,model));
  95. // model.setModelType("b3dm");
  96. // model.setModelDateType("b3dm");
  97. // }
  98. model.setNum(num);
  99. model.setCreateStatus(1);
  100. modelList.add(model);
  101. }
  102. }
  103. if(newCaseNums.size() >0){
  104. this.saveBatch(newCaseNums);
  105. }
  106. if(modelList.size() >0){
  107. modelService.saveOrUpdateBatch(modelList);
  108. }
  109. }
  110. private String getGlbUrl(Integer type, String num,Model model) {
  111. if(type == 0 || type == 1 || type == 4 || type == 6){ //看看,看见
  112. threadService.objToB3dm(num,model.getModelId());
  113. }
  114. return null;
  115. }
  116. private void toGlB(File localFile, List<String> localGlbPath) {
  117. File[] files = localFile.listFiles();
  118. for (File file : files) {
  119. if(file.isDirectory()){
  120. toGlB(file,localGlbPath);
  121. }
  122. if(file.getParent().contains("lod_") && file.getParent().contains("lod_0") ){
  123. String glbPath = OBJToGLBUtil.objToB3dm(file.getPath(),file.getParentFile().getPath()+"/b3dm");
  124. localGlbPath.add(glbPath);
  125. continue;
  126. }
  127. if(file.getName().contains(".obj")){
  128. String glbPath = OBJToGLBUtil.objToB3dm(file.getPath(),file.getParentFile().getPath()+"/b3dm");
  129. localGlbPath.add(glbPath);
  130. }
  131. }
  132. }
  133. private List<String> updateByNumList(Integer caseId, List<SceneNumParam> sceneNumParam) {
  134. List<String> addList = new ArrayList<>();
  135. for (SceneNumParam param : sceneNumParam) {
  136. Integer type = param.getType();
  137. List<String> numList = param.getNumList();
  138. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  139. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  140. wrapper.eq(CaseNumEntity::getNumType,type);
  141. List<CaseNumEntity> list = this.list(wrapper);
  142. List<String> hanNumList = list.parallelStream().map(CaseNumEntity::getNum).collect(Collectors.toList());
  143. List<String> delList = new ArrayList<>();
  144. for (String num : hanNumList) {
  145. if(!numList.contains(num)){
  146. delList.add(num);
  147. }
  148. }
  149. for (String num : numList) {
  150. if(!hanNumList.contains(num)){
  151. addList.add(num);
  152. }
  153. }
  154. this.deleteByNum(caseId,delList,param.getType());
  155. }
  156. return addList;
  157. }
  158. @Override
  159. public void deleteByNum(Integer caseId, List<String> delList,Integer type) {
  160. if(delList.size() >0){
  161. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  162. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  163. wrapper.eq(CaseNumEntity::getNumType,type);
  164. wrapper.in(CaseNumEntity::getNum,delList);
  165. this.remove(wrapper);
  166. fusionNumService.deleteByNumList(caseId,delList,true,type);
  167. }
  168. }
  169. @Override
  170. public void deleteByCaseId(Integer caseId) {
  171. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  172. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  173. this.remove(wrapper);
  174. fusionNumService.deleteByCaseId(caseId);
  175. caseViewService.deleteByCaseId(caseId);
  176. fusionGuidePathService.deleteByCaseId(caseId);
  177. fusionMeterService.deleteByCaseId(caseId);
  178. caseTagService.deletePointByCaseId(caseId);
  179. }
  180. @Override
  181. public HashMap<Integer, List<String>> getTypeMap(Integer caseId) {
  182. List<CaseNumEntity> caseNumList = this.getByCaseId(caseId);
  183. HashMap<Integer,List<String>> typeMap = new HashMap<>();
  184. for (CaseNumEntity caseNumEntity : caseNumList) {
  185. List<String> numList ;
  186. if(typeMap.get(caseNumEntity.getNumType()) == null){
  187. numList = new ArrayList<>();
  188. }else {
  189. numList = typeMap.get(caseNumEntity.getNumType());
  190. }
  191. numList.add(caseNumEntity.getNum());
  192. typeMap.put(caseNumEntity.getNumType(),numList);
  193. }
  194. return typeMap;
  195. }
  196. @Override
  197. public List<CaseNumEntity> getByNum(String num) {
  198. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  199. wrapper.eq(CaseNumEntity::getNum,num);
  200. return this.list(wrapper);
  201. }
  202. }