/** * 获取各作业区月合计计划 * */ 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; }
根据前段传过来的月,查询数据库表计划,数据库表计划的存储格式,是周为格式(这周二到下周二),如何能获取出这月的计划
于 2023-08-22 15:41:47 首次发布
该代码片段定义了一个方法,用于根据给定的开始和结束时间列表,按作业区分组,计算每个作业区在指定月份的总计划量,并将结果四舍五入到小数点后两位。
摘要由CSDN通过智能技术生成