java 排班计划


前言

简单的排班计划,比较常见的,班组两班倒 就是黑班白班,还有三班倒的,就是干12 休息24h,类似这种简单的排班计划;
之前项目中有接触过,今天想起来了,简答回顾下排班;


一、排班计划 三班倒

public class BlackWhite {

    /**
     * 三个班组 黑白倒班 工作12 休息24
     *
     * @param args
     */
    public static void main(String[] args) {

        Date date = new Date();// 任意指定一个日期 排全年计划
        System.out.println(DateUtil.year(date) + "年排班计划");
        List<String> banzu = Arrays.asList("A组", "B组", "C组");
        List<String> ban = Arrays.asList("白班", "黑班");
        int count = 0;// 第几次排班 用来取余班组 算获取哪个班组
        for (int month = 1; month <= 12; month++) {// 按照月份排期
            System.out.println(month + "月份排班计划");
            int num = DateUtil.lengthOfMonth(month, DateUtil.isLeapYear(DateUtil.year(date)));// 获取月份天数
            for (int i = 1; i <= num; i++) {
                System.out.print("第" + i + "天排班: ");
                for (int j = 0; j < ban.size(); j++) {
                    int temp = count % banzu.size();
                    System.out.print(ban.get(j) + ">>" + banzu.get(temp) + " ");
                    count++;
                }
                System.out.println();
            }
        }
    }
}

部分结果如下:

2023年排班计划
1月份排班计划
第1天排班: 白班>>A组 黑班>>B组
第2天排班: 白班>>C组 黑班>>A组
第3天排班: 白班>>B组 黑班>>C组
第4天排班: 白班>>A组 黑班>>B组
第5天排班: 白班>>C组 黑班>>A组
第6天排班: 白班>>B组 黑班>>C组
第7天排班: 白班>>A组 黑班>>B组
第8天排班: 白班>>C组 黑班>>A组
第9天排班: 白班>>B组 黑班>>C组
第10天排班: 白班>>A组 黑班>>B组
第11天排班: 白班>>C组 黑班>>A组
第12天排班: 白班>>B组 黑班>>C组
第13天排班: 白班>>A组 黑班>>B组
第14天排班: 白班>>C组 黑班>>A组
第15天排班: 白班>>B组 黑班>>C组
第16天排班: 白班>>A组 黑班>>B组
第17天排班: 白班>>C组 黑班>>A组
第18天排班: 白班>>B组 黑班>>C组
第19天排班: 白班>>A组 黑班>>B组
第20天排班: 白班>>C组 黑班>>A组
第21天排班: 白班>>B组 黑班>>C组
第22天排班: 白班>>A组 黑班>>B组
第23天排班: 白班>>C组 黑班>>A组
第24天排班: 白班>>B组 黑班>>C组
第25天排班: 白班>>A组 黑班>>B组
第26天排班: 白班>>C组 黑班>>A组
第27天排班: 白班>>B组 黑班>>C组
第28天排班: 白班>>A组 黑班>>B组
第29天排班: 白班>>C组 黑班>>A组
第30天排班: 白班>>B组 黑班>>C组
第31天排班: 白班>>A组 黑班>>B组
2月份排班计划
第1天排班: 白班>>C组 黑班>>A组
第2天排班: 白班>>B组 黑班>>C组
第3天排班: 白班>>A组 黑班>>B组
第4天排班: 白班>>C组 黑班>>A组
第5天排班: 白班>>B组 黑班>>C组
第6天排班: 白班>>A组 黑班>>B组
第7天排班: 白班>>C组 黑班>>A组
第8天排班: 白班>>B组 黑班>>C组
第9天排班: 白班>>A组 黑班>>B组
第10天排班: 白班>>C组 黑班>>A组
第11天排班: 白班>>B组 黑班>>C组
第12天排班: 白班>>A组 黑班>>B组
第13天排班: 白班>>C组 黑班>>A组
第14天排班: 白班>>B组 黑班>>C组
第15天排班: 白班>>A组 黑班>>B组
第16天排班: 白班>>C组 黑班>>A组
第17天排班: 白班>>B组 黑班>>C组
第18天排班: 白班>>A组 黑班>>B组
第19天排班: 白班>>C组 黑班>>A组
第20天排班: 白班>>B组 黑班>>C组
第21天排班: 白班>>A组 黑班>>B组
第22天排班: 白班>>C组 黑班>>A组
第23天排班: 白班>>B组 黑班>>C组
第24天排班: 白班>>A组 黑班>>B组
第25天排班: 白班>>C组 黑班>>A组
第26天排班: 白班>>B组 黑班>>C组
第27天排班: 白班>>A组 黑班>>B组
第28天排班: 白班>>C组 黑班>>A组

二、排班计划 两班倒

public class BlackWhite {

    /**
     * 两个班组 黑白倒班 工作12 休息12
     * 两个班组每月轮换一次黑白班: 月末那天晚班班组将继续下月第一天的白班 干24休息12
     *
     * @param args
     */
    public static void main(String[] args) {

        Date date = new Date();// 任意制定一个日期 排全年计划
        System.out.println(DateUtil.year(date) + "年排班计划");
        List<String> banzu = Arrays.asList("A组", "B组");
        List<String> ban = Arrays.asList("白班", "黑班");
        int count = 0;// 第几次排班 用来取余班组 算获取哪个班组
        for (int month = 1; month <= 12; month++) {// 按照月份排期
            System.out.println(month + "月份排班计划");
            int num = DateUtil.lengthOfMonth(month, DateUtil.isLeapYear(DateUtil.year(date)));// 获取月份天数
            for (int i = 1; i <= num; i++) {
                System.out.print("第" + i + "天排班: ");
                for (int j = 0; j < ban.size(); j++) {
                    int temp = count % banzu.size();
                    count++;
                    System.out.print(ban.get(j) + ">>" + banzu.get(temp) + " ");
                }
                if (i == num) {
                    Collections.reverse(banzu);
                }
                System.out.println();
            }
        }
    }
}

部分打印结果:

2023年排班计划
1月份排班计划
第1天排班: 白班>>A组 黑班>>B组
第2天排班: 白班>>A组 黑班>>B组
第3天排班: 白班>>A组 黑班>>B组
第4天排班: 白班>>A组 黑班>>B组
第5天排班: 白班>>A组 黑班>>B组
第6天排班: 白班>>A组 黑班>>B组
第7天排班: 白班>>A组 黑班>>B组
第8天排班: 白班>>A组 黑班>>B组
第9天排班: 白班>>A组 黑班>>B组
第10天排班: 白班>>A组 黑班>>B组
第11天排班: 白班>>A组 黑班>>B组
第12天排班: 白班>>A组 黑班>>B组
第13天排班: 白班>>A组 黑班>>B组
第14天排班: 白班>>A组 黑班>>B组
第15天排班: 白班>>A组 黑班>>B组
第16天排班: 白班>>A组 黑班>>B组
第17天排班: 白班>>A组 黑班>>B组
第18天排班: 白班>>A组 黑班>>B组
第19天排班: 白班>>A组 黑班>>B组
第20天排班: 白班>>A组 黑班>>B组
第21天排班: 白班>>A组 黑班>>B组
第22天排班: 白班>>A组 黑班>>B组
第23天排班: 白班>>A组 黑班>>B组
第24天排班: 白班>>A组 黑班>>B组
第25天排班: 白班>>A组 黑班>>B组
第26天排班: 白班>>A组 黑班>>B组
第27天排班: 白班>>A组 黑班>>B组
第28天排班: 白班>>A组 黑班>>B组
第29天排班: 白班>>A组 黑班>>B组
第30天排班: 白班>>A组 黑班>>B组
第31天排班: 白班>>A组 黑班>>B组
2月份排班计划
第1天排班: 白班>>B组 黑班>>A组
第2天排班: 白班>>B组 黑班>>A组
第3天排班: 白班>>B组 黑班>>A组
第4天排班: 白班>>B组 黑班>>A组
第5天排班: 白班>>B组 黑班>>A组
第6天排班: 白班>>B组 黑班>>A组
第7天排班: 白班>>B组 黑班>>A组
第8天排班: 白班>>B组 黑班>>A组
第9天排班: 白班>>B组 黑班>>A组
第10天排班: 白班>>B组 黑班>>A组
第11天排班: 白班>>B组 黑班>>A组
第12天排班: 白班>>B组 黑班>>A组
第13天排班: 白班>>B组 黑班>>A组
第14天排班: 白班>>B组 黑班>>A组
第15天排班: 白班>>B组 黑班>>A组
第16天排班: 白班>>B组 黑班>>A组
第17天排班: 白班>>B组 黑班>>A组
第18天排班: 白班>>B组 黑班>>A组
第19天排班: 白班>>B组 黑班>>A组
第20天排班: 白班>>B组 黑班>>A组
第21天排班: 白班>>B组 黑班>>A组
第22天排班: 白班>>B组 黑班>>A组
第23天排班: 白班>>B组 黑班>>A组
第24天排班: 白班>>B组 黑班>>A组
第25天排班: 白班>>B组 黑班>>A组
第26天排班: 白班>>B组 黑班>>A组
第27天排班: 白班>>B组 黑班>>A组
第28天排班: 白班>>B组 黑班>>A组
3月份排班计划
第1天排班: 白班>>A组 黑班>>B组
第2天排班: 白班>>A组 黑班>>B组
第3天排班: 白班>>A组 黑班>>B组
第4天排班: 白班>>A组 黑班>>B组
第5天排班: 白班>>A组 黑班>>B组
第6天排班: 白班>>A组 黑班>>B组
第7天排班: 白班>>A组 黑班>>B组
第8天排班: 白班>>A组 黑班>>B组
第9天排班: 白班>>A组 黑班>>B组
第10天排班: 白班>>A组 黑班>>B组
第11天排班: 白班>>A组 黑班>>B组
第12天排班: 白班>>A组 黑班>>B组
第13天排班: 白班>>A组 黑班>>B组
第14天排班: 白班>>A组 黑班>>B组
第15天排班: 白班>>A组 黑班>>B组
第16天排班: 白班>>A组 黑班>>B组
第17天排班: 白班>>A组 黑班>>B组
第18天排班: 白班>>A组 黑班>>B组
第19天排班: 白班>>A组 黑班>>B组
第20天排班: 白班>>A组 黑班>>B组
第21天排班: 白班>>A组 黑班>>B组
第22天排班: 白班>>A组 黑班>>B组
第23天排班: 白班>>A组 黑班>>B组
第24天排班: 白班>>A组 黑班>>B组
第25天排班: 白班>>A组 黑班>>B组
第26天排班: 白班>>A组 黑班>>B组
第27天排班: 白班>>A组 黑班>>B组
第28天排班: 白班>>A组 黑班>>B组
第29天排班: 白班>>A组 黑班>>B组
第30天排班: 白班>>A组 黑班>>B组
第31天排班: 白班>>A组 黑班>>B组
4月份排班计划
第1天排班: 白班>>B组 黑班>>A组
第2天排班: 白班>>B组 黑班>>A组
第3天排班: 白班>>B组 黑班>>A组
第4天排班: 白班>>B组 黑班>>A组
第5天排班: 白班>>B组 黑班>>A组
第6天排班: 白班>>B组 黑班>>A组
第7天排班: 白班>>B组 黑班>>A组
第8天排班: 白班>>B组 黑班>>A组
第9天排班: 白班>>B组 黑班>>A组
第10天排班: 白班>>B组 黑班>>A组
第11天排班: 白班>>B组 黑班>>A组
第12天排班: 白班>>B组 黑班>>A组
第13天排班: 白班>>B组 黑班>>A组
第14天排班: 白班>>B组 黑班>>A组
第15天排班: 白班>>B组 黑班>>A组
第16天排班: 白班>>B组 黑班>>A组
第17天排班: 白班>>B组 黑班>>A组
第18天排班: 白班>>B组 黑班>>A组
第19天排班: 白班>>B组 黑班>>A组
第20天排班: 白班>>B组 黑班>>A组
第21天排班: 白班>>B组 黑班>>A组
第22天排班: 白班>>B组 黑班>>A组
第23天排班: 白班>>B组 黑班>>A组
第24天排班: 白班>>B组 黑班>>A组
第25天排班: 白班>>B组 黑班>>A组
第26天排班: 白班>>B组 黑班>>A组
第27天排班: 白班>>B组 黑班>>A组
第28天排班: 白班>>B组 黑班>>A组
第29天排班: 白班>>B组 黑班>>A组
第30天排班: 白班>>B组 黑班>>A组
5月份排班计划
第1天排班: 白班>>A组 黑班>>B组


总结

整体思路就是:

  1. 根据排班次数对班组数量取余,得到应该执行任务的班组
  2. 根据时间获取当前年 以及当年的每月天数
  3. 每月天的序号数,对应班组则给出了排班结果
  4. 然后三班倒就是正常往下捋班组就可以了
  5. 两班倒的话,我这了采用的是翻转班组,这样就能实现: 月末那天晚班班组将继续下月第一天的白班 干24休息12

猜你喜欢

转载自blog.csdn.net/qq_32419139/article/details/132337675