diff --git a/src/main/java/com/munjaon/server/config/DataSourceConfig.java b/src/main/java/com/munjaon/server/config/DataSourceConfig.java index 26d11fe..c4f3788 100644 --- a/src/main/java/com/munjaon/server/config/DataSourceConfig.java +++ b/src/main/java/com/munjaon/server/config/DataSourceConfig.java @@ -1,5 +1,6 @@ package com.munjaon.server.config; +import com.zaxxer.hikari.HikariDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; @@ -28,7 +29,7 @@ public class DataSourceConfig { @Bean(name = "datasource") @ConfigurationProperties(prefix = "spring.datasource.server") public DataSource dataSource() { - return DataSourceBuilder.create().build(); + return DataSourceBuilder.create().type(HikariDataSource.class).build(); } @Primary diff --git a/src/main/java/com/munjaon/server/config/RunnerConfiguration.java b/src/main/java/com/munjaon/server/config/RunnerConfiguration.java index 8ad87e5..ab11b46 100644 --- a/src/main/java/com/munjaon/server/config/RunnerConfiguration.java +++ b/src/main/java/com/munjaon/server/config/RunnerConfiguration.java @@ -118,6 +118,60 @@ public class RunnerConfiguration { return args -> System.out.println("Runner Bean #2"); } + @Bean + @Order(2) + public CommandLineRunner getRunnerBeanForKatQueue() { + try { + String[] svcArray = ServiceUtil.getServiceNames(serverConfig.getStringArray("KAT.SERVICE_LIST")); + if (svcArray == null || svcArray.length == 0) { + log.info("KAT service list is empty"); + } else { + if (ServiceUtil.isDuplicate(svcArray)) { + log.info("KAT service list is duplicated"); + } else { + for (String svc : svcArray) { + log.info("SERVICE CREATE : {}", svc); + QueueInfo queueInfo = QueueInfo.builder().queueName(svc).serviceType("KAT").queuePath(serverConfig.getString("KAT.QUEUE_PATH")).build(); + KakaoAlarmWriteQueue katWriteQueue = new KakaoAlarmWriteQueue(queueInfo); + KakaoAlarmReadQueue katReadQueue = new KakaoAlarmReadQueue(queueInfo); + QueueServerService queueServerService = new QueueServerService(svc, katWriteQueue, katReadQueue); + queueServerService.start(); + } + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } + return args -> System.out.println("Runner Bean #2"); + } + + @Bean + @Order(2) + public CommandLineRunner getRunnerBeanForKftQueue() { + try { + String[] svcArray = ServiceUtil.getServiceNames(serverConfig.getStringArray("KFT.SERVICE_LIST")); + if (svcArray == null || svcArray.length == 0) { + log.info("KFT service list is empty"); + } else { + if (ServiceUtil.isDuplicate(svcArray)) { + log.info("KFT service list is duplicated"); + } else { + for (String svc : svcArray) { + log.info("SERVICE CREATE : {}", svc); + QueueInfo queueInfo = QueueInfo.builder().queueName(svc).serviceType("KFT").queuePath(serverConfig.getString("KFT.QUEUE_PATH")).build(); + KakaoFriendWriteQueue kftWriteQueue = new KakaoFriendWriteQueue(queueInfo); + KakaoFriendReadQueue kftReadQueue = new KakaoFriendReadQueue(queueInfo); + QueueServerService queueServerService = new QueueServerService(svc, kftWriteQueue, kftReadQueue); + queueServerService.start(); + } + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } + return args -> System.out.println("Runner Bean #2"); + } + @Bean @Order(3) public CommandLineRunner getRunnerBeanForSmsCollector() { @@ -150,6 +204,54 @@ public class RunnerConfiguration { return args -> System.out.println("Runner Bean SmsCollector #3"); } + @Bean + @Order(3) + public CommandLineRunner getRunnerBeanForMmsCollector() { + try { + String serviceName = "MMS_COLLECTOR"; + String serviceType = serverConfig.getString(serviceName + ".SERVICE_TYPE"); + int port = serverConfig.getInt(serviceName + ".SERVICE_PORT"); +// CollectBackServerService collectServerService = new CollectBackServerService(serviceName, serviceType, port); + CollectServerService collectServerService = new CollectServerService(serviceName, serviceType, port); + collectServerService.start(); + } catch (Exception e) { + throw new RuntimeException(e); + } + return args -> System.out.println("Runner Bean SmsCollector #3"); + } + + @Bean + @Order(3) + public CommandLineRunner getRunnerBeanForKatCollector() { + try { + String serviceName = "KAT_COLLECTOR"; + String serviceType = serverConfig.getString(serviceName + ".SERVICE_TYPE"); + int port = serverConfig.getInt(serviceName + ".SERVICE_PORT"); +// CollectBackServerService collectServerService = new CollectBackServerService(serviceName, serviceType, port); + CollectServerService collectServerService = new CollectServerService(serviceName, serviceType, port); + collectServerService.start(); + } catch (Exception e) { + throw new RuntimeException(e); + } + return args -> System.out.println("Runner Bean SmsCollector #3"); + } + + @Bean + @Order(3) + public CommandLineRunner getRunnerBeanForKftCollector() { + try { + String serviceName = "KFT_COLLECTOR"; + String serviceType = serverConfig.getString(serviceName + ".SERVICE_TYPE"); + int port = serverConfig.getInt(serviceName + ".SERVICE_PORT"); +// CollectBackServerService collectServerService = new CollectBackServerService(serviceName, serviceType, port); + CollectServerService collectServerService = new CollectServerService(serviceName, serviceType, port); + collectServerService.start(); + } catch (Exception e) { + throw new RuntimeException(e); + } + return args -> System.out.println("Runner Bean SmsCollector #3"); + } + @Bean @Order(3) public CommandLineRunner getRunnerBeanForReporter() { diff --git a/src/main/java/com/munjaon/server/config/ServiceCode.java b/src/main/java/com/munjaon/server/config/ServiceCode.java index 992b9c2..d46b332 100644 --- a/src/main/java/com/munjaon/server/config/ServiceCode.java +++ b/src/main/java/com/munjaon/server/config/ServiceCode.java @@ -21,11 +21,13 @@ public enum ServiceCode { /* SMS 메시지 */ MSG_ERROR_SMS_MESSAGE(400, "SMS Message is Null OR is Over Limit Byte"), - /* LMS, MMS 제목, 메시지 */ - MSG_ERROR_MEDIA_SUBJECT(500, "LMS, MMS Subject is Null OR is Over Limit Byte"), - MSG_ERROR_MEDIA_MESSAGE(501, "LMS, MMS Message is Null OR is Over Limit Byte"), + /* LMS, MMS, KAKAO 제목, 메시지 */ + MSG_ERROR_MEDIA_SUBJECT(500, "LMS, MMS, KAKAO Subject is Null OR is Over Limit Byte"), + MSG_ERROR_MEDIA_MESSAGE(501, "LMS, MMS, KAKAO Message is Null OR is Over Limit Byte"), - /* 카카오 알림톡, 친구톡 메시지 */ + /* 카카오 알림톡, 친구톡 메시지, KAKAO_SENDER_KEY, KAKAO_TEMPLATE_CODE */ + MSG_ERROR_KAKAO_SENDER_KEY(600, "KAKAO_SENDER_KEY is Null OR is Over Limit Byte"), + MSG_ERROR_KAKAO_TEMPLATE_CODE(601, "KAKAO_TEMPLATE_CODE is Null OR is Over Limit Byte"), /* 리포트 관련 에러 메시지 */ MSG_ERROR_REPORT(800, "REPORT DATA is Null OR is invalid"), diff --git a/src/main/java/com/munjaon/server/queue/config/KakaoBodyConfig.java b/src/main/java/com/munjaon/server/queue/config/KakaoBodyConfig.java new file mode 100644 index 0000000..3a52fd8 --- /dev/null +++ b/src/main/java/com/munjaon/server/queue/config/KakaoBodyConfig.java @@ -0,0 +1,22 @@ +package com.munjaon.server.queue.config; + +public final class KakaoBodyConfig { + /* 제목 (Length : 60 / Position : 161) */ + public static final int SUBJECT_BYTE_LENGTH = 60; + public static final int SUBJECT_BYTE_POSITION = BodyCommonConfig.AGENT_CODE_BYTE_POSITION + BodyCommonConfig.AGENT_CODE_BYTE_LENGTH; + /* LMS/MMS Message (Length : 2000 / Position : 221) */ + public static final int MEDIA_MSG_BYTE_LENGTH = 2000; + public static final int MEDIA_MSG_BYTE_POSITION = SUBJECT_BYTE_POSITION + SUBJECT_BYTE_LENGTH; + /* KAKAO_SENDER_KEY (Length : 40 / Position : 2221) */ + public static final int KAKAO_SENDER_KEY_BYTE_LENGTH = 40; + public static final int KAKAO_SENDER_KEY_BYTE_POSITION = MEDIA_MSG_BYTE_POSITION + MEDIA_MSG_BYTE_LENGTH; + /* KAKAO_TEMPLATE_CODE (Length : 64 / Position : 2261) */ + public static final int KAKAO_TEMPLATE_CODE_BYTE_LENGTH = 64; + public static final int KAKAO_TEMPLATE_CODE_BYTE_POSITION = KAKAO_SENDER_KEY_BYTE_POSITION + KAKAO_SENDER_KEY_BYTE_LENGTH; + /* JSON 파일 (Length : 128 / Position : 2222) */ + public static final int FILENAME_JSON_BYTE_LENGTH = 128; + public static final int FILENAME_JSON_BYTE_POSITION = KAKAO_TEMPLATE_CODE_BYTE_POSITION + KAKAO_TEMPLATE_CODE_BYTE_LENGTH; + + /* KAKAO Body 길이 */ + public static final int KAKAO_SUM_BYTE_LENGTH = BodyCommonConfig.COMMON_SUM_BYTE_LENGTH + SUBJECT_BYTE_LENGTH + MEDIA_MSG_BYTE_LENGTH + KAKAO_SENDER_KEY_BYTE_LENGTH + KAKAO_TEMPLATE_CODE_BYTE_LENGTH + FILENAME_JSON_BYTE_LENGTH; +} diff --git a/src/main/java/com/munjaon/server/queue/config/QueueConstants.java b/src/main/java/com/munjaon/server/queue/config/QueueConstants.java index 9357fc0..dcb434d 100644 --- a/src/main/java/com/munjaon/server/queue/config/QueueConstants.java +++ b/src/main/java/com/munjaon/server/queue/config/QueueConstants.java @@ -76,5 +76,31 @@ public final class QueueConstants { public static final int REPORT_TELECOM_LENGTH = 7; // 큐에 저장하기전에 바이트를 채울 문자 - public static final byte SET_DEFAULT_BYTE = (byte) 0x20; + public static final byte SET_DEFAULT_BYTE = (byte) 0x00; + + public static String getString(byte[] srcArray) { + if (srcArray == null) { + return null; + } + int size = 0; + for (int i = 0, len = srcArray.length; i < len; i++) { + if (srcArray[i] == SET_DEFAULT_BYTE) { + continue; + } + size++; + } + byte[] destArray = null; + if (size > 0) { + destArray = new byte[size]; + int index = 0; + for (int i = 0, len = srcArray.length; i < len; i++) { + if (srcArray[i] == SET_DEFAULT_BYTE) { + continue; + } + destArray[index++] = srcArray[i]; + } + } + + return destArray == null ? null : new String(destArray); + } } diff --git a/src/main/java/com/munjaon/server/queue/dto/BasicMessageDto.java b/src/main/java/com/munjaon/server/queue/dto/BasicMessageDto.java index d1b1978..e8661f3 100644 --- a/src/main/java/com/munjaon/server/queue/dto/BasicMessageDto.java +++ b/src/main/java/com/munjaon/server/queue/dto/BasicMessageDto.java @@ -35,4 +35,8 @@ public class BasicMessageDto { protected int userFileSize01 = 0; protected int userFileSize02 = 0; protected int userFileSize03 = 0; + + private String kakaoSenderKey; + private String kakaoTemplateCode; + private String kakaoJsonFile; } diff --git a/src/main/java/com/munjaon/server/queue/mapper/KatMapper.java b/src/main/java/com/munjaon/server/queue/mapper/KatMapper.java new file mode 100644 index 0000000..553b365 --- /dev/null +++ b/src/main/java/com/munjaon/server/queue/mapper/KatMapper.java @@ -0,0 +1,9 @@ +package com.munjaon.server.queue.mapper; + +import com.munjaon.server.queue.dto.BasicMessageDto; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface KatMapper { + int insert(BasicMessageDto messageDto); +} diff --git a/src/main/java/com/munjaon/server/queue/mapper/KftMapper.java b/src/main/java/com/munjaon/server/queue/mapper/KftMapper.java new file mode 100644 index 0000000..19d108a --- /dev/null +++ b/src/main/java/com/munjaon/server/queue/mapper/KftMapper.java @@ -0,0 +1,9 @@ +package com.munjaon.server.queue.mapper; + +import com.munjaon.server.queue.dto.BasicMessageDto; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface KftMapper { + int insert(BasicMessageDto messageDto); +} diff --git a/src/main/java/com/munjaon/server/queue/mapper/LmsMapper.java b/src/main/java/com/munjaon/server/queue/mapper/LmsMapper.java index 3dbb53b..2be78e8 100644 --- a/src/main/java/com/munjaon/server/queue/mapper/LmsMapper.java +++ b/src/main/java/com/munjaon/server/queue/mapper/LmsMapper.java @@ -1,7 +1,9 @@ package com.munjaon.server.queue.mapper; import com.munjaon.server.queue.dto.BasicMessageDto; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface LmsMapper { int insert(BasicMessageDto messageDto); } diff --git a/src/main/java/com/munjaon/server/queue/mapper/MmsMapper.java b/src/main/java/com/munjaon/server/queue/mapper/MmsMapper.java new file mode 100644 index 0000000..6b7ba0e --- /dev/null +++ b/src/main/java/com/munjaon/server/queue/mapper/MmsMapper.java @@ -0,0 +1,9 @@ +package com.munjaon.server.queue.mapper; + +import com.munjaon.server.queue.dto.BasicMessageDto; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface MmsMapper { + int insert(BasicMessageDto messageDto); +} diff --git a/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmQueuePool.java b/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmQueuePool.java index c688d65..6e4a504 100644 --- a/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmQueuePool.java +++ b/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmQueuePool.java @@ -6,7 +6,7 @@ public class KakaoAlarmQueuePool extends QueuePool { private KakaoAlarmQueuePool() {} - public synchronized static KakaoAlarmQueuePool getInstance(){ + public synchronized static KakaoAlarmQueuePool getInstance() { if(queueInstance == null){ queueInstance = new KakaoAlarmQueuePool(); } diff --git a/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmReadQueue.java b/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmReadQueue.java new file mode 100644 index 0000000..e743498 --- /dev/null +++ b/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmReadQueue.java @@ -0,0 +1,39 @@ +package com.munjaon.server.queue.pool; + +import com.munjaon.server.queue.config.KakaoBodyConfig; +import com.munjaon.server.queue.config.QueueConstants; +import com.munjaon.server.queue.dto.BasicMessageDto; +import com.munjaon.server.queue.dto.QueueInfo; +import com.munjaon.server.util.MessageUtil; + +import java.nio.ByteBuffer; + +public class KakaoAlarmReadQueue extends ReadQueue { + public KakaoAlarmReadQueue(QueueInfo queueInfo) throws Exception { + this.queueInfo = queueInfo; +// initQueue(); + } + + @Override + void popBuffer() throws Exception { + this.channel.position(MessageUtil.calcReadPosition(this.popCounter, KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH)); + this.channel.read(this.dataBuffer); + } + + @Override + void getBytesForExtendMessage(BasicMessageDto messageDto) { + MessageUtil.getBytesForKakaoMessage(this.dataBuffer, messageDto); + } + + @Override + void initDataBuffer() { + if (this.dataBuffer == null) { + this.dataBuffer = ByteBuffer.allocateDirect(KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH); + } + this.dataBuffer.clear(); + for(int loopCnt = 0; loopCnt < KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH; loopCnt++){ + this.dataBuffer.put(QueueConstants.SET_DEFAULT_BYTE); + } + this.dataBuffer.position(0); + } +} diff --git a/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmWriteQueue.java b/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmWriteQueue.java index 25350ca..14b23fe 100644 --- a/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmWriteQueue.java +++ b/src/main/java/com/munjaon/server/queue/pool/KakaoAlarmWriteQueue.java @@ -1,21 +1,75 @@ package com.munjaon.server.queue.pool; +import com.munjaon.server.config.ServiceCode; +import com.munjaon.server.queue.config.KakaoBodyConfig; +import com.munjaon.server.queue.config.QueueConstants; import com.munjaon.server.queue.dto.BasicMessageDto; +import com.munjaon.server.queue.dto.QueueInfo; +import com.munjaon.server.util.MessageUtil; + +import java.nio.ByteBuffer; public class KakaoAlarmWriteQueue extends WriteQueue { + public KakaoAlarmWriteQueue(QueueInfo queueInfo) throws Exception { + this.queueInfo = queueInfo; + /* 큐초기화 */ +// initQueue(); + } @Override public int isValidateMessageForExtend(BasicMessageDto messageDto) { - return 0; + /* 13. 제목 */ + if (MessageUtil.isEmptyForMessage(messageDto.getUserSubject(), true) || MessageUtil.isOverByteForMessage(messageDto.getUserSubject(), KakaoBodyConfig.SUBJECT_BYTE_LENGTH, false)) { + return ServiceCode.MSG_ERROR_MEDIA_SUBJECT.getCode(); + } + /* 14. 메시지 */ + if (MessageUtil.isEmptyForMessage(messageDto.getUserMessage(), true) || MessageUtil.isOverByteForMessage(messageDto.getUserMessage(), KakaoBodyConfig.MEDIA_MSG_BYTE_LENGTH, false)) { + return ServiceCode.MSG_ERROR_MEDIA_MESSAGE.getCode(); + } + /* 15. KAKAO_SENDER_KEY */ + if (MessageUtil.isEmptyForMessage(messageDto.getKakaoSenderKey(), true) || MessageUtil.isOverByteForMessage(messageDto.getKakaoSenderKey(), KakaoBodyConfig.KAKAO_SENDER_KEY_BYTE_LENGTH, false)) { + return ServiceCode.MSG_ERROR_MEDIA_MESSAGE.getCode(); + } + /* 16. KAKAO_TEMPLATE_CODE */ + if (MessageUtil.isEmptyForMessage(messageDto.getKakaoTemplateCode(), true) || MessageUtil.isOverByteForMessage(messageDto.getKakaoTemplateCode(), KakaoBodyConfig.KAKAO_TEMPLATE_CODE_BYTE_LENGTH, false)) { + return ServiceCode.MSG_ERROR_MEDIA_MESSAGE.getCode(); + } + + return ServiceCode.OK.getCode(); } @Override public void pushMessageToBuffer(BasicMessageDto messageDto) throws Exception { - + if (isValidateMessage(messageDto) == ServiceCode.OK.getCode()) { + /* 1. dataBuffer 초기화 */ + initDataBuffer(); + /* 2. messageDto >> dataBuffer */ + MessageUtil.setBytesForCommonMessage(this.dataBuffer, messageDto); + MessageUtil.setBytesForKakaoMessage(this.dataBuffer, messageDto); + /* 3. 파일큐에 적재 */ + /* 3.1 Header 정보 다시 일기 */ + readHeader(); + if (this.dataBuffer != null){ + this.channel.position(MessageUtil.calcWritePosition(this.pushCounter, KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH)); + this.dataBuffer.flip(); + this.channel.write(this.dataBuffer); + /* 3.2 Push 카운터 증가 */ + this.pushCounter = this.pushCounter + 1; + /* 3.3 Header 정보 변경 */ + writeHeader(); + } + } } @Override public void initDataBuffer() { - + if (this.dataBuffer == null) { + this.dataBuffer = ByteBuffer.allocateDirect(KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH); + } + this.dataBuffer.clear(); + for(int loopCnt = 0; loopCnt < KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH; loopCnt++){ + this.dataBuffer.put(QueueConstants.SET_DEFAULT_BYTE); + } + this.dataBuffer.position(0); } } diff --git a/src/main/java/com/munjaon/server/queue/pool/KakaoFriendReadQueue.java b/src/main/java/com/munjaon/server/queue/pool/KakaoFriendReadQueue.java new file mode 100644 index 0000000..20d35db --- /dev/null +++ b/src/main/java/com/munjaon/server/queue/pool/KakaoFriendReadQueue.java @@ -0,0 +1,39 @@ +package com.munjaon.server.queue.pool; + +import com.munjaon.server.queue.config.KakaoBodyConfig; +import com.munjaon.server.queue.config.QueueConstants; +import com.munjaon.server.queue.dto.BasicMessageDto; +import com.munjaon.server.queue.dto.QueueInfo; +import com.munjaon.server.util.MessageUtil; + +import java.nio.ByteBuffer; + +public class KakaoFriendReadQueue extends ReadQueue { + public KakaoFriendReadQueue(QueueInfo queueInfo) throws Exception { + this.queueInfo = queueInfo; +// initQueue(); + } + + @Override + void popBuffer() throws Exception { + this.channel.position(MessageUtil.calcReadPosition(this.popCounter, KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH)); + this.channel.read(this.dataBuffer); + } + + @Override + void getBytesForExtendMessage(BasicMessageDto messageDto) { + MessageUtil.getBytesForKakaoMessage(this.dataBuffer, messageDto); + } + + @Override + void initDataBuffer() { + if (this.dataBuffer == null) { + this.dataBuffer = ByteBuffer.allocateDirect(KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH); + } + this.dataBuffer.clear(); + for(int loopCnt = 0; loopCnt < KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH; loopCnt++){ + this.dataBuffer.put(QueueConstants.SET_DEFAULT_BYTE); + } + this.dataBuffer.position(0); + } +} diff --git a/src/main/java/com/munjaon/server/queue/pool/KakaoFriendWriteQueue.java b/src/main/java/com/munjaon/server/queue/pool/KakaoFriendWriteQueue.java index 17d0a00..b7030c7 100644 --- a/src/main/java/com/munjaon/server/queue/pool/KakaoFriendWriteQueue.java +++ b/src/main/java/com/munjaon/server/queue/pool/KakaoFriendWriteQueue.java @@ -1,20 +1,75 @@ package com.munjaon.server.queue.pool; +import com.munjaon.server.config.ServiceCode; +import com.munjaon.server.queue.config.KakaoBodyConfig; +import com.munjaon.server.queue.config.QueueConstants; import com.munjaon.server.queue.dto.BasicMessageDto; +import com.munjaon.server.queue.dto.QueueInfo; +import com.munjaon.server.util.MessageUtil; + +import java.nio.ByteBuffer; public class KakaoFriendWriteQueue extends WriteQueue { + public KakaoFriendWriteQueue(QueueInfo queueInfo) throws Exception { + this.queueInfo = queueInfo; + /* 큐초기화 */ +// initQueue(); + } + @Override public int isValidateMessageForExtend(BasicMessageDto messageDto) { - return 0; + /* 13. 제목 */ + if (MessageUtil.isEmptyForMessage(messageDto.getUserSubject(), true) || MessageUtil.isOverByteForMessage(messageDto.getUserSubject(), KakaoBodyConfig.SUBJECT_BYTE_LENGTH, false)) { + return ServiceCode.MSG_ERROR_MEDIA_SUBJECT.getCode(); + } + /* 14. 메시지 */ + if (MessageUtil.isEmptyForMessage(messageDto.getUserMessage(), true) || MessageUtil.isOverByteForMessage(messageDto.getUserMessage(), KakaoBodyConfig.MEDIA_MSG_BYTE_LENGTH, false)) { + return ServiceCode.MSG_ERROR_MEDIA_MESSAGE.getCode(); + } + /* 15. KAKAO_SENDER_KEY */ + if (MessageUtil.isEmptyForMessage(messageDto.getKakaoSenderKey(), true) || MessageUtil.isOverByteForMessage(messageDto.getKakaoSenderKey(), KakaoBodyConfig.KAKAO_SENDER_KEY_BYTE_LENGTH, false)) { + return ServiceCode.MSG_ERROR_MEDIA_MESSAGE.getCode(); + } + /* 16. KAKAO_TEMPLATE_CODE */ + if (MessageUtil.isEmptyForMessage(messageDto.getKakaoTemplateCode(), true) || MessageUtil.isOverByteForMessage(messageDto.getKakaoTemplateCode(), KakaoBodyConfig.KAKAO_TEMPLATE_CODE_BYTE_LENGTH, false)) { + return ServiceCode.MSG_ERROR_MEDIA_MESSAGE.getCode(); + } + + return ServiceCode.OK.getCode(); } @Override public void pushMessageToBuffer(BasicMessageDto messageDto) throws Exception { - + if (isValidateMessage(messageDto) == ServiceCode.OK.getCode()) { + /* 1. dataBuffer 초기화 */ + initDataBuffer(); + /* 2. messageDto >> dataBuffer */ + MessageUtil.setBytesForCommonMessage(this.dataBuffer, messageDto); + MessageUtil.setBytesForKakaoMessage(this.dataBuffer, messageDto); + /* 3. 파일큐에 적재 */ + /* 3.1 Header 정보 다시 일기 */ + readHeader(); + if (this.dataBuffer != null){ + this.channel.position(MessageUtil.calcWritePosition(this.pushCounter, KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH)); + this.dataBuffer.flip(); + this.channel.write(this.dataBuffer); + /* 3.2 Push 카운터 증가 */ + this.pushCounter = this.pushCounter + 1; + /* 3.3 Header 정보 변경 */ + writeHeader(); + } + } } @Override public void initDataBuffer() { - + if (this.dataBuffer == null) { + this.dataBuffer = ByteBuffer.allocateDirect(KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH); + } + this.dataBuffer.clear(); + for(int loopCnt = 0; loopCnt < KakaoBodyConfig.KAKAO_SUM_BYTE_LENGTH; loopCnt++){ + this.dataBuffer.put(QueueConstants.SET_DEFAULT_BYTE); + } + this.dataBuffer.position(0); } } diff --git a/src/main/java/com/munjaon/server/queue/pool/ReadQueue.java b/src/main/java/com/munjaon/server/queue/pool/ReadQueue.java index b03f238..e7ec86b 100644 --- a/src/main/java/com/munjaon/server/queue/pool/ReadQueue.java +++ b/src/main/java/com/munjaon/server/queue/pool/ReadQueue.java @@ -150,12 +150,12 @@ public abstract class ReadQueue { // 생성날짜 가져오기 - 생성날짜(10) / 읽은카운트(10) / 쓴카운트(10) this.headerBuffer.position(QueueHeaderConfig.CREATE_DATE_POSITION); this.headerBuffer.get(this.headerArray); - this.createDate = (new String(this.headerArray)).trim(); + this.createDate = QueueConstants.getString(this.headerArray); // 쓴 카운트 가져오기 this.headerArray = new byte[QueueHeaderConfig.PUSH_COUNT_LENGTH]; this.headerBuffer.position(QueueHeaderConfig.PUSH_COUNT_POSITION); this.headerBuffer.get(this.headerArray); - this.pushCounter = Integer.parseInt((new String(this.headerArray)).trim()); + this.pushCounter = Integer.parseInt(QueueConstants.getString(this.headerArray)); } catch(Exception e) { throw e; } diff --git a/src/main/java/com/munjaon/server/queue/pool/WriteQueue.java b/src/main/java/com/munjaon/server/queue/pool/WriteQueue.java index 66e5ab5..21dae5d 100644 --- a/src/main/java/com/munjaon/server/queue/pool/WriteQueue.java +++ b/src/main/java/com/munjaon/server/queue/pool/WriteQueue.java @@ -93,12 +93,12 @@ public abstract class WriteQueue { // 생성날짜 가져오기 - 생성날짜(10) / 읽은카운트(10) / 쓴카운트(10) this.headerBuffer.position(QueueHeaderConfig.CREATE_DATE_POSITION); this.headerBuffer.get(this.headerArray); - this.createDate = (new String(this.headerArray)).trim(); + this.createDate = QueueConstants.getString(this.headerArray); // 쓴 카운트 가져오기 this.headerArray = new byte[QueueHeaderConfig.PUSH_COUNT_LENGTH]; this.headerBuffer.position(QueueHeaderConfig.PUSH_COUNT_POSITION); this.headerBuffer.get(this.headerArray); - this.pushCounter = Integer.parseInt((new String(this.headerArray)).trim()); + this.pushCounter = Integer.parseInt(QueueConstants.getString(this.headerArray)); } catch(Exception e) { throw e; } diff --git a/src/main/java/com/munjaon/server/queue/service/KakaoAlarmQueueService.java b/src/main/java/com/munjaon/server/queue/service/KakaoAlarmQueueService.java index bbe655f..37da67f 100644 --- a/src/main/java/com/munjaon/server/queue/service/KakaoAlarmQueueService.java +++ b/src/main/java/com/munjaon/server/queue/service/KakaoAlarmQueueService.java @@ -1,7 +1,10 @@ package com.munjaon.server.queue.service; +import com.munjaon.server.cache.service.SerialNoService; import com.munjaon.server.queue.dto.BasicMessageDto; +import com.munjaon.server.queue.mapper.KatMapper; import com.munjaon.server.queue.pool.KakaoAlarmMemoryQueue; +import com.munjaon.server.queue.pool.KakaoAlarmQueuePool; import com.munjaon.server.queue.pool.WriteQueue; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -11,36 +14,53 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class KakaoAlarmQueueService implements QueueAction { + private final KatMapper katMapper; + private final KakaoAlarmQueuePool queueInstance = KakaoAlarmQueuePool.getInstance(); private final KakaoAlarmMemoryQueue memoryQueue = KakaoAlarmMemoryQueue.getInstance(); + private final SerialNoService serialNoService; @Override public int getQueueSize() { - return 0; + return queueInstance.getQueueSize(); } @Override public boolean isExistQueue(String name) { - return false; + return queueInstance.isExistQueue(name); } @Override public void removeQueue(String name) { - + queueInstance.removeQueue(name); } @Override public void addQueue(WriteQueue queue) { - + queueInstance.addQueue(queue); } @Override public void pushQueue(BasicMessageDto data) { - + boolean isError = false; + try { + queueInstance.pushQueue(data); + } catch (Exception e) { + isError = true; +// throw new RuntimeException(e); + } + if (isError) { + log.error("Push queue failed"); + } } @Override public int saveMessageToTable(BasicMessageDto data) { - return 0; + String serialNo = serialNoService.getSerialNo(); + String groupSerialNo = serialNo.replace("MSGID", "MGRP"); + data.setId(serialNo); + data.setMsgGroupID(groupSerialNo); + log.debug("Save message to table : {}", data); + return katMapper.insert(data); } @Override diff --git a/src/main/java/com/munjaon/server/queue/service/KakaoFriendQueueService.java b/src/main/java/com/munjaon/server/queue/service/KakaoFriendQueueService.java index ee7bc00..02ac70d 100644 --- a/src/main/java/com/munjaon/server/queue/service/KakaoFriendQueueService.java +++ b/src/main/java/com/munjaon/server/queue/service/KakaoFriendQueueService.java @@ -1,7 +1,10 @@ package com.munjaon.server.queue.service; +import com.munjaon.server.cache.service.SerialNoService; import com.munjaon.server.queue.dto.BasicMessageDto; +import com.munjaon.server.queue.mapper.KftMapper; import com.munjaon.server.queue.pool.KakaoAlarmMemoryQueue; +import com.munjaon.server.queue.pool.KakaoFriendQueuePool; import com.munjaon.server.queue.pool.WriteQueue; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -11,36 +14,53 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class KakaoFriendQueueService implements QueueAction { + private final KftMapper kftMapper; + private final KakaoFriendQueuePool queueInstance = KakaoFriendQueuePool.getInstance(); private final KakaoAlarmMemoryQueue memoryQueue = KakaoAlarmMemoryQueue.getInstance(); + private final SerialNoService serialNoService; @Override public int getQueueSize() { - return 0; + return queueInstance.getQueueSize(); } @Override public boolean isExistQueue(String name) { - return false; + return queueInstance.isExistQueue(name); } @Override public void removeQueue(String name) { - + queueInstance.removeQueue(name); } @Override public void addQueue(WriteQueue queue) { - + queueInstance.addQueue(queue); } @Override public void pushQueue(BasicMessageDto data) { - + boolean isError = false; + try { + queueInstance.pushQueue(data); + } catch (Exception e) { + isError = true; +// throw new RuntimeException(e); + } + if (isError) { + log.error("Push queue failed"); + } } @Override public int saveMessageToTable(BasicMessageDto data) { - return 0; + String serialNo = serialNoService.getSerialNo(); + String groupSerialNo = serialNo.replace("MSGID", "MGRP"); + data.setId(serialNo); + data.setMsgGroupID(groupSerialNo); + log.debug("Save message to table : {}", data); + return kftMapper.insert(data); } @Override diff --git a/src/main/java/com/munjaon/server/queue/service/MmsQueueService.java b/src/main/java/com/munjaon/server/queue/service/MmsQueueService.java index b3ea2fb..c3492a0 100644 --- a/src/main/java/com/munjaon/server/queue/service/MmsQueueService.java +++ b/src/main/java/com/munjaon/server/queue/service/MmsQueueService.java @@ -1,6 +1,8 @@ package com.munjaon.server.queue.service; +import com.munjaon.server.cache.service.SerialNoService; import com.munjaon.server.queue.dto.BasicMessageDto; +import com.munjaon.server.queue.mapper.MmsMapper; import com.munjaon.server.queue.pool.MmsMemoryQueue; import com.munjaon.server.queue.pool.MmsQueuePool; import com.munjaon.server.queue.pool.WriteQueue; @@ -12,8 +14,10 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class MmsQueueService implements QueueAction { + private final MmsMapper mmsMapper; private final MmsQueuePool queueInstance = MmsQueuePool.getInstance(); private final MmsMemoryQueue memoryQueue = MmsMemoryQueue.getInstance(); + private final SerialNoService serialNoService; @Override public int getQueueSize() { @@ -51,7 +55,12 @@ public class MmsQueueService implements QueueAction { @Override public int saveMessageToTable(BasicMessageDto data) { - return 0; + String serialNo = serialNoService.getSerialNo(); + String groupSerialNo = serialNo.replace("MSGID", "MGRP"); + data.setId(serialNo); + data.setMsgGroupID(groupSerialNo); + log.debug("Save message to table : {}", data); + return mmsMapper.insert(data); } @Override diff --git a/src/main/java/com/munjaon/server/server/packet/KakaoMessage.java b/src/main/java/com/munjaon/server/server/packet/KakaoMessage.java new file mode 100644 index 0000000..c4f5362 --- /dev/null +++ b/src/main/java/com/munjaon/server/server/packet/KakaoMessage.java @@ -0,0 +1,140 @@ +package com.munjaon.server.server.packet; + +import com.munjaon.server.util.CommonUtil; + +import java.nio.ByteBuffer; + +public final class KakaoMessage { + public static final int LIMIT_FILE_CAPACITY = 1024 * 50; + + public static final int DELIVER_JSON_FILENAME_LENGTH = 40; + public static final int DELIVER_JSON_FILENAME_POSITION = 0; + + public static final int DELIVER_JSON_FILESIZE_LENGTH = 8; + public static final int DELIVER_JSON_FILESIZE_POSITION = DELIVER_JSON_FILENAME_POSITION + DELIVER_JSON_FILENAME_LENGTH; + + public static final int DELIVER_KAKAO_BODY_LENGTH = 2233; + public static final int DELIVER_KAKAO_ACK_BODY_LENGTH = 21; + + /* DELIVER */ + /* SUBJECT */ + public static final int DELIVER_SUBJECT_LENGTH = 40; + public static final int DELIVER_SUBJECT_POSITION = CommonMessage.DELIVER_MSG_TYPE_POSITION + CommonMessage.DELIVER_MSG_TYPE_LENGTH; + /* MESSAGE */ + public static final int DELIVER_MESSAGE_LENGTH = 2000; + public static final int DELIVER_MESSAGE_POSITION = DELIVER_SUBJECT_POSITION + DELIVER_SUBJECT_LENGTH; + /* KAKAO_SENDER_KEY */ + public static final int DELIVER_KAKAO_SENDER_KEY_LENGTH = 40; + public static final int DELIVER_KAKAO_SENDER_KEY_POSITION = DELIVER_MESSAGE_POSITION + DELIVER_MESSAGE_LENGTH; + /* KAKAO_TEMPLATE_CODE */ + public static final int DELIVER_KAKAO_TEMPLATE_CODE_LENGTH = 64; + public static final int DELIVER_KAKAO_TEMPLATE_CODE_POSITION = DELIVER_KAKAO_SENDER_KEY_POSITION + DELIVER_KAKAO_SENDER_KEY_LENGTH; + + public static void putSubjectForDeliver(ByteBuffer buffer, String subject) { + if (buffer == null || subject == null) { + return; + } + subject = CommonUtil.cutString(subject, DELIVER_SUBJECT_LENGTH); + buffer.put(DELIVER_SUBJECT_POSITION, subject.getBytes()); + } + public static String getSubjectForDeliver(ByteBuffer buffer) { + if (buffer == null) { + return null; + } + + buffer.position(DELIVER_SUBJECT_POSITION); + byte[] destArray = new byte[DELIVER_SUBJECT_LENGTH]; + buffer.get(destArray); + + return Packet.getString(destArray); + } + + public static void putMessageForDeliver(ByteBuffer buffer, String message) { + if (buffer == null || message == null) { + return; + } + message = CommonUtil.cutString(message, DELIVER_MESSAGE_LENGTH); + buffer.put(DELIVER_MESSAGE_POSITION, message.getBytes()); + } + public static String getMessageForDeliver(ByteBuffer buffer) { + if (buffer == null) { + return null; + } + + buffer.position(DELIVER_MESSAGE_POSITION); + byte[] destArray = new byte[DELIVER_MESSAGE_LENGTH]; + buffer.get(destArray); + + return Packet.getString(destArray); + } + public static void putKakaoSenderKeyForDeliver(ByteBuffer buffer, String kakaoSenderKey) { + if (buffer == null || kakaoSenderKey == null) { + return; + } + kakaoSenderKey = CommonUtil.cutString(kakaoSenderKey, DELIVER_KAKAO_SENDER_KEY_LENGTH); + buffer.put(DELIVER_KAKAO_SENDER_KEY_POSITION, kakaoSenderKey.getBytes()); + } + public static String getKakaoSenderKeyForDeliver(ByteBuffer buffer) { + if (buffer == null) { + return null; + } + + buffer.position(DELIVER_KAKAO_SENDER_KEY_POSITION); + byte[] destArray = new byte[DELIVER_KAKAO_SENDER_KEY_LENGTH]; + buffer.get(destArray); + + return Packet.getString(destArray); + } + public static void putKakaoTemplateCodeForDeliver(ByteBuffer buffer, String kakaoTemplateCode) { + if (buffer == null || kakaoTemplateCode == null) { + return; + } + kakaoTemplateCode = CommonUtil.cutString(kakaoTemplateCode, DELIVER_KAKAO_TEMPLATE_CODE_LENGTH); + buffer.put(DELIVER_KAKAO_TEMPLATE_CODE_POSITION, kakaoTemplateCode.getBytes()); + } + public static String getKakaoTemplateCodeForDeliver(ByteBuffer buffer) { + if (buffer == null) { + return null; + } + + buffer.position(DELIVER_KAKAO_TEMPLATE_CODE_POSITION); + byte[] destArray = new byte[DELIVER_KAKAO_TEMPLATE_CODE_LENGTH]; + buffer.get(destArray); + + return Packet.getString(destArray); + } + + public static String getFileNameForDeliver(ByteBuffer buffer) { + if (buffer == null) { + return null; + } + + buffer.position(DELIVER_JSON_FILENAME_POSITION); + byte[] destArray = new byte[DELIVER_JSON_FILENAME_LENGTH]; + buffer.get(destArray); + + return Packet.getString(destArray); + } + + public static String getFileSizeForDeliver(ByteBuffer buffer) { + if (buffer == null) { + return null; + } + + buffer.position(DELIVER_JSON_FILESIZE_POSITION); + byte[] destArray = new byte[DELIVER_JSON_FILESIZE_LENGTH]; + buffer.get(destArray); + + return Packet.getString(destArray); + } + + public static ByteBuffer makeDeliverAckBuffer(String msgId, String status) { + ByteBuffer buffer = ByteBuffer.allocate(Header.HEADER_LENGTH + DELIVER_KAKAO_ACK_BODY_LENGTH); + Packet.setDefaultByte(buffer); + Header.putHeader(buffer, Header.COMMAND_DELIVER_ACK, DELIVER_KAKAO_ACK_BODY_LENGTH); + buffer.put(CommonMessage.DELIVER_ACK_MESSAGE_ID_POSITION, msgId.getBytes()); + buffer.put(CommonMessage.DELIVER_ACK_RESULT_POSITION, status.getBytes()); + + return buffer; + } +} diff --git a/src/main/java/com/munjaon/server/server/packet/LmsMessage.java b/src/main/java/com/munjaon/server/server/packet/LmsMessage.java index 1737a38..9d71e78 100644 --- a/src/main/java/com/munjaon/server/server/packet/LmsMessage.java +++ b/src/main/java/com/munjaon/server/server/packet/LmsMessage.java @@ -5,7 +5,7 @@ import com.munjaon.server.util.CommonUtil; import java.nio.ByteBuffer; public final class LmsMessage { - public static final int DELIVER_LMS_BODY_LENGTH = 2119; + public static final int DELIVER_LMS_BODY_LENGTH = 2129; public static final int DELIVER_LMS_ACK_BODY_LENGTH = 21; /* DELIVER */ diff --git a/src/main/java/com/munjaon/server/server/packet/MmsMessage.java b/src/main/java/com/munjaon/server/server/packet/MmsMessage.java index fbb368b..b250785 100644 --- a/src/main/java/com/munjaon/server/server/packet/MmsMessage.java +++ b/src/main/java/com/munjaon/server/server/packet/MmsMessage.java @@ -5,7 +5,7 @@ import com.munjaon.server.util.CommonUtil; import java.nio.ByteBuffer; public final class MmsMessage { - public static final int DELIVER_MMS_BODY_LENGTH = 2120; + public static final int DELIVER_MMS_BODY_LENGTH = 2130; public static final int DELIVER_MMS_ACK_BODY_LENGTH = 21; /* DELIVER */ @@ -19,6 +19,14 @@ public final class MmsMessage { public static final int DELIVER_FILECOUNT_LENGTH = 1; public static final int DELIVER_FILECOUNT_POSITION = DELIVER_MESSAGE_POSITION + DELIVER_MESSAGE_LENGTH; + public static final int LIMIT_FILE_CAPACITY = 1024 * 300; + + public static final int DELIVER_MMS_FILENAME_LENGTH = 40; + public static final int DELIVER_MMS_FILENAME_POSITION = 0; + + public static final int DELIVER_MMS_FILESIZE_LENGTH = 8; + public static final int DELIVER_MMS_FILESIZE_POSITION = DELIVER_MMS_FILENAME_POSITION + DELIVER_MMS_FILENAME_LENGTH; + public static void putSubjectForDeliver(ByteBuffer buffer, String subject) { if (buffer == null || subject == null) { return; @@ -78,6 +86,40 @@ public final class MmsMessage { return Packet.getString(destArray); } + + public static String getFileNameForDeliver(ByteBuffer buffer) { + if (buffer == null) { + return null; + } + + buffer.position(DELIVER_MMS_FILENAME_POSITION); + byte[] destArray = new byte[DELIVER_MMS_FILENAME_LENGTH]; + buffer.get(destArray); + + return Packet.getString(destArray); + } + + public static String getFileSizeForDeliver(ByteBuffer buffer) { + if (buffer == null) { + return null; + } + + buffer.position(DELIVER_MMS_FILESIZE_POSITION); + byte[] destArray = new byte[DELIVER_MMS_FILESIZE_LENGTH]; + buffer.get(destArray); + + return Packet.getString(destArray); + } + + public static ByteBuffer makeDeliverAckBuffer(String msgId, String status) { + ByteBuffer buffer = ByteBuffer.allocate(Header.HEADER_LENGTH + DELIVER_MMS_ACK_BODY_LENGTH); + Packet.setDefaultByte(buffer); + Header.putHeader(buffer, Header.COMMAND_DELIVER_ACK, DELIVER_MMS_ACK_BODY_LENGTH); + buffer.put(CommonMessage.DELIVER_ACK_MESSAGE_ID_POSITION, msgId.getBytes()); + buffer.put(CommonMessage.DELIVER_ACK_RESULT_POSITION, status.getBytes()); + + return buffer; + } // public static void makeDataForDeliver(ByteBuffer buffer, MunjaonMsg data) { // if (buffer == null || data == null) { // return; diff --git a/src/main/java/com/munjaon/server/server/service/CollectServerService.java b/src/main/java/com/munjaon/server/server/service/CollectServerService.java index cce8ab5..2e74913 100644 --- a/src/main/java/com/munjaon/server/server/service/CollectServerService.java +++ b/src/main/java/com/munjaon/server/server/service/CollectServerService.java @@ -47,6 +47,7 @@ public class CollectServerService extends Service { } else { this.IS_READY_YN = false; } + saveSystemLog("CollectServerService ready : " + this.IS_READY_YN); } @Override diff --git a/src/main/java/com/munjaon/server/server/task/CollectReadTask.java b/src/main/java/com/munjaon/server/server/task/CollectReadTask.java index c72fdef..96ba607 100644 --- a/src/main/java/com/munjaon/server/server/task/CollectReadTask.java +++ b/src/main/java/com/munjaon/server/server/task/CollectReadTask.java @@ -8,8 +8,9 @@ import com.munjaon.server.queue.enums.QueueTypeWorker; import com.munjaon.server.server.dto.ConnectUserDto; import com.munjaon.server.server.packet.*; import com.munjaon.server.server.queue.CollectUserQueue; -import com.munjaon.server.util.LogUtil; +import com.munjaon.server.util.*; +import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; @@ -158,15 +159,144 @@ public class CollectReadTask implements Callable { } private void recvMmsDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException { + try { + ByteBuffer bodyBuffer = ByteBuffer.allocate(MmsMessage.DELIVER_MMS_BODY_LENGTH); + channel.read(bodyBuffer); + ByteBuffer deliverBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + MmsMessage.DELIVER_MMS_BODY_LENGTH); + Packet.mergeBuffers(deliverBuffer, headBuffer, bodyBuffer); + BasicMessageDto messageDto = recvCommonMessage(deliverBuffer); + messageDto.setUserSubject(MmsMessage.getSubjectForDeliver(deliverBuffer)); + messageDto.setUserMessage(MmsMessage.getMessageForDeliver(deliverBuffer)); + String fileCount = MessageUtil.doNumber(MmsMessage.getFileCountForDeliver(deliverBuffer)); + int recvFileCount = 0; + if (fileCount != null && fileCount.length() > 0) { + recvFileCount = Integer.parseInt(fileCount); + messageDto.setUserFileCnt(recvFileCount); + saveSystemLog("recvFileCount : " + recvFileCount); + } + + saveSystemLog("messageDto : " + messageDto.toString()); + + String imagePath = System.getProperty("ROOTPATH") + File.separator + "mmsfile"; + imagePath = imagePath + File.separator + MessageUtil.getDate() + File.separator + SerialNoUtil.getSerialNo(); + FileUtil.mkdirs(imagePath); + + for (int i = 0; i < recvFileCount; i++) { + ByteBuffer fileHeadBuffer = ByteBuffer.allocate(MmsMessage.DELIVER_MMS_FILENAME_LENGTH + MmsMessage.DELIVER_MMS_FILESIZE_LENGTH); + channel.read(fileHeadBuffer); + String fileName = MmsMessage.getFileNameForDeliver(fileHeadBuffer); + String fileSize = MmsMessage.getFileSizeForDeliver(fileHeadBuffer); + ByteBuffer fileBuffer = ByteBuffer.allocate(Integer.parseInt(fileSize)); + channel.read(fileBuffer); + fileBuffer.flip(); + JobFileFactory.saveFileForByteBuffer(imagePath, fileName, fileBuffer); + if (i == 0) { + messageDto.setUserFileName01(imagePath + File.separator + fileName); + } else if (i == 1) { + messageDto.setUserFileName02(imagePath + File.separator + fileName); + } else if (i == 2) { + messageDto.setUserFileName03(imagePath + File.separator + fileName); + } + saveSystemLog("File : " + fileName + ", Size : " + fileSize); + } + + QueueTypeWorker worker = QueueTypeWorker.find("MMS"); + if (worker != null) { + worker.pushQueue(messageDto); + channel.write(MmsMessage.makeDeliverAckBuffer(messageDto.getUserMsgID(), messageDto.getSendStatus())); + } + } catch (Exception e) { + e.printStackTrace(); + } } private void recvKatDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException { + try { + ByteBuffer bodyBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); + channel.read(bodyBuffer); + ByteBuffer deliverBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); + Packet.mergeBuffers(deliverBuffer, headBuffer, bodyBuffer); + BasicMessageDto messageDto = recvCommonMessage(deliverBuffer); + messageDto.setUserSubject(KakaoMessage.getSubjectForDeliver(deliverBuffer)); + messageDto.setUserMessage(KakaoMessage.getMessageForDeliver(deliverBuffer)); + messageDto.setKakaoSenderKey(KakaoMessage.getKakaoSenderKeyForDeliver(deliverBuffer)); + messageDto.setKakaoTemplateCode(KakaoMessage.getKakaoTemplateCodeForDeliver(deliverBuffer)); + + saveSystemLog("messageDto : " + messageDto.toString()); + + String jsonPath = System.getProperty("ROOTPATH") + File.separator + "kakaofile"; + jsonPath = jsonPath + File.separator + MessageUtil.getDate() + File.separator + SerialNoUtil.getSerialNo(); + FileUtil.mkdirs(jsonPath); + + ByteBuffer fileHeadBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_JSON_FILENAME_LENGTH + KakaoMessage.DELIVER_JSON_FILESIZE_LENGTH); + channel.read(fileHeadBuffer); + + String fileName = KakaoMessage.getFileNameForDeliver(fileHeadBuffer); + String fileSize = KakaoMessage.getFileSizeForDeliver(fileHeadBuffer); + + ByteBuffer fileBuffer = ByteBuffer.allocate(Integer.parseInt(fileSize)); + channel.read(fileBuffer); + fileBuffer.flip(); + JobFileFactory.saveFileForByteBuffer(jsonPath, fileName, fileBuffer); + + messageDto.setKakaoJsonFile(jsonPath + File.separator + fileName); + saveSystemLog("File : " + fileName + ", Size : " + fileSize); + + QueueTypeWorker worker = QueueTypeWorker.find("KAT"); + if (worker != null) { + worker.pushQueue(messageDto); + channel.write(KakaoMessage.makeDeliverAckBuffer(messageDto.getUserMsgID(), messageDto.getSendStatus())); + } else { + saveSystemLog("worker is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } } private void recvKftDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException { + try { + ByteBuffer bodyBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); + channel.read(bodyBuffer); + ByteBuffer deliverBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); + Packet.mergeBuffers(deliverBuffer, headBuffer, bodyBuffer); + BasicMessageDto messageDto = recvCommonMessage(deliverBuffer); + messageDto.setUserSubject(KakaoMessage.getSubjectForDeliver(deliverBuffer)); + messageDto.setUserMessage(KakaoMessage.getMessageForDeliver(deliverBuffer)); + messageDto.setKakaoSenderKey(KakaoMessage.getKakaoSenderKeyForDeliver(deliverBuffer)); + messageDto.setKakaoTemplateCode(KakaoMessage.getKakaoTemplateCodeForDeliver(deliverBuffer)); + + saveSystemLog("messageDto : " + messageDto.toString()); + + String jsonPath = System.getProperty("ROOTPATH") + File.separator + "kakaofile"; + jsonPath = jsonPath + File.separator + MessageUtil.getDate() + File.separator + SerialNoUtil.getSerialNo(); + FileUtil.mkdirs(jsonPath); + + ByteBuffer fileHeadBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_JSON_FILENAME_LENGTH + KakaoMessage.DELIVER_JSON_FILESIZE_LENGTH); + channel.read(fileHeadBuffer); + + String fileName = KakaoMessage.getFileNameForDeliver(fileHeadBuffer); + String fileSize = KakaoMessage.getFileSizeForDeliver(fileHeadBuffer); + + ByteBuffer fileBuffer = ByteBuffer.allocate(Integer.parseInt(fileSize)); + channel.read(fileBuffer); + fileBuffer.flip(); + JobFileFactory.saveFileForByteBuffer(jsonPath, fileName, fileBuffer); + + messageDto.setKakaoJsonFile(jsonPath + File.separator + fileName); + saveSystemLog("File : " + fileName + ", Size : " + fileSize); + + QueueTypeWorker worker = QueueTypeWorker.find("KFT"); + if (worker != null) { + worker.pushQueue(messageDto); + channel.write(KakaoMessage.makeDeliverAckBuffer(messageDto.getUserMsgID(), messageDto.getSendStatus())); + } + } catch (Exception e) { + e.printStackTrace(); + } } private void recvLinkCheck(SocketChannel channel) throws IOException { diff --git a/src/main/java/com/munjaon/server/util/JobFileFactory.java b/src/main/java/com/munjaon/server/util/JobFileFactory.java index 320303c..34ad994 100644 --- a/src/main/java/com/munjaon/server/util/JobFileFactory.java +++ b/src/main/java/com/munjaon/server/util/JobFileFactory.java @@ -8,7 +8,10 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.nio.ByteBuffer; import java.nio.channels.FileChannel; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -346,6 +349,17 @@ public final class JobFileFactory { return transferStatus; } + public static void saveFileForByteBuffer(final String path, final String fileName, final ByteBuffer buffer) throws IOException { + FileChannel fileChannel = FileChannel.open( + Paths.get(path + File.separator + fileName), + StandardOpenOption.CREATE_NEW, + StandardOpenOption.READ, + StandardOpenOption.WRITE + ); + fileChannel.write(buffer); + fileChannel.close(); + } + public static String getJobDirectory(final String rootDirectory, final String orderNo, final String companyNo, final String date) { return rootDirectory + File.separator + orderNo + File.separator + orderNo + "_" + companyNo + File.separator + date; } diff --git a/src/main/java/com/munjaon/server/util/MessageUtil.java b/src/main/java/com/munjaon/server/util/MessageUtil.java index 91ea675..eba9bfd 100644 --- a/src/main/java/com/munjaon/server/util/MessageUtil.java +++ b/src/main/java/com/munjaon/server/util/MessageUtil.java @@ -171,63 +171,75 @@ public final class MessageUtil { buffer.position(BodyCommonConfig.USERID_BYTE_POSITION); destArray = new byte[BodyCommonConfig.USERID_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserId(new String(destArray)); + messageDto.setUserId(QueueConstants.getString(destArray)); +// messageDto.setUserId(new String(destArray)); /* 2. 요금제(선불 : P / 후불 : A) : final : 아무작업도 하지 않음 */ /* 3. 단가 */ buffer.position(BodyCommonConfig.UNITCOST_BYTE_POSITION); destArray = new byte[BodyCommonConfig.UNITCOST_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUnitCost(new String(destArray)); + messageDto.setUnitCost(QueueConstants.getString(destArray)); +// messageDto.setUnitCost(new String(destArray)); /* 4. MSG Group ID */ buffer.position(BodyCommonConfig.MSGGROUPID_BYTE_POSITION); destArray = new byte[BodyCommonConfig.MSGGROUPID_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setMsgGroupID(new String(destArray)); + messageDto.setMsgGroupID(QueueConstants.getString(destArray)); +// messageDto.setMsgGroupID(new String(destArray)); /* 5. MSG ID */ buffer.position(BodyCommonConfig.MSGID_BYTE_POSITION); destArray = new byte[BodyCommonConfig.MSGID_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserMsgID(new String(destArray)); + messageDto.setUserMsgID(QueueConstants.getString(destArray)); +// messageDto.setUserMsgID(new String(destArray)); /* 6. Service Type */ buffer.position(BodyCommonConfig.SERVICETYPE_BYTE_POSITION); destArray = new byte[BodyCommonConfig.SERVICETYPE_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setServiceType(new String(destArray)); + messageDto.setServiceType(QueueConstants.getString(destArray)); +// messageDto.setServiceType(new String(destArray)); /* 7. 메시지 전송 결과 >> 성공 : 0 / 필터링 : 기타값 */ buffer.position(BodyCommonConfig.SENDSTATUS_BYTE_POSITION); destArray = new byte[BodyCommonConfig.SENDSTATUS_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setSendStatus(new String(destArray)); + messageDto.setSendStatus(QueueConstants.getString(destArray)); +// messageDto.setSendStatus(new String(destArray)); /* 8. 회신번호 */ buffer.position(BodyCommonConfig.SENDER_BYTE_POSITION); destArray = new byte[BodyCommonConfig.SENDER_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserSender(new String(destArray)); + messageDto.setUserSender(QueueConstants.getString(destArray)); +// messageDto.setUserSender(new String(destArray)); /* 9. 수신번호 */ buffer.position(BodyCommonConfig.RECEIVER_BYTE_POSITION); destArray = new byte[BodyCommonConfig.RECEIVER_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserReceiver(new String(destArray)); + messageDto.setUserReceiver(QueueConstants.getString(destArray)); +// messageDto.setUserReceiver(new String(destArray)); /* 10. 예약시간 */ buffer.position(BodyCommonConfig.RESERVEDT_BYTE_POSITION); destArray = new byte[BodyCommonConfig.RESERVEDT_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setReserveDt(new String(destArray)); + messageDto.setReserveDt(QueueConstants.getString(destArray)); +// messageDto.setReserveDt(new String(destArray)); /* 11. 요청시간 */ buffer.position(BodyCommonConfig.REQUESTDT_BYTE_POSITION); destArray = new byte[BodyCommonConfig.REQUESTDT_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setRequestDt(new String(destArray)); + messageDto.setRequestDt(QueueConstants.getString(destArray)); +// messageDto.setRequestDt(new String(destArray)); /* 12. 원격 주소 */ buffer.position(BodyCommonConfig.REMOTEIP_BYTE_POSITION); destArray = new byte[BodyCommonConfig.REMOTEIP_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setRemoteIP(new String(destArray)); + messageDto.setRemoteIP(QueueConstants.getString(destArray)); +// messageDto.setRemoteIP(new String(destArray)); /* 13. 발송망 */ buffer.position(BodyCommonConfig.AGENT_CODE_BYTE_POSITION); destArray = new byte[BodyCommonConfig.AGENT_CODE_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setRouterSeq(new String(destArray)); + messageDto.setRouterSeq(QueueConstants.getString(destArray)); +// messageDto.setRouterSeq(new String(destArray)); } public static void setBytesForSmsMessage(ByteBuffer buffer, BasicMessageDto messageDto) { @@ -245,7 +257,8 @@ public final class MessageUtil { buffer.position(SmsBodyConfig.SMS_MSG_BYTE_POSITION); destArray = new byte[SmsBodyConfig.SMS_MSG_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserMessage(new String(destArray)); + messageDto.setUserMessage(QueueConstants.getString(destArray)); +// messageDto.setUserMessage(new String(destArray)); } public static void setBytesForMediaMessage(ByteBuffer buffer, BasicMessageDto messageDto) { @@ -257,6 +270,61 @@ public final class MessageUtil { buffer.put(messageDto.getUserMessage().getBytes()); } + public static void setBytesForKakaoMessage(ByteBuffer buffer, BasicMessageDto messageDto) { + /* 14. 제목 */ + buffer.position(KakaoBodyConfig.SUBJECT_BYTE_POSITION); + buffer.put(messageDto.getUserSubject().getBytes()); + /* 15. 메시지 */ + buffer.position(KakaoBodyConfig.MEDIA_MSG_BYTE_POSITION); + buffer.put(messageDto.getUserMessage().getBytes()); + /* 16. KAKAO_SENDER_KEY */ + buffer.position(KakaoBodyConfig.KAKAO_SENDER_KEY_BYTE_POSITION); + buffer.put(messageDto.getKakaoSenderKey().getBytes()); + /* 17. KAKAO_TEMPLATE_CODE */ + buffer.position(KakaoBodyConfig.KAKAO_TEMPLATE_CODE_BYTE_POSITION); + buffer.put(messageDto.getKakaoTemplateCode().getBytes()); + /* 18. KAKAO_JSON_FILE */ + buffer.position(KakaoBodyConfig.FILENAME_JSON_BYTE_POSITION); + buffer.put(messageDto.getKakaoJsonFile().getBytes()); + } + + public static void getBytesForKakaoMessage(ByteBuffer buffer, BasicMessageDto messageDto) { + byte[] destArray = null; + if (buffer == null || messageDto == null) { + return; + } + /* 14. 제목 */ + buffer.position(KakaoBodyConfig.SUBJECT_BYTE_POSITION); + destArray = new byte[KakaoBodyConfig.SUBJECT_BYTE_LENGTH]; + buffer.get(destArray); + messageDto.setUserSubject(QueueConstants.getString(destArray)); +// messageDto.setUserSubject(new String(destArray)); + /* 15. 메시지 */ + buffer.position(KakaoBodyConfig.MEDIA_MSG_BYTE_POSITION); + destArray = new byte[KakaoBodyConfig.MEDIA_MSG_BYTE_LENGTH]; + buffer.get(destArray); + messageDto.setUserMessage(QueueConstants.getString(destArray)); +// messageDto.setUserMessage(new String(destArray)); + /* 16. KAKAO_SENDER_KEY */ + buffer.position(KakaoBodyConfig.KAKAO_SENDER_KEY_BYTE_POSITION); + destArray = new byte[KakaoBodyConfig.KAKAO_SENDER_KEY_BYTE_LENGTH]; + buffer.get(destArray); + messageDto.setKakaoSenderKey(QueueConstants.getString(destArray)); +// messageDto.setUserSubject(new String(destArray));\ + /* 17. KAKAO_TEMPLATE_CODE */ + buffer.position(KakaoBodyConfig.KAKAO_TEMPLATE_CODE_BYTE_POSITION); + destArray = new byte[KakaoBodyConfig.KAKAO_TEMPLATE_CODE_BYTE_LENGTH]; + buffer.get(destArray); + messageDto.setKakaoTemplateCode(QueueConstants.getString(destArray)); +// messageDto.setUserSubject(new String(destArray)); + /* 18. KAKAO_JSON_FILE */ + buffer.position(KakaoBodyConfig.FILENAME_JSON_BYTE_POSITION); + destArray = new byte[KakaoBodyConfig.FILENAME_JSON_BYTE_LENGTH]; + buffer.get(destArray); + messageDto.setKakaoJsonFile(QueueConstants.getString(destArray)); +// messageDto.setUserSubject(new String(destArray)); + } + public static void getBytesForMediaMessage(ByteBuffer buffer, BasicMessageDto messageDto) { byte[] destArray = null; if (buffer == null || messageDto == null) { @@ -266,12 +334,14 @@ public final class MessageUtil { buffer.position(MediaBodyConfig.SUBJECT_BYTE_POSITION); destArray = new byte[MediaBodyConfig.SUBJECT_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserSubject(new String(destArray)); + messageDto.setUserSubject(QueueConstants.getString(destArray)); +// messageDto.setUserSubject(new String(destArray)); /* 15. 메시지 */ buffer.position(MediaBodyConfig.MEDIA_MSG_BYTE_POSITION); destArray = new byte[MediaBodyConfig.MEDIA_MSG_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserMessage(new String(destArray)); + messageDto.setUserMessage(QueueConstants.getString(destArray)); +// messageDto.setUserMessage(new String(destArray)); } public static void setBytesForMmsMessage(ByteBuffer buffer, BasicMessageDto messageDto) { @@ -304,22 +374,26 @@ public final class MessageUtil { buffer.position(MediaBodyConfig.FILECNT_BYTE_POSITION); destArray = new byte[MediaBodyConfig.FILECNT_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserFileCnt(Integer.parseInt(new String(destArray))); + messageDto.setUserFileCnt(Integer.parseInt(QueueConstants.getString(destArray))); +// messageDto.setUserFileCnt(Integer.parseInt(new String(destArray))); /* 17. 파일명 #1 */ buffer.position(MediaBodyConfig.FILENAME_ONE_BYTE_POSITION); destArray = new byte[MediaBodyConfig.FILENAME_ONE_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserFileName01(new String(destArray)); + messageDto.setUserFileName01(QueueConstants.getString(destArray)); +// messageDto.setUserFileName01(new String(destArray)); /* 18. 파일명 #2 */ buffer.position(MediaBodyConfig.FILENAME_TWO_BYTE_POSITION); destArray = new byte[MediaBodyConfig.FILENAME_TWO_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserFileName02(new String(destArray)); + messageDto.setUserFileName02(QueueConstants.getString(destArray)); +// messageDto.setUserFileName02(new String(destArray)); /* 19. 파일명 #3 */ buffer.position(MediaBodyConfig.FILENAME_THREE_BYTE_POSITION); destArray = new byte[MediaBodyConfig.FILENAME_THREE_BYTE_LENGTH]; buffer.get(destArray); - messageDto.setUserFileName03(new String(destArray)); + messageDto.setUserFileName03(QueueConstants.getString(destArray)); +// messageDto.setUserFileName03(new String(destArray)); } public static int isValidateMessageForReport(ReportDto reportDto) { diff --git a/src/main/resources/dev/application-dev.yml b/src/main/resources/dev/application-dev.yml index cf8789f..783e38f 100644 --- a/src/main/resources/dev/application-dev.yml +++ b/src/main/resources/dev/application-dev.yml @@ -2,7 +2,7 @@ spring: datasource: server: driver-class-name: org.mariadb.jdbc.Driver - jdbc-url: jdbc:mariadb://119.193.215.98:3306/mjon_agent + jdbc-url: jdbc:mariadb://119.193.215.98:3306/mjon_agent_back username: mjonUr_agent password: mjagent123$ @@ -12,6 +12,6 @@ server: # ### 에이전트 설정 관련 #################################################################################### agent: - root-path: C:/apps/agent_server - server-property-file: C:/apps/agent_server/config/server.properties + root-path: /home/mjon_server_agent + server-property-file: /home/mjon_server_agent/config/server.properties db-name: mjon_agent_back \ No newline at end of file diff --git a/src/main/resources/local/application-local.yml b/src/main/resources/local/application-local.yml index 0330168..37dbd81 100644 --- a/src/main/resources/local/application-local.yml +++ b/src/main/resources/local/application-local.yml @@ -2,6 +2,7 @@ spring: datasource: server: driver-class-name: org.mariadb.jdbc.Driver + url: jdbc:mariadb://119.193.215.98:3306/mjon_agent_back jdbc-url: jdbc:mariadb://119.193.215.98:3306/mjon_agent_back username: mjonUr_agent password: mjagent123$ diff --git a/src/main/resources/sqlmap/kat_sql.xml b/src/main/resources/sqlmap/kat_sql.xml new file mode 100644 index 0000000..bdc1fec --- /dev/null +++ b/src/main/resources/sqlmap/kat_sql.xml @@ -0,0 +1,26 @@ + + + + + INSERT INTO MJ_MSG_DATA ( + MSG_ID + , MSG_GROUP_ID + , USER_ID + , AGENT_MSG_ID + , AGENT_CODE + , CUR_STATE + , MSG_NOTICETALK_SENDER_KEY + , MSG_NOTICETALK_TMP_KEY + , REQ_DATE + , CALL_TO + , CALL_FROM + , SMS_TXT + , BIZ_KAKAO_TITLE + , MSG_TYPE + , BIZ_KAKAO_RESEND_YN + , BIZ_KAKAO_RESEND_DATA + , BIZ_KAKAO_RESEND_TYPE + , BIZ_KAKAO_JSON_FILE + ) VALUES (#{id}, #{msgGroupID}, #{userId}, #{userMsgID}, '04', 0, #{kakaoSenderKey}, #{kakaoTemplateCode}, NOW(), #{userReceiver}, #{userSender}, #{userMessage}, #{userSubject}, '8', 'N', null, null, #{kakaoJsonFile}) + + \ No newline at end of file diff --git a/src/main/resources/sqlmap/kft_sql.xml b/src/main/resources/sqlmap/kft_sql.xml new file mode 100644 index 0000000..c044ed5 --- /dev/null +++ b/src/main/resources/sqlmap/kft_sql.xml @@ -0,0 +1,25 @@ + + + + + INSERT INTO MJ_MSG_DATA (MSG_ID + , MSG_GROUP_ID + , USER_ID + , AGENT_MSG_ID + , AGENT_CODE + , CUR_STATE + , MSG_NOTICETALK_SENDER_KEY + , MSG_NOTICETALK_TMP_KEY + , REQ_DATE + , CALL_TO + , CALL_FROM + , SMS_TXT + , BIZ_KAKAO_TITLE + , MSG_TYPE + , BIZ_KAKAO_RESEND_YN + , BIZ_KAKAO_RESEND_DATA + , BIZ_KAKAO_RESEND_TYPE + , BIZ_KAKAO_JSON_FILE + ) VALUES (#{id}, #{msgGroupID}, #{userId}, #{userMsgID}, '04', 0, #{kakaoSenderKey}, #{kakaoTemplateCode}, NOW(), #{userReceiver}, #{userSender}, #{userMessage}, #{userSubject}, '9', 'N', null, null, #{kakaoJsonFile}) + + \ No newline at end of file diff --git a/src/main/resources/sqlmap/mms_sql.xml b/src/main/resources/sqlmap/mms_sql.xml new file mode 100644 index 0000000..63ea0b9 --- /dev/null +++ b/src/main/resources/sqlmap/mms_sql.xml @@ -0,0 +1,26 @@ + + + + + INSERT INTO MJ_MSG_DATA ( + MSG_ID + , MSG_GROUP_ID + , USER_ID + , AGENT_MSG_ID + , AGENT_CODE + , CUR_STATE + , REQ_DATE + , CALL_TO + , CALL_FROM + , SUBJECT + , SMS_TXT + , MSG_TYPE + , CONT_SEQ + , FILE_CNT + , FILE_PATH1 + , FILE_PATH2 + , FILE_PATH3 + , NEO_TYPE + ) VALUES (#{id}, #{msgGroupID}, #{userId}, #{userMsgID}, '04', 0, NOW(), #{userReceiver}, #{userSender}, #{userSubject}, #{userMessage}, '6', null, #{userFileCnt}, #{userFileName01}, #{userFileName02}, #{userFileName03}, null) + + \ No newline at end of file