Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
-Bin
Lottery-702-happy
提交
e09412fa
L
Lottery-702-happy
项目概览
-Bin
/
Lottery-702-happy
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
Lottery-702-happy
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e09412fa
编写于
2月 20, 2022
作者:
H
HappyChan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完成支持领域的开发
上级
6de4cbde
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
167 addition
and
1 deletion
+167
-1
lottery-domain/pom.xml
lottery-domain/pom.xml
+8
-1
lottery-domain/src/main/java/cn/happy/lottery/domain/award/service/factory/GoodsConfig.java
...ppy/lottery/domain/award/service/factory/GoodsConfig.java
+2
-0
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/IIdGenerator.java
...ava/cn/happy/lottery/domain/support/ids/IIdGenerator.java
+20
-0
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/IdContext.java
...n/java/cn/happy/lottery/domain/support/ids/IdContext.java
+32
-0
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/impl/RandomNumeric.java
.../happy/lottery/domain/support/ids/impl/RandomNumeric.java
+20
-0
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/impl/ShortCode.java
...a/cn/happy/lottery/domain/support/ids/impl/ShortCode.java
+33
-0
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/impl/SnowFlake.java
...a/cn/happy/lottery/domain/support/ids/impl/SnowFlake.java
+43
-0
lottery-interfaces/src/test/java/cn/happy/lottery/test/domain/DrawAlgorithmTest.java
.../java/cn/happy/lottery/test/domain/DrawAlgorithmTest.java
+0
-0
lottery-interfaces/src/test/java/cn/happy/lottery/test/domain/SupportTest.java
...c/test/java/cn/happy/lottery/test/domain/SupportTest.java
+9
-0
未找到文件。
lottery-domain/pom.xml
浏览文件 @
e09412fa
...
...
@@ -10,6 +10,10 @@
<modelVersion>
4.0.0
</modelVersion>
<packaging>
jar
</packaging>
<dependencies>
<dependency>
<groupId>
cn.hutool
</groupId>
<artifactId>
hutool-all
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-context
</artifactId>
...
...
@@ -30,13 +34,16 @@
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
1.2.58
</version>
<scope>
compile
</scope>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-tx
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
</dependency>
</dependencies>
<artifactId>
lottery-domain
</artifactId>
...
...
lottery-domain/src/main/java/cn/happy/lottery/domain/award/service/factory/GoodsConfig.java
浏览文件 @
e09412fa
...
...
@@ -9,7 +9,9 @@ import cn.happy.lottery.domain.award.service.goods.impl.RedeemCodeGoods;
import
javax.annotation.PostConstruct
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
...
...
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/IIdGenerator.java
0 → 100644
浏览文件 @
e09412fa
package
cn.happy.lottery.domain.support.ids
;
/**
* @author Happy
* @description: 生成ID接口
* @date 2022/2/20
*/
public
interface
IIdGenerator
{
/**
* 获取ID,目前有两种实现方式
* 1. 雪花算法,用于生成单号
* 2. 日期算法,用于生成活动编号类,特性是生成数字串较短,但指定时间内不能生成太多
* 3. 随机算法,用于生成策略ID
*
* @return ID
*/
long
nextId
();
}
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/IdContext.java
0 → 100644
浏览文件 @
e09412fa
package
cn.happy.lottery.domain.support.ids
;
import
cn.happy.lottery.common.Constants
;
import
cn.happy.lottery.domain.support.ids.impl.RandomNumeric
;
import
cn.happy.lottery.domain.support.ids.impl.ShortCode
;
import
cn.happy.lottery.domain.support.ids.impl.SnowFlake
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @author Happy
* @description: Id 策略模式上下文配置「在正式的完整的系统架构中
* ID 的生成会有单独的服务来完成,其他服务来调用 ID 生成接口即可」
* 这里采用注解方式来进行自动装配,可以去了解 @Configuration 和 @Bean 的实现原理
* @date 2022/2/20
*/
@Configuration
public
class
IdContext
{
@Bean
public
Map
<
Constants
.
Ids
,
IIdGenerator
>
idGenerator
(
SnowFlake
snowFlake
,
RandomNumeric
randomNumeric
,
ShortCode
shortCode
)
{
Map
<
Constants
.
Ids
,
IIdGenerator
>
idGeneratorMap
=
new
HashMap
<>();
idGeneratorMap
.
put
(
Constants
.
Ids
.
SnowFlake
,
snowFlake
);
idGeneratorMap
.
put
(
Constants
.
Ids
.
ShortCode
,
shortCode
);
idGeneratorMap
.
put
(
Constants
.
Ids
.
RandomNumeric
,
randomNumeric
);
return
idGeneratorMap
;
}
}
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/impl/RandomNumeric.java
0 → 100644
浏览文件 @
e09412fa
package
cn.happy.lottery.domain.support.ids.impl
;
import
cn.happy.lottery.domain.support.ids.IIdGenerator
;
import
org.springframework.stereotype.Component
;
import
org.apache.commons.lang3.RandomStringUtils
;
/**
* @author Happy
* @description: 工具类生成 org.apache.commons.lang3.RandomStringUtils
* @date 2022/2/20
*/
@Component
public
class
RandomNumeric
implements
IIdGenerator
{
@Override
public
long
nextId
()
{
return
Long
.
parseLong
(
RandomStringUtils
.
randomNumeric
(
11
));
}
}
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/impl/ShortCode.java
0 → 100644
浏览文件 @
e09412fa
package
cn.happy.lottery.domain.support.ids.impl
;
import
cn.happy.lottery.domain.support.ids.IIdGenerator
;
import
org.springframework.stereotype.Component
;
import
java.util.Calendar
;
import
java.util.Random
;
/**
* @author Happy
* @description: 短码生成策略,仅支持很小的调用量,用于生成活动配置类编号,保证全局唯一
* @date 2022/2/20
*/
@Component
public
class
ShortCode
implements
IIdGenerator
{
@Override
public
synchronized
long
nextId
()
{
Calendar
calendar
=
Calendar
.
getInstance
();
int
year
=
calendar
.
get
(
Calendar
.
YEAR
);
int
week
=
calendar
.
get
(
Calendar
.
WEEK_OF_YEAR
);
int
day
=
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
);
int
hour
=
calendar
.
get
(
Calendar
.
HOUR_OF_DAY
);
StringBuilder
idStr
=
new
StringBuilder
();
idStr
.
append
(
year
-
2020
);
idStr
.
append
(
hour
);
idStr
.
append
(
String
.
format
(
"%02d"
,
week
));
idStr
.
append
(
day
);
idStr
.
append
(
String
.
format
(
"%03d"
,
new
Random
().
nextInt
(
1000
)));
return
Long
.
parseLong
(
idStr
.
toString
());
}
}
lottery-domain/src/main/java/cn/happy/lottery/domain/support/ids/impl/SnowFlake.java
0 → 100644
浏览文件 @
e09412fa
package
cn.happy.lottery.domain.support.ids.impl
;
import
cn.happy.lottery.domain.support.ids.IIdGenerator
;
import
cn.hutool.core.lang.Snowflake
;
import
cn.hutool.core.util.IdUtil
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.PostConstruct
;
import
cn.hutool.core.net.NetUtil
;
/**
* @author Happy
* @description: hutool 工具包下的雪花算法
* 15位雪花算法推荐:https://github.com/yitter/idgenerator/blob/master/Java/source/src/main/java/com/github/yitter/core/SnowWorkerM1.java
* @date 2022/2/20
*/
@Component
public
class
SnowFlake
implements
IIdGenerator
{
private
Snowflake
snowflake
;
@PostConstruct
public
void
init
()
{
// 0 ~ 31位,可以采用配置的方式使用
long
workerId
;
try
{
workerId
=
NetUtil
.
ipv4ToLong
(
NetUtil
.
getLocalhostStr
());
}
catch
(
Exception
e
)
{
workerId
=
NetUtil
.
getLocalhostStr
().
hashCode
();
}
workerId
=
workerId
>>
16
&
31
;
long
datacenterId
=
1L
;
snowflake
=
IdUtil
.
createSnowflake
(
workerId
,
datacenterId
);
}
@Override
public
long
nextId
()
{
return
snowflake
.
nextId
();
}
}
lottery-interfaces/src/test/java/cn/happy/lottery/test/DrawAlgorithmTest.java
→
lottery-interfaces/src/test/java/cn/happy/lottery/test/
domain/
DrawAlgorithmTest.java
浏览文件 @
e09412fa
文件已移动
lottery-interfaces/src/test/java/cn/happy/lottery/test/domain/SupportTest.java
0 → 100644
浏览文件 @
e09412fa
package
cn.happy.lottery.test.domain
;
/**
* @description:
* @author Happy
* @date 2022/2/20
*/
public
class
SupportTest
{
public
static
void
main
(
String
[]
args
){
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录