| | |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | |
| | | private PlatformDeviceMapper platformDeviceMapper; |
| | | @Autowired |
| | | private CategoryMapper categoryMapper; |
| | | |
| | | @Autowired |
| | | private RedisTemplate<String,Object> stringRedisTemplate; |
| | | @Value("${debug_model}") |
| | | private Boolean isDebug; |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public List<PageRegionInfoResponse> getRegionTree(CarmeraListVO req){ |
| | | List<PageRegionInfoResponse> allList =null; |
| | | if(req.getRefresh() == 0){ |
| | | //默认取缓存数据 |
| | | allList = (List<PageRegionInfoResponse>) stringRedisTemplate.opsForValue().get(Constants.RedisKeys.HK_REGIONS_TREE); |
| | | } |
| | | if(allList!=null && allList.size()>0){ |
| | | return allList; |
| | | } |
| | | allList = getAllRegionList(); |
| | | if(allList==null && allList.size()==0){ |
| | | return allList; |
| | | } |
| | | if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){ |
| | | initReginCameralList(allList,req );//获取全部监控点数据 |
| | | }else if(Constants.equalsInteger(req.getWithCameras(),Constants.TWO)){ |
| | | initReginCameralList(allList,req );//获取全部监控点数据 |
| | | initReginFireDeviveList(allList, req);//获取全部监控点数据 |
| | | initReginSensorList(allList,req);//获取全部监控点数据 |
| | | } |
| | | List<PageRegionInfoResponse> data = new RegionTreeVO(allList).buildTree(); |
| | | //加入缓存 |
| | | stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_REGIONS_TREE,data); |
| | | return data; |
| | | } |
| | | |
| | | private List<PageRegionInfoResponse> getAllRegionList() { |
| | | List<PageRegionInfoResponse> allList = new ArrayList<>(); |
| | | boolean hasNext = true; |
| | | int curTotal = 0; |
| | |
| | | } |
| | | curPage++; |
| | | } |
| | | if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){ |
| | | initReginCameralList(allList,req.getName());//获取全部监控点数据 |
| | | } |
| | | List<PageRegionInfoResponse> data = new RegionTreeVO(allList).buildTree(); |
| | | return data; |
| | | return allList; |
| | | } |
| | | private void initReginCameralList(List<PageRegionInfoResponse> allList,String name) { |
| | | CarmeraListVO re = new CarmeraListVO(); |
| | | re.setName(name); |
| | | List<CarmeraListVO> carmeraListVOList = cameraList(re); |
| | | |
| | | private void initReginFireDeviveList(List<PageRegionInfoResponse> allList,CarmeraListVO req) { |
| | | String name =req.getName(); |
| | | List<CarmeraListVO> carmeraListVOList = fireDeviceList(); |
| | | if(carmeraListVOList!=null && carmeraListVOList.size()>0){ |
| | | for(PageRegionInfoResponse p : allList){ |
| | | for(CarmeraListVO c : carmeraListVOList){ |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | private void initReginSensorList(List<PageRegionInfoResponse> allList,CarmeraListVO req) { |
| | | String name =req.getName(); |
| | | List<CarmeraListVO> carmeraListVOList = sensorList(); |
| | | if(carmeraListVOList!=null && carmeraListVOList.size()>0){ |
| | | for(PageRegionInfoResponse p : allList){ |
| | | for(CarmeraListVO c : carmeraListVOList){ |
| | | if(StringUtils.equals(p.getIndexCode(),c.getReginCode()) |
| | | && (StringUtils.contains(c.getName(),name) ||StringUtils.isBlank(name))){ |
| | | if(p.getCarmeraList()==null){ |
| | | p.setCarmeraList(new ArrayList<>()); |
| | | } |
| | | p.getCarmeraList().add(c); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | @PostConstruct |
| | | public void cacheRegionAndDeviceData(){ |
| | | log.error("===============缓存海康平台区域设备信息======开始============"); |
| | | try { |
| | | CarmeraListVO param =new CarmeraListVO(); |
| | | param.setWithCameras(2); |
| | | List<PageRegionInfoResponse> resultTree = getRegionTree(param); |
| | | List<PageRegionInfoResponse> result = getAllRegionList(); |
| | | List<CarmeraListVO> carmeraListVOList = initAllReginCameralList(result); |
| | | List<CarmeraListVO> sensorList = sensorList(); |
| | | List<CarmeraListVO> fireDeviceList = fireDeviceList(); |
| | | stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_REGIONS_TREE,resultTree); |
| | | stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_REGIONS,result);//平铺区域列表 |
| | | stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_CAMERAS,carmeraListVOList);//所有监控点数据 |
| | | stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_FIRE_DEVICE,fireDeviceList);//所有消防设备数据 |
| | | stringRedisTemplate.opsForValue().set(Constants.RedisKeys.HK_SENSOR,sensorList);//所有传感器 |
| | | log.error("===============缓存海康平台区域设备信息======成功============"); |
| | | }catch (Exception e){ |
| | | log.error("===============缓存海康平台区域设备信息失败=================="); |
| | | } |
| | | } |
| | | private void initReginCameralList(List<PageRegionInfoResponse> allList,CarmeraListVO req) { |
| | | String name = req.getName(); |
| | | CarmeraListVO re = new CarmeraListVO(); |
| | | re.setName(name); |
| | | List<CarmeraListVO> carmeraListVOList = cameraList(re); |
| | | if(carmeraListVOList!=null && carmeraListVOList.size()>0){ |
| | | for(PageRegionInfoResponse p : allList){ |
| | | for(CarmeraListVO c : carmeraListVOList){ |
| | | if(StringUtils.equals(p.getIndexCode(),c.getReginCode()) |
| | | && (StringUtils.contains(c.getName(),name) ||StringUtils.isBlank(name))){ |
| | | if(p.getCarmeraList()==null){ |
| | | p.setCarmeraList(new ArrayList<>()); |
| | | } |
| | | c.setRegionName(p.getName()); |
| | | p.getCarmeraList().add(c); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | private List<CarmeraListVO> initAllReginCameralList(List<PageRegionInfoResponse> allList ) { |
| | | CarmeraListVO re = new CarmeraListVO(); |
| | | List<CarmeraListVO> carmeraListVOList = cameraList(re); |
| | | if(carmeraListVOList!=null && carmeraListVOList.size()>0){ |
| | | for(PageRegionInfoResponse p : allList){ |
| | | for(CarmeraListVO c : carmeraListVOList){ |
| | | if(StringUtils.equals(p.getIndexCode(),c.getReginCode())){ |
| | | c.setRegionName(p.getName()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return carmeraListVOList; |
| | | } |
| | | /** |
| | | * 获取区域树形结构数据 |
| | |
| | | curPage++; |
| | | } |
| | | if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){ |
| | | initReginCameralList(allList,req.getName());//获取全部监控点数据 |
| | | initReginCameralList(allList,req);//获取全部监控点数据 |
| | | } |
| | | return allList; |
| | | } |
| | |
| | | t.setStatusName(p.getStatusName()); |
| | | data.add(t); |
| | | } |
| | | } |
| | | return data; |
| | | } |
| | | public List<CarmeraListVO> sensorList(){ |
| | | List<SensorStatusListResponse> allList = new ArrayList<>(); |
| | | boolean hasNext = true; |
| | | int curTotal = 0; |
| | | int curPage = 1; |
| | | while (hasNext){ |
| | | //分页遍历循环查询所有门禁设备数据 |
| | | SensorStatusListRequest param = new SensorStatusListRequest(); |
| | | param.setRegionIndexCode("-1"); |
| | | param.setIncludeSubNode(1); |
| | | param.setPageSize(100); |
| | | param.setPageNo(curPage); |
| | | BaseResponse<BaseListPageResponse<SensorStatusListResponse>> response = HKService.sensorStatusSearch(param); |
| | | if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); |
| | | } |
| | | BaseListPageResponse<SensorStatusListResponse> r = response.getData(); |
| | | curTotal += 100; |
| | | if(curTotal >= r.getTotal()){ |
| | | hasNext = false; |
| | | } |
| | | if(r.getList() == null || r.getList().size()==0){ |
| | | hasNext =false; |
| | | }else{ |
| | | allList.addAll(r.getList()); |
| | | } |
| | | curPage++; |
| | | } |
| | | |
| | | List<CarmeraListVO> data = new ArrayList<>(); |
| | | for(SensorStatusListResponse p : allList){ |
| | | CarmeraListVO t = new CarmeraListVO(); |
| | | t.setIndexCode(p.getIndexCode()); |
| | | t.setReginCode(p.getRegionIndexCode()); |
| | | t.setName(p.getCn()); |
| | | t.setStatus(p.getUnitStatus()); |
| | | t.setRegionName(p.getRegionName()); |
| | | //0:未注册 1:正常 2: 修复中 3:异常状态 |
| | | if(t.getStatus()!=null && t.getStatus() == 0){ |
| | | t.setStatusName("未注册"); |
| | | } |
| | | if(t.getStatus()!=null && t.getStatus() == 1){ |
| | | t.setStatusName("正常"); |
| | | } |
| | | if(t.getStatus()!=null && t.getStatus() == 2){ |
| | | t.setStatusName("修复中"); |
| | | } |
| | | if(t.getStatus()!=null && t.getStatus() == 3){ |
| | | t.setStatusName("异常状态"); |
| | | } |
| | | data.add(t); |
| | | } |
| | | return data; |
| | | } |
| | | public List<CarmeraListVO> fireDeviceList(){ |
| | | List<FireDeviceStatusListResponse> allList = new ArrayList<>(); |
| | | boolean hasNext = true; |
| | | int curTotal = 0; |
| | | int curPage = 1; |
| | | while (hasNext){ |
| | | //分页遍历循环查询所有门禁设备数据 |
| | | FireDeviceStatuslListRequest param = new FireDeviceStatuslListRequest(); |
| | | param.setRegionIndexCode("-1"); |
| | | param.setPageSize(100); |
| | | param.setIncludeSubNode(1); |
| | | param.setPageNo(curPage); |
| | | BaseResponse<BaseListPageResponse<FireDeviceStatusListResponse>> response = HKService.fireDeviceStatusSearch(param); |
| | | if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); |
| | | } |
| | | BaseListPageResponse<FireDeviceStatusListResponse> r = response.getData(); |
| | | curTotal += 100; |
| | | if(curTotal >= r.getTotal()){ |
| | | hasNext = false; |
| | | } |
| | | if(r.getList() == null || r.getList().size()==0){ |
| | | hasNext =false; |
| | | }else{ |
| | | allList.addAll(r.getList()); |
| | | } |
| | | curPage++; |
| | | } |
| | | |
| | | List<CarmeraListVO> data = new ArrayList<>(); |
| | | for(FireDeviceStatusListResponse p : allList){ |
| | | CarmeraListVO t = new CarmeraListVO(); |
| | | t.setIndexCode(p.getIndexCode()); |
| | | t.setReginCode(p.getRegionIndexCode()); |
| | | t.setName(p.getCn()); |
| | | t.setStatus(p.getUnitStatus()); |
| | | t.setRegionName(p.getRegionName()); |
| | | //0:未注册 1:正常 2: 修复中 3:异常状态 |
| | | if(t.getStatus()!=null && t.getStatus() == 0){ |
| | | t.setStatusName("未注册"); |
| | | } |
| | | if(t.getStatus()!=null && t.getStatus() == 1){ |
| | | t.setStatusName("正常"); |
| | | } |
| | | if(t.getStatus()!=null && t.getStatus() == 2){ |
| | | t.setStatusName("修复中"); |
| | | } |
| | | if(t.getStatus()!=null && t.getStatus() == 3){ |
| | | t.setStatusName("异常状态"); |
| | | } |
| | | data.add(t); |
| | | } |
| | | return data; |
| | | } |
| | |
| | | request.setFetchImg(true); |
| | | RuleEventFiledOptionsRequest file = new RuleEventFiledOptionsRequest(); |
| | | file.setFieldName("event_type"); |
| | | file.setFieldValue("131588,131593");//安防告警和人员告警 |
| | | //安防事件划分方式: |
| | | //重点区域:重点人员-1644175361、区域入侵-1644175361、陌生人-1644171265、车辆违停-1644171265 |
| | | //危险行为:人员倒地-1644171265、未带安全帽-422000002、抽烟-422000000、打电话-422000001、睡岗-422400001、离岗-422400000 |
| | | file.setFieldValue("131588,131593,1644171265,422000002,422000000,422000001,422400001,422400000,1644175361,1644175361,1644171265,1644171265");//安防告警和人员告警 |
| | | file.setType("in"); |
| | | if(type == 1){ |
| | | file.setFieldValue("131588");//安防告警 区域入侵 |
| | | file.setFieldValue("131588,1644175361,1644175361,1644171265,1644171265");//安防告警 区域入侵 |
| | | }else if(type == 2){ |
| | | file.setFieldValue("131593");//人员告警 危险行为 |
| | | file.setFieldValue("131593,1644171265,422000002,422000000,422000001,422400001,422400000");//人员告警 危险行为 |
| | | } |
| | | request.getFiledOptions().add(file); |
| | | |
| | |
| | | request.getFiledOptions().add(fileGte); |
| | | |
| | | RuleEventFiledOptionsRequest fileStatus = new RuleEventFiledOptionsRequest(); |
| | | fileStatus.setFieldName("happen_time"); |
| | | fileStatus.setFieldName("handle_status"); |
| | | fileStatus.setFieldValue("99"); |
| | | fileStatus.setType("neq"); |
| | | request.getFiledOptions().add(fileStatus); |
| | |
| | | List<Long> startTimeList = platformLogList.stream().filter(i->Objects.nonNull(i.getParam1())) |
| | | .filter(i->Objects.nonNull(i.getParam1())&&i.getParam1().indexOf(today)>=0) |
| | | .map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam1()).getTime()).collect(Collectors.toList()); |
| | | Long startTime = Collections.min(startTimeList); |
| | | Long startTime = null ; |
| | | if(CollectionUtils.isNotEmpty(startTimeList)){ |
| | | startTime = Collections.min(startTimeList); |
| | | } |
| | | //获取结束时间 |
| | | List<Long> endTimeList = platformLogList.stream() |
| | | .filter(i->Objects.nonNull(i.getParam2())&&i.getParam2().indexOf(today)>=0) |
| | | .map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam2()).getTime()).collect(Collectors.toList()); |
| | | Long endTime = Collections.max(endTimeList); |
| | | Long endTime = null ; |
| | | if(CollectionUtils.isNotEmpty(endTimeList)){ |
| | | endTime = Collections.max(endTimeList); |
| | | } |
| | | if(Objects.isNull(startTime) |
| | | || Objects.isNull(endTime) || (startTime>=endTime)){ |
| | | return BigDecimal.ZERO; |
| | |
| | | .eq(HiddenDanger::getIsdeleted,Constants.ZERO ) |
| | | // .in(HiddenDanger::getStatus,Constants.ONE,Constants.TWO ) |
| | | .eq(HiddenDanger::getStatus,Constants.ZERO ) |
| | | .apply(" DATE_FORMAT(check_date, '%Y-%m') = DATE_FORMAT(now(), '%Y-%m') " ) ); |
| | | .apply(" DATE_FORMAT(create_date, '%Y-%m') = DATE_FORMAT(now(), '%Y-%m') " ) ); |
| | | data.setDangerDealedNum(totalNum !=null?totalNum.intValue():0);//今日处理隐患数量 |
| | | return data; |
| | | } |
| | |
| | | data.setInParkCarTotal( |
| | | (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)).count() |
| | | ); |
| | | //2025年8月4日09:24:23 更换数据源 不从海康取 |
| | | data.setFreeParkingLot(data.getParkingLotTotal()<data.getInParkCarTotal()?Constants.ZERO:data.getParkingLotTotal() - data.getInParkCarTotal()); |
| | | //当前在园货车司机总数 |
| | | data.setInParkCarUserTotal( |
| | | (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.FIVE)).count() |