zoukankan      html  css  js  c++  java
  • 生成流水订单编号

    mysql 生成流水订单号 存储过程 订单编号

    测试订单表(test_orders):

    1. CREATE TABLE 'test_orders'(
    2.  'id' int(11) NOT NULL AUTO_INCREMENT,
    3. 'orderNo' varchar(25) NOT NULL DEFAULT '',     
    4. 'orderName' char(10) NOT NULL DEFAULT '',
    5. PRIMARY KEY ('id'),
    6. ) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8 

     

    生成订单编号的存储过程(generate_orderNo):

    BEGIN 

    DECLARE currentDate varCHAR (15) ;-- 当前日期,有可能包含时分秒
    DECLARE maxNo INT DEFAULT 0 ; -- 离现在最近的满足条件的订单编号的流水号最后5位,如:SH2013011000002的maxNo=2
    -- DECLARE l_orderNo varCHAR (25) ;-- 新生成的订单编号
    -- DECLARE oldDate DATE ;-- 离现在最近的满足条件的订单编号的日期
    DECLARE oldOrderNo VARCHAR (25) DEFAULT '' ;-- 离现在最近的满足条件的订单编号

    if num = 8 then -- 根据年月日生成订单编号
    SELECT DATE_FORMAT(NOW(), '%Y%m%d') INTO currentDate ;-- 订单编号形式:前缀+年月日+流水号,如:SH2013011000002
    elseif num = 14 then -- 根据年月日时分秒生成订单编号
    SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') INTO currentDate ; -- 订单编号形式:前缀+年月日时分秒+流水号,如:SH2013011010050700001,个人不推荐使用这种方法生成流水号
    else -- 根据年月日时分生成订单编号
    SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i') INTO currentDate ;-- 订单形式:前缀+年月日时分+流水号,如:SH20130110100900005
    end if ;

    SELECT IFNULL(orderNo, '') INTO oldOrderNo
    FROM tb_orderids
    WHERE SUBSTRING(orderNo, 3, num) = currentDate
    AND SUBSTRING(orderNo, 1, 2) = orderNamePre
    and length(orderNo) = 7 + num
    ORDER BY id DESC LIMIT 1 ; -- 有多条时只显示离现在最近的一条

    IF oldOrderNo != '' THEN
    SET maxNo = CONVERT(SUBSTRING(oldOrderNo, -5), DECIMAL) ;-- SUBSTRING(oldOrderNo, -5):订单编号如果不为‘‘截取订单的最后5位
    END IF ;
    SELECT
    CONCAT(orderNamePre, currentDate, LPAD((maxNo + 1), 5, '0')) INTO newOrderNo ; -- LPAD((maxNo + 1), 5, '0'):如果不足5位,将用0填充左边

    INSERT INTO tb_orderids (orderNo, orderName) VALUES (newOrderNo, 'testNo') ; -- 向订单表中插入数据
    -- set newOrderNo = l_orderNo;
    SELECT
    newOrderNo ;
    END

    java调用过程

    public String generate_orderNo() {

    CallableStatement cs = null;
    Connection conn = null;
    ResultSet rs = null;
    try {
    DataSource dataSource=TransactionManager.getSource();
    conn = dataSource.getConnection();
    cs = conn.prepareCall("{call generate_orderNo(?,?,?) }");
    // 设置输入参数
    cs.setInt(2, 12);//(2, 12);
    cs.registerOutParameter(3, Types.VARCHAR);
    cs.execute();
    // 设置输出参数
    String OrderID = cs.getString(3);
    return OrderID;
    } catch (Exception e) {
    e.printStackTrace();
    throw new RuntimeException("生成订单号失败");
    }

  • 相关阅读:
    GPS坐标转化距离(短距离模型公式)
    jquery ajax 同步异步的执行
    视频播放的基本原理
    [css或js控制图片自适应]
    asp.net中js和jquery调用ashx的不同方法分享,需要的朋友可以参考一下
    [转载]在网页中插入media,RealPlayer等控件
    数组的几种排序算法的实现(3)
    -- HTML标记大全参考手册[推荐]
    数组的几种排序算法的实现(2)
    数组的几种排序算法的实现(1)
  • 原文地址:https://www.cnblogs.com/wangjiagang/p/5767961.html
Copyright © 2011-2022 走看看