关于当月积分在下一年当月月末清零问题

规则

积分可累积,不论通过何种方式获得的积分,自发放之日起生效,有效期至下一年当月的月末,每月1日更新兑换积分。

数据库

id user_id number remark created_at
1 1 100 返利 2020-01-05 09:23:17
2 1 300 返利 2020-02-05 09:13:17
3 1 -350 支付 2020-02-05 09:13:17

问题

用户积分是根据上面的表number的总和作为用户积分,我部署了一个定时器在每月的月初清除上一年上一个月月末的积分,并往数据库中插入一条数量为负数的记录。问题在于我如何得到这个时候需要清除多少积分?因为存在积分在这个月的其他月份被使用的情况。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 33
你看我吊吗啊

产生积分的时候计算出积分过期的那一天,就行了。

2年前 评论
chenxiang 2年前
你看我吊吗啊 (作者) 2年前
axunl (楼主) 2年前
周小云 2年前
axunl (楼主) 2年前
你看我吊吗啊 (作者) 2年前
axunl (楼主) 2年前
周小云 2年前
周小云 2年前
chenxiang 2年前

积分增加的时候,记录当月的积分余额

积分减少的时候(使用积分)优先去操作最老的积分

1号记录上个月的积分余额

1号清理一年前上个月的积分(如有)

2年前 评论
axunl (楼主) 2年前
skys215 (作者) 2年前
axunl (楼主) 2年前
skys215 (作者) 2年前
orange1994

加个有效期

2年前 评论

消耗积分的时候,在增加积分的记录上(倒序)打标识

2年前 评论

你的原始数据一定要详细啊 用了多少 用在哪了 啥时候没得 是因为到期没得 还是使用没得 不然以后会麻烦的 原始数据 需要详细 不能直接删除吧

2年前 评论
周小云 (作者) 2年前
axunl (楼主) 2年前
周小云 (作者) 2年前
axunl (楼主) 2年前
周小云 (作者) 2年前
axunl (楼主) 2年前
周小云 (作者) 2年前
周小云 (作者) 2年前
chowjiawei

2个 字段 今年积分字段 明年积分字段 今年的积分用完就去用明年的积分 清空的时候清空今年的积分就可以了 上面的方法都太复杂了

2年前 评论

以楼主给出表结构 如积分以有效期靠前的先消费 则

if (上一年上一个月所得积分 > 消费积分(上一年上一月至今日) ){
    待清除的积分 = 上一年上一个月所得积分 - 消费积分(上一年上一月至今日)
}
2年前 评论

提个思路, 积分表加个字段: 可用积分, 每次扣积分的时候从最老的记录开始扣可用积分

2年前 评论
        //获取昨年今天到今年今天这一年增加的积分总数
        $yearNum = IntergalLog::whereBetween("created_at",[date("Y-m-d",strtotime("-1year")),date("Y-m-d")])
            ->sum("num");
        //用户当前剩余积分
        $userLifeNum = 0;
        $endNum = 0;//该过期的积分
        //剩余积分大于这一年获取积分,减去获取该过期的积分
        if ($userLifeNum > $yearNum){
            $endNum = bcsub($userLifeNum,$yearNum,2);
        }
        echo $endNum;
2年前 评论

加个已使用积分字段,在积分使用时从最早的开始扣除,在加个过期时间字段 到时候 过期的时候不论用没用都直接清除,这样也不会影响后面的积分

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!