File 수신 로직 완료(처리(TaskExecutorService)는 미완료)

main
semin.baek 10 months ago
parent b51741487e
commit 7e150edd73

@ -4,6 +4,8 @@ import com.bsmlab.dfx.agent.config.AgentConfigDto;
import lombok.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
@ -19,6 +21,7 @@ public class ReceiveMessageDto implements Serializable {
private String recipientHostId;
private String recipientDropBoxId;
private String data;
private List<String> attachFileList = new ArrayList<>();
private ProcessStatus processStatus;
public static enum ProcessStatus {

@ -15,9 +15,17 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
@RequiredArgsConstructor
@ -35,7 +43,6 @@ public class ListenerService {
ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_FAIL).resultText("금일 전송한 메시지 중 중복된 UUID가 존재합니다.").build();
}
else {
//receiveMessageDto.setProcessStatus();
dropBoxService.add(receiveMessageDto);
ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_SUCCESS).build();
}
@ -67,12 +74,32 @@ public class ListenerService {
firstPart = iterator.next();
String messageJsonString = new String(firstPart.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
ReceiveMessageDto receiveMessageDto = MessageUtils.toReceiveMessageDto(messageJsonString);
// DropBox(수신설정) 가져오기
AgentConfigDto.DropBox dropBox = agentConfigReader.getDropBox(receiveMessageDto.getRecipientDropBoxId());
// DropBox 의 경로에 따라서 파일 저장 위치 설정
String saveDirectoryRoot = dropBox.getSaveDirectoryRoot();
Date today = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd/hh/mm/ss");
String targetDirectoryString = saveDirectoryRoot + "/" + dateFormat.format(today);
File targetDirectory = new File(targetDirectoryString);
if(!targetDirectory.exists()) {
targetDirectory.mkdirs();
}
byte[] buff = new byte[4096];
while(iterator.hasNext()) {
// 파일 수신 처리
Part part = iterator.next();
//TODO 파일 수신 처리
String fileName = part.getSubmittedFileName();
String targetFilePath = targetDirectoryString + "/" + fileName;
Path targetPath = Paths.get(targetDirectoryString, fileName);
try(InputStream inputStream = part.getInputStream()) {
Files.copy(inputStream, targetPath, StandardCopyOption.REPLACE_EXISTING);
}
receiveMessageDto.getAttachFileList().add(targetFilePath);
}
// 수신 정보를 queue 에 저장하고 Ack 설정
dropBoxService.add(receiveMessageDto);
ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_SUCCESS).build();
}
}
catch(IllegalMessageException | IOException | InCompleteMessageException | NullMessageException e) {

@ -11,10 +11,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.EnumUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.*;
public class MessageUtils {
private MessageUtils() {};
@ -135,7 +132,7 @@ public class MessageUtils {
.senderHostId(senderHostId).senderTimestamp(senderTimestamp)
.messageUuid(messageUuid).messageType(messageType).receivedTimestamp(receivedTimestamp)
.recipientHostId(recipientHostId).recipientDropBoxId(recipientDropBoxId)
.data(dataString).processStatus(ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED)
.data(dataString).attachFileList(new ArrayList<>()).processStatus(ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED)
.build();
}
catch(JsonProcessingException e) {

Loading…
Cancel
Save