mysql实现表单号:表单编码+时间+表单号

背景:mysql+mybatis实现表单号;
表单规则为:表单编码+生成时间+随机号
例如:xft201911030056
1、新建表:base_coderole和base_codenumber

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `base_coderole`;
CREATE TABLE `base_coderole`  (
  `vcoderole` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '编码规则',
  `prefix` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '前缀',
  `nlength` double DEFAULT NULL COMMENT '长度',
  `meno` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '描述'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `base_codenumber`;
CREATE TABLE `base_codenumber`  (
  `Vcodetype` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '表单编码类型',
  `nmonth` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '月份',
  `maxnum` int(11) DEFAULT NULL COMMENT '目前最大号码'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

2、新建函数

CREATE DEFINER = CURRENT_USER PROCEDURE `GetFormCode`(IN codetype  varchar(40),OUT ERRNUM    VARCHAR(10) character set utf8,  OUT ERRMSG   VARCHAR(500) character set utf8)
BEGIN
	declare VARQZ varchar(500)  character set utf8;
  declare INTLENN INT;
  declare INTMAXN  INT;
  declare VMONTH VARCHAR(500);
  declare NROWS INT;
  declare 	LROWS INT;
	select count(1) into NROWS FROM  base_coderole where vcoderole = codetype ;
	IF (NROWS = 0)  THEN
      set ERRNUM = 1;
      set ERRMSG = '未配置该类型的表单';      
	ELSE
		  SELECT prefix,nlength INTO VARQZ, INTLENN FROM base_coderole WHERE vcoderole = codetype;
			select CONCAT(YEAR(CURDATE()),MONTH(CURDATE())) into VMONTH;
	    SELECT COUNT(1) INTO LROWS FROM base_codenumber WHERE Vcodetype = codetype and nmonth = VMONTH FOR UPDATE ;
	    IF (LROWS > 0) THEN
			   SELECT maxnum + 1 INTO INTMAXN FROM base_codenumber WHERE Vcodetype = codetype and nmonth = VMONTH;
				 SET ERRNUM =0;
			   SET ERRMSG = CONCAT(CONCAT(VARQZ,VMONTH),right(concat('000000000000',INTMAXN),INTLENN));
				 UPDATE base_codenumber SET maxnum = maxnum + 1 WHERE Vcodetype = codetype and nmonth = VMONTH; 
      ELSE
			   INSERT INTO base_codenumber(Vcodetype,nmonth,maxnum) VALUES(codetype,VMONTH,1);
				 SET ERRNUM =0;
			   SET ERRMSG = CONCAT(CONCAT(VARQZ,VMONTH),right(concat('000000000000',1),INTLENN));
      END IF;		    
  END IF; 
END

3、系统调用

{call GetFormCode(
        #{codetype ,mode=IN ,jdbcType=VARCHAR},
        #{ERRNUM   ,mode=OUT,jdbcType=VARCHAR},
        #{ERRMSG   ,mode=OUT,jdbcType=VARCHAR}
        )}

注意:前台页面传入在base_coderole配置的PXF字段,返回报错信息或者表单编码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值