应用于停车场的24小时计费算法

停车场管理中,最普遍最简单的计费规则当属24小时计费,也就是在按停车小时数计费. 收费规则设置界面如下
在这里插入图片描述
24小时计费规则并不复杂,方法输入车辆进出时间startTime、endTime

参考代码Java

public static BigDecimal chargin(HourChargingRule rule,LocalDateTime inTime,LocalDateTime endTime){
        Duration between = Duration.between(inTime, endTime);
        //相差分钟数
        long minutes = between.toMinutes();
        if(rule.getFreeMin() >= minutes){
            //未到收费时长
            return new BigDecimal(ChargingFinal.ZERO_FREE);
        }
        //停车时长在一天内
        if(minutes <= dayMin){
            //判断多少个小时
            int s = (int)minutes / 60;
            if(minutes % 60 >= rule.getTwoMin()){
                s+=1;
            }
            return rule.getChargingHours().get(s - 1);
        }
        //1.计算满24小时第一天费用
        BigDecimal totalMoney = rule.getChargingHours().get(23);//第一天费用
        //2.计算24小时后费用
        int day = (int) minutes / dayMin;
        if(rule.getExceedMode() == 0 ){ //重复24小时计费
            totalMoney = totalMoney.multiply(new BigDecimal(day - 1));
            //计算最后一个未满24小时车费
            int lastMin = (int) minutes % dayMin;
            if(lastMin > rule.getTwoMin()){
                int hours = lastMin / 60;
                if(lastMin % 60 >= rule.getTwoMin()){
                    hours+=1;
                }
                totalMoney = totalMoney.add(rule.getChargingHours().get(hours - 1));
            }
        }else if(rule.getExceedMode() == 1){//每小时收费
            int lastMin = (int)minutes % dayMin;
            if(lastMin >= rule.getTwoMin()){
                int hours = lastMin / 60;
                if(lastMin % 60 >= rule.getTwoMin()){
                    hours+=1;
                }
                totalMoney = totalMoney.add(BigDecimal.valueOf(hours * rule.getExceedValue()));
            }
        }else if(rule.getExceedValue() == 2){
            totalMoney = totalMoney.multiply(new BigDecimal(day - 1));
            int lastMin = (int)minutes % dayMin;
            if(lastMin >= rule.getTwoMin()){
                totalMoney = totalMoney.add(rule.getChargingHours().get(23));
            }
        }
        return totalMoney;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值