流水号

订单生成流水号

泪湿孤枕 提交于 2019-11-29 05:38:09
-- 生成流水号 -- 创建测试表 create table test(id varchar ( 18 ), -- 流水号,日期(8位)+时间(4位)+流水号(4位) name varchar ( 10 ) -- 其他字段 ) go -- 创建生成流水号的触发器 create trigger t_insert on test INSTEAD OF insert as declare @id varchar ( 18 ), @id1 int , @head varchar ( 12 ) select * into #tb from inserted set @head = convert ( varchar , getdate (), 112 ) + replace ( convert ( varchar ( 5 ), getdate (), 108 ), ' : ' , '' ) select @id = max (id) from test where id like @head + ' % ' if @id is null set @id1 = 0 else set @id1 = cast ( substring ( @id , 13 , 4 ) as int ) update #tb set @id1 = @id1 + 1 ,id = @head +right ( '

c# 生成流水号

微笑、不失礼 提交于 2019-11-29 05:37:57
流水号由8位日期加8位顺序号组成,如2010030200000056。 先从数据库中取中最大的流水号,和此时要生成的日期比较是否在同一天,是则顺序号加1,否则重新以此时日期生成流水号 Oracle sql: select nvl(max(serialnumber),0) as maxSerialNumber from tb /// <summary> /// 生成充值流水号格式:8位日期加8位顺序号,如2010030200000056。 /// </summary> public string GetSerialNumber(string serialNumber) { if (serialNumber != "0") { string headDate = serialNumber.Substring(0, 8); int lastNumber = int.Parse(serialNumber.Substring(8)); //如果数据库最大值流水号中日期和生成日期在同一天,则顺序号加1 if (headDate == DateTime.Now.ToString("yyyyMMdd")) { lastNumber++; return headDate + lastNumber.ToString("00000000"); } } return DateTime.Now

Oracle生成流水号(SJBM_20180201_000001) 隔天重置--MYBatis集成调用

十年热恋 提交于 2019-11-29 05:37:25
使用PLSQL创建函数,存储过程动态生成流水号 1.建立关联表TB_DPS_FLOW_NO create table TB_DPS_FLOW_NO ( type_name VARCHAR2(100),--类型名 start_no VARCHAR2(100),--前缀 current_no VARCHAR2(100)--当前编号 ) 2.使用PLSQL建立函数Sjcl_GetSeriNo(前缀定长为4,若长度不同,需要更改函数中截取substr中数字,拷贝如下信息执行) CREATE OR REPLACE FUNCTION Sjcl_GetSeriNo( P_TYPE_NAME IN VARCHAR2 DEFAULT '', --类型 参数1 P_START_NO IN VARCHAR2, --前缀 参数2 P_LENGTH IN NUMBER, --得到流水号长度 参数3 V_NUMBER_COL IN VARCHAR2 -- 编码所在列名 ) RETURN VARCHAR2 --返回类型 IS V_RESULT VARCHAR2 (100) := ''; --结果 变量1 V_CURRENT_NO VARCHAR2 (100) := ''; --当前值 变量2 V_START_NO VARCHAR2(100); --前缀 变量3 V_OLD_NO VARCHAR2(50); -

Curator分布式锁之生成流水号

陌路散爱 提交于 2019-11-29 05:37:04
在分布式系统中,为了保证数据的一致性,往往需要进行同步控制,比如减库存、唯一流水号生成等。Curator对Zookeeper进行了封装,实现了分布式锁的功能,提供了线程的同步控制。同时,Curator也提供了多种锁机制。下面对通过时间戳生成流水号的场景进行逐步分析。 普通示例 先看一个简单的程序: package com.secbro.learn.curator; import java.text.SimpleDateFormat; import java.util.Date; /** * Created by zhuzs on 2017/5/4. */ public class CreateOrderNo { public static void main (String[] args) { for ( int i= 0 ; i< 10 ; i++){ SimpleDateFormat sdf = new SimpleDateFormat( "yyyyDDmm HH:mm:ss|SSS" ); String orderNo = sdf.format( new Date()); System.out.println(orderNo); } } } 以上代码通过一个循环连续打印出10个时间戳。这里没有使用多线程,但分析下面的打印结果就会发现,其实在同一时刻会生成多个相同的流水号

java生成流水号,例如(XXX201801230001)

别等时光非礼了梦想. 提交于 2019-11-29 05:36:17
生成的流水号格式:字符串+"转换后的时间串"+多少位的流水号。 /** * @Title: createCode * @Description: TODO(生成流水号[前缀+日期+流水号]) * @param prefix 前缀 * @param dateStr 日期串 * @param length 流水号长度 length要大于0 * @return * @author XXX 2018年1月8日 下午5:53:52 */ public static String createCode(String prefix,String dateStr,int length){ StringBuffer code = new StringBuffer(); if((prefix != null && !prefix.equals("")) || (dateStr != null && !dateStr.equals(""))){ if(prefix != null && !prefix.equals("")){ code.append(prefix); } if(dateStr != null && !dateStr.equals("")){ code.append(dateStr); } synchronized (code) { ApplicationContext ac=new

物联网架构成长之路(35)-利用Netty解析物联网自定义协议

坚强是说给别人听的谎言 提交于 2019-11-28 13:44:38
一、前言   前面博客大部分介绍了基于EMQ中间件,通信协议使用的是MQTT,而传输的数据为纯文本数据,采用JSON格式。这种方式,大部分一看就知道是熟悉Web开发、软件开发的人喜欢用的方式。由于我也是做web软件开发的,也是比较喜欢这种方式。阿里的物联网平台,也是推荐这种方式。但是,但是做惯硬件开发,嵌入式开发就比较喜欢用裸TCP-Socket连接。采用的是二进制协议。基于此大部分应用场合为了兼容旧设备,就需要单独开发一个TCP服务器的网关。这里使用以前学过的,也是比较流行的Netty框架。   话不多说,下面就开始了。 二、协议 定义 描述 启动符‘ @@ ’ ( 2 字节) 数据包的第 1 、 2 字节,为固定值 64 , 64 。 控制单元 业务流水号 ( 2 字节) 数据包的第 3 、 4 字节。发送 / 确认模式下,业务流水号由发送端在发送新的数据包时按顺序加一,确认方按发送包的业务流水号返回;请求 / 应答模式下,业务流水号由请求端在发送新的请求命令时按顺序加一,应答方按请求包的业务流水号返回。低字节传输在前。业务流水号是一个 2 字节的正整数,由通信双方第一次建立网络连接时确定,初始值为 0 。业务流水号由业务发起方(业务发起方指发送 / 确认模式下的发送端或者请求 / 应答模式下的请求端)独立管理。业务发起方负责业务流水号的分配和回收

生成流水号

冷暖自知 提交于 2019-11-25 20:25:42
@Component public class SerialNumberUtil { private static volatile SerialNumberUtil instance = null; private long workerId; //用ip地址最后几个字节标示 private long datacenterId = 0L; //可配置在properties中,启动时加载,此处默认先写成0 private long sequence = 0L; private long workerIdBits = 8L; //节点ID长度 private long sequenceBits = 12L; //序列号12位 private long workerIdShift = sequenceBits; //机器节点左移12位 private long datacenterIdShift = sequenceBits + workerIdBits; //数据中心节点左移14位 private long sequenceMask = -1L ^ (-1L << sequenceBits); //4095 private long lastTimestamp = -1L; public static SerialNumberUtil getInstance() { if