根据前段传过来的月,查询数据库表计划,数据库表计划的存储格式,是周为格式(这周二到下周二),如何能获取出这月的计划

该代码片段定义了一个方法,用于根据给定的开始和结束时间列表,按作业区分组,计算每个作业区在指定月份的总计划量,并将结果四舍五入到小数点后两位。
摘要由CSDN通过智能技术生成
/**
 * 获取各作业区月合计计划
 * */
public static HashMap<String, Double> getWeekPlanMap( List<WeekPlan> listStart, List<WeekPlan> listEnd,
                                  DateTime beginOfMonth,DateTime endOfMonth) {
    HashMap<String, Double> map = new HashMap<>();
    // 根据数据的唯一性做分组
    Map<String, List<WeekPlan>> endListArerMap = listEnd.stream().filter(f -> f != null).collect(Collectors.groupingBy(WeekPlan::getArer));
    Map<String, List<WeekPlan>> startListArerMap = listStart.stream().filter(f -> f != null).collect(Collectors.groupingBy(WeekPlan::getArer));
    for (String arer : endListArerMap.keySet()) {
        // 获取分组下的开始时间集合
        listStart = endListArerMap.get(arer);
        // 获取分组下的结束时间集合
         listEnd = startListArerMap.get(arer);
        AtomicDouble atomicDouble = new AtomicDouble(0);
        if (listStart != null){
        listStart.forEach(f->{
            String eTime= f.getEndTime()+ " 00:00:00";
                String sTime= f.getStrTime()+ " 00:00:00";
                DateTime startTime = DateUtil.parseDateTime(sTime);
                DateTime endTime = DateUtil.parseDateTime(eTime);
            if (endTime.compareTo(endOfMonth) > 0) {
                // 计算2个日期间差了多少天
                Integer day = Math.toIntExact(DateUtil.betweenDay(endOfMonth, DateUtil.parseDateTime(sTime), true));
                day += 1;
                // 除以7天在×天数
                double dayPlan = Double.valueOf(f.getPlanData()) / 7 * day;
                atomicDouble.getAndAdd(dayPlan);
            } else {
                atomicDouble.getAndAdd(Double.valueOf(f.getPlanData()));
            }
        });
        }
        if (listEnd != null) {
            listEnd.forEach(f -> {
                String eTime = f.getEndTime() + " 00:00:00";
                String sTime = f.getStrTime() + " 00:00:00";
                DateTime startTime = DateUtil.parseDateTime(sTime);
                DateTime endTime = DateUtil.parseDateTime(eTime);
                if (startTime.compareTo(beginOfMonth) < 0) {
                    // 计算2个日期间差了多少天
                    Integer day = Math.toIntExact(DateUtil.betweenDay(beginOfMonth, DateUtil.parseDateTime(eTime), true));
                    day += 1;
                    // 除以7天在×天数
                    double dayPlan = Double.valueOf(f.getPlanData()) / 7 * day;
                    atomicDouble.getAndAdd(dayPlan);
                }
            });
        }
        // 获取当月天数
        Integer day = Math.toIntExact(DateUtil.betweenDay(beginOfMonth, endOfMonth, true));
        day = day + 1;
        // 获取原子浮点数的值
        double value = atomicDouble.get();
        value = value / day;
        // 格式化值并获取四舍五入后的结果
        double roundedValue = Double.parseDouble(String.format("%.2f", value));
        // 更新原子浮点数的值为四舍五入后的结果
        map.put(arer,roundedValue);
    }
        return map;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值