diff --git a/jeecg-boot/.gitignore b/jeecg-boot/.gitignore
index 6dafbd52..b144cb46 100644
--- a/jeecg-boot/.gitignore
+++ b/jeecg-boot/.gitignore
@@ -1,5 +1,4 @@
/target/
/.idea/
*.iml
-jeecg-boot-module-demo
rebel.xml
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-boot-module-demo/pom.xml b/jeecg-boot/jeecg-boot-module-demo/pom.xml
new file mode 100644
index 00000000..3f91f18d
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-demo/pom.xml
@@ -0,0 +1,24 @@
+
+
+
+ jeecg-boot-parent
+ org.jeecgframework.boot
+ 2.3.0
+
+ 4.0.0
+
+ jeecg-boot-module-demo
+
+
+
+ org.jeecgframework.boot
+ jeecg-boot-base-common
+
+
+ org.jeecgframework.boot
+ jeecg-system-local-api
+
+
+
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-boot-module-demo/src/main/java/org/jeecg/JeecgDemoApplication.java b/jeecg-boot/jeecg-boot-module-demo/src/main/java/org/jeecg/JeecgDemoApplication.java
new file mode 100644
index 00000000..7d5763da
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-demo/src/main/java/org/jeecg/JeecgDemoApplication.java
@@ -0,0 +1,20 @@
+//package org.jeecg;
+//
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+//import org.springframework.cloud.openfeign.EnableFeignClients;
+//
+//import java.net.UnknownHostException;
+//
+//@SpringBootApplication
+//@EnableDiscoveryClient
+//@EnableFeignClients
+//@EnableAutoConfiguration(exclude={org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
+//public class JeecgDemoApplication {
+//
+// public static void main(String[] args) throws UnknownHostException {
+// SpringApplication.run(JeecgDemoApplication.class, args);
+// }
+//}
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/MockController.java b/jeecg-boot/jeecg-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/MockController.java
new file mode 100644
index 00000000..a36b8eae
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/MockController.java
@@ -0,0 +1,204 @@
+package org.jeecg.modules.demo.mock;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.swing.filechooser.FileSystemView;
+
+import org.apache.commons.io.IOUtils;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import lombok.extern.slf4j.Slf4j;
+
+@RestController
+@RequestMapping("/api")
+@Slf4j
+public class MockController {
+
+ private final String JSON_PATH = "classpath:org/jeecg/modules/demo/mock/json";
+
+ /**
+ * 通用json访问接口
+ * 格式: http://localhost:8080/jeecg-boot/api/json/{filename}
+ * @param filename
+ * @return
+ */
+ @RequestMapping(value = "/json/{filename}", method = RequestMethod.GET)
+ public String getJsonData(@PathVariable String filename) {
+ String jsonpath = "classpath:org/jeecg/modules/demo/mock/json/"+filename+".json";
+ return readJson(jsonpath);
+ }
+
+ @GetMapping(value = "/asynTreeList")
+ public String asynTreeList(String id) {
+ return readJson(JSON_PATH + "/asyn_tree_list_" + id + ".json");
+ }
+
+ @GetMapping(value = "/user")
+ public String user() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/user.json");
+ }
+
+ /**
+ * 老的登录获取用户信息接口
+ * @return
+ */
+ @GetMapping(value = "/user/info")
+ public String userInfo() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/user_info.json");
+ }
+
+ @GetMapping(value = "/role")
+ public String role() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/role.json");
+ }
+
+ @GetMapping(value = "/service")
+ public String service() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/service.json");
+ }
+
+ @GetMapping(value = "/permission")
+ public String permission() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/permission.json");
+ }
+
+ @GetMapping(value = "/permission/no-pager")
+ public String permission_no_page() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/permission_no_page.json");
+ }
+
+ /**
+ * 省市县
+ */
+ @GetMapping(value = "/area")
+ public String area() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/area.json");
+ }
+
+ /**
+ * 测试报表数据
+ */
+ @GetMapping(value = "/report/getYearCountInfo")
+ public String getYearCountInfo() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/getCntrNoCountInfo.json");
+ }
+ @GetMapping(value = "/report/getMonthCountInfo")
+ public String getMonthCountInfo() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/getCntrNoCountInfo.json");
+ }
+ @GetMapping(value = "/report/getCntrNoCountInfo")
+ public String getCntrNoCountInfo() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/getCntrNoCountInfo.json");
+ }
+ @GetMapping(value = "/report/getCabinetCountInfo")
+ public String getCabinetCountInfo() {
+ return readJson("classpath:org/jeecg/modules/demo/mock/json/getCntrNoCountInfo.json");
+ }
+
+ /**
+ * 实时磁盘监控
+ * @param request
+ * @param response
+ * @return
+ */
+ @GetMapping("/queryDiskInfo")
+ public Result>> queryDiskInfo(HttpServletRequest request, HttpServletResponse response){
+ Result>> res = new Result<>();
+ try {
+ // 当前文件系统类
+ FileSystemView fsv = FileSystemView.getFileSystemView();
+ // 列出所有windows 磁盘
+ File[] fs = File.listRoots();
+ log.info("查询磁盘信息:"+fs.length+"个");
+ List