• java排班算法-几班几倒


    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= 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);
    }

    以下亲测好用

    1. /**
    2. *
    3. * @param shiftArray 班次策略集合
    4. * @param teamArray 班组集合
    5. * @param betweenDay 间隔天数
    6. * @param date 排班时间
    7. * @param scheduleInfoPO
    8. */
    9. public void saveRecordInfo(List shiftArray, List teamArray, Integer betweenDay, List date, ScheduleInfoPO scheduleInfoPO) {
    10. int shiftNum = shiftArray.size();
    11. int dutyNum = teamArray.size();
    12. if(dutyNum > shiftNum){
    13. throw new InterfaceException(ResultEnum.SCHEDULE_ERROR.getCode(),ResultEnum.SCHEDULE_ERROR.getMsg());
    14. }
    15. List recordList = new ArrayList<>();
    16. int t = -1;
    17. for (Integer dayCount = 0; dayCount <= betweenDay; dayCount++) {
    18. t++;
    19. for (int i = 0; i < dutyNum; i++) {
    20. int y = getOrder(dayCount, shiftNum, dutyNum, i);
    21. TeamPO teamPO = teamArray.get(i);
    22. ScheduleResultPO result = new ScheduleResultPO();
    23. result.setTeamId(teamPO.getId());
    24. result.setTeamName(teamPO.getTeamName());
    25. ShiftConfigPO shift = shiftArray.get(y);
    26. result.setShiftId(shift.getId());
    27. result.setShiftName(shift.getShiftName());
    28. result.setScheduleId(scheduleInfoPO.getId());
    29. result.setProductId(scheduleInfoPO.getProductId());
    30. result.setScheduleName(scheduleInfoPO.getScheduleName());
    31. String startTime = shift.getStartTime();
    32. String endTime = shift.getEndTime();
    33. String workData = date.get(t);
    34. if(StringUtils.isNotBlank(startTime)){
    35. String workDataTime = workData + " " + endTime;
    36. result.setWorkDate(DateUtil.parse(workDataTime));
    37. } else {
    38. result.setWorkDate(DateUtil.parse(workData));
    39. }
    40. Date workDate = result.getWorkDate();
    41. Calendar cal = Calendar.getInstance();
    42. cal.setTime(workDate);
    43. result.setYear(cal.get(Calendar.YEAR));
    44. result.setMonth(cal.get(Calendar.MONTH)+1);
    45. result.setDay(cal.get(Calendar.DATE));
    46. // 1、如果结束时间小于开始时间,则结束时间+1天:为交接班提供两个字段
    47. result = saveWorkStartOrEndDate(result, startTime, endTime, workData);
    48. recordList.add(result);
    49. }
    50. }
    51. scheduleResultRepository.saveAll(recordList);
    52. }
    1. public static Integer getOrder(Integer dayCount, Integer classNum, Integer teamCount, Integer teamNum) {
    2. int temp = (classNum / teamCount);
    3. return (((dayCount / temp) % teamCount + teamNum) % teamCount) * temp + dayCount % temp;
    4. }

  • 相关阅读:
    [图像处理] 计算任意多边形的面积
    查询两张表的信息 可能用到两张实体类 所以可以创建一个新的实体类来装 新的实体类可以有两个表的属性,或者继承复用父类。
    阿里年薪百万程序员总结的Spring全家桶手册,见识了什么才是真的全家桶
    好玩的调度技术
    警惕!新增1本SCI被标记“On Hold”!
    spring cloud 2020.0.* 踩坑记录
    【Go入门】编程语言比较:Golang VS Python
    `算法竞赛题解` `LeetCode` 1044. 最长重复子串
    数据分析实战 | 关联规则分析——购物车分析
    0027【Edabit ★☆☆☆☆☆】Fix the Expression
  • 原文地址:https://blog.csdn.net/qq_43144711/article/details/128099592