diff --git a/renren-admin/pom.xml b/renren-admin/pom.xml
index 5a032808..0848337f 100644
--- a/renren-admin/pom.xml
+++ b/renren-admin/pom.xml
@@ -38,7 +38,7 @@
1.5.7
linux-x86_64
5.0
- 4.9.3
+ 3.14.9
1.8
@@ -143,6 +143,12 @@
io.minio
minio
${minio.version}
+
+
+ okio
+ com.squareup.okio
+
+
org.springframework.boot
diff --git a/renren-admin/src/main/java/io/renren/modules/resource/controller/ResourceController.java b/renren-admin/src/main/java/io/renren/modules/resource/controller/ResourceController.java
index c5fc4d12..ccc09718 100644
--- a/renren-admin/src/main/java/io/renren/modules/resource/controller/ResourceController.java
+++ b/renren-admin/src/main/java/io/renren/modules/resource/controller/ResourceController.java
@@ -17,10 +17,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
-import okhttp3.FormBody;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.Response;
+import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,12 +27,16 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import springfox.documentation.annotations.ApiIgnore;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
import java.util.*;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@@ -278,54 +279,52 @@ public class ResourceController {
@GetMapping("knowledgeBase")
@ApiOperation("对接知识库数据")
public Result knowledgeBase() {
-
-// final MultiValueMap paramMap = new LinkedMultiValueMap<>();
-// paramMap.add("app_id", appId);
-// paramMap.add("interface_id", methodId);
-// paramMap.add("version", version);
-// paramMap.add("charset", charset);
-// paramMap.add("timestamp", String.valueOf(timestamp));
-// paramMap.add("origin", origin);
- int pageSize = 100;
- AtomicInteger pageIndex = new AtomicInteger(1);
+ final int pageSize = 100;
+ final long timestamp = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
+ final OkHttpClient client = new OkHttpClient();
Arrays.stream(catalogIds).map(index -> {
- List task = new ArrayList<>();
- AtomicBoolean end = new AtomicBoolean(false);
+ logger.info("处理:" + index);
+ CopyOnWriteArrayList task = new CopyOnWriteArrayList<>();
+ AtomicBoolean end = new AtomicBoolean(true);
+ AtomicInteger pageIndex = new AtomicInteger(1);
+ AtomicInteger maxPage = new AtomicInteger(100); // 防止死循环
do {
int page = pageIndex.getAndIncrement();
+ logger.info("处理:" + index + " 分页{}", page);
task.add(CompletableFuture.supplyAsync(() -> {
- long timestamp = new Date().getTime();
- final JSONObject bizContentParam = new JSONObject();
- OkHttpClient client = new OkHttpClient();
- bizContentParam.put("appkey", appKey);
- bizContentParam.put("catalogId", index);
- bizContentParam.put("pageIndex", page);
- bizContentParam.put("pageSize", pageSize);
- String bizContent_ = bizContentParam.toJSONString();
- // 通过FormBody对象构建Builder来添加表单参数
- final FormBody.Builder signFormBody = new FormBody.Builder()
- .add("app_id", appId)
- .add("interface_id", methodId)
- .add("version", version)
- .add("timestamp", String.valueOf(timestamp))
- .add("origin", origin)
- .add("biz_content", bizContent_);
- logger.error(index + "分页{}对接知识库数据请求参数:" + signFormBody.build().contentType().toString(), page);
-
- Request signRequest = new Request.Builder().url(sign).post(signFormBody.build()).build();
try {
+ logger.info("分页任务处理:" + index + " 分页{} 时间 -->" + timestamp, page);
+ JSONObject bizContentParam = new JSONObject();
+ bizContentParam.put("appkey", appKey);
+ bizContentParam.put("catalogId", index);
+ bizContentParam.put("pageIndex", page);
+ bizContentParam.put("pageSize", pageSize);
+ String bizContent_ = bizContentParam.toJSONString();
+ logger.info("biz_content参数:{}", bizContent_);
+ // 通过FormBody对象构建Builder来添加表单参数
+ FormBody.Builder signFormBody = new FormBody.Builder()
+ .add("app_id", appId)
+ .add("interface_id", methodId)
+ .add("version", version)
+ .add("timestamp", String.valueOf(timestamp))
+ .add("origin", origin)
+ .add("charset", charset)
+ .add("biz_content", bizContent_);
+ logger.info(index + "分页{}对接知识库数据请求参数:" + signFormBody.build().contentType().toString(), page);
+
+ Request signRequest = new Request.Builder().url(sign).post(signFormBody.build()).build();
Response signResponse =
client.newCall(signRequest).execute();
String signResult = signResponse.body().string();
- logger.error("{}分页signResult数据:" + signResult, page);
+ logger.info("{}分页signResult数据:" + signResult, page);
JSONObject signJsonObject = JSON.parseObject(signResult);
if (!signJsonObject.containsKey("data")) {
- logger.error("获取sign异常:" + signResult);
+ logger.info("获取sign异常:" + signResult);
end.set(false);
throw new RuntimeException("获取sign异常");
}
if (signJsonObject.get("data") == null) {
- logger.error("获取sign异常:" + signResult);
+ logger.info("获取sign异常:" + signResult);
end.set(false);
throw new RuntimeException("获取sign异常");
}
@@ -333,26 +332,34 @@ public class ResourceController {
String signString = signData.get("sign").toString();
signFormBody.add("sign", signString);
- Request gatewayRequest = new Request.Builder().url(sign).post(signFormBody.build()).build();
+ Request gatewayRequest = new Request.Builder().url(gateway).post(signFormBody.build()).build();
Response gatewayResponse = client.newCall(gatewayRequest).execute();
String gatewayResult = gatewayResponse.body().string();
- logger.error("{}分页数据:" + gatewayResult, page);
+ logger.info("{}分页数据:" + gatewayResult, page);
JSONObject gatewayJsonObject = JSON.parseObject(gatewayResult);
JSONObject gatewayData = JSON.parseObject(gatewayJsonObject.get("data").toString());
JSONArray infos = gatewayData.getJSONObject("data").getJSONArray("infos");
+ int total = gatewayData.getJSONObject("data").getIntValue("total");
+ if (maxPage.get() != (total / pageSize)) {
+ maxPage.set(total / pageSize);
+ }
if (!infos.isEmpty()) { // 不为空则数据分页还没传输结束
- end.set(true);
+ logger.info("--继续分页--");
+ end.set(true); // TODO
} else {
end.set(false);
}
return infos;
} catch (Exception e) {
- logger.error("获取异常:", e);
+ logger.info("获取异常:", e);
end.set(false);
return new JSONArray();
}
}).thenAcceptAsync(list -> {
logger.info("知识库数据量:{}", list.size());
+ if (list.size() < 1) {
+ end.set(false);
+ }
list.parallelStream().forEach(resource -> {
Map map = (Map) resource;
ResourceDTO dto = new ResourceDTO();
@@ -361,6 +368,7 @@ public class ResourceController {
dto.setVisits(0L);
//所属部门暂时设为青岛市政府办公厅
dto.setDeptId(1517116100113850370L);
+ dto.setNote1(map.get("uuid").toString());
dto.setDelFlag(0);
ArrayList infoList = new ArrayList<>();
map.forEach((key, value) -> {
@@ -394,80 +402,19 @@ public class ResourceController {
}
infoList.add(attrEntity);
dto.setInfoList(infoList);
- logger.info("插入:" + dto.getName());
resourceService.insertWithAttrs(dto);
+ logger.info("插入:" + dto.getName());
});
}));
- } while (end.get());
+ try {
+ Thread.sleep(500L);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ } while (end.get() || pageIndex.get() < maxPage.get());
return task;
}).collect(Collectors.toList());
return new Result().ok("任务开启成功!");
-// CompletableFuture.allOf(completableFutures.stream().flatMap(i -> i.stream()).toArray(new CompletableFuture[completableFutures.size()])).join();
-// for (String catalogId : catalogIds) {
-// bizContent = "{\"appkey\":\"" + appKey + "\",\n" +
-// "\"catalogId\":\"" + catalogId + "\",\n" +
-// "\"pageIndex\":1,\n" +
-// "\"pageSize\":1000}";
-// paramMap.add("biz_content", bizContent);
-// try {
-// String signResult = restTemplate.postForObject(sign, paramMap, String.class);
-// JSONObject signJsonObject = JSON.parseObject(signResult);
-// Map signData = (Map) signJsonObject.get("data");
-// String signString = signData.get("sign").toString();
-// paramMap.add("sign", signString);
-// String gatewayResult = restTemplate.postForObject(gateway, paramMap, String.class);
-// JSONObject gatewayJsonObject = JSON.parseObject(gatewayResult);
-// JSONObject gatewayData = JSON.parseObject(gatewayJsonObject.get("data").toString());
-// JSONArray infos = gatewayData.getJSONObject("data").getJSONArray("infos");
-// infos.forEach(item -> {
-// Map map = (Map) item;
-// ResourceDTO dto = new ResourceDTO();
-// dto.setName(map.get("title").toString());
-// dto.setType("知识库");
-// dto.setVisits(0L);
-// //所属部门暂时设为青岛市政府办公厅
-// dto.setDeptId(1517116100113850370L);
-// dto.setDelFlag(0);
-// ArrayList infoList = new ArrayList<>();
-// map.forEach((key, value) -> {
-// switch (key) {
-// case "title":
-// dto.setName(value.toString());
-// break;
-// case "url":
-// dto.setLink(value.toString());
-// break;
-// case "createtime":
-// Date createDate = new Date(Long.parseLong(value.toString()));
-// dto.setCreateDate(createDate);
-// break;
-// default:
-// AttrEntity attrEntity = new AttrEntity();
-// attrEntity.setDelFlag(0);
-// attrEntity.setAttrType(key);
-// attrEntity.setAttrValue(value.toString());
-// infoList.add(attrEntity);
-// break;
-// }
-// });
-// AttrEntity attrEntity = new AttrEntity();
-// attrEntity.setDelFlag(0);
-// attrEntity.setAttrType("文件类型");
-// if ("f49561afc7204f008c4bb3cd821eb6ba".equals(catalogId)) {
-// attrEntity.setAttrValue("政府公报");
-// } else {
-// attrEntity.setAttrValue("政策解读");
-// }
-// infoList.add(attrEntity);
-// dto.setInfoList(infoList);
-// resourceService.insertWithAttrs(dto);
-// });
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// paramMap.remove("sign");
-// paramMap.remove("biz_content");
-// }
}