我正在开发一个需要处理过期航空里程的应用程序。里程可以使用,但如果在特定日期之前未使用,它们将过期。我想确保我的里程数过期,但如果它们已被使用,则不要过期。因此,我必须在里程到期之前检查在给定日期范围内是否使用了足够的里程。以下是我的初步想法:
有一个包含以下列的里程表:
miles_expire
标志为真) miles_type
设置为过期 如果我每次从特定用户帐户添加、使用或过期里程时都有记录,我想我可以这样计算过期里程:
miles_expire
标志设置为 true、expiration_date
在当前日期之前、processed
标志设置为 false 的记录的日期。这将获取所有应该过期的里程的记录。 expiration_date
。 expiration_date
值,获取该日期范围内所有已用里程的列表。 processed
范围内的所有记录的 expiration_date
标志设置为 true。这些里程要么已过期,要么在使用时被忽略。 看来这符合以下要求:
我还需要考虑其他因素吗?这会有效地使里程过期吗?
最佳答案
由于多种原因,您的方法将不起作用。最容易解释的可能是:
请注意,这可能只有一个记录。如果您经常运行检查,实际上通常只有一个记录。为简单起见,让我们假设每天最多有一条记录过期(如果超过一条记录过期,您的算法仍然失败,只是更难解释)。
你会在这里得到相同的日期,因为只有一个记录。
由于 first 和 last 相等,因此没有范围,因此在该范围内永远不会使用英里。
由于上一步没有返回任何行,总和为零,因此您将始终过期“过期里程”和“0”之间的差值。即使里程已经使用。
这个过程会重复。
总体而言,您的设计似乎不必要地复杂化。我只会为每个用户存储一个未使用的代金券列表。当他们付款时,使用的代金券被标记为已使用。如果凭证使用了一半,则将其标记为已使用,并发出有效期相同但金额较小的新凭证。如果凭证多于需要,则先用完即将到期的凭证,最后使用未到期的凭证。已过期的优惠券永远无法用于付款,因此您无需执行任何操作即可使其过期。
所以总而言之:您不需要使任何优惠券过期,只需确保付款代码不允许使用过期或已使用的优惠券。