k94314517
2025-05-07 bd14f953a56bdad659ef7c34ce3b1d37530d7f8a
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -656,6 +656,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");
@@ -676,6 +677,8 @@
                    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();
@@ -1078,27 +1081,31 @@
        data.setCurrentOutDoneNum(getSumTotalByList(currentDoneNum,0,1));//今日完成量
        data.setCurrentInNum(beforeInNum.add(data.getCurrentInDoneNum()).add(currentInNum));//当前入库总任务成量
        data.setCurrentOutNum(beforeOutNum.add(data.getCurrentOutDoneNum()).add(currentOutNum));//当前出库总任务成量
        //------------今日出入库效率----------------
        BigDecimal outHours = getTotalDoneTimes(currentDoneNum,0);//
        BigDecimal inHours = getTotalDoneTimes(currentDoneNum,1);//
        if(outHours.compareTo(new BigDecimal(0))>0){
            data.setTodayOutRate(data.getCurrentOutDoneNum().divide(outHours,2));//当前入库总任务成量
        }
        if(inHours.compareTo(new BigDecimal(0))>0){
            data.setTodayInRate(data.getCurrentInDoneNum().divide(inHours,2));//当前入库总任务成量
        }
        data.setTodayOutRate(getDayTotalRata(data.getCurrentOutDoneNum(),DateUtil.getToday()));//当日出库效率
        data.setTodayInRate(getDayTotalRata(data.getCurrentInDoneNum(),DateUtil.getToday()));//当日入库效率
        data.setMonthOutRate(getMonthRata(monthNum,Constants.ZERO));//本月出库效率
        data.setMonthInRate(getMonthRata(monthNum,Constants.ONE));//本月出库效率
        //------------今日出入库效率----------------
//        BigDecimal outHours = getTotalDoneTimes(currentDoneNum,0);//
//        BigDecimal inHours = getTotalDoneTimes(currentDoneNum,1);//
//
//        if(outHours.compareTo(new BigDecimal(0))>0){
//            data.setTodayOutRate(data.getCurrentOutDoneNum().divide(outHours,2));//当前入库总任务成量
//        }
//        if(inHours.compareTo(new BigDecimal(0))>0){
//            data.setTodayInRate(data.getCurrentInDoneNum().divide(inHours,2));//当前入库总任务成量
//        }
        //------------本月出入库效率----------------
//        BigDecimal outMonthNum = getSumTotalByList(monthNum,0,null).add(data.getCurrentOutDoneNum());
        BigDecimal inMonthNum = getSumTotalByList(monthNum,1,null).add(data.getCurrentInDoneNum());
        BigDecimal outMonthHours = getTotalDoneTimes(monthNum,0).add(outHours);//
        BigDecimal inMonthHours = getTotalDoneTimes(monthNum,1).add(inHours);//
        if(outMonthHours.compareTo(new BigDecimal(0))>0){
            data.setMonthOutRate(data.getMonthOutTotal().divide(outMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月入库效率
        }
        if(inMonthHours.compareTo(new BigDecimal(0))>0){
            data.setMonthInRate(inMonthNum.divide(inMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月入库效率
        }
//        BigDecimal inMonthNum = getSumTotalByList(monthNum,1,null).add(data.getCurrentInDoneNum());
//        BigDecimal outMonthHours = getTotalDoneTimes(monthNum,0).add(outHours);//
//        BigDecimal inMonthHours = getTotalDoneTimes(monthNum,1).add(inHours);//
//        if(outMonthHours.compareTo(new BigDecimal(0))>0){
//            data.setMonthOutRate(data.getMonthOutTotal().divide(outMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月出库效率
//        }
//        if(inMonthHours.compareTo(new BigDecimal(0))>0){
//            data.setMonthInRate(inMonthNum.divide(inMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月入库效率
//        }
        return data;
    }
@@ -1110,10 +1117,9 @@
        if(platformLogList!=null && platformLogList.size()>0){
            return new BigDecimal((double)(platformLogList.stream().map(m->Long.valueOf(m.getParam3())).reduce(Long.valueOf(0),Long::sum))/(double)60);
        }
        return new BigDecimal(0);
    }
    private BigDecimal getTotalDoneTimes(List<PlatformJob> list, Integer type) {
        BigDecimal r = new BigDecimal(0);
        if(list==null || list.size() == 0){
@@ -1148,6 +1154,94 @@
        }
        return r;
    }
    private BigDecimal getMonthRata(List<PlatformJob> list, Integer type) {
        BigDecimal r = new BigDecimal(0);
        if(list==null || list.size() == 0){
            return r;
        }
        List<PlatformJob> jobList= new ArrayList<>();
        for(PlatformJob job : list) {
            if (!(Constants.equalsInteger(job.getStatus(), Constants.PlatformJobStatus.DONE.getKey())
                    || Constants.equalsInteger(job.getStatus(), Constants.PlatformJobStatus.LEAVED.getKey())
                    || Constants.equalsInteger(job.getStatus(), Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()))) {
                //只查询完成数据
                continue;
            }
            if (type != null && type == 0 && (Constants.equalsInteger(job.getType(), Constants.ONE) || Constants.equalsInteger(job.getType(), Constants.THREE))) {
                //出库
                jobList.add(job);
            }
            if (type != null && type == 1 && (Constants.equalsInteger(job.getType(), Constants.ZERO) || Constants.equalsInteger(job.getType(), Constants.TWO) || Constants.equalsInteger(job.getType(), Constants.FOUR))) {
                //入库
                jobList.add(job);
            }
        }
        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));
                }
            }
        }
        return r;
    }
    private BigDecimal getDayTotalRata(BigDecimal totalAmount,String today) {
        BigDecimal r = new BigDecimal(0);
        //查询今日最早/最晚的作业数据
        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>()
                .lambda()
                .apply(" ( to_days(param1) =  '"+today+"' or to_days(param2) =  '"+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 r;
    }
    /**
     * 查询作业时长(小时)
     * @param totalAmount
     * @param platformLogList
     * @return
     */
    public BigDecimal getWorkTime(BigDecimal totalAmount,List<PlatformLog> platformLogList){
        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> 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);
        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) {
        BigDecimal r = new BigDecimal(0);
@@ -1852,11 +1946,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(
@@ -1866,7 +1960,11 @@
        data.setInParkCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)).count()
        );
        //在园相关方车辆
        //在园车辆
        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()
@@ -1875,26 +1973,26 @@
        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());
        return data;
@@ -1940,7 +2038,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));