public static void main(String[] args) { String array = ""; //班组 String[] dutyArr = {"A组","B组","C组","D组","E组"}; int dutyNum=dutyArr.length; //日期 int days = getDaysOfMonth(new Date()); //班次 String[] classArr = {"早班","中班","晚班","休息","休息"}; int classNum = classArr.length; int allClass=0; for (int i=0; i<days; i++) { for(int j =0; j< classNum;j++){ int a = i % dutyNum; if(j+a < dutyNum) { System.out.println(i + 1 + "号排班:"+ dutyArr[j+a]); } else if(j+a >= dutyNum){ System.out.println(i + 1 + "号排班:"+ dutyArr[(j+a)-dutyNum]); } } } } /** * 获取某个月的天数 * @param date * @return */ public static int getDaysOfMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); }
以下亲测好用
/**
*
* @param shiftArray 班次策略集合
* @param teamArray 班组集合
* @param betweenDay 间隔天数
* @param date 排班时间
* @param scheduleInfoPO
*/
public void saveRecordInfo(List<ShiftConfigPO> shiftArray, List<TeamPO> teamArray, Integer betweenDay, List<String> date, ScheduleInfoPO scheduleInfoPO) {
int shiftNum = shiftArray.size();
int dutyNum = teamArray.size();
if(dutyNum > shiftNum){
throw new InterfaceException(ResultEnum.SCHEDULE_ERROR.getCode(),ResultEnum.SCHEDULE_ERROR.getMsg());
}
List<ScheduleResultPO> recordList = new ArrayList<>();
int t = -1;
for (Integer dayCount = 0; dayCount <= betweenDay; dayCount++) {
t++;
for (int i = 0; i < dutyNum; i++) {
int y = getOrder(dayCount, shiftNum, dutyNum, i);
TeamPO teamPO = teamArray.get(i);
ScheduleResultPO result = new ScheduleResultPO();
result.setTeamId(teamPO.getId());
result.setTeamName(teamPO.getTeamName());
ShiftConfigPO shift = shiftArray.get(y);
result.setShiftId(shift.getId());
result.setShiftName(shift.getShiftName());
result.setScheduleId(scheduleInfoPO.getId());
result.setProductId(scheduleInfoPO.getProductId());
result.setScheduleName(scheduleInfoPO.getScheduleName());
String startTime = shift.getStartTime();
String endTime = shift.getEndTime();
String workData = date.get(t);
if(StringUtils.isNotBlank(startTime)){
String workDataTime = workData + " " + endTime;
result.setWorkDate(DateUtil.parse(workDataTime));
} else {
result.setWorkDate(DateUtil.parse(workData));
}
Date workDate = result.getWorkDate();
Calendar cal = Calendar.getInstance();
cal.setTime(workDate);
result.setYear(cal.get(Calendar.YEAR));
result.setMonth(cal.get(Calendar.MONTH)+1);
result.setDay(cal.get(Calendar.DATE));
// 1、如果结束时间小于开始时间,则结束时间+1天:为交接班提供两个字段
result = saveWorkStartOrEndDate(result, startTime, endTime, workData);
recordList.add(result);
}
}
scheduleResultRepository.saveAll(recordList);
}
public static Integer getOrder(Integer dayCount, Integer classNum, Integer teamCount, Integer teamNum) {
int temp = (classNum / teamCount);
return (((dayCount / temp) % teamCount + teamNum) % teamCount) * temp + dayCount % temp;
}