V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
firhome
V2EX  ›  职场话题

闻所未闻的倒计时思路。。。。。

  •  1
     
  •   firhome · 6 天前 · 11774 次点击

    公司产品有一个场景。

    1.用户新增一个数据,用户可以自己处理这条数据,也可以委托我们来处理这条数据。

    2.我们平台希望用户来委托我们处理这条数据(我们利益更大,但也可以给用户一些附加的服务)

    3.为了营造这种紧迫感,数据旁边加了个倒计时。类似“xxx 分钟后将失去委托平台的权利”

    老板的思路:“我们规定 3 小时内允许用户委托,3 小时后不允许委托,但是用户可能下午 4,5 点新增数据,然后就下班了。第二天上班看到数据,委托时效就过了,所以如果是在上班时间。。。倒计时生效,下班了倒计时暂停。第二天上班,倒计时继续……同时在下班后这段时间,用户依旧可以操作,只是倒计时暂停状态。”

    ……你们见过这种场景吗?上下班时间要暂停,包括节假日周末。。。

    跟产品反馈反抗过别的方案,产品说老板不满意,一定要这样

    108 条回复    2024-10-17 19:06:30 +08:00
    1  2  
    gyp
        101
    gyp  
       5 天前
    @bthulu #14 这不是基操吗,很多 API 接口可以调用获取节假日
    Xlc
        102
    Xlc  
       5 天前
    不考虑节假日,就固定周一到周五,计时结束后,计时处提示用户点击,给弹一个“因节假日原因错过委托权力的按钮”,重新计时,可无限点,不怕滥用,用户滥用这个按钮说明他还是有使用委托的意图
    Gehrman
        103
    Gehrman  
       5 天前
    @pkoukk 这个依赖后台不就行了
    whyso
        104
    whyso  
       5 天前
    3 小时能不能换成 3 天,实现简单点,客户也没有那么强的紧迫感了
    brant1
        105
    brant1  
       5 天前
    股票不就是这样吗? 休市
    lucybenz
        106
    lucybenz  
       5 天前
    需求冇问题

    方案一、倒计时剩余 1 小时 4 分钟 27 秒(工作时间),目前是休息时间倒计时暂停,将在 2024 年 10 月 18 日早 9 点重新开始计时;

    方案二、对于下午 5 点提交的数据依然做 3h 倒计时,第二天打开系统时提醒,您的数据委托窗口期已过,由于前边窗口期包含了非工作时间,系统小秘书自动帮您重新申请了窗口时间延长 1 小时 30 分钟,以免影响您的委托需求,祝您工作顺利! 这个补偿部分 甚至可以从客户访问站点开始计算
    breeze5942
        107
    breeze5942  
       5 天前
    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...
    pangliang
        108
    pangliang  
       5 天前
    根本不需要真正的去做倒计时, 只需要做"剩余时间"计算; 如果"失去委托"真的要做, 那也只是判断 "剩余时间" > 0 而已;
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3228 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:47 · PVG 19:47 · LAX 04:47 · JFK 07:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.