doum
15 小时以前 f09e6937bf52bdc3d87d29d1d5b3180735e39664
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -45,8 +45,10 @@
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;
@@ -93,7 +95,11 @@
    private TmsService tmsService;
    @Autowired
    private PlatformDeviceMapper platformDeviceMapper;
    @Autowired
    private CategoryMapper categoryMapper;
    @Autowired
    private RedisTemplate<String,Object> stringRedisTemplate;
    @Value("${debug_model}")
    private Boolean isDebug;
    /**
@@ -215,6 +221,32 @@
     */
    @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;
@@ -241,13 +273,64 @@
            }
            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) {
    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){
                    if(StringUtils.equals(p.getIndexCode(),c.getReginCode()) ){
                        if(p.getCarmeraList()==null){
                            p.setDeviceList(new ArrayList<>());
                        }
                        p.getDeviceList().add(c);
                    }
                }
            }
        }
    }
    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())){
                        if(p.getSensorList()==null){
                            p.setSensorList(new ArrayList<>());
                        }
                        p.getSensorList().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);
@@ -259,11 +342,26 @@
                        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;
    }
    /**
     * 获取区域树形结构数据
@@ -298,7 +396,7 @@
            curPage++;
        }
        if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){
            initReginCameralList(allList,req.getName());//获取全部监控点数据
            initReginCameralList(allList,req);//获取全部监控点数据
        }
        return  allList;
    }
@@ -342,6 +440,114 @@
                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;
    }
@@ -489,6 +695,7 @@
        }*/
        return list;
    }
    @Override
    public  WaningEventDataVO warningEventData(Integer type){
        WaningEventDataVO lastResult = new WaningEventDataVO();
@@ -498,16 +705,39 @@
        request.setPageSize(1000);
        request.setFiledOptions(new ArrayList<>());
        request.setSorts(new ArrayList<>());
        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);
        RuleEventFiledOptionsRequest fileLte = new RuleEventFiledOptionsRequest();
        fileLte.setFieldName("happen_time");
        fileLte.setFieldValue(DateUtil.formatDate(Utils.Date.getEnd(new Date()),"yyyy-MM-dd HH:mm:ss"));
        fileLte.setType("lte");
        request.getFiledOptions().add(fileLte);
        RuleEventFiledOptionsRequest fileGte = new RuleEventFiledOptionsRequest();
        fileGte.setFieldName("happen_time");
        fileGte.setFieldValue(DateUtil.formatDate(Utils.Date.getStart(new Date()),"yyyy-MM-dd HH:mm:ss"));
        fileGte.setType("gte");
        request.getFiledOptions().add(fileGte);
        RuleEventFiledOptionsRequest fileStatus = new RuleEventFiledOptionsRequest();
        fileStatus.setFieldName("handle_status");
        fileStatus.setFieldValue("99");
        fileStatus.setType("neq");
        request.getFiledOptions().add(fileStatus);
        SortRequest sort = new SortRequest();
        sort.setSortField("happen_time");
        sort.setSortType("desc");
@@ -523,6 +753,9 @@
                    try {
                        if(DateUtil.getISO8601DateByStr(r.getHappen_time()).getTime() < Utils.Date.getStart(new Date()).getTime()){
                            continue;
                        }
                        if(StringUtils.equals(r.getStatus(),"99")){
                           continue;
                        }
                    }catch (Exception e){
                    }
@@ -619,6 +852,9 @@
            BaseResponse<BaseListPageResponse<FindHomeAlarmInfoPageResponse>> response = HKService.findHomeAlarmInfoPage(param);
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
            }
            if(Objects.nonNull(response.getData().getList())){
                return data;
            }
            for(FindHomeAlarmInfoPageResponse r : response.getData().getList()){
                AlarmEventDataVO t = new AlarmEventDataVO();
@@ -1000,13 +1236,21 @@
    /**
     * 【消防管控】看板-告警信息集合
     *
     * @param type 0/null  = 当天;1=当月;2=当年
     * @return
     *
     */
    @Override
    public   AlarmDataVO alarmDataSumByCate(){
        AlarmDataVO alarmDataVO = getAlertDataByStartEndTime(DateUtil.getPlusTime2(Utils.Date.getStart(new Date()))
    public   AlarmDataVO alarmDataSumByCate(Integer type){
        Date startDate = Utils.Date.getStart(new Date());
        if(Objects.nonNull(type)){
            if(Constants.equalsInteger(type,Constants.TWO)){
                startDate = Utils.Date.getStart(DateUtil.getFirstThisYearDate());
            }else if(Constants.equalsInteger(type,Constants.ONE)){
                startDate = Utils.Date.getStart(DateUtil.getFirstThisMonthDate());
            }
        }
        AlarmDataVO alarmDataVO = getAlertDataByStartEndTime(DateUtil.getPlusTime2(startDate)
                ,(DateUtil.getPlusTime2(new Date())));
        return  alarmDataVO;
    }
@@ -1321,12 +1565,18 @@
        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;
@@ -1540,12 +1790,13 @@
        data.setDeviceTypeList(list);
        Long totalNum =hiddenDangerMapper.selectCount(new QueryWrapper<HiddenDanger>().lambda()
                .eq(HiddenDanger::getIsdeleted,Constants.ZERO )
                .apply("to_days(create_date) = to_days(now())" ) );
                .apply(" DATE_FORMAT(create_date, '%Y-%m')  = DATE_FORMAT(now(), '%Y-%m')  " ) );
        data.setDangerTotalNum(totalNum !=null?totalNum.intValue():0);//今日隐患数量
        totalNum =hiddenDangerMapper.selectCount(new QueryWrapper<HiddenDanger>().lambda()
                .eq(HiddenDanger::getIsdeleted,Constants.ZERO )
                .in(HiddenDanger::getStatus,Constants.ONE,Constants.TWO )
                .apply("to_days(check_date) = to_days(now())" ) );
//                .in(HiddenDanger::getStatus,Constants.ONE,Constants.TWO )
                .eq(HiddenDanger::getStatus,Constants.ZERO )
                .apply(" DATE_FORMAT(create_date, '%Y-%m')  = DATE_FORMAT(now(), '%Y-%m')  " ) );
        data.setDangerDealedNum(totalNum !=null?totalNum.intValue():0);//今日处理隐患数量
        return  data;
    }
@@ -2052,7 +2303,9 @@
        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()
        );
@@ -2087,8 +2340,44 @@
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.wxysCar)).count()
        );
        data.setVideoPluginUrl(getVideoUrl());
        data.setOutHyLotTotal(Integer.valueOf(systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.OUT_HY_LOT_TOTAL).getCode()));
        data.setInParkCarList(this.getInParkCars(data));
        return data;
    }
    public List<Map<String,Object>> getInParkCars(SecurityBoardVO securityBoardVO){
        List<Map<String,Object>> mapList = categoryMapper.selectJoinMaps(new MPJLambdaWrapper<Category>()
                .select(Category::getName)
                .select(" ( select count(1) from retention r where r.isdeleted = 0 and  r.CATEGORY_PARENT_ID = t.id and r.TYPE = 3   ) as total ")
                .eq(Category::getType,Constants.ONE)
                .eq(Category::getIsdeleted,Constants.ZERO)
                .isNull(Category::getParentId)
                .groupBy(Category::getName)
        );
        if(CollectionUtils.isEmpty(mapList)){
            mapList = new ArrayList<>();
        }
        Map<String,Object> map = new HashMap<>();
        map.put("name","未知车辆");
        map.put("total", retentionMapper.selectCount(
                new MPJLambdaWrapper<Retention>()
                        .eq(Retention::getIsdeleted,Constants.ZERO)
                        .isNull(Retention::getCategoryId)
                        .eq(Retention::getCarType,Constants.SIX)
                    )
        );
        mapList.add(map);
        return mapList;
    }
    private String getVideoUrl() {
        return  systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()+"plugin/VideoWebPlugin.exe";
@@ -3102,7 +3391,6 @@
            }
        }
        return r ;
    }