SceneProServiceImpl.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  1. package com.fdkankan.manage_jp.service.impl;
  2. import cn.hutool.core.io.FileUtil;
  3. import cn.hutool.core.thread.ThreadUtil;
  4. import cn.hutool.json.JSONUtil;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.fdkankan.common.constant.ErrorCode;
  11. import com.fdkankan.common.constant.SceneConstant;
  12. import com.fdkankan.common.constant.SceneKind;
  13. import com.fdkankan.common.constant.SceneVersionType;
  14. import com.fdkankan.common.util.FileUtils;
  15. import com.fdkankan.common.util.JwtUtil;
  16. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  17. import com.fdkankan.manage_jp.common.*;
  18. import com.fdkankan.manage_jp.entity.*;
  19. import com.fdkankan.manage_jp.exception.BusinessException;
  20. import com.fdkankan.manage_jp.httpClient.service.LaserService;
  21. import com.fdkankan.manage_jp.mapper.ISceneProMapper;
  22. import com.fdkankan.manage_jp.mapper.ISceneUpgradeMapper;
  23. import com.fdkankan.manage_jp.service.*;
  24. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  25. import com.fdkankan.manage_jp.util.GenerateNumUtil;
  26. import com.fdkankan.manage_jp.util.SceneResourcePath;
  27. import com.fdkankan.manage_jp.util.SnowflakeIdGenerator;
  28. import com.fdkankan.manage_jp.vo.request.SceneParam;
  29. import com.fdkankan.manage_jp.vo.response.SceneVo;
  30. import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
  31. import com.fdkankan.rabbitmq.util.RabbitMqProducer;
  32. import com.fdkankan.redis.util.RedisUtil;
  33. import lombok.extern.slf4j.Slf4j;
  34. import org.apache.commons.lang3.StringUtils;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.beans.factory.annotation.Value;
  37. import org.springframework.scheduling.annotation.Async;
  38. import org.springframework.stereotype.Service;
  39. import org.springframework.util.ObjectUtils;
  40. import java.io.File;
  41. import java.util.*;
  42. import java.util.concurrent.CompletableFuture;
  43. import java.util.concurrent.ExecutorService;
  44. import java.util.stream.Collectors;
  45. /**
  46. * <p>
  47. * pro场景表 服务实现类
  48. * </p>
  49. *
  50. * @author
  51. * @since 2022-12-30
  52. */
  53. @Service
  54. @Slf4j
  55. public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {
  56. @Autowired
  57. IScenePlusService scenePlusService;
  58. @Autowired
  59. LaserService laserService;
  60. @Autowired
  61. ISceneProEditService sceneProEditService;
  62. @Autowired
  63. ICompanyService companyService;
  64. @Autowired
  65. IScenePlusExtService scenePlusExtService;
  66. @Autowired
  67. FYunFileServiceInterface fYunFileServiceInterface;
  68. @Autowired
  69. IScene3dNumService scene3dNumService;
  70. @Autowired
  71. SceneCommonService sceneCommonService;
  72. @Autowired
  73. ITmContractorService tmContractorService;
  74. @Autowired
  75. ITmContractorNumService tmContractorNumService;
  76. @Autowired
  77. IUserRoleService userRoleService;
  78. @Autowired
  79. ITmColdStorageService tmColdStorageService;
  80. @Autowired
  81. private RabbitMqProducer mqProducer;
  82. @Value("${queue.modeling.obj.modeling-pre}")
  83. private String queueObjModelingPre;
  84. @Autowired
  85. private ISceneUpgradeMapper sceneUpgradeMapper;
  86. @Autowired
  87. ISceneCopyLogService sceneCopyLogService;
  88. @Autowired
  89. ICameraDetailService cameraDetailService;
  90. @Autowired
  91. ICameraService cameraService;
  92. @Autowired
  93. IUserService userService;
  94. @Autowired
  95. ISceneMoveLogService sceneMoveLogService;
  96. @Autowired
  97. IProjectNumService projectNumService;
  98. @Autowired
  99. IProjectSceneGpsService projectSceneGpsService;
  100. @Override
  101. public Long getCountByUserIds(List<Long> userIds) {
  102. LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
  103. wrapper.in(ScenePro::getUserId,userIds);
  104. wrapper.eq(ScenePro::getIsUpgrade,0);
  105. long count = this.count(wrapper);
  106. LambdaQueryWrapper<ScenePlus> wrapper2 = new LambdaQueryWrapper<>();
  107. wrapper2.in(ScenePlus::getUserId,userIds);
  108. long count2 = scenePlusService.count(wrapper2);
  109. return count + count2;
  110. }
  111. @Override
  112. public void rebindUser(Long fromUserId, Long toUserId) {
  113. LambdaUpdateWrapper<ScenePro> wrapper = new LambdaUpdateWrapper<>();
  114. wrapper.eq(ScenePro::getUserId,fromUserId);
  115. wrapper.set(ScenePro::getUserId,toUserId);
  116. this.update(wrapper);
  117. LambdaUpdateWrapper<ScenePlus> wrapper2 = new LambdaUpdateWrapper<>();
  118. wrapper2.eq(ScenePlus::getUserId,fromUserId);
  119. wrapper2.set(ScenePlus::getUserId,toUserId);
  120. scenePlusService.update(wrapper2);
  121. }
  122. @Override
  123. public Object pageList(SceneParam param, User user) {
  124. Set<Long> roleIds = userRoleService.getByUser(user);
  125. List<String> numList = new ArrayList<>();
  126. List<String> cooNumList = new ArrayList<>();
  127. if(!roleIds.contains(5L)){ //平台管理员
  128. param.setCompanyId(user.getCompanyId());
  129. param.setUserId(user.getId());
  130. param.setNeStatus(-2);
  131. if(!roleIds.contains(6L)){
  132. param.setIsDel(false);
  133. param.setIsMain(false);
  134. param.setIsMigrate(false);
  135. }
  136. numList = tmContractorNumService.getNumListByCompanyId(user.getCompanyId());
  137. param.setCooperateSceneCodes(numList);
  138. }
  139. if(param.getProjectId() != null){
  140. List<ProjectNum> projectNumList = projectNumService.getByProjectId(Arrays.asList(param.getProjectId()));
  141. List<String> projectNums = projectNumList.stream().map(ProjectNum::getNum).collect(Collectors.toList());
  142. if(projectNums.isEmpty()){
  143. return PageInfo.PageInfoEmpty(param.getPageNum(),param.getPageSize());
  144. }
  145. param.setProjectNums(projectNums);
  146. }
  147. Page<SceneVo> page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
  148. List<String> sceneNumList = page.getRecords().stream().map(SceneVo::getNum).collect(Collectors.toList());
  149. if(!sceneNumList.isEmpty()){
  150. cooNumList = tmContractorNumService.getNumList(sceneNumList);
  151. }
  152. HashMap<String,JSONObject> ssSceneMap = new HashMap<>();
  153. if(param.getIsLaser() == null){
  154. if(param.getType() == null){
  155. ssSceneMap = laserService.list(sceneNumList,4);
  156. ssSceneMap.putAll(laserService.list(sceneNumList,5));
  157. }else if(param.getType() == 2 ){
  158. ssSceneMap = laserService.list(sceneNumList,4);
  159. }else if(param.getType() == 5){
  160. ssSceneMap = laserService.list(sceneNumList,5);
  161. }else if(param.getType() == 57){
  162. ssSceneMap = laserService.list(sceneNumList,57);
  163. }
  164. }
  165. HashMap<String,Boolean> coldMap = tmColdStorageService.getByNumList(sceneNumList);
  166. HashMap<String,String> copyMap = sceneCopyLogService.getByNewNumList(sceneNumList);
  167. for (SceneVo record : page.getRecords()) {
  168. if(param.getType() == null || param.getType() == 2 || param.getType() == 5 || param.getType() == 57){
  169. JSONObject ssObj = ssSceneMap.get(record.getNum());
  170. if(ssObj!=null){
  171. record.setSceneName(ssObj.getString("title"));
  172. record.setThumb(ssObj.getString("thumb"));
  173. record.setWebSite(ssObj.getString("webSite"));
  174. record.setIsObj(ssObj.getInteger("buildObjStatus"));
  175. record.setViewCount(ssObj.getInteger("viewCount"));
  176. record.setStatus(toFdStatus(ssObj.getInteger("status")));
  177. }else if(param.getType() != null && (param.getType() == 2 || param.getType() == 5 || param.getType() == 57)){
  178. record.setWebSite(null);
  179. record.setStatus(-1);
  180. }
  181. }
  182. if(StringUtils.isNotBlank(record.getSceneVersion()) && record.getSceneVersion().equals("v3")){
  183. record.setIsUpgrade(0);
  184. }
  185. record.setIsDel(param.getIsDel());
  186. record.setIsMain(param.getIsMain());
  187. record.setIsDownload(param.getIsDownload());
  188. record.setIsMigrate(param.getIsMigrate());
  189. if(!roleIds.contains(5L) && numList != null && numList.contains(record.getNum())){
  190. record.setIsMain(false);
  191. record.setIsDel(false);
  192. record.setIsDownload(false);
  193. }
  194. if(cooNumList != null && cooNumList.contains(record.getNum())){
  195. record.setIsMigrate(false);
  196. }
  197. if(coldMap.get(record.getNum())!=null){
  198. record.setIsMigrate(false);
  199. }
  200. if(copyMap.get(record.getNum())!=null){
  201. record.setIsCopy(true);
  202. record.setCopyTime(copyMap.get(record.getNum()));
  203. }
  204. record.setSceneType(param.getType());
  205. }
  206. return PageInfo.PageInfo(page);
  207. }
  208. private Integer toFdStatus(Integer status) {
  209. //深时状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3封存 4生成OBJ中
  210. switch (status) {
  211. case 0:
  212. case 4:
  213. return 0;
  214. case 2:
  215. return -2;
  216. case 3:
  217. return -3;
  218. default:
  219. return -1;
  220. }
  221. }
  222. @Override
  223. public ScenePro getByNum(String num) {
  224. LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
  225. wrapper.eq(ScenePro::getNum,num);
  226. wrapper.eq(ScenePro::getIsUpgrade,0);
  227. List<ScenePro> list = this.list(wrapper);
  228. if(list == null || list.size() <=0){
  229. return null;
  230. }
  231. return list.get(0);
  232. }
  233. @Override
  234. public HashMap<String, ScenePro> getByNumList(List<String> numList) {
  235. HashMap<String, ScenePro> map = new HashMap<>();
  236. if(numList == null || numList.isEmpty()){
  237. return map;
  238. }
  239. LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
  240. wrapper.in(ScenePro::getNum,numList);
  241. wrapper.eq(ScenePro::getIsUpgrade,0);
  242. List<ScenePro> list = this.list(wrapper);
  243. list.forEach(e -> map.put(e.getNum(),e));
  244. return map;
  245. }
  246. @Override
  247. public void addDownloadNum(String sceneNum) {
  248. if(StringUtils.isBlank(sceneNum)){
  249. throw new BusinessException(ResultCode.PARAM_ERROR);
  250. }
  251. ScenePro scenePro = this.getByNum(sceneNum);
  252. if(scenePro != null){
  253. SceneProEdit sceneProEditEntity = sceneProEditService.getByProId(scenePro.getId());
  254. if(sceneProEditEntity.getDownloadNum() == null){
  255. sceneProEditEntity.setDownloadNum(1);
  256. }else{
  257. sceneProEditEntity.setDownloadNum(sceneProEditEntity.getDownloadNum() + 1);
  258. }
  259. sceneProEditService.updateById(sceneProEditEntity);
  260. }
  261. }
  262. @Override
  263. public void deleteByNum(String num) {
  264. ScenePro scenePro = this.getByNum(num);
  265. if(scenePro!=null){
  266. this.removeById(scenePro.getId());
  267. this.updateOssStatus(String.format(OssPath.v3_statusPath,scenePro.getNum()),"I");
  268. }
  269. ScenePlus scenePlus = scenePlusService.getByNum(num);
  270. if(scenePlus!=null){
  271. scenePlusService.removeById(scenePlus.getId());
  272. scenePlusExtService.delByPlus(scenePlus.getId());
  273. this.updateOssStatus(String.format(OssPath.v4_statusPath,scenePlus.getNum()),"I");
  274. }
  275. Integer sceneSource = scenePro == null ? scenePlus.getSceneSource() : scenePro.getSceneSource();
  276. if(SceneSourceUtil.isLaser(sceneSource)){
  277. laserService.updateStatus(num,-1);
  278. }
  279. tmContractorNumService.deleteByNum(num);
  280. tmContractorService.checkDel();
  281. }
  282. private void updateOssStatus(String path,String recStatus) {
  283. try {
  284. if(!fYunFileServiceInterface.fileExist(path)){
  285. return;
  286. }
  287. String data = fYunFileServiceInterface.getFileContent(path);
  288. if(StringUtils.isBlank(data)){
  289. return;
  290. }
  291. JSONObject jsonObject = JSONObject.parseObject(data);
  292. jsonObject.put("recStatus",recStatus);
  293. String json = JSONUtil.toJsonStr(jsonObject);
  294. FileUtils.writeFile(OssPath.localStatusPath ,json);
  295. log.info("updateOssStatus--localPath:{},ossPath:{}",OssPath.localStatusPath,path);
  296. fYunFileServiceInterface.uploadFile(OssPath.localStatusPath,path);
  297. }catch (Exception e){
  298. e.printStackTrace();
  299. }finally {
  300. FileUtil.del(OssPath.localStatusPath);
  301. }
  302. }
  303. @Override
  304. public void unbind(Long cameraId,Long userId) {
  305. LambdaUpdateWrapper<ScenePro> wrapper = new LambdaUpdateWrapper<>();
  306. wrapper.eq(ScenePro::getCameraId,cameraId);
  307. wrapper.eq(ScenePro::getIsUpgrade,0);
  308. wrapper.set(ScenePro::getUserId,userId);
  309. this.update(wrapper);
  310. }
  311. @Override
  312. public void updateTitleByNum(String sceneNum, String sceneNewTitle) {
  313. LambdaUpdateWrapper<ScenePro> updateWrapper = new LambdaUpdateWrapper<>();
  314. updateWrapper.eq(ScenePro::getNum,sceneNum);
  315. updateWrapper.set(ScenePro::getLaserTitle,sceneNewTitle);
  316. this.update(updateWrapper);
  317. }
  318. @Override
  319. public synchronized void generateObjFile(String num) {
  320. ScenePro sceneProEntity = this.getByNum(num);
  321. ScenePlus scenePlusEntity = scenePlusService.getByNum(num);
  322. if(ObjectUtils.isEmpty(sceneProEntity) && ObjectUtils.isEmpty(scenePlusEntity)){
  323. throw new BusinessException(ResultCode.SCENE_NOT_EXIT);
  324. }
  325. List<SceneCopyLog> sceneCopyLogs = sceneCopyLogService.getByNewNum(num);
  326. if(sceneCopyLogs!=null && sceneCopyLogs.size()>0){
  327. throw new BusinessException(ResultCode.GENERATE_OBJ_ERROR);
  328. }
  329. String path = null;
  330. ScenePlusExt scenePlusExt = null;
  331. if(scenePlusEntity != null){
  332. if(scenePlusEntity.getSceneStatus() !=-2){
  333. throw new BusinessException(ResultCode.SCENE_MODELING);
  334. }
  335. scenePlusExt = scenePlusExtService.getByPlusId(scenePlusEntity.getId());
  336. if(scenePlusExt == null){
  337. throw new BusinessException(ResultCode.SCENE_ERROR);
  338. }
  339. path = scenePlusExt.getDataSource();
  340. }else {
  341. path = sceneProEntity.getDataSource();
  342. if(sceneProEntity.getStatus() !=-2){
  343. throw new BusinessException(ResultCode.SCENE_MODELING);
  344. }
  345. }
  346. Integer sceneSource = sceneProEntity == null ? scenePlusEntity.getSceneSource() : sceneProEntity.getSceneSource();
  347. if(sceneSource != 4 && sceneSource !=5){
  348. throw new BusinessException(ResultCode.GENERATE_OBJ_ERROR_TYPE);
  349. }
  350. laserService.updateBuildObjStatus(num,2);
  351. String ossPath = path.replace("/mnt/data","home")+"/data.fdage";
  352. if(!fYunFileServiceInterface.fileExist(ossPath)){
  353. throw new BusinessException(ResultCode.GENERATE_OBJ_ERROR);
  354. }
  355. // 获取最新的场景名称
  356. JSONObject sceneInfo = laserService.getSceneByNum(num);
  357. if(sceneProEntity == null){
  358. LambdaUpdateWrapper<ScenePlus> updateWrapper = new LambdaUpdateWrapper<>();
  359. updateWrapper
  360. .set(ScenePlus::getSceneStatus, 0)
  361. .set(ScenePlus::getTitle, sceneInfo.getString("title"))
  362. .eq(ScenePlus::getNum, num);
  363. scenePlusService.update(updateWrapper);
  364. LambdaUpdateWrapper<ScenePlusExt> plusExtUpdateWrapper = new LambdaUpdateWrapper<>();
  365. plusExtUpdateWrapper
  366. .set(ScenePlusExt::getIsObj, 1)
  367. .eq(ScenePlusExt::getPlusId, scenePlusEntity.getId());
  368. scenePlusExtService.update(plusExtUpdateWrapper);
  369. sendMqMsg(num,scenePlusExt.getAlgorithm(),scenePlusExt.getBuildType(),scenePlusExt.getDataSource());
  370. return;
  371. }
  372. LambdaUpdateWrapper<ScenePro> updateWrapper = new LambdaUpdateWrapper<>();
  373. updateWrapper
  374. .set(ScenePro::getStatus, 0)
  375. .set(ScenePro::getIsObj, 1)
  376. .set(ScenePro::getIsUpgrade, 2) // 升级中
  377. .set(ScenePro::getSceneName, sceneInfo.getString("title"))
  378. .eq(ScenePro::getNum, sceneProEntity.getNum());
  379. this.update(updateWrapper);
  380. //同步到scenePlus、scenePlus
  381. //同步到scenePlus、scenePlus
  382. ScenePlus scenePlus = scenePlusService.getByNum(num);
  383. if(Objects.nonNull(scenePlus)){
  384. sceneUpgradeMapper.deleteScenePlus(num);
  385. sceneUpgradeMapper.deleteScenePlusExt(scenePlus.getId());
  386. }
  387. sceneUpgradeMapper.transferScenePlus(num);
  388. scenePlus = scenePlusService.getByNum(num);
  389. String sceneKind = sceneProEntity.getSceneScheme() == 3 ? SceneKind.FACE.code():SceneKind.TILES.code();
  390. sceneUpgradeMapper.transferScenePlusExt(num, scenePlus.getId(), sceneKind);
  391. sendMqMsg(sceneProEntity.getNum(),sceneProEntity.getAlgorithm(),sceneProEntity.getBuildType(),sceneProEntity.getDataSource());
  392. }
  393. public void sendMqMsg(String num ,String algorithm,String buildType,String dataSource) {
  394. log.info("开始发送激光场景生成obj mq消息");
  395. // 发送MQ
  396. BuildSceneCallMessage mqMsg = new BuildSceneCallMessage();
  397. mqMsg.setSceneNum(num);
  398. mqMsg.setAlgorithm(algorithm);
  399. mqMsg.setBuildType(buildType);
  400. mqMsg.setPath(dataSource);
  401. mqProducer.sendByWorkQueue(queueObjModelingPre,mqMsg);
  402. }
  403. @Override
  404. public void move(SceneParam param) {
  405. if(param.getNumList().isEmpty() || param.getCameraId() == null || StringUtils.isBlank(param.getUserName())){
  406. throw new BusinessException(ResultCode.PARAM_ERROR);
  407. }
  408. for (String num : param.getNumList()) {
  409. User user = userService.getByUserName(param.getUserName());
  410. if(user == null || user.getCompanyId() == null){
  411. throw new BusinessException(ResultCode.USER_NOT_EXIST);
  412. }
  413. ScenePlus scenePlus = scenePlusService.getByNum(num);
  414. ScenePro scenePro = this.getByNum(num);
  415. if(scenePlus == null && scenePro == null){
  416. throw new BusinessException(ResultCode.SCENE_NOT_EXIT);
  417. }
  418. Long cameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId();
  419. Integer sceneSource = scenePro == null ? scenePlus.getSceneSource() : scenePro.getSceneSource();
  420. Camera oldCamera = cameraService.getById(cameraId);
  421. Camera camera = cameraService.getById(param.getCameraId());
  422. CameraDetail oldCameraDetail = cameraDetailService.getByCameraId(cameraId);
  423. CameraDetail cameraDetail = cameraDetailService.getByCameraId(param.getCameraId());
  424. if(oldCamera == null || oldCameraDetail == null || camera == null || cameraDetail == null){
  425. throw new BusinessException(ResultCode.CAMERA_NOT_EXIST);
  426. }
  427. if(!oldCameraDetail.getType().equals(cameraDetail.getType())){
  428. throw new BusinessException(ResultCode.CAMERA_TYPE_NOT_ERROR);
  429. }
  430. String dataSource = scenePro == null ? null :scenePro.getDataSource();
  431. if(scenePlus !=null){
  432. ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
  433. dataSource = scenePlusExt.getDataSource();
  434. }
  435. scenePlusService.updatePayStatus(num,scenePro == null ?"v4":"v3",scenePro == null?scenePlus.getSceneSource():scenePro.getSceneSource(),1,cameraDetail,user);
  436. scenePlusService.move(num,scenePro == null ?"v4":"v3",cameraDetail,user);
  437. if(SceneSourceUtil.isLaser(sceneSource)){
  438. laserService.move(num, oldCamera.getSnCode(), camera.getSnCode(), user.getId(),user.getUserName(), dataSource);
  439. }
  440. sceneMoveLogService.saveLog(scenePro,scenePlus,camera.getSnCode(),oldCamera.getSnCode(),dataSource,dataSource, null);
  441. }
  442. }
  443. @Override
  444. public void moveUser(SceneParam param) {
  445. if(param.getNumList().isEmpty() || StringUtils.isBlank(param.getUserName())){
  446. throw new BusinessException(ResultCode.PARAM_ERROR);
  447. }
  448. for (String num : param.getNumList()) {
  449. User user = userService.getByUserName(param.getUserName());
  450. if(user == null || user.getCompanyId() == null){
  451. throw new BusinessException(ResultCode.USER_NOT_EXIST);
  452. }
  453. ScenePlus scenePlus = scenePlusService.getByNum(num);
  454. ScenePro scenePro = this.getByNum(num);
  455. if(scenePlus == null && scenePro == null){
  456. throw new BusinessException(ResultCode.SCENE_NOT_EXIT);
  457. }
  458. Long cameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId();
  459. if(cameraId != null){
  460. throw new BusinessException(ResultCode.SCENE_MOVE_ERROR);
  461. }
  462. Integer sceneSource = scenePro == null ? scenePlus.getSceneSource() : scenePro.getSceneSource();
  463. if(sceneSource != 57){
  464. throw new BusinessException(ResultCode.SCENE_MOVE_ERROR);
  465. }
  466. String dataSource = scenePro == null ? null :scenePro.getDataSource();
  467. if(scenePlus !=null){
  468. ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
  469. dataSource = scenePlusExt.getDataSource();
  470. }
  471. scenePlusService.move(num,scenePro == null ?"v4":"v3",null,user);
  472. laserService.move(num, null, null, user.getId(),user.getUserName(), dataSource);
  473. sceneMoveLogService.saveLog(scenePro,scenePlus,null,null,dataSource,dataSource, null);
  474. }
  475. }
  476. @Override
  477. public void updateMapShow(SceneParam param) {
  478. if(StringUtils.isBlank(param.getNum()) || param.getMapShow() == null){
  479. throw new BusinessException(ResultCode.PARAM_ERROR);
  480. }
  481. if(param.getMapShow() == 1){ //开启查询是否有GPS,没有不能开启
  482. ProjectSceneGps projectSceneGps = projectSceneGpsService.getByNum(param.getNum());
  483. if(projectSceneGps == null){
  484. throw new BusinessException(ResultCode.SCENE_NOT_GPS);
  485. }
  486. }
  487. LambdaUpdateWrapper<ScenePro> proWr = new LambdaUpdateWrapper<>();
  488. proWr.eq(ScenePro::getNum,param.getNum());
  489. proWr.set(ScenePro::getMapShow,param.getMapShow());
  490. this.update(proWr);
  491. LambdaUpdateWrapper<ScenePlus> plusWr = new LambdaUpdateWrapper<>();
  492. plusWr.eq(ScenePlus::getNum,param.getNum());
  493. plusWr.set(ScenePlus::getMapShow,param.getMapShow());
  494. scenePlusService.update(plusWr);
  495. }
  496. @Override
  497. public void openMapShow(List<String> sceneMapShowList) {
  498. if(sceneMapShowList == null || sceneMapShowList.isEmpty()){
  499. return;
  500. }
  501. LambdaUpdateWrapper<ScenePro> proWr = new LambdaUpdateWrapper<>();
  502. proWr.in(ScenePro::getNum,sceneMapShowList);
  503. proWr.set(ScenePro::getMapShow,1);
  504. this.update(proWr);
  505. LambdaUpdateWrapper<ScenePlus> plusWr = new LambdaUpdateWrapper<>();
  506. plusWr.in(ScenePlus::getNum,sceneMapShowList);
  507. plusWr.set(ScenePlus::getMapShow,1);
  508. scenePlusService.update(plusWr);
  509. }
  510. @Override
  511. public List<ScenePro> getDelSceneNumV3() {
  512. return this.getBaseMapper().getDelSceneNumV3();
  513. }
  514. @Override
  515. public List<ScenePlus> getDelSceneNumV4() {
  516. return this.getBaseMapper().getDelSceneNumV4();
  517. }
  518. @Override
  519. public void updateDelSourceV3(String num) {
  520. this.getBaseMapper().updateDelSourceV3(num);
  521. }
  522. @Override
  523. public void updateDelSourceV4(String num) {
  524. this.getBaseMapper().updateDelSourceV4(num);
  525. }
  526. @Override
  527. public List<ScenePro> getDataSource(String dataSource) {
  528. LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
  529. wrapper.eq(ScenePro::getDataSource,dataSource);
  530. return list(wrapper);
  531. }
  532. @Override
  533. public void removePortrait(String num) {
  534. ScenePlus scenePlus = scenePlusService.getByNum(num);
  535. if(scenePlus == null){
  536. throw new BusinessException(ResultCode.SCENE_NOT_EXIT);
  537. }
  538. HashMap<String,String> map = new HashMap<>();
  539. map.put("num",num);
  540. mqProducer.sendByWorkQueue("remove-portrait",map);
  541. }
  542. }