first commit by ailanyin
This commit is contained in:
@ -0,0 +1,115 @@
|
||||
package com.ailanyin.common.model;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 所有实体基类
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2021/10/15 0015 上午 10:00
|
||||
*/
|
||||
public class BaseEntity implements Serializable
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "搜索值")
|
||||
private String searchValue;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy;
|
||||
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "查询参数")
|
||||
private Map<String, Object> params;
|
||||
|
||||
public String getSearchValue()
|
||||
{
|
||||
return searchValue;
|
||||
}
|
||||
|
||||
public void setSearchValue(String searchValue)
|
||||
{
|
||||
this.searchValue = searchValue;
|
||||
}
|
||||
|
||||
public String getCreateBy()
|
||||
{
|
||||
return createBy;
|
||||
}
|
||||
|
||||
public void setCreateBy(String createBy)
|
||||
{
|
||||
this.createBy = createBy;
|
||||
}
|
||||
|
||||
public Date getCreateTime()
|
||||
{
|
||||
return createTime;
|
||||
}
|
||||
|
||||
public void setCreateTime(Date createTime)
|
||||
{
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public String getUpdateBy()
|
||||
{
|
||||
return updateBy;
|
||||
}
|
||||
|
||||
public void setUpdateBy(String updateBy)
|
||||
{
|
||||
this.updateBy = updateBy;
|
||||
}
|
||||
|
||||
public Date getUpdateTime()
|
||||
{
|
||||
return updateTime;
|
||||
}
|
||||
|
||||
public void setUpdateTime(Date updateTime)
|
||||
{
|
||||
this.updateTime = updateTime;
|
||||
}
|
||||
|
||||
public String getRemark()
|
||||
{
|
||||
return remark;
|
||||
}
|
||||
|
||||
public void setRemark(String remark)
|
||||
{
|
||||
this.remark = remark;
|
||||
}
|
||||
|
||||
public Map<String, Object> getParams()
|
||||
{
|
||||
if (params == null)
|
||||
{
|
||||
params = new HashMap<>(16);
|
||||
}
|
||||
return params;
|
||||
}
|
||||
|
||||
public void setParams(Map<String, Object> params)
|
||||
{
|
||||
this.params = params;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,171 @@
|
||||
package com.ailanyin.common.model;
|
||||
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.net.InetAddress;
|
||||
import java.net.NetworkInterface;
|
||||
|
||||
/**
|
||||
* 分布式雪花ID
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2021/10/2 0008 下午 18:07
|
||||
*/
|
||||
public class IdWorker {
|
||||
/**
|
||||
* 时间起始标记点,作为基准,一般取系统的最近时间(一旦确定不能变动)
|
||||
*/
|
||||
private final static long BASE_TIME = 1288834974657L;
|
||||
/**
|
||||
* 机器标识位数
|
||||
*/
|
||||
private final static long WORKER_ID_BITS = 5L;
|
||||
/**
|
||||
* 数据中心标识位数
|
||||
*/
|
||||
private final static long DATA_CENTER_ID_BITS = 5L;
|
||||
/**
|
||||
* 机器ID最大值
|
||||
*/
|
||||
private final static long MAX_WORKER_ID = ~(-1L << WORKER_ID_BITS);
|
||||
/**
|
||||
* 数据中心ID最大值
|
||||
*/
|
||||
private final static long MAX_DATA_CENTER_ID = ~(-1L << DATA_CENTER_ID_BITS);
|
||||
/**
|
||||
* 毫秒内自增位
|
||||
*/
|
||||
private final static long SEQUENCE_BITS = 12L;
|
||||
/**
|
||||
* 机器ID偏左移12位
|
||||
*/
|
||||
private final static long WORKER_ID_LEFT = SEQUENCE_BITS;
|
||||
/**
|
||||
* 数据中心ID左移17位
|
||||
*/
|
||||
private final static long DATA_CENTER_ID_LEFT = SEQUENCE_BITS + WORKER_ID_BITS;
|
||||
/**
|
||||
* 时间毫秒左移22位
|
||||
*/
|
||||
private final static long TIME_STAMP_LEFT = SEQUENCE_BITS + WORKER_ID_BITS + DATA_CENTER_ID_BITS;
|
||||
/**
|
||||
* 序列掩码
|
||||
*/
|
||||
private final static long SEQUENCE_MASK = ~(-1L << SEQUENCE_BITS);
|
||||
/**
|
||||
* 上次生产id时间戳
|
||||
*/
|
||||
private static long LAST_TIME_STAMP = -1L;
|
||||
/**
|
||||
* 并发控制
|
||||
*/
|
||||
private long sequence = 0L;
|
||||
|
||||
/**
|
||||
* 雪花id
|
||||
*/
|
||||
private final long workerId;
|
||||
/**
|
||||
* 数据标识id部分
|
||||
*/
|
||||
private final long dataCenterId;
|
||||
|
||||
public IdWorker() {
|
||||
this.dataCenterId = getDataCenterId();
|
||||
this.workerId = getMaxWorkerId(dataCenterId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param workerId 工作机器ID
|
||||
* @param dataCenterId 序列号
|
||||
*/
|
||||
public IdWorker(long workerId, long dataCenterId) {
|
||||
if (workerId > MAX_WORKER_ID || workerId < 0) {
|
||||
throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", MAX_WORKER_ID));
|
||||
}
|
||||
if (dataCenterId > MAX_DATA_CENTER_ID || dataCenterId < 0) {
|
||||
throw new IllegalArgumentException(String.format("data center Id can't be greater than %d or less than 0", MAX_DATA_CENTER_ID));
|
||||
}
|
||||
this.workerId = workerId;
|
||||
this.dataCenterId = dataCenterId;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下一个ID
|
||||
*
|
||||
* @return Long id
|
||||
*/
|
||||
public synchronized Long nextId() {
|
||||
long timestamp = timeGen();
|
||||
if (timestamp < LAST_TIME_STAMP) {
|
||||
throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", LAST_TIME_STAMP - timestamp));
|
||||
}
|
||||
|
||||
if (LAST_TIME_STAMP == timestamp) {
|
||||
// 当前毫秒内,则+1
|
||||
sequence = (sequence + 1) & SEQUENCE_MASK;
|
||||
if (sequence == 0) {
|
||||
// 当前毫秒内计数满了,则等待下一秒
|
||||
timestamp = tilNextMillis();
|
||||
}
|
||||
} else {
|
||||
sequence = 0L;
|
||||
}
|
||||
LAST_TIME_STAMP = timestamp;
|
||||
// ID偏移组合生成最终的ID,并返回ID
|
||||
return ((timestamp - BASE_TIME) << TIME_STAMP_LEFT)
|
||||
| (dataCenterId << DATA_CENTER_ID_LEFT)
|
||||
| (workerId << WORKER_ID_LEFT) | sequence;
|
||||
}
|
||||
|
||||
private long tilNextMillis() {
|
||||
long timestamp = this.timeGen();
|
||||
while (timestamp <= LAST_TIME_STAMP) {
|
||||
timestamp = this.timeGen();
|
||||
}
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
private long timeGen() {
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 MAX_WORKER_ID
|
||||
*/
|
||||
private static long getMaxWorkerId(long dataCenterId) {
|
||||
StringBuffer mpId = new StringBuffer();
|
||||
mpId.append(dataCenterId);
|
||||
String name = ManagementFactory.getRuntimeMXBean().getName();
|
||||
if (!name.isEmpty()) {
|
||||
// GET jvmPid
|
||||
mpId.append(name.split("@")[0]);
|
||||
}
|
||||
// MAC + PID 的 hashcode 获取16个低位
|
||||
return (mpId.toString().hashCode() & 0xffff) % (MAX_WORKER_ID + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据标识id部分
|
||||
*/
|
||||
private static long getDataCenterId() {
|
||||
long id = 0L;
|
||||
try {
|
||||
InetAddress ip = InetAddress.getLocalHost();
|
||||
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
|
||||
if (network == null) {
|
||||
id = 1L;
|
||||
} else {
|
||||
byte[] mac = network.getHardwareAddress();
|
||||
id = ((0x000000FF & (long) mac[mac.length - 1])
|
||||
| (0x0000FF00 & (((long) mac[mac.length - 2]) << 8))) >> 6;
|
||||
id = id % (MAX_DATA_CENTER_ID + 1);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(" getDataCenterId: " + e.getMessage());
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,50 @@
|
||||
package com.ailanyin.common.model;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* Swagger自定义配置
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2021/10/2 0003 下午 17:50
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Builder
|
||||
public class SwaggerProperties {
|
||||
/**
|
||||
* API文档生成基础路径
|
||||
*/
|
||||
private String apiBasePackage;
|
||||
/**
|
||||
* 是否要启用登录认证
|
||||
*/
|
||||
private boolean enableSecurity;
|
||||
/**
|
||||
* 文档标题
|
||||
*/
|
||||
private String title;
|
||||
/**
|
||||
* 文档描述
|
||||
*/
|
||||
private String description;
|
||||
/**
|
||||
* 文档版本
|
||||
*/
|
||||
private String version;
|
||||
/**
|
||||
* 文档联系人姓名
|
||||
*/
|
||||
private String contactName;
|
||||
/**
|
||||
* 文档联系人网址
|
||||
*/
|
||||
private String contactUrl;
|
||||
/**
|
||||
* 文档联系人邮箱
|
||||
*/
|
||||
private String contactEmail;
|
||||
}
|
||||
Reference in New Issue
Block a user