CaseServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. package com.fdkankan.fusion.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.fdkankan.fusion.common.ResultCode;
  7. import com.fdkankan.fusion.common.ResultData;
  8. import com.fdkankan.fusion.common.util.NumTypeUtils;
  9. import com.fdkankan.fusion.entity.*;
  10. import com.fdkankan.fusion.exception.BusinessException;
  11. import com.fdkankan.fusion.common.PageInfo;
  12. import com.fdkankan.fusion.mapper.ICaseMapper;
  13. import com.fdkankan.fusion.request.CaseParam;
  14. import com.fdkankan.fusion.request.ScenePram;
  15. import com.fdkankan.fusion.response.CaseVo;
  16. import com.fdkankan.fusion.response.HotVo;
  17. import com.fdkankan.fusion.response.SceneVo;
  18. import com.fdkankan.fusion.service.*;
  19. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  20. import org.apache.commons.lang3.StringUtils;
  21. import org.springframework.beans.BeanUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import javax.lang.model.element.TypeElement;
  25. import java.time.Period;
  26. import java.util.*;
  27. import java.util.stream.Collectors;
  28. /**
  29. * <p>
  30. * 服务实现类
  31. * </p>
  32. *
  33. * @author
  34. * @since 2022-07-27
  35. */
  36. @Service
  37. public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implements ICaseService {
  38. @Autowired
  39. ISceneService sceneService;
  40. @Autowired
  41. ICaseNumService caseNumService;
  42. @Autowired
  43. ICaseFilesService caseFilesService;
  44. @Autowired
  45. IModelService modelService;
  46. @Autowired
  47. IFusionNumService fusionNumService;
  48. @Autowired
  49. ITmProjectService tmProjectService;
  50. @Autowired
  51. ITmDepartmentService tmDepartmentService;
  52. @Autowired
  53. ITmUserService tmUserService;
  54. @Autowired
  55. ITmCameraService tmCameraService;
  56. @Autowired
  57. IMapConfigService mapConfigService;
  58. @Override
  59. public PageInfo pageList(CaseParam param) {
  60. LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
  61. if(StringUtils.isNotBlank(param.getCaseTitle())){
  62. wrapper.like(CaseEntity::getCaseTitle,param.getCaseTitle());
  63. }
  64. //wrapper.eq(CaseEntity::getUserName,userName);
  65. wrapper.eq(CaseEntity::getType,0);
  66. wrapper.orderByDesc(CaseEntity::getCreateTime);
  67. Page<CaseEntity> page = this.page( new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
  68. List<Integer> mapIds = page.getRecords().stream().map(CaseEntity::getMapId).collect(Collectors.toList());
  69. if(!mapIds.isEmpty()){
  70. HashMap<Integer,MapConfig> map = mapConfigService.getMapByIds(mapIds);
  71. for (CaseEntity caseEntity : page.getRecords()) {
  72. if(caseEntity.getMapId() != null && map.get(caseEntity.getMapId()) != null){
  73. MapConfig mapConfig = map.get(caseEntity.getMapId());
  74. caseEntity.setMapConfig(mapConfig);
  75. }
  76. }
  77. }
  78. return PageInfo.PageInfo(page);
  79. }
  80. @Override
  81. public List<SceneVo> sceneList(CaseParam param) {
  82. if(param.getCaseId() == null){
  83. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  84. }
  85. if(param.getTypeMap() == null){
  86. HashMap<Integer, List<String>> typeMap = caseNumService.getTypeMap(param.getCaseId());
  87. param.setTypeMap(typeMap);
  88. }
  89. List<SceneVo> listAll = new ArrayList<>();
  90. for (Integer type : param.getTypeMap().keySet()) {
  91. List<String> numList = param.getTypeMap().get(type);
  92. if(numList ==null || numList.size() <=0 || type ==3){
  93. continue;
  94. }
  95. if(param.getTypeList() != null && !param.getTypeList().contains(type)){
  96. continue;
  97. }
  98. ScenePram scenePram = new ScenePram();
  99. scenePram.setType(type);
  100. scenePram.setPageNum(1);
  101. scenePram.setPageSize(99999);
  102. scenePram.setNumList(param.getTypeMap().get(type));
  103. scenePram.setShare("1");
  104. if(param.getTypeList() != null){
  105. scenePram.setStatus(2);
  106. }
  107. scenePram.setSceneName(param.getSceneName());
  108. PageInfo pageInfo = sceneService.pageList(scenePram);
  109. List<SceneVo> list1 = (List<SceneVo>) pageInfo.getList();
  110. listAll.addAll(list1);
  111. }
  112. if(listAll.size() >0){
  113. List<String> numList = listAll.parallelStream().map(SceneVo::getNum).collect(Collectors.toList());
  114. //设置模型
  115. HashMap<String,Model> map = modelService.getMapByNum(numList);
  116. for (SceneVo sceneVo : listAll) {
  117. String createTime = sceneVo.getCreateTime();
  118. Model model = map.get(sceneVo.getNum() + sceneVo.getType());
  119. if(model == null){
  120. continue;
  121. }
  122. BeanUtils.copyProperties(model,sceneVo);
  123. sceneVo.setCreateTime(createTime);
  124. }
  125. }
  126. //官网删除的场景,删除对应资源
  127. if(param.getTypeList() == null ){
  128. for (Integer type : param.getTypeMap().keySet()) {
  129. List<String> dbNumList = listAll.stream().filter(entity -> entity.getType().equals(type)).map(SceneVo::getNum).collect(Collectors.toList());
  130. this.deleteNotInScene(param.getTypeMap().get(type), dbNumList,type,param.getCaseId(),listAll);
  131. }
  132. }
  133. //相机解绑,标注,测量隐藏,视图
  134. for (SceneVo sceneVo : listAll) {
  135. if(!sceneVo.getBind() || (sceneVo.getStatus()!=null && sceneVo.getStatus() == 3)){
  136. fusionNumService.hideOrShow(sceneVo.getModelId(),sceneVo.getNum(),1);
  137. }else {
  138. fusionNumService.hideOrShow(sceneVo.getModelId(),sceneVo.getNum(),0);
  139. }
  140. }
  141. listAll.removeIf(sceneVo -> !sceneVo.getBind());
  142. //关联的三维模型
  143. if(param.getTypeList() == null ){
  144. List<String> numList = param.getTypeMap().get(3);
  145. if(numList!=null && numList.size() >0){
  146. List<Model> models = modelService.getListByModelIdStrs(numList);
  147. for (Model model : models) {
  148. SceneVo sceneVo = new SceneVo();
  149. sceneVo.setStatus(2);
  150. BeanUtils.copyProperties(model,sceneVo);
  151. listAll.add(sceneVo);
  152. }
  153. }
  154. }
  155. Set<String> snList = listAll.stream().filter(entity ->StringUtils.isNotBlank(entity.getSnCode()))
  156. .map(SceneVo::getSnCode).collect(Collectors.toSet());
  157. HashMap<String, TmDepartment> mapBySnCodes = tmCameraService.getMapBySnCodes(snList);
  158. for (SceneVo sceneVo : listAll) {
  159. if(StringUtils.isNotBlank(sceneVo.getSnCode())){
  160. TmDepartment tmDepartment = mapBySnCodes.get(sceneVo.getSnCode());
  161. if(tmDepartment != null){
  162. sceneVo.setDeptId(tmDepartment.getId());
  163. sceneVo.setDeptName(tmDepartment.getName());
  164. }
  165. }
  166. }
  167. Set<String> deptIdset = listAll.stream().filter(entity ->StringUtils.isNotBlank(entity.getDeptId())&& StringUtils.isBlank(entity.getDeptName()))
  168. .map(SceneVo::getDeptId).collect(Collectors.toSet());
  169. HashMap<String, TmDepartment> mapByDept = tmDepartmentService.getMapByDeptIds(deptIdset);
  170. HashMap<Integer,FusionNum> fusionNumHashMap = fusionNumService.getByCaseId(param.getCaseId());
  171. for (SceneVo sceneVo : listAll) {
  172. if(StringUtils.isNotBlank(sceneVo.getDeptId())){
  173. TmDepartment tmDepartment = mapByDept.get(sceneVo.getDeptId());
  174. if(tmDepartment != null){
  175. sceneVo.setDeptName(tmDepartment.getName());
  176. }
  177. }
  178. if(sceneVo.getModelId() != null && fusionNumHashMap.get(sceneVo.getModelId()) != null){
  179. sceneVo.setInFusion(true);
  180. }
  181. }
  182. return listAll;
  183. }
  184. private void deleteNotInScene(List<String> numList,List<String> obNumList,Integer type,Integer caseId,List<SceneVo> sceneVos) {
  185. if(type == 3){ //上传的三维模型,无需处理
  186. return;
  187. }
  188. if(numList.size() >0){
  189. List<String> delNumList = new ArrayList<>();
  190. for (String num : numList) {
  191. if(!obNumList.contains(num)){
  192. delNumList.add(num);
  193. }
  194. }
  195. List<String> delNumList2 = new ArrayList<>();
  196. for (SceneVo sceneVo : sceneVos) {
  197. if(sceneVo.getStatus() !=2 && sceneVo.getStatus() !=3 && sceneVo.getType().equals(type)){
  198. delNumList2.add(sceneVo.getNum());
  199. }
  200. }
  201. caseNumService.deleteByNum(caseId,delNumList,type);
  202. fusionNumService.deleteByNumList(caseId,delNumList2,false,type);
  203. }
  204. }
  205. @Override
  206. public void addOrUpdate(CaseEntity param) {
  207. this.saveOrUpdate(param);
  208. }
  209. @Override
  210. public void addScene(CaseParam param) {
  211. if(param.getCaseId() == null){
  212. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  213. }
  214. CaseEntity caseEntity = this.getById(param.getCaseId());
  215. if(caseEntity == null){
  216. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  217. }
  218. caseNumService.addBatch(param.getCaseId(),param.getSceneNumParam());
  219. }
  220. @Override
  221. public void delete(Integer caseId) {
  222. if(caseId == null){
  223. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  224. }
  225. //删除关联的场景
  226. caseNumService.deleteByCaseId(caseId);
  227. caseFilesService.deleteByCaseId(caseId);
  228. this.removeById(caseId);
  229. }
  230. @Override
  231. public List<CaseEntity> getByIds(List<Integer> caseIdIds) {
  232. LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
  233. wrapper.in(CaseEntity::getCaseId,caseIdIds);
  234. return this.list(wrapper);
  235. }
  236. @Override
  237. public CaseEntity getByTmProjectId(String projectId) {
  238. LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
  239. wrapper.eq(CaseEntity::getTmProjectId,projectId);
  240. return this.getOne(wrapper);
  241. }
  242. @Override
  243. public void updateIdenTityStatus(Integer caseId, Integer status) {
  244. CaseEntity caseEntity = this.getById(caseId);
  245. if(caseEntity != null && StringUtils.isNotBlank(caseEntity.getTmProjectId())){
  246. tmProjectService.updateIdenTityStatus(caseEntity.getTmProjectId(),status);
  247. }
  248. }
  249. @Override
  250. public String getDeptId(Integer caseId) {
  251. CaseEntity caseEntity = this.getById(caseId);
  252. String deptId = caseEntity.getDeptId();
  253. if(caseEntity.getType() ==1){
  254. deptId = tmProjectService.getById(caseEntity.getTmProjectId()).getDeptId();
  255. }
  256. return deptId;
  257. }
  258. @Override
  259. public CaseVo getInfo(Integer caseId) {
  260. CaseEntity caseEntity = this.getById(caseId);
  261. if(caseEntity == null){
  262. return null;
  263. }
  264. CaseVo caseVo = new CaseVo();
  265. BeanUtil.copyProperties(caseEntity,caseVo);
  266. if(caseEntity.getTmProjectId() != null){
  267. TmProject tmProject = tmProjectService.getById(caseEntity.getTmProjectId());
  268. if(tmProject!= null && tmProject.getIsDelete()!=0){
  269. throw new BusinessException(ResultCode.CASE_NOT_EXITS);
  270. }
  271. caseVo.setTmProject(tmProject);
  272. caseVo.setCaseTitle(tmProject.getProjectName());
  273. }
  274. return caseVo;
  275. }
  276. @Override
  277. public CaseEntity getKnumber(String kNumber) {
  278. LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
  279. wrapper.eq(CaseEntity::getKNumber,kNumber);
  280. List<CaseEntity> list = this.list(wrapper);
  281. if(list != null && !list.isEmpty()){
  282. return list.get(0);
  283. }
  284. return null;
  285. }
  286. }