diff --git a/.gitignore b/.gitignore
index 6f8d2b42aa5838f3f636e35050e84dcfe80d824b..012e0a47916a55cdc5108f4db430296391ebd6a2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,3 +62,4 @@ buildNumber.properties
/snowflake-distributed-service-node/conf/
/snowflake-distributed-service-impl/conf/
/snowflake-distributed-service-api/conf/
+/snowflake-distributed-service-impl/snowflake.xlsx
diff --git a/pom.xml b/pom.xml
index e28b86298a81f09c6a208297f39fd59b092c6a4c..b2e4546f5f1bbd500833d3ce658b360de8942513 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,7 @@
1.2.7.a
1.0.7.a
1.1.3.a
+ 3.1.1
3.1.0
2.2
@@ -358,6 +359,11 @@
dutil-develop
${dutil.version}
+
+ com.alibaba
+ easyexcel
+ ${easyexcel.version}
+
com.dwarfeng
diff --git a/snowflake-distributed-service-impl/pom.xml b/snowflake-distributed-service-impl/pom.xml
index 8648ee301801ff06217be7966cd3e052ea1e45fd..17a324c2617df65cd0b2999123b9fbc263403d61 100644
--- a/snowflake-distributed-service-impl/pom.xml
+++ b/snowflake-distributed-service-impl/pom.xml
@@ -71,6 +71,10 @@
com.dwarfeng
spring-telqos-core
+
+ com.alibaba
+ easyexcel
+
com.dwarfeng
diff --git a/snowflake-distributed-service-impl/src/main/java/com/dwarfeng/sfds/impl/service/GenerateExcelServiceImpl.java b/snowflake-distributed-service-impl/src/main/java/com/dwarfeng/sfds/impl/service/GenerateExcelServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ceca5611f1a908f9ad3422036dd203d577af87a
--- /dev/null
+++ b/snowflake-distributed-service-impl/src/main/java/com/dwarfeng/sfds/impl/service/GenerateExcelServiceImpl.java
@@ -0,0 +1,73 @@
+package com.dwarfeng.sfds.impl.service;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.dwarfeng.sfds.stack.service.GenerateExcelService;
+import com.dwarfeng.sfds.stack.service.LongIdService;
+import com.dwarfeng.subgrade.stack.exception.ServiceException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class GenerateExcelServiceImpl implements GenerateExcelService {
+
+ @Autowired
+ private LongIdService longIdService;
+
+ @Value("${snowflake.excel.out.path}")
+ private String outPath;
+
+ @Value("${snowflake.excel.line.number}")
+ private int lineNumber;
+
+ @Override
+ public void generateExcel() throws ServiceException {
+ EasyExcel.write(outPath, Row.class).sheet("sheet1").doWrite(write(lineNumber));
+ }
+
+ @Override
+ public void generateExcel(int lineNumber) throws ServiceException {
+ EasyExcel.write(outPath, Row.class).sheet("sheet1").doWrite(write(lineNumber));
+ }
+
+ private List write(int lineNumber) throws ServiceException {
+ List sheet = new ArrayList<>();
+ for (int i = 0; i < lineNumber; i++ ) {
+ Row row = new Row();
+ row.setId(Long.toString(longIdService.nextLongId()));
+ sheet.add(row);
+ }
+ return sheet;
+ }
+
+ private static class Row {
+ @ExcelProperty("id")
+ private String id;
+
+ public Row() {
+ }
+
+ public Row(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ @Override
+ public String toString() {
+ return "Row{" +
+ "id='" + id + '\'' +
+ '}';
+ }
+ }
+}
diff --git a/snowflake-distributed-service-impl/src/test/java/com/dwarfeng/sfds/impl/service/GenerateExcelServiceImplTest.java b/snowflake-distributed-service-impl/src/test/java/com/dwarfeng/sfds/impl/service/GenerateExcelServiceImplTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4acac68738318350f19b643a52d02b761e4685ba
--- /dev/null
+++ b/snowflake-distributed-service-impl/src/test/java/com/dwarfeng/sfds/impl/service/GenerateExcelServiceImplTest.java
@@ -0,0 +1,28 @@
+package com.dwarfeng.sfds.impl.service;
+
+import com.dwarfeng.sfds.stack.service.GenerateExcelService;
+import com.dwarfeng.subgrade.stack.exception.ServiceException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = "classpath:spring/application-context*.xml")
+public class GenerateExcelServiceImplTest {
+
+ @Autowired
+ private GenerateExcelService generateExcelService;
+
+ @Test
+ public void generateExcelWithoutParma()throws ServiceException {
+ generateExcelService.generateExcel();
+ }
+
+ @Test
+ public void generateExcel()throws ServiceException {
+ generateExcelService.generateExcel(100);
+ }
+
+}
diff --git a/snowflake-distributed-service-impl/src/test/resources/snowflake/snowflake.properties b/snowflake-distributed-service-impl/src/test/resources/snowflake/snowflake.properties
new file mode 100644
index 0000000000000000000000000000000000000000..da6339d77382da898b1a8296456c1c55b9f9aaaf
--- /dev/null
+++ b/snowflake-distributed-service-impl/src/test/resources/snowflake/snowflake.properties
@@ -0,0 +1,2 @@
+snowflake.excel.out.path=snowflake.xlsx
+snowflake.excel.line.number=100
diff --git a/snowflake-distributed-service-node/src/main/resources/snowflake/snowflake.properties b/snowflake-distributed-service-node/src/main/resources/snowflake/snowflake.properties
new file mode 100644
index 0000000000000000000000000000000000000000..da6339d77382da898b1a8296456c1c55b9f9aaaf
--- /dev/null
+++ b/snowflake-distributed-service-node/src/main/resources/snowflake/snowflake.properties
@@ -0,0 +1,2 @@
+snowflake.excel.out.path=snowflake.xlsx
+snowflake.excel.line.number=100
diff --git a/snowflake-distributed-service-stack/src/main/java/com/dwarfeng/sfds/stack/service/GenerateExcelService.java b/snowflake-distributed-service-stack/src/main/java/com/dwarfeng/sfds/stack/service/GenerateExcelService.java
new file mode 100644
index 0000000000000000000000000000000000000000..3058c1c3324d533c77c47586a732395de2882ec9
--- /dev/null
+++ b/snowflake-distributed-service-stack/src/main/java/com/dwarfeng/sfds/stack/service/GenerateExcelService.java
@@ -0,0 +1,29 @@
+package com.dwarfeng.sfds.stack.service;
+
+import com.dwarfeng.subgrade.stack.exception.ServiceException;
+import com.dwarfeng.subgrade.stack.service.Service;
+
+/**
+ * Excel文件雪花ID生成器。
+ *
+ * @author wusn
+ * @since 1.4.6
+ */
+public interface GenerateExcelService extends Service {
+
+ /**
+ * 生成包含雪花ID的Excel表格。(雪花ID个数由配置文件指定)
+ *
+ * @throws ServiceException 服务异常。
+ */
+ void generateExcel() throws ServiceException;
+
+ /**
+ * 生成包含雪花ID的Excel表格。
+ *
+ * @param lineNumber 生成Excel的总行数(即雪花ID的个数)。
+ * @throws ServiceException 服务异常。
+ */
+ void generateExcel(int lineNumber) throws ServiceException;
+
+}