Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gdtel-gztel-school-center
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
吴学德
gdtel-gztel-school-center
Commits
13585175
Commit
13585175
authored
Apr 03, 2020
by
彭祥礼
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
对订单进去保存和提交订单到智能平台上,后端
parent
f1792ffc
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
104 additions
and
1 deletions
+104
-1
common/src/main/java/com/winsun/bean/Constant.java
+1
-1
common/src/main/java/com/winsun/bean/OrderView.java
+2
-0
common/src/main/java/com/winsun/utils/ProduceIdUtil.java
+101
-0
No files found.
common/src/main/java/com/winsun/bean/Constant.java
View file @
13585175
...
...
@@ -27,7 +27,7 @@ public class Constant {
public
final
static
String
ZHANGSHIKEY
=
"3df143292455bfea88bc613c53004d36"
;
//智能平台提供的正式key
// public final static String ZHENGSHIAUCCON = "xiaoykd"; //智能平台提供的正式账号
// public final static String ZHANGSHIKEY = "d345040accff0421d03f760a03e5cbd9"; //智能平台提供的正式key
public
final
static
String
ZHANGSHIURL
=
"https://ismart.mini189.cn/api/"
;
//智能平台提供的正式key
public
final
static
String
ZHANGSHIURL
=
"https://ismart
bak
.mini189.cn/api/"
;
//智能平台提供的正式key
public
final
static
String
PRODUCTCATEGORY
=
"单宽带"
;
//只能平台提供的key
// public final static String TOMCATURL = "http://183.57.78.132:8080"; //Linux外网服务器地址
// public final static String INTRANETURL = "http://10.3.1.21:8080"; //Linux内网服务器地址
...
...
common/src/main/java/com/winsun/bean/OrderView.java
View file @
13585175
...
...
@@ -3,6 +3,7 @@ package com.winsun.bean;
import
com.baomidou.mybatisplus.annotations.TableId
;
import
com.baomidou.mybatisplus.annotations.TableName
;
import
com.baomidou.mybatisplus.enums.IdType
;
import
lombok.Data
;
import
java.util.Date
;
import
java.io.Serializable
;
...
...
@@ -13,6 +14,7 @@ import java.io.Serializable;
* @author makejava
* @since 2020-02-18 16:56:54
*/
@Data
@TableName
(
"order_view"
)
public
class
OrderView
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
61996751798804758L
;
...
...
common/src/main/java/com/winsun/utils/ProduceIdUtil.java
0 → 100644
View file @
13585175
package
com
.
winsun
.
utils
;
/**
* @Author xuede
* @Date 2020/2/5 22:58
* @Version 1.0
*/
public
class
ProduceIdUtil
{
private
long
workerId
;
private
long
datacenterId
;
private
long
sequence
=
0L
;
private
long
twepoch
=
1580914838112L
;
// Thu, 04 Nov 2020-02-05 23:00:00 GMT 标记时间 用来计算偏移量,距离当前时间不同,得到的数据的位数也不同
private
long
workerIdBits
=
5L
;
// 物理节点ID长度
private
long
datacenterIdBits
=
5L
;
// 数据中心ID长度
private
long
maxWorkerId
=
-
1L
^
(-
1L
<<
workerIdBits
);
// 最大支持机器节点数0~31,一共32个
private
long
maxDatacenterId
=
-
1L
^
(-
1L
<<
datacenterIdBits
);
// 最大支持数据中心节点数0~31,一共32个
private
long
sequenceBits
=
12L
;
// 序列号12位, 4095,同毫秒内生成不同id的最大个数
private
long
workerIdShift
=
sequenceBits
;
// 机器节点左移12位
private
long
datacenterIdShift
=
sequenceBits
+
workerIdBits
;
// 数据中心节点左移17位
private
long
timestampLeftShift
=
sequenceBits
+
workerIdBits
+
datacenterIdBits
;
// 时间毫秒数左移22位
private
long
sequenceMask
=
-
1L
^
(-
1L
<<
sequenceBits
);
// 用于和当前时间戳做比较,以获取最新时间
private
long
lastTimestamp
=
-
1L
;
//成员类,SnowFlakeUtil的实例对象的保存域
private
static
class
IdGenHolder
{
private
static
final
ProduceIdUtil
instance
=
new
ProduceIdUtil
();
}
//外部调用获取SnowFlakeUtil的实例对象,确保不可变
public
static
ProduceIdUtil
get
(){
return
IdGenHolder
.
instance
;
}
//初始化构造,无参构造有参函数,默认节点都是0
public
ProduceIdUtil
()
{
this
(
0L
,
0L
);
}
//设置机器节点和数据中心节点数,都是 0-31
public
ProduceIdUtil
(
long
workerId
,
long
datacenterId
)
{
if
(
workerId
>
maxWorkerId
||
workerId
<
0
)
{
throw
new
IllegalArgumentException
(
String
.
format
(
"worker Id can't be greater than %d or less than 0"
,
maxWorkerId
));
}
if
(
datacenterId
>
maxDatacenterId
||
datacenterId
<
0
)
{
throw
new
IllegalArgumentException
(
String
.
format
(
"datacenter Id can't be greater than %d or less than 0"
,
maxDatacenterId
));
}
this
.
workerId
=
workerId
;
this
.
datacenterId
=
datacenterId
;
}
//线程安全的id生成方法
@SuppressWarnings
(
"all"
)
public
synchronized
long
nextId
()
{
//获取当前毫秒数
long
timestamp
=
timeGen
();
//如果服务器时间有问题(时钟后退) 报错。
if
(
timestamp
<
lastTimestamp
)
{
throw
new
RuntimeException
(
String
.
format
(
"Clock moved backwards. Refusing to generate id for %d milliseconds"
,
lastTimestamp
-
timestamp
));
}
//如果上次生成时间和当前时间相同,在同一毫秒内
if
(
lastTimestamp
==
timestamp
)
{
//sequence自增,因为sequence只有12bit,所以和sequenceMask相与一下,去掉高位
sequence
=
(
sequence
+
1
)
&
sequenceMask
;
//判断是否溢出,也就是每毫秒内超过4095,当为4096时,与sequenceMask相与,sequence就等于0
if
(
sequence
==
0
)
{
//自旋等待到下一毫秒
timestamp
=
tilNextMillis
(
lastTimestamp
);
}
}
else
{
//如果和上次生成时间不同,重置sequence,就是下一毫秒开始,sequence计数重新从0开始累加,每个毫秒时间内,都是从0开始计数,最大4095
sequence
=
0L
;
}
lastTimestamp
=
timestamp
;
// 最后按照规则拼出ID 64位
// 000000000000000000000000000000000000000000 00000 00000 000000000000
//1位固定整数 time datacenterId workerId sequence
return
((
timestamp
-
twepoch
)
<<
timestampLeftShift
)
|
(
datacenterId
<<
datacenterIdShift
)
|
(
workerId
<<
workerIdShift
)
|
sequence
;
}
//比较当前时间和过去时间,防止时钟回退(机器问题),保证给的都是最新时间/最大时间
protected
long
tilNextMillis
(
long
lastTimestamp
)
{
long
timestamp
=
timeGen
();
while
(
timestamp
<=
lastTimestamp
)
{
timestamp
=
timeGen
();
}
return
timestamp
;
}
//获取当前的时间戳(毫秒)
protected
long
timeGen
()
{
return
System
.
currentTimeMillis
();
}
/**
* 获取全局唯一编码
*/
public
static
Long
getId
(){
Long
id
=
ProduceIdUtil
.
get
().
nextId
();
return
id
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment