不同时间段的几个项目都有单据编号的需求,如果底层用的数据存储,则此方案的集成及使用非常方便,特意整理并分享出来。
创建编号定义表ticket_type
DROPTABLE IF EXISTS `ticket_type`;
CREATETABLE `ticket_type` (
`TT_CODE` varchar(8) COLLATE utf8mb4_binDEFAULT NULL COMMENT '类型编号',
`TT_NAME` varchar(20) COLLATE utf8mb4_binDEFAULT NULL COMMENT '类型名称',
`SHORT_CODE` varchar(5) COLLATE utf8mb4_binDEFAULT NULL,
`DATE_FORMAT` varchar(20) COLLATE utf8mb4_binDEFAULT NULL,
`FLOW_NO` int(11) DEFAULT NULL,
`FLOW_NO_LEN` int(255) DEFAULT NULL,
PRIMARY KEY (`TT_CODE`) USING BTREE
)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC
COMMENT='票据类型';
测试数据
创建存储过程:
DROPFUNCTION IF EXISTS GetBillNo;
CREATEFUNCTION GetBillNo (ticketCode varchar(8))
RETURNS varchar(50)
BEGIN
UPDATE ticket_type set FLOW_NO = FLOW_NO+ 1 where TT_CODE = ticketCode;
return (select concat(short_code, date_format(now(),`DATE_FORMAT`) , LPAD(right( concat('0000000000000000000000',cast(FLOW_NO aschar)),FLOW_NO_LEN),FLOW_NO_LEN,'0')) from ticket_type where tt_code =ticketCode) ;
END;
使用方法
selectGetBillNo('01')