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