CaseNumServiceImpl.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  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.ResultData;
  8. import com.fdkankan.fusion.common.util.*;
  9. import com.fdkankan.fusion.entity.CaseNumEntity;
  10. import com.fdkankan.fusion.entity.FusionNum;
  11. import com.fdkankan.fusion.entity.Model;
  12. import com.fdkankan.fusion.exception.BusinessException;
  13. import com.fdkankan.fusion.httpClient.client.FdKKClient;
  14. import com.fdkankan.fusion.mapper.ICaseNumMapper;
  15. import com.fdkankan.fusion.request.SceneNumParam;
  16. import com.fdkankan.fusion.service.*;
  17. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  18. import com.fdkankan.fusion.websocket.SessionService;
  19. import com.fdkankan.fusion.websocket.enums.CommonEnum;
  20. import com.fdkankan.fusion.websocket.vo.WsMessage;
  21. import lombok.extern.slf4j.Slf4j;
  22. import org.apache.commons.lang3.StringUtils;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.beans.factory.annotation.Value;
  25. import org.springframework.stereotype.Service;
  26. import javax.annotation.Resource;
  27. import java.io.File;
  28. import java.sql.BatchUpdateException;
  29. import java.util.*;
  30. import java.util.stream.Collectors;
  31. /**
  32. * <p>
  33. * 服务实现类
  34. * </p>
  35. *
  36. * @author
  37. * @since 2022-07-27
  38. */
  39. @Service
  40. @Slf4j
  41. public class CaseNumServiceImpl extends ServiceImpl<ICaseNumMapper, CaseNumEntity> implements ICaseNumService {
  42. @Autowired
  43. UploadToOssUtil uploadToOssUtil;
  44. @Value("${upload.query-path}")
  45. private String queryPath;
  46. @Value("${spring.profiles.active}")
  47. private String environment;
  48. @Autowired
  49. IModelService modelService;
  50. @Autowired
  51. IFusionNumService fusionNumService;
  52. @Autowired
  53. ICaseViewService caseViewService;
  54. @Autowired
  55. IFusionMeterService fusionMeterService;
  56. @Autowired
  57. IFusionGuidePathService fusionGuidePathService;
  58. @Autowired
  59. ICaseTagService caseTagService;
  60. @Autowired
  61. ICaseTagPointService caseTagPointService;
  62. @Autowired
  63. ThreadService threadService;
  64. @Autowired
  65. SessionService sessionService;
  66. @Override
  67. public List<CaseNumEntity> getByCaseId(Integer caseId) {
  68. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  69. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  70. return this.list(wrapper);
  71. }
  72. @Override
  73. public void addBatch(Integer caseId, List<SceneNumParam> sceneNumParam) {
  74. List<String> addNumList = this.updateByNumList(caseId, sceneNumParam);
  75. if(addNumList == null || addNumList.size()<=0){
  76. return;
  77. }
  78. List<CaseNumEntity> newCaseNums = new ArrayList<>();
  79. List<Model> modelList = new ArrayList<>();
  80. HashMap<Integer,HashSet<String>> map = new HashMap<>();
  81. for (SceneNumParam numParam : sceneNumParam) {
  82. if(map.get(numParam.getType()) == null){
  83. HashSet<String> set = new HashSet<>(numParam.getNumList());
  84. map.put(numParam.getType(),set);
  85. }else {
  86. map.get(numParam.getType()).addAll(numParam.getNumList());
  87. }
  88. }
  89. for (Integer type : map.keySet()) {
  90. HashSet<String> nulList = map.get(type);
  91. List<String> numList = new ArrayList<>(nulList);
  92. HashSet<String> setNum = new HashSet<>(numList);
  93. for (String num : setNum) {
  94. if(!addNumList.contains(num)){
  95. continue;
  96. }
  97. CaseNumEntity caseNumEntity = new CaseNumEntity();
  98. caseNumEntity.setCaseId(caseId);
  99. caseNumEntity.setNumType(type);
  100. caseNumEntity.setNum(num);
  101. newCaseNums.add(caseNumEntity);
  102. if(type == 3){ //用户上传三维模型跳过
  103. continue;
  104. }
  105. Model model = modelService.getIsNullNewByNum(num,type,1);
  106. modelList.add(model);
  107. }
  108. }
  109. if(newCaseNums.size() >0){
  110. this.saveBatch(newCaseNums);
  111. }
  112. if(modelList.size() >0){
  113. modelService.saveOrUpdateBatch(modelList);
  114. }
  115. }
  116. private List<String> updateByNumList(Integer caseId, List<SceneNumParam> sceneNumParam) {
  117. List<String> addList = new ArrayList<>();
  118. HashMap<Integer, FusionNum> fusionNumHashMap = fusionNumService.getByCaseId(caseId);
  119. HashMap<Integer,List<String>> delMap = new HashMap<>();
  120. for (SceneNumParam param : sceneNumParam) {
  121. Integer type = param.getType();
  122. List<String> numList = param.getNumList();
  123. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  124. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  125. wrapper.eq(CaseNumEntity::getNumType,type);
  126. List<CaseNumEntity> list = this.list(wrapper);
  127. List<String> hanNumList = list.parallelStream().map(CaseNumEntity::getNum).collect(Collectors.toList());
  128. List<String> delList = new ArrayList<>();
  129. for (String num : hanNumList) {
  130. if(!numList.contains(num)){
  131. delList.add(num);
  132. }
  133. }
  134. for (String num : numList) {
  135. if(!hanNumList.contains(num)){
  136. addList.add(num);
  137. }
  138. }
  139. if(!delList.isEmpty()){
  140. HashMap<String, Model> mapByNum = modelService.getMapByNum(delList);
  141. for (String key : mapByNum.keySet()) {
  142. Model model = mapByNum.get(key);
  143. if(model != null && model.getType().equals(param.getType()) && fusionNumHashMap.containsKey(model.getModelId())){
  144. throw new BusinessException(ResultCode.DEL_NUM_ERROR);
  145. }
  146. }
  147. delMap.put(param.getType(),delList);
  148. }
  149. }
  150. if(!delMap.isEmpty()){
  151. for (Integer type : delMap.keySet()) {
  152. this.deleteByNum(caseId,delMap.get(type),type);
  153. }
  154. }
  155. return addList;
  156. }
  157. @Override
  158. public void deleteByNum(Integer caseId, List<String> delList,Integer type) {
  159. if(delList.size() >0){
  160. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  161. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  162. wrapper.eq(CaseNumEntity::getNumType,type);
  163. wrapper.in(CaseNumEntity::getNum,delList);
  164. this.remove(wrapper);
  165. fusionNumService.deleteByNumList(caseId,delList,true,type);
  166. }
  167. }
  168. @Override
  169. public void deleteByCaseId(Integer caseId) {
  170. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  171. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  172. this.remove(wrapper);
  173. fusionNumService.deleteByCaseId(caseId);
  174. caseViewService.deleteByCaseId(caseId);
  175. fusionGuidePathService.deleteByCaseId(caseId);
  176. fusionMeterService.deleteByCaseId(caseId);
  177. caseTagService.deletePointByCaseId(caseId);
  178. }
  179. @Override
  180. public HashMap<Integer, List<String>> getTypeMap(Integer caseId) {
  181. List<CaseNumEntity> caseNumList = this.getByCaseId(caseId);
  182. HashMap<Integer,List<String>> typeMap = new HashMap<>();
  183. for (CaseNumEntity caseNumEntity : caseNumList) {
  184. List<String> numList ;
  185. if(typeMap.get(caseNumEntity.getNumType()) == null){
  186. numList = new ArrayList<>();
  187. }else {
  188. numList = typeMap.get(caseNumEntity.getNumType());
  189. }
  190. numList.add(caseNumEntity.getNum());
  191. typeMap.put(caseNumEntity.getNumType(),numList);
  192. }
  193. return typeMap;
  194. }
  195. @Override
  196. public List<CaseNumEntity> getByNum(String num) {
  197. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  198. wrapper.eq(CaseNumEntity::getNum,num);
  199. return this.list(wrapper);
  200. }
  201. @Override
  202. public void addModeByCaseId(Integer caseId, Integer modelId) {
  203. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  204. wrapper.eq(CaseNumEntity::getCaseId,caseId);
  205. wrapper.eq(CaseNumEntity::getNum,modelId);
  206. List<CaseNumEntity> list = this.list(wrapper);
  207. if(list.isEmpty()){
  208. CaseNumEntity caseNumEntity = new CaseNumEntity();
  209. caseNumEntity.setCaseId(caseId);
  210. caseNumEntity.setNumType(3);
  211. caseNumEntity.setNum(modelId.toString());
  212. this.save(caseNumEntity);
  213. }
  214. }
  215. @Override
  216. public void deleteByModel(Integer modelId) {
  217. LambdaQueryWrapper<CaseNumEntity> wrapper = new LambdaQueryWrapper<>();
  218. wrapper.eq(CaseNumEntity::getNum,modelId.toString());
  219. this.remove(wrapper);
  220. modelService.removeById(modelId);
  221. }
  222. }