package com.fdkankan.ucenter.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.common.constant.AppConstant; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.ucenter.common.PageInfo; import com.fdkankan.common.util.DateUtil; import com.fdkankan.common.util.FileSizeUtil; import com.fdkankan.ucenter.common.constants.NacosProperty; import com.fdkankan.ucenter.constant.CameraConstant; import com.fdkankan.ucenter.constant.LoginConstant; import com.fdkankan.ucenter.entity.*; import com.fdkankan.ucenter.httpClient.service.LaserService; import com.fdkankan.ucenter.mapper.ICameraMapper; import com.fdkankan.ucenter.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.ucenter.util.DateUserUtil; import com.fdkankan.ucenter.vo.request.CameraParam; import com.fdkankan.ucenter.vo.response.CameraAppVo; import com.fdkankan.ucenter.vo.response.CameraSpaceVo; import com.fdkankan.ucenter.vo.response.CameraVo; import com.fdkankan.ucenter.vo.response.GroupByCount; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.joda.time.Days; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** *

* 相机主表 服务实现类 *

* * @author * @since 2022-07-04 */ @Service public class CameraServiceImpl extends ServiceImpl implements ICameraService { @Autowired IUserService userService; @Autowired LaserService fdkkLaserService; @Autowired ISceneProService sceneProService; @Autowired ICameraSpaceService cameraSpaceService; @Autowired IUserIncrementService userIncrementService; @Autowired ISceneService sceneService; @Autowired ISceneResourceCameraService sceneResourceCameraService; @Autowired ISceneResourceService sceneResourceService; @Autowired ICameraDetailService cameraDetailService; @Autowired IScenePlusService scenePlusService; @Autowired ISceneCooperationService sceneCooperationService; @Autowired ICameraIncrementLogService cameraIncrementLogService; @Autowired IMailTemplateService mailTemplateService; @Autowired IIncrementTypeService incrementTypeService; @Autowired ICameraTypeService cameraTypeService; @Override public Camera getBySnCode(String snCode) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Camera::getSnCode,snCode); List list = this.list(wrapper); if(list !=null && list.size() > 0){ return list.get(0); } return null; } @Override public Camera getByWfiName(String snCode) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Camera::getWifiName,snCode); List list = this.list(wrapper); if(list !=null && list.size() > 0){ return list.get(0); } return null; } @Override public List getCameraLikeSnCode(String snCode) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.like(Camera::getSnCode,snCode); return this.list(wrapper); } @Override public HashMap getByIds(List cameraIds) { HashMap map = new HashMap<>(); if(cameraIds.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(Camera::getId,cameraIds); List list = this.list(wrapper); list.forEach(entity -> map.put(entity.getId(),entity)); } return map; } @Override public HashMap deadline(String username) { //7天内过期的集合 List cameraSpaceList = new ArrayList<>(); //所有期限的集合 List cameraSpaceAll = new ArrayList<>(); User user = userService.getByUserName(username); CameraParam param = new CameraParam(); param.setPageNum(1); param.setPageSize(100); param.setUserId(user.getId()); Page page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param); List cameraIdList = page.getRecords().parallelStream().map(CameraVo::getId).collect(Collectors.toList()); if(cameraIdList.size() >0){ HashMap cameraSpaceMap = cameraSpaceService.getVoListByCameraIds(cameraIdList); for (CameraVo responseCamera : page.getRecords()) { CameraSpaceVo cameraSpace = cameraSpaceMap.get(responseCamera.getId()); if(cameraSpace != null){ DateTime dateTime = new DateTime(cameraSpace.getSpaceEndTime()); cameraSpace.setSnCode(responseCamera.getSnCode()); cameraSpace.setUsedSpace(Long.valueOf(responseCamera.getUsedSpace())); cameraSpace.setUsedSpaceStr(responseCamera.getUsedSpaceStr()); cameraSpace.setTotalSpace(Double.parseDouble(responseCamera.getTotalSpace())); cameraSpace.setTotalSpaceStr(responseCamera.getTotalSpaceStr()); Long space = cameraSpace.getSpace(); cameraSpace.setSpace((long)FileSizeUtil.formetFileSize(space, FileSizeUtil.SIZETYPE_GB)); cameraSpace.setSpaceStr(FileSizeUtil.formatFileSize(space)); cameraSpace.setSpaceEndStr(DateUtil.date2String(cameraSpace.getSpaceEndTime(), DateUtil.YYYY_MM_DD_DATE_FORMAT)); if(Days.daysBetween(new DateTime(), dateTime).getDays() < 7){ cameraSpaceList.add(cameraSpace); cameraSpaceAll.add(cameraSpace); continue; } cameraSpaceAll.add(cameraSpace); } } } HashMap map = new HashMap<>(); map.put("nickName", user.getNickName()); if(cameraSpaceList.size() > 0){ map.put("isExpire", true); Collections.sort(cameraSpaceList); map.put("cameraList", cameraSpaceList); return map; } map.put("isExpire", false); Collections.sort(cameraSpaceAll); map.put("cameraList", cameraSpaceAll); return map; } @Override public PageInfo pageList(CameraParam param) { User user = userService.getByUserName(param.getUserName()); param.setUserId(user.getId()); Page page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param); List cameraIdList = page.getRecords().parallelStream().map(CameraVo::getId).collect(Collectors.toList()); HashMap sceneNumMap = new HashMap<>(); //场景数量,最后拍摄时间 //HashMap cameraSpaceMap = new HashMap<>(); //到期时间 HashMap incrementMap = new HashMap<>(); //到期时间,是否过期 if(cameraIdList.size() >0){ sceneNumMap = sceneProService.findSceneNumByCameraIds(cameraIdList); //cameraSpaceMap = cameraSpaceService.getVoListByCameraIds(cameraIdList); incrementMap = userIncrementService.findByCameraIds(cameraIdList); } for (CameraVo responseCamera : page.getRecords()) { responseCamera.setCameraType(param.getCameraType()); if (responseCamera.getType() != 0){ if("GB".equals(responseCamera.getUnit())){ responseCamera.setUsedSpaceStr(FileSizeUtil.formatFileSize(Long.parseLong(responseCamera.getUsedSpace()))); responseCamera.setTotalSpaceStr(FileSizeUtil.formatFileSize(Long.parseLong(responseCamera.getTotalSpace()))); String usedSpace = String.valueOf(FileSizeUtil.formetFileSize(Long.parseLong(responseCamera.getUsedSpace()), FileSizeUtil.SIZETYPE_GB)); String totalSpace = String.valueOf(FileSizeUtil.formetFileSize(Long.parseLong(responseCamera.getTotalSpace()), FileSizeUtil.SIZETYPE_GB)); responseCamera.setUsedSpace(usedSpace); responseCamera.setTotalSpace(totalSpace); } if("SP".equals(responseCamera.getUnit())){ responseCamera.setUsedSpaceStr(responseCamera.getUsedSpace()); responseCamera.setTotalSpaceStr(responseCamera.getTotalSpace()); responseCamera.setUsedSpace(responseCamera.getUsedSpace()); responseCamera.setTotalSpace(responseCamera.getTotalSpace()); } } if(incrementMap.get(responseCamera.getId()) != null){ UserIncrement userIncrement = incrementMap.get(responseCamera.getId()); if(userIncrement != null){ responseCamera.setUserIncrementId(userIncrement.getId()); responseCamera.setMemberLevels(userIncrement.getMemberLevels()); responseCamera.setSpaceEndStr(DateUserUtil.getDayTime(userIncrement.getIncrementEndTime())); responseCamera.setSpaceEndTime(userIncrement.getIncrementEndTime()); responseCamera.setSubscriptionOrder(userIncrement.getSubscriptionOrder()); String dayTime = userIncrement.getIncrementEndTime(); Integer surplusDate = Days.daysBetween(new DateTime(), new DateTime( DateUserUtil.getDate(dayTime))).getDays(); if(surplusDate < 31){ responseCamera.setIsExpire(true); responseCamera.setSurplusDate(surplusDate); }else { responseCamera.setIsExpire(false); } IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId()); String totalSpaceStr = null; String totalSpace = null; if("GB".equals(responseCamera.getUnit())){ if(incrementType!= null && "SE".equals(userIncrement.getMemberLevels()) && DateUserUtil.getDate(dayTime).getTime() > new Date().getTime() ){ //高级会员 50G容量 totalSpaceStr = incrementType.getCameraCapacity() + ".00GB"; totalSpace = incrementType.getCameraCapacity() + ".00"; } } if("SP".equals(responseCamera.getUnit())){ if(incrementType != null && "SE".equals(userIncrement.getMemberLevels()) && DateUserUtil.getDate(dayTime).getTime() > new Date().getTime() ){ //高级会员 50G容量 totalSpaceStr = String.valueOf(incrementType.getCameraSpace()); totalSpace = String.valueOf(incrementType.getCameraSpace()); } } if(totalSpace!=null){ responseCamera.setTotalSpaceStr(totalSpaceStr); responseCamera.setTotalSpace(totalSpace); } } } // CameraType cameraType = cameraTypeService.getByCameraType(responseCamera.getType()); // if (cameraType.getIsLaser() == 1) { // Map params = new HashMap<>(); // params.put("snCode", responseCamera.getSnCode()); // responseCamera.setSceneNum(fdkkLaserService.getLaserSceneNum(params)); // }else{ // Integer sceneNum = sceneNumMap.get(responseCamera.getId()) == null ? 0 : Math.toIntExact(sceneNumMap.get(responseCamera.getId()).getCount()); // String lastTime = sceneNumMap.get(responseCamera.getId()) == null ? "" : sceneNumMap.get(responseCamera.getId()).getLastTime(); // responseCamera.setSceneNum(sceneNum); // responseCamera.setLastTime(lastTime); // } Integer sceneNum = sceneNumMap.get(responseCamera.getId()) == null ? 0 : Math.toIntExact(sceneNumMap.get(responseCamera.getId()).getCount()); String lastTime = sceneNumMap.get(responseCamera.getId()) == null ? "" : sceneNumMap.get(responseCamera.getId()).getLastTime(); responseCamera.setSceneNum(sceneNum); responseCamera.setLastTime(lastTime); } return PageInfo.PageInfo(page); } @Override public void unbind(Long cameraId, String ids,String userName) { if(cameraId != null){ ids = cameraId.toString(); } String[] split = ids.split(","); List cameraIds = new ArrayList<>(); for (String id : split) { cameraIds.add(Long.valueOf(id)); } cameraIncrementLogService.saveLog(cameraIds,userName); userIncrementService.unbindCamera(cameraIds); //取消关联用户权益 cameraDetailService.unbindCamera(cameraIds); //取消相机用户关联 sceneService.bindOrUnCamera(cameraIds,null); //取消关联场景 sceneProService.bindOrUnCamera(cameraIds,null); //取消关联场景 scenePlusService.bindOrUnCamera(cameraIds,null); //取消关联场景 sceneResourceCameraService.deleteByCameraIds(cameraIds); //删除协作相机 } @Override public void bind(Integer cameraType, String snCodes, String username) { User user = userService.getByUserName(username); if(user == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3015,LoginConstant.FAILURE_MSG_3015); } String[] snCodeArr = snCodes.split(","); List cameraIds = new ArrayList<>(); for (String wifiName : snCodeArr) { Camera camera = null; if(wifiName.contains("_")){ camera = this.getByWfiName(wifiName); }else { camera = this.getBySnCode(wifiName); } if(camera == null){ throw new BusinessException(AppConstant.FAILURE_CODE_4010, wifiName +"-"+ AppConstant.FAILURE_MSG_4010); } CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId()); if(cameraDetail == null){ throw new BusinessException(AppConstant.FAILURE_CODE_4010, wifiName +"-"+ AppConstant.FAILURE_MSG_4010); } if( cameraDetail.getUserId() != null){ throw new BusinessException(CameraConstant.FAILURE_CODE_6010, wifiName +"-"+ CameraConstant.FAILURE_MSG_6010); } cameraIds.add(camera.getId()); } cameraIncrementLogService.saveLog(cameraIds,null,user.getId(),2); cameraDetailService.bindCamera(cameraIds,user); sceneService.bindOrUnCamera(cameraIds,user.getId()); sceneProService.bindOrUnCamera(cameraIds,user.getId()); scenePlusService.bindOrUnCamera(cameraIds,user.getId()); if("local".equals(NacosProperty.uploadType)){ //局域网绑定相机,添加权益 userIncrementService.addByCameraAndUser(cameraIds,user.getId()); } } @Override public void saveCooperationUser(String ids, Long id,String resourceIds, String username,String lang) { User user = userService.getByUserName(username); if(user == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3021, LoginConstant.FAILURE_MSG_3021); } if (id != null) { ids = id.toString(); } String[] split = ids.split(","); List cameraIds = new ArrayList<>(); for (String cameraId : split) { cameraIds.add(Long.valueOf(cameraId)); } HashMap detailMap = cameraDetailService.getByCameraIds(cameraIds); HashMap cameraMap = this.getByIds(cameraIds); cameraDetailService.updateCooperationByIds(cameraIds, user.getId()); sceneResourceCameraService.deleteByCameraIds(cameraIds); //保存相机和场景资源的关联关系你 List resourceIdList = new ArrayList<>(); List v3List = new ArrayList<>(); List v4List = new ArrayList<>(); if (StringUtils.isNotEmpty(resourceIds)) { for (String rId : resourceIds.split(",")) { resourceIdList.add(Long.valueOf(rId)); } List sceneResources = sceneResourceService.listByIds(resourceIdList); v3List = sceneResources.stream().filter(entity -> entity.getVersion().equals("v3")).collect(Collectors.toList()); v4List = sceneResources.stream().filter(entity -> entity.getVersion().equals("v4")).collect(Collectors.toList()); sceneResourceCameraService.saveBatchByCameraIds(cameraIds,resourceIdList); }else { List laserCameraIds = new ArrayList<>(); for (Long cameraId : detailMap.keySet()) { CameraDetail detail = detailMap.get(cameraId); CameraType cameraType = cameraTypeService.getByCameraType(detail.getType()); if (cameraType.getIsLaser() == 1) { laserCameraIds.add(cameraId); } } if(laserCameraIds.size() >0){ List sceneResources = sceneResourceService.list(); List collect = sceneResources.stream().map(SceneResource::getId).collect(Collectors.toList()); sceneResourceCameraService.saveBatchByCameraIds(laserCameraIds,collect); v3List = sceneResources.stream().filter(entity -> entity.getVersion().equals("v3")).collect(Collectors.toList()); v4List = sceneResources.stream().filter(entity -> entity.getVersion().equals("v4")).collect(Collectors.toList()); } } List sceneProList = sceneProService.getListByCameraIds(cameraIds); List scenePlusList = scenePlusService.getListByCameraIds(cameraIds); sceneCooperationService.deleteCooperationList(sceneProList,scenePlusList); if(!v3List.isEmpty() && !sceneProList.isEmpty()){ List v3Ids = v3List.stream().map(SceneResource::getId).collect(Collectors.toList()); sceneCooperationService.saveBatchByList(sceneProList,new ArrayList<>(),user.getId(),v3Ids); } if(!v4List.isEmpty() && !scenePlusList.isEmpty()){ List v4Ids = v4List.stream().map(SceneResource::getId).collect(Collectors.toList()); sceneCooperationService.saveBatchByList(new ArrayList<>(),scenePlusList,user.getId(),v4Ids); } fdkkLaserService.disableCooperation(detailMap, cameraMap); fdkkLaserService.enableCameraCooperation(detailMap, cameraMap, username); if("aws".equals(NacosProperty.uploadType)){ mailTemplateService.sendCameraCooperation(cameraMap,username,lang); } } @Override public void deleteCooperationUser(Long cameraId) { List cameraIds = new ArrayList<>(); cameraIds.add(cameraId); HashMap detailMap = cameraDetailService.getByCameraIds(cameraIds); HashMap cameraMap = this.getByIds(cameraIds); cameraDetailService.updateCooperationByIds(cameraIds, null); sceneResourceCameraService.deleteByCameraIds(cameraIds); List sceneProList = sceneProService.getListByCameraIds(cameraIds); List scenePlusList = scenePlusService.getListByCameraIds(cameraIds); sceneCooperationService.deleteCooperationList(sceneProList,scenePlusList); fdkkLaserService.disableCooperation(detailMap, cameraMap); } @Override public Camera getBySnCodeAndPassword(String appUserName, String appPassword) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Camera::getChildName,appUserName) .eq(Camera::getChildPassword,appPassword); List list = this.list(wrapper); if(list != null && list.size() >0){ return list.get(0); } return null; } @Override public Camera getByChildName(String childName) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Camera::getChildName,childName); List list = this.list(wrapper); if(list != null && list.size() >0){ return list.get(0); } return null; } @Override public CameraVo getVoByChildName(String childName) { CameraVo vo = null; Camera cameraEntity = this.getByChildName(childName); if (cameraEntity != null){ CameraDetail detailEntity = cameraDetailService.getByCameraId(cameraEntity.getId()); if (detailEntity != null){ vo = new CameraVo(); vo.setId(cameraEntity.getId()); vo.setUserId(detailEntity.getUserId()); vo.setActivatedTime(cameraEntity.getActivatedTime()); vo.setBalance(Integer.valueOf(detailEntity.getBalance())); vo.setChildName(cameraEntity.getChildName()); vo.setSnCode(cameraEntity.getSnCode()); vo.setUnit(detailEntity.getUnit()); if (detailEntity.getType() != 0){ if("GB".equals(detailEntity.getUnit())){ vo.setUsedSpace(Double.valueOf(FileSizeUtil.formetFileSize(detailEntity.getUsedSpace().longValue(), FileSizeUtil.SIZETYPE_GB)).intValue() +"" ); vo.setTotalSpace(Double.valueOf(FileSizeUtil.formetFileSize(detailEntity.getTotalSpace().longValue(), FileSizeUtil.SIZETYPE_GB)).intValue() +""); vo.setUsedSpaceStr(FileSizeUtil.formatFileSize(detailEntity.getUsedSpace().longValue())); vo.setTotalSpaceStr(FileSizeUtil.formatFileSize(detailEntity.getTotalSpace().longValue())); } if("SP".equals(detailEntity.getUnit())){ vo.setUsedSpace(String.valueOf(detailEntity.getUsedSpace())); vo.setTotalSpace(String.valueOf(detailEntity.getTotalSpace())); vo.setUsedSpaceStr(String.valueOf(detailEntity.getUsedSpace())); vo.setTotalSpaceStr(String.valueOf(detailEntity.getTotalSpace())); } } vo.setType(detailEntity.getType()); vo.setCountry(detailEntity.getCountry()); vo.setCameraType(detailEntity.getType()+""); } } return vo; } @Override public List getCameraInfo(String childName, String childPassword) { return this.getBaseMapper().getCameraInfo(childName,childPassword); } @Override public List getAllList(String childName,String token) { User user = userService.getByToken(token); if(user == null){ return new ArrayList<>(); } return this.getBaseMapper().getAllListByUser(user.getId(),childName); } @Override public List findLikeChildName(String searchKey) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.like(Camera::getSnCode,searchKey); return this.list(wrapper); } @Override public List getBySnCodes(List snCodes) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(snCodes == null || snCodes.size()<=0){ return new ArrayList<>(); } wrapper.in(Camera::getSnCode,snCodes); return this.list(wrapper); } }