diff --git a/douyu-live-id-generate-interface/pom.xml b/douyu-live-id-generate-interface/pom.xml
new file mode 100644
index 0000000..c1426fb
--- /dev/null
+++ b/douyu-live-id-generate-interface/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ com.douyu
+ douyu-live-app
+ 1.0-SNAPSHOT
+
+
+ douyu-live-id-generate-interface
+
+
+ 17
+ 17
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/douyu-live-id-generate-interface/src/main/java/com/douyu/live/id/generate/interfaces/IdBuilderRpc.java b/douyu-live-id-generate-interface/src/main/java/com/douyu/live/id/generate/interfaces/IdBuilderRpc.java
new file mode 100644
index 0000000..5f9b476
--- /dev/null
+++ b/douyu-live-id-generate-interface/src/main/java/com/douyu/live/id/generate/interfaces/IdBuilderRpc.java
@@ -0,0 +1,23 @@
+package com.douyu.live.id.generate.interfaces;
+
+/**
+ * id 生成接口
+ * @author luiguanyi
+ * * @date 2024/12/29
+ */
+public interface IdBuilderRpc {
+
+ /**
+ * 获取有序ID
+ * @param id
+ * @return
+ */
+ Long getSeqId(Integer id);
+
+ /**
+ * 获取无序ID
+ * @param id
+ * @return
+ */
+ Long getUnSeqId(Integer id);
+}
diff --git a/douyu-live-id-generate-provider/pom.xml b/douyu-live-id-generate-provider/pom.xml
new file mode 100644
index 0000000..e7d785f
--- /dev/null
+++ b/douyu-live-id-generate-provider/pom.xml
@@ -0,0 +1,56 @@
+
+
+ 4.0.0
+
+ com.douyu
+ douyu-live-app
+ 1.0-SNAPSHOT
+
+
+ douyu-live-id-generate-provider
+
+
+ 3.5.3
+ 3.2.0-beta.3
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus.version}
+
+
+ org.apache.dubbo
+ dubbo-spring-boot-starter
+ ${dubbo.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ log4j-to-slf4j
+ org.apache.logging.log4j
+
+
+
+
+ mysql
+ mysql-connector-java
+ ${qiyu-mysql.version}
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ com.douyu
+ douyu-live-id-generate-interface
+ 1.0-SNAPSHOT
+ compile
+
+
+
+
\ No newline at end of file
diff --git a/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/dao/mapper/IdBuilderMapper.java b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/dao/mapper/IdBuilderMapper.java
new file mode 100644
index 0000000..7332726
--- /dev/null
+++ b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/dao/mapper/IdBuilderMapper.java
@@ -0,0 +1,33 @@
+package com.douyu.live.id.generate.provider.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.douyu.live.id.generate.provider.dao.po.IdBuilderPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
+
+/**
+ * id 生成器配置表持久层
+ * @author luiguanyi
+ * * @date 2024/12/31
+ */
+@Mapper
+public interface IdBuilderMapper extends BaseMapper {
+
+ /**
+ * 更新当前阈值 开始 以及版本
+ */
+ @Update("UPDATE t_id_builder_config set next_threshold=#{nextThreshold},current_start=#{currentStart},vers ion=version+1 " +
+ "where id=#{id} and version=#{version}")
+ Integer updateCurrentThreshold(@Param("nextThreshold") long nextThreshold, @Param("currentStart") long currentStart,
+ @Param("id") int id, @Param("version") int version);
+
+ /**
+ * 查询所有配置
+ */
+ @Select("select * from t_id_builder_config")
+ List selectAll();
+}
diff --git a/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/dao/po/IdBuilderPO.java b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/dao/po/IdBuilderPO.java
new file mode 100644
index 0000000..f62fc92
--- /dev/null
+++ b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/dao/po/IdBuilderPO.java
@@ -0,0 +1,59 @@
+package com.douyu.live.id.generate.provider.dao.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * id生成器配置表
+ * @author luiguanyi
+ * * @date 2024/12/31
+ */
+@TableName("t_id_builder_config")
+@Data
+public class IdBuilderPO {
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+ /**
+ * id 备注描述
+ */
+ private String remark;
+ /**
+ * 初始化值
+ */
+ private long initNum;
+ /**
+ * 步长
+ */
+ private int step;
+ /**
+ * 是否是有序的id
+ */
+ private int isSeq;
+ /**
+ * 当前id 所在阶段的开始值
+ */
+ private long currentStart;
+ /**
+ * 当前id 所在阶段的阈值
+ */
+ private long nextThreshold;
+ /**
+ * 业务代码前缀
+ */
+ private String idPrefix;
+ /**
+ * 乐观锁版本号
+ */
+ private int version;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+}
diff --git a/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/rpc/IdBuilderRpcImpl.java b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/rpc/IdBuilderRpcImpl.java
new file mode 100644
index 0000000..bea005d
--- /dev/null
+++ b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/rpc/IdBuilderRpcImpl.java
@@ -0,0 +1,22 @@
+package com.douyu.live.id.generate.provider.rpc;
+
+import com.douyu.live.id.generate.interfaces.IdBuilderRpc;
+import org.apache.dubbo.config.annotation.DubboService;
+
+/**
+ * id 生成 rpc 实现
+ * @author luiguanyi
+ * * @date 2024/12/29
+ */
+@DubboService
+public class IdBuilderRpcImpl implements IdBuilderRpc {
+ @Override
+ public Long getSeqId(Integer id) {
+ return null;
+ }
+
+ @Override
+ public Long getUnSeqId(Integer id) {
+ return null;
+ }
+}
diff --git a/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/service/IdGenerateService.java b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/service/IdGenerateService.java
new file mode 100644
index 0000000..74a6087
--- /dev/null
+++ b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/service/IdGenerateService.java
@@ -0,0 +1,23 @@
+package com.douyu.live.id.generate.provider.service;
+
+/**
+ * id生成服务
+ * @author luiguanyi
+ * * @date 2024/12/29
+ */
+public interface IdGenerateService {
+ /**
+ * 生成有序id
+ *
+ * @param code
+ * @return
+ */
+ Long getSeqId(Integer code);
+ /**
+ * 生成无序id
+ *
+ * @param code
+ * @return
+ */
+ Long getUnSeqId(Integer code);
+}
diff --git a/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/service/bo/LocalSeqIdBO.java b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/service/bo/LocalSeqIdBO.java
new file mode 100644
index 0000000..e5c5ff9
--- /dev/null
+++ b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/service/bo/LocalSeqIdBO.java
@@ -0,0 +1,25 @@
+package com.douyu.live.id.generate.provider.service.bo;
+
+import lombok.Data;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * 本地id生成的一个具体策略
+ * @author luiguanyi
+ * * @date 2024/12/29
+ */
+@Data
+public class LocalSeqIdBO {
+
+ /**
+ * 业务ID
+ */
+ private int id;
+
+
+ /**
+ * 在内存中记录的当前的值
+ */
+ private AtomicLong currentNum;
+}
diff --git a/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/service/impl/IdGenerateServiceImpl.java b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/service/impl/IdGenerateServiceImpl.java
new file mode 100644
index 0000000..ff19c65
--- /dev/null
+++ b/douyu-live-id-generate-provider/src/main/java/com/douyu/live/id/generate/provider/service/impl/IdGenerateServiceImpl.java
@@ -0,0 +1,70 @@
+package com.douyu.live.id.generate.provider.service.impl;
+
+import com.douyu.live.id.generate.provider.dao.mapper.IdBuilderMapper;
+import com.douyu.live.id.generate.provider.dao.po.IdBuilderPO;
+import com.douyu.live.id.generate.provider.service.IdGenerateService;
+import com.douyu.live.id.generate.provider.service.bo.LocalSeqIdBO;
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * id生成服务实现
+ * @author luiguanyi
+ * * @date 2024/12/29
+ */
+@Service
+@Slf4j
+public class IdGenerateServiceImpl implements IdGenerateService {
+
+ @Resource
+ private IdBuilderMapper idBuilderMapper;
+
+ private static final Map localSeqIdMap = new ConcurrentHashMap<>();
+
+
+
+ @Override
+ public Long getSeqId(Integer id) {
+ if(id == null){
+ log.error("[getSeqId] id is error");
+ return null;
+ }
+ LocalSeqIdBO localSeqIdBO = localSeqIdMap.get(id);
+ if(localSeqIdBO == null){
+ log.error("[getSeqId] localSeqIdBo is null ,id is {}",id);
+ return null;
+ }
+ return localSeqIdBO.getCurrentNum().getAndIncrement();
+ }
+
+ @Override
+ public Long getUnSeqId(Integer code) {
+ return null;
+ }
+
+ /**
+ * 初始化我们的localSeqIdMap
+ */
+ @PostConstruct
+ public void init(){
+ List idBuilderPOS = idBuilderMapper.selectAll();
+ idBuilderPOS.forEach(idBuilderPO -> {
+ // 进行更新数据库中当前id 的配置 就是修改表中当前的id段 往后面挪一个步长
+ Integer updateResult = idBuilderMapper.updateCurrentThreshold(idBuilderPO.getNextThreshold(), idBuilderPO.getNextThreshold() + idBuilderPO.getStep(), idBuilderPO.getId(), idBuilderPO.getVersion());
+ if (updateResult == 0){
+ IdBuilderPO newIdBuilderPO = idBuilderMapper.selectById(idBuilderPO.getId());
+ }
+ LocalSeqIdBO localSeqIdBO = new LocalSeqIdBO();
+ localSeqIdBO.setId(idBuilderPO.getId());
+ localSeqIdBO.setCurrentNum(new AtomicLong(idBuilderPO.getCurrentStart()));
+ localSeqIdMap.put(idBuilderPO.getId(),localSeqIdBO);
+ });
+ }
+}
diff --git a/douyu-live-id-generate-provider/src/main/resources/application.yaml b/douyu-live-id-generate-provider/src/main/resources/application.yaml
new file mode 100644
index 0000000..993eea0
--- /dev/null
+++ b/douyu-live-id-generate-provider/src/main/resources/application.yaml
@@ -0,0 +1,18 @@
+spring:
+ application:
+ name: douyu-live-id-generate-provider
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ #访问主库
+ url: jdbc:mysql://127.0.0.1:3306/douyu_live_common?useUnicode=true&characterEncoding=utf8
+ username: root
+ password: root
+
+dubbo:
+ application:
+ name: ${spring.application.name}
+ registry:
+ address: nacos://127.0.0.1:8848?namespace=douyu-live-test&&username=nacos&&password=nacos
+ protocol:
+ name: dubbo
+ port: 9098
\ No newline at end of file
diff --git a/douyu-live-id-generate-provider/src/main/resources/bootstrap.yml b/douyu-live-id-generate-provider/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..dfbd13e
--- /dev/null
+++ b/douyu-live-id-generate-provider/src/main/resources/bootstrap.yml
@@ -0,0 +1,8 @@
+spring:
+ cloud:
+ nacos:
+ username: nacos
+ password: nacos
+ discovery:
+ server-addr: 127.0.0.1:8848
+ namespace: douyu-live-test
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index f2f9e1c..23953d7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,6 +14,8 @@
douyu-live-api
douyu-live-common-interface
douyu-live-framework
+ douyu-live-id-generate-interface
+ douyu-live-id-generate-provider