package com.gkhy.safePlatform.account.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gkhy.safePlatform.account.entity.device.Camera; import com.gkhy.safePlatform.account.enums.DepartmentLevelEnum; import com.gkhy.safePlatform.account.model.dto.req.AddAndUpdateCameraDTO; import com.gkhy.safePlatform.account.model.dto.req.CameraQuery; import com.gkhy.safePlatform.account.model.dto.resp.CameraRespDTO; import com.gkhy.safePlatform.account.model.dto.resp.DepRespDTO; import com.gkhy.safePlatform.account.model.dto.resp.UserInfoRespDTO; import com.gkhy.safePlatform.account.service.AccountService; import com.gkhy.safePlatform.account.service.CameraManageService; import com.gkhy.safePlatform.account.service.DepartmentService; import com.gkhy.safePlatform.account.service.baseService.CameraService; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.exception.BusinessException; import com.gkhy.safePlatform.commons.vo.ResultVO; import com.gkhy.safePlatform.commons.vo.SearchResultVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @Service public class CameraManageServiceImpl implements CameraManageService { @Autowired private CameraService cameraService; @Autowired private DepartmentService departmentService; @Autowired private AccountService accountService; @Override @Transactional public ResultVO saveNewCamera(AddAndUpdateCameraDTO dto) { ResultVO resultVO = new ResultVO<>(); if(dto == null){ resultVO.setCode(ResultCodes.CLIENT_PARAM_NULL.getCode()); resultVO.setMsg("参数不能为空"); return resultVO; } if(dto.getDeviceNo() == null || dto.getDeviceNo().isEmpty()){ resultVO.setCode(ResultCodes.CLIENT_PARAM_NULL.getCode()); resultVO.setMsg("摄像机编号不能为空"); return resultVO; } if(dto.getName() == null || dto.getName().isEmpty()){ resultVO.setCode(ResultCodes.CLIENT_PARAM_NULL.getCode()); resultVO.setMsg("摄像机名称不能为空"); return resultVO; } if(dto.getShortName() == null || dto.getShortName().isEmpty()){ resultVO.setCode(ResultCodes.CLIENT_PARAM_NULL.getCode()); resultVO.setMsg("摄像机别名不能为空"); return resultVO; } if(dto.getBizDepId() == null || dto.getBizDepId() < 0){ resultVO.setCode(ResultCodes.CLIENT_PARAM_NULL.getCode()); resultVO.setMsg("摄像机所属事业部不能为空"); return resultVO; } if(cameraService.findByDeviceNo(dto.getDeviceNo()) != null){ resultVO.setCode(ResultCodes.BUSINESS_ERROR.getCode()); resultVO.setMsg("摄像机编号已被使用"); return resultVO; } //判断是否为事业部 //判断部门是否存在 DepRespDTO dep = departmentService.getDepartmentInfoByDepId(dto.getBizDepId()); if(dep == null){ resultVO = new ResultVO<>(ResultCodes.BUSINESS_ERROR.getCode(),"部门不存在"); return resultVO; } if(!dep.getDepLevel().equals(DepartmentLevelEnum.BUSINESS.code)){ resultVO = new ResultVO<>(ResultCodes.BUSINESS_ERROR.getCode(),"部门必须为事业部"); return resultVO; } //检测名称和别名是否重复 List cameraListByName = cameraService.listCamerasByName(dto.getName()); if(cameraListByName != null && !cameraListByName.isEmpty()){ resultVO.setCode(ResultCodes.BUSINESS_ERROR.getCode()); resultVO.setMsg("摄像机名称不能重复"); return resultVO; } List cameraListByShortName = cameraService.listCamerasByShortName(dto.getShortName()); if(cameraListByShortName != null && !cameraListByShortName.isEmpty()){ resultVO.setCode(ResultCodes.BUSINESS_ERROR.getCode()); resultVO.setMsg("摄像机简称不能重复"); return resultVO; } Camera camera = new Camera(); camera.setBizDepId(dto.getBizDepId()); camera.setDeviceNo(dto.getDeviceNo()); camera.setName(dto.getName()); camera.setShortName(dto.getShortName()); if(cameraService.saveNewCamera(camera) != 1){ throw new BusinessException(ResultCodes.SERVER_ADD_ERROR); } resultVO.setCode(ResultCodes.OK); return resultVO; } @Override @Transactional public ResultVO updateCameraInfo(AddAndUpdateCameraDTO dto) { if(dto == null || dto.getId() == null){ ResultVO resultVO = new ResultVO<>(ResultCodes.CLIENT_PARAM_NULL.getCode(),"参数不能为空"); return resultVO; } if(dto.getDeviceNo() == null || dto.getDeviceNo().isEmpty()){ ResultVO resultVO = new ResultVO<>(ResultCodes.CLIENT_PARAM_NULL.getCode(),"摄像机编号不能为空"); return resultVO; } if(dto.getName() == null || dto.getName().isEmpty()){ ResultVO resultVO = new ResultVO<>(ResultCodes.CLIENT_PARAM_NULL.getCode(),"摄像机名称不能为空"); return resultVO; } if(dto.getShortName() == null || dto.getShortName().isEmpty()){ ResultVO resultVO = new ResultVO<>(ResultCodes.CLIENT_PARAM_NULL.getCode(),"摄像机别名不能为空"); return resultVO; } if(dto.getBizDepId() == null || dto.getBizDepId() < 0){ ResultVO resultVO = new ResultVO<>(ResultCodes.CLIENT_PARAM_NULL.getCode(),"摄像机所属事业部不能为空"); return resultVO; } //检查目标设备是否存在 Camera camera = cameraService.findByDeviceId(dto.getId()); if(camera == null){ ResultVO resultVO = new ResultVO<>(ResultCodes.BUSINESS_ERROR.getCode(),"摄像机不存在"); return resultVO; } //判断设备号是否被使用 Camera cameraByNo = cameraService.findByDeviceNo(dto.getDeviceNo()); if(cameraByNo != null && !cameraByNo.getId().equals(camera.getId())){ ResultVO resultVO = new ResultVO<>(ResultCodes.BUSINESS_ERROR.getCode(),"摄像机编号已经被使用"); return resultVO; } if(!camera.getBizDepId().equals(dto.getBizDepId())){ //判断部门是否存在 DepRespDTO dep = departmentService.getDepartmentInfoByDepId(dto.getBizDepId()); if(dep == null){ ResultVO resultVO = new ResultVO<>(ResultCodes.BUSINESS_ERROR.getCode(),"部门不存在"); return resultVO; } if(!dep.getDepLevel().equals(DepartmentLevelEnum.BUSINESS.code)){ ResultVO resultVO = new ResultVO<>(ResultCodes.BUSINESS_ERROR.getCode(),"部门必须为事业部"); return resultVO; } } if(!camera.getName().equals(dto.getName())){ //检测名称和别名是否重复 List cameraListByName = cameraService.listCamerasByName(dto.getName()); if(cameraListByName != null && !cameraListByName.isEmpty()){ ResultVO resultVO = new ResultVO<>(ResultCodes.BUSINESS_ERROR.getCode(),"摄像机名称不能重复"); return resultVO; } } if(!camera.getShortName().equals(dto.getShortName())){ List cameraListByShortName = cameraService.listCamerasByShortName(dto.getShortName()); if(cameraListByShortName != null && !cameraListByShortName.isEmpty()){ ResultVO resultVO = new ResultVO<>(ResultCodes.BUSINESS_ERROR.getCode(),"摄像机简称不能重复"); return resultVO; } } //更新数据库 camera.setName(dto.getName()); camera.setShortName(dto.getShortName()); camera.setBizDepId(dto.getBizDepId()); camera.setDeviceNo(dto.getDeviceNo()); if(cameraService.updateCameraInfo(camera) <= 0){ throw new BusinessException(ResultCodes.SERVER_UPDATE_ERROR); } return new ResultVO<>(ResultCodes.OK); } @Override @Transactional public ResultVO deleteCameraById(Long cameraId) { if(cameraId == null || cameraId < 0){ ResultVO resultVO = new ResultVO<>(ResultCodes.CLIENT_PARAM_NULL.getCode(),"参数不能为空"); return resultVO; } //检查目标设备是否存在 Camera camera = cameraService.findByDeviceId(cameraId); if(camera == null){ ResultVO resultVO = new ResultVO<>(ResultCodes.BUSINESS_ERROR.getCode(),"摄像机不存在"); return resultVO; } if(cameraService.deleteCamera(cameraId) != 1){ throw new BusinessException(ResultCodes.SERVER_DEL_ERROR); } return new ResultVO<>(ResultCodes.OK); } @Override public SearchResultVO findByCameraId(Long id) { SearchResultVO resultVO = new SearchResultVO<>(ResultCodes.OK); resultVO.setUsePage(false); if(id == null || id < 1) return resultVO; Camera camera = cameraService.findByDeviceId(id); if(camera != null){ DepRespDTO depInfo = departmentService.getDepartmentInfoByDepId(camera.getBizDepId()); resultVO.setData(convertToRespDTO(camera,depInfo)); resultVO.setCount(1); resultVO.setTotal(1L); } return resultVO; } @Override public SearchResultVO> listCamerasByDepId(CameraQuery query) { SearchResultVO> resultVO = new SearchResultVO<>(ResultCodes.OK); resultVO.setUsePage(true); resultVO.setPageSize(query.getPageSize()); resultVO.setPageIndex(query.getPageIndex()); Page page = new Page<>(); if(query.getPageSize() == null){ query.setPageSize(10L); } if(query.getPageIndex() == null){ query.setPageIndex(1L); } page.setSize(query.getPageSize()); page.setCurrent(query.getPageIndex()); if(query == null || query.getBizDepId() == null || query.getBizDepId() < 1){ return resultVO; } IPage cameraPages = cameraService.listCamerasByBizDepId(page, query.getBizDepId()); if(cameraPages != null){ resultVO.setTotal(cameraPages.getTotal()); List cameraList = cameraPages.getRecords(); List dtoList = convertToRespDTOList(cameraList); resultVO.setData(dtoList); if(dtoList != null) resultVO.setCount(dtoList.size()); else resultVO.setCount(0); } return resultVO; } @Override public SearchResultVO> listCamerasByDepId(Long depId) { SearchResultVO> resultVO = new SearchResultVO<>(ResultCodes.OK); resultVO.setUsePage(false); List cameraList = cameraService.listCamerasByBizDepId(depId); if(cameraList != null){ resultVO.setData(convertToRespDTOList(cameraList)); resultVO.setCount(cameraList.size()); } return resultVO; } @Override public SearchResultVO> listCamerasByCondition(CameraQuery query) { SearchResultVO> resultVO = new SearchResultVO<>(ResultCodes.OK); resultVO.setUsePage(true); if(query.getPageSize() == null){ query.setPageSize(10L); } if(query.getPageIndex() == null){ query.setPageIndex(1L); } resultVO.setPageSize(query.getPageSize()); resultVO.setPageIndex(query.getPageIndex()); Page page = new Page<>(query.getPageIndex(), query.getPageSize()); if(query == null || (query.getBizDepId() != null && query.getBizDepId() < 1)){ return resultVO; } List cameraList = cameraService.listCamerasByCondition(page, query.getBizDepId(), query.getName(), query.getShortName()); if(cameraList != null){ resultVO.setTotal(page.getTotal()); List dtoList = convertToRespDTOList(cameraList); resultVO.setData(dtoList); if(dtoList != null) resultVO.setCount(dtoList.size()); else resultVO.setCount(0); } return resultVO; } @Override public SearchResultVO> listAccessCamerasByUserId(Long userId) { SearchResultVO> resultVO = new SearchResultVO<>(ResultCodes.OK); resultVO.setUsePage(false); if(userId == null || userId < 1) return resultVO; //1、查询用户信息 UserInfoRespDTO userInfo = accountService.getUserInfoByUid(userId); if(userInfo == null) return resultVO; DepRespDTO depInfo = departmentService.getDepartmentInfoByDepId(userInfo.getDepId()); if(depInfo == null) return resultVO; List cameraList = null; if(depInfo.getDepLevel().equals(DepartmentLevelEnum.COMPANY.code)){ //公司级用户,返回全部摄像头 cameraList = cameraService.listAllCameras(); }else if(depInfo.getDepLevel().equals(DepartmentLevelEnum.BUSINESS.code)){ //事业部级用户,查询本事业部 cameraList = cameraService.listCamerasByBizDepId(depInfo.getDepId()); }else { //解析至事业部级部门 DepRespDTO busDep = praseBusinessDepId(depInfo); if(busDep == null) { return resultVO; } cameraList = cameraService.listCamerasByBizDepId(busDep.getDepId()); } if(cameraList != null){ resultVO.setData(convertToRespDTOList(cameraList)); resultVO.setCount(cameraList.size()); } return resultVO; } @Override public SearchResultVO> listAllCameras() { SearchResultVO> resultVO = new SearchResultVO<>(ResultCodes.OK); resultVO.setUsePage(false); List cameraList = cameraService.listAllCameras(); if(cameraList != null){ resultVO.setData(convertToRespDTOList(cameraList)); resultVO.setCount(cameraList.size()); } return resultVO; } @Override public List listByCameraIdList(List cameraIdList) { if(cameraIdList == null || cameraIdList.isEmpty()){ return null; } List cameraList = cameraService.listByCameraIdList(cameraIdList); return convertToRespDTOList(cameraList); } private List convertToRespDTOList(List cameraList){ if(cameraList == null || cameraList.isEmpty()){ return null; } //获取部门信息 Set depIdSet = new HashSet<>(); cameraList.forEach(c -> { depIdSet.add(c.getBizDepId()); }); List depIdList = new ArrayList<>(); depIdSet.forEach(id -> { depIdList.add(id); }); List depList = departmentService.listDepByDepIds(depIdList); List dtoList = new ArrayList<>(); for(int i = 0;i < cameraList.size();i++){ CameraRespDTO dto = convertToRespDTO(cameraList.get(i)); //读取部门名称 for(int j = 0; j < depList.size(); j++){ if(depList.get(j).getDepId().equals(dto.getBizDepId())){ dto.setDepName(depList.get(j).getDepName()); } } dtoList.add(dto); } return dtoList; } private CameraRespDTO convertToRespDTO(Camera camera){ if(camera == null) return null; CameraRespDTO dto = new CameraRespDTO(); BeanUtils.copyProperties(camera,dto); return dto; } private CameraRespDTO convertToRespDTO(Camera camera,DepRespDTO depInfo){ if(camera == null) return null; CameraRespDTO dto = new CameraRespDTO(); BeanUtils.copyProperties(camera,dto); if(depInfo != null) dto.setDepName(depInfo.getDepName()); return dto; } private DepRespDTO praseBusinessDepId(DepRespDTO depRespDTO){ if(depRespDTO == null) return null; if(depRespDTO.getDepLevel().equals(DepartmentLevelEnum.COMPANY.code)) return depRespDTO; if(depRespDTO.getDepLevel().equals(DepartmentLevelEnum.BUSINESS.code)) return depRespDTO; // if(depRespDTO.getParentDepId() == null){ return null; } depRespDTO = departmentService.getDepartmentInfoByDepId(depRespDTO.getParentDepId()); depRespDTO = praseBusinessDepId(depRespDTO); return depRespDTO; } }