SceneService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. package com.fdkankan.fusion.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.collection.CollectionUtil;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.fdkankan.fusion.common.FilePath;
  8. import com.fdkankan.fusion.common.ResultCode;
  9. import com.fdkankan.fusion.common.util.*;
  10. import com.fdkankan.fusion.entity.*;
  11. import com.fdkankan.fusion.exception.BusinessException;
  12. import com.fdkankan.fusion.common.PageInfo;
  13. import com.fdkankan.fusion.httpClient.FdService;
  14. import com.fdkankan.fusion.httpClient.LaserService;
  15. import com.fdkankan.fusion.httpClient.client.FdKKClient;
  16. import com.fdkankan.fusion.httpClient.client.LaserClient;
  17. import com.fdkankan.fusion.httpClient.request.LaserSceneParam;
  18. import com.fdkankan.fusion.httpClient.response.FdkkResponse;
  19. import com.fdkankan.fusion.httpClient.response.FdkkScenePlusVo;
  20. import com.fdkankan.fusion.request.ScenePram;
  21. import com.fdkankan.fusion.response.SceneProEntityVo;
  22. import com.fdkankan.fusion.response.SceneVo;
  23. import com.fdkankan.fusion.service.*;
  24. import lombok.extern.slf4j.Slf4j;
  25. import org.apache.commons.lang3.StringUtils;
  26. import org.springframework.beans.BeanUtils;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.web.multipart.MultipartFile;
  30. import javax.annotation.Resource;
  31. import java.io.File;
  32. import java.security.Security;
  33. import java.util.*;
  34. import java.util.stream.Collectors;
  35. @Service
  36. @Slf4j
  37. public class SceneService implements ISceneService {
  38. @Autowired
  39. IModelService modelService;
  40. @Autowired
  41. FdService fdService;
  42. @Autowired
  43. ITmDepartmentService tmDepartmentService;
  44. @Autowired
  45. ITmCameraService tmCameraService;
  46. @Autowired
  47. ICaseService caseService;
  48. @Autowired
  49. ITmProjectService tmProjectService;
  50. @Autowired
  51. ICaseNumService caseNumService;
  52. @Autowired
  53. IMqSendLogService mqSendLogService;
  54. @Autowired
  55. ISceneDeptShareService sceneDeptShareService;
  56. @Autowired
  57. IScenePlusService scenePlusService;
  58. @Autowired
  59. ICameraService cameraService;
  60. @Autowired
  61. ITmRoleService tmRoleService;
  62. @Autowired
  63. LaserService laserService;
  64. @Override
  65. public PageInfo pageList(ScenePram param) {
  66. String deptId = tmDepartmentService.getDeptId();
  67. HashMap<String,SceneDeptShare> shareHashMap = new HashMap<>();
  68. List<String> deptIds = new ArrayList<>();
  69. if(param.getSearchType() == 0){ //当前组织下场景
  70. deptIds.add(deptId);
  71. }
  72. if(param.getSearchType() == 1){ //下级共享给上级场景
  73. List<SceneDeptShare> numList = sceneDeptShareService.getNumListByDeptId(deptId,param.getIsObj());
  74. if(numList == null || numList.isEmpty()){
  75. return PageInfo.PageInfoEmpty();
  76. }
  77. numList.forEach(e -> shareHashMap.put(e.getNum()+e.getIsObj(),e));
  78. param.setNumList(numList.stream().map(SceneDeptShare::getNum).collect(Collectors.toList()));
  79. List<TmDepartment> sonByDeptId = tmDepartmentService.getSonByDeptId(deptId);
  80. deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList());
  81. if(deptIds.isEmpty()){
  82. return PageInfo.PageInfoEmpty();
  83. }
  84. }
  85. if(param.getSearchType() == 2){ //当前组织及下级组织的数据
  86. List<TmDepartment> sonByDeptId = tmDepartmentService.getSonByDeptId(deptId);
  87. deptIds.add(deptId);
  88. deptIds.addAll(sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList()));
  89. }
  90. if(StringUtils.isNotBlank(param.getDeptId())){
  91. if(!deptIds.contains(param.getDeptId())){
  92. return PageInfo.PageInfoEmpty();
  93. }else {
  94. deptIds = Arrays.asList(param.getDeptId());
  95. }
  96. }
  97. if(deptIds.isEmpty()){
  98. return PageInfo.PageInfoEmpty();
  99. }
  100. List<TmCamera> tmCameraList = tmCameraService.getByDeptIds(deptIds);
  101. List<String> collect = tmCameraList.stream().map(TmCamera::getCameraSn).collect(Collectors.toList());
  102. param.setSnCodes(collect);
  103. if(param.getSnCodes().isEmpty() ){
  104. return PageInfo.PageInfoEmpty();
  105. }
  106. Page<SceneVo> sceneVoPage = scenePlusService.sceneList(param);
  107. HashMap<String, JSONObject> laserMap = new HashMap<>();
  108. if(param.getIsObj() == 0){
  109. HashMap<Integer,List<String>> numMap = new HashMap<>();
  110. for (SceneVo record : sceneVoPage.getRecords()) {
  111. numMap.computeIfAbsent(record.getSceneSource(), k -> new ArrayList<>());
  112. numMap.get(record.getSceneSource()).add(record.getNum());
  113. }
  114. for (Integer sceneSource : numMap.keySet()) {
  115. HashMap<String, JSONObject> map = laserService.list(numMap.get(sceneSource),sceneSource);
  116. for (String key : map.keySet()) {
  117. laserMap.put(key,map.get(key));
  118. }
  119. }
  120. }
  121. List<SceneVo> sceneVoList = sceneVoPage.getRecords();
  122. Set<String> snCodes = sceneVoList.stream().map(SceneVo::getSnCode).collect(Collectors.toSet());
  123. List<SceneVo> modelingScene = sceneVoList.stream().filter(e -> e.getStatus() == 0).collect(Collectors.toList());
  124. List<String> numList = modelingScene.stream().map(SceneVo::getNum).collect(Collectors.toList());
  125. HashMap<String,Boolean> modelingMap = mqSendLogService.getMapByNumList(numList);
  126. HashMap<String, TmDepartment> map = tmCameraService.getMapBySnCodes(snCodes);
  127. for (SceneVo sceneVo : sceneVoList) {
  128. if(param.getIsObj() == 0){
  129. JSONObject ssObj = laserMap.get(sceneVo.getNum());
  130. if(ssObj!=null) {
  131. sceneVo.setSceneName(sceneVo.getLaserTitle());
  132. sceneVo.setThumb(ssObj.getString("thumb"));
  133. sceneVo.setWebSite(ssObj.getString("webSite"));
  134. sceneVo.setViewCount(ssObj.getInteger("viewCount"));
  135. sceneVo.setStatus(ssObj.getInteger("status"));
  136. sceneVo.setName(sceneVo.getSceneName());
  137. sceneVo.setTitle(sceneVo.getSceneName());
  138. sceneVo.setId(ssObj.getLong("id"));
  139. }else if(sceneVo.getStatus() != 0){
  140. sceneVo.setStatus(-1);
  141. sceneVo.setWebSite(null);
  142. }
  143. }else {
  144. sceneVo.setStatus(setLaserStatus(sceneVo.getStatus(),sceneVo.getPayStatus()));
  145. }
  146. sceneVo.setIsObj(param.getIsObj());
  147. TmDepartment tmDepartment = map.get(sceneVo.getSnCode().toUpperCase());
  148. if(tmDepartment != null){
  149. sceneVo.setDeptId(tmDepartment.getId());
  150. sceneVo.setDeptName(tmDepartment.getName());
  151. }
  152. sceneVo.setType(CameraUtil.getTypeByCameraType(sceneVo.getCameraType(),param.getIsObj()));
  153. if(sceneVo.getStatus() == 0 && modelingMap.get(sceneVo.getNum()) != null && !modelingMap.get(sceneVo.getNum())){
  154. sceneVo.setStatus(5);
  155. }
  156. if(param.getSearchType() == 1){
  157. SceneDeptShare sceneDeptShare = shareHashMap.get(sceneVo.getNum() + sceneVo.getIsObj());
  158. if(sceneDeptShare != null){
  159. sceneVo.setIsAuth(sceneDeptShare.getIsAuth());
  160. }
  161. }else {
  162. sceneVo.setIsAuth(2);
  163. }
  164. }
  165. return PageInfo.PageInfo(sceneVoPage);
  166. }
  167. private Integer setLaserStatus(Integer status,Integer payStatus){
  168. //深时状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3封存 4生成OBJ中 ,5排队
  169. if(status == 0){
  170. return 0;
  171. }
  172. if(status == -1){
  173. return 1;
  174. }
  175. if(payStatus != 1){ //封存
  176. return 3;
  177. }
  178. if(status == -2){
  179. return 2;
  180. }
  181. return status;
  182. }
  183. @Override
  184. public Object getFdTokenByNum(String num,Integer isObj) {
  185. if(StringUtils.isBlank(num)){
  186. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  187. }
  188. sceneDeptShareService.checkNum(num,isObj);
  189. return fdService.getFdTokenByNum(num);
  190. }
  191. @Override
  192. public void deleteNum(String num) {
  193. if(StringUtils.isBlank(num)){
  194. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  195. }
  196. List<CaseNumEntity> caseNumEntities = caseNumService.getByNum(num);
  197. for (CaseNumEntity caseNumEntity : caseNumEntities) {
  198. CaseEntity caseEntity = caseService.getById(caseNumEntity.getCaseId());
  199. if(caseEntity == null){
  200. continue;
  201. }
  202. if( caseEntity.getTmProjectId() != null){
  203. TmProject tmProject = tmProjectService.getById(caseEntity.getTmProjectId());
  204. if(tmProject!=null){
  205. throw new BusinessException(ResultCode.CASE_USE.code, String.format(ResultCode.CASE_USE.msg,tmProject.getProjectName()));
  206. }
  207. }else {
  208. throw new BusinessException(ResultCode.CASE_USE.code, String.format(ResultCode.CASE_USE.msg,caseEntity.getCaseTitle()));
  209. }
  210. }
  211. fdService.deleteNum(num);
  212. }
  213. @Override
  214. public void buildSceneObj(LaserSceneParam param) {
  215. // ScenePlus scenePlus = scenePlusService.getById(param.getId());
  216. // if(scenePlus == null){
  217. // throw new BusinessException(ResultCode.SCENE_NOT_EXIST);
  218. // }
  219. // if(scenePlus.getSceneStatus() !=-2){
  220. // throw new BusinessException(ResultCode.SCENE_BUILDING);
  221. // }
  222. // if(!NumTypeUtils.isLaserBySceneSource(scenePlus.getSceneSource())){
  223. // throw new BusinessException(ResultCode.SCENE_TYPE_ERROR);
  224. // }
  225. // JSONObject object = fdService.sceneInfo(scenePlus.getNum());
  226. // Integer id = object.getInteger("id");
  227. // param.setId(id);
  228. fdService.buildSceneObj(param);
  229. }
  230. @Override
  231. public Object sceneDetail(LaserSceneParam param) {
  232. // ScenePlus scenePlus = scenePlusService.getById(param.getId());
  233. // if(scenePlus == null){
  234. // throw new BusinessException(ResultCode.SCENE_NOT_EXIST);
  235. // }
  236. // if(scenePlus.getSceneStatus() !=-2){
  237. // throw new BusinessException(ResultCode.SCENE_BUILDING);
  238. // }
  239. // if(!NumTypeUtils.isLaserBySceneSource(scenePlus.getSceneSource())){
  240. // throw new BusinessException(ResultCode.SCENE_TYPE_ERROR);
  241. // }
  242. // JSONObject object = fdService.sceneInfo(scenePlus.getNum());
  243. // Integer id = object.getInteger("id");
  244. // param.setId(id);
  245. return fdService.sceneDetail(param);
  246. }
  247. @Override
  248. public void copyScene(ScenePram param) {
  249. if(StringUtils.isEmpty(param.getNum())){
  250. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  251. }
  252. fdService.copyScene(param.getNum());
  253. }
  254. }