CaseServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. package com.fdkankan.fusion.service.impl;
  2. import cn.dev33.satoken.context.SaHolder;
  3. import cn.dev33.satoken.stp.StpUtil;
  4. import cn.hutool.core.bean.BeanUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.fdkankan.fusion.common.ResultCode;
  8. import com.fdkankan.fusion.common.ResultData;
  9. import com.fdkankan.fusion.common.util.NumTypeUtils;
  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.mapper.ICaseMapper;
  14. import com.fdkankan.fusion.request.CaseParam;
  15. import com.fdkankan.fusion.request.ScenePram;
  16. import com.fdkankan.fusion.response.CaseVo;
  17. import com.fdkankan.fusion.response.HotVo;
  18. import com.fdkankan.fusion.response.SceneVo;
  19. import com.fdkankan.fusion.service.*;
  20. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  21. import org.apache.commons.lang3.StringUtils;
  22. import org.springframework.beans.BeanUtils;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Service;
  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. ICaseSettingsService caseSettingsService;
  58. @Autowired
  59. IMapConfigService mapConfigService;
  60. @Override
  61. public PageInfo pageList(CaseParam param,String userName) {
  62. LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
  63. if(StringUtils.isNotBlank(param.getCaseTitle())){
  64. wrapper.like(CaseEntity::getCaseTitle,param.getCaseTitle());
  65. }
  66. List<String> deptIds = new ArrayList<>();
  67. String share = SaHolder.getRequest().getHeader("share");
  68. if(StringUtils.isNotBlank(share) && "1".equals(share)){ //分享请求头
  69. deptIds = tmDepartmentService.list().stream().map(TmDepartment::getId).collect(Collectors.toList());
  70. wrapper.eq(CaseEntity::getMapShow,true);
  71. }else {
  72. deptIds = tmDepartmentService.getDeptIds();
  73. }
  74. if(deptIds.size() <=0){
  75. return PageInfo.PageInfo(new Page<>(param.getPageNum(),param.getPageSize()));
  76. }
  77. List<String> deptIds2 = tmDepartmentService.getSonByDeptIdAndDeptIds(deptIds, param.getDeptId());
  78. wrapper.in(CaseEntity::getDeptId,deptIds2);
  79. //wrapper.eq(CaseEntity::getUserName,userName);
  80. wrapper.eq(CaseEntity::getType,0);
  81. wrapper.orderByDesc(CaseEntity::getCreateTime);
  82. Page<CaseEntity> page = this.page( new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
  83. Set<String> tmProIds = page.getRecords().stream().filter(entity -> StringUtils.isNotBlank(entity.getTmProjectId()))
  84. .map(CaseEntity::getTmProjectId).collect(Collectors.toSet());
  85. HashMap<String, TmProject> proMap = tmProjectService.getMapByIds(tmProIds);
  86. for (CaseEntity record : page.getRecords()) {
  87. if(StringUtils.isNotBlank(record.getTmProjectId())){
  88. TmProject project = proMap.get(record.getTmProjectId());
  89. if(project != null){
  90. record.setDeptId(project.getDeptId());
  91. }
  92. }
  93. }
  94. List<Integer> mapIds = page.getRecords().stream().map(CaseEntity::getMapId).collect(Collectors.toList());
  95. if(!mapIds.isEmpty()){
  96. HashMap<Integer,MapConfig> map = mapConfigService.getMapByIds(mapIds);
  97. for (CaseEntity caseEntity : page.getRecords()) {
  98. if(caseEntity.getMapId() != null && map.get(caseEntity.getMapId()) != null){
  99. MapConfig mapConfig = map.get(caseEntity.getMapId());
  100. caseEntity.setMapConfig(mapConfig);
  101. }
  102. }
  103. }
  104. Set<String> deptIds1 = page.getRecords().stream().filter(entity -> StringUtils.isNotBlank(entity.getDeptId()))
  105. .map(CaseEntity::getDeptId).collect(Collectors.toSet());
  106. HashMap<String, TmDepartment> mapByDeptIds = tmDepartmentService.getMapByDeptIds(deptIds1);
  107. for (CaseEntity record : page.getRecords()) {
  108. TmDepartment department = mapByDeptIds.get(record.getDeptId());
  109. if(department != null){
  110. record.setDeptName(department.getName());
  111. }
  112. List<CaseSettings> caseSettings = caseSettingsService.getByCaseId(record.getCaseId());
  113. if(!caseSettings.isEmpty()){
  114. CaseSettings caseSettings1 = caseSettings.get(0);
  115. if(caseSettings1 != null){
  116. record.setCover(caseSettings1.getCover());
  117. }
  118. }
  119. }
  120. return PageInfo.PageInfo(page);
  121. }
  122. @Override
  123. public List<SceneVo> sceneList(CaseParam param) {
  124. if(param.getCaseId() == null){
  125. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  126. }
  127. if(param.getTypeMap() == null){
  128. HashMap<Integer, List<String>> typeMap = caseNumService.getTypeMap(param.getCaseId());
  129. param.setTypeMap(typeMap);
  130. }
  131. List<SceneVo> listAll = new ArrayList<>();
  132. for (Integer type : param.getTypeMap().keySet()) {
  133. List<String> numList = param.getTypeMap().get(type);
  134. if(numList ==null || numList.size() <=0 || type ==3){
  135. continue;
  136. }
  137. if(param.getIsMesh()!=null && param.getIsMesh() == 1 && NumTypeUtils.isLaser(type)){
  138. continue;
  139. }
  140. ScenePram scenePram = new ScenePram();
  141. scenePram.setType(type);
  142. scenePram.setPageNum(1);
  143. scenePram.setPageSize(99999);
  144. scenePram.setNumList(param.getTypeMap().get(type));
  145. scenePram.setShare("1");
  146. scenePram.setSceneName(param.getSceneName());
  147. PageInfo pageInfo = sceneService.pageList(scenePram);
  148. List<SceneVo> list1 = (List<SceneVo>) pageInfo.getList();
  149. listAll.addAll(list1);
  150. }
  151. if(listAll.size() >0){
  152. List<String> numList = listAll.parallelStream().map(SceneVo::getNum).collect(Collectors.toList());
  153. //设置模型
  154. HashMap<String,Model> map = modelService.getMapByNum(numList);
  155. for (SceneVo sceneVo : listAll) {
  156. String createTime = sceneVo.getCreateTime();
  157. Model model = map.get(sceneVo.getNum() + sceneVo.getType());
  158. if(model == null){
  159. continue;
  160. }
  161. BeanUtils.copyProperties(model,sceneVo);
  162. sceneVo.setCreateTime(createTime);
  163. }
  164. }
  165. //官网删除的场景,删除对应资源
  166. for (Integer type : param.getTypeMap().keySet()) {
  167. List<String> dbNumList = listAll.stream().filter(entity -> entity.getType().equals(type)).map(SceneVo::getNum).collect(Collectors.toList());
  168. this.deleteNotInScene(param.getTypeMap().get(type), dbNumList,type,param.getCaseId(),listAll);
  169. }
  170. //相机解绑,标注,测量隐藏,视图
  171. for (SceneVo sceneVo : listAll) {
  172. if(!sceneVo.getBind() || (sceneVo.getStatus()!=null && sceneVo.getStatus() == 3)){
  173. fusionNumService.hideOrShow(sceneVo.getModelId(),sceneVo.getNum(),1);
  174. }else {
  175. fusionNumService.hideOrShow(sceneVo.getModelId(),sceneVo.getNum(),0);
  176. }
  177. }
  178. listAll.removeIf(sceneVo -> !sceneVo.getBind());
  179. //关联的三维模型
  180. if(param.getIsMesh() == null ){
  181. List<String> numList = param.getTypeMap().get(3);
  182. if(numList!=null && numList.size() >0){
  183. List<Model> models = modelService.getListByModelIdStrs(numList);
  184. for (Model model : models) {
  185. SceneVo sceneVo = new SceneVo();
  186. sceneVo.setStatus(2);
  187. BeanUtils.copyProperties(model,sceneVo);
  188. listAll.add(sceneVo);
  189. }
  190. }
  191. }
  192. Set<String> snList = listAll.stream().filter(entity ->StringUtils.isNotBlank(entity.getSnCode()))
  193. .map(SceneVo::getSnCode).collect(Collectors.toSet());
  194. HashMap<String, TmDepartment> mapBySnCodes = tmCameraService.getMapBySnCodes(snList);
  195. for (SceneVo sceneVo : listAll) {
  196. if(StringUtils.isNotBlank(sceneVo.getSnCode())){
  197. TmDepartment tmDepartment = mapBySnCodes.get(sceneVo.getSnCode().toUpperCase());
  198. if(tmDepartment != null){
  199. sceneVo.setDeptId(tmDepartment.getId());
  200. sceneVo.setDeptName(tmDepartment.getName());
  201. }
  202. }
  203. }
  204. Set<String> deptIdset = listAll.stream().filter(entity ->StringUtils.isNotBlank(entity.getDeptId())&& StringUtils.isBlank(entity.getDeptName()))
  205. .map(SceneVo::getDeptId).collect(Collectors.toSet());
  206. HashMap<String, TmDepartment> mapByDept = tmDepartmentService.getMapByDeptIds(deptIdset);
  207. for (SceneVo sceneVo : listAll) {
  208. if(StringUtils.isNotBlank(sceneVo.getDeptId())){
  209. TmDepartment tmDepartment = mapByDept.get(sceneVo.getDeptId());
  210. if(tmDepartment != null){
  211. sceneVo.setDeptName(tmDepartment.getName());
  212. }
  213. }
  214. }
  215. return listAll;
  216. }
  217. private void deleteNotInScene(List<String> numList,List<String> obNumList,Integer type,Integer caseId,List<SceneVo> sceneVos) {
  218. if(type == 3){ //上传的三维模型,无需处理
  219. return;
  220. }
  221. if(numList.size() >0){
  222. List<String> delNumList = new ArrayList<>();
  223. for (String num : numList) {
  224. if(!obNumList.contains(num)){
  225. delNumList.add(num);
  226. }
  227. }
  228. List<String> delNumList2 = new ArrayList<>();
  229. for (SceneVo sceneVo : sceneVos) {
  230. if(sceneVo.getStatus() !=2 && sceneVo.getStatus() !=3 && sceneVo.getType().equals(type)){
  231. delNumList2.add(sceneVo.getNum());
  232. }
  233. }
  234. caseNumService.deleteByNum(caseId,delNumList,type);
  235. fusionNumService.deleteByNumList(caseId,delNumList2,false,type);
  236. }
  237. }
  238. @Override
  239. public void addOrUpdate(CaseParam param, String userName) {
  240. if(StringUtils.isEmpty(param.getCaseTitle())){
  241. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  242. }
  243. CaseEntity caseEntity ;
  244. if(param.getCaseId() == null){
  245. caseEntity = new CaseEntity();
  246. TmUser tmUser = tmUserService.getByUserName(userName);
  247. caseEntity.setDeptId(tmUser.getDeptId());
  248. caseEntity.setUserName(userName);
  249. }else {
  250. caseEntity = this.getById(param.getCaseId());
  251. }
  252. caseEntity.setCaseTitle(param.getCaseTitle());
  253. caseEntity.setMapShow(param.getMapShow());
  254. caseEntity.setLatAndLong(param.getLatAndLong());
  255. caseEntity.setMapUrl(param.getMapUrl());
  256. caseEntity.setUpdateTime(null);
  257. this.saveOrUpdate(caseEntity);
  258. }
  259. @Override
  260. public void addScene(CaseParam param) {
  261. if(param.getCaseId() == null){
  262. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  263. }
  264. CaseEntity caseEntity = this.getById(param.getCaseId());
  265. if(caseEntity == null){
  266. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  267. }
  268. caseNumService.addBatch(param.getCaseId(),param.getSceneNumParam());
  269. }
  270. @Override
  271. public void delete(Integer caseId) {
  272. if(caseId == null){
  273. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  274. }
  275. //删除关联的场景
  276. caseNumService.deleteByCaseId(caseId);
  277. caseFilesService.deleteByCaseId(caseId);
  278. this.removeById(caseId);
  279. }
  280. @Override
  281. public List<CaseEntity> getByIds(List<Integer> caseIdIds) {
  282. LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
  283. wrapper.in(CaseEntity::getCaseId,caseIdIds);
  284. return this.list(wrapper);
  285. }
  286. @Override
  287. public CaseEntity getByTmProjectId(String projectId) {
  288. LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
  289. wrapper.eq(CaseEntity::getTmProjectId,projectId);
  290. return this.getOne(wrapper);
  291. }
  292. @Override
  293. public void updateIdenTityStatus(Integer caseId, Integer status) {
  294. CaseEntity caseEntity = this.getById(caseId);
  295. if(caseEntity != null && StringUtils.isNotBlank(caseEntity.getTmProjectId())){
  296. tmProjectService.updateIdenTityStatus(caseEntity.getTmProjectId(),status);
  297. }
  298. }
  299. @Override
  300. public String getDeptId(Integer caseId) {
  301. CaseEntity caseEntity = this.getById(caseId);
  302. String deptId = caseEntity.getDeptId();
  303. if(caseEntity.getType() ==1){
  304. deptId = tmProjectService.getById(caseEntity.getTmProjectId()).getDeptId();
  305. }
  306. return deptId;
  307. }
  308. @Override
  309. public CaseVo getInfo(Integer caseId) {
  310. CaseEntity caseEntity = this.getById(caseId);
  311. if(caseEntity == null){
  312. return null;
  313. }
  314. CaseVo caseVo = new CaseVo();
  315. BeanUtil.copyProperties(caseEntity,caseVo);
  316. if(caseEntity.getTmProjectId() != null){
  317. TmProject tmProject = tmProjectService.getById(caseEntity.getTmProjectId());
  318. if(tmProject!= null && tmProject.getIsDelete()!=0){
  319. throw new BusinessException(ResultCode.CASE_NOT_EXITS);
  320. }
  321. caseVo.setTmProject(tmProject);
  322. caseVo.setCaseTitle(tmProject.getProjectName());
  323. }
  324. checkCaseAuth(caseVo);
  325. return caseVo;
  326. }
  327. private void checkCaseAuth(CaseVo caseVo) {
  328. String caseDeptId = caseVo.getDeptId();
  329. if(caseVo.getTmProject() != null){
  330. caseDeptId = caseVo.getTmProject().getDeptId();
  331. }
  332. String deptId =(String) StpUtil.getExtra("deptId");
  333. List<String> deptIds = new ArrayList<>();
  334. String share = SaHolder.getRequest().getHeader("share");
  335. if(StringUtils.isNotBlank(share) && "1".equals(share)){ //分享请求头
  336. deptIds = tmDepartmentService.list().stream().map(TmDepartment::getId).collect(Collectors.toList());
  337. }else {
  338. deptIds = tmDepartmentService.getDeptIds();
  339. }
  340. if(deptIds.size() <=0){
  341. throw new BusinessException(ResultCode.NOT_PERMISSION);
  342. }
  343. List<String> deptIds2 = tmDepartmentService.getSonByDeptIdAndDeptIds(deptIds, deptId);
  344. if(!deptIds2.contains(caseDeptId)){
  345. throw new BusinessException(ResultCode.NOT_PERMISSION);
  346. }
  347. }
  348. }