diff --git a/stwzhj-modules/pom.xml b/stwzhj-modules/pom.xml
index 863f3a80..1523ef4c 100644
--- a/stwzhj-modules/pom.xml
+++ b/stwzhj-modules/pom.xml
@@ -17,6 +17,7 @@
stwzhj-data2es
stwzhj-baseToSt
stwzhj-data2StKafka
+ stwzhj-extract
stwzhj-modules
diff --git a/stwzhj-modules/stwzhj-extract/pom.xml b/stwzhj-modules/stwzhj-extract/pom.xml
new file mode 100644
index 00000000..c749ffc4
--- /dev/null
+++ b/stwzhj-modules/stwzhj-extract/pom.xml
@@ -0,0 +1,91 @@
+
+
+
+ stwzhj-modules
+ org.dromara
+ 2.2.2
+
+ 4.0.0
+
+ stwzhj-extract
+
+ 抽取警情拆分
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ org.dromara
+ stwzhj-common-nacos
+
+
+
+ org.dromara
+ stwzhj-common-sentinel
+
+
+
+
+ org.dromara
+ stwzhj-common-log
+
+
+
+ org.dromara
+ stwzhj-common-dict
+
+
+
+ org.dromara
+ stwzhj-common-doc
+
+
+
+ org.dromara
+ stwzhj-common-web
+
+
+
+ org.dromara
+ stwzhj-common-mybatis
+
+
+
+ org.dromara
+ stwzhj-common-dubbo
+
+
+
+ com.github.jeffreyning
+ mybatisplus-plus
+ 1.5.1-RELEASE
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+
+ repackage
+
+
+
+
+
+
+
+
diff --git a/stwzhj-modules/stwzhj-extract/src/main/java/org/dromara/extract/ExtractApplication.java b/stwzhj-modules/stwzhj-extract/src/main/java/org/dromara/extract/ExtractApplication.java
new file mode 100644
index 00000000..5f628177
--- /dev/null
+++ b/stwzhj-modules/stwzhj-extract/src/main/java/org/dromara/extract/ExtractApplication.java
@@ -0,0 +1,24 @@
+package org.dromara.extract;
+
+import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * 系统模块
+ *
+ * @author ruoyi
+ */
+@EnableDubbo
+@EnableScheduling
+@SpringBootApplication
+public class ExtractApplication {
+ public static void main(String[] args) {
+ SpringApplication application = new SpringApplication(ExtractApplication.class);
+ application.setApplicationStartup(new BufferingApplicationStartup(2048));
+ application.run(args);
+ System.out.println("(♥◠‿◠)ノ゙ 抽取模块启动成功 ლ(´ڡ`ლ)゙ ");
+ }
+}
diff --git a/stwzhj-modules/stwzhj-extract/src/main/java/org/dromara/extract/config/AsyncConfig.java b/stwzhj-modules/stwzhj-extract/src/main/java/org/dromara/extract/config/AsyncConfig.java
new file mode 100644
index 00000000..ada3cd7c
--- /dev/null
+++ b/stwzhj-modules/stwzhj-extract/src/main/java/org/dromara/extract/config/AsyncConfig.java
@@ -0,0 +1,27 @@
+package org.dromara.extract.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@EnableAsync
+public class AsyncConfig {
+
+
+ @Bean("migrationExecutor")
+ public Executor migrationExecutor() {
+ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ executor.setCorePoolSize(2);
+ executor.setMaxPoolSize(4);
+ executor.setQueueCapacity(100);
+ executor.setThreadNamePrefix("migration-task-");
+ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 防止丢任务
+ executor.initialize();
+ return executor;
+ }
+}
diff --git a/stwzhj-modules/stwzhj-extract/src/main/java/org/dromara/extract/controller/AddressController.java b/stwzhj-modules/stwzhj-extract/src/main/java/org/dromara/extract/controller/AddressController.java
new file mode 100644
index 00000000..c970bafd
--- /dev/null
+++ b/stwzhj-modules/stwzhj-extract/src/main/java/org/dromara/extract/controller/AddressController.java
@@ -0,0 +1,72 @@
+package org.dromara.extract.controller;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.extract.service.impl.DataMigrationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RequiredArgsConstructor
+@RestController
+@Slf4j
+public class AddressController extends BaseController {
+
+
+ @Autowired
+ private DataMigrationService dataMigrationService;
+
+ // 用于监控任务状态
+ private boolean isRunning = false;
+
+ @GetMapping("/start")
+ public ResponseEntity startMigration() {
+ if (isRunning) {
+ return ResponseEntity.badRequest()
+ .body("迁移任务已在运行中,请勿重复提交!");
+ }
+
+ // 异步启动任务
+ isRunning = true;
+ new Thread(() -> {
+ try {
+ log.info("🚀 开始异步执行数据迁移任务...");
+ dataMigrationService.startMigration();
+ } catch (Exception e) {
+ log.error("❌ 迁移任务执行异常", e);
+ } finally {
+ isRunning = false;
+ }
+ }).start();
+
+ return ResponseEntity.ok("✅ 迁移任务已提交,正在后台执行...");
+ }
+
+ @GetMapping("/status")
+ public ResponseEntity