Skip to content

自动生成字段

http://10.197.1.60:19999/indexalt text 点击右下角的包按钮,弹出如下界面: alt text 以生成 订单编号 为例: 输入表名、前缀、订单编号字段orderNo、时间间隔、编号位数 点击:立即生成,得到一条SQL语句:

SELECT IFNULL(CONCAT('XSDD',DATE_FORMAT(CURDATE(),'%y%m%d'),LPAD(MAX(RIGHT( orderNo,2))+1, 2, '0')), CONCAT('XSDD',DATE_FORMAT(CURDATE(),'%y%m%d'),'01')) as  orderNo FROM t10001_C3004 WHERE  LEFT( orderNo,10) = CONCAT('XSDD',DATE_FORMAT(CURDATE(),'%y%m%d'))

它是作用相当于 从数据库查出当前最大订单号再加1;执行2次,数据库内容相同情况下,得到的新订单号相同

常规生成订单号方式

进入 新增页面 时生成, 问题: 2个人先后进去新增页面,那2个人的 新增页面,生成相同的订单号, 1个人先提交数据;1个人后提交数据; 后提交的数据会覆盖前面提交的数据,导致数据被覆盖形式的数据丢失

修正方式

点击按钮,执行SQL插入数据库时,生成订单号,就解决了这个问题

SQL语句变更 原本的插入语句:

INSERT
VALUES(#{hosAutoIdName},#{orderNo},'新建')

用上面生成的SQL 替换 #{orderNo}得到:

INSERT
VALUES(#{hosAutoIdName},
SELECT IFNULL(CONCAT('XSDD',DATE_FORMAT(CURDATE(),'%y%m%d'),LPAD(MAX(RIGHT( orderNo,2))+1, 2, '0')), CONCAT('XSDD',DATE_FORMAT(CURDATE(),'%y%m%d'),'01')) as  orderNo FROM t10001_C3004 WHERE  LEFT( orderNo,10) = CONCAT('XSDD',DATE_FORMAT(CURDATE(),'%y%m%d')) 
,#{status})

外层加()、VALUES改成SELECT得到:

INSERT
SELECT(#{hosAutoIdName},
(SELECT IFNULL(CONCAT('XSDD',DATE_FORMAT(CURDATE(),'%y%m%d'),LPAD(MAX(RIGHT( orderNo,2))+1, 2, '0')), CONCAT('XSDD',DATE_FORMAT(CURDATE(),'%y%m%d'),'01')) as  orderNo FROM t10001_C3004 WHERE  LEFT( orderNo,10) = CONCAT('XSDD',DATE_FORMAT(CURDATE(),'%y%m%d')) )
,#{status})

用这个SQL替换原来的插入SQL即可