Node.js后端如何实现按用户顺序循环分配周度自动重复事件?
事件循环分配逻辑解决方案
核心实现逻辑
首先明确两个固定基础列表:
- 按固定顺序排列的人员列表:
const staffList = ['person1', 'person2', 'person3', 'person4'],总长度记为staffTotal - 按固定顺序排列的事件列表:
const eventList = ['event1', 'event2', 'event3'],总长度记为eventTotal
分配的核心规则本质是每周整体偏移1个人员顺位,通过取模运算实现循环:
- 计算当前周偏移量:
offset = 当前周数 - 基准周数(首次上线时基准周数设为1即可) - 每个事件对应分配的人员索引:
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
相关产品推荐
相关产品推荐

