前言
简单的排班计划,比较常见的,班组两班倒 就是黑班白班,还有三班倒的,就是干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组
总结
整体思路就是:
- 根据排班次数对班组数量取余,得到应该执行任务的班组
- 根据时间获取当前年 以及当年的每月天数
- 每月天的序号数,对应班组则给出了排班结果
- 然后三班倒就是正常往下捋班组就可以了
- 两班倒的话,我这了采用的是翻转班组,这样就能实现: 月末那天晚班班组将继续下月第一天的白班 干24休息12