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<Camera> cameraListByName = cameraService.listCamerasByName(dto.getName());
|
if(cameraListByName != null && !cameraListByName.isEmpty()){
|
resultVO.setCode(ResultCodes.BUSINESS_ERROR.getCode());
|
resultVO.setMsg("摄像机名称不能重复");
|
return resultVO;
|
}
|
List<Camera> 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<Camera> 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<Camera> 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<CameraRespDTO> findByCameraId(Long id) {
|
SearchResultVO<CameraRespDTO> 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<List<CameraRespDTO>> listCamerasByDepId(CameraQuery query) {
|
SearchResultVO<List<CameraRespDTO>> 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<Camera> cameraPages = cameraService.listCamerasByBizDepId(page, query.getBizDepId());
|
if(cameraPages != null){
|
resultVO.setTotal(cameraPages.getTotal());
|
List<Camera> cameraList = cameraPages.getRecords();
|
List<CameraRespDTO> dtoList = convertToRespDTOList(cameraList);
|
resultVO.setData(dtoList);
|
if(dtoList != null)
|
resultVO.setCount(dtoList.size());
|
else
|
resultVO.setCount(0);
|
}
|
return resultVO;
|
}
|
|
@Override
|
public SearchResultVO<List<CameraRespDTO>> listCamerasByDepId(Long depId) {
|
SearchResultVO<List<CameraRespDTO>> resultVO = new SearchResultVO<>(ResultCodes.OK);
|
resultVO.setUsePage(false);
|
List<Camera> cameraList = cameraService.listCamerasByBizDepId(depId);
|
if(cameraList != null){
|
resultVO.setData(convertToRespDTOList(cameraList));
|
resultVO.setCount(cameraList.size());
|
}
|
return resultVO;
|
}
|
|
@Override
|
public SearchResultVO<List<CameraRespDTO>> listCamerasByCondition(CameraQuery query) {
|
SearchResultVO<List<CameraRespDTO>> 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<Camera> cameraList = cameraService.listCamerasByCondition(page, query.getBizDepId(), query.getName(), query.getShortName());
|
if(cameraList != null){
|
resultVO.setTotal(page.getTotal());
|
List<CameraRespDTO> dtoList = convertToRespDTOList(cameraList);
|
resultVO.setData(dtoList);
|
if(dtoList != null)
|
resultVO.setCount(dtoList.size());
|
else
|
resultVO.setCount(0);
|
}
|
return resultVO;
|
}
|
|
@Override
|
public SearchResultVO<List<CameraRespDTO>> listAccessCamerasByUserId(Long userId) {
|
SearchResultVO<List<CameraRespDTO>> 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<Camera> 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<List<CameraRespDTO>> listAllCameras() {
|
SearchResultVO<List<CameraRespDTO>> resultVO = new SearchResultVO<>(ResultCodes.OK);
|
resultVO.setUsePage(false);
|
List<Camera> cameraList = cameraService.listAllCameras();
|
if(cameraList != null){
|
resultVO.setData(convertToRespDTOList(cameraList));
|
resultVO.setCount(cameraList.size());
|
}
|
return resultVO;
|
}
|
|
@Override
|
public List<CameraRespDTO> listByCameraIdList(List<Long> cameraIdList) {
|
if(cameraIdList == null || cameraIdList.isEmpty()){
|
return null;
|
}
|
List<Camera> cameraList = cameraService.listByCameraIdList(cameraIdList);
|
return convertToRespDTOList(cameraList);
|
}
|
|
private List<CameraRespDTO> convertToRespDTOList(List<Camera> cameraList){
|
if(cameraList == null || cameraList.isEmpty()){
|
return null;
|
}
|
//获取部门信息
|
Set<Long> depIdSet = new HashSet<>();
|
cameraList.forEach(c -> {
|
depIdSet.add(c.getBizDepId());
|
});
|
List<Long> depIdList = new ArrayList<>();
|
depIdSet.forEach(id -> {
|
depIdList.add(id);
|
});
|
List<DepRespDTO> depList = departmentService.listDepByDepIds(depIdList);
|
List<CameraRespDTO> 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;
|
}
|
}
|