代码之家  ›  专栏  ›  技术社区  ›  spinon

需要信用到期算法的帮助吗

  •  7
  • spinon  · 技术社区  · 14 年前

    所以我被困住了。我正在研究一个过期的信用体系。类似于信用卡里程,但不完全相同。顺便说一句,我很抱歉前面的书,但我需要添加足够的细节,以帮助了解整个画面。

    我需要的是一个系统,在这个系统中,用户可以累积积分来进行活动。但他们也可以把这些学分花在活动上。如果信用证未被使用,应在30天后到期。我似乎被困在如何准确计算这批将运行每晚。任何一种语言的任何想法都会非常感激,因为我似乎只停留在一个小细节上,我绕不开。以下是数据示例:

    7/1:+5-用户注册

    7/2:-3-用户购买活动
    7/3:+5-用户与系统交互

    因此,在这一点上,用户已收到15学分,并已花了3。留给他总共12学分(至少我把基础数学记下来了:P)

    我要补充的是,目前我们正在考虑两个字段:最后一个处理,下一个处理。因此,假设是新的注册,这些值是:

    上次处理日期:7/1
    下次加工日期:8/1

    所以现在8/1出现了。批处理开始并查看所有超过30天的信用。在这一点上是5。

    这就是它开始变得模糊的地方。

    那就是我被困的地方。

    我们正在考虑为过期的信用证写一个借方记录,这样我们就可以跟踪它们,但是很难看到我如何在这个计算中使用它。

    编辑:

    假设一个用户在某一天花了10个学分。但该批正在考虑的过期学分只累积到5个。那么他应该还有5个学分没有过期,因为他花了超过一个过期。所以旗子不起作用,因为我们会跳过那5个额外的学分。希望这有意义?

    7 回复  |  直到 13 年前
        1
  •  2
  •   Andy T    14 年前

    假设您每天都运行此批处理,您可以有一个表来跟踪他们获得的所有学分和使用的学分(负学分)。

    在下个月初,你的工作是简单地找出哪些学分赚取的第一天没有花在这个月。

    第一天获得的学分数-他们上个月花费的学分。如果数字是正数,他们有一些信用需要过期。所以简单地在表中添加一条信用为负的记录。这将使未使用的学分归零。

    第二天,重复这个过程,看看他们在第二天获得了多少学分减去他们在上个月获得的所有学分之和,同时考虑到你在前一天创建的负学分记录。

        2
  •  3
  •   Anon.    14 年前

    因此,当用户注册时,他们有:

    5 credits expiring on 8/1
    

    第二天与系统交互后:

    5 credits expiring on 8/1
    5 credits expiring on 8/2
    

    买了东西之后:

    2 credits expiring on 8/1
    5 credits expiring on 8/2
    

    等等。

        3
  •  3
  •   Maciej Hehl    14 年前

    为系统的每个用户保留一个数组,该数组存储有关该用户接下来连续30天可获得的信用额度的信息

    8  | 
    7  | | 
    6  | | | | 
    5  | | | | | | | | | | |
    4  | | | | | | | | | | | | | | | | |
    3  | | | | | | | | | | | | | | | | | | | | | | | | 
    2  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    1  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
      -------------------------------------------------------------
      | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
       ^ ^                           ^          
       |  \_                         |
      today tomorrow             in 15 days
    

    每次用户获得一些学分时,您都会根据获得的学分数增加所有天数的金额。例如,如果用户获得了2个学分,则表将更改如下。就像把整个图表都抬高一样。

    10 | 
    9  | | 
    8  | | | | 
    7  | | | | | | | | | | |
    6  | | | | | | | | | | | | | | | | |
    5  | | | | | | | | | | | | | | | | | | | | | | | | 
    4  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    3  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    2  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    1  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
      -------------------------------------------------------------
      | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
       ^ ^                           ^          
       |  \_                         |
      today tomorrow             in 15 days
    

    7  | | | | | | | | | | |
    6  | | | | | | | | | | | | | | | | |
    5  | | | | | | | | | | | | | | | | | | | | | | | | 
    4  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    3  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    2  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    1  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
      -------------------------------------------------------------
      | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
       ^ ^                           ^          
       |  \_                         |
      today tomorrow             in 15 days
    

    每天你都把图表移到左边来模拟过期的信用卡。用户明天将有以下金额

    7  | | | | | | | | | |
    6  | | | | | | | | | | | | | | | |
    5  | | | | | | | | | | | | | | | | | | | | | | | 
    4  | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    3  | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    2  | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
    1  | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
      -------------------------------------------------------------
      | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
       ^ ^                           ^          
       |  \_                         |
      today tomorrow             in 15 days
    
        4
  •  1
  •   G__    14 年前

    在支出上加个旗子怎么样?如果未设置该标志,则可以在必要时将该支出包含在批中。如果您确实使用支出来抵消到期日,则设置标志。下次通过时,您将忽略该支出,因为标志已设置。

        5
  •  1
  •   Heath Hunnicutt    14 年前

    使用借方记录记录正常支出。当每月批处理作业运行时,它可以计算小于或等于过期信用的总借方。如果有信用证到期,只需插入适当的借记记录(适当==在您的应用程序中取消超额)。这样,任何只检查贷项和借项的“运行总计”代码都将达到批处理代码预期的余额。

        6
  •  0
  •   Julian    14 年前

    解决这个问题的一种方法是只存储事务,而不存储余额。然后你总是在需要的时候实时计算余额。数据如下:

    Date : Amount : Expiries
    7/1 : +5 : 7/31
    7/2 : +5 : 8/1
    7/2 : -3 : never
    7/3 : +5 : 8/2
    

    任何时候的余额只是所有尚未到期的交易的总和。不需要运行任何批处理过程。

        7
  •  0
  •   geekuality    13 年前

    关于朱利安的回答(我还不能评论),我正在处理同样的问题,朱利安的方法不会起作用,因为这会导致帐户能够变成负数。

    如果用户在一个月内没有使用该服务,那么8/4的账户余额将为-3,一个值为5的活动将使余额达到2,而不是应该的5。