DiskUnitTest.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. import cn.reghao.jutil.jdk.converter.DateTimeConverter;
  2. import cn.reghao.jutil.jdk.serializer.JsonConverter;
  3. import cn.reghao.jutil.jdk.string.SnowFlake;
  4. import cn.reghao.oss.api.dto.ObjectInfo;
  5. import cn.reghao.oss.api.dto.ServerInfo;
  6. import cn.reghao.oss.api.dto.rest.UploadFileRet;
  7. import cn.reghao.oss.sdk.OssClient;
  8. import cn.reghao.tnb.file.app.FileApplication;
  9. import cn.reghao.tnb.file.app.zchat.db.mapper.ChatFileMapper;
  10. import cn.reghao.tnb.file.app.zchat.db.mapper.ChatMessageMapper;
  11. import cn.reghao.tnb.file.app.zchat.model.constant.ChatMsgType;
  12. import cn.reghao.tnb.file.app.zchat.model.po.ChatMessage;
  13. import cn.reghao.tnb.file.app.zchat.model.po.ChatCall;
  14. import cn.reghao.tnb.file.app.zchat.model.po.ChatFile;
  15. import com.google.gson.JsonArray;
  16. import com.google.gson.JsonElement;
  17. import com.google.gson.JsonObject;
  18. import com.google.gson.JsonPrimitive;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.junit.jupiter.api.Test;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.boot.test.context.SpringBootTest;
  23. import org.springframework.test.context.ActiveProfiles;
  24. import java.io.File;
  25. import java.io.IOException;
  26. import java.nio.file.*;
  27. import java.nio.file.attribute.BasicFileAttributes;
  28. import java.time.LocalDateTime;
  29. import java.util.*;
  30. @Slf4j
  31. @ActiveProfiles("dev")
  32. @SpringBootTest(classes = FileApplication.class)
  33. public class DiskUnitTest {
  34. @Autowired
  35. ChatMessageMapper chatMessageMapper;
  36. @Autowired
  37. ChatFileMapper chatFileMapper;
  38. void walkDir(Path path) throws IOException {
  39. Files.walkFileTree(path, new SimpleFileVisitor<>() {
  40. @Override
  41. public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
  42. File file1 = file.toFile();
  43. process(file1);
  44. return FileVisitResult.CONTINUE;
  45. }
  46. });
  47. }
  48. private void process(File file) {
  49. }
  50. @Test
  51. public void fileWalk() throws Exception {
  52. String baseDir = "/disk/1";
  53. //Path path = Paths.get(baseDir);
  54. //walkDir(path);
  55. /*String filePath = "/home/reghao/Downloads/v2-cb256.jpg";
  56. UploadFileRet uploadFileRet = uploadFile(new File(filePath));
  57. String objectId = uploadFileRet.getUploadId();
  58. String signedUrl = getOssClient().getSignedUrl(objectId, ObjectAction.access.getName(), null);
  59. System.out.println(signedUrl);*/
  60. parseTelegram();
  61. }
  62. String baseDir = "/home/reghao/Downloads/0/tg/tg_json";
  63. private void parseTelegram() {
  64. List<ChatMessage> chatMessageList = new ArrayList<>();
  65. List<ChatFile> chatFileList = new ArrayList<>();
  66. List<ChatCall> chatCallList = new ArrayList<>();
  67. String path = baseDir + "/result.json";
  68. File jsonFile = new File(path);
  69. JsonObject jsonObject = JsonConverter.jsonFileToObject(jsonFile, JsonObject.class);
  70. JsonArray jsonArray = jsonObject.get("chats").getAsJsonObject().get("list").getAsJsonArray();
  71. JsonObject chat = jsonArray.get(0).getAsJsonObject();
  72. JsonArray messages = chat.get("messages").getAsJsonArray();
  73. for (JsonElement jsonElement : messages) {
  74. JsonObject jsonObject1 = jsonElement.getAsJsonObject();
  75. try {
  76. long id = jsonObject1.get("id").getAsLong();
  77. String date = jsonObject1.get("date").getAsString();
  78. LocalDateTime createAt = DateTimeConverter.localDateTime2(date.replace("T", " "));
  79. String type = jsonObject1.get("type").getAsString();
  80. if ("service".equals(type)) {
  81. long senderId = jsonObject1.get("actor_id").getAsLong();
  82. long messageId = snowFlake.nextId();
  83. ChatMessage chatMessage = new ChatMessage(messageId, chatId, senderId, createAt);
  84. chatMessage.setMsgType(ChatMsgType.audioCall.getCode());
  85. String callType = "audio";
  86. double duration = 0.0D;
  87. String discardReason = jsonObject1.get("discard_reason").getAsString();
  88. if ("hangup".equals(discardReason)) {
  89. duration = jsonObject1.get("duration_seconds").getAsDouble();
  90. }
  91. ChatCall chatCall = new ChatCall(messageId, callType, duration, discardReason);
  92. chatCallList.add(chatCall);
  93. chatMessageList.add(chatMessage);
  94. continue;
  95. }
  96. String from = jsonObject1.get("from").getAsString();
  97. long fromId = jsonObject1.get("from_id").getAsLong();
  98. long senderId = userMap.get(fromId);
  99. long messageId = snowFlake.nextId();
  100. ChatMessage chatMessage = new ChatMessage(messageId, chatId, senderId, createAt);
  101. JsonElement jsonElement1 = jsonObject1.get("text");
  102. if (jsonElement1 instanceof JsonPrimitive) {
  103. String text = jsonObject1.get("text").getAsString();
  104. chatMessage.setMsgType(ChatMsgType.text.getCode());
  105. chatMessage.setContent(text);
  106. } else if (jsonElement1 instanceof JsonArray) {
  107. String text1 = "";
  108. for (JsonElement jsonElement2 : jsonElement1.getAsJsonArray()) {
  109. if (jsonElement2 instanceof JsonPrimitive) {
  110. text1 = jsonElement2.getAsString();
  111. } else if (jsonElement2 instanceof JsonObject) {
  112. try {
  113. JsonObject jsonObject2 = jsonElement2.getAsJsonObject();
  114. String type1 = jsonObject2.get("type").getAsString();
  115. String link1 = jsonObject2.get("text").getAsString();
  116. if (type1.equals("link")) {
  117. chatMessage.setMsgType(ChatMsgType.chatLink.getCode());
  118. chatMessage.setContent(text1);
  119. chatMessage.setUrl(link1);
  120. } else if (type1.equals("email")) {
  121. chatMessage.setMsgType(ChatMsgType.chatLink.getCode());
  122. chatMessage.setContent(text1);
  123. chatMessage.setUrl(link1);
  124. } else {
  125. System.out.printf("unknown type1: %s\n", type1);
  126. }
  127. } catch (Exception e) {
  128. System.out.println(e.getMessage());
  129. }
  130. }
  131. }
  132. } else {
  133. System.out.printf("text field is unknown type: %s\n", jsonObject1.get("text"));
  134. }
  135. String mediaType = "NoMedia";
  136. if (jsonObject1.get("media_type") != null) {
  137. mediaType = jsonObject1.get("media_type").getAsString();
  138. }
  139. if (!mediaType.equals("NoMedia")) {
  140. String filePath = jsonObject1.get("file").getAsString();
  141. File file = new File(baseDir + "/" + filePath);
  142. if (!file.exists()) {
  143. System.out.printf("file message %s not exist, continue next loop\n", filePath);
  144. continue;
  145. }
  146. if ("voice_message".equals(mediaType)) {
  147. chatMessage.setMsgType(ChatMsgType.audio.getCode());
  148. UploadFileRet uploadFileRet = uploadFile(file);
  149. String objectId = uploadFileRet.getUploadId();
  150. ObjectInfo objectInfo = getOssClient().getObjectInfo(objectId);
  151. ChatFile chatFile = new ChatFile(chatMessage.getMessageId(), objectInfo);
  152. chatFileList.add(chatFile);
  153. } else if ("video_message".equals(mediaType)) {
  154. chatMessage.setMsgType(ChatMsgType.video.getCode());
  155. UploadFileRet uploadFileRet = uploadFile(file);
  156. String objectId = uploadFileRet.getUploadId();
  157. ObjectInfo objectInfo = getOssClient().getObjectInfo(objectId);
  158. ChatFile chatFile = new ChatFile(chatMessage.getMessageId(), objectInfo);
  159. chatFileList.add(chatFile);
  160. } else if ("video_file".equals(mediaType)) {
  161. chatMessage.setMsgType(ChatMsgType.video.getCode());
  162. UploadFileRet uploadFileRet = uploadFile(file);
  163. String objectId = uploadFileRet.getUploadId();
  164. ObjectInfo objectInfo = getOssClient().getObjectInfo(objectId);
  165. ChatFile chatFile = new ChatFile(chatMessage.getMessageId(), objectInfo);
  166. chatFileList.add(chatFile);
  167. } else if ("animation".equals(mediaType)) {
  168. if (filePath.endsWith("gif.mp4")) {
  169. String filePath1 = filePath.replace(".mp4", "");
  170. File file1 = new File(baseDir + "/" + filePath1);
  171. if (!file1.exists()) {
  172. System.out.printf("file message %s not exist, continue next loop\n", filePath1);
  173. continue;
  174. }
  175. }
  176. chatMessage.setMsgType(ChatMsgType.image.getCode());
  177. UploadFileRet uploadFileRet = uploadFile(file);
  178. String objectId = uploadFileRet.getUploadId();
  179. ObjectInfo objectInfo = getOssClient().getObjectInfo(objectId);
  180. ChatFile chatFile = new ChatFile(chatMessage.getMessageId(), objectInfo);
  181. chatFileList.add(chatFile);
  182. } else if ("sticker".equals(mediaType)) {
  183. if (filePath.endsWith(".tgs")) {
  184. String filePath1 = filePath + "_thumb.jpg";
  185. File file1 = new File(baseDir + "/" + filePath1);
  186. if (!file1.exists()) {
  187. System.out.printf("file message %s not exist, continue next loop\n", filePath1);
  188. continue;
  189. }
  190. }
  191. chatMessage.setMsgType(ChatMsgType.image.getCode());
  192. UploadFileRet uploadFileRet = uploadFile(file);
  193. String objectId = uploadFileRet.getUploadId();
  194. ObjectInfo objectInfo = getOssClient().getObjectInfo(objectId);
  195. ChatFile chatFile = new ChatFile(chatMessage.getMessageId(), objectInfo);
  196. chatFileList.add(chatFile);
  197. }
  198. }
  199. if (jsonObject1.get("photo") != null) {
  200. String photoPath = jsonObject1.get("photo").getAsString();
  201. File photoFile = new File(baseDir + "/" + photoPath);
  202. if (!photoFile.exists()) {
  203. System.out.printf("file message %s not exist, continue next loop\n", photoPath);
  204. }
  205. chatMessage.setMsgType(ChatMsgType.image.getCode());
  206. UploadFileRet uploadFileRet = uploadFile(photoFile);
  207. String objectId = uploadFileRet.getUploadId();
  208. ObjectInfo objectInfo = getOssClient().getObjectInfo(objectId);
  209. ChatFile chatFile = new ChatFile(chatMessage.getMessageId(), objectInfo);
  210. chatFileList.add(chatFile);
  211. }
  212. //System.out.printf("%s - %s[%s]\n", date, fromId, from);
  213. chatMessageList.add(chatMessage);
  214. } catch (Exception e) {
  215. System.out.println(e.getMessage());
  216. }
  217. }
  218. System.out.println();
  219. /*chatFileMapper.saveAll(chatFileList);
  220. chatMessageMapper.saveAll(chatMessageList);*/
  221. }
  222. long chatId = 10002L;
  223. SnowFlake snowFlake = new SnowFlake(1L, 1L);
  224. Map<Long, Long> userMap = Map.of(
  225. 10001L, 10001L,
  226. 10002L, 10002L
  227. );
  228. private UploadFileRet uploadFile(File file) throws Exception {
  229. OssClient ossClient = getOssClient();
  230. int channelCode = 109;
  231. ServerInfo serverInfo = ossClient.getServerInfo(channelCode);
  232. UploadFileRet uploadFileRet = ossClient.putObject(serverInfo, file);
  233. return uploadFileRet;
  234. }
  235. private OssClient getOssClient() {
  236. String endpoint = "https://ossconsole.reghao.cn";
  237. String ak = "PmvonhHI";
  238. String sk = "28aQEK7wJ6U5m7E1u7";
  239. OssClient ossClient = new OssClient(endpoint, ak, sk);
  240. return ossClient;
  241. }
  242. }