You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js后端如何实现按用户顺序循环分配周度自动重复事件?

事件循环分配逻辑解决方案

核心实现逻辑

首先明确两个固定基础列表:

  • 按固定顺序排列的人员列表:const staffList = ['person1', 'person2', 'person3', 'person4'],总长度记为staffTotal
  • 按固定顺序排列的事件列表:const eventList = ['event1', 'event2', 'event3'],总长度记为eventTotal

分配的核心规则本质是每周整体偏移1个人员顺位,通过取模运算实现循环:

  1. 计算当前周偏移量:offset = 当前周数 - 基准周数(首次上线时基准周数设为1即可)
  2. 每个事件对应分配的人员索引:staffIndex = (事件在eventList中的索引 - offset + staffTotal) % staffTotal

加staffTotal是为了避免出现负数,保证取模结果永远是合法的索引值

Node.js 后端实现代码示例

// 1. 基础配置(可存在配置文件或数据库中,支持动态修改)
const CONFIG = {
  staffList: ['person1', 'person2', 'person3', 'person4'],
  eventList: ['event1', 'event2', 'event3'],
  baseWeek: 1 // 人员列表最后一次调整对应的周数,人员变动时更新该值即可保证分配顺序不乱
}

/**
 * 生成指定周的事件分配结果
 * @param {number} currentWeek 当前周数
 * @returns {Array} 分配结果数组
 */
function generateWeeklyAssign(currentWeek) {
  const { staffList, eventList, baseWeek } = CONFIG
  const staffTotal = staffList.length
  const offset = currentWeek - baseWeek
  // 遍历所有事件生成分配结果
  return eventList.map((event, eventIndex) => {
    const staffIndex = (eventIndex - offset + staffTotal) % staffTotal
    return {
      week: currentWeek,
      eventName: event,
      assignedStaff: staffList[staffIndex]
    }
  })
}

// 测试示例
console.log(generateWeeklyAssign(1))
// 输出:[
//  { week:1, eventName:'event1', assignedStaff:'person1' },
//  { week:1, eventName:'event2', assignedStaff:'person2' },
//  { week:1, eventName:'event3', assignedStaff:'person3' }
// ]
console.log(generateWeeklyAssign(2))
// 输出:[
//  { week:2, eventName:'event1', assignedStaff:'person4' },
//  { week:2, eventName:'event2', assignedStaff:'person1' },
//  { week:2, eventName:'event3', assignedStaff:'person2' }
// ]
console.log(generateWeeklyAssign(3))
// 输出:[
//  { week:3, eventName:'event1', assignedStaff:'person3' },
//  { week:3, eventName:'event2', assignedStaff:'person4' },
//  { week:3, eventName:'event3', assignedStaff:'person1' }
// ]

业务落地建议

  • 可以选择预生成未来N周的分配结果存入数据库,也可以每次前端请求时动态计算返回,两种方式都兼容现有逻辑
  • 如果后续需要支持人员新增/删除/顺序调整,只要同步更新baseWeek为调整生效的周数,就不会打乱之前已生效的分配结果
  • 周数计算可以直接用当前日期和项目上线日期做差,除以7取整得到,不用额外依赖定时任务存周数字段

内容的提问来源于stack exchange,提问作者Vyash Bhawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:24:02