为了便于查询,我们要给一个零售单生成零售单号SN。如何设计生成唯一的、并且能够与收银机器相关的SN。本文将介绍:“根据时间、收银机ID和随机数生成零售单号”、“根据零售单号生成退货单号”。
1、根据时间、收银机ID和随机数生成零售单号。
我们用一张数据库表t_pos存储着所有收银机器的编号,所以一个收银机对应着一个主键ID:
/** 根据当前时间、pos_id和随机数生成SN号 */
public static String generateRetailTradeSN(int pos_id) {
SimpleDateFormat sdf = new SimpleDateFormat(BaseAction.DATE_FORMAT_RetailTradeSN);
String dayStr = sdf.format(new Date());
StringBuffer sb = null;
try {
Thread.sleep(1000);
sb = new StringBuffer();
sb.append("LS").append(dayStr);
for (int i = 1; i <= 4 - String.valueOf(pos_id).length(); i++) {
sb.append("0");
}
sb.append(String.valueOf(pos_id)).append(String.valueOf((int) (Math.floor((Math.random() * 9 + 1) * 1000))));
return sb.toString();
} catch (Exception e) {
System.out.println("生成零售单SN失败:" + e.getMessage());
return null;
}
}
2、根据零售单号生成退货单号。
在存储过程里,插入退货零售单时,根据原零售单号,拼接”_1”生成退货单号:
SELECT F_SN, F_VipID INTO sSN, iVipID FROM t_retailtrade WHERE F_ID = iSourceID;
SELECT CONCAT(sSN, '_', 1) INTO sSN;