diff --git a/deploy/baidu-translate/Dockerfile b/deploy/baidu-translate/Dockerfile
new file mode 100644
index 0000000..8c20813
--- /dev/null
+++ b/deploy/baidu-translate/Dockerfile
@@ -0,0 +1,21 @@
+# 使用官方 Python 3.8.2 slim 镜像(精简版)
+FROM python:3.8.2-slim
+
+# 设置工作目录
+WORKDIR /app
+
+# 安装依赖前先复制 requirements(利用 Docker 缓存)
+COPY requirements.txt .
+
+# 升级 pip 并安装依赖(使用国内源加速,可选)
+RUN pip install --no-cache-dir --upgrade pip \
+ && pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
+
+# 复制应用代码
+COPY . .
+
+# 暴露端口
+EXPOSE 5000
+
+# 启动命令(使用 gunicorn 提升生产性能)
+CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "2", "--timeout", "60", "main:app"]
\ No newline at end of file
diff --git a/deploy/baidu-translate/main.py b/deploy/baidu-translate/main.py
new file mode 100644
index 0000000..ccaf2fc
--- /dev/null
+++ b/deploy/baidu-translate/main.py
@@ -0,0 +1,57 @@
+# main.py
+
+from flask import Flask, request, jsonify
+from translate import translate_text
+
+app = Flask(__name__)
+
+
+@app.route('/translate', methods=['POST'])
+def translate_api():
+ """
+ 多语言翻译接口
+ 请求体示例:
+ {
+ "text": "Hello world",
+ "source_lang": "en", // 可选,默认 auto
+ "target_lang": "zh" // 可选,默认 zh
+ }
+ """
+ data = request.get_json()
+ if not data or 'text' not in data:
+ return jsonify({"error": "缺少参数 'text'"}), 400
+
+ text = data['text']
+ source_lang = data.get('source_lang', 'auto')
+ target_lang = data.get('target_lang', 'zh')
+
+ result = translate_text(text, source_lang, target_lang)
+
+ if result['success']:
+ return jsonify({
+ "translated_text": result['translated_text'],
+ "source_lang": source_lang,
+ "target_lang": target_lang
+ })
+ else:
+ return jsonify({"error": result['error']}), 400
+
+
+@app.route('/health', methods=['GET'])
+def health_check():
+ return jsonify({"status": "ok", "service": "baidu-translate"})
+
+
+@app.route('/', methods=['GET'])
+def index():
+ return jsonify({
+ "message": "Baidu Translate API Service",
+ "endpoints": {
+ "translate": "POST /translate",
+ "health": "GET /health"
+ }
+ })
+
+
+if __name__ == '__main__':
+ app.run(host='0.0.0.0', port=5000, debug=False)
diff --git a/deploy/baidu-translate/requirements.txt b/deploy/baidu-translate/requirements.txt
new file mode 100644
index 0000000..aead026
--- /dev/null
+++ b/deploy/baidu-translate/requirements.txt
@@ -0,0 +1,3 @@
+Flask==2.3.3
+requests==2.31.0
+gunicorn==21.2.0
\ No newline at end of file
diff --git a/deploy/baidu-translate/run.sh b/deploy/baidu-translate/run.sh
new file mode 100644
index 0000000..13409fc
--- /dev/null
+++ b/deploy/baidu-translate/run.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# 构建镜像
+echo "正在构建 Docker 镜像..."
+docker build -t baidu-translate-api:latest .
+
+# 停止并删除旧容器(如果存在)
+if [ "$(docker ps -q -f name=baidu-translate)" ]; then
+ echo "停止旧容器..."
+ docker stop baidu-translate
+fi
+
+if [ "$(docker ps -aq -f status=exited -f name=baidu-translate)" ]; then
+ echo "删除旧容器..."
+ docker rm baidu-translate
+fi
+
+# 启动新容器
+echo "启动容器..."
+docker run -d \
+ --name baidu-translate \
+ -p 28081:5000 \
+ --restart unless-stopped \
+ baidu-translate-api:latest
+
+echo "服务已启动!访问 http://<服务器IP>:5000/health"
\ No newline at end of file
diff --git a/deploy/baidu-translate/settings.py b/deploy/baidu-translate/settings.py
new file mode 100644
index 0000000..87d9451
--- /dev/null
+++ b/deploy/baidu-translate/settings.py
@@ -0,0 +1,26 @@
+# settings.py
+
+# 百度翻译 API 配置
+BAIDU_APP_ID = "20200811000539778"
+BAIDU_SECRET_KEY = "uK9IyUhuEWX3PIqN75iC"
+
+TIMEOUT = 10
+MAX_TEXT_LENGTH = 100
+
+# 百度语言代码映射(ISO 639-1 → Baidu Code)
+BAIDU_LANG_MAP = {
+ 'zh': 'zh',
+ 'en': 'en',
+ 'ko': 'kor',
+ 'ja': 'jp',
+ 'fr': 'fra',
+ 'es': 'spa',
+ 'ru': 'ru',
+ 'de': 'de',
+ 'pt': 'pt',
+ 'it': 'it',
+ 'ar': 'ara',
+ 'th': 'th',
+ 'vi': 'vie',
+ # 可继续扩展
+}
diff --git a/deploy/baidu-translate/translate.py b/deploy/baidu-translate/translate.py
new file mode 100644
index 0000000..b6ba5d7
--- /dev/null
+++ b/deploy/baidu-translate/translate.py
@@ -0,0 +1,71 @@
+# translate.py
+
+import hashlib
+import random
+import requests
+import settings
+
+
+def iso_to_baidu_lang(iso_code: str) -> str:
+ """将 ISO 639-1 语言代码转换为百度翻译所需代码"""
+ code = settings.BAIDU_LANG_MAP.get(iso_code.lower())
+ if code is None:
+ raise ValueError(f"不支持的语言代码: {iso_code}")
+ return code
+
+
+def translate_text(text: str, source_lang: str = "auto", target_lang: str = "zh") -> dict:
+ """
+ 使用百度翻译 API 进行多语言翻译
+ :param text: 原文
+ :param source_lang: 源语言 ISO 代码(如 'ko', 'en'),默认 'auto' 自动检测
+ :param target_lang: 目标语言 ISO 代码,默认 'zh'
+ :return: {'success': bool, 'translated_text': str, 'error': str (optional)}
+ """
+ if not text or not text.strip():
+ return {"success": False, "error": "输入文本为空"}
+
+ try:
+ from_lang = "auto" if source_lang == "auto" else iso_to_baidu_lang(source_lang)
+ to_lang = iso_to_baidu_lang(target_lang)
+ except ValueError as e:
+ return {"success": False, "error": str(e)}
+
+ q = text[:settings.MAX_TEXT_LENGTH]
+
+ try:
+ salt = random.randint(32768, 65536)
+ sign_str = settings.BAIDU_APP_ID + q + str(salt) + settings.BAIDU_SECRET_KEY
+ sign = hashlib.md5(sign_str.encode()).hexdigest()
+
+ payload = {
+ 'q': q,
+ 'from': from_lang,
+ 'to': to_lang,
+ 'appid': settings.BAIDU_APP_ID,
+ 'salt': salt,
+ 'sign': sign
+ }
+
+ response = requests.post(
+ "https://fanyi-api.baidu.com/api/trans/vip/translate",
+ data=payload,
+ timeout=settings.TIMEOUT
+ )
+ response.raise_for_status()
+ result = response.json()
+
+ if 'error_code' in result:
+ error_msg = f"百度API错误 {result.get('error_code')}: {result.get('error_msg', '')}"
+ return {"success": False, "error": error_msg}
+
+ if 'trans_result' not in result or not result['trans_result']:
+ return {"success": False, "error": "翻译结果为空"}
+
+ translated = result['trans_result'][0]['dst']
+ return {"success": True, "translated_text": translated}
+
+ except requests.exceptions.RequestException as e:
+ return {"success": False, "error": f"网络请求失败: {str(e)}"}
+ except Exception as e:
+ return {"success": False, "error": f"未知错误: {str(e)}"}
diff --git a/dsp/dsp.iml b/dsp/dsp.iml
index 6453e56..36aa587 100644
--- a/dsp/dsp.iml
+++ b/dsp/dsp.iml
@@ -9,6 +9,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -20,7 +30,7 @@
-
+
@@ -30,7 +40,6 @@
-
@@ -93,7 +102,6 @@
-
@@ -106,8 +114,6 @@
-
-
@@ -138,8 +144,8 @@
-
-
+
+
@@ -147,7 +153,7 @@
-
+
@@ -195,5 +201,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dsp/pom.xml b/dsp/pom.xml
index 658d53b..da6fe5e 100644
--- a/dsp/pom.xml
+++ b/dsp/pom.xml
@@ -94,15 +94,34 @@
true
true
-
- org.projectlombok
- lombok
-
mysql
mysql-connector-java
runtime
+
+ commons-net
+ commons-net
+ 3.10.0
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+
+ org.apache.poi
+ poi
+ 5.2.4
+
+
+ org.apache.poi
+ poi-ooxml
+ 5.2.4
+
+
diff --git a/dsp/src/main/java/com/jsc/dsp/DspApplication.java b/dsp/src/main/java/com/jsc/dsp/DspApplication.java
index 3802233..88682b6 100644
--- a/dsp/src/main/java/com/jsc/dsp/DspApplication.java
+++ b/dsp/src/main/java/com/jsc/dsp/DspApplication.java
@@ -3,9 +3,10 @@ package com.jsc.dsp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.scheduling.annotation.EnableScheduling;
-@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
+@SpringBootApplication
@EnableScheduling
public class DspApplication {
diff --git a/dsp/src/main/java/com/jsc/dsp/config/Configuration.java b/dsp/src/main/java/com/jsc/dsp/config/Configuration.java
index a194e5f..c6c1383 100644
--- a/dsp/src/main/java/com/jsc/dsp/config/Configuration.java
+++ b/dsp/src/main/java/com/jsc/dsp/config/Configuration.java
@@ -16,18 +16,6 @@ import java.util.concurrent.Executors;
@Component
public class Configuration {
- @Value("${es.ip}")
- String esIp;
-
- @Value("${es.port}")
- Integer esPort;
-
- @Value("${es.username}")
- String esUsername;
-
- @Value("${es.password}")
- String esPassword;
-
@Bean
public JacksonJsonParser getJacksonParser() {
return new JacksonJsonParser();
@@ -48,8 +36,4 @@ public class Configuration {
return Executors.newFixedThreadPool(4);
}
- @Bean
- public RestHighLevelClient esClient() {
- return EsUtils.getElasticsearchClient(esIp, esPort, esUsername, esPassword);
- }
}
diff --git a/dsp/src/main/java/com/jsc/dsp/controller/ExportController.java b/dsp/src/main/java/com/jsc/dsp/controller/ExportController.java
new file mode 100644
index 0000000..d1c8ba5
--- /dev/null
+++ b/dsp/src/main/java/com/jsc/dsp/controller/ExportController.java
@@ -0,0 +1,47 @@
+package com.jsc.dsp.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jsc.dsp.model.ReturnT;
+import com.jsc.dsp.utils.AutoExportAndUpload;
+import com.jsc.dsp.utils.DatabaseConnector;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/export")
+@ConditionalOnProperty(name = "switch.auto-export-and-upload", havingValue = "true", matchIfMissing = true)
+public class ExportController {
+
+ @Resource
+ DatabaseConnector databaseConnector;
+
+ @Resource
+ AutoExportAndUpload autoExportAndUpload;
+
+ @PostMapping("/exportExcel")
+ public ReturnT exportExcel(@RequestBody JSONObject object) {
+ try {
+ String startTime = object.getString("startTime");
+ databaseConnector.exportToXlsx(startTime);
+ return new ReturnT<>(200, "", "");
+ } catch (Exception e) {
+ return new ReturnT<>(500, e.getMessage(), "");
+ }
+ }
+
+ @PostMapping("/triggerTask")
+ public ReturnT triggerTask() {
+ try {
+ new Thread(() -> autoExportAndUpload.exportDataAndUpload()).start();
+ return new ReturnT<>(200, "", "");
+ } catch (Exception e) {
+ return new ReturnT<>(500, e.getMessage(), "");
+ }
+ }
+
+}
diff --git a/dsp/src/main/java/com/jsc/dsp/dao/ConfigRepository.java b/dsp/src/main/java/com/jsc/dsp/dao/ConfigRepository.java
new file mode 100644
index 0000000..3aa6e53
--- /dev/null
+++ b/dsp/src/main/java/com/jsc/dsp/dao/ConfigRepository.java
@@ -0,0 +1,10 @@
+package com.jsc.dsp.dao;
+
+import com.jsc.dsp.model.Config;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ConfigRepository extends JpaRepository {
+ Config findFirstByConfigName(String configName);
+}
diff --git a/dsp/src/main/java/com/jsc/dsp/dao/EsDataNewsRepository.java b/dsp/src/main/java/com/jsc/dsp/dao/EsDataNewsRepository.java
new file mode 100644
index 0000000..aa769ab
--- /dev/null
+++ b/dsp/src/main/java/com/jsc/dsp/dao/EsDataNewsRepository.java
@@ -0,0 +1,12 @@
+package com.jsc.dsp.dao;
+
+import com.jsc.dsp.model.EsDataNewsView;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface EsDataNewsRepository extends JpaRepository {
+ List findAllByEsLoadtimeAfter(String loadtime);
+}
diff --git a/dsp/src/main/java/com/jsc/dsp/dao/IndeximosRepository.java b/dsp/src/main/java/com/jsc/dsp/dao/IndeximosRepository.java
new file mode 100644
index 0000000..59b852b
--- /dev/null
+++ b/dsp/src/main/java/com/jsc/dsp/dao/IndeximosRepository.java
@@ -0,0 +1,9 @@
+package com.jsc.dsp.dao;
+
+import com.jsc.dsp.model.Indeximos;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface IndeximosRepository extends JpaRepository {
+}
diff --git a/dsp/src/main/java/com/jsc/dsp/model/Config.java b/dsp/src/main/java/com/jsc/dsp/model/Config.java
new file mode 100644
index 0000000..4b83f24
--- /dev/null
+++ b/dsp/src/main/java/com/jsc/dsp/model/Config.java
@@ -0,0 +1,15 @@
+package com.jsc.dsp.model;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+@Data
+public class Config {
+ @Id
+ Integer id;
+ String configName;
+ String configValue;
+}
diff --git a/dsp/src/main/java/com/jsc/dsp/model/EsDataNewsView.java b/dsp/src/main/java/com/jsc/dsp/model/EsDataNewsView.java
new file mode 100644
index 0000000..d6cfd5b
--- /dev/null
+++ b/dsp/src/main/java/com/jsc/dsp/model/EsDataNewsView.java
@@ -0,0 +1,36 @@
+package com.jsc.dsp.model;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Data
+@Table(name = "es_data_news")
+public class EsDataNewsView {
+ @Id
+ String esSid;
+ String esAuthors;
+ String esCarriertype;
+ String esCatalog;
+ String esCollection;
+ Float esDoclength;
+ String esLang;
+ String esLasttime;
+ String esLinks;
+ String esLoadtime;
+ String esSitename;
+ String esSrcname;
+ String esUrlcontent;
+ String esUrlcontentRaw;
+ String esUrlimage;
+ String esUrlname;
+ String esUrltime;
+ String esUrltitle;
+ String esUrltitleRaw;
+ String esAbstract;
+ String esKeywords;
+ String file;
+}
diff --git a/dsp/src/main/java/com/jsc/dsp/model/Indeximos.java b/dsp/src/main/java/com/jsc/dsp/model/Indeximos.java
index 483e354..583ab0c 100644
--- a/dsp/src/main/java/com/jsc/dsp/model/Indeximos.java
+++ b/dsp/src/main/java/com/jsc/dsp/model/Indeximos.java
@@ -2,10 +2,17 @@ package com.jsc.dsp.model;
import lombok.Data;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
import java.io.Serializable;
+@Entity
@Data
+@Table(name = "indeximos")
public class Indeximos implements Serializable {
+ @Id
+ String es_sid;
String es_abstract;
String es_annex;
String es_attachment;
@@ -56,7 +63,6 @@ public class Indeximos implements Serializable {
String es_repostuid;
String es_repostuname;
String es_rultopic;
- String es_sid;
String es_simhash;
String es_similarity;
String es_similaritycount;
diff --git a/dsp/src/main/java/com/jsc/dsp/service/ConfigService.java b/dsp/src/main/java/com/jsc/dsp/service/ConfigService.java
new file mode 100644
index 0000000..749c4a2
--- /dev/null
+++ b/dsp/src/main/java/com/jsc/dsp/service/ConfigService.java
@@ -0,0 +1,29 @@
+package com.jsc.dsp.service;
+
+import com.jsc.dsp.dao.ConfigRepository;
+import com.jsc.dsp.model.Config;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class ConfigService {
+
+ @Resource
+ ConfigRepository configRepository;
+
+ public String getConfigValueByName(String configName) {
+ return getConfigByName(configName).getConfigValue();
+ }
+
+ public Config getConfigByName(String configName) {
+ return configRepository.findFirstByConfigName(configName);
+ }
+
+ public void setConfigValueByName(String configName, String configValue) {
+ Config config = getConfigByName(configName);
+ config.setConfigValue(configValue);
+ configRepository.save(config);
+ }
+
+}
diff --git a/dsp/src/main/java/com/jsc/dsp/service/FileDlService.java b/dsp/src/main/java/com/jsc/dsp/service/FileDlService.java
index 3e2a2b4..afcf485 100644
--- a/dsp/src/main/java/com/jsc/dsp/service/FileDlService.java
+++ b/dsp/src/main/java/com/jsc/dsp/service/FileDlService.java
@@ -6,6 +6,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.json.JacksonJsonParser;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
@@ -21,6 +22,7 @@ import java.util.concurrent.Executors;
@Component
@EnableBinding(FileDlBinding.class)
+@ConditionalOnProperty(name = "switch.enable-file-dl-service", havingValue = "true", matchIfMissing = true)
public class FileDlService extends StreamService {
@Autowired
@@ -78,31 +80,14 @@ public class FileDlService extends StreamService {
}
int dlResult = fileUtils.downloadFromUrl(fileURL, protoSavePath);
if (dlResult == 1) {
- File transferPath = new File(transferBackupPath);
+ File transferPath = new File(protoSavePath);
File[] files = transferPath.listFiles();
if (files != null && files.length > 0) {
for (File transferFile : files) {
if (transferFile.getName().endsWith(".tar.gz")) {
- if (transferFile.getName().startsWith("attach")) {
- try {
- fileUtils.UnzipTarGzip(transferFile.getAbsolutePath(), nginxPath);
- logger.info("Unzip attachments " + transferFile.getName());
- } catch (Exception e) {
- logger.error("Unzip error!");
- }
- } else {
- try {
- fileUtils.UnzipTarGzip(transferFile.getAbsolutePath(), fileUnzipPath);
- logger.info("Unzip " + transferFile.getName());
- } catch (Exception e) {
- logger.error("Unzip error!");
- }
- }
+ fileUtils.moveFileToBackupFolder(transferFile, keepBackupFile);
}
- fileUtils.moveFileToBackupFolder(transferFile, keepBackupFile);
}
-// Runnable upload2Ceph = () -> fileUtils.uploadToCeph(fileUnzipPath);
-// pool.execute(upload2Ceph);
}
} else if (dlResult == 0) {
logger.error("File " + fileName + " download failure");
diff --git a/dsp/src/main/java/com/jsc/dsp/service/ProtobufService.java b/dsp/src/main/java/com/jsc/dsp/service/ProtobufService.java
index ceb1888..c0051e5 100644
--- a/dsp/src/main/java/com/jsc/dsp/service/ProtobufService.java
+++ b/dsp/src/main/java/com/jsc/dsp/service/ProtobufService.java
@@ -12,12 +12,14 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.json.JacksonJsonParser;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
@@ -30,6 +32,7 @@ import java.util.Map;
@Component
@EnableBinding(ProtobufBinding.class)
+@ConditionalOnProperty(name = "switch.enable-protobuf-service", havingValue = "true", matchIfMissing = true)
public class ProtobufService extends StreamService {
@Autowired
@@ -41,9 +44,6 @@ public class ProtobufService extends StreamService {
@Value("${custom.proto_save_path}")
String protoSavePath;
- @Value("${custom.transfer_backup_path}")
- String transferBackupPath;
-
@Value("${custom.keep_backup_file}")
String keepBackupFile;
@@ -55,7 +55,7 @@ public class ProtobufService extends StreamService {
private final Logger logger = LogManager.getLogger(ProtobufService.class.getName());
- @Autowired
+ @Resource
private ProtobufBinding source;
@Override
@@ -169,7 +169,7 @@ public class ProtobufService extends StreamService {
}
logger.debug("protobuf done");
// 转移备份目录的todist文件
- File transferPath = new File(transferBackupPath);
+ File transferPath = new File(protoSavePath);
File[] files = transferPath.listFiles();
if (files != null && files.length > 0) {
for (File transferFile : files) {
diff --git a/dsp/src/main/java/com/jsc/dsp/service/StorageService.java b/dsp/src/main/java/com/jsc/dsp/service/StorageService.java
index 8c45d1a..0a17473 100644
--- a/dsp/src/main/java/com/jsc/dsp/service/StorageService.java
+++ b/dsp/src/main/java/com/jsc/dsp/service/StorageService.java
@@ -1,31 +1,25 @@
package com.jsc.dsp.service;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.protobuf.Descriptors.FieldDescriptor;
import com.jsc.dsp.binding.StorageBinding;
import com.jsc.dsp.model.Indeximos;
import com.jsc.dsp.proto.EsOuterClass.Es;
import com.jsc.dsp.proto.EsOuterClass.EsSets;
-import com.jsc.dsp.utils.DBUtils;
-import com.jsc.dsp.utils.EsUtils;
-import com.jsc.dsp.utils.FileUtils;
+import com.jsc.dsp.utils.DatabaseConnector;
import com.jsc.dsp.utils.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.bulk.BulkRequest;
-import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.json.JacksonJsonParser;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.nio.charset.StandardCharsets;
import java.util.*;
@@ -33,6 +27,7 @@ import java.util.Base64.Decoder;
@Component
@EnableBinding(StorageBinding.class)
+@ConditionalOnProperty(name = "switch.enable-storage-service", havingValue = "true", matchIfMissing = true)
public class StorageService extends StreamService {
@Autowired
@@ -44,42 +39,21 @@ public class StorageService extends StreamService {
@Autowired
JacksonJsonParser jsonParser;
- @Value("${es.ip}")
- String esIp;
-
- @Value("${es.port}")
- Integer esPort;
-
- @Value("${es.username}")
- String esUsername;
-
- @Value("${es.password}")
- String esPassword;
-
- @Value("${es.index}")
- String esIndex;
-
@Value("${custom.dev-mode}")
boolean devMode;
@Value("${custom.local-file-storage-path}")
String localFileStoragePath;
- @Value("${db.driver}")
- String dbDriver;
-
- @Value("${db.url}")
- String dbUrl;
-
- @Value("${db.user}")
- String dbUser;
-
- @Value("${db.password}")
- String dbPassword;
+ @Value("${custom.websiteWhiteList}")
+ String websiteWhiteListString;
+ @Resource
+ DatabaseConnector databaseConnector;
private final Logger logger = LogManager.getLogger(StorageService.class.getName());
+
@Override
public void sendMessage(byte[] msg) {
source.StorageOutput().send(MessageBuilder.withPayload(msg).build());
@@ -91,8 +65,8 @@ public class StorageService extends StreamService {
@Override
@StreamListener(StorageBinding.STORAGE_PIPELINE_IN)
public void receiveMessage(Object payload) {
+ List websiteWhiteList = Arrays.asList(websiteWhiteListString.split(";"));
String tempString;
- ObjectMapper objectMapper = new ObjectMapper();
try {
tempString = new String(base64.decode(payload.toString()), StandardCharsets.UTF_8);
Map data = jsonParser.parseMap(tempString);
@@ -101,7 +75,6 @@ public class StorageService extends StreamService {
if ("public_info_data_".equals(protoName)) {
EsSets.Builder esSetsBuilder = EsSets.newBuilder();
EsSets esSets = EsSets.parseFrom(data.get("content").toString().getBytes(StandardCharsets.ISO_8859_1));
- List