jiangping
2025-05-07 c3aaf28f7316cce12eec007a9f85a96cbcddeec2
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -91,6 +91,8 @@
    private PlatformGroupMapper platformGroupMapper;
    @Autowired
    private TmsService tmsService;
    @Autowired
    private PlatformDeviceMapper platformDeviceMapper;
    @Value("${debug_model}")
    private Boolean isDebug;
@@ -132,6 +134,7 @@
                        .select(PlatformJob::getTotalNum)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .eq(PlatformJob::getOrigin,Constants.ONE)
                        .in(PlatformJob::getType,new Integer[]{0,2,4})
                        .in(PlatformJob::getStatus, Constants.PlatformJobStatus.DONE.getKey()
                                , Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
                                , Constants.PlatformJobStatus.LEAVED.getKey())
@@ -148,6 +151,7 @@
                List<PlatformJob> jobs = platformJobMapper.selectList (new MPJLambdaWrapper<PlatformJob>()
                        .select(PlatformJob::getTotalNum)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                                .apply(" ( origin = 0 or origin is null)  ")
                        .eq(PlatformJob::getPlatformGroupId,platformGroupId)
                        .apply("to_days(done_date) = to_days(now())")
                        .in(PlatformJob::getStatus, Constants.PlatformJobStatus.DONE.getKey()
@@ -186,7 +190,8 @@
            List<WmsInventoryJsonResponse> t= response.getData().get(0).getJson();
            if(t!=null &&t.size()>0){
                for(WmsInventoryJsonResponse j :t){
                    num = num.add (Constants.formatBigdecimal( j.getQty()));
                    //2025年4月9日16:46:40 处理 包含托盘字眼的数据 不进行合计
                    num = num.add (j.getItemName().indexOf("托盘")<Constants.ZERO?Constants.formatBigdecimal( j.getQty()):BigDecimal.ZERO);
                    GeneralVO d = new GeneralVO();
                    d.setNum(Constants.formatBigdecimal(j.getQty()));
                    d.setName(j.getItemName());
@@ -748,6 +753,20 @@
                        .apply(queryType==0,"to_days(create_date) >= to_days(now()) -7")
                        .apply(queryType==1,"year(create_date) = year(now()) and month(create_date) = month(now())")
                        .apply(queryType==2,"year(create_date) = year(now())"));
        List<PlatformJob>  finishDataList = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .selectAs(PlatformJob::getCreateDate,PlatformJob::getCreateDate)
                        .selectAs(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .selectAs(PlatformJob::getStatus,PlatformJob::getStatus)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                        .apply(queryType==0,"to_days(done_date) >= to_days(now()) -7")
                        .apply(queryType==1,"year(done_date) = year(now()) and month(done_date) = month(now())")
                        .apply(queryType==2,"year(done_date) = year(now())"));
        for (Date date : dayList) {
            TransportMeasureVO data = new TransportMeasureVO();
            data.setPlanDate(date);
@@ -759,23 +778,34 @@
                    if(DateUtil.formatDate(date,"yyyy-MM").equals(DateUtil.formatDate(job.getCreateDate(),"yyyy-MM"))){
                        data.setPlanTimes( data.getPlanTimes() +1);
                        data.setPlanTaskNum( data.getPlanTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
                        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())){
                            //完成数
                            data.setFinishTaskNum( data.getFinishTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
                        }
//                        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())){
//                            //完成数
//                            data.setFinishTaskNum( data.getFinishTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
//                        }
                    }
                }else{
                    if(DateUtil.formatDate(date,"yyyy-MM-dd").equals(DateUtil.formatDate(job.getCreateDate(),"yyyy-MM-dd"))){
                        data.setPlanTimes( data.getPlanTimes() +1);
                        data.setPlanTaskNum( data.getPlanTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
                        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())){
                            //完成数
//                        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())){
//                            //完成数
//                            data.setFinishTaskNum( data.getFinishTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
//                        }
                    }
                }
            }
            for (PlatformJob job :finishDataList) {
                if(queryType == 2){
                    if(DateUtil.formatDate(date,"yyyy-MM").equals(DateUtil.formatDate(job.getDoneDate(),"yyyy-MM"))){
                            data.setFinishTaskNum( data.getFinishTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
                        }
                    }
                }else{
                    if(DateUtil.formatDate(date,"yyyy-MM-dd").equals(DateUtil.formatDate(job.getDoneDate(),"yyyy-MM-dd"))){
                            data.setFinishTaskNum( data.getFinishTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
                    }
                }
            }
@@ -801,11 +831,13 @@
                        .selectAll(PlatformJob.class)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .eq(PlatformJob::getCarCodeFront,param.getCarCode())
                        .in(PlatformJob::getStatus,
                        .notIn(PlatformJob::getStatus,
                                Constants.PlatformJobStatus.DONE.getKey(),
                                Constants.PlatformJobStatus.LEAVED.getKey(),
                                Constants.PlatformJobStatus.AUTHED_LEAVE.getKey(),
                                Constants.PlatformJobStatus.CALLED.getKey())
                                Constants.PlatformJobStatus.CANCEL.getKey()
                        )
                        .orderByAsc(PlatformJob::getId)
                        .last("limit 1"));
        dealJobDetailAndContractBiz(job,data);
@@ -926,7 +958,7 @@
     */
    @Override
    public   AlarmDataVO alarmDataSumByCate(){
        AlarmDataVO alarmDataVO = getAlertDataByStartEndTime(DateUtil.getPlusTime2(DateUtil.addDaysToDate(new Date(),-1))
        AlarmDataVO alarmDataVO = getAlertDataByStartEndTime(DateUtil.getPlusTime2(Utils.Date.getStart(new Date()))
                ,(DateUtil.getPlusTime2(new Date())));
        return  alarmDataVO;
    }
@@ -951,10 +983,23 @@
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .select(PlatformJob::getStatus,PlatformJob::getStatus)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .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)+"') "));
        List<PlatformJob>  yearNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .selectAs(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .select(PlatformJob::getStatus,PlatformJob::getStatus)
                        .select(PlatformJob::getType,PlatformJob::getType)
//                        .selectCount(PlatformJob::getPlatformId,PlatformJob::getCountum)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .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()  "));
        List<PlatformJob>  monthLastNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
@@ -967,17 +1012,7 @@
                        .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)+"'"));
        List<PlatformJob>  yearNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .selectAs(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .select(PlatformJob::getStatus,PlatformJob::getStatus)
                        .select(PlatformJob::getType,PlatformJob::getType)
//                        .selectCount(PlatformJob::getPlatformId,PlatformJob::getCountum)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .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<= '"+DateUtil.getPlusTime2(year)+"'"));
        List<PlatformJob> yearLastNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
@@ -987,7 +1022,7 @@
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .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(lastYear)+"')  and done_date<= '"+DateUtil.getPlusTime2(lastYear)+"'"));
                        .apply("year(done_date) = year('"+DateUtil.getPlusTime2(lastYear)+"')  and done_date<=  now()  "));
        data.setMonthOutTotal(getSumTotalByList(monthNum,0,null));//本月出库量
        data.setMonthLastOutTotal(getSumTotalByList(monthLastNum,null,null) );//上月出库量
@@ -1005,8 +1040,11 @@
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        // .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey(),Constants.PlatformJobStatus.CALLED.getKey())
                        .apply("   to_days(create_date) <to_days(now())"));
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),
                                Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
                                ,Constants.PlatformJobStatus.CANCEL.getKey())
                        .apply("   to_days(create_date) < to_days(now()) ")
        );
        //==========今天出入库完成量
        List<PlatformJob> currentDoneNum = platformJobMapper.selectJoinList(PlatformJob.class,
@@ -1017,9 +1055,10 @@
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey())
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
                        .apply(" to_days(done_date) = to_days(now())"));
        //==========今天下发出入库任务----
        //==========今天下发出入库任务 未完成的----
        List<PlatformJob> currentNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
@@ -1028,38 +1067,42 @@
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey())
                        .apply(" to_days(create_date) = to_days(now())"));
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
                        .apply(" to_days(create_date) = to_days(now()) and done_date is null   "));
        BigDecimal beforeOutNum = (getSumTotalByList(beforeJobNum,0,null));//今天之前未完成出库任务
        BigDecimal currentOutNum = (getSumTotalByList(currentNum,0,null));//今天下发出库任务
        BigDecimal beforeInNum = (getSumTotalByList(beforeJobNum,1,null));//今天之前未完成入库任务
        BigDecimal currentInNum = (getSumTotalByList(currentNum,1,null));//今天下发入库任务
        data.setCurrentInNum(beforeInNum.add(currentInNum));//当前入库总任务成量
        data.setCurrentOutNum(beforeOutNum.add(currentOutNum));//当前出库总任务成量
        data.setCurrentInDoneNum(getSumTotalByList(currentDoneNum,1,1));//今日完成量
        data.setCurrentOutDoneNum(getSumTotalByList(currentDoneNum,0,1));//今日完成量
        //------------今日出入库效率----------------
        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.setCurrentInNum(beforeInNum.add(data.getCurrentInDoneNum()).add(currentInNum));//当前入库总任务成量
        data.setCurrentOutNum(beforeOutNum.add(data.getCurrentOutDoneNum()).add(currentOutNum));//当前出库总任务成量
        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;
    }
@@ -1071,10 +1114,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){
@@ -1109,6 +1151,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);
@@ -1235,7 +1365,6 @@
    @Override
    public    YearDeviceDataVO yearFightingAdminDeviceData(){
        YearDeviceDataVO data = new YearDeviceDataVO();
        FireStatisticRequest param = new FireStatisticRequest();
        param.setIndexCode("api_fire_statistic");
        BaseResponse<FireStatisticResponse> response = HKService.fireStatistic(param);
@@ -1243,7 +1372,6 @@
            data.setProtectNum(Constants.formatIntegerNum(response.getData().getMaintenanceNum()));
            data.setPlanProtectTotal(Constants.formatIntegerNum(response.getData().getDeviceTotalNum()));
        }
        param = new FireStatisticRequest();
        param.setIndexCode("api_fire_statistic_month");
        BaseResponse<FireStatisticResponse> response1 = HKService.fireStatisticMonth(param);
@@ -1253,7 +1381,6 @@
            data.setMonthTotalNum(Constants.formatIntegerNum(response1.getData().getDeviceTotalNum()));
        }
        return data;
    }
    /**
@@ -1264,7 +1391,37 @@
    public  FightingAdminCenterDataVO centerFightingAdminData(){
        FightingAdminCenterDataVO data = new FightingAdminCenterDataVO();
        List<DeviceNumByTypeVO> list = new ArrayList<>();
        FireDevStatusTotalRequest param = new FireDevStatusTotalRequest();
        FindDeviceStatisticsRequest param1 = new FindDeviceStatisticsRequest();
        param1.setRegionIndexCode("root000000");
        BaseResponse<List<FindDeviceStatisticsResponse>> response = HKService.findDeviceStatistics(param1);
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){
            for(FindDeviceStatisticsResponse r :response.getData()){
                if(r.getDevices()!=null){
                    for(FindDeviceStatisticsInfoResponse td : r.getDevices()){
                        DeviceNumByTypeVO t = new DeviceNumByTypeVO();
                        t.setTypeName(td.getDeviceName());
                        //屏蔽数
                        t.setShieldDeviceNum(Constants.formatIntegerNum(t.getShieldDeviceNum() )+ Constants.formatIntegerNum(td.getShieldSensorCount()));
                        //报警数
                        t.setAlarmDeviceNum(Constants.formatIntegerNum(t.getAlarmDeviceNum())+ Constants.formatIntegerNum(td.getAlarmSensorCount()));
                        //正常数
                        t.setOnlineDeviceNum(Constants.formatIntegerNum(t.getOnlineDeviceNum())+Constants.formatIntegerNum(td.getNormalSensorCount()));
                        //故障数
                        t.setErrDeviceNum(Constants.formatIntegerNum(t.getErrDeviceNum())+ Constants.formatIntegerNum(td.getFaultSensorCount()));
                        //总设备数
                        t.setTotalDeviceNum(Constants.formatIntegerNum(t.getTotalDeviceNum())+ Constants.formatIntegerNum(td.getTotalSensorCount()));
                        list.add(t);
//                        data.setOfflineDeviceNum(Constants.formatIntegerNum( data.getOfflineDeviceNum())+Constants.formatIntegerNum(t.getOfflineDeviceNum()));
                        data.setShieldDeviceNum(Constants.formatIntegerNum( data.getShieldDeviceNum())+Constants.formatIntegerNum(t.getShieldDeviceNum()));
                        data.setAlarmDeviceNum(Constants.formatIntegerNum( data.getAlarmDeviceNum())+Constants.formatIntegerNum(t.getAlarmDeviceNum()));
                        data.setOnlineDeviceNum(Constants.formatIntegerNum( data.getOnlineDeviceNum())+Constants.formatIntegerNum(t.getOnlineDeviceNum()));
                        data.setErrDeviceNum(Constants.formatIntegerNum( data.getErrDeviceNum())+Constants.formatIntegerNum(t.getErrDeviceNum()));
                        data.setTotalDeviceNum(Constants.formatIntegerNum( data.getTotalDeviceNum())+Constants.formatIntegerNum(t.getTotalDeviceNum()));
                    }
                }
            }
        }
       /* FireDevStatusTotalRequest param = new FireDevStatusTotalRequest();
        param.setIncludeBool(1);
        param.setRegionIds(new String[]{"root000000"});
        BaseResponse<List<FireDevStatusListResponse>> response = HKService.getFireDevStatusList(param);
@@ -1284,7 +1441,7 @@
                data.setErrDeviceNum(Constants.formatIntegerNum( data.getErrDeviceNum())+Constants.formatIntegerNum(r.getFaultFireDevCount()));
                data.setTotalDeviceNum(Constants.formatIntegerNum( data.getTotalDeviceNum())+Constants.formatIntegerNum(r.getTotalFireDevCount()));
            }
        }
        }*/
        data.setDeviceTypeList(list);
        Long totalNum =hiddenDangerMapper.selectCount(new QueryWrapper<HiddenDanger>().lambda()
                .eq(HiddenDanger::getIsdeleted,Constants.ZERO )
@@ -1706,17 +1863,16 @@
    @Override
    public  VisitDataVO visitSecurityData(){
        //待访问、已登记、已离开
        VisitDataVO result = new VisitDataVO();
        result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
                .eq(Visits::getIsdeleted,Constants.ZERO)
                .apply("to_days(create_date)=to_days(now())")
                .apply(" now() >  STARTTIME and now() < ENDTIME")
                .in(Visits::getStatus,Constants.VisitStatus.pass,Constants.VisitStatus.xfSuccess )));//待访问
        result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
        result.setRegisterVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
                .eq(Visits::getIsdeleted,Constants.ZERO)
                .apply("to_days(create_date)=to_days(now())")
                .in(Visits::getStatus,Constants.VisitStatus.signout,Constants.VisitStatus.signin )));//已登记
        result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
        result.setLevelNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
                .eq(Visits::getIsdeleted,Constants.ZERO)
                .apply("to_days(create_date)=to_days(now())")
                .in(Visits::getStatus,Constants.VisitStatus.signout )));//已签离
@@ -1764,6 +1920,7 @@
                result.getVisitRetentionDataList().add(t);
            });
        }
        result.setRetentionNum(result.getVisitRetentionDataList().size());
        return result;
    }
@@ -1800,7 +1957,7 @@
        data.setInParkCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)).count()
        );
        //在园相关方车辆
       /* //在园相关方车辆
        data.setRelatedCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)
                        &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.relation)).count()
@@ -1809,26 +1966,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;
@@ -1874,8 +2031,12 @@
                    .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));
            String videoUrl = getVideoUrl();
            //月台状态:0=作业中;1=空闲中;2=作业超时;3=叫号
            for(Platform model : platformList){
                PlatformWorkDataVO platformDurationVO = new PlatformWorkDataVO();
@@ -1883,6 +2044,13 @@
                platformDurationVO.setPlatformId(model.getId());
                platformDurationVO.setPlatformCode(model.getCode());
                platformDurationVO.setPlatformSort(model.getSortnum());
                if(CollectionUtils.isNotEmpty(platformDevices)){
                    List<PlatformDevice> deviceList = platformDevices.stream().filter(i->Constants.equalsInteger(i.getPlatformId(),model.getId())).collect(Collectors.toList());
                    if (CollectionUtils.isNotEmpty(deviceList)) {
                        platformDurationVO.setDeviceId(deviceList.get(Constants.ZERO).getDeviceId());
                        platformDurationVO.setVideoPluginUrl(videoUrl);
                    }
                }
                PlatformJob job = getJobFromListById(model.getId(),jobList);
                if(job != null){
                    if(Constants.equalsInteger(job.getType(),Constants.ONE) || Constants.equalsInteger(job.getType(),Constants.THREE)){
@@ -1943,7 +2111,7 @@
        List<PlatformJob> jobList = platformJobMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper<PlatformJob>()
                .selectAll( PlatformJob.class)
//                .select("(select sum(ifnull(a.io_qty,0)) from platform_wms_detail a where a.isdeleted=0 and a.job_id =t.id )", create_date)
                .apply("to_days(t.create_date) = to_days(now())")
                .apply("to_days(t.done_date) = to_days(now())")
                .eq(Platform::getIsdeleted, Constants.ZERO)
                .in(PlatformJob::getStatus, Constants.PlatformJobStatus.DONE.getKey()
                        , Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
@@ -1957,7 +2125,7 @@
        }
        int curtotalNum = 0;
        Date today =  Utils.Date.getStart(new Date());
        long curTime=0, lastTime=0;
        long curTime=0, lastTime=0 ;
        for (int i = 0; i < 8; i++) {
            lastTime = curTime;//上次的时间
            int curHour = 8+(i*2);
@@ -1980,7 +2148,7 @@
                curtotalNum += Constants.formatIntegerNum(workEfficiencyVO.getWorkNum()) ;
            }
            workEfficiencyVO.setTotalWorkNum(curtotalNum);//累计值
            if(System.currentTimeMillis() < curTime){
            if((System.currentTimeMillis() + 2*60*60*1000) < curTime ){
                workEfficiencyVO.setTotalWorkNum(0);
            }
            workEfficiencyVOList.add(workEfficiencyVO);
@@ -2163,15 +2331,22 @@
        //已作业数
        data.setWorkedNum(platformJobMapper.selectCount(new MPJLambdaWrapper<PlatformJob>()
                .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                .and(w->{w.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey());})
                .and(w->{w.in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey()
                .and(w-> w.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey())
                        .or().in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey()
                                ,Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
                                ,Constants.PlatformJobStatus.LEAVED.getKey())
                        .apply("to_days(done_date) = to_days(now())");})
                .and(w->{w.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.EXCEPTION.getKey())
                        .apply("to_days(error_date) = to_days(now())");})
                .and(w->{w.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.TRANSFERING.getKey())
                        .apply("to_days(trans_platform_date) = to_days(now())");})
                                ,Constants.PlatformJobStatus.LEAVED.getKey()).apply("to_days(done_date) = to_days(now())")
                        .or().eq(PlatformJob::getStatus,Constants.PlatformJobStatus.EXCEPTION.getKey()).apply("to_days(done_date) = to_days(now())")
                        .or().eq(PlatformJob::getStatus,Constants.PlatformJobStatus.TRANSFERING.getKey()).apply("to_days(trans_platform_date) = to_days(now())")
                )
//                .and(w->{w.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey());})
//                .and(w->{w.in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey()
//                                ,Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
//                                ,Constants.PlatformJobStatus.LEAVED.getKey())
//                        .apply("to_days(done_date) = to_days(now())");})
//                .and(w->{w.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.EXCEPTION.getKey())
//                        .apply("to_days(error_date) = to_days(now())");})
//                .and(w->{w.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.TRANSFERING.getKey())
//                        .apply("to_days(trans_platform_date) = to_days(now())");})
        ).intValue());
        data.setVideoPluginUrl(getVideoUrl());
@@ -2606,7 +2781,7 @@
        return infoList;
    }
    /**
     * 近七日到货情况
     * 近七日到货情况-改成近15日
     * @return
     */
    @Override
@@ -2618,17 +2793,17 @@
            param.getFacrotyCodeList().add(code);//查询指定厂区
        }
        Date date = new Date();
        Date startDate = DateUtil.addDaysToDate(date,-7);
        Date startDate = DateUtil.addDaysToDate(date,-15);
        //看板大屏近7日到货情况日期 0表示当天当前推7天,-1表示本月初1号-7号
        String flag = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.SCREEN_SEVENT_ARRIVAL_STARTDATE).getCode();
        if(StringUtils.equals(flag,"-1")){
            startDate =DateUtil.getBeginDayOfMonth(0);
            date = DateUtil.addDaysToDate(startDate,7);
            date = DateUtil.addDaysToDate(startDate,15);
        }
        param.setNcCreateDateFrom(DateUtil.getShortTime(startDate));
        param.setNcCreateDateThrough(DateUtil.getShortTime(date));
        List<TmsSevenArrivalStatusAndDetailsResponse> infoList =   tmsService.getSevenArrivalStatusAndDetails(param);//查询出库量
        for (int i = 0; i < 7; i++) {
        for (int i = 0; i < 15; i++) {
            LastSevenDaysOrderVo model = new LastSevenDaysOrderVo();
            Date td = DateUtil.addDaysToDate(date,-i);
            model.setDateStr(DateUtil.getShortTime(td));