公司产品有一个场景。
1.用户新增一个数据,用户可以自己处理这条数据,也可以委托我们来处理这条数据。
2.我们平台希望用户来委托我们处理这条数据(我们利益更大,但也可以给用户一些附加的服务)
3.为了营造这种紧迫感,数据旁边加了个倒计时。类似“xxx 分钟后将失去委托平台的权利”
老板的思路:“我们规定 3 小时内允许用户委托,3 小时后不允许委托,但是用户可能下午 4,5 点新增数据,然后就下班了。第二天上班看到数据,委托时效就过了,所以如果是在上班时间。。。倒计时生效,下班了倒计时暂停。第二天上班,倒计时继续……同时在下班后这段时间,用户依旧可以操作,只是倒计时暂停状态。”
……你们见过这种场景吗?上下班时间要暂停,包括节假日周末。。。
跟产品反馈反抗过别的方案,产品说老板不满意,一定要这样
102
Xlc 37 天前
不考虑节假日,就固定周一到周五,计时结束后,计时处提示用户点击,给弹一个“因节假日原因错过委托权力的按钮”,重新计时,可无限点,不怕滥用,用户滥用这个按钮说明他还是有使用委托的意图
|
104
whyso 37 天前
3 小时能不能换成 3 天,实现简单点,客户也没有那么强的紧迫感了
|
105
brant1 37 天前
股票不就是这样吗? 休市
|
106
lucybenz 37 天前
需求冇问题
方案一、倒计时剩余 1 小时 4 分钟 27 秒(工作时间),目前是休息时间倒计时暂停,将在 2024 年 10 月 18 日早 9 点重新开始计时; 方案二、对于下午 5 点提交的数据依然做 3h 倒计时,第二天打开系统时提醒,您的数据委托窗口期已过,由于前边窗口期包含了非工作时间,系统小秘书自动帮您重新申请了窗口时间延长 1 小时 30 分钟,以免影响您的委托需求,祝您工作顺利! 这个补偿部分 甚至可以从客户访问站点开始计算 |
107
breeze5942 37 天前
import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.Duration; public class TaskDelegateService { private static final LocalTime WORK_START_TIME = LocalTime.of(9, 0); // 上班时间 9:00 private static final LocalTime WORK_END_TIME = LocalTime.of(18, 0); // 下班时间 18:00 private static final Duration MAX_DELEGATE_DURATION = Duration.ofHours(3); // 3 小时倒计时 // 模拟记录用户操作的时间和倒计时剩余时间 private LocalDateTime taskCreatedTime; private Duration remainingTime; public TaskDelegateService(LocalDateTime taskCreatedTime) { this.taskCreatedTime = taskCreatedTime; this.remainingTime = MAX_DELEGATE_DURATION; // 初始化为 3 小时倒计时 } // 判断是否在上班时间 private boolean isWithinWorkHours(LocalDateTime dateTime) { LocalTime time = dateTime.toLocalTime(); return !time.isBefore(WORK_START_TIME) && !time.isAfter(WORK_END_TIME); } // 计算倒计时剩余时间 public void calculateRemainingTime(LocalDateTime currentTime) { // 如果任务创建时间在上班时间内,开始倒计时 if (isWithinWorkHours(taskCreatedTime)) { if (isWithinWorkHours(currentTime)) { // 两个时间都在上班时间内,计算经过的时间 Duration elapsedTime = Duration.between(taskCreatedTime, currentTime); remainingTime = remainingTime.minus(elapsedTime); } else { // 如果当前时间超过了下班时间,暂停倒计时,不减少 remainingTime Duration elapsedWorkTime = Duration.between(taskCreatedTime.toLocalTime(), WORK_END_TIME); remainingTime = remainingTime.minus(elapsedWorkTime); // 只减去上班时间内的时间 } } } // 获取当前的倒计时状态 public Duration getRemainingTime(LocalDateTime currentTime) { calculateRemainingTime(currentTime); return remainingTime; } public boolean canDelegate(LocalDateTime currentTime) { calculateRemainingTime(currentTime); return !remainingTime.isNegative() && !remainingTime.isZero(); } public static void main(String[] args) { // 模拟用户在下午 4 点创建了一条任务 LocalDateTime taskCreatedTime = LocalDateTime.of(2024, 10, 17, 16, 0); TaskDelegateService delegateService = new TaskDelegateService(taskCreatedTime); // 模拟次日上午 10 点查询倒计时剩余时间 LocalDateTime currentTime = LocalDateTime.of(2024, 10, 18, 10, 0); Duration remaining = delegateService.getRemainingTime(currentTime); System.out.println("剩余的委托时间: " + remaining.toMinutes() + " 分钟"); System.out.println("是否还可以委托: " + delegateService.canDelegate(currentTime)); } } 把你的需求直接复制给了 GPT... |
108
pangliang 36 天前
根本不需要真正的去做倒计时, 只需要做"剩余时间"计算; 如果"失去委托"真的要做, 那也只是判断 "剩余时间" > 0 而已;
|