package com.fdkankan.manage.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.SceneConstant; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.manage.common.OssPath; import com.fdkankan.manage.common.ResultCode; import com.fdkankan.manage.exception.BusinessException; import com.fdkankan.manage.common.PageInfo; import com.fdkankan.common.util.*; import com.fdkankan.manage.httpClient.client.FdKKClient; import com.fdkankan.manage.httpClient.param.LaserSceneParam; import com.fdkankan.manage.httpClient.service.LaserService; import com.fdkankan.manage.common.CameraConstant; import com.fdkankan.manage.entity.*; import com.fdkankan.manage.mapper.ISceneProMapper; import com.fdkankan.manage.service.*; import com.fdkankan.manage.util.SceneStatusUtil; import com.fdkankan.manage.vo.request.SceneParam; import com.fdkankan.manage.vo.response.CameraDataVo; import com.fdkankan.manage.vo.response.GroupByCount; import com.fdkankan.manage.vo.response.SceneVo; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.parser.JJTCCJSqlParserState; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.io.File; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** *

* pro场景表 服务实现类 *

* * @author * @since 2022-06-16 */ @Service @Slf4j public class SceneProServiceImpl extends ServiceImpl implements ISceneProService { @Autowired private ICameraService cameraService; @Autowired ICameraDetailService cameraDetailService; @Autowired ISceneService sceneService; @Autowired ISceneCopyLogService copyLogService; @Autowired IUserIncrementService userIncrementService; @Autowired IIncrementTypeService incrementTypeService; @Autowired ISceneProEditService sceneProEditService; @Autowired FYunFileServiceInterface fYunFileServiceInterface; @Autowired IScenePlusService scenePlusService; @Autowired IScene3dNumService scene3dNumService; @Autowired ISceneCopyLogService sceneCopyLogService; @Autowired IScenePlusExtService scenePlusExtService; @Autowired LaserService laserService; @Autowired FdKKClient fdKKClient; @Autowired IFolderSceneService folderSceneService; @Autowired IJyUserService jyUserService; @Autowired IJySceneUserAuthService jySceneUserAuthService; @Autowired IJyUserShareService jyUserShareService; @Autowired ISysUserService sysUserService; @Autowired IJySceneAuthService jySceneAuthService; @Autowired IJyUserPlatformService jyUserPlatformService; @Autowired IUserService userService; @Override public ScenePro getByNum(String num) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ScenePro::getNum,num); wrapper.eq(ScenePro::getIsUpgrade,0); List list = this.list(wrapper); if(list == null || list.size() <=0){ return null; } return list.get(0); } @Override public HashMap getCountGroupByUserId(List userIdList,Integer isObj) { HashMap map = new HashMap<>(); List result = this.getBaseMapper().getCountGroupByUserId(userIdList,isObj); result.forEach(entity ->map.put(entity.getId(),entity.getCount())); return map; } @Override public HashMap getCountGroupByCameraId(List cameraIds) { HashMap map = new HashMap<>(); List result = this.getBaseMapper().getCountGroupByCameraId(cameraIds); result.forEach(entity ->map.put(entity.getId(),entity.getCount())); return map; } @Override public void unbindCamera(Long cameraId) { LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.set(ScenePro::getUserId,null) .eq(ScenePro::getCameraId,cameraId); wrapper.eq(ScenePro::getIsUpgrade,0); this.update(wrapper); } @Override public List getListByCameraId(Long cameraId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ScenePro::getCameraId,cameraId); wrapper.eq(ScenePro::getIsUpgrade,0); return this.list(wrapper); } /** * @param payStatus -2 封存,为 1 解封 */ @Override public void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId, Integer payStatus) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper plusWr = new LambdaQueryWrapper<>(); Long totalSpace = cameraDetail.getTotalSpace(); UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId); if(userIncrement!=null){ IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId()); if(incrementType!=null){ if(incrementType.getCameraCapacity() == -1){ totalSpace = -1L; }else { totalSpace = incrementType.getCameraCapacity() * 1024 * 1024L; } } } log.info("lockOrUnLockBySpace---cameraId:{},payStatus:{},totalSpace:{},useSpace{}", cameraId,payStatus,totalSpace,cameraDetail.getUsedSpace()); if(payStatus == 1){ //解封,判断用户权益,用户会员权益无限容量 wrapper.orderByAsc(ScenePro::getCreateTime); plusWr.orderByAsc(ScenePlus::getCreateTime); wrapper.eq(ScenePro::getPayStatus,-2); plusWr.eq(ScenePlus::getPayStatus,-2); }else { if (totalSpace >= cameraDetail.getUsedSpace()) { // 总容量大于已使用容量,不予封存 return; } wrapper.orderByDesc(ScenePro::getCreateTime); plusWr.orderByDesc(ScenePlus::getCreateTime); wrapper.eq(ScenePro::getPayStatus,1); plusWr.eq(ScenePlus::getPayStatus,1); } wrapper.eq(ScenePro::getCameraId,cameraId) .eq(ScenePro::getIsUpgrade,0); plusWr.eq(ScenePlus::getCameraId,cameraId); List list = this.list(wrapper); List plusList = scenePlusService.list(plusWr); Long beyondSpace = Math.abs(cameraDetail.getUsedSpace() - totalSpace); Long accumulateSpace = 0L; List lockedIds = new ArrayList<>(); if(payStatus == 1){ Long doSpace = getScenePlusLockedIds(lockedIds, plusList, totalSpace, beyondSpace, accumulateSpace); beyondSpace -= doSpace; getSceneLockedIds(lockedIds,list,totalSpace,beyondSpace,accumulateSpace); }else { Long doSpace = getSceneLockedIds(lockedIds, list, totalSpace, beyondSpace, accumulateSpace); beyondSpace -= doSpace; getScenePlusLockedIds(lockedIds,plusList,totalSpace,beyondSpace,accumulateSpace); } lockOrUnLockScenes(lockedIds,payStatus); } private Long getSceneLockedIds(List lockedIds ,List list,Long count,Long beyondSpace,Long accumulateSpace){ if (list != null && list.size() > 0){ for (ScenePro scenePro : list){ accumulateSpace += scenePro.getSpace(); if (count ==-1 && accumulateSpace.compareTo(beyondSpace) > 0){ return accumulateSpace - scenePro.getSpace(); } lockedIds.add(scenePro.getId()); } } return accumulateSpace; } private Long getScenePlusLockedIds(List lockedIds , List list, Long count, Long beyondSpace, Long accumulateSpace){ if (list != null && list.size() > 0){ List plusIds = list.parallelStream().map(ScenePlus::getId).collect(Collectors.toList()); HashMap byPlusIds = scenePlusExtService.getByPlusIds(plusIds); for (ScenePlus scenePlus : list){ ScenePlusExt scenePlusExt = byPlusIds.get(scenePlus.getId()); accumulateSpace += scenePlusExt.getSpace(); if (count ==-1 && accumulateSpace.compareTo(beyondSpace) > 0){ return accumulateSpace - scenePlusExt.getSpace(); } lockedIds.add(scenePlus.getId()); } } return accumulateSpace; } // payStatus 为 -2 封存,为 1 解封 private void lockOrUnLockScenes(List lockedIds,Integer payStatus) { if (lockedIds == null || lockedIds.size() == 0){ return; } LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(ScenePro::getPayStatus,payStatus) .eq(ScenePro::getIsUpgrade,0) .in(ScenePro::getId,lockedIds); this.update(updateWrapper); LambdaUpdateWrapper updatePlusWrapper = new LambdaUpdateWrapper<>(); updatePlusWrapper.set(ScenePlus::getPayStatus,payStatus) .in(ScenePlus::getId,lockedIds); scenePlusService.update(updatePlusWrapper); this.updateOssStatus(lockedIds,payStatus); } /** * 修改oss status.json中 payStatus */ private void updateOssStatus(List lockedIds, Integer payStatus) { LambdaQueryWrapper proWr = new LambdaQueryWrapper<>(); proWr.eq(ScenePro::getIsUpgrade,0); proWr.in(ScenePro::getId,lockedIds); List proList = this.list(proWr); LambdaQueryWrapper pluWr = new LambdaQueryWrapper<>(); pluWr.in(ScenePlus::getId,lockedIds); List plusList = scenePlusService.list(pluWr); for (ScenePro scenePro : proList) { this.updateOssStatus(String.format(OssPath.v3_statusPath,scenePro.getNum()),payStatus); } for (ScenePlus scenePlus : plusList) { this.updateOssStatus(String.format(OssPath.v4_statusPath,scenePlus.getNum()),payStatus); } } /** * 从oss中获取文件,并重写,上传替换 */ private void updateOssStatus(String path,Integer payStatus) { try { if(!fYunFileServiceInterface.fileExist(path)){ return; } String data = fYunFileServiceInterface.getFileContent("4dkankan",path); if(StringUtils.isBlank(data)){ return; } JSONObject jsonObject = JSONObject.parseObject(data); jsonObject.put("payStatus",payStatus); String json = JSONUtil.toJsonStr(jsonObject); FileUtils.writeFile(OssPath.localStatusPath ,json); log.info("updateOssStatus--localPath:{},ossPath:{}",OssPath.localStatusPath,path); fYunFileServiceInterface.uploadFile(OssPath.localStatusPath,path); }catch (Exception e){ e.printStackTrace(); }finally { FileUtil.del(OssPath.localStatusPath); } } @Override public PageInfo pageList(SceneParam param) { // if(param.getType() == 2 || param.getType() == 6){ //深时 // return laserService.pageList(param); // } if(param.getType() == 3){ //双目lite return sceneService.pageList(param); } SysUser byId = sysUserService.getById(Long.valueOf(StpUtil.getLoginId().toString())); JyUser jyUser = jyUserService.getBySysId(byId.getId()); if(jyUser == null){ throw new BusinessException(ResultCode.JY_ID_NO_EXIST); } if(byId.getRoleId() == 47L ){ param.getUserIds().add(jyUser.getUserId()); } if(byId.getRoleId() !=1 ){ Integer loginPlatformId = jyUserPlatformService.getLoginPlatformId(); if(loginPlatformId != null) { param.setPlatformIds(Arrays.asList(loginPlatformId)); } List list = jySceneUserAuthService.getByJyUserId(jyUser.getId()); if(list.size() >0){ List numList = list.stream().filter(entity -> !(entity.getLookAuth()==0 && entity.getEditAuth() ==0)).map(JySceneUserAuth::getNum).collect(Collectors.toList()); param.setAuthNumList(numList); } List jyUserShares = jyUserShareService.getByJyUserId(jyUser.getId()); List mainUserIds = jyUserShares.stream().map(JyUserShare::getMainJyUserId).collect(Collectors.toList()); HashMap roleMap = new HashMap<>(); if(!mainUserIds.isEmpty()){ List jyUsers = jyUserService.listByIds(mainUserIds); Set sysIds = jyUsers.stream().map(JyUser::getSysUserId).collect(Collectors.toSet()); HashMap byIds = sysUserService.getByIds(sysIds); jyUsers.forEach( e-> roleMap.put(e.getId(),byIds.get(e.getSysUserId()).getRoleId())); for (JyUser user : jyUsers) { Long roleId = roleMap.get(user.getId()); if(user.getPlatformId() != null && (roleId == 45L || roleId == 48L)){ param.getPlatformIds().add(user.getPlatformId()); }else { param.getUserIds().add(user.getUserId()); } } } } Set userIds = null; HashMap userMap = new HashMap<>(); HashMap laserMap = new HashMap<>(); Page page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param); List records = page.getRecords(); List numList = records.parallelStream().map(SceneVo::getNum).collect(Collectors.toList()); if(param.getType() == 2 || param.getType() == 6) { //深时点云,深光点云 if(!numList.isEmpty()){ //laserMap = laserService.list(numList, param.getType() == 2 ? 4 : 5); laserMap = laserService.getMapLaserSceneByDb(new LaserSceneParam(numList)); } } userIds = page.getRecords().stream().map(SceneVo::getUserId).collect(Collectors.toSet()); userMap = jyUserService.getMapByUserIds(userIds); HashMap map = copyLogService.getByNewNumList(numList); for (SceneVo record : page.getRecords()) { if(param.getType() == 2 || param.getType() == 6){ JSONObject ssObj = laserMap.get(record.getNum()); if(ssObj!=null){ record.setId(ssObj.getInteger("id")); record.setSceneName(ssObj.getString("title")); record.setThumb(ssObj.getString("thumb")); record.setWebSite(ssObj.getString("web_site")); record.setViewCount(ssObj.getInteger("view_count")); record.setStatus(laserService.toFdStatus(ssObj.getInteger("status"))); record.setAlgorithmTime(ssObj.getString("algorithm_time")); }else if(record.getStatus() != 0){ record.setStatus(-1); record.setWebSite(null); } } record.setStatusString(SceneStatusUtil.getStatusString(record)); if(userMap.get(record.getUserId()) != null){ record.setUserName(userMap.get(record.getUserId()).getRyNo()); record.setNickName(userMap.get(record.getUserId()).getRyNickName()); } if(map !=null ){ SceneCopyLog sceneCopyLog = map.get(record.getNum()); if(sceneCopyLog != null){ record.setCopyTime(sceneCopyLog.getCreateTime()); record.setIsCopy(true); } } if( byId.getRoleId() == 1L || byId.getRoleId() == 45L || byId.getRoleId() == 48L || jyUser.getUserId().equals(record.getUserId())){ record.setIsAuth(true); record.setEditAuth(1); record.setIsAuthOther(true); }else { JySceneAuth jySceneAuth = jySceneAuthService.getByNum(record.getNum()); if(jySceneAuth != null){ JySceneUserAuth jySceneUserAuth = jySceneUserAuthService.getByNumAndJyUserId(jyUser.getId(), record.getNum(),jySceneAuth.getAuthType()); if(jySceneUserAuth != null && (jySceneUserAuth.getCanAuthLook() == 1 || jySceneUserAuth.getCanEditLook() ==1)){ record.setIsAuth(true); } if(jySceneUserAuth != null){ record.setEditAuth(jySceneUserAuth.getEditAuth()); record.setEditEndTime(jySceneUserAuth.getEditEndTime()); } } } } return PageInfo.PageInfo(page); } @Override public Object sceneCount() { SysUser byId = sysUserService.getById(Long.valueOf(StpUtil.getLoginId().toString())); JyUser jyUser = jyUserService.getBySysId(byId.getId()); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(byId.getRoleId() != 1L && byId.getRoleId() !=45L && byId.getRoleId() != 48){ if(jyUser == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } wrapper.eq(ScenePlus::getUserId,jyUser.getUserId()); List list = jySceneUserAuthService.getByJyUserId(jyUser.getId()); if(list.size() >0){ return 1; } } List userIds = new ArrayList<>(); if(byId.getRoleId() == 45L || byId.getRoleId() == 48L){ //获取本平台所有用户 if(byId.getRoleId() == 48L){ Integer loginPlatformId = jyUserPlatformService.getLoginPlatformId(); if(loginPlatformId != null){ userIds = jyUserService.getByUserIdPlatform(loginPlatformId); } } if(byId.getRoleId() == 45L){ //获取江门平台用户 List jyUsers = jyUserService.getListByJm(); userIds = jyUsers.stream().map(JyUser::getUserId).collect(Collectors.toList()); } if(userIds.isEmpty()){ return 0; } wrapper.in(ScenePlus::getUserId,userIds); } return scenePlusService.count(wrapper); } @Override public void move(SceneParam param) { Camera camera = cameraService.getBySnCode(param.getSnCode()); if(camera == null){ throw new BusinessException(ResultCode.CAMERA_SN_NOT_EXIST); } CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId()); if(cameraDetail == null){ throw new BusinessException(ResultCode.CAMERA_SN_NOT_EXIST); } ScenePro scenePro = this.getByNum(param.getNum()); ScenePlus scenePlus = scenePlusService.getByNum(param.getNum()); if((scenePro == null || scenePro.getCameraId() == null ) && (scenePlus== null || scenePlus.getCameraId() == null)){ throw new BusinessException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005); } Integer status = scenePro == null ? scenePlus.getSceneStatus() : scenePro.getStatus(); if(status == 0){ throw new BusinessException(SceneConstant.FAILURE_CODE_5037, SceneConstant.FAILURE_MSG_5037); } Long sceneCameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId(); Long space = scenePro == null ? 0 :scenePro.getSpace(); if(scenePlus !=null){ ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId()); space = scenePlusExt.getSpace(); } space = space == null ? 0 :space; Long newUseSpace = space + cameraDetail.getUsedSpace(); Long totalSpace = cameraDetail.getTotalSpace(); UserIncrement userIncrement = userIncrementService.getByCameraId(camera.getId()); if(userIncrement!=null){ IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId()); if(incrementType!=null){ if(incrementType.getCameraCapacity() == -1){ totalSpace = -1L; }else { totalSpace = incrementType.getCameraCapacity() * 1024 * 1024L; } } } //深时场景无限容量 if(cameraDetail.getType() != 10 && totalSpace !=-1 && newUseSpace > totalSpace){ throw new BusinessException(ResultCode.CAMERA_SPACE_ERROR); } Camera oldCamera = cameraService.getById(sceneCameraId); if(oldCamera == null){ throw new BusinessException(ResultCode.CAMERA_NOT_EXIST); } CameraDetail oldCameraDetail = cameraDetailService.getByCameraId(oldCamera.getId()); if(oldCameraDetail == null){ throw new BusinessException(ResultCode.CAMERA_NOT_EXIST); } if(oldCameraDetail.getCameraId().equals(cameraDetail.getCameraId())){ throw new BusinessException(ResultCode.CAMERA_NOT_MOVE); } if(!oldCameraDetail.getType().equals(cameraDetail.getType())){ throw new BusinessException(ResultCode.CAMERA_TYPE_NOT_ERROR); } Long oldUseSpace = oldCameraDetail.getUsedSpace() - space < 0 ? 0 : oldCameraDetail.getUsedSpace() - space; oldCameraDetail.setUsedSpace(oldUseSpace); Long subSpace = oldCameraDetail.getTotalSpace() - oldUseSpace; if(cameraDetail.getType() != 10 && subSpace >0){ //有剩余容量解封容量内场景 this.lockOrUnLockBySpace(oldCameraDetail,oldCameraDetail.getCameraId(),1); } cameraDetailService.updateById(oldCameraDetail); cameraDetail.setUsedSpace(newUseSpace); cameraDetailService.updateById(cameraDetail); if(scenePro!=null){ LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(ScenePro::getId,scenePro.getId()); wrapper.set(ScenePro::getCameraId,camera.getId()); wrapper.set(ScenePro::getUserId,cameraDetail.getUserId()); this.update(wrapper); //场景迁移到另外的相机清除本身在的文件夹 folderSceneService.delBySceneId(scenePro.getId()); } if(scenePlus!=null){ LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(ScenePlus::getId,scenePlus.getId()); wrapper.set(ScenePlus::getCameraId,camera.getId()); wrapper.set(ScenePlus::getUserId,cameraDetail.getUserId()); scenePlusService.update(wrapper); folderSceneService.delBySceneId(scenePlus.getId()); } if(cameraDetail.getType() == 10 || cameraDetail.getType() ==11){ //深时场景 laserService.move(param.getNum(),oldCamera.getSnCode(),camera.getSnCode()); } } @Override public void copy(String sceneNum) throws Exception { ScenePro scenePro = this.getByNum(sceneNum); ScenePlus scenePlus = scenePlusService.getByNum(sceneNum); if((scenePro == null || scenePro.getCameraId() == null ) && (scenePlus== null || scenePlus.getCameraId() == null)){ throw new BusinessException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005); } // Long cameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId(); // Camera camera = cameraService.getById(cameraId); // if(camera == null){ // throw new BusinessException(CameraConstant.FAILURE_CODE_6029, CameraConstant.FAILURE_MSG_6029); // } // CameraDetail detailEntity = cameraDetailService.getByCameraId(cameraId); // if(detailEntity == null){ // throw new BusinessException(CameraConstant.FAILURE_CODE_6029, CameraConstant.FAILURE_MSG_6029); // } // if(detailEntity.getType() == 10 || detailEntity.getType() == 11){ // throw new BusinessException(ResultCode.SS_NO_COPY); // } HashMap param = new HashMap<>(); param.put("num",sceneNum); JSONObject jsonObject = fdKKClient.copyScene(param, "m_a_n_a_g_e"); Integer code = jsonObject.getInteger("code"); if(code != 0){ throw new BusinessException(jsonObject.getInteger("code"),jsonObject.getString("message")); } } @Override public void deleteByNum(String num) { Integer sceneSource = null; Long cameraId = null; Long space = null; ScenePro scenePro = this.getByNum(num); if(scenePro!=null){ cameraId = scenePro.getCameraId(); sceneSource = scenePro.getSceneSource(); space = scenePro.getSpace(); this.removeById(scenePro.getId()); } Scene scene = sceneService.getByNum(num); if(scene!=null){ sceneService.removeById(scene.getId()); } ScenePlus scenePlus = scenePlusService.getByNum(num); if(scenePlus!=null){ cameraId = scenePlus.getCameraId(); sceneSource = scenePlus.getSceneSource(); ScenePlusExt plusExt = scenePlusExtService.getByPlusId(scenePlus.getId()); if(plusExt != null){ space = plusExt.getSpace(); scenePlusExtService.delByPlus(scenePlus.getId()); } scenePlusService.removeById(scenePlus.getId()); scenePlusExtService.delByPlus(scenePlus.getId()); } if(sceneSource != null && (sceneSource == 4 || sceneSource == 5)){ laserService.delete(num); } // if(cameraId != null){ // cameraDetailService.addUsedSpace(cameraId,space); // } } @Override public Long getKkCount(List asList, String startTime,List userIds) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(ScenePro::getSceneSource,asList); if(!userIds.isEmpty()){ wrapper.in(ScenePro::getUserId,userIds); } wrapper.eq(ScenePro::getIsUpgrade,0); wrapper.lt(ScenePro::getCreateTime,startTime); long count = this.count(wrapper); LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); wrapper2.in(ScenePlus::getSceneSource,asList); if(!userIds.isEmpty()){ wrapper2.in(ScenePlus::getUserId,userIds); } wrapper2.lt(ScenePlus::getCreateTime,startTime); long count1 = scenePlusService.count(wrapper2); return count + count1; } @Override public Long getSsCount(List asList, String startTime,List userIds) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(ScenePro::getSceneSource,asList); if(!userIds.isEmpty()){ wrapper.in(ScenePro::getUserId,userIds); } wrapper.eq(ScenePro::getIsUpgrade,0); wrapper.lt(ScenePro::getCreateTime,startTime); LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); wrapper2.in(ScenePlus::getSceneSource,asList); if(!userIds.isEmpty()){ wrapper2.in(ScenePlus::getUserId,userIds); } wrapper2.lt(ScenePlus::getCreateTime,startTime); long count = scenePlusService.count(wrapper2); return this.count(wrapper) + count; } @Override public Long getSsObjCount(List asList, String startTime,List userIds) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(ScenePro::getSceneSource,asList); if(!userIds.isEmpty()){ wrapper.in(ScenePro::getUserId,userIds); } wrapper.eq(ScenePro::getIsUpgrade,0); if(StringUtils.isNotBlank(startTime)){ wrapper.lt(ScenePro::getCreateTime,startTime); } wrapper.eq(ScenePro::getIsObj,1); LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); wrapper2.in(ScenePlus::getSceneSource,asList); if(!userIds.isEmpty()){ wrapper2.in(ScenePlus::getUserId,userIds); } if(StringUtils.isNotBlank(startTime)){ wrapper2.lt(ScenePlus::getCreateTime,startTime); } List list = scenePlusService.list(wrapper2); List plusIds = list.stream().map(ScenePlus::getId).collect(Collectors.toList()); long count = 0L; if(plusIds.size() >0){ LambdaQueryWrapper wrapper3 = new LambdaQueryWrapper<>(); wrapper3.in(ScenePlusExt::getPlusId,plusIds); wrapper3.eq(ScenePlusExt::getIsObj,1); count = scenePlusExtService.count(wrapper3); } return this.count(wrapper) + count; } @Override public HashMap getSnCodeByNumList(Set numList) { HashMap sceneMap = new HashMap<>(); HashMap cameraMap = new HashMap<>(); HashMap snCodeMap = new HashMap<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ScenePro::getIsUpgrade,0); wrapper.in(ScenePro::getNum,numList); List list = this.list(wrapper); if(list.size() >0){ list.forEach(entity -> sceneMap.put(entity.getNum(),entity.getCameraId())); } LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); wrapper2.in(ScenePlus::getNum,numList); List list2 = scenePlusService.list(wrapper2); if(list2.size() >0){ list2.forEach(entity -> sceneMap.put(entity.getNum(),entity.getCameraId())); } if(sceneMap.size() <=0){ return snCodeMap; } Set cameraIds = list.stream().map(ScenePro::getCameraId).collect(Collectors.toSet()); Set cameraIds2 = list2.stream().map(ScenePlus::getCameraId).collect(Collectors.toSet()); cameraIds.addAll(cameraIds2); if(cameraIds.size() >0){ List cameraList = cameraService.listByIds(cameraIds); cameraList.forEach(entity -> cameraMap.put(entity.getId(),entity.getSnCode())); for (String num : numList) { Long cameraId = sceneMap.get(num); if(cameraId != null){ snCodeMap.put(num,cameraMap.get(cameraId)); } } } return snCodeMap; } }