package com.fdkankan.scene.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.common.constant.RecStatus; import com.fdkankan.common.constant.TbStatus; import com.fdkankan.common.response.ResultData; import com.fdkankan.common.user.SSOLoginHelper; import com.fdkankan.common.user.SSOUser; import com.fdkankan.platform.api.feign.PlatformGoodsClient; import com.fdkankan.platform.api.vo.Camera; import com.fdkankan.scene.entity.Folder; import com.fdkankan.scene.entity.SceneCooperation; import com.fdkankan.scene.entity.ScenePro; import com.fdkankan.scene.mapper.ISceneCooperationMapper; import com.fdkankan.scene.service.ISceneCooperationService; import com.fdkankan.scene.service.ISceneProService; import com.fdkankan.scene.service.ISceneResourceService; import com.fdkankan.scene.vo.SceneCooperationParamVO; import com.fdkankan.scene.vo.SceneParamVO; import java.util.ArrayList; import java.util.Arrays; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Calendar; import java.util.List; import java.util.Objects; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.RequestBody; /** *

* 服务实现类 *

* * @author dengsixing * @since 2021-12-23 */ @Service public class SceneCooperationServiceImpl extends ServiceImpl implements ISceneCooperationService { @Autowired SSOLoginHelper ssoLoginHelper; @Autowired PlatformGoodsClient platformGoodsClient; @Autowired ISceneProService sceneProService; @Autowired ISceneResourceService sceneResourceService; @Override public void updateRecStatus(String sceneNum) { this.update(new LambdaUpdateWrapper() .eq(SceneCooperation::getNum, sceneNum) .set(SceneCooperation::getUpdateTime, Calendar.getInstance().getTime()) .set(SceneCooperation::getTbStatus, TbStatus.DELETE.code())); } @Override public String findUserName(String sceneNum) { SceneCooperation sceneCooperation = this.findBySceneNum(sceneNum); if(Objects.isNull(sceneCooperation)) return null; return sceneCooperation.getUserName(); } @Override public SceneCooperation findBySceneNum(String sceneNum) { List list = this.list(new QueryWrapper() .eq("tb_status", TbStatus.VALID.code()) .eq("scene_code", sceneNum) .orderByDesc("id")); if(CollUtil.isEmpty(list)){ return null; } return list.get(0); } @Override public ResultData sceneResourceBySceneNum(SceneCooperationParamVO param) throws Exception{ ResultData cameraResult = platformGoodsClient.getCameraByChildName(param.getUserName()); Camera camera = cameraResult.getData(); if(camera != null){ return ResultData.ok(); } SceneCooperation sceneCooperation = this.findBySceneNum(param.getNum()); //若数据为空表示可操作全部资源 if(sceneCooperation == null || !sceneCooperation.getUserId().equals(param.getUserId())){ return ResultData.ok(); } ScenePro scenePro= sceneProService.findBySceneNum(param.getNum()); if(scenePro != null && scenePro.getUserId().equals(sceneCooperation.getUserId())){ return ResultData.ok(); } return ResultData.ok(sceneResourceService.findByCooperationId(sceneCooperation.getId())); } @Override public List getListByUserId(List userIds) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SceneCooperation::getUserId,userIds); return this.list(queryWrapper); } @Override public Page cooperationSceneListNew(SceneParamVO param) throws Exception{ //查询该用户所有的协作场景 List list = this.list( new LambdaQueryWrapper() .select(SceneCooperation::getNum) .eq(SceneCooperation::getUserId, param.getUserId()) .orderByDesc(SceneCooperation::getId)); if(CollUtil.isEmpty(list)){ return new Page(param.getPageNum(), param.getPageSize()); } //获取所有协作场景的场景码集合 List sceneNumList = new ArrayList<>(); for(SceneCooperation cooperation: list){ if(Objects.isNull(cooperation.getNum())){ continue; } sceneNumList.add(cooperation.getNum()); } if(sceneNumList.size() <= 0){ return new Page(param.getPageNum(), param.getPageSize()); } List result = new ArrayList<>(); List sceneEntityList = new ArrayList<>(); List folderEntityList = new ArrayList<>(); //根目录时,需要排除已经归类的场景 // if(ObjectUtils.isEmpty(param.getFolderId())){ // param.setNumList(sceneNumList); // if(Objects.nonNull(param.getSceneSource())){ // List sceneSourceList = Arrays.asList(param.getSceneSource().split(",")) // .parallelStream().map(source -> { // return Integer.parseInt(source); // }).collect(Collectors.toList()); // param.setSceneSourceList(sceneSourceList); // } // if(!StringUtil.isNotEmpty(param.getSceneType())){ // sceneCondition.and().andEqualTo("sceneType", param.getSceneType()); // } // if(!ObjectUtils.isEmpty(param.getStartTime())){ // sceneCondition.and().andGreaterThanOrEqualTo("createTime", param.getStartTime()); // } // if(!ObjectUtils.isEmpty(param.getEndTime())){ // sceneCondition.and().andLessThanOrEqualTo("createTime", param.getEndTime()); // } // sceneEntityList = sceneProService.findAll(sceneCondition, "create_time desc"); // // }else { // //获取文件夹数量 // condition = new Condition(FolderEntity.class); // condition.and().andEqualTo("userId", ssoUser.getId()).andEqualTo("parentId", param.getFolderId()); // folderEntityList = folderService.findAll(condition, "create_time desc"); // //没有协作场景,直接放回文件夹的列表 // if(sceneNumList.size() <= 0){ // result.addAll(folderService.convert(folderEntityList)); // PageInfo data = PageInfoUtils.list2PageInfo(result, param.getPageNum(), param.getPageSize()); // return Result.success(data); // } // // //进入目录层级后,根据目录获取当前目录的所有场景 // Condition folderSceneCondition = new Condition(FolderSceneEntity.class); // folderSceneCondition.and().andEqualTo("folderId", param.getFolderId()); // // List sceneIdList = new ArrayList<>(); // // List folderSceneList = folderSceneService.findAll(folderSceneCondition, "create_time desc"); // if(folderSceneList != null && folderSceneList.size() > 0){ // for (FolderSceneEntity folderSceneEntity : folderSceneList) { // sceneIdList.add(folderSceneEntity.getSceneId()); // } // } // // if(sceneIdList.size() > 0){ // Condition sceneCondition = new Condition(SceneProEntity.class); // sceneCondition.and().andIn("id", sceneIdList) // .andNotEqualTo("sceneSource", "11").andIn("num", sceneNumList); // // if(param.getSceneSource() != null){ // if(param.getSceneSource().contains(",")){ // sceneCondition.and().andIn("sceneSource", Arrays.asList(param.getSceneSource().split(","))); // }else{ // sceneCondition.and().andEqualTo("sceneSource", param.getSceneSource()); // } // } // if(StringUtil.isNotEmpty(param.getSceneType())){ // sceneCondition.and().andEqualTo("sceneType", param.getSceneType()); // } // if(param.getStartTime() != null){ // sceneCondition.and().andGreaterThanOrEqualTo("createTime", param.getStartTime()); // } // if(param.getEndTime() != null){ // sceneCondition.and().andLessThanOrEqualTo("createTime", param.getEndTime()); // } // sceneEntityList = sceneProService.findAll(sceneCondition, "create_time desc"); // } // } // List responseScenes = sceneService.convertPro(sceneEntityList); // // if(ObjectUtils.isEmpty(param.getSceneSource())&& StringUtil.isEmpty(param.getSceneType()) && // param.getStartTime() == null && param.getEndTime() == null){ // // result.addAll(folderService.convert(folderEntityList)); // } // // result.addAll(responseScenes); // // PageInfo data = PageInfoUtils.list2PageInfo(result, param.getPageNum(), param.getPageSize()); // data.getList().parallelStream().filter(object -> object instanceof ResponseScene).forEach(object -> { // ResponseScene responseScene = (ResponseScene) object; // if (responseScene.getCameraId() != null) { // CameraEntity cameraEntity = goodsService.findCameraById(responseScene.getCameraId()); // if (cameraEntity != null) { // responseScene.setChildName(cameraEntity.getChildName()); // responseScene.setSnCode(cameraEntity.getSnCode()); // } // } // // 获取VrThumb // SceneProEditEntity editEntity = sceneProEditService.findByProId(responseScene.getId()); // if (!ObjectUtils.isEmpty(editEntity)) { // responseScene.setVrNum(editEntity.getVrNum()); // } // }); // return Result.success(data); return null; } }