All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.zx.sms.common.util.SequenceNumber Maven / Gradle / Ivy

/**
 * 
 */
package com.zx.sms.common.util;

import java.io.Serializable;
import java.text.ParseException;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;

/**
 * @author huzorro([email protected])
 *
 */
public class SequenceNumber implements Serializable{
	private static final long serialVersionUID = 650229326111998772L;
	private static final String[] datePattern = new String[]{"yyyyMMddHHmmss"};
	private long nodeIds;
	private int sequenceId;
	private long timestamp;
	
	public SequenceNumber() {
		this(CachedMillisecondClock.INS.now());
	}
	
	/**
	 * 
	 * @param nodeIds
	 * @param timeMillis
	 */
	public SequenceNumber(long nodeIds, long timeMillis) {
		this(timeMillis, nodeIds, DefaultSequenceNumberUtil.getSequenceNo());
	}
	/**
	 * 
	 * @param timeMillis
	 */
	public SequenceNumber(long timeMillis) {
		this(timeMillis, 1010,  DefaultSequenceNumberUtil.getSequenceNo());
	}
	/**
	 * 
	 * @param msgIds
	 */
	public SequenceNumber(MsgId msgIds) {
		String strmsgid = msgIds.toString();
		setNodeIds(msgIds.getGateId());
		//sgip协议里时间不带年份信息,这里判断下年份信息
		String year = DateFormatUtils.format(CachedMillisecondClock.INS.now(), "yyyy");
		String t = year + strmsgid.substring(0, 10);
		
		Date d;
		try {
			d = DateUtils.parseDate(t, datePattern);
			//如果正好是年末,这个时间有可能差一年,则必须取上一年
			//这里判断取200天,防止因不同主机时间不同步造成误差
			if(d.getTime() - CachedMillisecondClock.INS.now() > 86400000L * 200){
				d = DateUtils.addYears(d, -1);
			}
		} catch (ParseException e) {
			e.printStackTrace();
			d = new Date();
		}
		setTimestamp(d.getTime());		
		setSequenceId(msgIds.getSequenceId());
	}	
	/**
	 * 
	 * @param timeMillis
	 * @param gateId
	 * @param sequenceId
	 */
	public SequenceNumber(long timeMillis, long nodeIds, int sequenceId) {
		setNodeIds(nodeIds);
		setSequenceId(sequenceId);
		setTimestamp(timeMillis);
	}
	/**
	 * @return the nodeIds
	 */
	public long getNodeIds() {
		return nodeIds;
	}
	/**
	 * @param nodeIds the nodeIds to set
	 */
	public void setNodeIds(long nodeIds) {
		this.nodeIds = nodeIds;
	}

	/**
	 * @return the sequenceId
	 */
	public int getSequenceId() {
		return sequenceId;
	}
	/**
	 * @param sequenceId the sequenceId to set
	 */
	public void setSequenceId(int sequenceId) {
		this.sequenceId = sequenceId;
	}
	
	public String getTimeString() {
		
		return DateFormatUtils.format(timestamp, "MMddHHmmss");
	}
	
	public long getTimestamp() {
		return timestamp;
	}

	public void setTimestamp(long timestamp) {
		this.timestamp = timestamp;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append(StringUtils.leftPad(String.valueOf(nodeIds), 10,'0'))
		.append(getTimeString())
		.append(StringUtils.leftPad(String.valueOf(sequenceId), 10,'0'));
		return sb.toString();
	}	
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy