在java中生成序列优惠券代码

时间:2016-03-09 05:14:04

标签: java

我正在尝试按以下格式创建优惠券:

{month} / {date} / {serialNumber}

我从用户界面选择月份和日期,所以我得到了正确的月份和日期,但我的问题是:
serialNumber应自动递增和
它应该从零开始重新开始

我试过的是:

private static Integer srNumber = 000;
public Coupon CouponCreation(Coupon coupon) {

    String voucherNumber;

    srNumber += srNumber + 001;

    voucherNumber = (coupon.getTransactionDate().getMonth() + 1)
            + "/" + coupon.getTransactionDate().getDate()
            + "/" + srNumber;

    coupon.setVoucherNumber(voucherNumber);

    return coupon;
}

Class 优惠券包含所有getter和setter方法
在上面的代码中我想生成srNumber,如:001,002,003等 但如果coupon.getTransactionDate().getDate()发生了变化,那么srNumber将从001开始,002和凭证编号应为
08/02/001 08/02/002 等等

2 个答案:

答案 0 :(得分:2)

MySQL方法

表格定义

CREATE TABLE v (
  month int,
  day int,
  orderNum int);

一些启动值

INSERT INTO v VALUES (1,1,1);
INSERT INTO v VALUES (1,1,2);
INSERT INTO v VALUES (1,1,3);
INSERT INTO v VALUES (1,2,1);
INSERT INTO v VALUES (1,2,2);
INSERT INTO v VALUES (1,3,1);

现在使用自动生成

输入值
INSERT INTO v SELECT month,day,COUNT(orderNum)+1 FROM v WHERE month=1 AND day=1;
INSERT INTO v SELECT month,day,COUNT(orderNum)+1 FROM v WHERE month=1 AND day=1;
INSERT INTO v SELECT month,day,COUNT(orderNum)+1 FROM v WHERE month=1 AND day=1;

但如果有更多的专栏,上面的例子将会让我们的生活陷入噩梦。

INSERT INTO v VALUES(1,1,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=1));
INSERT INTO v VALUES(1,2,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=2));
INSERT INTO v VALUES(1,3,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=3));
INSERT INTO v VALUES(1,4,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=4));
INSERT INTO v VALUES(1,4,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=4));
INSERT INTO v VALUES(1,1,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=1));

上面的例子就是你要找的东西。不要忘记指定表别名(上例中的v2),否则插入将失败。

如果您现在执行

SELECT * FROM v ORDER BY month, day

然后你会看到,它也适用于每天开始新的序列

如果您将这些代码存储为单个字符串,那么您必须执行一些字符串spiting来完成它。为了避免这种情况,我建议将其更改为3个字段以使其更好,然后将其连接到应用程序中的字符串

答案 1 :(得分:0)

任何简单的方法都是创建一个2D int数组,12x31,每个单元格都会存储一个序列号。因此,当您获得日期时,请将其转换为日期和月份,并使用序列号和增量。因此,如果您的优惠券是1月10日。您可以serialArray[0][10]获取序列号。在分配凭证后增加。

如果您希望自己可以制作3D,那么这一年也是如此。

对于2D,月份和日期,它看起来像假设,getMonth()和getDate()返回ints:

int[][] serialArray = new int [12][31];

int srNumber=serialArray[coupon.getTransactionDate().getMonth()][coupon.getTransactionDate().getDate()]++;

串行数组将在程序开始时初始化为0。或许你甚至可以读到一个文件。如果您想为每个日期分别使用单独的序列代码,那就是这样。

修改 此代码适用于您的凭证将返回日期和日期之间的第四个并且您不想重置序列号。如果您只是想在每次遇到新日期时重置序列号。您可以存储上一个日期。

此外,你可以添加第三个维度以保持年份[YY] [MM] [DD]。