package com.fdkankan.fusion.service.impl; import java.util.*; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONArray; 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.fdkankan.fusion.common.PageInfo; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.enums.IdPreEnum; import com.fdkankan.fusion.common.util.IdUtils; import com.fdkankan.fusion.entity.TmCamera; import com.fdkankan.fusion.entity.TmDepartment; import com.fdkankan.fusion.entity.TmUser; import com.fdkankan.fusion.exception.BusinessException; import com.fdkankan.fusion.httpClient.FdService; import com.fdkankan.fusion.httpClient.client.FdKKClient; import com.fdkankan.fusion.httpClient.request.FdkkCameraParam; import com.fdkankan.fusion.httpClient.response.FdkkResponse; import com.fdkankan.fusion.mapper.ITmCameraMapper; import com.fdkankan.fusion.response.BindCameraDto; import com.fdkankan.fusion.response.CameraVo; import com.fdkankan.fusion.service.ITmCameraService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.fusion.service.ITmDepartmentService; import com.fdkankan.fusion.service.ITmUserService; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.stream.Collectors; /** *

* 相机关联关系表 服务实现类 *

* * @author * @since 2023-07-28 */ @Service public class TmCameraServiceImpl extends ServiceImpl implements ITmCameraService { @Autowired FdService fdService; @Autowired ITmDepartmentService tmDepartmentService; @Autowired ITmUserService tmUserService; @Override public List getByUserId(String userId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TmCamera::getUserId,userId); return list(wrapper); } @Override public TmCamera getBySnCode(String snCode) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TmCamera::getCameraSn,snCode); return getOne(wrapper); } @Override public void bind(BindCameraDto param) { if(StringUtils.isBlank(param.getCameraSn()) || StringUtils.isBlank(param.getDeptId()) || StringUtils.isBlank(param.getUserId()) || param.getCameraType() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } TmUser tmUser = tmUserService.getById(param.getUserId()); if(tmUser == null || tmUser.getStatus() == 0){ throw new BusinessException(ResultCode.USER_NOT_EXIST); } TmDepartment tmDepartment = tmDepartmentService.getById(param.getDeptId()); if(tmDepartment == null){ throw new BusinessException(ResultCode.DEPT_NOT_EXITS); } TmCamera tmCamera = this.getBySnCode(param.getCameraSn()); if(tmCamera != null){ throw new BusinessException(ResultCode.CAMERA_EXITS); } FdkkResponse fdkkResponse2 = fdService.fdkKBind(param.getCameraSn(),tmUser.getUserName(),param.getCameraType()); if(fdkkResponse2.getCode() != 0){ throw new BusinessException(fdkkResponse2.getCode(),fdkkResponse2.getMsg()); } FdkkResponse fdkkResponse = fdService.getCameraDetail(param.getCameraSn()); if(fdkkResponse.getCode() !=0 || fdkkResponse.getData() == null){ throw new BusinessException(ResultCode.CAMERA_NOT_EXITS); } tmCamera = new TmCamera(); tmCamera.setId(IdUtils.genId(IdPreEnum.CAMERA_PRE.getPre())); tmCamera.setCameraSn(param.getCameraSn()); tmCamera.setDeptId(param.getDeptId()); tmCamera.setUserId(param.getUserId()); tmCamera.setFdCameraId(fdkkResponse.getData().getId()); this.save(tmCamera); } @Override public void unBind(BindCameraDto param) { if(StringUtils.isBlank(param.getCameraSn())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } TmCamera tmCamera = this.getBySnCode(param.getCameraSn()); if(tmCamera == null){ throw new BusinessException(ResultCode.CAMERA_NOT_EXITS); } this.unBind(Arrays.asList(tmCamera)); } @Override public void unBind(List cameras) { if(CollectionUtil.isNotEmpty(cameras)){ //四维解绑相机 List tmCameraIds = cameras.stream().map(TmCamera::getId).collect(Collectors.toList()); FdkkResponse fdkkResponse = fdService.fdkkUnbind(cameras); if(fdkkResponse.getCode() == 0 ){ this.removeByIds(tmCameraIds); }else { throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg()); } } } @Override public void edit(BindCameraDto param) { if(StringUtils.isBlank(param.getCameraSn())|| StringUtils.isBlank(param.getUserId()) || param.getCameraType() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } TmUser tmUser = tmUserService.getById(param.getUserId()); if(tmUser == null || tmUser.getStatus() == 0){ throw new BusinessException(ResultCode.USER_NOT_EXIST); } TmCamera tmCamera = this.getBySnCode(param.getCameraSn()); if(tmCamera == null){ throw new BusinessException(ResultCode.CAMERA_NOT_EXITS); } FdkkResponse fdkkResponse = fdService.fdkkUnbind(Arrays.asList(tmCamera)); if(fdkkResponse.getCode() !=0){ throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg()); } fdkkResponse = fdService.fdkKBind(param.getCameraSn(), tmUser.getUserName(),param.getCameraType()); if(fdkkResponse.getCode() !=0){ throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg()); } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(TmCamera::getCameraSn,param.getCameraSn()); wrapper.set(TmCamera::getUserId,param.getUserId()); this.update(wrapper); } @Override public Object getDetail(String snCode) { if(StringUtils.isBlank(snCode)){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } TmCamera tmCamera = this.getBySnCode(snCode); if(tmCamera == null){ throw new BusinessException(ResultCode.CAMERA_NOT_EXITS); } return fdService.getCameraDetail(snCode); } @Override public Object pageList(Long pageNum, Long pageSize, String snCode, String deptId, Integer type,String searchKey) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(StringUtils.isNotBlank(searchKey)){ List tmUsers = tmUserService.getLikeNickName(searchKey); if(tmUsers.size() <=0){ return PageInfo.PageInfo(new Page<>(pageNum,pageSize)); } List userIds = tmUsers.stream().map(TmUser::getId).collect(Collectors.toList()); wrapper.in(TmCamera::getUserId,userIds); } if (StringUtils.isNotBlank(snCode)) { wrapper.like(TmCamera::getCameraSn,snCode); } List deptIds = tmDepartmentService.getDeptIds(); if(StringUtils.isNotBlank(deptId)){ deptIds = tmDepartmentService.getSonByDeptIdAndDeptIds(deptIds,deptId); } wrapper.in(TmCamera::getDeptId,deptIds); wrapper.orderByDesc(TmCamera::getCreateTime); Page page = this.page(new Page<>(pageNum, pageSize), wrapper); if(page.getRecords().size()<=0){ return PageInfo.PageInfo(page); } List snCodes = page.getRecords().stream().map(TmCamera::getCameraSn).collect(Collectors.toList()); FdkkResponse> fdkkResponse = fdService.getCameraDetails(snCodes); HashMap deptIdMap = new HashMap<>(); HashMap deptNameMap = new HashMap<>(); for (TmCamera record : page.getRecords()) { deptIdMap.put(record.getCameraSn().toUpperCase(),record.getDeptId()); } Collection values = deptIdMap.values(); if(values.size() >0){ List departments = tmDepartmentService.listByIds(values); for (TmDepartment department : departments) { deptNameMap.put(department.getId(),department.getName()); } } List list = fdkkResponse.getData(); HashMap map = tmUserService.getByCamera(page.getRecords()); for (CameraVo cameraVo : list) { String deptIdO = deptIdMap.get(cameraVo.getSnCode().toUpperCase()); cameraVo.setDeptId(deptIdO); cameraVo.setDeptName(deptNameMap.get(deptIdO)); TmUser tmUser = map.get(cameraVo.getSnCode().toUpperCase()); if(tmUser != null){ cameraVo.setNickName(tmUser.getNickName()); cameraVo.setUserId(tmUser.getId()); } } Page objectPage = new Page<>(pageNum, pageSize); objectPage.setRecords(list); objectPage.setTotal(page.getTotal()); return PageInfo.PageInfo(objectPage); } @Override public List getByDeptIds() { List deptIds = tmDepartmentService.getDeptIds(); return getByDeptIds(deptIds); } @Override public List getByDeptIds(List deptIds) { if(CollectionUtil.isEmpty(deptIds)){ return new ArrayList<>(); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(TmCamera::getDeptId,deptIds); return this.list(wrapper); } @Override public HashMap getMapBySnCodes(Set snCodes) { HashMap map = new HashMap<>(); if(snCodes.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(TmCamera::getCameraSn,snCodes); List list = this.list(wrapper); Set deptIds = list.stream().map(TmCamera::getDeptId).collect(Collectors.toSet()); HashMap mapDept = tmDepartmentService.getMapByDeptIds(deptIds); list.forEach(entity -> map.put(entity.getCameraSn().toUpperCase(),mapDept.get(entity.getDeptId()))); } return map; } }