我正在开发一个需要处理到期航空里程的应用程序。可以使用里程,但如果它们在特定日期之前未使用,则它们将过期。我想确保我到达适当的里程数,但如果已经使用过,则不会使它们失效。因此,我必须检查在给定的日期范围内是否已使用足够的里程数。以下是我最初的想法:
拥有包含以下列的里程表:
miles_expire
标志为真) miles_type
设置为过期时适用 如果我每次从特定用户帐户添加,使用或过期时都有记录,我想我可以计算过期里程:
miles_expire
标志设置为true,expiration_date
在当前日期之前,processed
标志设置为false的记录的日期。这将获得应该过期的所有里程的记录。 expiration_date
。expiration_date
值,获取该日期范围内所有已用里程的列表。processed
范围内的所有记录设置expiration_date
标志为true。这些里程已经过期或被忽略,因为它们已被使用。这似乎符合以下要求:
我还需要考虑其他因素吗?这可以正常到期吗?
答案 0 :(得分:4)
由于多种原因,您的方法无效。最容易解释的可能是:
对于每个用户,获取miles_expire标志设置为true,expiration_date在当前日期之前,并且处理过的标志设置为false的记录的日期。这将获得应该过期的所有里程的记录。
请注意,这可能只是一条记录。如果您经常进行检查,实际上通常只有一条记录。让我们假设为了简单起见,每天最多一条记录到期(如果超过一条记录到期,你的算法仍然失败,那就更难解释了。)
从上一个查询中获取第一个和最后一个expiration_date。
你会在这里得到相同的日期,因为只有一条记录。
使用上一步中的第一个和最后一个expiration_date值,获取该日期范围内所有已用里程的列表。
由于第一个和最后一个相等,因此没有范围,所以在该范围内永远不会使用里程。
如果上一步的使用里程总和小于到期点的总和,则使差异到期。如果使用的里程相等或更大,则无需过期。
由于上一步没有返回任何行,因此总和为零,因此您将始终使“过期英里数”和“0”之间的差异到期。即使已使用里程。
此过程将重复。
总体而言,您的设计似乎不必要地编译。我只会为每个用户存储一张未使用的优惠券清单。当他们付款时,使用的凭证被标记为已使用。如果凭证已被使用一半,则将其标记为已使用,并且发出具有相同到期日期但具有较小金额的新凭证。如果有更多的凭证超过需要,很快到期的凭证将首先用完,并且最后使用非到期凭证。已过期的优惠券永远不会用于付款,因此您无需采取任何措施使其过期。
总而言之:您不需要使任何优惠券到期,只需确保支付代码不允许使用已过期或已使用的优惠券。
答案 1 :(得分:0)
我认为您不必担心在库存应用程序中首先使用哪些里程;它们要么已过期(基于到期日期)。关键是:还剩多少里程?过期里程,就像用过的里程一样,就像是对帐户的借记(只有您不需要单独的交易来表示到期,您只能将它们从用于计算当前余额的公式中排除。)。