first commit by ailanyin

This commit is contained in:
2021-11-29 10:00:15 +08:00
commit 0523155715
161 changed files with 19134 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}