rk
2025-09-29 218e84d2264e413f31a2f3957f05bb7b8ad42d5d
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -93,7 +93,8 @@
    private TmsService tmsService;
    @Autowired
    private PlatformDeviceMapper platformDeviceMapper;
    @Autowired
    private CategoryMapper categoryMapper;
    @Value("${debug_model}")
    private Boolean isDebug;
    /**
@@ -489,6 +490,7 @@
        }*/
        return list;
    }
    @Override
    public  WaningEventDataVO warningEventData(Integer type){
        WaningEventDataVO lastResult = new WaningEventDataVO();
@@ -498,16 +500,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 +548,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){
                    }
@@ -620,6 +648,9 @@
            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();
                BeanUtils.copyProperties(r,t);
@@ -647,6 +678,8 @@
    }
    /**
     * 【消防管控】看板-实时监测数据
     * 液压固定值:254001
     * 水压固定值:253958
     * @return
     *
     */
@@ -656,6 +689,7 @@
        MinitorDataSearchRequest param = new MinitorDataSearchRequest();
        param.setResourceTypeCodes(new String[]{});
        param.setRegionIndexCode("root000000");
        //60-液位 61-水压
        param.setResourceTypeCodes("60,61".split(","));
        param.setIncludeDown("1");
        param.setUserId("admin");
@@ -664,6 +698,8 @@
        BaseResponse<BaseListPageResponse<MonitorDataSearchResponse>> response = HKService.minitorDataSearch(param);
        String pressure = systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_PRESSURE_LEVEL).getCode();
        String liquid = systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_LIQUID_LEVEL).getCode();
        String pressureUnit = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.PRESSURE_LEVEL_UNIT).getCode();
        String liquidUnit = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LIQUID_LEVEL_UNIT).getCode();
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)
                && response.getData()!=null ) {
            List<MonitorDataSearchResponse> r = response.getData().getList();
@@ -671,11 +707,15 @@
                for(MonitorDataSearchResponse model : r){
                    MonitorDataVO m = new MonitorDataVO();
                    m.setName(model.getName());
                    m.setLevel(Constants.equalsInteger(model.getType(),60)?liquid:pressure);
                    m.setType(model.getType());
//                    m.setLevel(Constants.equalsInteger(model.getType(),60)?liquid:pressure);
                    m.setLevel(getLevelDataByDeviceName(m,model.getName(),Constants.equalsInteger(model.getType(),60)?liquidUnit:pressureUnit));
                    m.setDataList(new ArrayList<>());
                    if(model.getValues()!=null){
                        List<MonitorDataInfoVO> dataList = new ArrayList<>();
                        for(MonitorDataValResponse v : model.getValues()){
                            //液压固定值:254001
                            //水压固定值:253958
                            if(Constants.equalsInteger(model.getType(),60)){
                                if(v.getMonitorTypeCode().equals("254001")){
                                    MonitorDataInfoVO vm = new MonitorDataInfoVO();
@@ -683,7 +723,6 @@
                                    vm.setCateName(v.getMonitorSpecificName());
                                    vm.setCateCode(v.getMonitorTypeKey());
                                    vm.setTypeCode(v.getMonitorTypeCode());
                                    vm.setTypeName(v.getMonitorTypeName());
                                    dataList.add(vm);
                                }
                            }else{
@@ -706,6 +745,46 @@
            }
        }
        return  list;
    }
    private String getLevelDataByDeviceName(MonitorDataVO m,String name,String unit) {
        /**
         *   {
         *     "name":"液",
         *     "regionIndexCodes": [
         *         "root000000"
         *     ],
         *     "isSubRegion": true,
         *     "resourceType": "fireSensor",
         *     "pageNo": 1,
         *     "pageSize": 20,
         *     "orderBy": "name",
         *     "orderType": "desc"
         *     }
         */
        String r = "";
        ResourcesByParamsRequest param = new ResourcesByParamsRequest();
        param.setName(name);
        param.setIsSubRegion(Boolean.TRUE);
        param.setRegionIndexCodes(new String[]{"root000000"});
        param.setResourceType("fireSensor");
        param.setOrderType("desc");
        param.setOrderBy("name");
        param.setPageNo(1);
        param.setPageSize(20);
        BaseResponse<BaseListPageResponse<ResourcesByParamsResponse>> response = HKService.resourcesByParams(param);
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)
                && response.getData()!=null ) {
            String min  = response.getData().getList().get(0).getFireproChannelMinValue();
            String max  = response.getData().getList().get(0).getFireproChannelMaxvalue();
            m.setMax(max);
            m.setMin(min);
            r  =StringUtils.defaultString(min,"-")+"~"+StringUtils.defaultString(max,"-") +unit;
        }
        return  r;
    }
@@ -952,13 +1031,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;
    }
@@ -976,19 +1063,22 @@
        Date lastMonth =  DateUtil.addMonthToDate(month,-1);//上月
        Date year = Utils.Date.getStart(new Date());//今年
        Date lastYear = DateUtil.addYearToDate(year,-1);//去年
        log.error("1、=====================>"+DateUtil.getCurrDateTime());
        List<PlatformJob>  monthNum = platformJobMapper.selectJoinList(PlatformJob.class,
                    new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .select(PlatformJob::getType,PlatformJob::getType)
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .select(PlatformJob::getStatus,PlatformJob::getStatus)
                            .selectAs(PlatformJob::getId,PlatformJob::getId)
                            .selectAs(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                            .selectAs(PlatformJob::getDoneDate,PlatformJob::getDoneDate)
                            .select(PlatformJob::getStatus,PlatformJob::getStatus)
                            .select(PlatformJob::getType,PlatformJob::getType)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
//                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),
                                Constants.PlatformJobStatus.LEAVED.getKey(),
                                Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                        .apply("year(done_date) = year('"+DateUtil.getPlusTime2(month)+"') and month(done_date) = month('"+DateUtil.getPlusTime2(month)+"') "));
        log.error("2、=====================>"+DateUtil.getCurrDateTime());
        List<PlatformJob>  yearNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
@@ -1000,6 +1090,8 @@
                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                        .apply("year(done_date) = year('"+DateUtil.getPlusTime2(year)+"')   and done_date<=  now()  "));
        log.error("3、=====================>"+DateUtil.getCurrDateTime());
        List<PlatformJob>  monthLastNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
@@ -1012,7 +1104,8 @@
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                        .apply("year(done_date) = year('"+DateUtil.getPlusTime2(lastMonth)+"') and month(done_date) = month('"+DateUtil.getPlusTime2(lastMonth)+"') and  done_date<= '"
                                +DateUtil.getPlusTime2(lastMonth)+"'"));
        log.error("4、=====================>"+DateUtil.getCurrDateTime());
        List<PlatformJob> yearLastNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
@@ -1028,9 +1121,10 @@
        data.setMonthLastOutTotal(getSumTotalByList(monthLastNum,null,null) );//上月出库量
        data.setYearOutTotal(getSumTotalByList(yearNum,null,null)  );//本年出库量
        data.setYearLastOutTotal(getSumTotalByList(yearLastNum,null,null) );//去年出库量
        data.setMonthOutTimes(monthNum!=null?monthNum.size():0);
        data.setMonthOutTimes(monthNum!=null?monthNum.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)||Constants.equalsInteger(i.getType(),Constants.THREE)).collect(Collectors.toList()).size():0);
        data.setYearOutTimes(yearNum!=null?yearNum.size():0);
        log.error("5、=====================>"+DateUtil.getCurrDateTime());
        //==========今天之前未完成出入库任务
        List<PlatformJob> beforeJobNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
@@ -1046,6 +1140,7 @@
                        .apply("   to_days(create_date) < to_days(now()) ")
        );
        log.error("6、=====================>"+DateUtil.getCurrDateTime());
        //==========今天出入库完成量
        List<PlatformJob> currentDoneNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
@@ -1058,6 +1153,7 @@
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
                        .apply(" to_days(done_date) = to_days(now())"));
        log.error("7、=====================>"+DateUtil.getCurrDateTime());
        //==========今天下发出入库任务 未完成的----
        List<PlatformJob> currentNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
@@ -1070,18 +1166,39 @@
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
                        .apply(" to_days(create_date) = to_days(now()) and done_date is null   "));
        log.error("8、=====================>"+DateUtil.getCurrDateTime());
        BigDecimal beforeOutNum = (getSumTotalByList(beforeJobNum,0,null));//今天之前未完成出库任务
        log.error("9、=====================>"+DateUtil.getCurrDateTime());
        BigDecimal currentOutNum = (getSumTotalByList(currentNum,0,null));//今天下发出库任务
        log.error("10、=====================>"+DateUtil.getCurrDateTime());
        BigDecimal beforeInNum = (getSumTotalByList(beforeJobNum,1,null));//今天之前未完成入库任务
        log.error("11、=====================>"+DateUtil.getCurrDateTime());
        BigDecimal currentInNum = (getSumTotalByList(currentNum,1,null));//今天下发入库任务
        log.error("12、=====================>"+DateUtil.getCurrDateTime());
        data.setCurrentInDoneNum(getSumTotalByList(currentDoneNum,1,1));//今日完成量
        log.error("13、=====================>"+DateUtil.getCurrDateTime());
        data.setCurrentOutDoneNum(getSumTotalByList(currentDoneNum,0,1));//今日完成量
        log.error("14、=====================>"+DateUtil.getCurrDateTime());
        data.setCurrentInNum(beforeInNum.add(data.getCurrentInDoneNum()).add(currentInNum));//当前入库总任务成量
        log.error("15、=====================>"+DateUtil.getCurrDateTime());
        data.setCurrentOutNum(beforeOutNum.add(data.getCurrentOutDoneNum()).add(currentOutNum));//当前出库总任务成量
        log.error("16、=====================>"+DateUtil.getCurrDateTime());
        data.setTodayOutRate(getDayTotalRata(data.getCurrentOutDoneNum(),DateUtil.getToday()));//当日出库效率
        log.error("17、=====================>"+DateUtil.getCurrDateTime());
        data.setTodayInRate(getDayTotalRata(data.getCurrentInDoneNum(),DateUtil.getToday()));//当日入库效率
        data.setMonthOutRate(getMonthRata(monthNum,Constants.ZERO));//本月出库效率
        data.setMonthInRate(getMonthRata(monthNum,Constants.ONE));//本月出库效率
        log.error("18、=====================>"+DateUtil.getCurrDateTime());
        //查询本月全部日志
        List<PlatformLog> monthLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>().lambda()
                .eq(PlatformLog::getIsdeleted,Constants.ZERO)
                .and(i->i.isNotNull(PlatformLog::getParam1).or().isNotNull(PlatformLog::getParam2))
                .apply("year(CREATE_DATE) = year('"+DateUtil.getPlusTime2(month)+"') and month(CREATE_DATE) = month('"+DateUtil.getPlusTime2(month)+"') ")
        );
        data.setMonthOutRate(getMonthRata(monthLogList,monthNum,Constants.ZERO));//本月出库效率
        log.error("19、=====================>"+DateUtil.getCurrDateTime());
        data.setMonthInRate(getMonthRata(monthLogList,monthNum,Constants.ONE));//本月入库效率
        log.error("20、=====================>"+DateUtil.getCurrDateTime());
        //------------今日出入库效率---------------- 
//        BigDecimal outHours = getTotalDoneTimes(currentDoneNum,0);//
//        BigDecimal inHours = getTotalDoneTimes(currentDoneNum,1);//
@@ -1153,7 +1270,7 @@
    }
    private BigDecimal getMonthRata(List<PlatformJob> list, Integer type) {
    private BigDecimal getMonthRata(List<PlatformLog> monthLogList,List<PlatformJob> list, Integer type) {
        BigDecimal r = new BigDecimal(0);
        if(list==null || list.size() == 0){
            return r;
@@ -1177,16 +1294,37 @@
        }
        if(CollectionUtils.isNotEmpty(jobList)){
            //获取任务数据
            List<String> jobDataList = list.stream().filter(i->Objects.nonNull(i.getDoneDate())).map(i->DateUtil.formatDate(i.getDoneDate(),"yyyy-MM-dd")).collect(Collectors.toList());
            for (String jobDate:jobDataList) {
                //过滤当天的数据
                List<PlatformJob> platformJobList = list.stream().
                        filter(i->jobDate.equals(DateUtil.formatDate(i.getDoneDate(),"yyyy-MM-dd"))).collect(Collectors.toList());
                if(CollectionUtils.isNotEmpty(platformJobList)){
                    //获取今天的
                    r = r.add(this.getDayTotalRata(getSumTotalByList(platformJobList,type,null),jobDate));
            List<String> jobDataList = jobList.stream().filter(i->Objects.nonNull(i.getDoneDate()))
                    .map(i->DateUtil.formatDate(i.getDoneDate(),"yyyy-MM-dd")).collect(Collectors.toList());
            if(CollectionUtils.isNotEmpty(jobDataList)){
                for (String jobDate:jobDataList) {
                    //过滤当天的数据
                    List<PlatformJob> platformJobList = list.stream().
                            filter(i->jobDate.equals(DateUtil.formatDate(i.getDoneDate(),"yyyy-MM-dd"))).collect(Collectors.toList());
                    if(CollectionUtils.isNotEmpty(platformJobList)){
                        //获取今天的
                        r = r.add(this.getDayTotalForMonthRata(monthLogList,getSumTotalByList(platformJobList,type,null),jobDate));
                    }
                }
                r = r.divide(new BigDecimal(Integer.toString(jobList.size())),2,BigDecimal.ROUND_HALF_UP);
            }
        }
        return r;
    }
    private BigDecimal getDayTotalForMonthRata(List<PlatformLog> allList ,BigDecimal totalAmount,String today) {
        BigDecimal r = new BigDecimal(0);
        //查询今日最早/最晚的作业数据
        List<PlatformLog> platformLogList = allList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM-dd").equals(today)).collect(Collectors.toList());
//                platformLogMapper.selectList(new QueryWrapper<PlatformLog>()
//                .lambda()
//                .apply(" (  DATE_FORMAT( param1 ,'%Y-%m-%d' ) =  '"+today+"' or DATE_FORMAT( param2 ,'%Y-%m-%d' )  =  '"+today+"' ) ")
//        );
        if(totalAmount.compareTo(BigDecimal.ZERO)==0||CollectionUtils.isEmpty(platformLogList)){
            return BigDecimal.ZERO;
        }
        if(platformLogList!=null && platformLogList.size()>0){
            return this.getWorkTime(totalAmount,platformLogList,today);
        }
        return r;
    }
@@ -1197,13 +1335,13 @@
        //查询今日最早/最晚的作业数据
        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>()
                .lambda()
                .apply(" ( to_days(param1) =  '"+today+"' or to_days(param2) =  '"+today+"' ) ")
                .apply(" (  DATE_FORMAT( param1 ,'%Y-%m-%d' ) =  '"+today+"' or DATE_FORMAT( param2 ,'%Y-%m-%d' )  =  '"+today+"' ) ")
        );
        if(totalAmount.compareTo(BigDecimal.ZERO)==0||CollectionUtils.isEmpty(platformLogList)){
            return BigDecimal.ZERO;
        }
        if(platformLogList!=null && platformLogList.size()>0){
            return this.getWorkTime(totalAmount,platformLogList);
            return this.getWorkTime(totalAmount,platformLogList,today);
        }
        return r;
    }
@@ -1214,30 +1352,32 @@
     * @param platformLogList
     * @return
     */
    public BigDecimal getWorkTime(BigDecimal totalAmount,List<PlatformLog> platformLogList){
    public BigDecimal getWorkTime(BigDecimal totalAmount,List<PlatformLog> platformLogList,String today){
        if(CollectionUtils.isEmpty(platformLogList)){
            return BigDecimal.ZERO;
        }
        //获取开始时间
        List<Long> startTimeList = platformLogList.stream().filter(i->Objects.nonNull(i.getParam1())).map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam1()).getTime()).collect(Collectors.toList());
        Long startTime  = Collections.min(startTimeList);
        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  = null ;
        if(CollectionUtils.isNotEmpty(startTimeList)){
            startTime = Collections.min(startTimeList);
        }
        //获取结束时间
        List<Long> endTimeList = platformLogList.stream().filter(i->Objects.nonNull(i.getParam2())).map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam2()).getTime()).collect(Collectors.toList());
        Long endTime = Collections.max(endTimeList);
        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 = null ;
        if(CollectionUtils.isNotEmpty(endTimeList)){
            endTime = Collections.max(endTimeList);
        }
        if(Objects.isNull(startTime)
            || Objects.isNull(endTime) || (startTime>=endTime)){
            return BigDecimal.ZERO;
        }
        return   totalAmount.divide(new BigDecimal(( endTime - startTime )+"").divide(new BigDecimal("3600000"),2,BigDecimal.ROUND_HALF_UP),2,BigDecimal.ROUND_HALF_UP) ;
    }
    private BigDecimal  getSumTotalByList(List<PlatformJob> list,Integer type,Integer status) {
@@ -1445,12 +1585,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;
    }
@@ -1943,11 +2084,11 @@
        );
        //在园长期相关方人数
        data.setRelatedTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO) && Constants.equalsInteger(i.getCompanyType(),Constants.ZERO)).count()
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.FOUR) ).count()
        );
        //在园内部员工人数
        data.setInternalTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO) && Constants.equalsInteger(i.getCompanyType(),Constants.ONE)).count()
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO) ).count()
        );
        //在园访客数量
        data.setVisitTotal(
@@ -1957,7 +2098,13 @@
        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()
        );
       /* //在园相关方车辆
        data.setRelatedCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.relation)).count()
@@ -1966,30 +2113,66 @@
        data.setInternalCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.internal)).count()
        );
        );*/
        //来访车辆
        data.setVisitCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.visitor)).count()
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.fkCar)).count()
        );
        //自由物流车数量
        data.setVisitCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.selfTruck)).count()
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.atwlzyCar)).count()
        );
        //市公司卸货车数量
        data.setInternalJobCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.cityComTruck)).count()
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.sgsxhCar)).count()
        );
        //外协车数量
        data.setRelatedJobCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.outTruck)).count()
                        &&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";
@@ -2031,7 +2214,7 @@
                    .in(PlatformJob ::getStatus,new Integer[]{Constants.PlatformJobStatus.WORKING.getKey(),Constants.PlatformJobStatus.CALLED.getKey() })
//                    .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                    .orderByDesc(PlatformJob::getStatus )
                    .orderByAsc(PlatformJob::getId )
                    .orderByAsc(PlatformJob::getSortnum )
            );
            List<PlatformDevice> platformDevices = platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda().eq(PlatformDevice::getType,Constants.ONE)
                    .eq(PlatformDevice::getIsdeleted,Constants.ZERO).isNotNull(PlatformDevice::getDeviceId));
@@ -2450,6 +2633,36 @@
     */
    @Override
    public  WholeProvinceBoardVO centerProvinceData(String  factoryCode){
        WholeProvinceBoardVO data = initWholeProvinceBoardVOData(factoryCode);
      /* Date date = new Date();
        TmsOutQtyAndVehicleQtyRequest param = new TmsOutQtyAndVehicleQtyRequest();
        param.setDateEnd(DateUtil.getShortTime(date));
        param.setDateStart(DateUtil.getShortTime(date));
        if(StringUtils.isNotBlank(code)){
            param.setFacrotyCodeList(new ArrayList<>());
            param.getFacrotyCodeList().add(code);//查询指定厂区
        }
        List<TmsOutQtyAndVehicleQtyResponse> listSame=  tmsService.getOutQtyAndVehicleQty(param);
        if(listSame!=null ){
            for(TmsOutQtyAndVehicleQtyResponse model : listSame){
                data.setCrrentOutNum(data.getCrrentOutNum().add(Constants.formatBigdecimal(model.getTotalOutQty())));//今日出库量
                data.setCrrentOutCarNum(data.getCrrentOutCarNum()+(Constants.formatIntegerNum(model.getVehicleQty())));//今日出库车次
            }
        }*/
        initOutboundCapability(data,factoryCode);
        return  data;
    }
    @Override
    public  WholeProvinceBoardVO centerProvinceDataNew(String  factoryCode){
        WholeProvinceBoardVO data = initWholeProvinceBoardVOData(factoryCode);
        initOutboundCapabilityNew(data,factoryCode);
        return  data;
    }
    private WholeProvinceBoardVO initWholeProvinceBoardVOData(String factoryCode) {
        WholeProvinceBoardVO data = new WholeProvinceBoardVO();
        data.setMaxAbility(new BigDecimal(0));
        data.setHoursAbility(new BigDecimal(0));
@@ -2478,24 +2691,42 @@
                }
            }
        }
      /*  Date date = new Date();
        TmsOutQtyAndVehicleQtyRequest param = new TmsOutQtyAndVehicleQtyRequest();
        param.setDateEnd(DateUtil.getShortTime(date));
        param.setDateStart(DateUtil.getShortTime(date));
        return  data;
    }
    private void initOutboundCapabilityNew(WholeProvinceBoardVO data, String code) {
        TmsFacrotyCodeListRequest param = new TmsFacrotyCodeListRequest();
        if(StringUtils.isNotBlank(code)){
            param.setFacrotyCodeList(new ArrayList<>());
            param.getFacrotyCodeList().add(code);//查询指定厂区
            param.getFacrotyCodeList().add(code);
        }
        List<TmsOutQtyAndVehicleQtyResponse> listSame=  tmsService.getOutQtyAndVehicleQty(param);
        if(listSame!=null ){
            for(TmsOutQtyAndVehicleQtyResponse model : listSame){
                data.setCrrentOutNum(data.getCrrentOutNum().add(Constants.formatBigdecimal(model.getTotalOutQty())));//今日出库量
                data.setCrrentOutCarNum(data.getCrrentOutCarNum()+(Constants.formatIntegerNum(model.getVehicleQty())));//今日出库车次
            }
        }*/
        initOutboundCapability(data,factoryCode);
        return  data;
        TmsGetOutCapabilityResponse result=  tmsService.getOutCapacity(param);
        if(result !=null){
            data.setCrrentOutNum(Constants.formatBigdecimal(result.getCurrentOutNum())  );//今日出库量
            data.setNeedTransportOrderNum(Constants.formatBigdecimal(result.getCurrentTransportNum()));//当前任务量-已配载未出库
            data.setNoNeedTransportOrderNum(Constants.formatBigdecimal(result.getCurrentNotTransportNum())  );//当前任务量-无需调度
            data.setCrrentRestNum(Constants.formatBigdecimal(result.getCurrentTransportNum()));//剩余任务量-已配载未出库
            data.setCurrentOrderNum(Constants.formatBigdecimal(result.getCurrentOrderNum())  );//当前订单量
            data.setCurrentPlanCarNum(Constants.formatBigdecimal(result.getCurrentTransportVehicleNum()).intValue() );//当前任务车次
            data.setCrrentRestCarNum(Constants.formatBigdecimal(result.getCurrentTransportVehicleNum()).intValue() );//剩余任务车次量
            data.setCrrentOutCarNum(Constants.formatBigdecimal(result.getCurrentOutVehicleNum()).intValue());//今日出库车次
            //当前任务量和剩余任务量,为(无需配载+需要配载的任务量之和)
            data.setCurrentPlanNum(data.getNeedTransportOrderNum().add(data.getNoNeedTransportOrderNum()));//当前任务量
            data.setCrrentRestNum(data.getCurrentPlanNum());//当前任务量
        }
        //处理单位成“箱”,一箱=5万支
        if(Constants.UNIT_TYPE == 1) {
            data.setMaxAbility(Constants.formatBigdecimal(data.getMaxAbility()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setHoursAbility(Constants.formatBigdecimal(data.getHoursAbility()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCrrentRestNum(Constants.formatBigdecimal(data.getCrrentRestNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCurrentPlanNum(Constants.formatBigdecimal(data.getCurrentPlanNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCrrentOutNum(Constants.formatBigdecimal(data.getCrrentOutNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCurrentOrderNum(Constants.formatBigdecimal(data.getCurrentOrderNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setNoNeedTransportOrderNum(Constants.formatBigdecimal(data.getNoNeedTransportOrderNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setNeedTransportOrderNum(Constants.formatBigdecimal(data.getNeedTransportOrderNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
        }
    }
    private void initOutboundCapability(WholeProvinceBoardVO data, String code) {
        TmsFacrotyCodeListRequest param = new TmsFacrotyCodeListRequest();
@@ -2591,7 +2822,6 @@
                }
            }
        }
    }
    private boolean notInList(String transportCode, List<String> planCodes) {
@@ -2727,15 +2957,16 @@
                    t =new WholeProvinceMapVO();
                    t.setMonthNum( Constants.formatBigdecimal0Float(model.getMonthOutboundQuantity()));
                    t.setYearNum( Constants.formatBigdecimal0Float(model.getYearOutboundQuantity()));
                    if(Constants.UNIT_TYPE == 1) {
                        //处理单位成“箱”,一箱=5万支
                        t.setMonthNum(Constants.formatBigdecimal(t.getMonthNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                        t.setYearNum(Constants.formatBigdecimal(t.getYearNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                    }
                    t.setProvinceCode(model.getToProvinceCode());
                    t.setProvinceName(model.getToProvinceName());
                    result.add(t);
                }
            }
            if(Constants.UNIT_TYPE == 1) {
             for(WholeProvinceMapVO t : result){
                    //处理单位成“箱”,一箱=5万支
                    t.setMonthNum(Constants.formatBigdecimal(t.getMonthNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                    t.setYearNum(Constants.formatBigdecimal(t.getYearNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                }
            }
        }
@@ -2955,7 +3186,6 @@
            }
        }
        return r ;
    }