diff --git a/oscm/board/src/modules/targets/WebsiteList.vue b/oscm/board/src/modules/targets/WebsiteList.vue
index b231323..b2ed37b 100644
--- a/oscm/board/src/modules/targets/WebsiteList.vue
+++ b/oscm/board/src/modules/targets/WebsiteList.vue
@@ -6,8 +6,11 @@
新增
- 导出
+ 导出
+
+ 导入
@@ -68,11 +71,11 @@
-
-
-
-
-
+
+
+
+
+
{
config.plugin('html')
diff --git a/oscm/server/src/main/java/com/jsc/oscm/controller/TargetWebsiteController.java b/oscm/server/src/main/java/com/jsc/oscm/controller/TargetWebsiteController.java
index 6e1584b..bf68a75 100644
--- a/oscm/server/src/main/java/com/jsc/oscm/controller/TargetWebsiteController.java
+++ b/oscm/server/src/main/java/com/jsc/oscm/controller/TargetWebsiteController.java
@@ -8,10 +8,15 @@ import com.jsc.oscm.entity.TargetWebsite;
import com.jsc.oscm.model.ReturnT;
import com.jsc.oscm.service.TargetWebsiteService;
import org.jetbrains.annotations.NotNull;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
+import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -120,4 +125,34 @@ public class TargetWebsiteController {
return JSON.toJSONString(returnT);
}
+ @GetMapping("/target/website/export")
+ public ResponseEntity exportWebsites() throws IOException {
+ String jsonData = targetWebsiteService.exportAllWebsites();
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ headers.setContentDispositionFormData("attachment", "target_websites.json");
+
+ return ResponseEntity.ok()
+ .headers(headers)
+ .body(jsonData.getBytes());
+ }
+
+ /**
+ * 从JSON文件导入目标网站数据
+ *
+ * @param file 上传的JSON文件
+ * @return 导入结果消息
+ */
+ @PostMapping("/target/website/import")
+ public ResponseEntity importWebsites(@RequestParam("file") MultipartFile file) {
+ try {
+ int count = targetWebsiteService.importWebsites(file);
+ return ResponseEntity.ok("成功导入 " + count + " 条记录");
+ } catch (IOException e) {
+ return ResponseEntity.badRequest().body("导入失败: " + e.getMessage());
+ }
+ }
+
+
}
diff --git a/oscm/server/src/main/java/com/jsc/oscm/service/TargetWebsiteService.java b/oscm/server/src/main/java/com/jsc/oscm/service/TargetWebsiteService.java
index 265523d..018895d 100644
--- a/oscm/server/src/main/java/com/jsc/oscm/service/TargetWebsiteService.java
+++ b/oscm/server/src/main/java/com/jsc/oscm/service/TargetWebsiteService.java
@@ -2,6 +2,8 @@ package com.jsc.oscm.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.jsc.oscm.dao.TargetWebsiteRepository;
import com.jsc.oscm.entity.RulesFilter;
import com.jsc.oscm.entity.RulesParser;
@@ -10,8 +12,10 @@ import com.jsc.oscm.util.StringUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.data.domain.*;
import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
+import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -151,4 +155,32 @@ public class TargetWebsiteService {
return resObj;
}
+ private final ObjectMapper objectMapper = new ObjectMapper();
+
+ public String exportAllWebsites() throws IOException {
+ List websites = targetWebsiteRepository.findAll();
+ return objectMapper.writeValueAsString(websites);
+ }
+
+ /**
+ * 从JSON文件导入目标网站数据
+ * @param file 包含网站数据的JSON文件
+ * @return 导入的记录数量
+ */
+ public int importWebsites(MultipartFile file) throws IOException {
+ // 读取JSON文件内容
+ String content = new String(file.getBytes());
+
+ // 解析JSON为对象列表
+ List websites = objectMapper.readValue(
+ content,
+ new TypeReference>() {}
+ );
+
+ // 保存到数据库
+ targetWebsiteRepository.saveAll(websites);
+
+ return websites.size();
+ }
+
}
diff --git a/oscm/server/src/main/resources/application.properties b/oscm/server/src/main/resources/application.properties
index f4d2515..445c105 100644
--- a/oscm/server/src/main/resources/application.properties
+++ b/oscm/server/src/main/resources/application.properties
@@ -1,6 +1,6 @@
server.port=8081
server.servlet.context-path=/api
-spring.datasource.url=jdbc:mysql://47.113.231.200:28089/oscm?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+spring.datasource.url=jdbc:mysql://38.54.94.107:28089/oscm?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=passok123A
@@ -16,7 +16,7 @@ crawl.media.project=MediaSpiders
crawl.media.spider.user=WeiboUserSpider
crawl.media.spider.search=WeiboSearchSpider
crawl.project.file.path=/data/oscm/
-xxl.job.admin.server=http://47.115.228.133:28082/
+xxl.job.admin.server=http://38.54.94.107:28082/
xxl.job.executor.groupid=1
xxl.job.executor.handlerMulti=demoJobHandler
xxl.job.executor.handlerSingle=scheduleHandler