Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gs1-office-web-sit
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
吴迪
gs1-office-web-sit
Commits
7a7b4fa1
Commit
7a7b4fa1
authored
Nov 21, 2021
by
吴迪
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【新增】初始化序列
parent
5aea37e4
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
604 additions
and
0 deletions
+604
-0
OfficeApplication.java
src/main/java/io/office/OfficeApplication.java
+14
-0
ShortCodeController.java
...office/modules/manage/controller/ShortCodeController.java
+102
-0
ShortCodeDao.java
src/main/java/io/office/modules/manage/dao/ShortCodeDao.java
+18
-0
ShortCodeEntity.java
...java/io/office/modules/manage/entity/ShortCodeEntity.java
+77
-0
ShortCodeService.java
...va/io/office/modules/manage/service/ShortCodeService.java
+26
-0
ShortCodeServiceImpl.java
...ice/modules/manage/service/impl/ShortCodeServiceImpl.java
+41
-0
IdKeysConstant.java
...n/java/io/office/modules/manage/utils/IdKeysConstant.java
+13
-0
IdWorker.java
src/main/java/io/office/modules/manage/utils/IdWorker.java
+190
-0
IdWorkerUtils.java
...in/java/io/office/modules/manage/utils/IdWorkerUtils.java
+55
-0
ShortCodeVo.java
...java/io/office/modules/manage/vo/request/ShortCodeVo.java
+25
-0
ShortCodeDao.xml
src/main/resources/mapper/manage/ShortCodeDao.xml
+43
-0
No files found.
src/main/java/io/office/OfficeApplication.java
View file @
7a7b4fa1
...
...
@@ -4,9 +4,13 @@
package
io
.
office
;
import
io.office.modules.manage.utils.IdKeysConstant
;
import
io.office.modules.manage.utils.IdWorkerUtils
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
javax.annotation.PostConstruct
;
/**
* @author DELL
*/
...
...
@@ -17,4 +21,13 @@ public class OfficeApplication {
SpringApplication
.
run
(
OfficeApplication
.
class
,
args
);
}
@PostConstruct
private
void
initSeq
(){
System
.
out
.
println
(
"初始化100000个序列开始"
);
IdWorkerUtils
.
initData
(
IdKeysConstant
.
ID_SEQ_KEY
);
System
.
out
.
println
(
"初始化100000个序列完成"
);
}
}
\ No newline at end of file
src/main/java/io/office/modules/manage/controller/ShortCodeController.java
0 → 100644
View file @
7a7b4fa1
package
io
.
office
.
modules
.
manage
.
controller
;
import
java.util.Arrays
;
import
java.util.Map
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
io.office.modules.manage.entity.ShortCodeEntity
;
import
io.office.modules.manage.service.ShortCodeService
;
import
io.office.modules.manage.utils.IdKeysConstant
;
import
io.office.modules.manage.utils.IdWorkerUtils
;
import
org.apache.shiro.authz.annotation.RequiresPermissions
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
io.office.common.utils.PageUtils
;
import
io.office.common.utils.R
;
/**
* ${comments}
*
* @author wudi
* @email
* @date 2021-11-21 12:26:37
*/
@RestController
@RequestMapping
(
"/shortcode"
)
public
class
ShortCodeController
{
@Autowired
private
ShortCodeService
shortCodeService
;
/**
* 列表
*/
@RequestMapping
(
"/list"
)
// @RequiresPermissions("manage:shortcode:list")
public
R
list
(
@RequestParam
Map
<
String
,
Object
>
params
){
PageUtils
page
=
shortCodeService
.
queryPage
(
params
);
return
R
.
ok
().
put
(
"page"
,
page
);
}
/**
* 信息
*/
@RequestMapping
(
"/info/{shortCode}"
)
// @RequiresPermissions("manage:shortcode:info")
public
R
info
(
@PathVariable
(
"shortCode"
)
String
shortCode
){
ShortCodeEntity
shortCodeDB
=
shortCodeService
.
getById
(
shortCode
);
return
R
.
ok
().
put
(
"shortCode"
,
shortCodeDB
);
}
/**
* 保存
*/
@RequestMapping
(
"/save"
)
// @RequiresPermissions("manage:shortcode:save")
public
R
save
(
@RequestBody
ShortCodeEntity
shortCode
){
shortCodeService
.
save
(
shortCode
);
return
R
.
ok
();
}
/**
* 修改
*/
@RequestMapping
(
"/update"
)
// @RequiresPermissions("manage:shortcode:update")
public
R
update
(
@RequestBody
ShortCodeEntity
shortCode
){
shortCodeService
.
updateById
(
shortCode
);
return
R
.
ok
();
}
/**
* 删除
*/
@RequestMapping
(
"/delete"
)
// @RequiresPermissions("manage:shortcode:delete")
public
R
delete
(
@RequestBody
String
[]
shortCodes
){
shortCodeService
.
removeByIds
(
Arrays
.
asList
(
shortCodes
));
return
R
.
ok
();
}
@RequestMapping
(
"/api/getList"
)
// @RequiresPermissions("manage:shortcode:delete")
public
R
getList
(){
System
.
out
.
println
(
IdWorkerUtils
.
getSEQByKey
(
IdKeysConstant
.
ID_SEQ_KEY
));
return
R
.
ok
();
}
}
src/main/java/io/office/modules/manage/dao/ShortCodeDao.java
0 → 100644
View file @
7a7b4fa1
package
io
.
office
.
modules
.
manage
.
dao
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
io.office.modules.manage.entity.ShortCodeEntity
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* ${comments}
*
* @author wudi
* @email
* @date 2021-11-21 12:26:37
*/
@Mapper
public
interface
ShortCodeDao
extends
BaseMapper
<
ShortCodeEntity
>
{
}
src/main/java/io/office/modules/manage/entity/ShortCodeEntity.java
0 → 100644
View file @
7a7b4fa1
package
io
.
office
.
modules
.
manage
.
entity
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
java.io.Serializable
;
import
java.util.Date
;
import
lombok.Data
;
/**
* ${comments}
*
* @author wudi
* @email
* @date 2021-11-21 12:26:37
*/
@Data
@TableName
(
"short_code"
)
public
class
ShortCodeEntity
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* $column.comments
*/
@TableId
private
Integer
fId
;
/**
* $column.comments
*/
private
String
shortCode
;
/**
* $column.comments
*/
private
Date
loginDate
;
/**
* $column.comments
*/
private
String
approveMan
;
/**
* $column.comments
*/
private
Date
logoutDate
;
/**
* $column.comments
*/
private
String
logoutFlag
;
/**
* $column.comments
*/
private
String
produceName
;
/**
* $column.comments
*/
private
String
brandName
;
/**
* $column.comments
*/
private
String
produceStyle
;
/**
* $column.comments
*/
private
String
producePack
;
/**
* $column.comments
*/
private
String
memo
;
/**
* $column.comments
*/
private
String
issueFlag
;
/**
* $column.comments
*/
private
Date
issueDate
;
}
src/main/java/io/office/modules/manage/service/ShortCodeService.java
0 → 100644
View file @
7a7b4fa1
package
io
.
office
.
modules
.
manage
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
io.office.common.utils.PageUtils
;
import
io.office.modules.manage.entity.ShortCodeEntity
;
import
java.util.List
;
import
java.util.Map
;
/**
* ${comments}
*
* @author wudi
* @email
* @date 2021-11-21 12:26:37
*/
public
interface
ShortCodeService
extends
IService
<
ShortCodeEntity
>
{
PageUtils
queryPage
(
Map
<
String
,
Object
>
params
);
List
<
ShortCodeEntity
>
getList
(
ShortCodeEntity
shortCodeEntity
);
}
src/main/java/io/office/modules/manage/service/impl/ShortCodeServiceImpl.java
0 → 100644
View file @
7a7b4fa1
package
io
.
office
.
modules
.
manage
.
service
.
impl
;
import
io.office.modules.manage.dao.ShortCodeDao
;
import
io.office.modules.manage.entity.ShortCodeEntity
;
import
io.office.modules.manage.service.ShortCodeService
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.Map
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
io.office.common.utils.PageUtils
;
import
io.office.common.utils.Query
;
@Service
(
"shortCodeService"
)
public
class
ShortCodeServiceImpl
extends
ServiceImpl
<
ShortCodeDao
,
ShortCodeEntity
>
implements
ShortCodeService
{
@Override
public
PageUtils
queryPage
(
Map
<
String
,
Object
>
params
)
{
IPage
<
ShortCodeEntity
>
page
=
this
.
page
(
new
Query
<
ShortCodeEntity
>().
getPage
(
params
),
new
QueryWrapper
<
ShortCodeEntity
>()
);
return
new
PageUtils
(
page
);
}
@Override
public
List
<
ShortCodeEntity
>
getList
(
ShortCodeEntity
shortCodeEntity
)
{
return
null
;
}
}
\ No newline at end of file
src/main/java/io/office/modules/manage/utils/IdKeysConstant.java
0 → 100644
View file @
7a7b4fa1
package
io
.
office
.
modules
.
manage
.
utils
;
/**
*
* @description:
*
* @author wudi
* @date 13:13 2021/11/21
*/
public
class
IdKeysConstant
{
public
static
final
String
ID_SEQ_KEY
=
"id_seq"
;
}
src/main/java/io/office/modules/manage/utils/IdWorker.java
0 → 100644
View file @
7a7b4fa1
package
io
.
office
.
modules
.
manage
.
utils
;
import
org.springframework.stereotype.Component
;
import
java.lang.management.ManagementFactory
;
import
java.net.InetAddress
;
import
java.net.NetworkInterface
;
/**
* <p>名称:IdWorker.java</p>
* <p>描述:分布式自增长ID</p>
* <pre>
* Twitter的 Snowflake JAVA实现方案
* </pre>
* 核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:
* 1||0---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---000000000000
* 在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,
* 然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),
* 然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。
* 这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),
* 并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。
* <p>
* 64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))
*
* @author Polim
*/
@Component
public
class
IdWorker
{
// 时间起始标记点,作为基准,一般取系统的最近时间(一旦确定不能变动)
private
final
static
long
twepoch
=
1288834974657L
;
// 机器标识位数
private
final
static
long
workerIdBits
=
5L
;
// 数据中心标识位数
private
final
static
long
datacenterIdBits
=
5L
;
// 机器ID最大值
private
final
static
long
maxWorkerId
=
-
1L
^
(-
1L
<<
workerIdBits
);
// 数据中心ID最大值
private
final
static
long
maxDatacenterId
=
-
1L
^
(-
1L
<<
datacenterIdBits
);
// 毫秒内自增位
private
final
static
long
sequenceBits
=
12L
;
// 机器ID偏左移12位
private
final
static
long
workerIdShift
=
sequenceBits
;
// 数据中心ID左移17位
private
final
static
long
datacenterIdShift
=
sequenceBits
+
workerIdBits
;
// 时间毫秒左移22位
private
final
static
long
timestampLeftShift
=
sequenceBits
+
workerIdBits
+
datacenterIdBits
;
private
final
static
long
sequenceMask
=
-
1L
^
(-
1L
<<
sequenceBits
);
/* 上次生产id时间戳 */
private
static
long
lastTimestamp
=
-
1L
;
// 0,并发控制
private
long
sequence
=
0L
;
private
final
long
workerId
;
// 数据标识id部分
private
final
long
datacenterId
;
public
IdWorker
()
{
this
.
datacenterId
=
getDatacenterId
(
maxDatacenterId
);
this
.
workerId
=
getMaxWorkerId
(
datacenterId
,
maxWorkerId
);
}
/**
* @param workerId 工作机器ID
* @param datacenterId 序列号
*/
public
IdWorker
(
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
*
* @return
*/
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
)
{
// 当前毫秒内,则+1
sequence
=
(
sequence
+
1
)
&
sequenceMask
;
if
(
sequence
==
0
)
{
// 当前毫秒内计数满了,则等待下一秒
timestamp
=
tilNextMillis
(
lastTimestamp
);
}
}
else
{
sequence
=
0L
;
}
lastTimestamp
=
timestamp
;
// ID偏移组合生成最终的ID,并返回ID
long
nextId
=
((
timestamp
-
twepoch
)
<<
timestampLeftShift
)
|
(
datacenterId
<<
datacenterIdShift
)
|
(
workerId
<<
workerIdShift
)
|
sequence
;
return
nextId
;
}
private
long
tilNextMillis
(
final
long
lastTimestamp
)
{
long
timestamp
=
this
.
timeGen
();
while
(
timestamp
<=
lastTimestamp
)
{
timestamp
=
this
.
timeGen
();
}
return
timestamp
;
}
private
long
timeGen
()
{
return
System
.
currentTimeMillis
();
}
/**
* <p>
* 获取 maxWorkerId
* </p>
*/
protected
static
long
getMaxWorkerId
(
long
datacenterId
,
long
maxWorkerId
)
{
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
)
%
(
maxWorkerId
+
1
);
}
/**
* <p>
* 数据标识id部分
* </p>
*/
protected
static
long
getDatacenterId
(
long
maxDatacenterId
)
{
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
%
(
maxDatacenterId
+
1
);
}
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
" getDatacenterId: "
+
e
.
getMessage
());
}
return
id
;
}
/*
public static String getNextId() {
*//*if (idWorkThreadLocal.get() == null) {
IdWorker idWorker = new IdWorker(0, 1);
idWorkThreadLocal.set(idWorker);
}
return String.valueOf(idWorkThreadLocal.get().nextId());*//*
}*/
public
static
void
main
(
String
[]
args
)
{
//推特 26万个不重复的ID
//参数1 参数2 是在0 -31 之间
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
System
.
out
.
println
(
IdWorkerUtils
.
getSEQByKey
(
IdKeysConstant
.
ID_SEQ_KEY
));
}
}
}
\ No newline at end of file
src/main/java/io/office/modules/manage/utils/IdWorkerUtils.java
0 → 100644
View file @
7a7b4fa1
package
io
.
office
.
modules
.
manage
.
utils
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentLinkedQueue
;
/**
* TODO
*
* @author wudi
* @version 1.0
* @date 2021/4/6 10:10
*/
public
class
IdWorkerUtils
{
private
static
Map
<
String
,
ConcurrentLinkedQueue
<
String
>>
concurrentHashMap
=
new
ConcurrentHashMap
<>();
private
static
final
int
SIZE_BATCH
=
100000
;
/**
* 根据名称每次每次放进去一万个序列
*/
public
static
void
initData
(
String
key
)
{
//每一个map都是单独的key
ConcurrentLinkedQueue
<
String
>
concurrentLinkedQueue
=
new
ConcurrentLinkedQueue
<
String
>();
IdWorker
idWorker
=
new
IdWorker
(
0
,
1
);
for
(
int
i
=
0
;
i
<
SIZE_BATCH
;
i
++)
{
concurrentLinkedQueue
.
add
(
String
.
valueOf
(
idWorker
.
nextId
()));
}
concurrentHashMap
.
put
(
key
,
concurrentLinkedQueue
);
}
/**
* 根据key获取一个元素
*/
public
static
String
getSEQByKey
(
String
key
)
{
if
(
concurrentHashMap
.
containsKey
(
key
))
{
ConcurrentLinkedQueue
<
String
>
concurrentLinkedQueue
=
concurrentHashMap
.
get
(
key
);
if
(!
concurrentLinkedQueue
.
isEmpty
())
{
return
concurrentLinkedQueue
.
poll
();
}
else
{
//如果队列空了,就往里面初始化数据
initData
(
key
);
return
getSEQByKey
(
key
);
}
}
return
null
;
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
IdWorkerUtils
.
getSEQByKey
(
IdKeysConstant
.
ID_SEQ_KEY
));
}
}
src/main/java/io/office/modules/manage/vo/request/ShortCodeVo.java
0 → 100644
View file @
7a7b4fa1
package
io
.
office
.
modules
.
manage
.
vo
.
request
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
*
* @description:
*
* @author wudi
* @date 12:53 2021/11/21
*/
@Data
public
class
ShortCodeVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
shortCode
;
private
String
firmName
;
private
String
registerAddress
;
}
src/main/resources/mapper/manage/ShortCodeDao.xml
0 → 100644
View file @
7a7b4fa1
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"modules.manage.dao.ShortCodeDao"
>
<!-- 可根据自己的需求,是否要使用 -->
<resultMap
type=
"io.office.modules.manage.entity.ShortCodeEntity"
id=
"shortCodeMap"
>
<result
property=
"fId"
column=
"f_id"
/>
<result
property=
"shortCode"
column=
"short_code"
/>
<result
property=
"loginDate"
column=
"login_date"
/>
<result
property=
"approveMan"
column=
"approve_man"
/>
<result
property=
"logoutDate"
column=
"logout_date"
/>
<result
property=
"logoutFlag"
column=
"logout_flag"
/>
<result
property=
"produceName"
column=
"produce_name"
/>
<result
property=
"brandName"
column=
"brand_name"
/>
<result
property=
"produceStyle"
column=
"produce_style"
/>
<result
property=
"producePack"
column=
"produce_pack"
/>
<result
property=
"memo"
column=
"memo"
/>
<result
property=
"issueFlag"
column=
"issue_flag"
/>
<result
property=
"issueDate"
column=
"issue_date"
/>
</resultMap>
<select
id=
"getList"
parameterType=
"io.office.modules.manage.vo.request.ShortCodeVo"
resultType=
"io.office.modules.manage.entity.ShortCodeEntity"
>
select top 300 * from short_code a left join firm b on a.f_id=b.f_id
<where>
<if
test=
"shortCode!=null and shortCode!=''"
>
a.short_code = #{shortCode}
</if>
<if
test=
"firmName!=null and firmName!=''"
>
and b.firm_name like '%'#{firmName}'%'
</if>
<if
test=
"registerAddress!=null and registerAddress!=''"
>
and b.register_address like '%'#{registerAddress}'%'
</if>
</where>
</select>
</mapper>
\ No newline at end of file
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