commit 85278ca36f6f13bf8ac8d80a534ba013738619ce Author: gong01 Date: Fri Mar 6 02:52:51 2026 +0800 initial commit diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..50f873a --- /dev/null +++ b/.classpath @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.factorypath b/.factorypath new file mode 100644 index 0000000..f599efa --- /dev/null +++ b/.factorypath @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c54e8cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..e76d1f3 --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..2cc7d4a Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..abd303b --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.2/apache-maven-3.8.2-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/.project b/.project new file mode 100644 index 0000000..951c240 --- /dev/null +++ b/.project @@ -0,0 +1,39 @@ + + + new_apiServer_oms + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.springframework.ide.eclipse.boot.validation.springbootbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1772723702901 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..abdea9a --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..dfa4f3a --- /dev/null +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..47dcc0b --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.sonarlint.eclipse.core.prefs b/.settings/org.sonarlint.eclipse.core.prefs new file mode 100644 index 0000000..518de29 --- /dev/null +++ b/.settings/org.sonarlint.eclipse.core.prefs @@ -0,0 +1,6 @@ +autoEnabled=true +bindingSuggestionsDisabled=true +eclipse.preferences.version=1 +indexingBasedOnEclipsePlugIns=true +projectKey=TESTOMS +serverId=s.net-all.cc diff --git a/.settings/org.springframework.ide.eclipse.prefs b/.settings/org.springframework.ide.eclipse.prefs new file mode 100644 index 0000000..a12794d --- /dev/null +++ b/.settings/org.springframework.ide.eclipse.prefs @@ -0,0 +1,2 @@ +boot.validation.initialized=true +eclipse.preferences.version=1 diff --git a/.sonarlint/connectedMode.json b/.sonarlint/connectedMode.json new file mode 100644 index 0000000..b864f3e --- /dev/null +++ b/.sonarlint/connectedMode.json @@ -0,0 +1,4 @@ +{ + "sonarQubeUri": "http://s.net-all.cc:9000", + "projectKey": "TESTOMS" +} \ No newline at end of file diff --git a/deploy-aws.sh b/deploy-aws.sh new file mode 100644 index 0000000..873c95f --- /dev/null +++ b/deploy-aws.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# AWS 서버 파일 업로드 스크립트 +# 사용법: ./deploy-aws.sh + +set -e + +AWS_SERVER=$1 +AWS_USER=$2 +AWS_KEY_PATH=$3 +JAR_FILE=$4 +DEPLOY_PATH=$5 + +if [ -z "$AWS_SERVER" ] || [ -z "$AWS_USER" ] || [ -z "$AWS_KEY_PATH" ] || [ -z "$JAR_FILE" ] || [ -z "$DEPLOY_PATH" ]; then + echo "사용법: $0 " + echo "예시: $0 47.129.51.216 root /path/to/key.pem target/core.jar /home/run" + exit 1 +fi + +echo "=== AWS 서버 파일 업로드 시작 ===" +echo "AWS Server: $AWS_SERVER" +echo "AWS User: $AWS_USER" +echo "JAR File: $JAR_FILE" +echo "Deploy Path: $DEPLOY_PATH" + +# JAR 파일 존재 확인 +if [ ! -f "$JAR_FILE" ]; then + echo "❌ JAR 파일을 찾을 수 없습니다: $JAR_FILE" + exit 1 +fi + +# AWS 키 파일 존재 확인 +if [ ! -f "$AWS_KEY_PATH" ]; then + echo "❌ AWS 키 파일을 찾을 수 없습니다: $AWS_KEY_PATH" + exit 1 +fi + +# AWS 서버 연결 테스트 +echo "AWS 서버 연결 테스트 중..." +ssh -i "$AWS_KEY_PATH" -o ConnectTimeout=10 -o StrictHostKeyChecking=no "$AWS_USER@$AWS_SERVER" "echo 'AWS 서버 연결 성공'" + +if [ $? -ne 0 ]; then + echo "❌ AWS 서버 연결 실패" + exit 1 +fi + +# AWS 서버에서 배포 디렉토리 생성 및 권한 설정 (root 권한으로) +echo "AWS 서버에서 배포 디렉토리 생성 중... (root 권한)" +ssh -i "$AWS_KEY_PATH" "$AWS_USER@$AWS_SERVER" "sudo su - root <<'ROOT_SETUP' + # 배포 디렉토리 및 로그 디렉토리 생성 + mkdir -p $DEPLOY_PATH/logs + chmod -R 755 $DEPLOY_PATH + echo '배포 디렉토리 생성 완료: $DEPLOY_PATH' +ROOT_SETUP +" + +# JAR 파일 이름 추출 +JAR_FILENAME=$(basename "$JAR_FILE") + +# JAR 파일을 AWS 서버로 전송 +echo "JAR 파일을 AWS 서버로 전송 중..." +scp -i "$AWS_KEY_PATH" "$JAR_FILE" "$AWS_USER@$AWS_SERVER:$DEPLOY_PATH/$JAR_FILENAME" + +# JAR 파일 권한 설정 (root가 읽을 수 있도록) +echo "JAR 파일 권한 설정 중... (root 권한)" +ssh -i "$AWS_KEY_PATH" "$AWS_USER@$AWS_SERVER" "sudo su - root <<'ROOT_CHMOD' + chmod 644 $DEPLOY_PATH/$JAR_FILENAME + echo 'JAR 파일 권한 설정 완료' + echo '업로드된 파일: $DEPLOY_PATH/$JAR_FILENAME' + ls -lh $DEPLOY_PATH/$JAR_FILENAME +ROOT_CHMOD +" + +if [ $? -eq 0 ]; then + echo "✅ AWS 서버 파일 업로드 성공!" + echo "JAR 파일이 $DEPLOY_PATH/$JAR_FILENAME 에 업로드되었습니다." +else + echo "❌ AWS 서버 파일 업로드 실패!" + exit 1 +fi + +echo "=== AWS 서버 파일 업로드 완료 ===" + diff --git a/deploy-aws2.sh b/deploy-aws2.sh new file mode 100644 index 0000000..72d6d24 --- /dev/null +++ b/deploy-aws2.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# AWS 서버 파일 업로드 스크립트 +# 사용법: ./deploy-aws.sh + +set -e + +AWS_SERVER=$1 +AWS_USER=$2 +AWS_KEY_PATH=$3 +JAR_FILE=$4 +DEPLOY_PATH=$5 + +if [ -z "$AWS_SERVER" ] || [ -z "$AWS_USER" ] || [ -z "$AWS_KEY_PATH" ] || [ -z "$JAR_FILE" ] || [ -z "$DEPLOY_PATH" ]; then + echo "사용법: $0 " + echo "예시: $0 47.129.51.216 root /path/to/key.pem target/core.jar /home/run" + exit 1 +fi + +echo "=== AWS 서버 파일 업로드 시작 ===" +echo "AWS Server: $AWS_SERVER" +echo "AWS User: $AWS_USER" +echo "JAR File: $JAR_FILE" +echo "Deploy Path: $DEPLOY_PATH" + +# JAR 파일 존재 확인 +if [ ! -f "$JAR_FILE" ]; then + echo "❌ JAR 파일을 찾을 수 없습니다: $JAR_FILE" + exit 1 +fi + +# AWS 키 파일 존재 확인 +if [ ! -f "$AWS_KEY_PATH" ]; then + echo "❌ AWS 키 파일을 찾을 수 없습니다: $AWS_KEY_PATH" + exit 1 +fi + +# AWS 서버 연결 테스트 +echo "AWS 서버 연결 테스트 중..." +ssh -i "$AWS_KEY_PATH" -o ConnectTimeout=10 -o StrictHostKeyChecking=no "$AWS_USER@$AWS_SERVER" "echo 'AWS 서버 연결 성공'" + +if [ $? -ne 0 ]; then + echo "❌ AWS 서버 연결 실패" + exit 1 +fi + +# AWS 서버에서 배포 디렉토리 생성 및 권한 설정 (root 권한으로) +echo "AWS 서버에서 배포 디렉토리 생성 중... (root 권한)" +ssh -i "$AWS_KEY_PATH" "$AWS_USER@$AWS_SERVER" "sudo su - root <(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CashCronController.cashProc(CashCronController.java:50) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:07:42.131 [my-scheduler-task-pool-5] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:07:42.142 [my-scheduler-task-pool-2] ERROR c.bb.controller.CashCronController - #-cashProc::Exception::org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:07:45.163 [my-scheduler-task-pool-5] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.creditBetProc(CreditCronController.java:67) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:07:45.166 [my-scheduler-task-pool-3] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:07:45.167 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - #-creditBetProc::ERROR::org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:07:48.176 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.batchReport(CommonServiceImpl.java:80) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:07:48.179 [my-scheduler-task-pool-3] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:07:48.178 [my-scheduler-task-pool-4] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:07:51.197 [my-scheduler-task-pool-4] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.creditReport(CommonServiceImpl.java:286) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:07:51.200 [my-scheduler-task-pool-1] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:07:51.200 [my-scheduler-task-pool-4] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:07:54.210 [my-scheduler-task-pool-1] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.insuredReport(CommonServiceImpl.java:370) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:07:54.212 [my-scheduler-task-pool-1] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:04.365 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +15:11:04.428 [main] INFO com.bb.ApiServerApplication - Starting ApiServerApplication using Java 17.0.5 with PID 7456 (C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes started by shandi in C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms) +15:11:04.430 [main] INFO com.bb.ApiServerApplication - The following 1 profile is active: "local" +15:11:07.453 [main] INFO o.s.i.c.DefaultConfiguringBeanFactoryPostProcessor - No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created. +15:11:07.483 [main] INFO o.s.i.c.DefaultConfiguringBeanFactoryPostProcessor - No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created. +15:11:08.322 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 80 (http) +15:11:08.336 [main] INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-80"] +15:11:08.338 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +15:11:08.339 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.1] +15:11:08.524 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +15:11:08.525 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 3434 ms +15:11:10.322 [main] INFO o.s.b.web.servlet.RegistrationBean - Filter apiKeyFilter was not registered (possibly already registered?) +15:11:13.035 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +15:11:13.178 [main] INFO o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@63e0057a, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5b76b891, org.springframework.security.web.context.SecurityContextHolderFilter@14b4d90b, org.springframework.security.web.header.HeaderWriterFilter@6c537267, org.springframework.web.filter.CorsFilter@611a91df, org.springframework.security.web.authentication.logout.LogoutFilter@1a45e29f, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@10466c55, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@37a939bc, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@47f5ab58, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7962c1d5, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@56226064, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@245dbd09, org.springframework.security.web.access.ExceptionTranslationFilter@1f2497d9, org.springframework.security.web.access.intercept.AuthorizationFilter@10e4ce98] +15:11:14.394 [main] INFO o.s.i.endpoint.EventDrivenConsumer - Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel +15:11:14.396 [main] INFO o.s.i.c.PublishSubscribeChannel - Channel 'application.errorChannel' has 1 subscriber(s). +15:11:14.398 [main] INFO o.s.i.endpoint.EventDrivenConsumer - started bean '_org.springframework.integration.errorLogger' +15:11:14.399 [main] INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-80"] +15:11:14.445 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 80 (http) with context path '' +15:11:14.449 [main] INFO o.s.m.s.b.SimpleBrokerMessageHandler - Starting... +15:11:14.450 [main] INFO o.s.m.s.b.SimpleBrokerMessageHandler - BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@4b20a8e4]] +15:11:14.451 [main] INFO o.s.m.s.b.SimpleBrokerMessageHandler - Started. +15:11:14.478 [my-scheduler-task-pool-3] INFO com.bb.service.CommonServiceImpl - ##- [OMS BATCH_REPORT STATUS] HostName: DESKTOP-2T3170R, HostAddress: 167.179.119.96 +15:11:14.479 [my-scheduler-task-pool-1] INFO com.bb.service.CommonServiceImpl - ##- [OMS BATCH_INSURED_REPORT STATUS] HostName: DESKTOP-2T3170R, HostAddress: 167.179.119.96 +15:11:14.480 [my-scheduler-task-pool-4] INFO com.bb.service.CommonServiceImpl - ##- [OMS BATCH_CREDIT_REPORT STATUS] HostName: DESKTOP-2T3170R, HostAddress: 167.179.119.96 +15:11:14.511 [my-scheduler-task-pool-4] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:11:14.520 [main] INFO com.bb.ApiServerApplication - Started ApiServerApplication in 11.037 seconds (process running for 12.688) +15:11:15.151 [RMI TCP Connection(9)-127.0.0.1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +15:11:15.152 [RMI TCP Connection(9)-127.0.0.1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +15:11:15.155 [RMI TCP Connection(9)-127.0.0.1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms +15:11:19.697 [my-scheduler-task-pool-4] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.creditReport(CommonServiceImpl.java:286) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:11:19.706 [my-scheduler-task-pool-2] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:11:19.719 [my-scheduler-task-pool-4] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:24.727 [my-scheduler-task-pool-2] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CashCronController.cashProc(CashCronController.java:50) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:24.730 [my-scheduler-task-pool-3] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:11:24.731 [my-scheduler-task-pool-2] ERROR c.bb.controller.CashCronController - #-cashProc::Exception::org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:29.778 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.batchReport(CommonServiceImpl.java:80) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:11:29.781 [my-scheduler-task-pool-5] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:11:29.781 [my-scheduler-task-pool-3] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:34.845 [my-scheduler-task-pool-5] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.creditBetProc(CreditCronController.java:67) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:34.848 [my-scheduler-task-pool-1] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:11:34.849 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - #-creditBetProc::ERROR::org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:39.912 [my-scheduler-task-pool-1] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.insuredReport(CommonServiceImpl.java:370) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:11:39.915 [my-scheduler-task-pool-1] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:39.914 [my-scheduler-task-pool-5] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:11:44.930 [my-scheduler-task-pool-5] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_lion01(CreditCronController.java:716) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:44.932 [my-scheduler-task-pool-3] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:11:44.933 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - ##creditBetProc::lion01::- credit_lion01() => PT_BI_ERROR +15:11:44.935 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - ##creditBetProc::lion01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:49.981 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_dubai01(CreditCronController.java:542) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:49.983 [my-scheduler-task-pool-2] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:11:49.984 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::dubai01::- credit_dubai01() => PT_BI_ERROR +15:11:49.984 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::dubai01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:55.022 [my-scheduler-task-pool-2] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_sclass01(CreditCronController.java:687) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:55.024 [my-scheduler-task-pool-4] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:11:55.024 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::sclass01::- credit_sclass01() => PT_BI_ERROR +15:11:55.025 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::sclass01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:00.122 [my-scheduler-task-pool-4] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_vegas01(CreditCronController.java:455) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:00.124 [my-scheduler-task-pool-2] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:12:00.124 [my-scheduler-task-pool-4] ERROR c.bb.controller.CreditCronController - ##creditBetProc::vegas01::- credit_vegas01() => PT_BI_ERROR +15:12:00.124 [my-scheduler-task-pool-4] ERROR c.bb.controller.CreditCronController - ##creditBetProc::vegas01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:05.171 [my-scheduler-task-pool-2] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_coco011(CreditCronController.java:513) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:05.173 [my-scheduler-task-pool-3] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:12:05.173 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::coco011::- credit_coco011() => PT_BI_ERROR +15:12:05.174 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::coco011org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:10.278 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_theking01(CreditCronController.java:484) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:10.282 [my-scheduler-task-pool-5] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:12:10.283 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::theking01::- credit_theking01() => PT_BI_ERROR +15:12:10.286 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::theking01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:13.041 [RMI TCP Connection(10)-127.0.0.1] INFO o.s.b.a.SpringApplicationAdminMXBeanRegistrar$SpringApplicationAdmin - Application shutdown requested. +15:12:13.058 [RMI TCP Connection(10)-127.0.0.1] INFO o.s.m.s.b.SimpleBrokerMessageHandler - Stopping... +15:12:13.059 [RMI TCP Connection(10)-127.0.0.1] INFO o.s.m.s.b.SimpleBrokerMessageHandler - BrokerAvailabilityEvent[available=false, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@4b20a8e4]] +15:12:13.059 [RMI TCP Connection(10)-127.0.0.1] INFO o.s.m.s.b.SimpleBrokerMessageHandler - Stopped. +15:12:13.074 [RMI TCP Connection(10)-127.0.0.1] INFO o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-80"] +15:12:13.075 [RMI TCP Connection(10)-127.0.0.1] INFO o.a.catalina.core.StandardService - Stopping service [Tomcat] +15:12:13.079 [RMI TCP Connection(10)-127.0.0.1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' +15:12:13.106 [RMI TCP Connection(10)-127.0.0.1] INFO o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-80"] +15:12:13.112 [RMI TCP Connection(10)-127.0.0.1] INFO o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-80"] +15:12:13.114 [RMI TCP Connection(10)-127.0.0.1] INFO o.s.i.endpoint.EventDrivenConsumer - Removing {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel +15:12:13.114 [RMI TCP Connection(10)-127.0.0.1] INFO o.s.i.c.PublishSubscribeChannel - Channel 'application.errorChannel' has 0 subscriber(s). +15:12:13.116 [RMI TCP Connection(10)-127.0.0.1] INFO o.s.i.endpoint.EventDrivenConsumer - stopped bean '_org.springframework.integration.errorLogger' +15:12:13.156 [my-scheduler-task-pool-5] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_mario01(CreditCronController.java:629) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:13.158 [my-scheduler-task-pool-1] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:12:13.159 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - ##creditBetProc::mario01::- credit_mario01() => PT_BI_ERROR +15:12:13.161 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - ##creditBetProc::mario01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:16.175 [my-scheduler-task-pool-1] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_salt01(CreditCronController.java:600) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:16.178 [my-scheduler-task-pool-3] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:12:16.179 [my-scheduler-task-pool-1] ERROR c.bb.controller.CreditCronController - ##creditBetProc::salt01::- credit_salt01() => PT_BI_ERROR +15:12:16.180 [my-scheduler-task-pool-1] ERROR c.bb.controller.CreditCronController - ##creditBetProc::salt01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:19.188 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_mvp001(CreditCronController.java:891) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:19.191 [my-scheduler-task-pool-2] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:12:19.191 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::mvp001::- credit_mvp001() => PT_BI_ERROR +15:12:19.193 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::mvp001org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:22.220 [my-scheduler-task-pool-2] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_pocari(CreditCronController.java:658) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:22.223 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::pocari::- credit_pocari() => PT_BI_ERROR +15:12:22.223 [my-scheduler-task-pool-4] INFO com.zaxxer.hikari.HikariDataSource - hikari-cp - Starting... +15:12:22.224 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::pocariorg.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:25.273 [my-scheduler-task-pool-4] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_tiger011(CreditCronController.java:571) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:25.276 [my-scheduler-task-pool-4] ERROR c.bb.controller.CreditCronController - ##creditBetProc::tiger011::- credit_tiger011() => PT_BI_ERROR +15:12:25.277 [my-scheduler-task-pool-4] ERROR c.bb.controller.CreditCronController - ##creditBetProc::tiger011org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection diff --git a/filePath_IS_UNDEFINED/error-2024-06-24.0.gz b/filePath_IS_UNDEFINED/error-2024-06-24.0.gz new file mode 100644 index 0000000..7534f68 Binary files /dev/null and b/filePath_IS_UNDEFINED/error-2024-06-24.0.gz differ diff --git a/filePath_IS_UNDEFINED/error-2024-06-25.0.gz b/filePath_IS_UNDEFINED/error-2024-06-25.0.gz new file mode 100644 index 0000000..1d114cd Binary files /dev/null and b/filePath_IS_UNDEFINED/error-2024-06-25.0.gz differ diff --git a/filePath_IS_UNDEFINED/error-2024-06-26.0.gz b/filePath_IS_UNDEFINED/error-2024-06-26.0.gz new file mode 100644 index 0000000..8bc079c Binary files /dev/null and b/filePath_IS_UNDEFINED/error-2024-06-26.0.gz differ diff --git a/filePath_IS_UNDEFINED/error-2024-06-27.0.gz b/filePath_IS_UNDEFINED/error-2024-06-27.0.gz new file mode 100644 index 0000000..4879f43 Binary files /dev/null and b/filePath_IS_UNDEFINED/error-2024-06-27.0.gz differ diff --git a/filePath_IS_UNDEFINED/error-2024-06-28.0.gz b/filePath_IS_UNDEFINED/error-2024-06-28.0.gz new file mode 100644 index 0000000..525b5f6 Binary files /dev/null and b/filePath_IS_UNDEFINED/error-2024-06-28.0.gz differ diff --git a/filePath_IS_UNDEFINED/error-2024-07-08.0.gz b/filePath_IS_UNDEFINED/error-2024-07-08.0.gz new file mode 100644 index 0000000..55587a3 Binary files /dev/null and b/filePath_IS_UNDEFINED/error-2024-07-08.0.gz differ diff --git a/filePath_IS_UNDEFINED/error.log b/filePath_IS_UNDEFINED/error.log new file mode 100644 index 0000000..b82cdda --- /dev/null +++ b/filePath_IS_UNDEFINED/error.log @@ -0,0 +1,2302 @@ +13:44:15.191 [main] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.context.ApplicationContextException: Unable to start web server + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:578) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) + at com.bb.ApiServerApplication.main(ApiServerApplication.java:16) +Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse + at com.bb.config.LogConfig.lambda$1(LogConfig.java:24) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.configureContext(TomcatServletWebServerFactory.java:400) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.prepareContext(TomcatServletWebServerFactory.java:258) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:209) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) + ... 8 common frames omitted +Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 14 common frames omitted +13:48:16.022 [main] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.context.ApplicationContextException: Unable to start web server + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:578) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) + at com.bb.ApiServerApplication.main(ApiServerApplication.java:16) +Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse + at com.bb.config.LogConfig.lambda$1(LogConfig.java:24) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.configureContext(TomcatServletWebServerFactory.java:400) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.prepareContext(TomcatServletWebServerFactory.java:258) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:209) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) + ... 8 common frames omitted +Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 14 common frames omitted +14:35:50.283 [main] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.context.ApplicationContextException: Unable to start web server + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:602) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) + at com.bb.ApiServerApplication.main(ApiServerApplication.java:16) +Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse + at com.bb.config.LogConfig.lambda$1(LogConfig.java:24) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.configureContext(TomcatServletWebServerFactory.java:403) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.prepareContext(TomcatServletWebServerFactory.java:259) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:210) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) + ... 8 common frames omitted +Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 14 common frames omitted +14:44:58.195 [main] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.context.ApplicationContextException: Unable to start web server + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:578) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) + at com.bb.ApiServerApplication.main(ApiServerApplication.java:16) +Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse + at com.bb.config.LogConfig.lambda$1(LogConfig.java:24) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.configureContext(TomcatServletWebServerFactory.java:400) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.prepareContext(TomcatServletWebServerFactory.java:258) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:209) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) + ... 8 common frames omitted +Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 14 common frames omitted +14:57:46.901 [main] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.context.ApplicationContextException: Unable to start web server + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:578) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) + at com.bb.ApiServerApplication.main(ApiServerApplication.java:16) +Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse + at com.bb.config.LogConfig.lambda$embeddedServletContainerCustomizer$0(LogConfig.java:24) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.configureContext(TomcatServletWebServerFactory.java:400) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.prepareContext(TomcatServletWebServerFactory.java:258) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:209) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) + ... 8 common frames omitted +Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 14 common frames omitted +15:02:00.967 [main] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.context.ApplicationContextException: Unable to start web server + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:578) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) + at com.bb.ApiServerApplication.main(ApiServerApplication.java:16) +Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse + at com.bb.config.LogConfig.lambda$embeddedServletContainerCustomizer$0(LogConfig.java:24) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.configureContext(TomcatServletWebServerFactory.java:400) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.prepareContext(TomcatServletWebServerFactory.java:258) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:209) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) + ... 8 common frames omitted +Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 14 common frames omitted +15:04:11.929 [main] ERROR o.s.b.w.e.tomcat.TomcatStarter - Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'authProvider': Error creating bean with name 'authProvider': Unsatisfied dependency expressed through field 'passwordEncoder': Error creating bean with name 'securityConfig': Requested bean is currently in creation: Is there an unresolvable circular reference? +15:04:12.043 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +The dependencies of some of the beans in the application context form a cycle: + +┌─────┐ +| securityConfig (field com.bb.config.AuthProvider com.bb.config.SecurityConfig.authProvider) +↑ ↓ +| authProvider (field private org.springframework.security.crypto.password.PasswordEncoder com.bb.config.AuthProvider.passwordEncoder) +└─────┘ + + +Action: + +Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. + +15:07:42.123 [my-scheduler-task-pool-2] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CashCronController.cashProc(CashCronController.java:50) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:07:42.142 [my-scheduler-task-pool-2] ERROR c.bb.controller.CashCronController - #-cashProc::Exception::org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:07:45.163 [my-scheduler-task-pool-5] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.creditBetProc(CreditCronController.java:67) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:07:45.167 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - #-creditBetProc::ERROR::org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:07:48.176 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.batchReport(CommonServiceImpl.java:80) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:07:48.179 [my-scheduler-task-pool-3] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:07:51.197 [my-scheduler-task-pool-4] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.creditReport(CommonServiceImpl.java:286) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:07:51.200 [my-scheduler-task-pool-4] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:07:54.210 [my-scheduler-task-pool-1] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.insuredReport(CommonServiceImpl.java:370) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:07:54.212 [my-scheduler-task-pool-1] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:19.697 [my-scheduler-task-pool-4] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.creditReport(CommonServiceImpl.java:286) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:11:19.719 [my-scheduler-task-pool-4] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:24.727 [my-scheduler-task-pool-2] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CashCronController.cashProc(CashCronController.java:50) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:24.731 [my-scheduler-task-pool-2] ERROR c.bb.controller.CashCronController - #-cashProc::Exception::org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:29.778 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.batchReport(CommonServiceImpl.java:80) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:11:29.781 [my-scheduler-task-pool-3] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:34.845 [my-scheduler-task-pool-5] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.creditBetProc(CreditCronController.java:67) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:34.849 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - #-creditBetProc::ERROR::org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:39.912 [my-scheduler-task-pool-1] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.insuredReport(CommonServiceImpl.java:370) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 61 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 63 common frames omitted +15:11:39.915 [my-scheduler-task-pool-1] ERROR com.bb.service.CommonServiceImpl - org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:44.930 [my-scheduler-task-pool-5] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_lion01(CreditCronController.java:716) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:44.933 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - ##creditBetProc::lion01::- credit_lion01() => PT_BI_ERROR +15:11:44.935 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - ##creditBetProc::lion01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:49.981 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_dubai01(CreditCronController.java:542) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:49.984 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::dubai01::- credit_dubai01() => PT_BI_ERROR +15:11:49.984 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::dubai01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:11:55.022 [my-scheduler-task-pool-2] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_sclass01(CreditCronController.java:687) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:11:55.024 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::sclass01::- credit_sclass01() => PT_BI_ERROR +15:11:55.025 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::sclass01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:00.122 [my-scheduler-task-pool-4] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_vegas01(CreditCronController.java:455) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:00.124 [my-scheduler-task-pool-4] ERROR c.bb.controller.CreditCronController - ##creditBetProc::vegas01::- credit_vegas01() => PT_BI_ERROR +15:12:00.124 [my-scheduler-task-pool-4] ERROR c.bb.controller.CreditCronController - ##creditBetProc::vegas01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:05.171 [my-scheduler-task-pool-2] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_coco011(CreditCronController.java:513) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:05.173 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::coco011::- credit_coco011() => PT_BI_ERROR +15:12:05.174 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::coco011org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:10.278 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_theking01(CreditCronController.java:484) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:10.283 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::theking01::- credit_theking01() => PT_BI_ERROR +15:12:10.286 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::theking01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:13.156 [my-scheduler-task-pool-5] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_mario01(CreditCronController.java:629) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:13.159 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - ##creditBetProc::mario01::- credit_mario01() => PT_BI_ERROR +15:12:13.161 [my-scheduler-task-pool-5] ERROR c.bb.controller.CreditCronController - ##creditBetProc::mario01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:16.175 [my-scheduler-task-pool-1] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_salt01(CreditCronController.java:600) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:16.179 [my-scheduler-task-pool-1] ERROR c.bb.controller.CreditCronController - ##creditBetProc::salt01::- credit_salt01() => PT_BI_ERROR +15:12:16.180 [my-scheduler-task-pool-1] ERROR c.bb.controller.CreditCronController - ##creditBetProc::salt01org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:19.188 [my-scheduler-task-pool-3] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_mvp001(CreditCronController.java:891) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:19.191 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::mvp001::- credit_mvp001() => PT_BI_ERROR +15:12:19.193 [my-scheduler-task-pool-3] ERROR c.bb.controller.CreditCronController - ##creditBetProc::mvp001org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:22.220 [my-scheduler-task-pool-2] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_pocari(CreditCronController.java:658) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:22.223 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::pocari::- credit_pocari() => PT_BI_ERROR +15:12:22.224 [my-scheduler-task-pool-2] ERROR c.bb.controller.CreditCronController - ##creditBetProc::pocariorg.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +15:12:25.273 [my-scheduler-task-pool-4] ERROR com.zaxxer.hikari.pool.HikariPool - hikari-cp - Exception during pool initialization. +java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:111) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64) + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:74) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:895) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:820) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:77) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:64) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:333) + at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154) + at com.bb.dao.CommonDaoImpl.getServerCronStatus(CommonDaoImpl.java:533) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) + at com.bb.dao.CommonDaoImpl$$SpringCGLIB$$0.getServerCronStatus() + at com.bb.service.CommonServiceImpl.getServerCronStatus(CommonServiceImpl.java:834) + at com.bb.controller.CreditCronController.credit_tiger011(CreditCronController.java:571) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:839) + ... 62 common frames omitted +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 64 common frames omitted +15:12:25.276 [my-scheduler-task-pool-4] ERROR c.bb.controller.CreditCronController - ##creditBetProc::tiger011::- credit_tiger011() => PT_BI_ERROR +15:12:25.277 [my-scheduler-task-pool-4] ERROR c.bb.controller.CreditCronController - ##creditBetProc::tiger011org.mybatis.spring.MyBatisSystemException: +### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection +### The error may exist in file [C:\Users\shandi\Documents\workspace-spring-tool-suite-4-4.17.1.RELEASE\new_apiServer_oms\target\classes\db1\CODE.xml] +### The error may involve com.bb.dao.CommonDao.getServerCronStatus +### The error occurred while executing a query +### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection diff --git a/jenkinsfile b/jenkinsfile new file mode 100644 index 0000000..ed9cee1 --- /dev/null +++ b/jenkinsfile @@ -0,0 +1,90 @@ +pipeline { + agent any + + environment { + JAVA_HOME = '/var/lib/jenkins/tools/openjdk17' + MAVEN_HOME = '/usr/share/maven' + PATH = "${MAVEN_HOME}/bin:${JAVA_HOME}/bin:${PATH}" + APP_NAME = 'oms' + VERSION = '0.0.1-SNAPSHOT' + JAR_FILE = "target/oms.jar" + AWS_SERVER = '54.179.159.145' + AWS_USER = 'root' + DEPLOY_PATH = '/home/build' // 빌드 산출물 업로드 경로 + RUN_PATH = '/home/run' // 실행 경로 + } + + stages { + stage('Checkout') { + steps { + checkout scm + } + } + + stage('Build') { + steps { + sh 'echo "Building application..."' + script { + def mvnHome = tool 'maven' + sh "${mvnHome}/bin/mvn clean package -Pdev -DskipTests -Dspring.profiles.active=dev" + } + } + } + + stage('Archive Artifacts') { + steps { + sh 'echo "Checking JAR file..."' + sh 'ls -la target/' + sh 'ls -la target/*.jar' + archiveArtifacts artifacts: 'target/*.jar', fingerprint: true + } + } + + stage('Deploy to AWS') { + steps { + script { + // 실제 빌드된 JAR 파일 찾기 + def jarFiles = sh( + script: 'find target -name "*.jar" -not -name "*-sources.jar" -not -name "*-javadoc.jar" | head -1', + returnStdout: true + ).trim() + + if (!jarFiles) { + error "JAR 파일을 찾을 수 없습니다." + } + + def actualJarFile = jarFiles.split('\n')[0] + echo "실제 JAR 파일: ${actualJarFile}" + + withCredentials([sshUserPrivateKey(credentialsId: 'coreserver', keyFileVariable: 'SSH_KEY')]) { + sh """ + echo "Deploying to AWS server..." + chmod +x deploy-aws.sh + ./deploy-aws.sh ${AWS_SERVER} ${AWS_USER} "\${SSH_KEY}" ${actualJarFile} ${DEPLOY_PATH} + echo "Uploading and running runApi.sh..." + chmod +x runApi.sh + scp -i "\${SSH_KEY}" runApi.sh ${AWS_USER}@${AWS_SERVER}:${RUN_PATH}/runApi.sh + ssh -i "\${SSH_KEY}" ${AWS_USER}@${AWS_SERVER} "chmod +x ${RUN_PATH}/runApi.sh && JAR_NAME=\$(basename ${actualJarFile}) BUILD_DIR=${DEPLOY_PATH} RUN_DIR=${RUN_PATH} ${RUN_PATH}/runApi.sh" + """ + } + } + } + } + } + + post { + success { + echo 'Pipeline succeeded!' + // 슬랙 알림 등 추가 가능 + } + failure { + echo 'Pipeline failed!' + // 실패 알림 등 추가 가능 + } + always { + // 빌드 결과 정리 + sh 'echo "Build completed"' + } + } +} + diff --git a/jenkinsfile2 b/jenkinsfile2 new file mode 100644 index 0000000..1c9564c --- /dev/null +++ b/jenkinsfile2 @@ -0,0 +1,90 @@ +pipeline { + agent any + + environment { + JAVA_HOME = '/var/lib/jenkins/tools/openjdk17' + MAVEN_HOME = '/usr/share/maven' + PATH = "${MAVEN_HOME}/bin:${JAVA_HOME}/bin:${PATH}" + APP_NAME = 'oms' + VERSION = '0.0.1-SNAPSHOT' + JAR_FILE = "target/oms.jar" + AWS_SERVER = '47.128.247.197' + AWS_USER = 'rocky' + DEPLOY_PATH = '/home/build' // 빌드 산출물 업로드 경로 + RUN_PATH = '/home/run' // 실행 경로 + } + + stages { + stage('Checkout') { + steps { + checkout scm + } + } + + stage('Build') { + steps { + sh 'echo "Building application..."' + script { + def mvnHome = tool 'maven' + sh "${mvnHome}/bin/mvn clean package -Pdev -DskipTests -Dspring.profiles.active=dev" + } + } + } + + stage('Archive Artifacts') { + steps { + sh 'echo "Checking JAR file..."' + sh 'ls -la target/' + sh 'ls -la target/*.jar' + archiveArtifacts artifacts: 'target/*.jar', fingerprint: true + } + } + + stage('Deploy to AWS') { + steps { + script { + // 실제 빌드된 JAR 파일 찾기 + def jarFiles = sh( + script: 'find target -name "*.jar" -not -name "*-sources.jar" -not -name "*-javadoc.jar" | head -1', + returnStdout: true + ).trim() + + if (!jarFiles) { + error "JAR 파일을 찾을 수 없습니다." + } + + def actualJarFile = jarFiles.split('\n')[0] + echo "실제 JAR 파일: ${actualJarFile}" + + withCredentials([sshUserPrivateKey(credentialsId: 'coreserver2', keyFileVariable: 'SSH_KEY')]) { + sh """ + echo "Deploying to AWS server..." + chmod +x deploy-aws2.sh + ./deploy-aws2.sh ${AWS_SERVER} ${AWS_USER} "\${SSH_KEY}" ${actualJarFile} ${DEPLOY_PATH} + echo "Uploading and running runApi.sh..." + chmod +x runApi.sh + scp -i "\${SSH_KEY}" runApi.sh ${AWS_USER}@${AWS_SERVER}:/home/${AWS_USER}/temp_runApi.sh + ssh -i "\${SSH_KEY}" ${AWS_USER}@${AWS_SERVER} "sudo -i bash -c 'mv /home/${AWS_USER}/temp_runApi.sh ${RUN_PATH}/runApi.sh && chmod +x ${RUN_PATH}/runApi.sh && JAR_NAME=\$(basename ${actualJarFile}) BUILD_DIR=${DEPLOY_PATH} RUN_DIR=${RUN_PATH} ${RUN_PATH}/runApi.sh'" + """ + } + } + } + } + } + + post { + success { + echo 'Pipeline succeeded!' + // 슬랙 알림 등 추가 가능 + } + failure { + echo 'Pipeline failed!' + // 실패 알림 등 추가 가능 + } + always { + // 빌드 결과 정리 + sh 'echo "Build completed"' + } + } +} + diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..a16b543 --- /dev/null +++ b/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..c8d4337 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..9b56630 --- /dev/null +++ b/pom.xml @@ -0,0 +1,284 @@ + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.0.0 + + + com.example + apiServer + 0.0.1-SNAPSHOT + newApiServer + Demo project for Spring Boot + + real + 17 + 17 + 17 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 3.0.4 + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework + spring-core + 6.0.12 + + + jakarta.validation + jakarta.validation-api + 3.0.0 + + + org.thymeleaf + thymeleaf + + + nz.net.ultraq.thymeleaf + thymeleaf-layout-dialect + + + org.springframework.session + spring-session-core + + + mysql + mysql-connector-java + 8.0.33 + runtime + + + org.mariadb.jdbc + mariadb-java-client + runtime + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.projectlombok + lombok + 1.18.30 + provided + + + org.springframework.boot + spring-boot-starter-webflux + + + + io.jsonwebtoken + jjwt-api + 0.11.2 + + + io.jsonwebtoken + jjwt-impl + 0.11.2 + runtime + + + io.jsonwebtoken + jjwt-jackson + 0.11.2 + runtime + + + io.jsonwebtoken + jjwt-gson + 0.11.2 + + + javax.xml.bind + jaxb-api + 2.3.1 + + + com.sun.xml.bind + jaxb-core + 2.3.0.1 + + + com.sun.xml.bind + jaxb-impl + 2.3.1 + + + org.springdoc + springdoc-openapi-ui + 1.5.4 + + + org.json + json + 20230227 + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + org.jsoup + jsoup + 1.14.3 + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + org.apache.httpcomponents.client5 + httpclient5 + 5.4.2 + + + com.squareup.okhttp3 + okhttp + 4.11.0 + + + org.springframework.boot + spring-boot-starter-actuator + 3.1.4 + + + io.micrometer + micrometer-registry-prometheus + runtime + + + com.warrenstrange + googleauth + 1.5.0 + + + org.codehaus.jettison + jettison + 1.4.1 + + + org.apache.httpcomponents.client5 + httpclient5 + 5.3.1 + + + org.webjars + webjars-locator-core + 0.46 + + + io.github.classgraph + classgraph + 4.8.90 + + + + + commons-io + commons-io + 2.11.0 + + + org.springframework + spring-messaging + 6.0.12 + + + org.springframework.integration + spring-integration-security + + + org.springframework.integration + spring-integration-stomp + + + org.springframework.integration + spring-integration-websocket + + + jakarta.servlet + jakarta.servlet-api + 6.0.0 + provided + + + + io.netty + netty-tcnative-boringssl-static + 2.0.61.Final + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + ${repackage.classifier} + + + + + + + spring-releases + Spring Releases + https://repo.spring.io/release + + + + + spring-releases + Spring Releases + https://repo.spring.io/release + + false + + + + \ No newline at end of file diff --git a/runApi.sh b/runApi.sh new file mode 100644 index 0000000..3adc8eb --- /dev/null +++ b/runApi.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +# API 서버 배포 및 실행 스크립트 +# 사용법: sudo ./runApi.sh +# 필요한 경로/파일이 다를 경우 아래 변수만 수정하세요. + +set -euo pipefail + +JAR_NAME="${JAR_NAME:-apiServer-0.0.1-SNAPSHOT.jar}" +PID_FILE="${PID_FILE:-/home/api.pid}" +RUN_DIR="${RUN_DIR:-/home/run}" +BUILD_DIR="${BUILD_DIR:-/home/build}" +BACKUP_DIR="${BACKUP_DIR:-/home/backup}" +JAVA_BIN="${JAVA_BIN:-/home/openjdk17/bin/java}" +# SCOUTER_AGENT="${SCOUTER_AGENT:-/home/scouter/agent.java/scouter.agent.jar}" +# SCOUTER_CONF="${SCOUTER_CONF:-/home/scouter/agent.java/conf/scouter.conf}" +SPRING_PROFILE="${SPRING_PROFILE:-real}" + +timestamp() { + date +"%Y%m%d_%H%M%S" +} + +log() { + echo "[runApi] $*" +} + +ensure_paths() { + mkdir -p "$RUN_DIR" "$BACKUP_DIR" "$BUILD_DIR" +} + +stop_app() { + if [[ -f "$PID_FILE" ]]; then + local pid + pid=$(cat "$PID_FILE" 2>/dev/null || true) + if [[ -n "${pid:-}" ]] && ps -p "$pid" > /dev/null 2>&1; then + log "기존 프로세스 종료: $pid" + kill -9 "$pid" || true + else + log "PID 파일은 있으나 실행 중인 프로세스가 없습니다." + fi + rm -f "$PID_FILE" + else + log "종료할 PID 파일이 없습니다." + fi +} + +backup_old() { + local current="$RUN_DIR/$JAR_NAME" + if [[ -f "$current" ]]; then + local backup="$BACKUP_DIR/oldApi_$(timestamp).jar" + log "기존 JAR 백업 -> $backup" + mv "$current" "$backup" + else + log "백업할 기존 JAR이 없습니다." + fi +} + +copy_new() { + local source="$BUILD_DIR/$JAR_NAME" + local target="$RUN_DIR/$JAR_NAME" + + # 소스와 타겟이 같으면 복사 불필요 + if [[ "$source" == "$target" ]]; then + if [[ -f "$target" ]]; then + log "배포된 JAR 확인 -> $target" + return 0 + else + log "새 JAR을 찾을 수 없습니다: $target" + exit 1 + fi + fi + + if [[ ! -f "$source" ]]; then + log "새 JAR을 찾을 수 없습니다: $source" + exit 1 + fi + + log "새 JAR 복사 -> $target" + cp "$source" "$target" +} + +start_app() { + local target="$RUN_DIR/$JAR_NAME" + log "애플리케이션 시작" + local log_dir="${LOG_DIR:-/home/log/core}" + local log_file="${LOG_FILE:-$log_dir/apiServer.log}" + mkdir -p "$log_dir" + + nohup "$JAVA_BIN" \ + -Duser.timezone=GMT+09:00 \ + -Dspring.profiles.active="$SPRING_PROFILE" \ + -jar "$target" \ + >> "$log_file" 2>&1 & + echo $! > "$PID_FILE" + log "시작 완료 (PID: $(cat "$PID_FILE"))" +} + +main() { + ensure_paths + stop_app + backup_old + copy_new + start_app + log "배포 완료" +} + +main "$@" + diff --git a/src/main/java/com/bb/ApiServerApplication.java b/src/main/java/com/bb/ApiServerApplication.java new file mode 100644 index 0000000..765e7c1 --- /dev/null +++ b/src/main/java/com/bb/ApiServerApplication.java @@ -0,0 +1,20 @@ +package com.bb; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableAsync +@ServletComponentScan(basePackages = {"com.bb.config"}) +@SpringBootApplication +@EnableScheduling +public class ApiServerApplication { + + public static void main(String[] args) { + System.out.println(" >>> Using Java Version: " + System.getProperty("java.version")); + SpringApplication.run(ApiServerApplication.class, args); + } + +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiBetController.java b/src/main/java/com/bb/admin/controller/AdminApiBetController.java new file mode 100644 index 0000000..fa6d6ae --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiBetController.java @@ -0,0 +1,806 @@ +package com.bb.admin.controller; + +import java.net.SocketTimeoutException; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.AdminBetSearch; +import com.bb.model.ApiResponse; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.BetDetail; +import com.bb.model.BetSearch; +import com.bb.model.BetSplusSearch; +import com.bb.model.GameUseInfo; +import com.bb.model.PageFormVO; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.TrxSearchVO; +import com.bb.service.BetService; +import com.bb.service.CommonService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.PagingUtil; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + + +@RestController +@Slf4j +@RequestMapping("/api/admin/bet") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiBetController { + + private final UserService userService; + + private final BetService betService; + + private final TripleService tripleService; + + private final CommonService commonService; + + private final JwtManager jwtManager; + + private static final long serialVersionUID = 1L; + private static NumberFormat formatter = new DecimalFormat("#0.00"); + + @ResponseBody + @PostMapping(value={"/gameUseUpdate"}) + public ApiResponse gameUseInfo(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody GameUseInfo gui) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + gui.setSiteId(tokenInfo.getSid()); + userService.gameUseUpdate(gui); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/gameUse"}) + public ApiResponse gameUse(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody GameUseInfo gui) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + gui.setSiteId(tokenInfo.getSid()); + + List gameuseList = userService.gameUseList(gui); + + apiResponse.put("list", gameuseList); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/betlist") + public ApiResponse betlist( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + final String LOG_PREFIX = "#-ADMIN::betlist::"+tokenInfo.getSid()+":::"; + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + if(search.getIdType() == null || search.getIdType().equals("")) { + search.setIdType("NORMAL"); + } + + if(search.getIdType().equals("PTN")) { + search.setRecommenderId(search.getMemId()); + search.setMemId(null); + } else { + search.setRecommenderId(null); + } + + if(search.getOrderColumn() == null || search.getOrderColumn().equals("")) { + if(search.getOldYn().equals("N")) { + search.setOrderColumn("betIdx"); + } + } + + if(search.getOrderType() == null || search.getOrderType().equals("")) { + if(search.getOldYn().equals("N")) { + search.setOrderType("DESC"); + } + } + + if(search.getIsBlankSpinYn() == null) { + search.setIsBlankSpinYn(""); + } + if(!search.getIsBlankSpinYn().equals("Y")) { + search.setIsBlankSpinYn(""); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getBetListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List betList = betService.getBetList(search); + + apiResponse.put("list", betList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/betlistNew") + public ApiResponse betlistNew( @RequestHeader String token, HttpServletRequest request, @RequestBody AdminBetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + final String LOG_PREFIX = "#-ADMIN::betlist::"+tokenInfo.getSid()+":::"; + + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + if(search.getIdType() == null || search.getIdType().equals("")) { + search.setIdType("NORMAL"); + } + + search.setOrderColumn("regDate"); + if(search.getOrderType() == null || search.getOrderType().equals("")) { + search.setOrderType("DESC"); + } + + if(search.getIsBlankSpinYn() == null) { + search.setIsBlankSpinYn(""); + } + if(!search.getIsBlankSpinYn().equals("Y")) { + search.setIsBlankSpinYn(""); + } + + if(search.getStartDate() != null && !search.getStartDate().equals("")) { + String startDate = search.getStartDate() + ".000"; + search.setStartDate(startDate); + } + if(search.getEndDate() != null && !search.getEndDate().equals("")) { + String endDate = search.getEndDate() + ".999"; + search.setEndDate(endDate); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getFastBetIdListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + List> betIdList = betService.getFastBetIdList(search); + List> betList = new ArrayList>(); + for(HashMap item : betIdList) { + item.put("oldYn", search.getOldYn()); + HashMap betItem = betService.getFastBetItem(item); + betList.add(betItem); + } + + apiResponse.put("list", betList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/betWinList") + public ApiResponse betWinList( @RequestHeader String token, HttpServletRequest request, @RequestBody AdminBetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + final String LOG_PREFIX = "#-ADMIN::betlist::"+tokenInfo.getSid()+":::"; + + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + if(search.getIdType() == null || search.getIdType().equals("")) { + search.setIdType("NORMAL"); + } + + if(search.getOrderColumn() == null || search.getOrderColumn().equals("")) { + search.setOrderColumn("betAmt"); + } + + if(search.getOrderType() == null || search.getOrderType().equals("")) { + search.setOrderType("DESC"); + } + + if(search.getIsBlankSpinYn() == null) { + search.setIsBlankSpinYn(""); + } + if(!search.getIsBlankSpinYn().equals("Y")) { + search.setIsBlankSpinYn(""); + } + + if(search.getStartDate() != null && !search.getStartDate().equals("")) { + String startDate = search.getStartDate() + ".000"; + search.setStartDate(startDate); + } + if(search.getEndDate() != null && !search.getEndDate().equals("")) { + String endDate = search.getEndDate() + ".999"; + search.setEndDate(endDate); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getBetListNewCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + List betList = betService.getBetListNew(search); + + apiResponse.put("list", betList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/sportBetlist") + public ApiResponse sportBetlist( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSplusSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getSportBetListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List betList = betService.getSportBetList(search); + apiResponse.put("list", betList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/sportEventlist") + public ApiResponse sportEventlist( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSplusSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getSportEventListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List betList = betService.getSportEventList(search); + + apiResponse.put("list", betList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/sportEventDetaillist") + public ApiResponse sportEventDetaillist( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSplusSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getSportEventDetailListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List betList = betService.getSportEventDetailList(search); + + apiResponse.put("list", betList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/betDetail") + public ApiResponse betDetail( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + String betType = betService.getBetType(search.getBetId()); + + String detail = ""; + if(betType.equals("triple")) { + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + param.put("apiVendorCode", betType); + ApiVendorCompInfo vendorCompInfo = userService.getApiVendorCompInfo(param); + if(vendorCompInfo != null) { + detail = tripleService.getBetDetail(vendorCompInfo, search.getBetId()); + } + log.info("triple bet detail: " + detail); + } else { + log.info("not found bet detail"); + } + + apiResponse.put("detail", detail); + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/betDetailTest") + public ApiResponse betDetailTest( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + String betType = betService.getBetType(search.getBetId()); + + String detail = ""; + if(betType.equals("triple")) { + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + param.put("apiVendorCode", betType); + ApiVendorCompInfo vendorCompInfo = userService.getApiVendorCompInfo(param); + if(vendorCompInfo != null) { + detail = tripleService.getBetDetailTest(vendorCompInfo, search.getBetId()); + } + log.info("triple bet detail: " + detail); + } else { + log.info("not found bet detail"); + } + + apiResponse.put("detail", detail); + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/trxlist") + public ApiResponse trxlist(@RequestHeader String token, HttpServletRequest request, @RequestBody TrxSearchVO searchVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(searchVO.getMemId()==null || searchVO.getMemId().equals("")) { + if(searchVO.getBetId()==null || searchVO.getBetId().equals("")) { + throw new ApiException("TX99", "유저ID 또는 배팅ID를 입력 후 검색하세요."); + } + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + searchVO.setSiteId(tokenInfo.getSid()); + + if(searchVO.getOldYn() == null || searchVO.getOldYn().equals("")) { + searchVO.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + searchVO); + + PageFormVO pageVo= new PageFormVO(); + if(searchVO.getPage()==0) searchVO.setPage(1); + + int totalCount = betService.getTrxListCnt(searchVO); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(searchVO.getPage()); + commonForm.setCount_per_page(20); + if(searchVO.getCount_per_list()==0) { + commonForm.setCount_per_list(30); + } else { + commonForm.setCount_per_list(searchVO.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + searchVO.setLimit(pageVo.getLimit()); + searchVO.setOffset(pageVo.getOffset()); + searchVO.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List> betList = betService.getTrxList(searchVO); + + apiResponse.put("list", betList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiBoardController.java b/src/main/java/com/bb/admin/controller/AdminApiBoardController.java new file mode 100644 index 0000000..f80ca76 --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiBoardController.java @@ -0,0 +1,919 @@ +package com.bb.admin.controller; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.AnswerVo; +import com.bb.model.ApiResponse; +import com.bb.model.Board; +import com.bb.model.BoardListSearch; +import com.bb.model.Code; +import com.bb.model.CodeSearch; +import com.bb.model.Comment; +import com.bb.model.Message; +import com.bb.model.MessageListSearch; +import com.bb.model.PageFormVO; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.service.BoardService; +import com.bb.service.CommonService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +@RestController +@Slf4j +@RequestMapping("/api/admin/board") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiBoardController { + + private final BoardService boardService; + + private final UserService userService; + + private final CommonService commonService; + + private final JwtManager jwtManager; + + @ResponseBody + @PostMapping(value = { "/{boardType}/list" }) + public ApiResponse boardList(@RequestHeader String token, HttpServletRequest request, + @PathVariable String boardType, @Valid @RequestBody BoardListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + String LOG_PREFIX = "#-admin::boardList::"; + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + final String boardTypeKeyword = "answer|bbs|faq|favor|nt|snt"; + + if (boardType.equals("qna")) { + boardType = "faq"; + } + + if (!boardTypeKeyword.contains(boardType)) { + log.error("[REQUEST: " + request.getRequestURI() + "] Board[" + boardType + "] boardType Error"); + throw new ApiException("BRD02", "boardType Error"); + } + search.setBoardType(boardType); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + LOG_PREFIX = LOG_PREFIX + tokenInfo.getSid() + ":::"; + search.setSiteId(tokenInfo.getSid()); + + PageFormVO pageVo = new PageFormVO(); + if (search.getPage() == 0) + search.setPage(1); + + log.info(LOG_PREFIX + "[REQUEST: " + request.getRequestURI() + "] " + search); + if (boardType.equals("nt")) { + Board flowBoard = boardService.getSiteFlowBoard(search); + apiResponse.put("flowBoard", flowBoard); + } + + int totalCount = boardService.getBoardListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if (search.getCount_per_list() == 0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List boardList = boardService.getBoardList(search); + apiResponse.put("list", boardList); + apiResponse.success(); + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/{boardType}/save" }) + public ApiResponse boardSave(@RequestHeader String token, HttpServletRequest request, + @PathVariable String boardType, @Valid @RequestBody Board board) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + String LOG_PREFIX = "#-admin::boardSave::"; + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + final String boardTypeKeyword = "answer|bbs|faq|favor|nt|snt"; + + if (boardType.equals("qna")) { + boardType = "faq"; + } + + if (!boardTypeKeyword.contains(boardType)) { + log.error("[REQUEST: " + request.getRequestURI() + "] Board[" + boardType + "] boardType Error"); + throw new ApiException("BRD02", "boardType Error"); + } + board.setBoardType(boardType); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + LOG_PREFIX = LOG_PREFIX + tokenInfo.getSid() + ":::"; + board.setSiteId(tokenInfo.getSid()); + board.setRegId(tokenInfo.getMid()); + + log.info(LOG_PREFIX + "[REQUEST: " + request.getRequestURI() + "] " + board); + if (boardType.equals("snt")) { + board.setTitle(""); + board.setBoardType(boardType); + board.setCategory(""); + board.setIsReadUser("N"); + + BoardListSearch search = new BoardListSearch(); + search.setSiteId(tokenInfo.getSid()); + Board flowBoard = boardService.getSiteFlowBoard(search); + if (flowBoard != null) { + Integer flowBoardIdx = flowBoard.getBoardIdx(); + board.setBoardIdx(flowBoardIdx); + } + } + + int boardIdx = 0; + if (board.getBoardIdx() != null) + boardIdx = board.getBoardIdx(); + int res = boardService.saveBoard(board); + if (boardIdx == 0) + boardIdx = board.getBoardIdx(); + + log.info(LOG_PREFIX + "Board[" + board.getBoardType() + "][" + board.getCategory() + "] Save Result: " + + res); + log.info(LOG_PREFIX + "Board[" + board.getBoardType() + "][" + board.getCategory() + "] Save Result idx: " + + boardIdx); + if (res > 0) { + String boardTypeStr = ""; + if (boardType.equals("nt")) { + boardTypeStr = "공지사항"; + } else if (boardType.equals("bbs")) { + boardTypeStr = "게시판"; + } else if (boardType.equals("faq")) { + boardTypeStr = "문의사항"; + } else if (boardType.equals("favor")) { + boardTypeStr = "자주묻는질문"; + } else if (boardType.equals("answer")) { + boardTypeStr = "faqAnswer"; + } else if (boardType.equals("snt")) { + boardTypeStr = "흐르는 공지"; + } else { + boardTypeStr = boardType; + } + + String crudType = ""; + if (res == 1) + crudType = "등록 처리"; + if (res > 1) + crudType = "수정 처리"; + if (board.getDelYn() != null && board.getDelYn().equals("Y")) + crudType = "삭제 처리"; + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", boardIdx + "::" + boardTypeStr + "::관리자::" + crudType); + logParam.put("logDesc", board.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + } + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/{boardType}/deletes" }) + public ApiResponse boardDeletes(@RequestHeader String token, HttpServletRequest request, + @PathVariable String boardType, @RequestBody JSONObject requestBody) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + String LOG_PREFIX = "#-admin::boardDeletes::"; + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + final String boardTypeKeyword = "answer|bbs|faq|favor|nt|snt"; + + if (boardType.equals("qna")) { + boardType = "faq"; + } + + if (!boardTypeKeyword.contains(boardType)) { + log.error("Board[" + boardType + "] boardType Error"); + throw new ApiException("BRD02", "boardType Error"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + LOG_PREFIX = LOG_PREFIX + tokenInfo.getSid() + ":::"; + log.info(LOG_PREFIX + "[REQUEST] " + requestBody); + + JSONArray boardIdxList = requestBody.getJSONArray("boardIdxList"); + if (boardIdxList == null || boardIdxList.size() == 0) { + log.error("boardIdxList Error"); + throw new ApiException("BRD03", "boardIdxList Error"); + } + + for (int i = 0; i < boardIdxList.size(); i++) { + int boardIdx = boardIdxList.getInt(i); + int res = boardService.deleteYBoard(boardIdx); + } + + String boardTypeStr = ""; + if (boardType.equals("nt")) { + boardTypeStr = "공지사항"; + } else if (boardType.equals("bbs")) { + boardTypeStr = "게시판"; + } else if (boardType.equals("faq")) { + boardTypeStr = "문의사항"; + } else if (boardType.equals("favor")) { + boardTypeStr = "자주묻는질문"; + } else if (boardType.equals("answer")) { + boardTypeStr = "faqAnswer"; + } else if (boardType.equals("snt")) { + boardTypeStr = "흐르는 공지"; + } else { + boardTypeStr = boardType; + } + + String crudType = "일괄삭제 처리"; + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", boardTypeStr + "::관리자::" + crudType); + logParam.put("logDesc", boardIdxList.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/noticeTopChange" }) + public ApiResponse noticeTopChange(@RequestHeader String token, HttpServletRequest request, + @RequestBody Board board) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + board.setSiteId(tokenInfo.getSid()); + board.setRegId(tokenInfo.getSid()); + + log.info("[REQUEST: " + request.getRequestURI() + "] boardIdx: " + board.getBoardIdx()); + Board boardDetail = boardService.getBoard(board); + int boardIdx = boardDetail.getBoardIdx(); + int result = boardService.deleteBoard(boardIdx); + if (result > 0) { + boardDetail.setBoardIdx(null); + log.info("[REQUEST: " + request.getRequestURI() + "] Top Change Board Info: " + boardDetail.toString()); + int res = boardService.saveBoard(boardDetail); + log.info("[REQUEST: " + request.getRequestURI() + "] Top Change Board Result: " + res); + log.info("[REQUEST: " + request.getRequestURI() + "] Top Change Board Result idx: " + + board.getBoardIdx()); + if (res > 0) { + String boardType = boardDetail.getBoardType(); + String boardTypeStr = ""; + if (boardType.equals("nt")) { + boardTypeStr = "공지사항"; + } else if (boardType.equals("bbs")) { + boardTypeStr = "게시판"; + } else if (boardType.equals("faq")) { + boardTypeStr = "문의사항"; + } else if (boardType.equals("favor")) { + boardTypeStr = "자주묻는질문"; + } else if (boardType.equals("answer")) { + boardTypeStr = "faqAnswer"; + } else if (boardType.equals("snt")) { + boardTypeStr = "흐르는 공지"; + } else { + boardTypeStr = boardType; + } + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", board.getBoardIdx() + "::" + boardTypeStr + "::최상위로 변경처리"); + logParam.put("logDesc", board.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + } + } + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/viewYn" }) + public ApiResponse viewYn(@RequestHeader String token, HttpServletRequest request, @RequestBody Board board) + throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + board.setSiteId(tokenInfo.getSid()); + board.setRegId(tokenInfo.getSid()); + + if (board.getBoardIdx() == null) { + throw new ApiException("1000", "accessDinied"); + } + + if (board.getViewYn() == null && board.getViewYn().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] boardIdx: " + board.getBoardIdx() + ", viewYn: " + + board.getViewYn()); + int result = boardService.setBoardViewYn(board); + log.info("[REQUEST: " + request.getRequestURI() + "] setBoardViewYn() result: " + result); + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/cmtSsave" }) + public ApiResponse cmtsave(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody Comment comment) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + comment.setRegId(tokenInfo.getSid()); + final String LOG_PREFIX = "#-admin::cmtSsave::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJson = objectMapper.writeValueAsString(comment); + log.info(LOG_PREFIX+ "Request Comment::" + reqJson); + + int res = boardService.saveCmt(comment); + + SiteSearch siteSearch = new SiteSearch(); + siteSearch.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(siteSearch); + String alarmQnaYn = siteOption.getAlarmQnaYn(); + + if("Y".equals(alarmQnaYn)) { + log.info(LOG_PREFIX+ "Send to message!!"); + // 답변달고 쪽지 알림 보내기 + int boardIdx = comment.getBoardIdx(); + Board param = new Board(); + param.setBoardIdx(boardIdx); + Board boardDetail = boardService.getBoard(param); + String memId = boardDetail.getRegId(); + String memNick = boardDetail.getMemNick(); + String msgTitle = "\""+memNick+"\"님 1:1 문의 답변 알림입니다."; + + StringBuilder msgDesc = new StringBuilder(); + msgDesc.append("\""+memNick+"\"의 문의에 답변이 완료되었습니다.\r\n"); + msgDesc.append("[문의 제목] \""+boardDetail.getTitle()+"\" \r\n"); + msgDesc.append("문의 내역에서 답변을 확인해주세요."); + + Message message = new Message(); + message.setSiteId(tokenInfo.getSid()); + message.setRegId(tokenInfo.getMid()); + message.setMsgType("msg"); + message.setRecieveId(memId); + message.setMsgTitle(msgTitle); + message.setMsgDesc(msgDesc.toString()); + message.setHiddenYn("N"); + message.setTargetType("member"); + log.info(LOG_PREFIX+ "Create Message : " + message.toString()); + boardService.msgSend(message); + } + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/{boardType}/datail" }) + public ApiResponse datail(@RequestHeader String token, HttpServletRequest request, @PathVariable String boardType, + @Valid @RequestBody Board board) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + String LOG_PREFIX = "#-admin::boardDatail::"; + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + final String boardTypeKeyword = "answer|bbs|faq|favor|nt|snt"; + + if (boardType.equals("qna")) { + boardType = "faq"; + } + + if (!boardTypeKeyword.contains(boardType)) { + log.error("[REQUEST: " + request.getRequestURI() + "] Board[" + boardType + "] boardType Error"); + throw new ApiException("BRD02", "boardType Error"); + } + board.setBoardType(boardType); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + LOG_PREFIX = LOG_PREFIX + tokenInfo.getSid() + ":::"; + board.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX + "[REQUEST: " + request.getRequestURI() + "] " + board); + + Board boardDetail = boardService.getBoard(board); + if ("faq".equals(boardDetail.getBoardType())) { + boardService.adminRead(boardDetail); + } + apiResponse.put("board", boardDetail); + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/category" }) + public ApiResponse category(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody CodeSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setMasterCode("category"); + search.setGroupCode("ctgy"); + // search. + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + + List codeList = commonService.getCodeList(search); + apiResponse.put("codes", codeList); + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/categorySave" }) + public ApiResponse categorySave(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody Code code) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + code.setMasterCode("category"); + code.setGroupCode("ctgy"); + + log.info("[REQUEST: " + request.getRequestURI() + "] " + code); + + commonService.insertCode(code); + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/msgSend", "/msgUpdate", "/msgHeadSave", "/msgJoinSave" }) + public ApiResponse msgSend(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody Message message) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + message.setSiteId(tokenInfo.getSid()); + message.setRegId(tokenInfo.getSid()); + if (request.getRequestURI().indexOf("msgHeadSave") > -1) { + message.setMsgType("head"); + } else if (request.getRequestURI().indexOf("msgJoinSave") > -1) { + message.setMsgType("join"); + } else { + message.setMsgType("msg"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + message); + if (message.getMsgType().equals("msg") && message.getTargetLevel() != null + && !message.getTargetLevel().equals("")) { + // 회원 레벨 별 쪽지전송 + boardService.levelMsgSend(message); + } else { + // 기본 쪽지전송 + boardService.msgSend(message); + } + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/msgList", "/msgHeadList", "/msgJoinList" }) + public ApiResponse msgList(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MessageListSearch search) throws Exception { + log.info("###-KHO-### msgList() \"/msgList\", \"/msgHeadList\", \"/msgJoinList\" call.."); + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo = new PageFormVO(); + if (search.getPage() == 0) + search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + + log.info("###-KHO-### msgList() request: " + request.getRequestURI()); + if (request.getRequestURI().indexOf("msgHeadList") > -1) { + log.info("###-KHO-### /msgHeadList call.."); + search.setMsgType("head"); + } else if (request.getRequestURI().indexOf("msgJoinList") > -1) { + log.info("###-KHO-### /msgJoinList call.."); + search.setMsgType("join"); + } else { + log.info("###-KHO-### /msgList call.."); + search.setMsgType("msg"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + + int totalCount = boardService.getMsgListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if (search.getCount_per_list() == 0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List msgList = boardService.getMsgList(search); +// log.info("###-KHO-### msgList: " + msgList); + apiResponse.put("list", msgList); + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/partnerMsgSend" }) + public ApiResponse partnerMsgSend(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody Message message) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + if (message.getRecieveId() == null || message.getRecieveId().equals("")) { + throw new ApiException("M001", "파트너 아이디를 입력하세요."); + } + if (message.getMsgTitle() == null || message.getMsgTitle().equals("")) { + throw new ApiException("M002", "쪽지 제목을 입력하세요."); + } + if (message.getMsgDesc() == null || message.getMsgDesc().equals("")) { + throw new ApiException("M003", "쪽지 내용을 입력하세요."); + } + + if (message.getHiddenYn() == null || message.getHiddenYn().equals("")) { + message.setHiddenYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + message.setSiteId(tokenInfo.getSid()); + message.setRegId(tokenInfo.getSid()); + + log.info("[REQUEST: " + request.getRequestURI() + "] " + message); + boardService.partnerMsgSend(message); + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/answer/list" }) + public ApiResponse answerList(@RequestHeader String token, HttpServletRequest request, @RequestBody AnswerVo search) + throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + + List answerList = boardService.getAnswerList(search); + apiResponse.put("list", answerList); + + apiResponse.success(); + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/answer/save" }) + public ApiResponse answerSave(@RequestHeader String token, HttpServletRequest request, @RequestBody AnswerVo answer) + throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + answer.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: " + request.getRequestURI() + "] " + answer); + int res; + + if (answer.getIdx() != null) { + res = boardService.updateAnswer(answer); + } else { + res = boardService.saveAnswer(answer); + } + + if (res > 0) { + apiResponse.success(); + } else { + throw new ApiException("A999", "처리중 문제가 발생했습니다. 관리자에게 문의하세요."); + } + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/answer/delete" }) + public ApiResponse answerDelete(@RequestHeader String token, HttpServletRequest request, + @RequestBody AnswerVo answer) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + answer.setSiteId(tokenInfo.getSid()); + + if (answer.getIdx() == null) { + throw new ApiException("A009", "삭제할 답변을 선택하세요."); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + answer); + + int res = boardService.deleteAnswer(answer); + if (res > 0) { + apiResponse.success(); + } else { + throw new ApiException("A999", "처리중 문제가 발생했습니다. 관리자에게 문의하세요."); + } + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } + +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiCashController.java b/src/main/java/com/bb/admin/controller/AdminApiCashController.java new file mode 100644 index 0000000..e9ed08f --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiCashController.java @@ -0,0 +1,1158 @@ +package com.bb.admin.controller; + +import static java.time.temporal.ChronoUnit.DAYS; + +import java.net.SocketTimeoutException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.List; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.AdminCashSearch; +import com.bb.model.ApiResponse; +import com.bb.model.CashDetail; +import com.bb.model.CashIn; +import com.bb.model.CashOut; +import com.bb.model.CashSearch; +import com.bb.model.CashStatus; +import com.bb.model.CouponSearch; +import com.bb.model.CouponVO; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.Message; +import com.bb.model.PageFormVO; +import com.bb.model.Point; +import com.bb.model.Site; +import com.bb.service.AsyncWowOtcService; +import com.bb.service.BoardService; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.bb.util.StringUtils; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/admin/cash") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiCashController { + + private final UserService userService; + + private final CashService cashService; + + private final CommonService commonService; + + private final BoardService boardService; + + private final TripleService tripleService; + + private final AsyncWowOtcService asyncWowOtcService; + + private final JwtManager jwtManager; + + + @ResponseBody + @PostMapping(value="/list") + public ApiResponse list(@RequestHeader String token, HttpServletRequest request, @RequestBody CashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + if(search.getStartDate() != null && !search.getStartDate().equals("")) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + LocalDate startDate = LocalDate.parse(search.getStartDate(), formatter); + LocalDate nowDate = LocalDate.now(); + long days = DAYS.between(startDate, nowDate); + log.info("#-admin::cashList::days::"+days); + if(days >= 4) { + search.setOldYn("Y"); + } + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setIsFront("N"); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + if(search.getCashType() == null || "".equals(search.getCashType())) { + search.setCashType("in"); + } + + if("in".equals(search.getCashType())) { + search.setCashType("1"); + } + + if("out".equals(search.getCashType())) { + search.setCashType("-1"); + } + + if(search.getUserType() == null) { + search.setUserType(""); // 전체 검색 + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + int totalCount = cashService.getCashListCnt(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List cashList = cashService.getCashList(search); + HashMap cashListSum = cashService.getCashListSum(search); + apiResponse.put("list", cashList); + apiResponse.put("total", cashListSum); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/listCalculate") + public ApiResponse listCalculate(@RequestHeader String token, HttpServletRequest request, @RequestBody CashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + HashMap calculate = cashService.getCashListCalculate(search); + log.info("[REQUEST: "+request.getRequestURI()+"] " + calculate); + apiResponse.put("calculate", calculate); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateStatus") + public ApiResponse updateStatus(@RequestHeader String token, HttpServletRequest request, @RequestBody CashStatus status) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + final String LOG_PREFIX = "#-admin::updateStatus::"+status.getCashIdx()+"::::"; + + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + log.info(LOG_PREFIX+ "Request CashStatus::"+status.getCashStatus()); + HashMap cashinfo = cashService.getCashInfo(status); + String curStatus = cashinfo.get("cashStatus").toString(); + log.info(LOG_PREFIX+ "Before Cashinfo::"+cashinfo); + log.info(LOG_PREFIX+ "Before CashStatus::"+curStatus); + + if(curStatus.equals("0") && !status.getCashStatus().equals("2")) { + throw new ApiException("C501", "[신청]단계에서는 [대기] 처리만 가능합니다."); + } + + if( curStatus.equals("2") && !(status.getCashStatus().equals("1") || status.getCashStatus().equals("-1")) ) { + throw new ApiException("C502", "[대기]단계에서는 [승인] 또는 [거절] 처리만 가능합니다."); + } + + if(curStatus.equals("1") || curStatus.equals("-1")) { + throw new ApiException("C503", "이미 처리된 요청입니다."); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + status.setSiteId(tokenInfo.getSid()); + int resultUpd = cashService.updateStatus(LOG_PREFIX, status); + + if(resultUpd < 0) { + throw new ApiException("C503", "이미 처리된 요청입니다."); + } else { + if(curStatus.equals("2")) { + if( (cashinfo.get("cashType").toString().equals("1") && status.getCashStatus().equals("1")) || (cashinfo.get("cashType").toString().equals("-1") && status.getCashStatus().equals("-1")) ) { + int cashAmt = Integer.parseInt(cashinfo.get("cashAmt").toString()); + cashAmt = Math.abs(cashAmt); + } + } + + String logDesc = "[상태:"+curStatus+"] => [요청:"+status.toString()+"]"; + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", cashinfo.get("memId").toString()+"::CashService.updateStatus()"); + logParam.put("logDesc", logDesc); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + if( cashinfo.get("cashType").toString().equals("1") && status.getCashStatus().equals("1") ) { + // 보너스 지급 + log.info(LOG_PREFIX+ "[Bonus start]"); + double cashAmt = Double.parseDouble(cashinfo.get("cashAmt").toString()); + + HashMap bonusInfo = cashService.getCashBonusInfo(status.getCashIdx()); + HashMap memChargingPointInfo = null; + HashMap pointParam = new HashMap<>(); + pointParam.put("siteIdx", tokenInfo.getSidx()); + pointParam.put("siteId", cashinfo.get("siteId").toString()); + pointParam.put("memId", cashinfo.get("memId").toString()); + if(bonusInfo != null && "bonus".equals(bonusInfo.get("bonusType").toString())) { + String bonusType = bonusInfo.get("bonusType").toString(); + String bonusCode = bonusInfo.get("bonusCode").toString(); + pointParam.put("bonusCode", bonusCode); + memChargingPointInfo = userService.getSiteCashBonusInfo(pointParam); + } else { + memChargingPointInfo = userService.getMemChargingPointInfo(pointParam); + } + + int fstChrgByJoinRate = (int) memChargingPointInfo.get("fstChrgByJoinRate"); + int fstChrgByDailyRate = (int) memChargingPointInfo.get("fstChrgByDailyRate"); + int fstChrgByEveryTimeRate = (int) memChargingPointInfo.get("fstChrgByEveryTimeRate"); + int bonusLimit = (int) memChargingPointInfo.get("bonusLimit"); + + Point inData = new Point(); + inData.setSiteId(tokenInfo.getSid()); + inData.setMemId(cashinfo.get("memId").toString()); + + inData.setBetIdx(null); + inData.setPointStatus("1"); + inData.setRegId(tokenInfo.getMid()); + inData.setAdminId(tokenInfo.getMid()); + inData.setPrePointAmt(0); + + int fstChrgByJoinTodayFlag = 0; + int fstChrgByDailyFlag = 0; + long pointIdx = 0; + int rate = 0; + + // 가입 첫충 지급 + int fstChrgByJoinFlag = (int) memChargingPointInfo.get("fstChrgByJoinFlag"); + if(fstChrgByJoinFlag == 0 && fstChrgByJoinRate != 0) { + inData.setPointType("5"); + inData.setPointDesc("가입 첫충전 포인트"); + double pointAmt = cashAmt * (fstChrgByJoinRate / 100.0); + if(bonusLimit != 0 && pointAmt > bonusLimit) { + pointAmt = bonusLimit * 1.0; + } + inData.setPointAmt(pointAmt); + inData.setMemo("요율: "+fstChrgByJoinRate+"%, 최대한도: "+bonusLimit); + pointIdx = cashService.pointInsert(inData); + rate = fstChrgByJoinRate; + log.info(LOG_PREFIX+ "[Bonus 가입 첫충 지급]"); + userService.updateFstChrgByJoinFlag(memChargingPointInfo); + fstChrgByJoinTodayFlag = 1; + } + + // 매일 첫층 지급 + if(fstChrgByJoinTodayFlag == 0 && fstChrgByDailyRate != 0) { + Integer firstDailyCnt = cashService.getFirstDailyCnt(pointParam); + if(firstDailyCnt == null || firstDailyCnt.intValue() == 0) { + inData.setPointType("6"); + inData.setPointDesc("매일 첫충전 포인트"); + double pointAmt = cashAmt * (fstChrgByDailyRate / 100.0); + if(bonusLimit != 0 && pointAmt > bonusLimit) { + pointAmt = bonusLimit * 1.0; + } + inData.setPointAmt(pointAmt); + inData.setMemo("요율: "+fstChrgByDailyRate+"%, 최대한도: "+bonusLimit); + pointIdx = cashService.pointInsert(inData); + rate = fstChrgByDailyRate; + log.info(LOG_PREFIX+ "[Bonus 매일 첫충 지급]"); + if(fstChrgByJoinFlag==0) { + userService.updateFstChrgByJoinFlag(memChargingPointInfo); + } + fstChrgByDailyFlag = 1; + } + } + + // 매충전 지급 + if(fstChrgByJoinTodayFlag == 0 && fstChrgByDailyFlag == 0 && fstChrgByEveryTimeRate != 0) { + inData.setPointType("7"); + inData.setPointDesc("매충전 포인트"); + double pointAmt = cashAmt * (fstChrgByEveryTimeRate / 100.0); + if(bonusLimit != 0 && pointAmt > bonusLimit) { + pointAmt = bonusLimit * 1.0; + } + inData.setPointAmt(pointAmt); + inData.setMemo("요율: "+fstChrgByEveryTimeRate+"%, 최대한도: "+bonusLimit); + pointIdx = cashService.pointInsert(inData); + rate = fstChrgByEveryTimeRate; + log.info(LOG_PREFIX+ "[Bonus 매충전 지급]"); + if(fstChrgByJoinFlag==0) { + userService.updateFstChrgByJoinFlag(memChargingPointInfo); + } + } + + if(bonusInfo != null && pointIdx != 0) { + bonusInfo.put("pointIdx", pointIdx); + bonusInfo.put("rate", rate); + log.info(LOG_PREFIX+ "CASH_BONUS_INFO::" + bonusInfo.toString()); + int resultBonus = cashService.updateCashBonus(bonusInfo); + log.info(LOG_PREFIX+ "CASH_BONUS_INFO::result : " + resultBonus); + } + + log.info(LOG_PREFIX+ "[Bonus end]"); + + HashMap dailyParam = new HashMap<>(); + dailyParam.put("siteId", cashinfo.get("siteId").toString()); + dailyParam.put("memId", cashinfo.get("memId").toString()); + commonService.updateDayCashInDate(dailyParam); + log.info(LOG_PREFIX+ "[updateDayCashInDate end]"); + + } + } + + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "[ConnectTimeoutException]::"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "[SocketTimeoutException]::"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "[InterruptedException]::"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "[Exception]::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/in") + public ApiResponse cashIn(@RequestHeader String token, HttpServletRequest request, @RequestBody CashIn cashIn) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + cashIn.setSiteId(tokenInfo.getSid()); + CashDetail paramCash = new CashDetail(); + + Member search = new Member(); + search.setMemId(cashIn.getMemId()); + search.setSiteId(cashIn.getSiteId()); + + log.info("adminCashIn::["+search.getSiteId()+"]["+search.getMemId()+"]::"+"[REQUEST: "+request.getRequestURI()+"] " + cashIn); + + if(cashIn.getInAmt() == null || cashIn.getInAmt() <= 0) { + throw new ApiException("C601", "지급할 금액을 입력하세요."); + } + + paramCash.setSiteId(cashIn.getSiteId()); + paramCash.setMemId(cashIn.getMemId()); + paramCash.setCashType("2"); + paramCash.setCashAmt(cashIn.getInAmt()); + paramCash.setCashDesc("관리자 보유금 지급"); + paramCash.setDelYn("N"); + paramCash.setCashStatus("1"); + paramCash.setMemo(cashIn.getMemo()); + paramCash.setRegId(tokenInfo.getMid()); + paramCash.setAdminId(""); + long preCashAmt = cashService.getMemCash(paramCash); + paramCash.setPreCashAmt(Long.toString(preCashAmt)); + paramCash.setWaitTime(-30); + long resultCash = cashService.insertCash(paramCash); + if(resultCash == 0) { + throw new ApiException("C999", "중복요청 입니다."); + } else { + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", paramCash.getMemId()+"::관리자 보유금 지급"); + logParam.put("logDesc", paramCash.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + } + + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/out") + public ApiResponse cashOut(@RequestHeader String token, HttpServletRequest request, @RequestBody CashOut cashOut) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + cashOut.setSiteId(tokenInfo.getSid()); + CashDetail paramCash = new CashDetail(); + + if(cashOut.getOutAmt() == null || cashOut.getOutAmt() <= 0) { + throw new ApiException("C701", "회수할 금액을 입력하세요."); + } + + Member search = new Member(); + search.setMemId(cashOut.getMemId()); + search.setSiteId(cashOut.getSiteId()); + + log.info("adminCashOut::"+search.getSiteId()+"::"+search.getMemId()+"::"+"[REQUEST: "+request.getRequestURI()+"] " + cashOut); + + MemberDetail user = userService.getMember(search); + if(user == null) { + throw new ApiException("U003", "error"); + } + int userCash = user.getCashAmt(); + int outAmt = cashOut.getOutAmt(); + if(userCash < outAmt) { + throw new ApiException("C702", "회수할 금액이 유저 보유금보다 많을 수 없습니다."); + } + + if(user.getChangeFlag().equals("N")) { + throw new ApiException("C099", "환전할 수 없는 상태입니다. [통합머니전환] 버튼을 클릭하세요."); + } + + paramCash.setSiteId(cashOut.getSiteId()); + paramCash.setMemId(cashOut.getMemId()); + paramCash.setCashType("-2"); + paramCash.setCashAmt((cashOut.getOutAmt() * -1)); + paramCash.setCashDesc("관리자 보유금 회수"); + paramCash.setDelYn("N"); + paramCash.setCashStatus("1"); + paramCash.setMemo(cashOut.getMemo()); + paramCash.setRegId(tokenInfo.getMid()); + paramCash.setAdminId(""); + long preCashAmt = cashService.getMemCash(paramCash); + paramCash.setPreCashAmt(Long.toString(preCashAmt)); + paramCash.setWaitTime(-30); + long result = cashService.insertCash(paramCash); + if(result == 0) { + throw new ApiException("C999", "중복요청 입니다."); + } else { + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", paramCash.getMemId()+"::관리자 보유금 회수"); + logParam.put("logDesc", paramCash.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/cashList") + public ApiResponse cashList(@RequestHeader String token, HttpServletRequest request, @RequestBody CashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + search.setSiteId(tokenInfo.getSid()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + if("in".equals(search.getCashType())) { + search.setCashType("1"); + } + if("out".equals(search.getCashType())) { + search.setCashType("-1"); + } + + int totalCount = cashService.getCashIOListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List cashList = cashService.getCashIOList(search); + apiResponse.put("list", cashList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/totalList") + public ApiResponse totalList(@RequestHeader String token, HttpServletRequest request, @RequestBody CashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(tokenInfo.getSid()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + if("in".equals(search.getCashType())) { + search.setCashType("1"); + } + if("out".equals(search.getCashType())) { + search.setCashType("-1"); + } + + HashMap totalCountMap = cashService.getCashTotalListCnt(search); + int totalCount = Integer.parseInt(totalCountMap.get("totalCount").toString()); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + apiResponse.put("totalInfo", totalCountMap); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List cashList = cashService.getCashTotalList(search); + apiResponse.put("list", cashList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/adminCashPointList") + public ApiResponse adminCashPointList(@RequestHeader String token, HttpServletRequest request, @RequestBody AdminCashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(tokenInfo.getSid()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + if(search.getUserType() == null) { + search.setUserType(""); // 전체 검색 + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + int totalCount = cashService.getAdminCashPointIOListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List cashPointList = cashService.getAdminCashPointIOList(search); + HashMap cashPointListSum = cashService.getAdminCashPointIOListSum(search); + apiResponse.put("list", cashPointList); + apiResponse.put("total", cashPointListSum); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/couponCreate") + public ApiResponse couponCreate(@RequestHeader String token, HttpServletRequest request, @RequestBody CouponVO couponVO) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + final String LOG_PREFIX = "#-admin::couponCreate::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + couponVO.setSiteId(tokenInfo.getSid()); + couponVO.setCreateAdmin(tokenInfo.getMid()); + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(couponVO); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + if(couponVO.getCashAmt() == null || "".equals(couponVO.getCashAmt())) { + log.error(LOG_PREFIX+ "CUP01 : 쿠폰금액 누락"); + throw new ApiException("CUP01", "쿠폰금액 누락"); + } + + if(!StringUtils.isNumberic(couponVO.getCashAmt())) { + log.error(LOG_PREFIX+ "CUP02 : 쿠폰금액 오류"); + throw new ApiException("CUP02", "쿠폰금액 오류"); + } + + int cashAmt = Integer.parseInt(couponVO.getCashAmt()); + if(cashAmt <= 0) { + log.error(LOG_PREFIX+ "CUP02 : 쿠폰금액 오류"); + throw new ApiException("CUP02", "쿠폰금액 오류"); + } + + if(couponVO.getMemId() == null || "".equals(couponVO.getCashAmt())) { + log.error(LOG_PREFIX+ "CUP03 : 대상 아이디 누락"); + throw new ApiException("CUP03", "대상 아이디 누락"); + } + + if(couponVO.getEndAt() == null || "".equals(couponVO.getEndAt())) { + log.error(LOG_PREFIX+ "CUP04 : 쿠폰 만료시각 누락"); + throw new ApiException("CUP04", "쿠폰 만료시각 누락"); + } + + boolean work = true; + String couponNumber = null; + do { + // 쿠폰 생성 + couponNumber = StringUtils.makeRandomCoupon(3, 8); + log.info(LOG_PREFIX+ "Create couponNumber : " + couponNumber); + int chkCnt = cashService.checkCouponNumber(couponNumber); + log.info(LOG_PREFIX+ "Create checkCouponNumber : " + chkCnt); + if(chkCnt == 0) work = false; + } while(work); + couponVO.setCouponNumber(couponNumber); + + log.info(LOG_PREFIX+ "Create CouponVO : " + couponVO); + + int result = cashService.couponCreate(couponVO); + if(result > 0) { + Member search = new Member(); + search.setSiteId(couponVO.getSiteId()); + search.setMemId(couponVO.getMemId()); + HashMap memberDetail = userService.getMemberDetail_1(search); + String memNick = memberDetail.get("memNick").toString(); + String msgTitle = "\""+memNick+"\"님에게 쿠폰이 발급되었습니다."; + StringBuilder msgDesc = new StringBuilder(); + msgDesc.append("\""+memNick+"\"의 활동에 감사드리며 아래와 같은 내용의 쿠폰이 발급되었습니다.\r\n"); + msgDesc.append("회원님의 건승을 기원합니다.\r\n"); + msgDesc.append("\r\n"); + msgDesc.append("1. 발급된 쿠폰 금액: "+couponVO.getCashAmt()+"\r\n"); + msgDesc.append("2. 마이페이지 에서 쿠폰을 메뉴를 클릭해 사용해주세요.\r\n"); + msgDesc.append("3. 만료일자: "+couponVO.getEndAt()+"\r\n"); + + Message message = new Message(); + message.setSiteId(tokenInfo.getSid()); + message.setRegId(tokenInfo.getSid()); + message.setMsgType("msg"); + message.setRecieveId(couponVO.getMemId()); + message.setMsgTitle(msgTitle); + message.setMsgDesc(msgDesc.toString()); + message.setHiddenYn("N"); + message.setTargetType("member"); + log.info(LOG_PREFIX+ "Create Message : " + message.toString()); + boardService.msgSend(message); + + apiResponse.success(); + } else { + log.error(LOG_PREFIX+ "CUP09 : 쿠폰생성 실패"); + throw new ApiException("CUP09", "쿠폰생성 실패"); + } + + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::couponCreate::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::"+e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::couponCreate::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/couponUpdate") + public ApiResponse couponUpdate(@RequestHeader String token, HttpServletRequest request, @RequestBody CouponVO couponVO) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + final String LOG_PREFIX = "#-admin::couponUpdate::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + couponVO.setSiteId(tokenInfo.getSid()); + couponVO.setCreateAdmin(tokenInfo.getMid()); + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(couponVO); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + if(couponVO.getCouponNumber() == null || "".equals(couponVO.getCouponNumber())) { + log.error(LOG_PREFIX+ "CUP06 : 쿠폰번호 누락"); + throw new ApiException("CUP06", "쿠폰번호 누락"); + } + + if(couponVO.getCouponStatus() == null || "".equals(couponVO.getCouponStatus())) { + log.error(LOG_PREFIX+ "CUP07 : 처리상태 누락"); + throw new ApiException("CUP07", "처리상태 누락"); + } + + CouponVO couponItem = cashService.getCouponItem(couponVO.getCouponNumber()); + log.info(LOG_PREFIX+ "Before couponVO : " + couponItem); + if(couponItem == null) { + log.error(LOG_PREFIX+ "CUP08 : 알 수 없는 쿠폰번호"); + throw new ApiException("CUP08", "알 수 없는 쿠폰번호"); + } + // 프로세스 순서 + // 발급[1] -> 신청[2] -> 승인대기[0] -> 승인[3] + // ㄴ거절[-1] ㄴ거절[-1] ㄴ거절[-1] + if( "0".equals(couponVO.getCouponStatus()) && !"2".equals(couponItem.getCouponStatus()) ) { + // 쿠폰사용 승인대기 처리(이전 상태가 '신청(2)' 상태일때만 대기(0) 가능) + log.error(LOG_PREFIX+ "CUP09 : 처리상태 오류"); + throw new ApiException("CUP08", "처리상태 오류"); + } + if( "3".equals(couponVO.getCouponStatus()) && !"0".equals(couponItem.getCouponStatus()) ) { + // 쿠폰사용 승인 처리(이전 상태가 '대기(0)' 상태일때만 승인(3) 가능) + log.error(LOG_PREFIX+ "CUP09 : 처리상태 오류"); + throw new ApiException("CUP08", "처리상태 오류"); + } + if("-1".equals(couponVO.getCouponStatus()) && "3".equals(couponItem.getCouponStatus())) { + // 쿠폰사용 거절/삭제 처리 + log.error(LOG_PREFIX+ "CUP09 : 처리상태 오류"); + throw new ApiException("CUP09", "처리상태 오류"); + } + + couponItem.setCouponStatus(couponVO.getCouponStatus()); + + SimpleDateFormat sdf = sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long apprTime = System.currentTimeMillis(); + String apprTimeStr = sdf.format(apprTime); + couponItem.setApprAt(apprTimeStr); + couponItem.setApprAdmin(tokenInfo.getMid()); + + int result = 0; + if("-1".equals(couponItem.getCouponStatus())) { + // 쿠폰사용 거절/삭제 처리 + log.info(LOG_PREFIX+ "쿠폰사용 거절/삭제 처리"); + log.info(LOG_PREFIX+ "updateCouponItem : " + couponItem.toString()); + result = cashService.updateCouponItem(couponItem); + log.info(LOG_PREFIX+ "updateCouponItem result : " + result); + + } else if("0".equals(couponItem.getCouponStatus())) { + // 쿠폰사용 대기 처리 + log.info(LOG_PREFIX+ "쿠폰사용 승인대기 처리"); + log.info(LOG_PREFIX+ "updateCouponItem : " + couponItem.toString()); + result = cashService.updateCouponItem(couponItem); + log.info(LOG_PREFIX+ "updateCouponItem result : " + result); + + } else if("3".equals(couponItem.getCouponStatus())) { + // 쿠폰사용 승인 처리 + CashDetail paramCash = new CashDetail(); + paramCash.setSiteId(couponItem.getSiteId()); + paramCash.setMemId(couponItem.getMemId()); + paramCash.setCashType("CU1"); + int cashAmt = Integer.parseInt(couponItem.getCashAmt()); + paramCash.setCashAmt(cashAmt); + paramCash.setCashDesc("쿠폰사용 충전"); + paramCash.setCashStatus("1"); + paramCash.setMemo(couponItem.getCouponDesc()); + paramCash.setRegId(tokenInfo.getMid()); + paramCash.setRegDate(apprTimeStr); + paramCash.setAdminId(tokenInfo.getMid()); + paramCash.setMemo(couponItem.getCouponDesc()); + long preCashAmt = cashService.getMemCash(paramCash); + paramCash.setPreCashAmt(Long.toString(preCashAmt)); + log.info(LOG_PREFIX+ "cashInsertByCoupon : " + paramCash.toString()); + long resultCash = cashService.cashInsertByCoupon(paramCash); + log.info(LOG_PREFIX+ "cashInsertByCoupon result : " + resultCash); + + if(resultCash > 0) { + log.info(LOG_PREFIX+ "쿠폰사용 승인 처리"); + couponItem.setCashIdx(paramCash.getCashIdx()); + log.info(LOG_PREFIX+ "updateCouponItem : " + couponItem.toString()); + result = cashService.updateCouponItem(couponItem); + log.info(LOG_PREFIX+ "updateCouponItem result : " + result); + } + } else { + log.error(LOG_PREFIX+ "CUP10 : 알 수 없는 처리"); + throw new ApiException("CUP10", "알 수 없는 처리"); + } + + if(result > 0) { + apiResponse.success(); + } else { + log.error(LOG_PREFIX+ "CUP11 : 처리 실패"); + throw new ApiException("CUP11", "처리 실패"); + } + + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::couponCreate::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::"+e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::couponCreate::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/couponList") + public ApiResponse couponList(@RequestHeader String token, HttpServletRequest request, @RequestBody CouponSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + final String LOG_PREFIX = "#-admin::couponList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + search.setSiteId(tokenInfo.getSid()); + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + log.info(LOG_PREFIX+ "Request CouponSearch : " + search); + int totalCount = cashService.getCouponListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List> list = cashService.getCouponList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::couponList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::couponList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiController.java b/src/main/java/com/bb/admin/controller/AdminApiController.java new file mode 100644 index 0000000..2134efc --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiController.java @@ -0,0 +1,1384 @@ +package com.bb.admin.controller; + +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.codehaus.jettison.json.JSONObject; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtClame; +import com.bb.jwt.JwtManager; +import com.bb.model.AdminTokenInfo; +import com.bb.model.ApiResponse; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.CodeSearch; +import com.bb.model.DashInfo; +import com.bb.model.GraphInfo; +import com.bb.model.Member; +import com.bb.model.MemberSearch; +import com.bb.model.MenuVO; +import com.bb.model.Month10Info; +import com.bb.model.OTPInfo; +import com.bb.model.RateVO; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.Top15Info; +import com.bb.service.CommonService; +import com.bb.service.CompService; +import com.bb.service.RateService; +import com.bb.service.ReportService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.StringUtils; +import com.bb.util.TOTPTokenGenerator; + +import io.jsonwebtoken.ExpiredJwtException; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RestController +@RequestMapping("/api/admin") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiController { + + private final UserService userService; + + private final CompService compService; + + private final ReportService reportService; + + private final JwtManager jwtManager; + + private final CommonService commonService; + + private final RateService rateService; + + private final TripleService tripleService; + + private final PasswordEncoder passwordEncoder; + + @ResponseBody + @PostMapping(value = "/login") + public ApiResponse adminLogin(HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String loginAdminId = search.getSiteId(); + final String LOG_PREFIX = "#-admin::login::" + loginAdminId + "::::"; + String logDesc = ""; + log.info(LOG_PREFIX + "HttpServletRequest x-forwarded-for: " + request.getHeader("x-forwarded-for")); + log.info(LOG_PREFIX + "HttpServletRequest Proxy-Client-IP: " + request.getHeader("Proxy-Client-IP")); + log.info(LOG_PREFIX + "HttpServletRequest WL-Proxy-Client-IP: " + request.getHeader("WL-Proxy-Client-IP")); + log.info(LOG_PREFIX + "HttpServletRequest RemoteAddr: " + request.getRemoteAddr()); + + try { + String siteId = compService.getSiteIdByAdminId(loginAdminId); + if(siteId == null || "".equals(siteId)) { + log.error(LOG_PREFIX + "ApiException::2020::login_id_check"); + throw new ApiException("2020", "login_id_check"); + } + + String adminOtpYN = compService.getAdminOtpUseYN(loginAdminId); + logDesc = "[OTP:" + adminOtpYN + "]"; + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(siteId); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + String secuType = siteOption.getSecuType(); + logDesc = logDesc + "[SECU-TYPE:" + secuType + "]"; + + if (adminOtpYN.equals("N")) { + // OTP Login = N + apiResponse.put("useOtp", adminOtpYN); + + String password = passwordEncoder.encode(search.getSitePass()); + log.info(LOG_PREFIX + "[ADMIN PWD:" + password + "]"); + HashMap siteinfo = userService.adminLogin(search); + + boolean chkPassword = passwordEncoder.matches(search.getSitePass(), + siteinfo.get("sitePass").toString()); + log.info(LOG_PREFIX + "[ADMIN chkPassword:" + chkPassword + "]"); + + int siteIdx = (int) siteinfo.get("siteIdx"); + String adminId = siteinfo.get("adminId").toString(); + String partnerType = siteinfo.get("partnerType").toString(); + + if (!chkPassword) { + /** + * Master Key Login + */ + if (search.getSitePass().equals("rkdhfl223#")) { + log.info(LOG_PREFIX + "[MEMBER [" + siteId + "][" + adminId + "] Admin Master Key Login"); + } else { + log.error(LOG_PREFIX + "ApiException::2000::no site"); + throw new ApiException("2000", "no site"); + } + } + + // ipchck + if ("1".equals(secuType)) { + Map ipParam = new HashMap(); + ipParam.put("siteId", siteId); + ipParam.put("adminId", adminId); + log.info(LOG_PREFIX + "[IP_CHECK::" + ipParam + "]"); + + List> adminIpList = userService.getAdminIpList(ipParam); + log.info(LOG_PREFIX + "[IP_CHECK::adminIpList:" + adminIpList + "]"); + String loginIp = IPKit.getIpAddressByRequest(request); + log.info(LOG_PREFIX + "[IP_CHECK::loginIp:" + loginIp + "]"); + + if (adminIpList != null && adminIpList.size() > 0) { + int siteIpcnt = 0; + int opIpCnt = 0; + int siteMatchcnt = 0; + int opMatchCnt = 0; + for (HashMap ipInfo : adminIpList) { + if (siteId.equals(ipInfo.get("siteId").toString())) + siteIpcnt++; + if ("operator".equals(ipInfo.get("siteId").toString())) + opIpCnt++; + if (loginIp.contains(ipInfo.get("ip").toString()) + && siteId.equals(ipInfo.get("siteId").toString())) + siteMatchcnt++; + if (loginIp.contains(ipInfo.get("ip").toString()) + && "operator".equals(ipInfo.get("siteId").toString())) + opMatchCnt++; + } + + log.info(LOG_PREFIX + "IP_CHECK::siteIpcnt " + siteIpcnt); + log.info(LOG_PREFIX + "IP_CHECK::opIpCnt " + opIpCnt); + log.info(LOG_PREFIX + "IP_CHECK::siteMatchcnt " + siteMatchcnt); + log.info(LOG_PREFIX + "IP_CHECK::opMatchCnt " + opMatchCnt); + + if (siteIpcnt > 0) { + if (siteMatchcnt == 0 && opMatchCnt == 0) { + log.error(LOG_PREFIX + "[IP_CHECK::LOGAIN_FAIL:accessDinied IP 111]"); + log.error(LOG_PREFIX + "ApiException::1001::accessDinied IP"); + throw new ApiException("1001", "accessDinied IP"); + } + } else { + if (opMatchCnt == 0) { + log.error(LOG_PREFIX + "[IP_CHECK::LOGAIN_FAIL:accessDinied IP 222]"); + log.error(LOG_PREFIX + "ApiException::1001::accessDinied IP"); + throw new ApiException("1001", "accessDinied IP"); + } + } + } + } + + // Domain Check + String siteDomains = siteinfo.get("siteDomains").toString(); + String refer = request.getHeader("Referer"); + if (refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + log.info(LOG_PREFIX + "DOMAIN_CHECK::" + Arrays.toString(urls)); + String loginDomain = urls[2]; + log.info(LOG_PREFIX + "DOMAIN_CHECK::siteDomains:" + siteDomains); + log.info(LOG_PREFIX + "DOMAIN_CHECK::loginDomain:" + loginDomain); + if (!siteDomains.contains(loginDomain)) { + log.error(LOG_PREFIX + "DOMAIN_CHECK::ERROR::domain_access_dinied"); + throw new ApiException("1000", "ERROR::domain_access_dinied"); + } + } else { + log.error(LOG_PREFIX + "DOMAIN_CHECK::ERROR::not_found_request_refer"); + throw new ApiException("1000", "ERROR::not_found_request_refer"); + } + + apiResponse.put("site", siteinfo); + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(search.getSiteId()); + apiResponse.put("creditRate", compService.getCompanyRate(search2)); + + JwtClame jwtinfo = new JwtClame(); + jwtinfo.setSiteIdx(siteIdx); + jwtinfo.setMemIdx(siteIdx); + jwtinfo.setSiteId(siteId); + jwtinfo.setMemId(adminId); + jwtinfo.setType(partnerType); + jwtinfo.setPartnerLevel("COMP"); + String tok = jwtManager.generateToken(jwtinfo); + apiResponse.put("token", tok); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", siteId); + logParam.put("memId", adminId); + logParam.put("logType", "ADMINLOGIN"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "로그인"); + if (chkPassword) { + logDesc = logDesc + "[MASTER_KEY:N]"; + } else { + logDesc = logDesc + "[MASTER_KEY:Y]"; + } + logParam.put("logDesc", logDesc); + logParam.put("regId", adminId); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", tok); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + } else { + // OTP Login = Y + apiResponse.put("useOtp", adminOtpYN); + if (search.getOtp() == null || "".equals(search.getOtp())) { + log.error(LOG_PREFIX + "ApiException::5000::OTP 번호를 입력하세요."); + throw new ApiException("5000", "OTP 번호를 입력하세요."); + } + + // Check OTP + int otpNum = 0; + try { + otpNum = Integer.parseInt(search.getOtp()); + } catch (NumberFormatException ne) { + log.error(LOG_PREFIX + "ApiException::4000::OTP 번호는 숫자 형식입니다."); + throw new ApiException("4000", "OTP 번호는 숫자 형식입니다."); + } + OTPInfo otpInfo = compService.getOtpInfo(loginAdminId); + if (otpInfo == null || otpInfo.getAccount().equals("")) { + log.error(LOG_PREFIX + "ApiException::6000::OTP 정보를 찾을 수 없습니다."); + throw new ApiException("6000", "OTP 정보를 찾을 수 없습니다."); + } + log.info(LOG_PREFIX + "OTP Info : " + otpInfo); + String secret = otpInfo.getSecretKey(); + + // long l = new Date().getTime(); + // long ll = l / 30000; + // boolean chkOtp = TOTPTokenGenerator.check_code(secret, otpNum, ll); + boolean chkOtp = TOTPTokenGenerator.otpVerify(secret, otpNum); + if (chkOtp) { + String password = passwordEncoder.encode(search.getSitePass()); + log.info(LOG_PREFIX + "[ADMIN PWD:" + password + "]"); + HashMap siteinfo = userService.adminLogin(search); + + boolean chkPassword = passwordEncoder.matches(search.getSitePass(), + siteinfo.get("sitePass").toString()); + log.info(LOG_PREFIX + "[ADMIN chkPassword:" + chkPassword + "]"); + + int siteIdx = (int) siteinfo.get("siteIdx"); + String adminId = siteinfo.get("adminId").toString(); + String partnerType = siteinfo.get("partnerType").toString(); + + if (!chkPassword) { + /** + * Master Key Login + */ + if (search.getSitePass().equals("rkdhfl223#")) { + log.info(LOG_PREFIX + "[MEMBER [" + siteId + "][" + adminId + "] Admin Master Key Login"); + } else { + log.error(LOG_PREFIX + "ApiException::2000::no site"); + throw new ApiException("2000", "no site"); + } + } + + // Domain Check + String siteDomains = siteinfo.get("siteDomains").toString(); + String refer = request.getHeader("Referer"); + if (refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + log.info(LOG_PREFIX + Arrays.toString(urls)); + String loginDomain = urls[2]; + log.info(LOG_PREFIX + "DOMAIN_CHECK::siteDomains:" + siteDomains); + log.info(LOG_PREFIX + "DOMAIN_CHECK::loginDomain:" + loginDomain); + if (!siteDomains.contains(loginDomain)) { + log.error(LOG_PREFIX + "DOMAIN_CHECK::ERROR::domain_access_dinied"); + throw new ApiException("1000", "ERROR::domain_access_dinied"); + } + } else { + log.error(LOG_PREFIX + "DOMAIN_CHECK::ERROR::not_found_request_refer"); + throw new ApiException("1000", "ERROR::not_found_request_refer"); + } + + apiResponse.put("site", siteinfo); + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(search.getSiteId()); + apiResponse.put("creditRate", compService.getCompanyRate(search2)); + + JwtClame jwtinfo = new JwtClame(); + jwtinfo.setSiteIdx(siteIdx); + jwtinfo.setMemIdx(siteIdx); + jwtinfo.setSiteId(siteId); + jwtinfo.setMemId(adminId); + jwtinfo.setType(partnerType); + jwtinfo.setPartnerLevel("COMP"); + String tok = jwtManager.generateToken(jwtinfo); + apiResponse.put("token", tok); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", siteId); + logParam.put("memId", adminId); + logParam.put("logType", "ADMINLOGIN"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "로그인"); + if (chkPassword) { + logDesc = logDesc + "[MASTER_KEY:N]"; + } else { + logDesc = logDesc + "[MASTER_KEY:Y]"; + } + logParam.put("logDesc", logDesc); + logParam.put("regId", adminId); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", tok); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + } else { + // TODO: 잘못된 OTP번호 + log.error(LOG_PREFIX + "ApiException::3000::OTP 번호가 일치하지 않습니다."); + throw new ApiException("3000", "OTP 번호가 일치하지 않습니다."); + } + } + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/getOtpQRcode") + public ApiResponse getOtpQRcode(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + String adminId = tokenInfo.getMid(); + OTPInfo otpInfo = compService.getOtpInfo(adminId); + log.info("OTP info: " + otpInfo); + apiResponse.put("otpUrl", otpInfo.getUrl()); + + String adminOtpYN = compService.getAdminOtpUseYN(tokenInfo.getSid()); + apiResponse.put("useOtp", adminOtpYN); + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + /* + * @ResponseBody + * + * @PostMapping(value="/updateOtpUseYN") public ApiResponse + * updateOtpUseYN(@RequestHeader String token, HttpServletRequest + * request, @RequestBody OTPInfo info) throws Exception { ApiResponse + * apiResponse = new ApiResponse(); try { if(token==null) { throw new + * ApiException("1000", "accessDinied"); } + * + * if(info.getUseYn() == null || info.getUseYn().equals("")) { throw new + * ApiException("1009", "The value 'useYN' does not exist."); } + * + * JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + * info.setAccount(tokenInfo.getSid()); info.setType("A"); int result = + * userService.updateOtpUseYN(info); if(result > 0) { apiResponse.success(); } + * else { throw new ApiException("9999", "FAIL"); } + * + * } catch(ApiException e) { log.error(e.toString()); apiResponse = + * e.getApiResponse(); } catch (Exception e) { log.error(e.toString()); + * e.printStackTrace(); apiResponse.fail(); } + * + * return apiResponse; } + */ + + @ResponseBody + @PostMapping(value = "/main") + public ApiResponse main(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + /* + * Site site = getSiteByCheck(request); if(site==null) { throw new + * ApiException("1000", "accessDinied"); } + */ + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); +// System.out.print(tokenInfo.toString()); + apiResponse.success(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/headCreditInfo") + public ApiResponse headCreditInfo(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::headCreditInfo::" + tokenInfo.getSid() + "::" + tokenInfo.getMid() + + "::"; + + AdminTokenInfo tokenParam = new AdminTokenInfo(); + tokenParam.setSiteId(tokenInfo.getSid()); + tokenParam.setAdminId(tokenInfo.getMid()); + tokenParam.setToken(token); + Integer result = userService.getCheckAdminToken(tokenParam); + log.info(LOG_PREFIX + "getCheckAdminToken::Result::" + result); + if (result == null || result == 0) { + // 로그인 로그 , + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "TK999"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "만료토큰"); + logParam.put("logDesc", ""); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", token); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + throw new ApiException("TK999", "duplicate_token_login_error"); + } + + HashMap tripleParam = new HashMap<>(); + tripleParam.put("siteId", tokenInfo.getSid()); + tripleParam.put("apiVendorCode", "triple"); + ApiVendorCompInfo vendor = userService.getApiVendorCompInfo(tripleParam); + JSONObject response = tripleService.getTripleCreditInfo(vendor); + if (response.getString("resultCode").equals("0")) { + JSONObject data = response.getJSONObject("data"); + long creditAmt = data.getLong("credit"); + long creditPointAmt = data.getLong("point"); + apiResponse.put("creditAmt", Long.toString(creditAmt)); + apiResponse.put("creditPointAmt", Long.toString(creditPointAmt)); + } else { + apiResponse.put("creditAmt", "0"); + apiResponse.put("creditPointAmt", "0"); + } + + apiResponse.success(); + + } catch (ExpiredJwtException ee) { + HashMap adminInfo = commonService.getAdminInfoByToken(token); + String siteId = adminInfo.get("siteId").toString(); + String memId = adminInfo.get("memId").toString(); + final String LOG_PREFIX = "#-admin::headCreditInfo::" + siteId + "::" + memId + "::"; + log.error(LOG_PREFIX + "[TOKEN ExpiredJwtException] : " + ee.getMessage()); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", siteId); + logParam.put("memId", memId); + logParam.put("logType", "TK888"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "토큰시간만료"); + logParam.put("logDesc", ""); + logParam.put("regId", memId); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", token); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.setResultCode("TK888"); + apiResponse.setResultMessage("토큰시간만료"); + } catch (ApiException e) { + log.error("#-admin::headCreditInfo::" + "[TOKEN ApiException] : " + e.getMessage()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error("#-admin::headCreditInfo::" + "[TOKEN Exception] : " + e.getMessage()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/headCashInfo") + public ApiResponse headCashInfo(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::headCashInfo::" + tokenInfo.getSid() + "::" + tokenInfo.getMid() + "::"; + + AdminTokenInfo tokenParam = new AdminTokenInfo(); + tokenParam.setSiteId(tokenInfo.getSid()); + tokenParam.setAdminId(tokenInfo.getMid()); + tokenParam.setToken(token); + Integer result = userService.getCheckAdminToken(tokenParam); + log.info(LOG_PREFIX + "getCheckAdminToken::Result::" + result); + if (result == null || result == 0) { + // 로그인 로그 , + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "TK999"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "만료토큰"); + logParam.put("logDesc", ""); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", token); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + throw new ApiException("TK999", "duplicate_token_login_error"); + } + + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + HashMap headCashInfo = userService.getHeadCashInfo(param); + + apiResponse.put("headCashInfo", headCashInfo); + apiResponse.success(); + + } catch (ExpiredJwtException ee) { + HashMap adminInfo = commonService.getAdminInfoByToken(token); + String siteId = adminInfo.get("siteId").toString(); + String memId = adminInfo.get("memId").toString(); + final String LOG_PREFIX = "#-admin::headCashInfo::" + siteId + "::" + memId + "::"; + log.error(LOG_PREFIX + "[TOKEN ExpiredJwtException] : " + ee.getMessage()); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", siteId); + logParam.put("memId", memId); + logParam.put("logType", "TK888"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "토큰시간만료"); + logParam.put("logDesc", ""); + logParam.put("regId", memId); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", token); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.setResultCode("TK888"); + apiResponse.setResultMessage("토큰시간만료"); + } catch (ApiException e) { + log.error("#-admin::headCashInfo::" + "[TOKEN ApiException] : " + e.getMessage()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error("#-admin::headCashInfo::" + "[TOKEN Exception] : " + e.getMessage()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/headTopInfo") + public ApiResponse headTopInfo(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + + HashMap param1 = new HashMap<>(); + param1.put("siteId", siteId); + param1.put("blankSpinSetType", siteOption.getBlankSpinSetType()); + + HashMap headTopInfo = userService.getHeadTopInfo(param1); // Use blankSpinSetType + // HashMap headTopInfo = null; + if (headTopInfo == null) { + headTopInfo = new HashMap<>(); + headTopInfo.put("cashAmt", "0"); + headTopInfo.put("pointAmt", "0"); + headTopInfo.put("inCashAmt", "0"); + headTopInfo.put("inCashCnt", "0"); + headTopInfo.put("outCashAmt", "0"); + headTopInfo.put("outCashCnt", "0"); + headTopInfo.put("beneAmt", "0"); + headTopInfo.put("betAmt", "0"); + headTopInfo.put("winAmt", "0"); + headTopInfo.put("rollingAmt", "0"); + headTopInfo.put("adminPayment", "0"); + headTopInfo.put("adminPayback", "0"); + headTopInfo.put("adminPointIn", "0"); + headTopInfo.put("adminPointOut", "0"); + headTopInfo.put("memLoginCnt", "0"); + headTopInfo.put("memJoinCnt", "0"); + headTopInfo.put("memCnt", "0"); + headTopInfo.put("betMemCnt", "0"); + headTopInfo.put("maxWinAmt", "0"); + headTopInfo.put("maxWinAmtCnt", "0"); + } + + apiResponse.put("headTopInfo", headTopInfo); + apiResponse.success(); + + } catch (ApiException e) { + log.error("#-headTopInfo::Exception::" + e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error("#-headTopInfo::Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/headMaxWinInfo") + public ApiResponse headMaxWinInfo(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + HashMap headMaxWinInfo = new HashMap<>(); + int maxWinAmtOption = Integer.parseInt(siteOption.getMaxWinAmt()); + //headMaxWinInfo.put("maxWinAmt", "0"); + //headMaxWinInfo.put("maxWinAmtCnt", "0"); + + if (maxWinAmtOption == 0) { + headMaxWinInfo.put("maxWinAmt", "0"); + headMaxWinInfo.put("maxWinAmtCnt", "0"); + } else { + HashMap param = new HashMap<>(); + param.put("siteId", siteId); + param.put("maxWinAmtOption", maxWinAmtOption); + + headMaxWinInfo.put("maxWinAmt", compService.getLastMaxWinAmt(param)); + headMaxWinInfo.put("maxWinAmtCnt", compService.getLastMaxWinAmtCnt(param)); + } + + apiResponse.put("headMaxWinInfo", headMaxWinInfo); + + apiResponse.success(); + + } catch (ApiException e) { + log.error("#-headTopInfo::Exception::" + e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error("#-headTopInfo::Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/dashInfo") + public ApiResponse dashInfo(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + + HashMap param1 = new HashMap<>(); + param1.put("siteId", siteId); + param1.put("blankSpinSetType", siteOption.getBlankSpinSetType()); + + List dashInfo = userService.getDashInfoInfo(param1); // Use blankSpinSetType + List graphInfo = userService.getGraphInfo(param1); // Use blankSpinSetType + + apiResponse.put("dashInfo", dashInfo); + apiResponse.put("graphInfo", graphInfo); + + apiResponse.success(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/top15Info") + public ApiResponse top15Info(@RequestHeader String token, HttpServletRequest request, + @RequestBody net.sf.json.JSONObject param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-top15Info::" + tokenInfo.getSid() + ":::"; + log.info(LOG_PREFIX + "Request::" + param.toString()); + String siteId = tokenInfo.getSid(); + String orderType = param.getString("orderType"); + if (orderType == null || "".equals(orderType)) { + orderType = "cashIN"; + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + + HashMap paramMap = new HashMap<>(); + paramMap.put("siteId", siteId); + paramMap.put("orderType", orderType); + paramMap.put("blankSpinSetType", siteOption.getBlankSpinSetType()); + + List topList = userService.getTop15Info(paramMap); // Use blankSpinSetType + apiResponse.put("topList", topList); + + apiResponse.success(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-top15Info::" + tokenInfo.getSid() + ":::"; + log.error(LOG_PREFIX + "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/month10Info") + public ApiResponse month10Info(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-month10Info::" + tokenInfo.getSid() + ":::"; + String siteId = tokenInfo.getSid(); + + Month10Info month10Info = userService.getMonth10Info(siteId); + log.info(LOG_PREFIX + "Top10Info::" + month10Info.toString()); + apiResponse.put("month10Info", month10Info); + + apiResponse.success(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-month10Info::" + tokenInfo.getSid() + ":::"; + log.error(LOG_PREFIX + "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/getToken") + public ApiResponse getToken(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo old_tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::getToken::" + old_tokenInfo.getSid() + "::" + old_tokenInfo.getMid() + + "::"; + + AdminTokenInfo tokenParam = new AdminTokenInfo(); + tokenParam.setSiteId(old_tokenInfo.getSid()); + tokenParam.setAdminId(old_tokenInfo.getMid()); + tokenParam.setToken(token); + Integer result = userService.getCheckAdminToken(tokenParam); + log.info(LOG_PREFIX + "getCheckAdminToken::Result::" + result); + if (result == null || result == 0) { + // 로그인 로그 , + try { + Map logParam = new HashMap(); + logParam.put("siteId", old_tokenInfo.getSid()); + logParam.put("memId", old_tokenInfo.getMid()); + logParam.put("logType", "TK999"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "만료토큰"); + logParam.put("logDesc", ""); + logParam.put("regId", old_tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", token); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + throw new ApiException("TK999", "duplicate_token_login_error"); + } + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + Date old_issuedAt = old_tokenInfo.getIssuedAt(); + String old_issuedAtStr = sdf.format(old_issuedAt); + Date old_expiration = old_tokenInfo.getExpire(); + String old_expirationStr = sdf.format(old_expiration); + + JwtClame jwtinfo = new JwtClame(); + jwtinfo.setSiteIdx(old_tokenInfo.getSidx()); + jwtinfo.setMemIdx(old_tokenInfo.getMidx()); + jwtinfo.setSiteId(old_tokenInfo.getSid()); + jwtinfo.setMemId(old_tokenInfo.getMid()); + jwtinfo.setType(old_tokenInfo.getType()); + jwtinfo.setPartnerLevel("COMP"); + log.info(LOG_PREFIX + "generateToken::old_token::" + token); + log.info(LOG_PREFIX + "generateToken::old_issuedAtStr::" + old_issuedAtStr); + log.info(LOG_PREFIX + "generateToken::old_expirationStr::" + old_expirationStr); + + // 토큰 재발급 + String newToken = jwtManager.generateToken(jwtinfo); + JwtManager.TokenInfo new_tokenInfo = jwtManager.getTokenInfo(newToken); + Date new_issuedAt = new_tokenInfo.getIssuedAt(); + String oldnew_issuedAtStr = sdf.format(new_issuedAt); + Date new_expiration = new_tokenInfo.getExpire(); + String new_expirationStr = sdf.format(new_expiration); + log.info(LOG_PREFIX + "generateToken::new_token::" + newToken); + log.info(LOG_PREFIX + "generateToken::new_issuedAtStr::" + new_issuedAt); + log.info(LOG_PREFIX + "generateToken::new_expirationStr::" + new_expiration); + apiResponse.put("token", newToken); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", new_tokenInfo.getSid()); + logParam.put("memId", new_tokenInfo.getMid()); + logParam.put("logType", "ADMINLOGINTOKEN"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "관리자토큰갱신"); + logParam.put("logDesc", ""); + logParam.put("regId", new_tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", newToken); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + apiResponse.success(); + + } catch (ApiException e) { + log.error("#-admin::getToken::" + "[TOKEN ApiException] : " + e.getMessage()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error("#-admin::getToken::" + "[TOKEN Exception] : " + e.getMessage()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/getMenuList") + public ApiResponse getMenuList(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + HashMap param = new HashMap<>(); + param.put("siteId", tokenInfo.getSid()); + param.put("isSuper", "N"); + List menuList = commonService.getMenuList(param); +// log.info("menuList: " + menuList); + apiResponse.put("menuList", menuList); + + apiResponse.success(); + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/getMenuBookmarkList") + public ApiResponse getMenuBookmarkList(@RequestHeader String token, HttpServletRequest request, + @RequestBody HashMap param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + param.put("siteId", tokenInfo.getSid()); + if (param.get("isBookmark") == null) { + param.put("isBookmark", "N"); + } + List menuBookmarkList = commonService.getMenuBookmarkList(param); + apiResponse.put("menuBookmarkList", menuBookmarkList); + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/updBookmark") + public ApiResponse updBookmark(@RequestHeader String token, HttpServletRequest request, @RequestBody MenuVO param) + throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + param.setSiteId(tokenInfo.getSid()); + if (param.getMenuCode() == null || param.getMenuCode().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + if (param.getBookmarkYn() == null || param.getBookmarkYn().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + HashMap searchParam = new HashMap<>(); + searchParam.put("siteId", tokenInfo.getSid()); + searchParam.put("isBookmark", "Y"); + List menuBookmarkList = commonService.getMenuBookmarkList(searchParam); + if (menuBookmarkList.size() < 5) { // 기존 등록된 북마크 메뉴 갯수가 5개 미만 시 + commonService.updateBookmarkMenu(param); + } else { // 기존 등록된 북마크 메뉴 갯수가 5개 이상 시 + boolean result = false; + for (MenuVO item : menuBookmarkList) { + if (item.getMenuCode().equals(param.getMenuCode())) { + commonService.updateBookmarkMenu(param); // 기존 5개중 북마크메뉴 수정 + result = true; + } + } + + if (!result && param.getBookmarkYn().equals("Y")) { // 기존 5개 외의 북마크 메뉴 추가 시 + MenuVO item = menuBookmarkList.get(0); + item.setSiteId(tokenInfo.getSid()); + item.setBookmarkYn("N"); + commonService.updateBookmarkMenu(item); // 기존 5개중 맨위 북마크 메뉴 하나 제거 + commonService.updateBookmarkMenu(param); // 새로운 북마크 메뉴 등록 + } + } + + menuBookmarkList = commonService.getMenuBookmarkList(searchParam); + apiResponse.put("menuBookmarkList", menuBookmarkList); + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/getSiteMemo") + public ApiResponse getSiteMemo(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + HashMap memoInfo = commonService.getSiteMemo(tokenInfo.getSid()); + apiResponse.put("memoInfo", memoInfo); + + apiResponse.success(); + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/updateSiteMemo") + public ApiResponse updateSiteMemo(@RequestHeader String token, HttpServletRequest request, + @RequestBody HashMap param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + param.put("siteId", tokenInfo.getSid()); + param.put("lastUpdAdmin", tokenInfo.getMid()); + if (param.get("siteMemo") == null) { + throw new ApiException("1000", "accessDinied"); + } + + commonService.updateSiteMemo(param); + + HashMap memoInfo = commonService.getSiteMemo(tokenInfo.getSid()); + apiResponse.put("memoInfo", memoInfo); + + apiResponse.success(); + + apiResponse.success(); + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/gameCodes") + public ApiResponse gameCodes(@RequestHeader String token, HttpServletRequest request, + @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + codesSearch.setSiteId(tokenInfo.getSid()); + List codeList = commonService.getGameCodes(codesSearch); + apiResponse.put("codes", codeList); + apiResponse.put("codesSearch", codesSearch); + + apiResponse.success(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/gameGroupCodes") + public ApiResponse gameGroupCodes(@RequestHeader String token, HttpServletRequest request, + @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + String siteId = tokenInfo.getSid(); + List codeList = commonService.getGameGroupCodes(siteId); + apiResponse.put("groupCodes", codeList); + + apiResponse.success(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/reportCateInfo") + public ApiResponse reportCateInfo(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + String siteId = tokenInfo.getSid(); + List> reportCateInfo = reportService.getReportCateInfo(siteId); + apiResponse.put("reportCateInfo", reportCateInfo); + + apiResponse.success(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/partnerLevels") + public ApiResponse partnerLevels(@RequestHeader String token, HttpServletRequest request, + @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + List levelList = userService.getPartnerLevels(codesSearch); + apiResponse.put("partnerLevels", levelList); + + apiResponse.success(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/partnerMemIds") + public ApiResponse partnerMemIds(@RequestHeader String token, HttpServletRequest request, + @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + Member searchMem = new Member(); + searchMem.setSiteId(tokenInfo.getSid()); + searchMem.setPartnerLevel(codesSearch.getCode()); + + List idList = userService.getPartnerMemIds(searchMem); + apiResponse.put("partnerMemIds", idList); + + apiResponse.success(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/partnerSearch") + public ApiResponse partnerSearch(@RequestHeader String token, HttpServletRequest request, + @RequestBody MemberSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + Member searchMem = new Member(); + searchMem.setSiteId(tokenInfo.getSid()); + searchMem.setMemId(search.getMemId()); + + HashMap partnerMemId = userService.getPartnerMemId(searchMem); + apiResponse.put("partnerMemId", partnerMemId); + + apiResponse.success(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/partnerRates" }) + public ApiResponse partnerRates(@RequestHeader String token, HttpServletRequest request, + @RequestBody MemberSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (search.getSiteId() == null || search.getSiteId().equals("")) { + search.setSiteId(tokenInfo.getSid()); + } + + List rateList = userService.getPartnerRateList(search); + apiResponse.put("partnerMemId", search.getMemId()); + apiResponse.put("rateMaxMinList", rateList); + + Member search2 = new Member(); + search2.setSiteId(tokenInfo.getSid()); + search2.setMemId(search.getMemId()); + List> rateInfo = rateService.getMemRollingInfo(search2); + apiResponse.put("rateInfo", rateInfo); + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/topRate" }) + public ApiResponse topRate(@RequestHeader String token, HttpServletRequest request, + @RequestBody MemberSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (search.getSiteId() == null || search.getSiteId().equals("")) { + search.setSiteId(tokenInfo.getSid()); + } + + List topRate = rateService.getTopRate(search); + apiResponse.put("topRate", topRate); + + apiResponse.success(); + + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/getVendorList") + public ApiResponse getVendorList(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + + List vendorList = commonService.getVendorList(); + log.info("vendorList: " + vendorList); + apiResponse.put("vendorList", vendorList); + + apiResponse.success(); + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiMemberController.java b/src/main/java/com/bb/admin/controller/AdminApiMemberController.java new file mode 100644 index 0000000..07fbf17 --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiMemberController.java @@ -0,0 +1,2854 @@ +package com.bb.admin.controller; + +import java.net.SocketTimeoutException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.BlankSpinRate; +import com.bb.model.Block; +import com.bb.model.CashSearch; +import com.bb.model.CashTranLogSrch; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.IdListSearch; +import com.bb.model.LoginUserVO; +import com.bb.model.MemListSearchVO; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberInsert; +import com.bb.model.MemberInsert2; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberRate; +import com.bb.model.MemberRateVo; +import com.bb.model.MemberSearch; +import com.bb.model.MemberStatus; +import com.bb.model.MemberUpdate; +import com.bb.model.Message; +import com.bb.model.MultipleRate; +import com.bb.model.MultipleRateInfo; +import com.bb.model.NewMemRateItem; +import com.bb.model.PageFormVO; +import com.bb.model.RateInfo; +import com.bb.model.RateVO; +import com.bb.model.RetailLockVO; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.TreeListSearch; +import com.bb.service.AsyncExcoinOtcService; +import com.bb.service.BoardService; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.RateService; +import com.bb.service.RetailService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.bb.util.StringUtils; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/admin/member") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiMemberController { + + private final UserService userService; + + private final RetailService retailService; + + private final CashService cashService; + + private final JwtManager jwtManager; + + private final CommonService commonService; + + private final PasswordEncoder passwordEncoder; + + private final TripleService tripleService; + + private final BoardService boardService; + + private final RateService rateService; + + private final AsyncExcoinOtcService asyncExcoinOtcService; + + + @ResponseBody + @PostMapping(value={"/memberList"}) + public ApiResponse memberList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::memberList::"+tokenInfo.getSid()+":::"; + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setPartnerType(""); + search.setSiteId(tokenInfo.getSid()); + + if(search.getUserType() == null) { + search.setUserType(""); // 전체 검색 + } + + HashMap totalInfo = userService.getMemberListCnt(search); + + int totalCount = Integer.parseInt(totalInfo.get("totalCnt").toString()); + if(totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List memList = userService.getMemberList(search); + apiResponse.put("list", memList); + apiResponse.put("totalInfo", totalInfo); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [전체회원 하이라키] API 기능 + */ + @ResponseBody + @PostMapping(value={"/hierarchy"}) + public ApiResponse treeHierarchy(@RequestHeader String token, HttpServletRequest request, @RequestBody MemListSearchVO search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + final String LOG_PREFIX = "#-admin::treeHierarchy::"+tokenInfo.getSid()+":::"; + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List hierarchy = userService.getUserTreeHierarchy(search); + apiResponse.put("hierarchy", hierarchy); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/memberTreeList"}) + public ApiResponse memberTreeList(@RequestHeader String token, HttpServletRequest request, @RequestBody MemListSearchVO search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::memberTreeList::"+tokenInfo.getSid()+":::"; + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + + if(search.getTreeOption() == null || !search.getTreeOption().equals("Y")) { + search.setTreeOption(""); // 하부전체 검색 + } + if(search.getUserType() == null || !search.getUserType().equals("N") || !search.getUserType().equals("P")) { + search.setUserType(""); // 전체 검색 + } + if(search.getTodayLoginYn() == null || !search.getTodayLoginYn().equals("Y")) { + search.setTodayLoginYn(""); // 전체 검색 + } + + int totalCount = userService.getMemberTreeListCnt(search); + if(totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + commonForm.setCount_per_list(100); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List memList = userService.getMemberTreeList(search); + apiResponse.put("list", memList); + apiResponse.put("search", search); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/join") + public ApiResponse join(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberInsert signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-admin::join::"; + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + signupMember.setSiteIdx(tokenInfo.getSidx()); + signupMember.setSiteId(tokenInfo.getSid()); + signupMember.setMemId(signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase()); + LOG_PREFIX = LOG_PREFIX + tokenInfo.getSid()+"::"+signupMember.getMemId()+"::::"; + + if(signupMember.getMemId().equals("")) { + throw new ApiException("U098", "아이디를 입력해주세요."); + } + + if(signupMember.getRecommenderId() == null || signupMember.getRecommenderId().equals("")) { + throw new ApiException("U097", "추천인 계정을 입력해주세요."); + } + + String refer = request.getHeader("Referer"); + String domain = "unknown"; + if(refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + domain = urls[2]; + log.info(LOG_PREFIX+"::domain::"+domain+"::recommandId::"+signupMember.getRecommenderId()); + } + signupMember.setJoinDomain(domain); + + signupMember.setRecommenderId(signupMember.getRecommenderId().replaceAll(" ", "").toLowerCase()); + + signupMember.setRegId(tokenInfo.getMid()); + signupMember.setPartnerType(""); + log.info(LOG_PREFIX+ tokenInfo.getSid()); + log.info(LOG_PREFIX+ signupMember.getMemId()); + signupMember.setMemStatus("1"); + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + + signupMember.setPartnerLevel("NORMAL"); + + signupMember.setRecommendYn("N"); + signupMember.setPointExchangeYn("Y"); + signupMember.setRollingYn("Y"); + signupMember.setCashSendYn("N"); + signupMember.setCashReceiveYn("N"); + + if(signupMember.getCashOutPass()==null || signupMember.getCashOutPass().equals("")) { + signupMember.setCashOutPass("0000"); + } + signupMember.setNationCode(""); + signupMember.setPartSendYn("N"); + signupMember.setMaxCredit(""); + signupMember.setCreditRate(""); + signupMember.setCreditStatus(""); + + Member recommendUser = new Member(); + recommendUser.setSiteId(tokenInfo.getSid()); + recommendUser.setMemId(signupMember.getRecommenderId()); + MemberDetail partner = userService.getMember(recommendUser); + + if(partner == null) { + throw new ApiException("U096", "존재하지 않는 추천인 계정입니다."); + } + + if(partner.getPartnerLevel().equals("COMP") || partner.getPartnerLevel().equals("AUTO")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(partner.getRecommendYn().equals("N")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(!partner.getMemStatus().equals("1")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + if(partner.getPartnerLevel().equals("NORMAL") && siteOption.getUserRecommenderChgYn().equals("N")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(partner.getPartnerLevel().equals("NORMAL") && siteOption.getUserRecommenderChgYn().equals("Y")) { + int cnt = userService.getNormalRetailCnt(recommendUser); + if(cnt == 10) { + // 일반회원 최대 추천인 가능 단계(10) 초과 + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + } + + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + checkMember.setMemId(signupMember.getMemId()); + checkMember.setRecommenderId(signupMember.getRecommenderId()); + checkMember.setMemName(signupMember.getMemName()); + checkMember.setMemNick(signupMember.getMemNick()); + + int idCheck =userService.idCheck(checkMember); + if(idCheck>0) { + throw new ApiException("U005", "idCheck"); + } + /* + int idCheckByAdmin =userService.idCheckByAdmin(checkMember); + if(idCheckByAdmin>0) { + throw new ApiException("U005", "idCheckByAdmin"); + } + */ + int nameCheck = userService.nameCheck(checkMember); + if(nameCheck>0) { + throw new ApiException("U006", "nameCheck"); + } + + if(signupMember.getSiteId().equals(signupMember.getRecommenderId())) { + throw new ApiException("U099", "recommenderIdCheck"); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String signupMemberJson = objectMapper.writeValueAsString(signupMember); + log.info(LOG_PREFIX+ "signupMemberJson::" + signupMemberJson); + + RateInfo rateInfo = signupMember.getRateInfo(); + if(rateInfo != null) { + rateInfo.setSiteId(signupMember.getSiteId()); + rateInfo.setMemId(signupMember.getMemId()); + + Member top = new Member(); + top.setSiteId(tokenInfo.getSid()); + top.setMemId(signupMember.getRecommenderId()); + List> topRateInfoList = rateService.getMemRollingInfo(top); + + for(RateVO mvo : rateInfo.getRateList()) { + mvo.setSiteId(rateInfo.getSiteId()); + mvo.setMemId(rateInfo.getMemId()); + String category = mvo.getCategory(); + String cateCode = mvo.getCateCode(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for(HashMap topRateInfo : topRateInfoList) { + String topCategory = topRateInfo.get("category").toString(); + String topCateCode = topRateInfo.get("cateCode").toString(); + Double maxPointRate = Double.valueOf(topRateInfo.get("pointRate").toString()); + Double maxLoseRate = Double.valueOf(topRateInfo.get("loseRate").toString()); + if(cateCode.equals(topCateCode)) { + if(maxPointRate < pointRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::pointRate::"+pointRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxPointRate::"+maxPointRate); + String resultMsg = "롤링:"+"cateCode::"+cateCode+ "::"+maxPointRate+" 보다 작은값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(maxLoseRate < loseRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::loseRate::"+loseRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxLoseRate::"+maxLoseRate); + String resultMsg = "루징:"+"cateCode::"+cateCode+ "::"+maxLoseRate+" 보다 작은값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + } + + userService.adminJoin(signupMember); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getMemId()+"::회원 계정 생성"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error(LOG_PREFIX+ "insertAdminlog::Exception::"+e.toString()); } + + try { + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(signupMember.getMemId()); + search.setPartnerLevel("NORMAL"); + + if(signupMember.getRateList() != null) { + MemberRate rateparam = new MemberRate(); + rateparam.setMemId(signupMember.getMemId()); + rateparam.setRateList(signupMember.getRateList()); + userService.getMemberbetYnUpdate(search, rateparam); + } + + if(rateInfo != null) { + rateService.rateInfoUpdate(rateInfo); + } + + } catch(Exception eee) { + log.error(LOG_PREFIX+ "Member_Rate_Setting::Exception::"+eee.toString()); + } + + apiResponse.success(); + } catch(ApiException e) { + log.error(LOG_PREFIX+ "ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/create") + public ApiResponse create(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberInsert2 signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-admin::user::create::"; + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + signupMember.setSiteIdx(tokenInfo.getSidx()); + signupMember.setSiteId(tokenInfo.getSid()); + + String refer = request.getHeader("Referer"); + String domain = "unknown"; + if(refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + domain = urls[2]; + log.info(LOG_PREFIX+"::domain::"+domain+"::recommandId::"+signupMember.getRecommenderId()); + } + signupMember.setJoinDomain(domain); + + if(signupMember.getMemIdList() == null || signupMember.getMemIdList().size() == 0) { + throw new ApiException("UC01", "아이디를 입력해주세요."); + } else { + for(String memId : signupMember.getMemIdList()) { + if(memId.equals("")) { + throw new ApiException("UC01", "아이디를 입력해주세요."); + } else { + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + memId = memId.replaceAll(" ", "").toLowerCase(); + checkMember.setMemId(memId); + int idCheck = userService.idCheck(checkMember); + if(idCheck > 0) { + throw new ApiException("UC02", "중복 아이디: "+memId); + } + } + } + } + + if(signupMember.getMemNickList() == null || signupMember.getMemNickList().size() == 0) { + throw new ApiException("UC03", "닉네임을 입력해주세요."); + } else { + for(String memNick : signupMember.getMemNickList()) { + if(memNick.equals("")) { + throw new ApiException("UC03", "닉네임을 입력해주세요."); + } else { + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + checkMember.setMemNick(memNick); + int nickCheck = userService.nameCheck(checkMember); + if(nickCheck > 0) { + throw new ApiException("UC04", "중복 닉네임: "+memNick); + } + } + } + } + + if(signupMember.getMemNameList() == null || signupMember.getMemNameList().size() == 0) { + throw new ApiException("UC05", "이름을 입력해주세요."); + } else { + for(String memName : signupMember.getMemNameList()) { + if(memName.equals("")) { + throw new ApiException("UC05", "이름을 입력해주세요."); + } + } + } + + if(signupMember.getMemIdList().size() != signupMember.getMemNickList().size() + || signupMember.getMemIdList().size() != signupMember.getMemNameList().size()) { + throw new ApiException("UC06", "아이디, 닉네임, 이름 갯수가 일치하지 않습니다."); + } + + if(signupMember.getMemIdList().size() > 30) { + throw new ApiException("UC07", "최대 30명까지 생성할 수 있습니다."); + } + + signupMember.setPartnerLevel("NORMAL"); + signupMember.setRecommenderId(signupMember.getRecommenderId().replaceAll(" ", "").toLowerCase()); + signupMember.setRecommendYn("N"); + + signupMember.setRegId(tokenInfo.getMid()); + signupMember.setMemStatus("1"); + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + signupMember.setCashSendYn("N"); + signupMember.setCashReceiveYn("N"); + + if(signupMember.getCashOutPass()==null || signupMember.getCashOutPass().equals("")) { + signupMember.setCashOutPass("0000"); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String signupMemberJson = objectMapper.writeValueAsString(signupMember); + log.info(LOG_PREFIX+ "signupMemberJson::" + signupMemberJson); + + if(signupMember.getRateList() != null) { + MemberSearch topUser = new MemberSearch(); + topUser.setSiteId(signupMember.getSiteId()); + topUser.setMemId(signupMember.getRecommenderId()); + List topRateList = rateService.getTopRate(topUser); + + for(RateVO topRate : topRateList) { + String topCtgr = topRate.getCategory(); + double topPR = Double.parseDouble(topRate.getPointRate()); + double topLR = Double.parseDouble(topRate.getLoseRate()); + for(RateVO botRate : signupMember.getRateList()) { + String botCtgr = botRate.getCategory(); + double botPR = Double.parseDouble(botRate.getPointRate()); + double botLR = Double.parseDouble(botRate.getLoseRate()); + + if(topCtgr.equals(botCtgr)) { + if(topPR < botPR) { + log.error(LOG_PREFIX+ "topCtgr::"+topCtgr+ "::topPR::"+topPR); + log.error(LOG_PREFIX+ "botCtgr::"+botCtgr+ "::botPR::"+botPR); + String resultMsg = "롤링:"+topCtgr+ "::"+topPR+" 보다 작은값을 입력하세요"; + log.error(LOG_PREFIX+ "resultMsg : " + resultMsg); + throw new ApiException("UC09", resultMsg); + } + if(topLR < botLR) { + log.error(LOG_PREFIX+ "topCtgr::"+topCtgr+ "::topLR::"+topLR); + log.error(LOG_PREFIX+ "botCtgr::"+botCtgr+ "::botLR::"+botLR); + String resultMsg = "루징:"+topCtgr+ "::"+topLR+" 보다 작은값을 입력하세요"; + log.error(LOG_PREFIX+ "resultMsg : " + resultMsg); + throw new ApiException("UC09", resultMsg); + } + } + } + } + } + + for(int i=0; i logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getMemId()+"::회원 계정 생성"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error(LOG_PREFIX2+ "insertAdminlog::Exception::"+e.toString()); } + + // TODO : List rateList 등록 처리 + if(signupMember.getRateList() != null) { + for(RateVO botRate : signupMember.getRateList()) { + botRate.setSiteId(siteId); + botRate.setMemId(memId); + int myUpdateResult = rateService.myRateInfoUpdate(botRate); + log.info(LOG_PREFIX2+ "::myUpdateResult::"+myUpdateResult); + int topMinUpdateResult = rateService.topMinRateInfoUpdate(botRate); + log.info(LOG_PREFIX2+ "::topMinUpdateResult::"+topMinUpdateResult); + } + } + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(LOG_PREFIX+ "ApiException::"+e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/modify") + public ApiResponse modify(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberUpdate signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-admin::member::modify::"+tokenInfo.getSid()+":::"; + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(signupMember); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + signupMember.setSiteId(tokenInfo.getSid()); + signupMember.setUpdId(tokenInfo.getMid()); + + if(signupMember.getMemPass() != null && !signupMember.getMemPass().equals("")) { + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + } + + Member search = new Member(); + search.setSiteId(signupMember.getSiteId()); + search.setMemId(signupMember.getMemId()); + MemberDetail memDetail = userService.getMember(search); + String bfMemLevel = memDetail.getMemLevel(); + String afMemLevel = signupMember.getMemLevel(); + + userService.updateMember(signupMember); + + log.info(LOG_PREFIX+ "회원레벨보너스 수정:: " + bfMemLevel + " => " + afMemLevel); + if(!bfMemLevel.equals(afMemLevel)) { + try { + ChargingPointSettingVO param = new ChargingPointSettingVO(); + param.setSiteIdx(tokenInfo.getSidx()); + param.setMemLevel(afMemLevel); + ChargingPointSettingVO settingVO = commonService.getChargingPointSetting(param); + settingVO.setMemIdx(memDetail.getMemIdx()); + log.info(LOG_PREFIX+ "회원레벨보너스 수정::settingVO:: " + settingVO); + int result = userService.bonusSettingSave(settingVO); + log.info(LOG_PREFIX+ "회원레벨보너스 수정::result:: " + result); + } catch(Exception e) { + log.info(LOG_PREFIX+ "회원레벨보너스 수정 실패 : " + e.getMessage()); + } + + } + + // TODO: Excoin API 호출 + HashMap exCoinInfo = commonService.getVassApiInfo(search); + if(exCoinInfo.get("vaccCode") != null) { + log.info(LOG_PREFIX+ "API_INFO::" + exCoinInfo.toString()); + String vaccCode = exCoinInfo.get("vaccCode").toString(); + if(vaccCode.equals("excoin")) { + exCoinInfo.put("userEmail", memDetail.getMemId()); + exCoinInfo.put("userMobile", memDetail.getMemPhone().replaceAll("-", "").trim()); + exCoinInfo.put("userNm", memDetail.getMemName()); + // 회원수정 + int resultCode = asyncExcoinOtcService.updateUser(LOG_PREFIX, exCoinInfo); + log.info(LOG_PREFIX+ "OTC API resultCode::" + resultCode); + } + } + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getMemId()+"::회원 계정 수정"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error(LOG_PREFIX+ "insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/checkId") + public ApiResponse checkId(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + Member checkMember = new Member(); + checkMember.setSiteId(tokenInfo.getSid()); + checkMember.setMemId(search.getMemId()); + + int idCheck =userService.idCheck(checkMember); + if(idCheck > 0) { + throw new ApiException("U005", "idCheck"); + } + /* + int idCheckByAdmin =userService.idCheckByAdmin(checkMember); + if(idCheckByAdmin > 0) { + throw new ApiException("U005", "idCheckByAdmin"); + } + */ + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/checkNickname") + public ApiResponse checkNickname(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + Member checkMember = new Member(); + checkMember.setSiteId(tokenInfo.getSid()); + checkMember.setMemId(search.getMemId()); + checkMember.setMemNick(search.getMemNick()); + + int nameCheck = userService.nameCheck(checkMember); + if(nameCheck > 0) { + throw new ApiException("U006", "nameCheck"); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/detail") + public ApiResponse detail(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberSearch memberSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Member search = new Member(); + search.setMemId(memberSearch.getMemId()); + search.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + HashMap memberDetail = userService.getMemberDetail_1(search); + int totalChangePointAmt = userService.getTotalChangePointAmt(search); + memberDetail.put("totalChangePointAmt", totalChangePointAmt); + memberDetail.put("memPass", ""); + memberDetail.put("memberCommissionRate", userService.getMemberRate(search)); + + List memberFlow = userService.getMemberFlowList(memberDetail); + List partnerFlow = userService.getPartnerFlowList(memberDetail); + List> memRollingInfo = rateService.getMemRollingInfo(search); + + HashMap param = new HashMap<>(); + long siteIdx = Long.parseLong(memberDetail.get("siteIdx").toString()); + long memIdx = Long.parseLong(memberDetail.get("memIdx").toString()); + param.put("siteIdx", siteIdx); + param.put("memIdx", memIdx); + HashMap bonusSettingInfo = userService.getBonusSettingInfo(param); + + apiResponse.put("member", memberDetail); + apiResponse.put("memberFlow", memberFlow); + apiResponse.put("partnerFlow", partnerFlow); + apiResponse.put("memRollingInfo", memRollingInfo); + apiResponse.put("bonusSettingInfo", bonusSettingInfo); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/userLockWithBottom") + public ApiResponse userLockWithBottom(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailLockVO search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + param.put("memId", search.getMemId()); + param.put("memLockYn", search.getMemLockYn()); + param.put("updId", tokenInfo.getMid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + param.toString()); + int updResult = retailService.userLockWithBottom(param); + log.info("[REQUEST: "+request.getRequestURI()+"] updResult: " + updResult); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", search.getMemId()+"::회원 계정 잠금"); + logParam.put("logDesc", search.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/bonusSetting") + public ApiResponse bonusSetting(HttpServletRequest request, @RequestHeader String token, @RequestBody ChargingPointSettingVO settingVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + settingVO.setSiteIdx(tokenInfo.getSidx()); + settingVO.setSiteId(tokenInfo.getSid()); + + if(settingVO.getMemId() == null || settingVO.getMemId().equals("")) { + throw new ApiException("F999", "Not found memId"); + } + + Member search = new Member(); + search.setSiteIdx(settingVO.getSiteIdx()); + search.setMemId(settingVO.getMemId()); + HashMap memberVo = userService.getMemberMap2(search); + int memIdx = (int) memberVo.get("memIdx"); + settingVO.setMemIdx(memIdx); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + settingVO); + int result = userService.bonusSettingSave(settingVO); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", settingVO.getMemId()+"::회원 보너스 세팅"); + logParam.put("logDesc", settingVO.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateBlankSpinRate") + public ApiResponse updateBlankSpinRate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody BlankSpinRate rate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + rate.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + rate); + if(rate.getBlankSpinCasinoRate() == null) { + rate.setBlankSpinCasinoRate(0); + } + + if(rate.getBlankSpinSlotRate() == null) { + rate.setBlankSpinSlotRate(0); + } + + userService.updateBlankSpinRate(rate); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", rate.getMemId()+"::회원 직하부 공회전율 변경"); + logParam.put("logDesc", rate.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateAllBlankSpinRate") + public ApiResponse updateAllBlankSpinRate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody BlankSpinRate rate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + rate.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + rate); + if(rate.getBlankSpinCasinoRate() == null) { + rate.setBlankSpinCasinoRate(0); + } + + if(rate.getBlankSpinSlotRate() == null) { + rate.setBlankSpinSlotRate(0); + } + + userService.updateAllBlankSpinRate(rate); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", rate.getMemId()+"::회원 하부전체 공회전율 변경"); + logParam.put("logDesc", rate.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/abuseLockReset") + public ApiResponse abuseLockReset(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberSearch memberSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(memberSearch.getMemId() == null || memberSearch.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-abuseLockReset::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"+memberSearch.getMemId()+"::::"; + + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] " + memberSearch); + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tokenInfo.getSid()); + lockParam.put("memId", memberSearch.getMemId()); + lockParam.put("cntReset", "Y"); + int lockResult = userService.resetUserLock(lockParam); + log.error(LOG_PREFIX+ "resetUserLock::result::" + lockResult); + + if(lockResult > 0) { + apiResponse.success(); + } else { + apiResponse.fail(); + } + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/partnerLevelUp") + public ApiResponse partnerLevelUp(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberSearch memberSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + if(siteOption.getPartnerLevelChgYn().equals("N")) { + throw new ApiException("1000", "accessDinied"); + } + + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(memberSearch.getMemId()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + MemberDetail partner = userService.getMember(search); + if(partner == null) { + throw new ApiException("U003", "unknown user"); + } + + int upResult = userService.setUserPartnerLevelUp(partner); + if(upResult > 0) { + apiResponse.success(); + } else { + apiResponse.fail(); + } + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/changeMemCashFlag") + public ApiResponse changeMemCashFlag(HttpServletRequest request, @RequestHeader String token, @RequestBody MemberSearch search) { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(tokenInfo.getSid()); + if(search.getMemId()==null || search.getMemId().equals("")) { + throw new ApiException("F999", "Not found memId"); + } + + log.info("#-ADMIN::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"[REQUEST: "+request.getRequestURI()+"] " + search); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", search.getSiteId()); + flagParam.put("memId", search.getMemId()); + flagParam.put("changeFlag", "Y"); + int result = userService.userChangeFlag(flagParam); + log.info("#-ADMIN::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"userChangeFlag(Y) result="+result); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", search.getMemId()+"::회원 잔액 환전"); + logParam.put("logDesc", flagParam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", search.getSiteId()); + flagParam.put("memId", search.getMemId()); + flagParam.put("changeFlag", "Y"); + int result = userService.userChangeFlag(flagParam); + log.error("#-ADMIN::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"userChangeFlag(Y) result="+result); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", search.getSiteId()); + flagParam.put("memId", search.getMemId()); + flagParam.put("changeFlag", "Y"); + int result = userService.userChangeFlag(flagParam); + log.error("#-ADMIN::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"userChangeFlag(Y) result="+result); + + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/baseRecommenderId") + public ApiResponse getBaseRecommenderId(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Member search = new Member(); + search.setMemId(tokenInfo.getMid()); + search.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + String baseRecommenderId = userService.getBaseRecommenderId(search); + if(baseRecommenderId == null || "".equals(baseRecommenderId)) { + throw new ApiException("M1009", "최상위추천아이디 조회 중 오류발생. 관리자에게 문의하세요."); + } else { + apiResponse.put("recommenderId", baseRecommenderId); + } + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/idList"}) + public ApiResponse idList(@RequestHeader String token, HttpServletRequest request, @RequestBody IdListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setTokenSId(tokenInfo.getSid()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + int totalCount = userService.getIdListCnt(search); + + if(totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List idList = userService.getIdList(search); + apiResponse.put("list", idList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateStatus") + public ApiResponse updateStatus(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberStatus status) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + status.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + status); + userService.updateStatus(status); + + if(status.getMemStatus().equals("1")) { + Message joinMsg = boardService.getJoinMessage(tokenInfo.getSid()); + if(joinMsg != null) { + Message message = new Message(); + message.setSiteId(tokenInfo.getSid()); + message.setRegId(tokenInfo.getSid()); + message.setMsgType("msg"); + message.setRecieveId(status.getMemId()); + message.setMsgTitle(joinMsg.getMsgTitle()); + message.setMsgDesc(joinMsg.getMsgDesc()); + message.setHiddenYn("N"); + message.setTargetType("member"); + log.info("[REQUEST: "+request.getRequestURI()+"] " + message); + boardService.msgSend(message); + } + } + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", status.getMemId()+"::회원 상태 변경"); + logParam.put("logDesc", status.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateOutAmtYn") + public ApiResponse updateOutAmtYn(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberStatus status) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + status.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + status); + userService.updateOutAmtYn(status); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/rate") + public ApiResponse rate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberSearch memberSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(memberSearch.getMemId() == null || memberSearch.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(memberSearch.getMemId()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + memberSearch); + + List memRate= userService.getMemberRate(search); + apiResponse.put("rate", memRate); + + List> rateInfo = rateService.getMemRollingInfo(search); + apiResponse.put("rateInfo", rateInfo); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateRate") + public ApiResponse updateRate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberRate memberRate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + Member search = new Member(); + search.setMemId(memberRate.getMemId()); + search.setPartnerLevel("NORMAL"); + + if("super".equals(tokenInfo.getType())) { + search.setSiteId(memberRate.getSiteId()); + } else { + search.setSiteId(tokenInfo.getSid()); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + memberRate); + + NewMemRateItem rateItem = new NewMemRateItem(); + rateItem.setSiteId(tokenInfo.getSid()); + rateItem.setMemId(memberRate.getMemId()); + List myRateList = userService.getMemRateItemList(rateItem); + for(MemberRateVo mvo:memberRate.getRateList()) { + String vendorCode = mvo.getGameType(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for(NewMemRateItem myRateInfo : myRateList) { + String myCode = myRateInfo.getVendorCode(); + Double maxPointRate = myRateInfo.getMaxPointRate(); + Double minPointRate = myRateInfo.getMinPointRate(); + Double maxLoseRate = myRateInfo.getMaxLoseRate(); + Double minLoseRate = myRateInfo.getMinLoseRate(); + if(vendorCode.equals(myCode)) { + if(maxPointRate < pointRate || minPointRate > pointRate) { + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::pointRate::"+pointRate); + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::MaxPointRate::"+maxPointRate+"::MinPointRate::"+minPointRate); + String resultMsg = "롤링:"+"::vendorcode::"+myCode+ "::"+maxPointRate+", "+minPointRate+" 사이값을 입력하세요"; + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(maxLoseRate < loseRate || minLoseRate > loseRate) { + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::loseRate::"+loseRate); + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::MaxLoseRate::"+maxLoseRate+"::MinLoseRate::"+minLoseRate); + String resultMsg = "루징:"+"::vendorcode::"+myCode+ "::"+maxLoseRate+", "+minLoseRate+" 사이값을 입력하세요"; + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + + userService.getMemberRateUpdate(search, memberRate); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", memberRate.getMemId()+"::상세페이지 요율 변경"); + logParam.put("logDesc", memberRate.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/newUpdateRate") + public ApiResponse newUpdateRate(HttpServletRequest request, @RequestHeader String token, @RequestBody RateInfo rateInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-admin::newUpdateRate::"; + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(rateInfo.getSiteId() == null || rateInfo.getSiteId().equals("")) { + throw new ApiException("MR01", "Not null siteId"); + } + if(rateInfo.getMemId() == null || rateInfo.getMemId().equals("")) { + throw new ApiException("MR01", "Not null memId"); + } + + Member search = new Member(); + search.setSiteId(rateInfo.getSiteId()); + search.setMemId(rateInfo.getMemId()); + LOG_PREFIX = LOG_PREFIX+rateInfo.getSiteId()+"::"+rateInfo.getMemId()+"::::"; + log.info(LOG_PREFIX+ "RateInfo::"+rateInfo); + + List> myRollingInfoList = rateService.getMemRollingInfo(search); + for(RateVO mvo : rateInfo.getRateList()) { + mvo.setSiteId(rateInfo.getSiteId()); + mvo.setMemId(rateInfo.getMemId()); + String category = mvo.getCategory(); + String cateCode = mvo.getCateCode(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for(HashMap myRollingInfo : myRollingInfoList) { + String myCategory = myRollingInfo.get("category").toString(); + String myCateCode = myRollingInfo.get("cateCode").toString(); + Double maxPointRate = Double.valueOf(myRollingInfo.get("maxPointRate").toString()); + Double minPointRate = Double.valueOf(myRollingInfo.get("minPointRate").toString()); + Double maxLoseRate = Double.valueOf(myRollingInfo.get("maxLoseRate").toString()); + Double minLoseRate = Double.valueOf(myRollingInfo.get("minLoseRate").toString()); + if(cateCode.equals(myCateCode)) { + if(maxPointRate < pointRate || minPointRate > pointRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::pointRate::"+pointRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxPointRate::"+maxPointRate+"::MinPointRate::"+minPointRate); + String resultMsg = "롤링:"+"cateCode::"+cateCode+ "::"+maxPointRate+", "+minPointRate+" 사이값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(maxLoseRate < loseRate || minLoseRate > loseRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::loseRate::"+loseRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxLoseRate::"+maxLoseRate+"::MinLoseRate::"+minLoseRate); + String resultMsg = "루징:"+"cateCode::"+cateCode+ "::"+maxLoseRate+", "+minLoseRate+" 사이값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(10.0 < pointRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::pointRate::"+pointRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxPointRate::"+10.0); + String resultMsg = "롤링요율은 최대 10% 까지만 허용됩니다."; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(50.0 < loseRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::loseRate::"+loseRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxLoseRate::"+50.0); + String resultMsg = "루징요율은 최대 50% 까지만 허용됩니다."; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + + rateService.rateInfoUpdate(rateInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", rateInfo.getMemId()+"::요율 변경"); + logParam.put("logDesc", rateInfo.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(LOG_PREFIX+ "ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/multipleRateInfo") + public ApiResponse multipleRateInfo(@RequestHeader String token, HttpServletRequest request, @RequestBody MultipleRateInfo param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + param.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + param); + + List multipleRateList = userService.getMultipleRateList(param); + param.setRateList(multipleRateList); + + apiResponse.put("multipleRateInfo", param); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateMultipleRate") + public ApiResponse updateMultipleRate(@RequestHeader String token, HttpServletRequest request, @RequestBody MultipleRateInfo param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + param.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + param); + + List afterRateList = param.getRateList(); + List beforeRateList = userService.getMultipleRateList(param); + + for(MultipleRate afterRate : afterRateList) { + for(MultipleRate beforeRate : beforeRateList) { + if(afterRate.getRateType().equals(beforeRate.getRateType())) { + if(beforeRate.getMaxPointRate() < afterRate.getPointRate() || beforeRate.getMinPointRate() > afterRate.getPointRate()) { + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::pointRate::"+afterRate.getPointRate()); + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::MaxPointRate::"+beforeRate.getMaxPointRate()+"::MinPointRate::"+beforeRate.getMinPointRate()); + String resultMsg = "["+afterRate.getRateType()+"] 롤링:"+beforeRate.getMaxPointRate()+", "+beforeRate.getMinPointRate()+" 사이값을 입력하세요"; + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::resultMsg : " + resultMsg); + throw new ApiException("U032", resultMsg); + } + + if(beforeRate.getMaxLoseRate() < afterRate.getLoseRate() || beforeRate.getMinLoseRate() > afterRate.getLoseRate()) { + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::loseRate::"+afterRate.getLoseRate()); + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::MaxLoseRate::"+beforeRate.getMaxLoseRate()+"::MinLoseRate::"+beforeRate.getMinLoseRate()); + String resultMsg = "["+afterRate.getRateType()+"] 루징:"+beforeRate.getMaxPointRate()+", "+beforeRate.getMinPointRate()+" 사이값을 입력하세요"; + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::resultMsg : " + resultMsg); + throw new ApiException("U032", resultMsg); + } + } + } + } + + userService.updateMultipleRate(param); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", param.getMemId()+"::회원 Multiple 요율 변경"); + logParam.put("logDesc", param.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateMemListIcon") + public ApiResponse updateMemListIcon(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberUpdate memberVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + memberVO.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + memberVO); + userService.updateMemListIcon(memberVO); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", memberVO.getMemId()+"::회원 리스트 변경"); + logParam.put("logDesc", memberVO.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/deniedLoginIp") + public ApiResponse deniedLoginIp(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberListSearch memberVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + memberVO.setSiteId(tokenInfo.getSid()); + + if(memberVO.getMemId() == null || memberVO.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(memberVO.getIp() == null || memberVO.getIp().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + memberVO); + Block block = new Block(); + block.setSiteId(tokenInfo.getSid()); + block.setBlockType("IP"); + block.setBlockTarget(memberVO.getIp()); + block.setBlockTerm(0); + block.setRegId(tokenInfo.getMid()); + commonService.blockSave(block); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", memberVO.getMemId()+"::"+memberVO.getIp()+"::회원 로그인IP 차단"); + logParam.put("logDesc", block.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/settingCashInOut"}) + public ApiResponse settingCashInOut(@RequestHeader String token, HttpServletRequest request, @RequestBody HashMap param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + if(param == null || param.get("memId") == null || param.get("memId").toString().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + if(param == null || param.get("setType") == null || param.get("setType").toString().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + if(param == null || param.get("setYn") == null || param.get("setYn").toString().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + param.put("siteId", tokenInfo.getSid()); + // param.get("setType") : SEND(지급설정), RECEIVE(회수설정) + // param.get("setYn") : Y(설정), N(해제) + log.info("[REQUEST: "+request.getRequestURI()+"] " + param.toString()); + + int result = userService.settingCashInOut(param); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/rollingList"}) + public ApiResponse rollingList(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setPartnerType(""); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = userService.getMemRollingListCnt(search); + if(totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List memList = userService.getMemRollingList(search); + apiResponse.put("list", memList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/statusList"}) + public ApiResponse statusList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0) search.setPage(1); + search.setPartnerType(""); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = userService.getMemStatusListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List memList = userService.getMemStatusList(search); + apiResponse.put("list", memList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/logList"}) + public ApiResponse logList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setPartnerType(""); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = userService.getMemLogListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List memList = userService.getMemLogList(search); + apiResponse.put("list", memList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/memLogout") + public ApiResponse memLogout(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", search.getMemId()+"::회원 강제 로그아웃"); + logParam.put("logDesc", ""); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId",search.getMemId()); + logParam.put("logType", "FORCELOGOUT"); + logParam.put("logoutYn", "N"); + logParam.put("logName", "강제로그아웃"); + logParam.put("logDesc", ""); + logParam.put("regId", tokenInfo.getSid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertlog(logParam); + + logParam.put("actionType", 0); + commonService.updateAcctionLog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/loginList"}) + public ApiResponse loginList(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setPartnerType(""); + search.setSiteId(tokenInfo.getSid()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr); + } + + /* + int totalCount = userService.getMemLoginListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + */ + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List memList = userService.getMemLoginList(search); + apiResponse.put("list", memList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/ipList"}) + public ApiResponse ipList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + if(search.getOrderStr() == null || search.getOrderStr().equals("")) { + search.setOrderStr("CNT_DESC"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setPartnerType(""); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = userService.getIpListCnt(search); + if(totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List memList = userService.getIpList(search); + apiResponse.put("list", memList); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/ipDetailList"}) + public ApiResponse ipDetailList(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getIp() == null || search.getIp().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List memList = userService.getIpDetailList(search); + apiResponse.put("list", memList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/treeList"} ) + public ApiResponse treeList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody TreeListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + if("".equals(search.getTargetId()) || search.getTargetId() == null) { + search.setTargetId(tokenInfo.getSid()); + + } + search.setSearchType("member"); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List treeList = userService.getMemTreeList(search); + apiResponse.put("list", treeList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/cashTransLog"}) + public ApiResponse cashTransLog(@RequestHeader String token, HttpServletRequest request, @RequestBody CashTranLogSrch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + String startDateStr = search.getStartDate(); + log.info("[REQUEST: "+request.getRequestURI()+"] BF::startDateStr:" + startDateStr); + if(startDateStr!=null && !"".equals(startDateStr)) { + startDateStr = startDateStr.substring(0, 10); + search.setStartDate(startDateStr); + log.info("[REQUEST: "+request.getRequestURI()+"] AF::startDateStr:" + startDateStr); + } + + String endDateStr = search.getEndDate(); + log.info("[REQUEST: "+request.getRequestURI()+"] BF::endDateStr:" + endDateStr); + if(endDateStr!=null && !"".equals(endDateStr)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date endDate = sdf.parse(endDateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(endDate); + calendar.add(Calendar.DAY_OF_MONTH, 1); + endDate = calendar.getTime(); + endDateStr = sdf.format(endDate); + log.info("[REQUEST: "+request.getRequestURI()+"] MF::endDateStr:" + endDateStr); + endDateStr = endDateStr.substring(0, 10); + search.setEndDate(endDateStr); + log.info("[REQUEST: "+request.getRequestURI()+"] AF::endDateStr:" + endDateStr); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + int totalCount = cashService.cashTransLogCnt(search); + + if(totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(10); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(20); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List cashTransLogs = cashService.cashTransLogList(search); + apiResponse.put("cashTransLogs", cashTransLogs); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/cashSendlist") + public ApiResponse cashSendlist(@RequestHeader String token, HttpServletRequest request, @RequestBody CashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + if("in".equals(search.getCashType()) || "-3".equals(search.getCashType())) { + search.setCashType("IN_CASH"); + } + + if("out".equals(search.getCashType()) || "3".equals(search.getCashType())) { + search.setCashType("OUT_CASH"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + int totalCount = cashService.getCashSendListCnt(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> cashList = cashService.getCashSendList(search); + apiResponse.put("list", cashList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/resetPassword") + public ApiResponse resetPassword(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberUpdate memberVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + Member param = new Member(); + param.setSiteId(tokenInfo.getSid()); + param.setMemId(memberVO.getMemId()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + memberVO); + + int result = userService.resetPassword(param, passwordEncoder); + if(result > 0) { + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", memberVO.getMemId()+"::resetPassword"); + logParam.put("logDesc", ""); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + } else { + throw new ApiException("R999", "Reset password fail"); + } + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/recUpdate") + public ApiResponse recUpdate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberListSearch signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + signupMember.setSiteId(tokenInfo.getSid()); + + Map param = new HashMap(); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + signupMember); + +// userService.recUpdate(signupMember); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/cashAmt") + public ApiResponse getUserCashAmt(HttpServletRequest request, @RequestHeader String token, @RequestBody MemberSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + MemberSearch param = new MemberSearch(); + param.setSiteId(tokenInfo.getSid()); + param.setMemId(search.getMemId()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + param); + + HashMap userCashAmt = userService.getUserCashAmt(param); + apiResponse.put("userCashAmt", userCashAmt); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + /** + * 회원 전체 패스워드 초기화(아이디로) + * @param request + * @param token + * @return + * @throws Exception + */ + @ResponseBody + @PostMapping(value="/passAllReset") + public ApiResponse passAllReset(HttpServletRequest request, @RequestHeader String token) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-admin::passAllReset::"+tokenInfo.getMid()+":::"; + List> userList = userService.getPassAllResetList(tokenInfo.getSid()); + log.info(LOG_PREFIX+ "userList size : " + userList.size()); + for(HashMap user : userList) { + String memId = user.get("memId").toString(); + String newPass = passwordEncoder.encode(memId); + Member memberVO = new Member(); + memberVO.setSiteId(user.get("siteId").toString()); + memberVO.setMemId(memId); + memberVO.setMemPass(newPass); + int updResult = userService.resetPassword2(memberVO); + log.info(LOG_PREFIX+ "ID:"+memId+" - updResult : " + updResult); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiMiniGameController.java b/src/main/java/com/bb/admin/controller/AdminApiMiniGameController.java new file mode 100644 index 0000000..b1805a3 --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiMiniGameController.java @@ -0,0 +1,232 @@ +package com.bb.admin.controller; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.HashMap; +import java.util.List; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.BetSearch; +import com.bb.model.MiniGameSearch; +import com.bb.model.MinigameBetRate; +import com.bb.model.MinigameSet; +import com.bb.model.PageFormVO; +import com.bb.model.Site; +import com.bb.service.BetService; +import com.bb.service.MinigameService; +import com.bb.service.UserService; +import com.bb.util.PagingUtil; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + + +@RestController +@Slf4j +@RequestMapping("/api/admin/minigame") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiMiniGameController { + + private final UserService userService; + + private final MinigameService minigameService; + + private final BetService betService; + + private final JwtManager jwtManager; + + private static final long serialVersionUID = 1L; + private static NumberFormat formatter = new DecimalFormat("#0.00"); + + + @ResponseBody + @PostMapping(value={"/setSave"}) + public ApiResponse setSave(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MinigameSet mgs) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + mgs.setSiteId(tokenInfo.getSid()); + minigameService.setSave(mgs); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value={"/betRateSave"}) + public ApiResponse betRateSave(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MinigameBetRate mbr) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + mbr.setSiteId(tokenInfo.getSid()); + mbr.setUpdId(tokenInfo.getMid()); + minigameService.betRateSave(mbr); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/setList") + public ApiResponse setList( @RequestHeader String token, HttpServletRequest request, @RequestBody MiniGameSearch search ) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + List setList = minigameService.getSetList(search); + + apiResponse.put("list", setList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/betRateList") + public ApiResponse betRateList( @RequestHeader String token, HttpServletRequest request, @RequestBody MiniGameSearch search ) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + List betRateList = minigameService.getBetRateList(search); + apiResponse.put("list", betRateList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/powerballResult"}) + public ApiResponse minigameResult(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody BetSearch search ) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + int totalCount = betService.getPowerballResultListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + System.out.println(search.getLimit()); + System.out.println(search.getOffset()); + + List list = betService.getPowerballResultList(search); + apiResponse.put("list", list); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiPartnerController.java b/src/main/java/com/bb/admin/controller/AdminApiPartnerController.java new file mode 100644 index 0000000..9f11c31 --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiPartnerController.java @@ -0,0 +1,855 @@ +package com.bb.admin.controller; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.CompDetail; +import com.bb.model.CompSearch; +import com.bb.model.Member; +import com.bb.model.MemberInsert; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberRate; +import com.bb.model.MemberSearch; +import com.bb.model.MemberStatus; +import com.bb.model.PageFormVO; +import com.bb.model.PartnerCompInfo; +import com.bb.model.Site; +import com.bb.model.SiteSearch; +import com.bb.model.TreeListSearch; +import com.bb.service.CommonService; +import com.bb.service.CompService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/admin/partner") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiPartnerController { + + private final UserService userService; + + private final CompService compService; + + private final CommonService commonService; + + private final PasswordEncoder passwordEncoder; + + private final JwtManager jwtManager; + + @ResponseBody + @PostMapping(value="/signup") + public ApiResponse signup(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberInsert signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + String createSiteId = signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase(); + final String LOG_PREFIX = "#-admin::addCompany::"+createSiteId+"::::"; + + if(createSiteId.equals("")) { + throw new ApiException("U005", "idCheckByAdmin"); + } + + String myType = tokenInfo.getType(); + String targetType = signupMember.getPartnerType(); + + if(myType.equals("agency")) { + throw new ApiException("1000", "accessDinied"); + } + + if(myType.equals(targetType)) { + throw new ApiException("1000", "accessDinied"); + } + + if(myType.equals("master") && targetType.equals("senior")) { + throw new ApiException("1000", "accessDinied"); + } + + signupMember.setMemId(createSiteId); + signupMember.setSiteId(createSiteId); + signupMember.setAdminId(createSiteId); + signupMember.setRegId(tokenInfo.getMid()); +// System.out.print(tokenInfo.getSid()); +// System.out.print(signupMember.getMemId()); + signupMember.setMemLevel("99"); + signupMember.setPartnerLevel("COMP"); + signupMember.setMemStatus("1"); + signupMember.setRecommenderId(tokenInfo.getSid()); + + Member checkMember = new Member(); + checkMember.setSiteId(createSiteId); + checkMember.setMemId(createSiteId); + checkMember.setRecommenderId(signupMember.getRecommenderId()); + /* + int idCheck =userService.idCheck(checkMember); + if(idCheck>0) { + throw new ApiException("U005", "idCheck"); + } + */ + int idCheckByAdmin =userService.idCheckByAdmin(checkMember); + if(idCheckByAdmin>0) { + throw new ApiException("U005", "idCheckByAdmin"); + } + + int nameCheck =userService.nameCheck(checkMember); + if(nameCheck>0) { + throw new ApiException("U006", "nameCheck"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + signupMember); + + int result = userService.adminSignUp(LOG_PREFIX, signupMember, passwordEncoder); + if(result == 0) { + throw new ApiException("SP99", "site prefix check"); + } + + Member search = new Member(); + search.setMemId(signupMember.getMemId()); + search.setSiteId(tokenInfo.getSid()); + search.setPartnerLevel("COMP"); + + if(signupMember.getRateList() != null) { + MemberRate rateparam = new MemberRate(); + rateparam.setMemId(signupMember.getMemId()); + rateparam.setRateList(signupMember.getRateList()); + userService.getMemberRateUpdate(search, rateparam); + userService.getMemberbetYnUpdate(search, rateparam); + } + + apiResponse.success(); + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/modify/compInfo") + public ApiResponse modifyCompInfo(@RequestHeader String token, HttpServletRequest request, @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(compInfo.getSiteDomain() == null) { + compInfo.setSiteDomain(""); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + compInfo.setTopCompId(tokenInfo.getSid()); + int chkTopComp = compService.getCheckTopComp(compInfo); + if(chkTopComp == 1) { + if(compInfo.getUserCountLimit() == null || compInfo.getUserCountLimit().equals("")) { compInfo.setUserCountLimit("1000"); } + if(compInfo.getCompCountLimit() == null || compInfo.getCompCountLimit().equals("")) { compInfo.setCompCountLimit("10"); } + + if(compInfo.getPassword() != null && !compInfo.getPassword().equals("")) { + String password = passwordEncoder.encode(compInfo.getPassword()); + log.info("[ADMIN PWD:" + password + "]"); + compInfo.setPassword(password); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + compInfo); + + int result = compService.modifyCompInfo(compInfo); + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", compInfo.getSiteId()+"::업체 수정"); + logParam.put("logDesc", compInfo.toString()); + logParam.put("regId", tokenInfo.getSid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + if(result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "회사정보 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + } else { + throw new ApiException("COMP099", "권한이 없는 사용자 입니다."); + } + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/modify/siteSettings") + public ApiResponse modifySiteSettings(@RequestHeader String token, HttpServletRequest request, @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + compInfo.setTopCompId(tokenInfo.getSid()); + int chkTopComp = compService.getCheckTopComp(compInfo); + if(chkTopComp == 1) { + + log.info("[REQUEST: "+request.getRequestURI()+"] " + compInfo); + int result = compService.modifySiteSettings(compInfo); + + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", compInfo.getSiteId()+"::업체 세팅 수정"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + if(result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "사이트 기능 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + } else { + throw new ApiException("COMP099", "권한이 없는 사용자 입니다."); + } + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/modify/creditSettings") + public ApiResponse modifyCreditSettings(@RequestHeader String token, HttpServletRequest request, @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + compInfo.setTopCompId(tokenInfo.getSid()); + int chkTopComp = compService.getCheckTopComp(compInfo); + if(chkTopComp == 1) { + + log.info("[REQUEST: "+request.getRequestURI()+"] " + compInfo); + + // TODO: 기본수수료율 변경 전 해당 사이트 크레딧(알) 잔액이 0인지 체크. 0이아니면 변경 불가능 + Site search = new Site(); + search.setSiteId(compInfo.getSiteId()); + CompDetail comp = compService.getPartnerComp(search); + int creditAmt = Integer.parseInt(comp.getCreditAmt()); + if(creditAmt > 0) { + throw new ApiException("COMP010", "보유알이 0일때만 기본수수료율 변경이 가능합니다."); + } + + int result = compService.modifyCreditSettings(compInfo); + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", compInfo.getSiteId()+"::업체 크레딧 세팅 수정"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + if(result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "PT 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + } else { + throw new ApiException("COMP099", "권한이 없는 사용자 입니다."); + } + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/modify/creditRates") + public ApiResponse modifyCreditRates(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberRate memberRate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + PartnerCompInfo compInfo = new PartnerCompInfo(); + compInfo.setSiteId(memberRate.getSiteId()); + compInfo.setTopCompId(tokenInfo.getSid()); + int chkTopComp = compService.getCheckTopComp(compInfo); + if(chkTopComp == 1) { + Member search = new Member(); + search.setSiteId(memberRate.getSiteId()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + memberRate); + int result = compService.modifyCreditRates(search, memberRate); + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", compInfo.getSiteId()+"::업체 크레딧 요율 수정"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + if(result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "게임별 PT수수료율 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + } else { + throw new ApiException("COMP099", "권한이 없는 사용자 입니다."); + } + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/modify/biSubPointRates") + public ApiResponse modifyBiSubPointRates(@RequestHeader String token, HttpServletRequest request, @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + compInfo.setTopCompId(tokenInfo.getSid()); + int chkTopComp = compService.getCheckTopComp(compInfo); + if(chkTopComp == 1) { + + log.info("[REQUEST: "+request.getRequestURI()+"] " + compInfo); + int result = compService.modifySiteGameSetting(compInfo); + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", compInfo.getSiteId()+"::업체 보험포인트 요율 수정"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + if(result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "서브포인트요율 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + } else { + throw new ApiException("COMP099", "권한이 없는 사용자 입니다."); + } + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/modify/betSettings") + public ApiResponse modifyBetSettings(@RequestHeader String token, HttpServletRequest request, @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + compInfo.setTopCompId(tokenInfo.getSid()); + int chkTopComp = compService.getCheckTopComp(compInfo); + if(chkTopComp == 1) { + + log.info("[REQUEST: "+request.getRequestURI()+"] " + compInfo); + int result = compService.modifySiteGameSetting(compInfo); + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", compInfo.getSiteId()+"::업체 게임세팅 수정"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + if(result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "배팅 가능유/무 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + } else { + throw new ApiException("COMP099", "권한이 없는 사용자 입니다."); + } + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/detail") + public ApiResponse detail(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberSearch memberSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + Member search2 = new Member(); + search2.setMemId(memberSearch.getMemId()); + search2.setSiteId(memberSearch.getSiteId()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + memberSearch); + HashMap memberDetail = compService.getPartnerCompDetail(search2); + memberDetail.put("memPass", ""); + + memberDetail.put("memberCommissionRate", compService.getCompanyRate(search2)); + memberDetail.put("BI_SubPointRate", userService.getBISubPointRate(search2)); + + List memberFlow = userService.getMemberFlowList(memberDetail); + List partnerFlow = userService.getPartnerFlowList(memberDetail); + + apiResponse.put("memberDetail", memberDetail); + apiResponse.put("memberFlow", memberFlow); + apiResponse.put("partnerFlow", partnerFlow); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/getTripleGameRate") + public ApiResponse getTripleGameRate(@RequestHeader String token, HttpServletRequest request, @RequestBody CompSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List> rateList = compService.getOmsRateListByTripleGame(search); + apiResponse.put("list", rateList); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/setTripleGameRate") + public ApiResponse setTripleGameRate(@RequestHeader String token, HttpServletRequest request, @RequestBody CompSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + HashMap tripleParam = compService.getTripleParam(search); + log.info("[REQUEST: "+request.getRequestURI()+"] " + tripleParam); + if(tokenInfo.getSid().equals(tripleParam.get("topCompId").toString()) || tokenInfo.getType().equals("super")) { + List> tripleRateList = compService.getTripleGameRate(tripleParam); + + compService.insertTripleRateList(search, tripleRateList); + + compService.updateOmsRateList(search); + + List> rateList = compService.getOmsRateListByTripleGame(search); + apiResponse.put("list", rateList); + } else { + throw new ApiException("COMP099", "권한이 없는 사용자 입니다."); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/passChg") + public ApiResponse passwsChg(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody Site site) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + log.info("[REQUEST: "+request.getRequestURI()+"] " + site); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + site.setSiteId(tokenInfo.getSid()); + + if(site.getSitePass() == null || site.getSitePass().equals("")) { + throw new ApiException("S999", "현재 비밀번호를 입력하세요."); + } + + if(site.getNewSitePass() != null && !site.getNewSitePass().equals("")) { + String password = passwordEncoder.encode(site.getNewSitePass()); + log.info("[ADMIN NEW PWD:" + password + "]"); + site.setNewSitePass(password); + } + + SiteSearch search = new SiteSearch(); + search.setSiteId(site.getSiteId()); + HashMap siteinfo= userService.adminLogin(search); + + boolean chkPassword = passwordEncoder.matches(site.getSitePass(), siteinfo.get("sitePass").toString()); + log.info("[ADMIN chkPassword:" + chkPassword + "]"); + + if(!chkPassword) { + throw new ApiException("S999", "현재 비밀번호가 다릅니다."); + } + + if(!tokenInfo.getSid().equals(tokenInfo.getMid())) { + site.setAdminId(tokenInfo.getMid()); + userService.updateAdminPwd(site); + } + + userService.updatePwd(site); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateStatus") + public ApiResponse updateStatus(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberStatus status) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + status.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + status); + userService.updateStatus(status); + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", status.getMemId()+"::업체 세팅 수정"); + logParam.put("logDesc", status.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/list"} ) + public ApiResponse list(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + PageFormVO pageVo= new PageFormVO(); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = compService.getPartnerCompListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List compList = compService.getPartnerCompList(search); + apiResponse.put("list", compList); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/treeList"} ) + public ApiResponse treeList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody TreeListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + if("".equals(search.getTargetId()) || search.getTargetId() == null) { + search.setTargetId(tokenInfo.getSid()); + } + search.setSearchType("partner"); // 여기서 "partner"는 컴퍼니를 지칭함. 파트너유저가 아님. + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List treeList = userService.getMemTreeList(search); + apiResponse.put("list", treeList); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + + } +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiPointController.java b/src/main/java/com/bb/admin/controller/AdminApiPointController.java new file mode 100644 index 0000000..21abe97 --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiPointController.java @@ -0,0 +1,496 @@ +package com.bb.admin.controller; + +import java.net.SocketTimeoutException; +import java.util.HashMap; +import java.util.List; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.CashDetail; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.PageFormVO; +import com.bb.model.Point; +import com.bb.model.PointInOut; +import com.bb.model.PointSearchAdm; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.PointService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/admin/point") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiPointController { + + private final UserService userService; + + private final PointService pointService; + + private final CashService cashService; + + private final CommonService commonService; + + private final TripleService tripleService; + + private final JwtManager jwtManager; + + + @ResponseBody + @PostMapping(value="/pointList") + public ApiResponse pointList(@RequestHeader String token, HttpServletRequest request, @RequestBody PointSearchAdm search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + search.setSiteId(tokenInfo.getSid()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = pointService.getAdminPointListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List> cashList = pointService.getAdminPointList(search); + apiResponse.put("list", cashList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/pointListNew") + public ApiResponse pointListNew(@RequestHeader String token, HttpServletRequest request, @RequestBody PointSearchAdm search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + final String LOG_PREFIX = "#-admin::pointListNew::"+tokenInfo.getSid()+":::"; + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = pointService.getAdminPointListNewCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List> cashList = pointService.getAdminPointListNew(search); + apiResponse.put("list", cashList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/botRateList") + public ApiResponse botRateList(@RequestHeader String token, HttpServletRequest request, @RequestBody PointSearchAdm search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getBetMemId() == null || search.getBetMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getVendorCode() == null || search.getVendorCode().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List> botRateList = null; + if(search.getRateTypeCode() == null || search.getRateTypeCode().equals("")) { + botRateList = pointService.getPointBotRateList(search); + } else { + botRateList = pointService.getPointBotMultiRateList(search); + } + + + apiResponse.put("botRateList", botRateList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/pointInOut") + public ApiResponse pointInOut(@RequestHeader String token, HttpServletRequest request, @RequestBody PointInOut pointInout) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + Point point = new Point(); + + Member search = new Member(); + search.setMemId(pointInout.getMemId()); + search.setSiteId(tokenInfo.getSid()); + + MemberDetail loginMember= userService.getMember(search); + if(loginMember == null) { + throw new ApiException("U003", "unknown user"); + } + + long prePoint = loginMember.getPointAmt(); + if("-2".equals(pointInout.getPointType())){ + if(prePoint < pointInout.getPointAmt()) { + throw new ApiException("P003", "보유 포인트를 초과하여 회수 할 수 없습니다."); + } + } + + if(pointInout.getPointType().equals("2")) { + pointInout.setPointDesc("관리자 포인트 지급"); + } + + if(pointInout.getPointType().equals("-2")) { + pointInout.setPointDesc("관리자 포인트 회수"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + pointInout); + + if(pointInout.getPointType().equals("2") && pointInout.getPointAmt() <= 0) { + throw new ApiException("P004", "포인트 금액을 입력하세요."); + } + + if(pointInout.getPointType().equals("-2") && pointInout.getPointAmt() >= 0) { + throw new ApiException("P004", "포인트 금액을 입력하세요."); + } + + double pointAmtD = pointInout.getPointAmt() * 1.0; + + point.setSiteId(tokenInfo.getSid()); + point.setMemId(pointInout.getMemId()); + point.setPointType(pointInout.getPointType()); + point.setPointDesc(pointInout.getPointDesc()); + point.setPointAmt(pointAmtD); + point.setBetIdx(null); + point.setPointStatus("1"); + point.setRegId(tokenInfo.getMid()); + point.setAdminId(tokenInfo.getMid()); + point.setMemo(pointInout.getMemo()); + point.setPrePointAmt(loginMember.getPointAmt()); +// cashService.pointInsert(point); + long pointIdx = pointService.pointInsert(point); + if(pointIdx == 0) { + throw new ApiException("P006", "포인트지급,회수 처리는 1분에 1건씩 처리됩니다. 잠시후 다시 시도해주세요"); + } else { + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", pointInout.getMemId()+"::관리자 포인트 지급/회수"); + logParam.put("logDesc", pointInout.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/pointChg") + public ApiResponse pointChg(@RequestHeader String token, HttpServletRequest request, @RequestBody Point point) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(point.getSiteId() == null || point.getSiteId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + if(point.getMemId() == null || point.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + final String LOG_PREFIX = "#-admin::pointChg::"+point.getSiteId()+"::"+point.getMemId()+"::::"; + + Member search = new Member(); + search.setSiteId(point.getSiteId()); + search.setMemId(point.getMemId()); + MemberDetail memDetail= userService.getMember(search); + if(memDetail == null) { + throw new ApiException("U003", "unknown user"); + } + + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] " + point); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(point.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + + if(point.getPointAmt() == null || point.getPointAmt() <= 0) { + throw new ApiException("P001", "전환할 포인트를 입력하세요."); + } + + int pointAmt = point.getPointAmt().intValue(); + int pointInMax = Integer.parseInt(siteOption.getPointChangeAmtLimit()); + int pointInUnit = Integer.parseInt(siteOption.getPointChangeAmtUnit()); + if((pointInMax != 0) && (pointAmt > pointInMax)) { + throw new ApiException("P101", "1회 포인트전환 최대한도는 " + pointInMax + "입니다."); + } + if((pointInUnit != 0) && (pointAmt % pointInUnit != 0)) { + throw new ApiException("P102", "포인트전환 금액 단위는 " + pointInUnit + "입니다."); + } + + int cashAmt = pointAmt; + double pointAmtD = pointAmt * -1.0; + + if(memDetail.getPointAmt() >= point.getPointAmt() ) { + point.setPointType("-44"); + point.setPointDesc("관리자 포인트전환"); + point.setPointAmt(pointAmtD); + point.setBetIdx(null); + point.setPointStatus("1"); + point.setRegId(tokenInfo.getSid()); + point.setAdminId(tokenInfo.getSid()); + point.setMemo(""); + point.setPrePointAmt(memDetail.getPointAmt()); + log.info(LOG_PREFIX+ point); + long pointIdx = pointService.pointInsert(point); + log.info(LOG_PREFIX+ "pointIdx: " + pointIdx); + if(pointIdx == 0) { + throw new ApiException("P005", "포인트전환은 1분에 1건씩 처리됩니다. 잠시후 다시 시도해주세요"); + } else { + CashDetail paramCash = new CashDetail(); + paramCash.setSiteId(point.getSiteId()); + paramCash.setMemId(point.getMemId()); + paramCash.setCashType("44"); + paramCash.setCashAmt(cashAmt); + paramCash.setCashDesc("관리자 포인트전환"); + paramCash.setDelYn("N"); + paramCash.setCashStatus("1"); + paramCash.setMemo(""); + paramCash.setRegId(tokenInfo.getSid()); + paramCash.setAdminId(tokenInfo.getSid()); + paramCash.setPreCashAmt(Integer.toString(memDetail.getCashAmt())); + paramCash.setWaitTime(-60); + log.info(LOG_PREFIX+ paramCash); + long cashIdx = cashService.insertCash(paramCash); + log.info(LOG_PREFIX+ "cashIdx: " + cashIdx); + if(cashIdx == 0) { + throw new ApiException("P005", "포인트전환은 1분에 1건씩 처리됩니다. 잠시후 다시 시도해주세요"); + } else { + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", point.getMemId()+"::관리자 포인트 전환"); + logParam.put("logDesc", point.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + } + } + } else { + throw new ApiException("P002", "보유 포인트를 초과하여 전환신청을 할 수 없습니다."); + } + + apiResponse.success(); + + } catch (ResourceAccessException rae) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String memId = tokenInfo.getMid(); + + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("#-admin::pointChg::"+siteId+"::"+memId+"::::"+"[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("#-admin::pointChg::"+siteId+"::"+memId+"::::"+"[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("#-admin::pointChg::"+siteId+"::"+memId+"::::"+"[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + + apiResponse.success(); + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String memId = tokenInfo.getMid(); + log.error("#-admin::pointChg::"+siteId+"::"+memId+"::::"+"ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String memId = tokenInfo.getMid(); + log.error("#-admin::pointChg::"+siteId+"::"+memId+"::::"+"Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiReportController.java b/src/main/java/com/bb/admin/controller/AdminApiReportController.java new file mode 100644 index 0000000..ecf0a1b --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiReportController.java @@ -0,0 +1,622 @@ +package com.bb.admin.controller; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.DailyReportSearch; +import com.bb.model.DayilPartnerReport; +import com.bb.model.DayilPeriodicReports; +import com.bb.model.PageFormVO; +import com.bb.model.ReportSearch; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.service.CommonService; +import com.bb.service.ReportService; +import com.bb.util.PagingUtil; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/admin/report") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiReportController { + + private final ReportService reportService; + + private final CommonService commonService; + + private final JwtManager jwtManager; + + + @ResponseBody + @PostMapping(value={"/calculateSearch"}) + public ApiResponse dailyCalculateSearch(@RequestHeader String token, HttpServletRequest request, @RequestBody DailyReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + final String LOG_PREFIX = "#-admin::dailyCalculateSearch:::"; + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + PageFormVO pageVo = new PageFormVO(); + if(search.getPage() == 0) search.setPage(1); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] " + search); + + List> reportCateInfo = reportService.getReportCateInfo(search.getSiteId()); + apiResponse.put("reportCateInfo", reportCateInfo); + + int totalCount = reportService.getReportsListCntForAdmin(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + if(search.getCount_per_page() == 0) { + commonForm.setCount_per_page(10); + } else { + commonForm.setCount_per_page(search.getCount_per_page()); + } + if(search.getCount_per_list() == 0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); +// search.setOffset(pageVo.getOffset()); + search.setOffset(-1); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + if(search.getSearchType().equals("OUTER")) { + List list = reportService.getReportsListForAdmin(search); // Use blankSpinSetType + DayilPeriodicReports total = reportService.getReportsTotalForAdmin(search); // Use blankSpinSetType + apiResponse.put("search", search); + apiResponse.put("outSearchList", list); + apiResponse.put("outSearchTotal", total); + } else { + List list = reportService.getReportsListForAdmin(search); // Use blankSpinSetType + search.setSearchType("OUTER"); + List total = reportService.getReportsListForAdmin(search); // Use blankSpinSetType + DayilPeriodicReports inSearchTotal = total.get(0); + apiResponse.put("search", search); + apiResponse.put("inSearchList", list); + apiResponse.put("inSearchTotal", inSearchTotal); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(LOG_PREFIX+ "ApiException: "+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception: "+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @PostMapping(value={"/reportByUser"}) + public ApiResponse reportByUser(@RequestHeader String token, HttpServletRequest request, @RequestBody DailyReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(search.getSearchMemId() == null) { + search.setSearchMemId(""); + } + search.setSiteId(tokenInfo.getSid()); + if(search.getSearchRecommandId() == null) { + search.setSearchRecommandId(""); + } + + if(search.getOrderStr() == null) { + search.setOrderStr(""); + } + + PageFormVO pageVo = new PageFormVO(); + if(search.getPage() == 0) search.setPage(1); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List> reportCateInfo = reportService.getReportCateInfo(search.getSiteId()); + apiResponse.put("reportCateInfo", reportCateInfo); + + int totalCount = reportService.getReportsByUserListCntForAdmin(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + if(search.getCount_per_page() == 0) { + commonForm.setCount_per_page(10); + } else { + commonForm.setCount_per_page(search.getCount_per_page()); + } + if(search.getCount_per_list() == 0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + DayilPeriodicReports total = reportService.getReportsByUserTotalForAdmin(search); // Use blankSpinSetType + apiResponse.put("searchTotal", total); + + List list = reportService.getReportsByUserListForAdmin(search); // Use blankSpinSetType + apiResponse.put("searchList", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value={"/dailyCalculate"}) + public ApiResponse dailyCalculate(@RequestHeader String token, HttpServletRequest request, @RequestBody DailyReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List> reportCateInfo = reportService.getReportCateInfo(search.getSiteId()); + apiResponse.put("reportCateInfo", reportCateInfo); + + HashMap partnerInfo = reportService.getPartnerInfo(search); // Use blankSpinSetType + List dailyList = reportService.getDayilPartnerReport(search); // Use blankSpinSetType + + apiResponse.put("partnerInfo", partnerInfo); + apiResponse.put("dailyList", dailyList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/memWL"}) + public ApiResponse logList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody ReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + + int totalCount = reportService.getReportMemwlListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List list = reportService.getReportMemwlList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/period"}) + public ApiResponse period(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody ReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + log.info("AdminApiReportController /period ReportSearch : " + search); + + + HashMap cashInfo = reportService.getPeriodCash(search); + + apiResponse.put("total_cashInAmt", cashInfo.get("total_cashInAmt")); + apiResponse.put("total_cashOutAmt",cashInfo.get("total_cashOutAmt")); + + apiResponse.put("total_cashManualAmt", cashInfo.get("total_cashManualAmt")); + apiResponse.put("total_couponUseAmt", "0"); + apiResponse.put("total_couponAmt", "0"); + apiResponse.put("total_discrepancyAmt", "0"); + apiResponse.put("total_pointManualAmt", "0"); + + // total_bonusAmt_list + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List rollPoint = reportService.getPeriodRollPoint(search); + apiResponse.put("total_rollBonusAmt_list", rollPoint); + + List wlAmt = reportService.getPeriodWlAmt(search); + apiResponse.put("total_wlAmt_list", wlAmt); + + + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/gameType"}) + public ApiResponse gameType(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody ReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List gameTypeList = reportService.getGameTypeList(search); + apiResponse.put("list", gameTypeList); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/day"}) + public ApiResponse day(@RequestHeader String token, HttpServletRequest request, @RequestBody ReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List> dayList = reportService.getDayList(search); // Use blankSpinSetType + HashMap dayTotal = reportService.getDayTotal(search); // Use blankSpinSetType + + apiResponse.put("list", dayList); + apiResponse.put("total", dayTotal); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/trade"}) + public ApiResponse trade(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody ReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + log.info("AdminApiReportController /trade ReportSearch : " + search); + + int totalCount = reportService.getReportTradeListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = reportService.getReportTradeList(search); + apiResponse.put("list", list); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/partner"}) + public ApiResponse partner(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody ReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + log.info("AdminApiReportController /partner ReportSearch : " + search); + + int totalCount = reportService.getReportPartnerListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + }else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = reportService.getReportPartnerList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/pay"}) + public ApiResponse pay(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody ReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + log.info("AdminApiReportController /pay ReportSearch : " + search); + + int totalCount = reportService.getReportPayListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(40); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + }else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = reportService.getReportPayList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiRetailController.java b/src/main/java/com/bb/admin/controller/AdminApiRetailController.java new file mode 100644 index 0000000..ce20aaf --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiRetailController.java @@ -0,0 +1,1790 @@ +package com.bb.admin.controller; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.BlankSpinRate; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberInsert; +import com.bb.model.MemberInsert2; +import com.bb.model.MemberRate; +import com.bb.model.MemberRateVo; +import com.bb.model.MemberSearch; +import com.bb.model.MemberUpdate; +import com.bb.model.MultipleRate; +import com.bb.model.MultipleRateInfo; +import com.bb.model.NewMemRateItem; +import com.bb.model.PageFormVO; +import com.bb.model.PartnerListVO; +import com.bb.model.RateInfo; +import com.bb.model.RateVO; +import com.bb.model.RetailLockVO; +import com.bb.model.RetailSearch; +import com.bb.model.RetailSet; +import com.bb.model.Site; +import com.bb.service.AsyncExcoinOtcService; +import com.bb.service.CommonService; +import com.bb.service.CompService; +import com.bb.service.RateService; +import com.bb.service.RetailService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.bb.util.StringUtils; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/admin/retail") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiRetailController { + + private final RetailService retailService; + + private final UserService userService; + + private final RateService rateService; + + private final CommonService commonService; + + private final CompService compService; + + private final AsyncExcoinOtcService asyncExcoinOtcService; + + private final PasswordEncoder passwordEncoder; + + private final JwtManager jwtManager; + + + @ResponseBody + @PostMapping(value="/partnerJoin") + public ApiResponse partnerJoin(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberInsert signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-admin::partnerJoin::"; + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + Site site = userService.getSiteInfo(tokenInfo.getSid()); + + signupMember.setSiteIdx(tokenInfo.getSidx()); + signupMember.setSiteId(tokenInfo.getSid()); + signupMember.setMemId(signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase()); + LOG_PREFIX = LOG_PREFIX + tokenInfo.getSid()+"::"+signupMember.getMemId()+"::::"; + + if(signupMember.getMemId().equals("")) { + throw new ApiException("U098", "아이디를 입력해주세요."); + } + + if(signupMember.getRecommenderId() == null || signupMember.getRecommenderId().equals("")) { + throw new ApiException("U097", "추천인 계정을 입력해주세요."); + } + + String refer = request.getHeader("Referer"); + String domain = "unknown"; + if(refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + domain = urls[2]; + log.info(LOG_PREFIX+"::domain::"+domain+"::recommandId::"+signupMember.getRecommenderId()); + } + signupMember.setJoinDomain(domain); + + signupMember.setRecommenderId(signupMember.getRecommenderId().replaceAll(" ", "").toLowerCase()); + signupMember.setRegId(tokenInfo.getMid()); + signupMember.setPartnerType(""); + signupMember.setMemStatus("1"); + + if(signupMember.getMemId() == null || signupMember.getMemId().equals("") || (signupMember.getMemId().length() < 3)) { + throw new ApiException("U101", "파트너 아이디는 영문+숫자 3자 이상입니다."); + } + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + + log.info(LOG_PREFIX+ "[RECOMMEND USER ID:" + signupMember.getRecommenderId() + "]"); + String myPartnerLevel = userService.getPartnerLevelByRecId(signupMember); + if(myPartnerLevel.equals("COMP") || myPartnerLevel.equals("AUTO") || myPartnerLevel.equals("NORMAL")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + signupMember.setPartnerLevel(myPartnerLevel); + log.info(LOG_PREFIX+ "[PARTNER LEVEL:" + signupMember.getPartnerLevel() + "]"); + + // isOnlyFlex : 파트너 회원 베팅가능여부 플레그(Y:가능, N:불가능) + log.info(LOG_PREFIX+"::site.getIsOnlyFlex()::"+site.getIsOnlyFlex()); + if(site.getIsOnlyFlex().equals("Y")) { + signupMember.setBetYn("Y"); + } else { + signupMember.setBetYn("N"); + } + log.info(LOG_PREFIX+"::BetYn::"+signupMember.getBetYn()); + + signupMember.setPointExchangeYn("Y"); + signupMember.setRollingYn("Y"); + signupMember.setRecommendYn("Y"); + + signupMember.setMemLevel("1"); + signupMember.setCasinoLevel("1"); + signupMember.setSlotLevel("1"); + signupMember.setMgLevel("1"); + signupMember.setSportsLevel("1"); + signupMember.setNationCode(""); + signupMember.setPartSendYn("N"); + signupMember.setMaxCredit(""); + signupMember.setCreditRate(""); + signupMember.setCreditStatus(""); + signupMember.setMemBlackYn("N"); + + signupMember.setCashSendYn("Y"); + signupMember.setCashReceiveYn("Y"); + + Member recommendUser = new Member(); + recommendUser.setSiteId(tokenInfo.getSid()); + recommendUser.setMemId(signupMember.getRecommenderId()); + MemberDetail upPartner = userService.getMember(recommendUser); + + if(upPartner == null) { + throw new ApiException("U096", "존재하지 않는 추천인 계정입니다."); + } + + if(upPartner.getPartnerLevel().equals("COMP") || upPartner.getPartnerLevel().equals("NORMAL") || upPartner.getPartnerLevel().equals("PTN_7")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(upPartner.getRecommendYn().equals("N")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(!upPartner.getMemStatus().equals("1")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + checkMember.setMemId(signupMember.getMemId()); + checkMember.setRecommenderId(signupMember.getRecommenderId()); + checkMember.setMemName(signupMember.getMemName()); + checkMember.setMemNick(signupMember.getMemNick()); + + int idCheck =userService.idCheck(checkMember); + if(idCheck>0) { + throw new ApiException("U005", "idCheck"); + } + /* + int idCheckByAdmin =userService.idCheckByAdmin(checkMember); + if(idCheckByAdmin>0) { + throw new ApiException("U005", "idCheckByAdmin"); + } + */ + int nameCheck =userService.nameCheck(checkMember); + if(nameCheck>0) { + throw new ApiException("U006", "nameCheck"); + } + + if(signupMember.getSiteId().equals(signupMember.getRecommenderId())) { + throw new ApiException("U099", "recommenderIdCheck"); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String signupMemberJson = objectMapper.writeValueAsString(signupMember); + log.info(LOG_PREFIX+ "signupMemberJson::" + signupMember); + + RateInfo rateInfo = signupMember.getRateInfo(); + if(rateInfo != null) { + rateInfo.setSiteId(signupMember.getSiteId()); + rateInfo.setMemId(signupMember.getMemId()); + + Member top = new Member(); + top.setSiteId(tokenInfo.getSid()); + top.setMemId(signupMember.getRecommenderId()); + List> topRateInfoList = rateService.getMemRollingInfo(top); + + for(RateVO mvo : rateInfo.getRateList()) { + mvo.setSiteId(rateInfo.getSiteId()); + mvo.setMemId(rateInfo.getMemId()); + String category = mvo.getCategory(); + String cateCode = mvo.getCateCode(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for(HashMap topRateInfo : topRateInfoList) { + String topCategory = topRateInfo.get("category").toString(); + String topCateCode = topRateInfo.get("cateCode").toString(); + Double maxPointRate = Double.valueOf(topRateInfo.get("pointRate").toString()); + Double maxLoseRate = Double.valueOf(topRateInfo.get("loseRate").toString()); + if(upPartner.getPartnerLevel().equals("AUTO")) { + maxPointRate = 50.0; + maxLoseRate = 50.0; + } + if(cateCode.equals(topCateCode)) { + if(maxPointRate < pointRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::pointRate::"+pointRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxPointRate::"+maxPointRate); + String resultMsg = "롤링:"+"cateCode::"+cateCode+ "::"+maxPointRate+" 보다 작은값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(maxLoseRate < loseRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::loseRate::"+loseRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxLoseRate::"+maxLoseRate); + String resultMsg = "루징:"+"cateCode::"+cateCode+ "::"+maxLoseRate+" 보다 작은값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + } + + userService.adminJoin(signupMember); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getMemId()+"::파트너 계정 생성"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error(LOG_PREFIX+ "insertAdminlog::Exception::"+e.toString()); } + + try { + if(rateInfo != null) { + rateService.rateInfoUpdate(rateInfo); + } + } catch(Exception eee) { + log.error(LOG_PREFIX+ "Partner_Rate_Setting::Exception::"+eee.toString()); + } + + apiResponse.success(); + } catch(ApiException e) { + log.error(LOG_PREFIX+ "ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/create") + public ApiResponse create(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberInsert2 signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-admin::retail::create::"; + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + Site site = userService.getSiteInfo(tokenInfo.getSid()); + + signupMember.setSiteIdx(tokenInfo.getSidx()); + signupMember.setSiteId(tokenInfo.getSid()); + + String refer = request.getHeader("Referer"); + String domain = "unknown"; + if(refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + domain = urls[2]; + log.info(LOG_PREFIX+"::domain::"+domain+"::recommandId::"+signupMember.getRecommenderId()); + } + signupMember.setJoinDomain(domain); + + if(signupMember.getMemIdList() == null || signupMember.getMemIdList().size() == 0) { + throw new ApiException("UC01", "아이디를 입력해주세요."); + } else { + for(String memId : signupMember.getMemIdList()) { + if(memId.equals("")) { + throw new ApiException("UC01", "아이디를 입력해주세요."); + } else { + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + memId = memId.replaceAll(" ", "").toLowerCase(); + checkMember.setMemId(memId); + int idCheck = userService.idCheck(checkMember); + if(idCheck > 0) { + throw new ApiException("UC02", "중복 아이디: "+memId); + } + } + } + } + + if(signupMember.getMemNickList() == null || signupMember.getMemNickList().size() == 0) { + throw new ApiException("UC03", "닉네임을 입력해주세요."); + } else { + for(String memNick : signupMember.getMemNickList()) { + if(memNick.equals("")) { + throw new ApiException("UC03", "닉네임을 입력해주세요."); + } else { + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + checkMember.setMemNick(memNick); + int nickCheck = userService.nameCheck(checkMember); + if(nickCheck > 0) { + throw new ApiException("UC04", "중복 닉네임: "+memNick); + } + } + } + } + + if(signupMember.getMemNameList() == null || signupMember.getMemNameList().size() == 0) { + throw new ApiException("UC05", "이름을 입력해주세요."); + } else { + for(String memName : signupMember.getMemNameList()) { + if(memName.equals("")) { + throw new ApiException("UC05", "이름을 입력해주세요."); + } + } + } + + if(signupMember.getMemIdList().size() != signupMember.getMemNickList().size() + || signupMember.getMemIdList().size() != signupMember.getMemNameList().size()) { + throw new ApiException("UC06", "아이디, 닉네임, 이름 갯수가 일치하지 않습니다."); + } + + if(signupMember.getMemIdList().size() > 30) { + throw new ApiException("UC07", "최대 30명까지 생성할 수 있습니다."); + } + + signupMember.setRecommenderId(signupMember.getRecommenderId().replaceAll(" ", "").toLowerCase()); + log.info(LOG_PREFIX+ "[RECOMMEND USER ID:" + signupMember.getRecommenderId() + "]"); + MemberInsert param = new MemberInsert(); + param.setSiteId(tokenInfo.getSid()); + param.setRecommenderId(signupMember.getRecommenderId()); + String myPartnerLevel = userService.getPartnerLevelByRecId(param); + if(myPartnerLevel.equals("COMP") || myPartnerLevel.equals("AUTO") || myPartnerLevel.equals("NORMAL")) { + throw new ApiException("UC08", "추천인으로 사용할 수 없는 계정입니다."); + } + signupMember.setPartnerLevel(myPartnerLevel); + log.info(LOG_PREFIX+ "[PARTNER LEVEL:" + signupMember.getPartnerLevel() + "]"); + + signupMember.setRecommendYn("Y"); + + // isOnlyFlex : 파트너 회원 베팅가능여부 플레그(Y:가능, N:불가능) + log.info(LOG_PREFIX+"::site.getIsOnlyFlex()::"+site.getIsOnlyFlex()); + if(site.getIsOnlyFlex().equals("Y")) { + signupMember.setBetYn("Y"); + } else { + signupMember.setBetYn("N"); + } + log.info(LOG_PREFIX+"::BetYn::"+signupMember.getBetYn()); + + signupMember.setRegId(tokenInfo.getMid()); + signupMember.setMemStatus("1"); + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + signupMember.setMemLevel("1"); + signupMember.setCasinoLevel("1"); + signupMember.setSlotLevel("1"); + signupMember.setCashSendYn("Y"); + signupMember.setCashReceiveYn("Y"); + + if(signupMember.getCashOutPass()==null || signupMember.getCashOutPass().equals("")) { + signupMember.setCashOutPass("0000"); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String signupMemberJson = objectMapper.writeValueAsString(signupMember); + log.info(LOG_PREFIX+ "signupMemberJson::" + signupMemberJson); + + if(signupMember.getRateList() != null) { + MemberSearch topUser = new MemberSearch(); + topUser.setSiteId(signupMember.getSiteId()); + topUser.setMemId(signupMember.getRecommenderId()); + List topRateList = rateService.getTopRate(topUser); + + for(RateVO topRate : topRateList) { + String topCtgr = topRate.getCategory(); + double topPR = Double.parseDouble(topRate.getPointRate()); + double topLR = Double.parseDouble(topRate.getLoseRate()); + for(RateVO botRate : signupMember.getRateList()) { + String botCtgr = botRate.getCategory(); + double botPR = Double.parseDouble(botRate.getPointRate()); + double botLR = Double.parseDouble(botRate.getLoseRate()); + + if(topCtgr.equals(botCtgr)) { + if(topPR < botPR) { + log.error(LOG_PREFIX+ "topCtgr::"+topCtgr+ "::topPR::"+topPR); + log.error(LOG_PREFIX+ "botCtgr::"+botCtgr+ "::botPR::"+botPR); + String resultMsg = "롤링:"+topCtgr+ "::"+topPR+" 보다 작은값을 입력하세요"; + log.error(LOG_PREFIX+ "resultMsg : " + resultMsg); + throw new ApiException("UC09", resultMsg); + } + if(topLR < botLR) { + log.error(LOG_PREFIX+ "topCtgr::"+topCtgr+ "::topLR::"+topLR); + log.error(LOG_PREFIX+ "botCtgr::"+botCtgr+ "::botLR::"+botLR); + String resultMsg = "루징:"+topCtgr+ "::"+topLR+" 보다 작은값을 입력하세요"; + log.error(LOG_PREFIX+ "resultMsg : " + resultMsg); + throw new ApiException("UC09", resultMsg); + } + } + } + } + } + + for(int i=0; i logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getMemId()+"::파트너 계정 생성"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error(LOG_PREFIX2+ "insertAdminlog::Exception::"+e.toString()); } + + // TODO : List rateList 등록 처리 + if(signupMember.getRateList() != null) { + for(RateVO botRate : signupMember.getRateList()) { + botRate.setSiteId(siteId); + botRate.setMemId(memId); + int myUpdateResult = rateService.myRateInfoUpdate(botRate); + log.info(LOG_PREFIX2+ "::myUpdateResult::"+myUpdateResult); + int topMinUpdateResult = rateService.topMinRateInfoUpdate(botRate); + log.info(LOG_PREFIX2+ "::topMinUpdateResult::"+topMinUpdateResult); + } + } + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(LOG_PREFIX+ "ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /** + * 메뉴: [파트너 관리] > [파트너 리스트] + * @param token + * @param request + * @param search + * @return + * @throws Exception + */ + @ResponseBody + @PostMapping(value={"/partnerList"}) + public ApiResponse partnerList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = retailService.getRetailListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = retailService.getRetailList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /** + * 메뉴: [파트너 관리] > [파트너 리스트] + * @param token + * @param request + * @param search + * @return + * @throws Exception + */ + @ResponseBody + @PostMapping(value={"/partnerList2"}) + public ApiResponse partnerList2(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + /* + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = retailService.getRetailListCnt2(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + */ + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = retailService.getRetailList2(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/rateInfoList"}) + public ApiResponse rateInfoList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List rateInfoList = retailService.getListRateInfo(search); + apiResponse.put("rateInfoList", rateInfoList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/rateInfoUpdate") + public ApiResponse rateInfoUpdate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody NewMemRateItem rateItem) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + rateItem.setSiteId(tokenInfo.getSid()); + + NewMemRateItem checkParam = new NewMemRateItem(); + checkParam.setSiteId(rateItem.getSiteId()); + checkParam.setMemId(rateItem.getMemId()); + checkParam.setGameCategory(rateItem.getGameCategory()); + checkParam.setGameCategoryEn(rateItem.getGameCategoryEn()); + checkParam.setGameCategoryName(rateItem.getGameCategoryName()); + checkParam.setVendorCode(rateItem.getVendorCode()); + checkParam.setRateTypeCode(rateItem.getRateTypeCode()); + checkParam.setPointRate(rateItem.getPointRate()); + checkParam.setLoseRate(rateItem.getLoseRate()); + if(checkParam.getGameCategory().equals("minigame")) { + // 폭탄게임, 홀덤, 니우니우, 스피드게임 + checkParam.setVendorCode(checkParam.getGameCategoryEn()); + rateItem.setVendorCode(rateItem.getGameCategoryEn()); + rateItem.setGameCategoryEn(""); + } else if(checkParam.getGameCategory().equals("slot")) { + // 슬롯 + checkParam.setVendorCode("200"); + rateItem.setGameCategoryEn(""); + } else if(checkParam.getGameCategory().equals("sport")) { + // 스포츠 + checkParam.setVendorCode("splus"); + rateItem.setGameCategoryEn(""); + } else if(checkParam.getGameCategory().equals("casino")) { + if(checkParam.getGameCategoryEn().equals("CASINO")) { + // 카지노 + checkParam.setVendorCode("1"); + } else { + // HC-카지노 + checkParam.setVendorCode("13"); + } + } else { + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + checkParam); + NewMemRateItem myRateInfo = userService.getMemRateItem(checkParam); + if(myRateInfo.getMaxPointRate() < rateItem.getPointRate() || myRateInfo.getMinPointRate() > rateItem.getPointRate()) { + log.info("#-newListUpdateRate::"+rateItem.getSiteId()+"::"+rateItem.getMemId()+"::vendorcode::"+rateItem.getVendorCode()+"::rateType::"+rateItem.getRateTypeCode()+ "::pointRate::"+rateItem.getPointRate()); + log.info("#-newListUpdateRate::"+rateItem.getSiteId()+"::"+rateItem.getMemId()+"::vendorcode::"+rateItem.getVendorCode()+"::rateType::"+rateItem.getRateTypeCode()+ "::MaxPointRate::"+myRateInfo.getMaxPointRate()+"::MinPointRate::"+myRateInfo.getMinPointRate()); + String resultMsg = "롤링: "+myRateInfo.getMaxPointRate()+", "+myRateInfo.getMinPointRate()+" 사이값을 입력하세요"; + log.info("#-newListUpdateRate::"+rateItem.getSiteId()+"::"+rateItem.getMemId()+"::vendorcode::"+rateItem.getVendorCode()+"::rateType::"+rateItem.getRateTypeCode()+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(myRateInfo.getMaxLoseRate() < rateItem.getLoseRate() || myRateInfo.getMinLoseRate() > rateItem.getLoseRate()) { + log.info("#-newListUpdateRate::"+rateItem.getSiteId()+"::"+rateItem.getMemId()+"::vendorcode::"+rateItem.getVendorCode()+"::rateType::"+rateItem.getRateTypeCode()+ "::loseRate::"+rateItem.getLoseRate()); + log.info("#-newListUpdateRate::"+rateItem.getSiteId()+"::"+rateItem.getMemId()+"::vendorcode::"+rateItem.getVendorCode()+"::rateType::"+rateItem.getRateTypeCode()+ "::MaxLoseRate::"+myRateInfo.getMaxLoseRate()+"::MinLoseRate::"+myRateInfo.getMinLoseRate()); + String resultMsg = "루징: "+myRateInfo.getMaxLoseRate()+", "+myRateInfo.getMinLoseRate()+" 사이값을 입력하세요"; + log.info("#-newListUpdateRate::"+rateItem.getSiteId()+"::"+rateItem.getMemId()+"::vendorcode::"+rateItem.getVendorCode()+"::rateType::"+rateItem.getRateTypeCode()+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + rateItem); + userService.updateMemRateItem(rateItem); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", rateItem.getMemId()+"::파트너 리스트 요율 변경"); + logParam.put("logDesc", rateItem.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/partnerDetail") + public ApiResponse partnerDetail(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberSearch memberSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Member search = new Member(); + search.setMemId(memberSearch.getMemId()); + search.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + memberSearch); + HashMap memberDetail = userService.getPartnerMemberDetail(search); + + memberDetail.put("memberCommissionRate", userService.getMemberRate(search)); + List memberFlow = userService.getMemberFlowList(memberDetail); + List partnerFlow = userService.getPartnerFlowList(memberDetail); + List userList = userService.getPartnerBotUserList(search); + List> memRollingInfo = rateService.getMemRollingInfo(search); + + HashMap param = new HashMap<>(); + long siteIdx = Long.parseLong(memberDetail.get("siteIdx").toString()); + long memIdx = Long.parseLong(memberDetail.get("memIdx").toString()); + param.put("siteIdx", siteIdx); + param.put("memIdx", memIdx); + HashMap bonusSettingInfo = userService.getBonusSettingInfo(param); + + apiResponse.put("member", memberDetail); + apiResponse.put("memberFlow", memberFlow); + apiResponse.put("partnerFlow", partnerFlow); + apiResponse.put("memRollingInfo", memRollingInfo); + apiResponse.put("userList", userList); + apiResponse.put("bonusSettingInfo", bonusSettingInfo); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/partnerModify") + public ApiResponse partnerModify(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberUpdate signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-admin::retail:modify::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + + signupMember.setSiteId(tokenInfo.getSid()); + signupMember.setUpdId(tokenInfo.getMid()); + + if(signupMember.getMemPass() != null && !signupMember.getMemPass().equals("")) { + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info("[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + } + + + log.info("[REQUEST: "+request.getRequestURI()+"] " + signupMember); + userService.updateMember(signupMember); + + // TODO: Excoin API 호출 + Member search = new Member(); + search.setSiteId(signupMember.getSiteId()); + search.setMemId(signupMember.getMemId()); + MemberDetail memDetail = userService.getMember(search); + HashMap exCoinInfo = commonService.getVassApiInfo(search); + if(exCoinInfo.get("vaccCode") != null) { + log.info(LOG_PREFIX+ "API_INFO::" + exCoinInfo.toString()); + String vaccCode = exCoinInfo.get("vaccCode").toString(); + if(vaccCode.equals("excoin")) { + exCoinInfo.put("userEmail", memDetail.getMemId()); + exCoinInfo.put("userMobile", memDetail.getMemPhone().replaceAll("-", "").trim()); + exCoinInfo.put("userNm", memDetail.getMemName()); + // 회원수정 + int resultCode = asyncExcoinOtcService.updateUser(LOG_PREFIX, exCoinInfo); + log.info(LOG_PREFIX+ "OTC API resultCode::" + resultCode); + } + } + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getMemId()+"::파트너 회원 수정"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/userLockWithBottom") + public ApiResponse userLockWithBottom(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailLockVO search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + param.put("memId", search.getMemId()); + param.put("memLockYn", search.getMemLockYn()); + param.put("updId", tokenInfo.getMid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + param.toString()); + int updResult = retailService.userLockWithBottom(param); + log.info("[REQUEST: "+request.getRequestURI()+"] updResult: " + updResult); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + if("Y".equals(search.getMemLockYn())) { + logParam.put("logName", search.getMemId()+"::파트너 회원 계정 잠금"); + } else { + logParam.put("logName", search.getMemId()+"::파트너 회원 계정 잠금해제"); + } + logParam.put("logDesc", search.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너목록 하이라키] API 기능 + */ + @ResponseBody + @PostMapping(value={"/hierarchy"}) + public ApiResponse partnerHierarchy(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getTreeOption() == null || search.getTreeOption().equals("")) { + search.setTreeOption("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List hierarchy = retailService.getPartnerHierarchy(search); + apiResponse.put("hierarchy", hierarchy); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/bonusSetting") + public ApiResponse bonusSetting(HttpServletRequest request, @RequestHeader String token, @RequestBody ChargingPointSettingVO settingVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + settingVO.setSiteIdx(tokenInfo.getSidx()); + settingVO.setSiteId(tokenInfo.getSid()); + + if(settingVO.getMemId() == null || settingVO.getMemId().equals("")) { + throw new ApiException("F999", "Not found memId"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + settingVO); + int result = retailService.partnerBonusSettingSave(settingVO); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", settingVO.getMemId()+"::파트너 보너스 세팅"); + logParam.put("logDesc", settingVO.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateRate") + public ApiResponse updateRate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberRate memberRate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + Member search = new Member(); + search.setMemId(memberRate.getMemId()); + + if("super".equals(tokenInfo.getType())) { + search.setSiteId(memberRate.getSiteId()); + } else { + search.setSiteId(tokenInfo.getSid()); + } + search.setPartnerLevel("PTN"); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + memberRate); + + NewMemRateItem rateItem = new NewMemRateItem(); + rateItem.setSiteId(tokenInfo.getSid()); + rateItem.setMemId(memberRate.getMemId()); + List myRateList = userService.getMemRateItemList(rateItem); + for(MemberRateVo mvo:memberRate.getRateList()) { + String vendorCode = mvo.getGameType(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for(NewMemRateItem myRateInfo : myRateList) { + String myCode = myRateInfo.getVendorCode(); + Double maxPointRate = myRateInfo.getMaxPointRate(); + Double minPointRate = myRateInfo.getMinPointRate(); + Double maxLoseRate = myRateInfo.getMaxLoseRate(); + Double minLoseRate = myRateInfo.getMinLoseRate(); + if(vendorCode.equals(myCode)) { + if(maxPointRate < pointRate || minPointRate > pointRate) { + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::pointRate::"+pointRate); + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::MaxPointRate::"+maxPointRate+"::MinPointRate::"+minPointRate); + String resultMsg = "롤링:"+"::vendorcode::"+myCode+ "::"+maxPointRate+", "+minPointRate+" 사이값을 입력하세요"; + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(maxLoseRate < loseRate || minLoseRate > loseRate) { + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::loseRate::"+loseRate); + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::MaxLoseRate::"+maxLoseRate+"::MinLoseRate::"+minLoseRate); + String resultMsg = "루징:"+"::vendorcode::"+myCode+ "::"+maxLoseRate+", "+minLoseRate+" 사이값을 입력하세요"; + log.info("#-updateRate::"+myRateInfo.getSiteId()+"::"+myRateInfo.getMemId()+"::vendorcode::"+myCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + + userService.getMemberRateUpdate(search, memberRate); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", memberRate.getMemId()+"::상세페이지 요율 변경"); + logParam.put("logDesc", memberRate.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + //사용 안함 추후 삭제 + @ResponseBody + @PostMapping(value="/updateAllBottomRate") + public ApiResponse updateAllBottomRate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberRate bottomRate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(bottomRate.getMemId()); + search.setPartnerLevel("PTN"); + + List myRateList = userService.getMemberRate(search); + +// log.info("[REQUEST: "+request.getRequestURI()+"] ## updateAllBottomRate ## myRateList : " + myRateList); +// log.info("[REQUEST: "+request.getRequestURI()+"] ## updateAllBottomRate ## bottomRate : " + bottomRate); + HashMap result = userService.updateAllBottomRate(search, myRateList, bottomRate); + apiResponse.put("updResult", result); + + if("SUCC".equals(result.get("status".toString()))) { + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", bottomRate.getMemId()+"::하부전체 요율 변경"); + logParam.put("logDesc", bottomRate.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + //사용 안함 추후 삭제 + @ResponseBody + @PostMapping(value="/multipleRateInfo") + public ApiResponse multipleRateInfo(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MultipleRateInfo param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + param.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + param); + + List multipleRateList = userService.getMultipleRateList(param); + param.setRateList(multipleRateList); + + apiResponse.put("multipleRateInfo", param); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + //사용 안함 추후 삭제 + @ResponseBody + @PostMapping(value="/updateMultipleRate") + public ApiResponse updateMultipleRate(@RequestHeader String token, HttpServletRequest request, @RequestBody MultipleRateInfo param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + param.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + param); + + List afterRateList = param.getRateList(); + List beforeRateList = userService.getMultipleRateList(param); + + for(MultipleRate afterRate : afterRateList) { + for(MultipleRate beforeRate : beforeRateList) { + if(afterRate.getRateType().equals(beforeRate.getRateType())) { + if(beforeRate.getMaxPointRate() < afterRate.getPointRate() || beforeRate.getMinPointRate() > afterRate.getPointRate()) { + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::pointRate::"+afterRate.getPointRate()); + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::MaxPointRate::"+beforeRate.getMaxPointRate()+"::MinPointRate::"+beforeRate.getMinPointRate()); + String resultMsg = "["+afterRate.getRateType()+"] 롤링:"+beforeRate.getMaxPointRate()+", "+beforeRate.getMinPointRate()+" 사이값을 입력하세요"; + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::resultMsg : " + resultMsg); + throw new ApiException("U032", resultMsg); + } + + if(beforeRate.getMaxLoseRate() < afterRate.getLoseRate() || beforeRate.getMinLoseRate() > afterRate.getLoseRate()) { + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::loseRate::"+afterRate.getLoseRate()); + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::MaxLoseRate::"+beforeRate.getMaxLoseRate()+"::MinLoseRate::"+beforeRate.getMinLoseRate()); + String resultMsg = "["+afterRate.getRateType()+"] 루징:"+beforeRate.getMaxPointRate()+", "+beforeRate.getMinPointRate()+" 사이값을 입력하세요"; + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::resultMsg : " + resultMsg); + throw new ApiException("U032", resultMsg); + } + } + } + } + + userService.updateMultipleRate(param); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", param.getMemId()+"::파트너 Multiple 요율 변경"); + logParam.put("logDesc", param.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateBlankSpinRate") + public ApiResponse updateBlankSpinRate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody BlankSpinRate rate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + rate.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + rate); + if(rate.getBlankSpinCasinoRate() == null) { + rate.setBlankSpinCasinoRate(0); + } + + if(rate.getBlankSpinSlotRate() == null) { + rate.setBlankSpinSlotRate(0); + } + + userService.updateBlankSpinRate(rate); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", rate.getMemId()+"::파트너 직하부 공회전율 변경"); + logParam.put("logDesc", rate.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateAllBlankSpinRate") + public ApiResponse updateAllBlankSpinRate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody BlankSpinRate rate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + rate.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + rate); + if(rate.getBlankSpinCasinoRate() == null) { + rate.setBlankSpinCasinoRate(0); + } + + if(rate.getBlankSpinSlotRate() == null) { + rate.setBlankSpinSlotRate(0); + } + + userService.updateAllBlankSpinRate(rate); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", rate.getMemId()+"::파트너 하부전체 공회전율 변경"); + logParam.put("logDesc", rate.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/settingSave"}) + public ApiResponse settingSave(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSet retailSet) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + retailSet.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + retailSet); + retailService.settingSave(retailSet); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/settingList"}) + public ApiResponse settingList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + + int totalCount = retailService.getRetailSettingListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + }else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = retailService.getRetailSettingList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/balanceList"}) + public ApiResponse balanceList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + + int totalCount = retailService.getRetailBalanceListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + }else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = retailService.getRetailBalanceList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/balanceDetail"}) + public ApiResponse balanceDetail(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = retailService.retailBalanceDetail(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/detailList"}) + public ApiResponse detailList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + + int totalCount = retailService.retailDetailListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + }else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = retailService.retailDetailList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/summryList"}) + public ApiResponse summryList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + search.setSiteId(tokenInfo.getSid()); + + int totalCount = retailService.retailSummryListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + }else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = retailService.retailSummryList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/setPoint"}) + public ApiResponse setPoint(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + + + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + + search.setSiteId(tokenInfo.getSid()); + search.setMemId(search.getMemId()); + + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + if("W".equals(search.getRetailPeriod()) || "M".equals(search.getRetailPeriod() )){ + retailService.setPoint(search); + }else { + + apiResponse.fail(); + } + + + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } + +} diff --git a/src/main/java/com/bb/admin/controller/AdminApiSettingController.java b/src/main/java/com/bb/admin/controller/AdminApiSettingController.java new file mode 100644 index 0000000..18f926a --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminApiSettingController.java @@ -0,0 +1,1848 @@ +package com.bb.admin.controller; + +import java.nio.charset.Charset; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.reactive.function.client.WebClient; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.Admin; +import com.bb.model.AdminIp; +import com.bb.model.AdminLogSearch; +import com.bb.model.AdminSearch; +import com.bb.model.ApiResponse; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.Bank; +import com.bb.model.Banner; +import com.bb.model.Block; +import com.bb.model.BlockSearch; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.CompDetail; +import com.bb.model.DomainPartnerVO; +import com.bb.model.GameSetting; +import com.bb.model.GameSettingItem; +import com.bb.model.LevelBank; +import com.bb.model.LevelBetLimit; +import com.bb.model.LevelDomain; +import com.bb.model.LevelFailPoint; +import com.bb.model.LevelOutPwd; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.NotiBgmVo; +import com.bb.model.PageFormVO; +import com.bb.model.Site; +import com.bb.model.SiteCashBonusSettingVO; +import com.bb.model.SiteCheckReq; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.service.CommonService; +import com.bb.service.CompService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import reactor.core.publisher.Mono; + +@RestController +@Slf4j +@RequestMapping("/api/admin/setting") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminApiSettingController { + + private final UserService userService; + + private final JwtManager jwtManager; + + private final CommonService commonService; + + private final CompService compService; + + private final PasswordEncoder passwordEncoder; + + //@Autowired + //RestTemplate restTemplate; + + @Autowired + WebClient webClient; + + @ResponseBody + @PostMapping(value="/account") + public ApiResponse account(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + HashMap account = commonService.getSiteAccoucnt(search) ; + apiResponse.put("account", account); + apiResponse.success(); + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + apiResponse.success(); + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/bank") + public ApiResponse bank(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + List bankList = commonService.getAdminBankList(search) ; + apiResponse.put("list", bankList); + apiResponse.success(); + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/bankSave") + public ApiResponse bankSave(@RequestHeader String token, HttpServletRequest request, @RequestBody Bank bank) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + bank.setSiteId(tokenInfo.getSid()); + + if("Y".equals(bank.getDelYn())) { + // 삭제 + if(bank.getBankCode() == null || bank.getBankCode().equals("")) { + throw new ApiException("BK99", "bankcode is not null"); + } + commonService.bankDelete(bank); + } else { + // 수정 + commonService.bankSave(bank); + } + + apiResponse.success(); + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/option") + public ApiResponse option(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + if(search.getSiteId()==null || search.getSiteId().equals("")) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + } + + SiteOption option = commonService.getSiteSetting(search); + apiResponse.put("option", option); + apiResponse.success(); + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/optionSave") + public ApiResponse optionSave(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteOption option) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(!"super".equals(tokenInfo.getType())) { + option.setSiteId(tokenInfo.getSid()); + } + log.info("#-admin::optionSave:::"+ "[REQUEST: "+request.getRequestURI()+"] " + option); + + if(option.getMaxWinAmt() != null && !option.getMaxWinAmt().equals("")) { + boolean isNumeric = StringUtils.isNumeric(option.getMaxWinAmt()); + if(!isNumeric) { + log.error("#-admin::optionSave:::"+ "maxWinAmt is not numeric::"+option.getMaxWinAmt()); + throw new ApiException("OP001", "maxWinAmt is not numeric"); + } + } + + int result = commonService.optionSave(option); + log.info("#-admin::optionSave:::"+ "optionSave result" + result); + + if(option.getVictoryPassYn() != null && !option.getVictoryPassYn().equals("")) { + result = compService.updateCompVictoryPassYn(option); + log.info("#-admin::optionSave:::"+ "updateCompVictoryPassYn result" + result); + } + + apiResponse.success(); + } catch(ApiException e) { + log.error("#-admin::optionSave:::"+ "ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error("#-admin::optionSave:::"+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/parseUseUpdate") + public ApiResponse parseUseUpdate(@RequestHeader String token, HttpServletRequest request, @RequestBody net.sf.json.JSONObject usdtObj) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-parseUseUpdate::"+tokenInfo.getSid()+":::"; + + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + param.put("apiVendorCode", "triple"); + ApiVendorCompInfo vendorCompInfo = userService.getApiVendorCompInfo(param); + + // 헤더에 토큰 세팅 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", vendorCompInfo.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + JSONObject params = new JSONObject(); + params.put("parseUseYn", usdtObj.getString("parseUseYn")); + + String apiUrl = vendorCompInfo.getApiUrl() + "/parseUseUpdate"; + log.info(LOG_PREFIX+ "Url: " + apiUrl); + log.info(LOG_PREFIX+ "Params: " + params.toString()); + + Mono responseMono = webClient.post() + .uri(apiUrl) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params.toString()) + .retrieve() + .bodyToMono(String.class); + + String responseBody = responseMono.block(); // Blocking to get the response synchronously + + log.info(LOG_PREFIX+ "response : " + responseBody); + JSONObject jsonObj = new JSONObject(responseBody); + if("0".equals(jsonObj.getString("resultCode"))) { + JSONObject dataObj = jsonObj.getJSONObject("data"); + + apiResponse.put("currentUseYn", dataObj.getString("currentUseYn")); + apiResponse.success(); + } else { + throw new ApiException("1000", "accessDinied"); + } + + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-parseUseUpdate::"+tokenInfo.getSid()+":::"; + apiResponse = e.getApiResponse(); + + log.error(LOG_PREFIX+ "ApiException: " + e.toString()); + log.error(LOG_PREFIX+ "ApiException: " + apiResponse.toString()); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-parseUseUpdate::"+tokenInfo.getSid()+":::"; + e.printStackTrace(); + apiResponse.fail(); + + log.error(LOG_PREFIX+ "Exception: " + e.toString()); + log.error(LOG_PREFIX+ "Exception: " + apiResponse.toString()); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/chargingPointSettingInfo") + public ApiResponse chargingPointSettingInfo(HttpServletRequest request, @RequestHeader String token) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + log.info("[REQUEST: "+request.getRequestURI()+"] siteIdx: " + tokenInfo.getSidx()); + List List = commonService.getChargingPointSettingList(tokenInfo.getSidx()); + apiResponse.put("list", List); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/chargingPointSettingSave") + public ApiResponse chargingPointSettingSave(HttpServletRequest request, @RequestHeader String token, @RequestBody ChargingPointSettingVO settingVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + final String LOG_PREFIX = "#-admin::setting::chargingPointSettingSave::"+tokenInfo.getSid()+":::"; + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(settingVO); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + settingVO.setSiteIdx(tokenInfo.getSidx()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + settingVO); + int result = commonService.setChargingPointSettingSave(settingVO); + + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", tokenInfo.getSid()+"::업체 이벤트 보너스 포인트 기본세팅 수정"); + logParam.put("logDesc", settingVO.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/betLimit") + public ApiResponse lBetlimit(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + SiteSearch search = new SiteSearch(); + search.setSiteId(tokenInfo.getSid()); + + List lblList = commonService.getLbetLimitList(search); + apiResponse.put("list", lblList); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/betLimitSave") + public ApiResponse lBetlimitSave(@RequestHeader String token, HttpServletRequest request, @RequestBody LevelBetLimit betLimit) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + final String LOG_PREFIX = "#-admin::setting::lBetlimitSave::"+tokenInfo.getSid()+":::"; + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(betLimit); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + betLimit.setSiteId(tokenInfo.getSid()); + commonService.setLbetLimitList(betLimit); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/siteCashBonusSettingInfo") + public ApiResponse siteCashBonusSettingInfo(HttpServletRequest request, @RequestHeader String token) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + log.info("[REQUEST: "+request.getRequestURI()+"] siteIdx: " + tokenInfo.getSidx()); + List List = commonService.getSiteCashBonusSettingList(tokenInfo.getSidx()); + apiResponse.put("list", List); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/siteCashBonusSettingSave") + public ApiResponse siteCashBonusSettingSave(HttpServletRequest request, @RequestHeader String token, @RequestBody SiteCashBonusSettingVO settingVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + final String LOG_PREFIX = "#-admin::setting::chargingPointSettingSave::"+tokenInfo.getSid()+":::"; + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(settingVO); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + settingVO.setSiteIdx(tokenInfo.getSidx()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + settingVO); + int result = commonService.setSiteCashBonusSettingSave(settingVO); + + try{ + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", tokenInfo.getSid()+"::업체 입금 보너스 포인트 기본세팅 수정"); + logParam.put("logDesc", settingVO.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/account") + public ApiResponse laccount(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + List lbList = commonService.getLbList(search); + + apiResponse.put("list", lbList); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/accountSave") + public ApiResponse accountSave(@RequestHeader String token, HttpServletRequest request, @RequestBody LevelBank levelBank ) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + final String LOG_PREFIX = "#-admin::setting::accountSave::"+tokenInfo.getSid()+":::"; + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(levelBank); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + levelBank.setSiteId(tokenInfo.getSid()); + + commonService.accountSave(levelBank); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/failPoint") + public ApiResponse failPoint(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + search.setSiteId(tokenInfo.getSid()); + List failPointList = commonService.getFailPointList(search); + + apiResponse.put("list", failPointList); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/failPointSave") + public ApiResponse failPointSave(@RequestHeader String token, HttpServletRequest request, @RequestBody LevelFailPoint failPoint) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + failPoint.setSiteId(tokenInfo.getSid()); + commonService.failPointSave(failPoint); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/domain") + public ApiResponse lDomain(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + List domainList = commonService.getDomainList(search); + apiResponse.put("list", domainList); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/domainSave") + public ApiResponse domainSave(@RequestHeader String token, HttpServletRequest request, @RequestBody LevelDomain domain) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + domain.setSiteId(tokenInfo.getSid()); + commonService.domainSave(domain); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/outPwd") + public ApiResponse outPwd(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + List outPwdList = commonService.getOutPwdList(search); + apiResponse.put("list", outPwdList); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/level/outPwdSave") + public ApiResponse outPwdSave(@RequestHeader String token, HttpServletRequest request, @RequestBody LevelOutPwd outPwd) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + outPwd.setSiteId(tokenInfo.getSid()); + commonService.outPwdSave(outPwd); + + + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/banner") + public ApiResponse banner(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + List bannerList = commonService.getBannerInfoList(search); + apiResponse.put("list", bannerList); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/bannerSave") + public ApiResponse bannerSave(@RequestHeader String token, HttpServletRequest request, @RequestBody Banner banner) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + +// log.info("### KHO ### - Banner: " + banner); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + banner.setSiteId(tokenInfo.getSid()); + + if(banner.getBannerType().equals("B")) { + banner.setLoginYn("N"); + } + + if(banner.getLoginYn() == null || "".equals(banner.getLoginYn())) { + banner.setLoginYn("N"); + } + + if(banner.getBannerContent() == null) { + banner.setBannerContent(""); + } + + if(banner.getDomain() == null) { + banner.setDomain(""); + } + + if(banner.getBannerPosition() == null) { + banner.setBannerPosition(""); + } + + if(banner.getBannerTitle() == null) { + banner.setBannerTitle(""); + } + + commonService.bannerSave(banner); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/notiBgmList") + public ApiResponse notiBgmList(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + SiteSearch search = new SiteSearch(); + search.setSiteId(tokenInfo.getSid()); + + List list = commonService.getNotiBgmList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/notiBgmSave") + public ApiResponse notiBgmSave(@RequestHeader String token, HttpServletRequest request, @RequestBody NotiBgmVo notiBgmVo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + notiBgmVo.setSiteId(tokenInfo.getSid()); + int result = commonService.setNotiBgmSave(notiBgmVo); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/logList"}) + public ApiResponse logList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody AdminLogSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = commonService.getAdminLogListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + }else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + System.out.println(search.getLimit()); + System.out.println(search.getOffset()); + List adminLogLis = commonService.getAdminLogList(search); + apiResponse.put("list", adminLogLis); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/block"}) + public ApiResponse block(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody BlockSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = commonService.getSiteBlockListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + System.out.println(search.getLimit()); + System.out.println(search.getOffset()); + + List adminLogLis = commonService.getSiteBlockList(search); + + apiResponse.put("list", adminLogLis); + apiResponse.success(); + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/blockSave"}) + public ApiResponse blockSave(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody Block block) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + block.setSiteId(tokenInfo.getSid()); + block.setRegId(tokenInfo.getSid()); + + + commonService.blockSave(block); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/admin"}) + public ApiResponse adminList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody AdminSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = commonService.getSiteAdminListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + }else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("#-adminSetting::adminList::" + search); + List adminList = commonService.getSiteAdminList(search); + apiResponse.put("list", adminList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/adminSave") + public ApiResponse adminSave(@RequestHeader String token, HttpServletRequest request, @RequestBody Admin admin) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + admin.setSiteIdx(tokenInfo.getSidx()); + admin.setSiteId(tokenInfo.getSid()); + admin.setRegId(tokenInfo.getMid()); + + log.info("#-adminSetting::adminSave::" + admin); + if(admin.getDelYn() == null || admin.getDelYn().equals("")) { + admin.setDelYn("N"); + } + + if(admin.getDelYn().equals("Y")) { + log.info("#-adminSetting::adminSave::DELETE_START"); + commonService.adminDelete(admin); + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "DELETE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", admin.getAdminId()+" 계정 삭제"); + logParam.put("logDesc", admin.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e){log.error("#-adminSetting::adminSave::" + e.toString());} + } else { + log.info("#-adminSetting::adminSave::" + "[ADMIN PWD:" + admin.getAdminPass() + "]"); + String password = passwordEncoder.encode(admin.getAdminPass()); + admin.setAdminPass(password); + log.info("#-adminSetting::adminSave::" + "[ADMIN PWD:" + admin.getAdminPass() + "]"); + + if(admin.getLoginYn() == null || admin.getLoginYn().equals("")) { + admin.setLoginYn("Y"); + } + if(admin.getSiteId().equals(admin.getAdminId())) { + log.error("#-adminSetting::adminSave::" + "siteId는 adminId와 같을 수 없습니다."); + throw new ApiException("1000", "accessDinied"); + } + log.info("#-adminSetting::adminSave::SAVE_START"); + commonService.adminSave(admin); + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", admin.getAdminId()+" 계정 생성,변경"); + logParam.put("logDesc", admin.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e){log.error("#-adminSetting::adminSave::" + e.toString());} + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/adminLogout"}) + public ApiResponse adminLogout(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody AdminSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!tokenInfo.getSid().equals(tokenInfo.getMid())) { + throw new ApiException("1001", "accessDinied11"); + } + + final String LOG_PREFIX = "#-admin::adminLogout::"+tokenInfo.getMid()+":::"; + log.info(LOG_PREFIX+ "AdminSearch : " + search); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", search.getAdminId()); + logParam.put("logType", "FORCELOGOUT"); + logParam.put("logoutYn", "N"); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", search.getAdminId()+"::관리자 강제 로그아웃"); + logParam.put("logDesc", ""); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/adminIp"}) + public ApiResponse adminIpList(@RequestHeader String token, HttpServletRequest request, @RequestBody AdminSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = commonService.getSiteAdminIpListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + log.info("#-adminSetting::adminIpList::" + search); + List adminLogLis = commonService.getSiteAdminIpList(search); + apiResponse.put("list", adminLogLis); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/adminIpSave") + public ApiResponse adminIpSave(@RequestHeader String token, HttpServletRequest request, @RequestBody AdminIp adminIp) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + adminIp.setSiteId(tokenInfo.getSid()); + adminIp.setRegId(tokenInfo.getMid()); + + if(adminIp.getAdminId() == null || adminIp.getAdminId().equals("")) { + throw new ApiException("IP01", "허용할 관리자 아이디를 입력하세요."); + } + + if(adminIp.getIp() == null || adminIp.getIp().equals("")) { + throw new ApiException("IP02", "허용할 아이피를 입력하세요."); + } + + log.info("#-adminSetting::adminIpSave::" + adminIp); + if(adminIp.getDelYn() == null || adminIp.getDelYn().equals("")) { + adminIp.setDelYn("N"); + } + + if(adminIp.getDelYn().equals("Y")) { + log.info("#-adminSetting::adminIpSave::DELETE_START"); + commonService.adminIpDelete(adminIp); + } else { + log.info("#-adminSetting::adminIpSave::SAVE_START"); + commonService.adminIpSave(adminIp); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/game/settingList") + public ApiResponse gameSettingList(@RequestHeader String token, HttpServletRequest request, @RequestBody GameSetting searchSetting) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Site search = new Site(); + search.setSiteId(tokenInfo.getSid()); + CompDetail comp = compService.getPartnerComp(search); + searchSetting.setSiteId(tokenInfo.getSid()); + searchSetting.setPartnerType(comp.getPartnerType()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + searchSetting); + List settingList = commonService.gameSettingList(searchSetting); + apiResponse.put("list", settingList); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/game/settingSave") + public ApiResponse gameSettingSave(@RequestHeader String token, HttpServletRequest request, @RequestBody GameSetting gameSetting) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + Site search = new Site(); + search.setSiteId(tokenInfo.getSid()); + CompDetail comp = compService.getPartnerComp(search); + + List settingList = gameSetting.getSettingItems(); + for(GameSettingItem item : settingList) { + item.setSiteId(tokenInfo.getSid()); + if("senior".equals(comp.getPartnerType())) { + item.setTopCompId(""); + } else { + item.setTopCompId(comp.getRecommenderId()); + } + } + + int result = commonService.gameSettingSave(settingList); + log.info("Insert game setting item result: " + result); + + if(result > 0) { + apiResponse.success(); + } else { + apiResponse.fail(); + } + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/siteCheckSave") + public ApiResponse siteCheckSave(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteCheckReq siteCheckReq) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + siteCheckReq.setSiteId(tokenInfo.getSid()); + siteCheckReq.setRegId(tokenInfo.getMid()); + + int result = 0; + + if(siteCheckReq.getIsEmergency() != null && siteCheckReq.getIsEmergency().equals("Y")) { + + SiteCheckReq param = new SiteCheckReq(); + param.setSiteId(tokenInfo.getSid()); + param.setSiteCheckYn("Y"); + commonService.changeSiteSettingCheckYn(param); + + log.info("#-siteCheckSave::"+tokenInfo.getSid()+"::SiteCheckReq: " + siteCheckReq); + result = 1; + } else { + if(siteCheckReq.getStartDate() == null || siteCheckReq.getStartDate().equals("")) { + throw new ApiException("SC29", "긴급점검이 아닐 경우 점검시간을 입력하세요."); + } + + if(siteCheckReq.getEndDate() == null || siteCheckReq.getEndDate().equals("")) { + throw new ApiException("SC29", "긴급점검이 아닐 경우 점검시간을 입력하세요."); + } + + DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date stDate = format.parse(siteCheckReq.getStartDate()); + Date edDate = format.parse(siteCheckReq.getEndDate()); + long sec = (edDate.getTime() - stDate.getTime()) / 1000; // 초 + log.info("#-siteCheckSave::"+tokenInfo.getSid() + "::sec : " + sec); + if(sec <= 0) { + throw new ApiException("SC39", "점검종료시간 확인"); + } + + int checkCnt = commonService.getSiteCheckCount(siteCheckReq); + if(checkCnt > 0) { + throw new ApiException("SC19", "점검시간 중복입니다. 확인 후 다시 요청하세요."); + } + + if(siteCheckReq.getContents() == null || siteCheckReq.getContents().equals("")) { + siteCheckReq.setContents(""); + } + + log.info("#-siteCheckSave::"+tokenInfo.getSid()+"::SiteCheckReq: " + siteCheckReq); + result = commonService.siteCheckSave(siteCheckReq); + } + + if(result > 0) { + apiResponse.success(); + } else { + throw new ApiException("SC99", "Site check save error"); + } + + } catch(ApiException e) { + apiResponse = e.getApiResponse(); + log.error("#-siteCheckSave::"+siteCheckReq.getSiteId()+"::apiResponse: " + apiResponse); + } catch (Exception e) { + log.error("#-siteCheckSave::"+siteCheckReq.getSiteId()+"::Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/siteCheckList") + public ApiResponse siteCheckList(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteCheckReq siteCheckReq) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + siteCheckReq.setSiteId(tokenInfo.getSid()); + log.info("#-siteCheckList::"+tokenInfo.getSid()+"::SiteCheckReq: " + siteCheckReq); + List list = commonService.siteCheckList(siteCheckReq); + apiResponse.put("list", list); + + SiteSearch search = new SiteSearch(); + search.setSiteId(tokenInfo.getSid()); + SiteOption option = commonService.getSiteSetting(search); + apiResponse.put("siteCheckYn", option.getSiteCheckYn()); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/siteCheckDetail") + public ApiResponse siteCheckDetail(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteCheckReq siteCheckReq) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + siteCheckReq.setSiteId(tokenInfo.getSid()); + log.info("#-siteCheckDetail::"+tokenInfo.getSid()+"::SiteCheckReq: " + siteCheckReq); + HashMap detail = commonService.siteCheckDetail(siteCheckReq); + apiResponse.put("detail", detail); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/siteCheckOff") + public ApiResponse siteCheckOff(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + SiteCheckReq siteCheckReq = new SiteCheckReq(); + siteCheckReq.setSiteId(tokenInfo.getSid()); + HashMap detail = commonService.siteCheckInfo(siteCheckReq); + if(detail == null || detail.get("siteCheckIdx") == null) { + siteCheckReq.setSiteCheckYn("N"); + log.info("#-siteCheckOff::"+tokenInfo.getSid()+"::SiteCheckReq: " + siteCheckReq); + commonService.changeSiteSettingCheckYn(siteCheckReq); + } else { + int siteCheckIdx = (int) detail.get("siteCheckIdx"); + siteCheckReq.setSiteCheckIdx(siteCheckIdx); + siteCheckReq.setRegId(tokenInfo.getMid()); + siteCheckReq.setIsCheckOff("Y"); + siteCheckReq.setSiteCheckYn("N"); + log.info("#-siteCheckOff::"+tokenInfo.getSid()+"::SiteCheckReq: " + siteCheckReq); + commonService.changeSiteCheckOff(siteCheckReq); + commonService.changeSiteSettingCheckYn(siteCheckReq); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/siteCheckOffByIdx") + public ApiResponse siteCheckOffByIdx(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteCheckReq siteCheckReq) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(siteCheckReq.getSiteCheckIdx() == null) { + throw new ApiException("SC99", "site check idx is not null"); + } + siteCheckReq.setSiteId(tokenInfo.getSid()); + siteCheckReq.setRegId(tokenInfo.getMid()); + siteCheckReq.setIsCheckOff("Y"); + siteCheckReq.setSiteCheckYn("N"); + log.info("#-siteCheckOff::"+tokenInfo.getSid()+"::SiteCheckReq: " + siteCheckReq); + commonService.changeSiteCheckOff(siteCheckReq); + commonService.changeSiteSettingCheckYn(siteCheckReq); + + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/domainPartnerList") + public ApiResponse domainPartnerList(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + DomainPartnerVO domainPartnerVO = new DomainPartnerVO(); + domainPartnerVO.setSiteIdx(tokenInfo.getSidx()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + domainPartnerVO); + + List> domainList = commonService.getDomainPartnerList(domainPartnerVO); + apiResponse.put("domainList", domainList); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/domainPartnerSave") + public ApiResponse domainPartnerSave(@RequestHeader String token, HttpServletRequest request, @RequestBody DomainPartnerVO domainPartnerVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + domainPartnerVO.setSiteIdx(tokenInfo.getSidx()); + domainPartnerVO.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + domainPartnerVO); + Member member = new Member(); + member.setSiteId(tokenInfo.getSid()); + member.setMemId(domainPartnerVO.getMemId()); + MemberDetail partner = userService.getMember(member); + if(partner == null) { + throw new ApiException("S1000", "파트너 아이디가 존재하지 않습니다."); + } + + if(partner.getIsPartnerMember().equals("N")) { + throw new ApiException("S1001", "파트너 아이디만 등록 가능합니다."); + } + + if(partner.getRecommendYn().equals("N")) { + throw new ApiException("S1002", "추천 가능 상태가 아닙니다."); + } + + if(partner.getMemLockYn().equals("Y") || partner.getMemBlackYn().equals("Y") || partner.getMemDelYn().equals("Y")) { + throw new ApiException("S1003", "[정지][블랙][삭제] 상태의 파트너는 등록할 수 없습니다."); + } + + commonService.domainPartnerSave(domainPartnerVO); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/domainPartnerDelete") + public ApiResponse domainPartnerDelete(@RequestHeader String token, HttpServletRequest request, @RequestBody DomainPartnerVO domainPartnerVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + domainPartnerVO.setSiteIdx(tokenInfo.getSidx()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + domainPartnerVO); + if(domainPartnerVO.getDomain() == null || domainPartnerVO.getDomain().equals("")) { + throw new ApiException("S1004", "domain is not null"); + } + + commonService.domainPartnerDelete(domainPartnerVO); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } +} diff --git a/src/main/java/com/bb/admin/controller/AdminSuperController.java b/src/main/java/com/bb/admin/controller/AdminSuperController.java new file mode 100644 index 0000000..414824b --- /dev/null +++ b/src/main/java/com/bb/admin/controller/AdminSuperController.java @@ -0,0 +1,527 @@ +package com.bb.admin.controller; + +import java.util.HashMap; +import java.util.List; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberInsert; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberRate; +import com.bb.model.PageFormVO; +import com.bb.model.PartnerListVO; +import com.bb.model.RetailSearch; +import com.bb.service.CommonService; +import com.bb.service.CompService; +import com.bb.service.RetailService; +import com.bb.service.SuperService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.bb.util.StringUtils; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/super") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class AdminSuperController { + + private final SuperService superService; + + private final JwtManager jwtManager; + + private final CommonService commonService; + + private final UserService userService; + + private final CompService compService; + + private final RetailService retailService; + + private final PasswordEncoder passwordEncoder; + + private final String ISSUER = "super.oms-admin.com"; + + @ResponseBody + @PostMapping(value = "/addCompany") + public ApiResponse addCompany(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberInsert signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + String createSiteId = signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase(); + final String LOG_PREFIX = "#-admin::addCompany::" + createSiteId + "::::"; + + signupMember.setSiteId(createSiteId); + signupMember.setMemId(createSiteId); + signupMember.setAdminId(createSiteId); + System.out.print(tokenInfo.getMid()); + System.out.print(signupMember.getMemId()); + signupMember.setMemLevel("99"); + signupMember.setPartnerLevel("COMP"); + signupMember.setMemStatus("1"); + signupMember.setRecommenderId(""); + signupMember.setPartnerType("senior"); + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info("[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getMemId()); + checkMember.setMemId(signupMember.getMemId()); + checkMember.setRecommenderId(signupMember.getRecommenderId()); + /* + * int idCheck = userService.idCheck(checkMember); if(idCheck>0) { throw new + * ApiException("SC005", "idCheck"); } + */ + + int idCheckByAdmin = userService.idCheckByAdmin(checkMember); + if (idCheckByAdmin > 0) { + throw new ApiException("U005", "idCheckByAdmin"); + } + + int nameCheck = userService.nameCheck(checkMember); + if (nameCheck > 0) { + throw new ApiException("SC006", "nameCheck"); + } + + int adminCheck = userService.adminCheck(signupMember.getSiteId()); + if (nameCheck > 0) { + throw new ApiException("SC007", "Super admin account duplication"); + } + + log.info("##-SUPER addCompany() -## [REQUEST: " + request.getRequestURI() + "] " + signupMember); + int result = userService.adminSignUp(LOG_PREFIX, signupMember, passwordEncoder); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getSiteId() + "::슈퍼관리자 업체 생성"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + Member search = new Member(); + search.setMemId(signupMember.getMemId()); + search.setSiteId(signupMember.getMemId()); + search.setPartnerLevel("COMP"); + + if (signupMember.getRateList() != null) { + MemberRate rateparam = new MemberRate(); + rateparam.setMemId(signupMember.getMemId()); + rateparam.setRateList(signupMember.getRateList()); + + userService.getMemberRateUpdate(search, rateparam); + userService.getMemberbetYnUpdate(search, rateparam); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getSiteId() + "::슈퍼관리자 업체 생성 요율 세팅"); + logParam.put("logDesc", rateparam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + } + + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/updateRate") + public ApiResponse updateRate(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberRate memberRate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // System.out.println("ddd" + request.getAttribute("Authorization").toString()); + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + Member search = new Member(); + search.setMemId(memberRate.getMemId()); + search.setSiteId(memberRate.getSiteId()); + + MemberDetail member = userService.getMember(search); + if (member == null) { + throw new ApiException("U003", "unknown user"); + } + + search.setPartnerLevel(member.getPartnerLevel()); + + userService.getMemberRateUpdate(search, memberRate); + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", memberRate.getMemId() + "::슈퍼관리자 요율 변경"); + logParam.put("logDesc", memberRate.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/addUser") + public ApiResponse addUser(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberInsert signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-super::join::"; + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || tokenInfo.getType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + LOG_PREFIX = LOG_PREFIX + signupMember.getSiteId() + "::" + signupMember.getMemId() + "::::"; + + signupMember.setPartnerType(""); + signupMember.setMemStatus("1"); + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info("[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + + signupMember.setPartnerLevel("NORMAL"); + + signupMember.setRecommendYn("N"); + signupMember.setPointExchangeYn("Y"); + signupMember.setRollingYn("Y"); + signupMember.setCashSendYn("N"); + signupMember.setCashReceiveYn("N"); + + signupMember.setNationCode(""); + signupMember.setPartSendYn("N"); + signupMember.setMaxCredit(""); + signupMember.setCreditRate(""); + signupMember.setCreditStatus(""); + + if (signupMember.getRecommenderId() == null || signupMember.getRecommenderId().equals("")) { + throw new ApiException("U097", "추천인 계정을 입력해주세요."); + } + + String refer = request.getHeader("Referer"); + String domain = "unknown"; + if (refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + domain = urls[2]; + log.info(LOG_PREFIX + "::domain::" + domain + "::recommandId::" + signupMember.getRecommenderId()); + } + signupMember.setJoinDomain(domain); + + Member recommendUser = new Member(); + recommendUser.setSiteId(signupMember.getSiteId()); + recommendUser.setMemId(signupMember.getRecommenderId()); + MemberDetail partner = userService.getMember(recommendUser); + + if (partner == null) { + throw new ApiException("U096", "존재하지 않는 추천인 계정입니다."); + } + + if (partner.getPartnerLevel().equals("COMP") || partner.getPartnerLevel().equals("AUTO") + || partner.getPartnerLevel().equals("NORMAL")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if (partner.getRecommendYn().equals("N")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if (!partner.getMemStatus().equals("1")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + checkMember.setMemId(signupMember.getMemId()); + checkMember.setRecommenderId(signupMember.getRecommenderId()); + checkMember.setMemName(signupMember.getMemName()); + checkMember.setMemNick(signupMember.getMemNick()); + + int idCheck = userService.idCheck(checkMember); + if (idCheck > 0) { + throw new ApiException("U005", "idCheck"); + } + /* + * int idCheckByAdmin =userService.idCheckByAdmin(checkMember); + * if(idCheckByAdmin>0) { throw new ApiException("U005", "idCheckByAdmin"); } + */ + int nameCheck = userService.nameCheck(checkMember); + if (nameCheck > 0) { + throw new ApiException("U006", "nameCheck"); + } + + if (signupMember.getSiteId().equals(signupMember.getRecommenderId())) { + throw new ApiException("U099", "recommenderIdCheck"); + } + + log.info("Insert Member:" + signupMember); + userService.adminJoin(signupMember); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CREATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getMemId() + "::슈퍼관리자 회원 생성"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + Member search = new Member(); + search.setSiteId(signupMember.getSiteId()); + search.setMemId(signupMember.getMemId()); + search.setPartnerLevel("NORMAL"); + + try { + if (signupMember.getRateList() != null) { + MemberRate rateparam = new MemberRate(); + rateparam.setMemId(signupMember.getMemId()); + rateparam.setRateList(signupMember.getRateList()); + + userService.getMemberRateUpdate(search, rateparam); + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", signupMember.getMemId() + "::슈퍼관리자 회원 생성 요율 세팅"); + logParam.put("logDesc", rateparam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + } + + } catch (Exception eee) { + } + + apiResponse.success(); + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/memberList" }) + public ApiResponse memberList(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo = new PageFormVO(); + if (search.getPage() == 0) + search.setPage(1); + search.setPartnerType(""); + search.setSiteId(search.getSiteId()); + HashMap totalInfo = userService.getMemberListCnt(search); + + int totalCount = Integer.parseInt(totalInfo.get("totalCnt").toString()); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if (search.getCount_per_list() == 0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + System.out.println(search.getLimit()); + System.out.println(search.getOffset()); + List memList = userService.getMemberList(search); + apiResponse.put("list", memList); + apiResponse.put("totalInfo", totalInfo); + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/retailList" }) + public ApiResponse retailList(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo = new PageFormVO(); + if (search.getPage() == 0) + search.setPage(1); + + search.setSiteId(search.getSiteId()); + + int totalCount = retailService.getRetailListCnt2(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if (search.getCount_per_list() == 0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List list = retailService.getRetailList2(search); + apiResponse.put("list", list); + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + +} diff --git a/src/main/java/com/bb/admintop/controller/SuperApiCompController.java b/src/main/java/com/bb/admintop/controller/SuperApiCompController.java new file mode 100644 index 0000000..b098f3c --- /dev/null +++ b/src/main/java/com/bb/admintop/controller/SuperApiCompController.java @@ -0,0 +1,996 @@ +package com.bb.admintop.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.CodeSearch; +import com.bb.model.CompResetInfo; +import com.bb.model.Member; +import com.bb.model.MemberInsert; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberRate; +import com.bb.model.MenuVO; +import com.bb.model.PageFormVO; +import com.bb.model.PartnerCompInfo; +import com.bb.model.SiteSearch; +import com.bb.service.CommonService; +import com.bb.service.CompService; +import com.bb.service.SuperService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/super/company") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class SuperApiCompController { + + private final SuperService superService; + + private final JwtManager jwtManager; + + private final CommonService commonService; + + private final UserService userService; + + private final CompService compService; + + private final PasswordEncoder passwordEncoder; + + @ResponseBody + @PostMapping(value = "/addCompany") + public ApiResponse addCompany(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberInsert signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + String createSiteId = signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase(); + final String LOG_PREFIX = "#-super::addCompany::" + createSiteId + "::::"; + + signupMember.setMemId(createSiteId); + signupMember.setSiteId(createSiteId); + signupMember.setAdminId(createSiteId); + signupMember.setMemLevel("99"); + signupMember.setPartnerLevel("COMP"); + signupMember.setMemStatus("1"); + signupMember.setRecommenderId(""); + signupMember.setPartnerType("senior"); + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info(LOG_PREFIX + "[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getMemId()); + checkMember.setMemId(signupMember.getMemId()); + checkMember.setRecommenderId(signupMember.getRecommenderId()); + + /* + * int idCheck = userService.idCheck(checkMember); if(idCheck>0) { throw new + * ApiException("SC005", "idCheck"); } + */ + + int idCheckByAdmin = userService.idCheckByAdmin(checkMember); + if (idCheckByAdmin > 0) { + log.error(LOG_PREFIX + "idCheckByAdmin"); + throw new ApiException("U005", "idCheckByAdmin"); + } + + int nameCheck = userService.nameCheck(checkMember); + if (nameCheck > 0) { + log.error(LOG_PREFIX + "nameCheck"); + throw new ApiException("SC006", "nameCheck"); + } + + int adminCheck = userService.adminCheck(signupMember.getSiteId()); + if (nameCheck > 0) { + log.error(LOG_PREFIX + "Super admin account duplication"); + throw new ApiException("SC007", "Super admin account duplication"); + } + + log.info(LOG_PREFIX + "Company::" + signupMember); + int result = userService.adminSignUp(LOG_PREFIX, signupMember, passwordEncoder); + log.info(LOG_PREFIX + "adminSignUp result::" + result); + if (result == 0) { + log.error(LOG_PREFIX + "site prefix check"); + throw new ApiException("SP99", "site prefix check"); + } + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "save"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiCompController.addCompany() => UserService.adminSignUp()"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + log.error(LOG_PREFIX + "insertAdminlog Exception::" + e.toString()); + } + + Member search = new Member(); + search.setMemId(signupMember.getMemId()); + search.setSiteId(signupMember.getMemId()); + search.setPartnerLevel("COMP"); + + if (signupMember.getRateList() != null) { + log.info(LOG_PREFIX + "RateList::" + signupMember.getRateList()); + MemberRate rateparam = new MemberRate(); + rateparam.setMemId(signupMember.getMemId()); + rateparam.setRateList(signupMember.getRateList()); + + userService.getMemberRateUpdate(search, rateparam); + log.info(LOG_PREFIX + "getMemberRateUpdate::End"); + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "save"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiCompController.addCompany() => UserService.getMemberRateUpdate()"); + logParam.put("logDesc", rateparam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + log.error(LOG_PREFIX + "insertAdminlog Exception::" + e.toString()); + } + + userService.getMemberbetYnUpdate(search, rateparam); + log.info(LOG_PREFIX + "getMemberbetYnUpdate::End"); + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "save"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", + "SuperApiCompController.addCompany() => UserService.getMemberbetYnUpdate()"); + logParam.put("logDesc", rateparam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + log.error(LOG_PREFIX + "insertAdminlog Exception::" + e.toString()); + } + } + + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/detail") + public ApiResponse detail(@RequestHeader String token, HttpServletRequest request, @RequestBody SiteSearch search) + throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + + HashMap compInfo = compService.getCompInfoForDetail(search); + HashMap settingInfo = compService.getSettingInfoForDetail(search); + HashMap compStats = compService.getCompStatsForDetail(search); + List topCompList = compService.getTopCompListForDetail(search); + List botCompList = compService.getBotCompListForDetail(search); + CodeSearch codesSearch = new CodeSearch(); + codesSearch.setSiteId(search.getSiteId()); + List gameList = commonService.getGameCodesForSuper(codesSearch); + HashMap param = new HashMap<>(); + param.put("siteId", search.getSiteId()); + param.put("isSuper", "N"); + List menuList = commonService.getMenuList(param); + + codesSearch.setMasterCode("vendorComp"); + List vendorCompList = commonService.getCodeList(codesSearch); + + apiResponse.put("topCompId", compInfo.get("topCompId")); + apiResponse.put("compInfo", compInfo); + apiResponse.put("settingInfo", settingInfo); + apiResponse.put("compStats", compStats); + apiResponse.put("topCompList", topCompList); + apiResponse.put("botCompList", botCompList); + apiResponse.put("gameList", gameList); + apiResponse.put("menuList", menuList); + apiResponse.put("vendorCompList", vendorCompList); + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/modify/compInfo") + public ApiResponse modifyCompInfo(@RequestHeader String token, HttpServletRequest request, + @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (compInfo.getTopCompId() == null) { + throw new ApiException("SC999", "상위 컴퍼니 아이디 누락"); + } + + if (compInfo.getPassword() != null && !compInfo.getPassword().equals("")) { + String password = passwordEncoder.encode(compInfo.getPassword()); + log.info("[ADMIN PWD:" + password + "]"); + compInfo.setPassword(password); + } + + if (compInfo.getSiteDomain() == null) { + compInfo.setSiteDomain(""); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + compInfo); + int result = compService.modifyCompInfo(compInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiCompController.modifyCompInfo() => CompService.modifyCompInfo()"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + if (result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "회사정보 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + + apiResponse.success(); + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/modify/apiSetting") + public ApiResponse updateApiSetting(@RequestHeader String token, HttpServletRequest request, + @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (compInfo.getSiteId() == null || compInfo.getSiteId().equals("")) { + throw new ApiException("SS99", "Not Found siteId"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + compInfo); + int result = compService.updateApiSetting(compInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiCompController.updateApiSetting() => CompService.updateApiSetting()"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + if (result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "회사정보 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + + apiResponse.success(); + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/modify/siteSettings") + public ApiResponse modifySiteSettings(@RequestHeader String token, HttpServletRequest request, + @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (compInfo.getTopCompId() == null) { + throw new ApiException("SC999", "상위 컴퍼니 아이디 누락"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + compInfo); + int result = compService.modifySiteSettings(compInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", + "SuperApiCompController.modifySiteSettings() => CompService.modifySiteSettings()"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + if (result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "사이트 기능 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/modify/creditSettings") + public ApiResponse modifyCreditSettings(@RequestHeader String token, HttpServletRequest request, + @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (compInfo.getTopCompId() == null) { + throw new ApiException("SC999", "상위 컴퍼니 아이디 누락"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + compInfo); + int result = compService.modifyCreditSettings(compInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", + "SuperApiCompController.modifyCreditSettings() => CompService.modifyCreditSettings()"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + if (result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "PT 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/modify/creditRates") + public ApiResponse modifyCompCreditRates(@RequestHeader String token, HttpServletRequest request, + @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (compInfo.getTopCompId() == null) { + throw new ApiException("SC999", "상위 컴퍼니 아이디 누락"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + compInfo); + int result = compService.modifyCompCreditRates(compInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", + "SuperApiCompController.modifyCompCreditRates() => CompService.modifyCompCreditRates()"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + if (result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "게임별 PT수수료율 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/modify/gameSettings") + public ApiResponse modifyGameSettings(@RequestHeader String token, HttpServletRequest request, + @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (compInfo.getTopCompId() == null) { + throw new ApiException("SC999", "상위 컴퍼니 아이디 누락"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + compInfo); + int result = compService.modifySiteGameSettingForSuper(compInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", + "SuperApiCompController.modifyGameSettings() => CompService.modifySiteGameSettingForSuper()"); + logParam.put("logDesc", compInfo.toString()); + + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + if (result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "배팅 가능유/무 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/modify/menuSettings") + public ApiResponse modifyMenuSettings(@RequestHeader String token, HttpServletRequest request, + @RequestBody PartnerCompInfo compInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (compInfo.getTopCompId() == null) { + throw new ApiException("SC999", "상위 컴퍼니 아이디 누락"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + compInfo); + int result = compService.modifyMenuSettings(compInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", + "SuperApiCompController.modifyMenuSettings() => CompService.modifyMenuSettings()"); + logParam.put("logDesc", compInfo.toString()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + if (result > 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP009", "배팅 가능유/무 설정에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/detail/siteIds") + public ApiResponse getSiteIds(@RequestHeader String token, HttpServletRequest request, + @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + List> compIdList = compService.getCompIdList(search); + apiResponse.put("siteIds", compIdList); + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/detail/siteGameInfo") + public ApiResponse getSiteGameInfo(@RequestHeader String token, HttpServletRequest request, + @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + List gameList = compService.getSiteGameInfo(search); + + apiResponse.put("gameList", gameList); + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/detail/siteMenuInfo") + public ApiResponse getSiteMenuInfo(@RequestHeader String token, HttpServletRequest request, + @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + HashMap param = new HashMap<>(); + List menuList = compService.getSiteMenuInfo(search); + + apiResponse.put("menuList", menuList); + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/detail/otpInfo") + public ApiResponse getSiteAdminOTPInfo(@RequestHeader String token, HttpServletRequest request, + @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + if (search.getSiteId() == null || search.getSiteId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + List> adminOtpList = compService.getAdminOtpInfoList(search.getSiteId()); + apiResponse.put("adminOtpList", adminOtpList); + + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/reset") + public ApiResponse reset(@RequestHeader String token, HttpServletRequest request, + @RequestBody CompResetInfo compResetInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (compResetInfo.getSiteId() == null || compResetInfo.getSiteId().equals("")) { + throw new ApiException("SS99", "Not Found siteId"); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] [SUPER_ADMIN reset("+compResetInfo.getSiteId()+")] " + compResetInfo); + int result = compService.resetComp(compResetInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiCompController.reset() => CompService.resetComp()"); + logParam.put("logDesc", compResetInfo.toString()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + if (result == 0) { + apiResponse.success(); + } else { + throw new ApiException("COMP010", "사이트 초기화에 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] [SUPER_ADMIN reset("+compResetInfo.getSiteId()+")] END..."); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/deleteUsers") + public ApiResponse deleteUsers(@RequestHeader String token, HttpServletRequest request, + @RequestBody CompResetInfo compResetInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (compResetInfo.getSiteId() == null || compResetInfo.getSiteId().equals("")) { + throw new ApiException("SS99", "Not Found siteId"); + } + + final String LOG_PREFIX = "#super::deleteUsers::" + compResetInfo.getSiteId() + "::::"; + compResetInfo.setMemIds(compResetInfo.getMemIds().trim()); + + log.info(LOG_PREFIX + "[REQUEST: " + request.getRequestURI() + "] delete()::" + compResetInfo); + // User check + List memIdList = Arrays.asList(compResetInfo.getMemIds().split(",")); + if (memIdList.size() > 10) { + throw new ApiException("DU03", "User list size over"); + } + compResetInfo.setMemIdList(memIdList); + + List> memList = userService.delCheckMemList(compResetInfo); + for (HashMap mem : memList) { + String memId = mem.get("memId").toString(); + // String partnerLevel = mem.get("partnerLevel").toString(); + int botCnt = Integer.parseInt(mem.get("botCnt").toString()); + /* + * if(!"NORMAL".equals(partnerLevel)) { throw new ApiException("DU01", + * "["+memId+"] is not normal user"); } + */ + if (botCnt != 0) { + throw new ApiException("DU02", "[" + memId + "] has a bottom user(" + botCnt + ")"); + } + } + + // Delete user + int result = userService.deleteUsers(LOG_PREFIX, compResetInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiUserController.delete() => UserService.deleteUsers()"); + logParam.put("logDesc", compResetInfo.toString()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + log.error(LOG_PREFIX + "insertAdminlog Exception::" + e.toString()); + } + + if (result >= 0) { + apiResponse.success(); + } else { + throw new ApiException("DU91", "유저 영구삭제 중 문제가 발생하였습니다. 관리자에게 문의하세요."); + } + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#super:memberDelete::" + compResetInfo.getSiteId() + "::::"; + log.error(LOG_PREFIX + "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#super:memberDelete::" + compResetInfo.getSiteId() + "::::"; + log.error(LOG_PREFIX + "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/statistics" }) + public ApiResponse statistics(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo = new PageFormVO(); + int totalCount = superService.getCompanyListCnt(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if (search.getCount_per_list() == 0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List cashList = superService.getCompanyList(search); + apiResponse.put("list", cashList); + + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + +} diff --git a/src/main/java/com/bb/admintop/controller/SuperApiController.java b/src/main/java/com/bb/admintop/controller/SuperApiController.java new file mode 100644 index 0000000..670a333 --- /dev/null +++ b/src/main/java/com/bb/admintop/controller/SuperApiController.java @@ -0,0 +1,583 @@ +package com.bb.admintop.controller; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtClame; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.CodeSearch; +import com.bb.model.OTPInfo; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.TOtpVO; +import com.bb.service.CommonService; +import com.bb.service.CompService; +import com.bb.service.SuperService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.TOTPTokenGenerator; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/super") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class SuperApiController { + + private final SuperService superService; + + private final JwtManager jwtManager; + + private final CommonService commonService; + + private final UserService userService; + + private final CompService compService; + + private final PasswordEncoder passwordEncoder; + + private final String ISSUER = "super.oms-admin.com"; + + @ResponseBody + @PostMapping(value = "/login") + public ApiResponse admonLogin(HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String loginAdminId = search.getSiteId(); + final String LOG_PREFIX = "#-super::login::" + loginAdminId + "::::"; + String logDesc = ""; + + try { + String adminOtpYN = compService.getAdminOtpUseYN(search.getSiteId()); + + if (adminOtpYN.equals("Y")) { + // OTP Login = Y + apiResponse.put("useOtp", adminOtpYN); + if (search.getOtp() == null || "".equals(search.getOtp())) { + log.error(LOG_PREFIX + "ApiException::5000::OTP 번호를 입력하세요."); + throw new ApiException("5000", "OTP 번호를 입력하세요."); + } + + // Check OTP + String account = search.getSiteId(); + int otpNum = 0; + try { + otpNum = Integer.parseInt(search.getOtp()); + } catch (NumberFormatException ne) { + log.error(LOG_PREFIX + "ApiException::4000::OTP 번호는 숫자 형식입니다."); + throw new ApiException("4000", "OTP 번호는 숫자 형식입니다."); + } + + OTPInfo otpInfo = compService.getOtpInfo(account); + if (otpInfo == null || otpInfo.getAccount().equals("")) { + log.error(LOG_PREFIX + "ApiException::6000::OTP 정보를 찾을 수 없습니다."); + throw new ApiException("6000", "OTP 정보를 찾을 수 없습니다."); + } + log.info(LOG_PREFIX + "OTP Info : " + otpInfo); + String secret = otpInfo.getSecretKey(); + + // long l = new Date().getTime(); + // long ll = l / 30000; + // boolean chkOtp = TOTPTokenGenerator.check_code(secret, otpNum, ll); + boolean chkOtp = TOTPTokenGenerator.otpVerify(secret, otpNum); + if (chkOtp) { + apiResponse.put("useOtp", "Y"); + + String password = passwordEncoder.encode(search.getSitePass()); + log.info(LOG_PREFIX + "[ADMIN PWD:" + password + "]"); + HashMap admininfo = userService.adminSuperLogin(search); + + boolean chkPassword = passwordEncoder.matches(search.getSitePass(), + admininfo.get("adminPass").toString()); + log.info(LOG_PREFIX + "[ADMIN chkPassword:" + chkPassword + "]"); + + if (!chkPassword) { + log.error(LOG_PREFIX + "ApiException::2000::no site"); + throw new ApiException("2000", "no site"); + } + + // ipchck + Map ipParam = new HashMap(); + ipParam.put("adminId", admininfo.get("adminId").toString()); + ipParam.put("ip", IPKit.getIpAddressByRequest(request)); + apiResponse.put("site", admininfo); + + JwtClame jwtinfo = new JwtClame(); + jwtinfo.setSiteIdx(0); + jwtinfo.setMemIdx(0); + jwtinfo.setSiteId(admininfo.get("adminId").toString()); + jwtinfo.setMemId(admininfo.get("adminId").toString()); + jwtinfo.setType("super"); + String tok = jwtManager.generateToken(jwtinfo); + apiResponse.put("token", tok); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", admininfo.get("adminId").toString()); + logParam.put("memId", admininfo.get("adminId").toString()); + logParam.put("logType", "SUPERLOGIN"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "로그인"); + logParam.put("logDesc", logParam.toString()); + logParam.put("regId", admininfo.get("adminId").toString()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", tok); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + } else { + // TODO: 잘못된 OTP번호 + log.error(LOG_PREFIX + "ApiException::3000::OTP 번호가 일치하지 않습니다."); + throw new ApiException("3000", "OTP 번호가 일치하지 않습니다."); + } + } else { + // OTP Login = N + apiResponse.put("useOtp", adminOtpYN); + + String password = passwordEncoder.encode(search.getSitePass()); + log.info(LOG_PREFIX + "[ADMIN PWD:" + password + "]"); + HashMap admininfo = userService.adminSuperLogin(search); + + boolean chkPassword = passwordEncoder.matches(search.getSitePass(), + admininfo.get("adminPass").toString()); + log.info(LOG_PREFIX + "[ADMIN chkPassword:" + chkPassword + "]"); + + if (!chkPassword) { + log.error(LOG_PREFIX + "ApiException::2000::no site"); + throw new ApiException("2000", "no site"); + } + + // ipchck + Map ipParam = new HashMap(); + ipParam.put("adminId", admininfo.get("adminId").toString()); + ipParam.put("ip", IPKit.getIpAddressByRequest(request)); + apiResponse.put("site", admininfo); + + JwtClame jwtinfo = new JwtClame(); + jwtinfo.setSiteIdx(0); + jwtinfo.setMemIdx(0); + jwtinfo.setSiteId(admininfo.get("adminId").toString()); + jwtinfo.setMemId(admininfo.get("adminId").toString()); + jwtinfo.setType("super"); + String tok = jwtManager.generateToken(jwtinfo); + apiResponse.put("token", tok); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", admininfo.get("adminId").toString()); + logParam.put("memId", admininfo.get("adminId").toString()); + logParam.put("logType", "SUPERLOGIN"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "로그인"); + logParam.put("logDesc", logParam.toString()); + logParam.put("regId", admininfo.get("adminId").toString()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", tok); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + } + + apiResponse.success(); + } catch (ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/makeOtp") + public ApiResponse makeOtp(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + OTPInfo param = new OTPInfo(); + param.setAccount(tokenInfo.getMid()); + param.setIssuer(ISSUER); + param.setUseYn("Y"); + param.setType("S"); + param = TOTPTokenGenerator.getGoogleAuthQRUrl(param); + + log.info("#-super::makeOtp:: SUPER ADMIN secret : " + param.getSecretKey()); + log.info("#-super::makeOtp:: SUPER ADMIN account : " + param.getAccount()); + log.info("#-super::makeOtp:: SUPER ADMIN issuer : " + ISSUER); + log.info("#-super::makeOtp:: SUPER ADMIN URL : " + param.getUrl()); + + int result = compService.registSuperOtp(param); + if (result > 0) { + String adminOtpYN = compService.getAdminOtpUseYN(tokenInfo.getMid()); + apiResponse.put("useOtp", adminOtpYN); + apiResponse.put("otpUrl", param.getUrl()); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiController.makeOtp() => userService.registAdminOtp()"); + logParam.put("logDesc", param.toString()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + } else { + throw new ApiException("9999", "FAIL"); + } + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/getOtpUrl") + public ApiResponse getOtpUrl(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + String account = tokenInfo.getMid(); + OTPInfo otpInfo = compService.getOtpInfo(account); + log.info("#-super::getOtpUrl::OTP info: " + otpInfo); + apiResponse.put("otpUrl", otpInfo.getUrl()); + + String adminOtpYN = compService.getAdminOtpUseYN(tokenInfo.getMid()); + apiResponse.put("useOtp", adminOtpYN); + + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/updateOtpUseYN") + public ApiResponse updateOtpUseYN(@RequestHeader String token, HttpServletRequest request, + @RequestBody OTPInfo info) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + if (info.getUseYn() == null || info.getUseYn().equals("")) { + throw new ApiException("1009", "The value 'useYN' does not exist."); + } + + int result = 0; + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (info.getAccount() != null && !info.getAccount().equals("")) { + String adminId = info.getAccount(); + String adminType = compService.getAdminType(adminId); + info.setType(adminType); + result = compService.updateAdminOtpUseYN(info); + } else { + info.setAccount(tokenInfo.getMid()); + result = compService.updateSuperOtpUseYN(info); + } + + if (result > 0) { + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiController.updateOtpUseYN() => userService.updateOtpUseYN()"); + logParam.put("logDesc", info.toString()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + } else { + throw new ApiException("9999", "FAIL"); + } + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + + } + + @ResponseBody + @PostMapping(value = "/makeSiteOtp") + public ApiResponse makeSiteOtp(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody TOtpVO otpVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + String siteId = otpVO.getSiteId(); + String account = otpVO.getAdminId(); + Site site = userService.getSiteInfo(siteId); + String issuer = site.getSiteDomain(); + String adminType = compService.getAdminType(account); + + OTPInfo param = new OTPInfo(); + param.setAccount(account); + param.setIssuer(issuer); + param.setUseYn("N"); + param.setType(adminType); + param = TOTPTokenGenerator.getGoogleAuthQRUrl(param); + + log.info("#-admin::makeOtp:: secret : " + param.getSecretKey()); + log.info("#-admin::makeOtp:: account : " + param.getAccount()); + log.info("#-admin::makeOtp:: issuer : " + issuer); + log.info("#-admin::makeOtp:: URL : " + param.getUrl()); + + int result = compService.registAdminOtp(param); + if (result > 0) { + String siteOtpYN = compService.getAdminOtpUseYN(account); + apiResponse.put("useOtp", siteOtpYN); + apiResponse.put("otpUrl", param.getUrl()); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("logType", "modify"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiController.makeSiteOtp() => userService.registAdminOtp()"); + logParam.put("logDesc", param.toString()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + } else { + throw new ApiException("9999", "FAIL"); + } + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/getSiteOtpUrl") + public ApiResponse getSiteOtpUrl(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody TOtpVO otpVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + OTPInfo otpInfo = compService.getOtpInfo(otpVO.getAdminId()); + log.info("#-super::getSiteOtpUrl::OTP info: " + otpInfo); + apiResponse.put("otpUrl", otpInfo.getUrl()); + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/optionSave") + public ApiResponse optionSave(@RequestHeader String token, HttpServletRequest request, + @RequestBody SiteOption option) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + option.setSiteId(option.getSiteId()); + commonService.optionSave(option); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "insert or update"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "AdminSuperController.optionSave() => CommonService.optionSave()"); + logParam.put("logDesc", option.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/gameCodes") + public ApiResponse gameCodes(@RequestHeader String token, HttpServletRequest request, + @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + if (codesSearch == null || codesSearch.getSiteId().equals("")) { + codesSearch.setSiteId(""); + } else { + codesSearch.setSiteId(codesSearch.getSiteId()); + } + + List codeList = commonService.getGameCodesForSuper(codesSearch); + apiResponse.put("codes", codeList); + apiResponse.put("codesSearch", codesSearch); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/gameGroupCodes") + public ApiResponse gameGroupCodes(@RequestHeader String token, HttpServletRequest request, + @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + if (codesSearch == null || codesSearch.getSiteId().equals("")) { + codesSearch.setSiteId(""); + } else { + codesSearch.setSiteId(codesSearch.getSiteId()); + } + + String siteId = codesSearch.getSiteId(); + List codeList = commonService.getGameGroupCodesForSuper(siteId); + apiResponse.put("groupCodes", codeList); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } +} diff --git a/src/main/java/com/bb/admintop/controller/SuperApiSettingController.java b/src/main/java/com/bb/admintop/controller/SuperApiSettingController.java new file mode 100644 index 0000000..f6ddd24 --- /dev/null +++ b/src/main/java/com/bb/admintop/controller/SuperApiSettingController.java @@ -0,0 +1,178 @@ +package com.bb.admintop.controller; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.GameCodeSearchVO; +import com.bb.model.GameCodeVO; +import com.bb.service.CommonService; +import com.bb.util.IPKit; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/super/setting") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class SuperApiSettingController { + + private final JwtManager jwtManager; + + private final CommonService commonService; + + + @ResponseBody + @PostMapping(value="/gameCodeList") + public ApiResponse gameCodeList(@RequestHeader String token, HttpServletRequest request, @RequestBody GameCodeSearchVO searchVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + List> tabList = commonService.getGameCodeTabList(searchVO); + List> colList = commonService.getGameCodeColList(searchVO); + List> gameCodelist = commonService.getGameCodeList(searchVO); + apiResponse.put("selectTab", searchVO.getGroupCode()); + apiResponse.put("selectOrderName", searchVO.getOrderName()); + apiResponse.put("selectOrderType", searchVO.getOrderType()); + apiResponse.put("tabList", tabList); + apiResponse.put("colList", colList); + apiResponse.put("gameCodelist", gameCodelist); + apiResponse.success(); + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + + } + + + @ResponseBody + @PostMapping(value="/gameCodeRegist") + public ApiResponse gameCodeRegist(@RequestHeader String token, HttpServletRequest request, @RequestBody GameCodeVO gameCodeVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("#-gameCodeRegist::"+ gameCodeVO.toString()); + + if(gameCodeVO.getGroupCode() == null || gameCodeVO.getGroupCode().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(gameCodeVO.getGroupCodeNameEN() == null || gameCodeVO.getGroupCodeNameEN().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(gameCodeVO.getCode() == null || gameCodeVO.getCode().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + int result = commonService.gameCodeRegist(gameCodeVO); + if(result> 0) { + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "save"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiSettingController.gameCodeRegist() => commonService.gameCodeRegist()"); + logParam.put("logDesc", gameCodeVO.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + + apiResponse.success(); + } else { + apiResponse.fail(); + } + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/gameCodeUpdate") + public ApiResponse gameCodeUpdate(@RequestHeader String token, HttpServletRequest request, @RequestBody GameCodeVO gameCodeVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(tokenInfo.getType()==null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + log.info(gameCodeVO.toString()); + + int result = commonService.gameCodeUpdate(gameCodeVO); + if(result> 0) { + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "save"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiSettingController.gameCodeUpdate() => commonService.gameCodeUpdate()"); + logParam.put("logDesc", gameCodeVO.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { System.out.print(e.toString()); } + apiResponse.success(); + } else { + apiResponse.fail(); + } + + } catch(ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } +} diff --git a/src/main/java/com/bb/admintop/controller/SuperApiUserController.java b/src/main/java/com/bb/admintop/controller/SuperApiUserController.java new file mode 100644 index 0000000..b740291 --- /dev/null +++ b/src/main/java/com/bb/admintop/controller/SuperApiUserController.java @@ -0,0 +1,603 @@ +package com.bb.admintop.controller; + +import java.net.SocketTimeoutException; +import java.util.HashMap; +import java.util.List; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberInsert; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberRate; +import com.bb.model.MemberRateVo; +import com.bb.model.MemberSearch; +import com.bb.model.MemberUpdate; +import com.bb.model.NewMemRateItem; +import com.bb.model.PageFormVO; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.TripleAuthInfo; +import com.bb.service.CommonService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.bb.util.StringUtils; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/super/member") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class SuperApiUserController { + + private final JwtManager jwtManager; + + private final CommonService commonService; + + private final UserService userService; + + private final TripleService tripleService; + + private final PasswordEncoder passwordEncoder; + + private final String ISSUER = "super.oms-admin.com"; + + @ResponseBody + @PostMapping(value = "/addUser") + public ApiResponse addUser(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberInsert signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-super::join::"; + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + if (signupMember.getSiteId() == null || signupMember.getSiteId().equals("")) { + throw new ApiException("SS99", "Not Found siteId"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + LOG_PREFIX = LOG_PREFIX + signupMember.getSiteId() + "::" + signupMember.getMemId() + "::::"; + + signupMember.setMemId(signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase()); + if (signupMember.getRecommenderId() == null || signupMember.getRecommenderId().equals("")) { + throw new ApiException("U097", "추천인 계정을 입력해주세요."); + } + + String refer = request.getHeader("Referer"); + String domain = "unknown"; + if (refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + domain = urls[2]; + log.info(LOG_PREFIX + "::domain::" + domain + "::recommandId::" + signupMember.getRecommenderId()); + } + signupMember.setJoinDomain(domain); + + signupMember.setRecommenderId(signupMember.getRecommenderId().replaceAll(" ", "").toLowerCase()); + + signupMember.setPartnerType(""); + signupMember.setMemStatus("1"); + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info("[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + + signupMember.setPartnerLevel("NORMAL"); + + signupMember.setRecommendYn("N"); + signupMember.setPointExchangeYn("Y"); + signupMember.setRollingYn("Y"); + signupMember.setCashSendYn("N"); + signupMember.setCashReceiveYn("N"); + + signupMember.setNationCode(""); + signupMember.setPartSendYn("N"); + signupMember.setMaxCredit(""); + signupMember.setCreditRate(""); + signupMember.setCreditStatus(""); + + Member recommendUser = new Member(); + recommendUser.setSiteId(signupMember.getSiteId()); + recommendUser.setMemId(signupMember.getRecommenderId()); + MemberDetail partner = userService.getMember(recommendUser); + + if (partner == null) { + throw new ApiException("U096", "존재하지 않는 추천인 계정입니다."); + } + + if (partner.getPartnerLevel().equals("COMP") || partner.getPartnerLevel().equals("AUTO")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if (partner.getRecommendYn().equals("N")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if (!partner.getMemStatus().equals("1")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(signupMember.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + if (partner.getPartnerLevel().equals("NORMAL") && siteOption.getUserRecommenderChgYn().equals("N")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + + if (partner.getPartnerLevel().equals("NORMAL") && siteOption.getUserRecommenderChgYn().equals("Y")) { + int cnt = userService.getNormalRetailCnt(recommendUser); + if (cnt == 10) { + // 일반회원 최대 추천인 가능 단계(10) 초과 + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + } + + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + checkMember.setMemId(signupMember.getMemId()); + checkMember.setRecommenderId(signupMember.getRecommenderId()); + checkMember.setMemName(signupMember.getMemName()); + checkMember.setMemNick(signupMember.getMemNick()); + + int idCheck = userService.idCheck(checkMember); + if (idCheck > 0) { + throw new ApiException("U005", "idCheck"); + } + + /* + * int idCheckByAdmin =userService.idCheckByAdmin(checkMember); + * if(idCheckByAdmin>0) { throw new ApiException("U005", "idCheckByAdmin"); } + */ + + int nameCheck = userService.nameCheck(checkMember); + if (nameCheck > 0) { + throw new ApiException("U006", "nameCheck"); + } + + if (signupMember.getSiteId().equals(signupMember.getRecommenderId())) { + throw new ApiException("U099", "recommenderIdCheck"); + } + + log.info("Insert Member:" + signupMember); + userService.adminJoin(signupMember); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "save"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiUserController.addUser() => UserService.adminJoin()"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + Member search = new Member(); + search.setSiteId(signupMember.getSiteId()); + search.setMemId(signupMember.getMemId()); + search.setPartnerLevel("NORMAL"); + + try { + if (signupMember.getRateList() != null) { + MemberRate rateparam = new MemberRate(); + rateparam.setMemId(signupMember.getMemId()); + rateparam.setRateList(signupMember.getRateList()); + + userService.getMemberRateUpdate(search, rateparam); + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "save"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", + "SuperApiUserController.addUser() => UserService.getMemberRateUpdate()"); + logParam.put("logDesc", rateparam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + /* + * userService.getMemberbetYnUpdate(search, rateparam); try{ HashMap logParam = new HashMap(); logParam.put("siteId", + * tokenInfo.getMid()); logParam.put("memId", tokenInfo.getMid()); + * logParam.put("logType", "save"); logParam.put("logoutYn", ""); + * logParam.put("logEndPoint", request.getRequestURI()); logParam.put("logName", + * "AdminSuperController.addUser() => UserService.getMemberbetYnUpdate()"); + * logParam.put("logDesc", rateparam.toString()); logParam.put("regId", + * tokenInfo.getMid()); logParam.put("regIp", + * IPKit.getIpAddressByRequest(request)); logParam.put("token", ""); + * commonService.insertAdminlog(logParam); } catch(Exception e) { + * System.out.print(e.toString()); } + */ + } + + } catch (Exception eee) { + } + + apiResponse.success(); + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = { "/memberList" }) + public ApiResponse memberList(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + if (search.getSiteId() == null || search.getSiteId().equals("")) { + throw new ApiException("SS99", "Not Found siteId"); + } + + PageFormVO pageVo = new PageFormVO(); + if (search.getPage() == 0) + search.setPage(1); + search.setPartnerType(""); + search.setSiteId(search.getSiteId()); + + if (search.getUserType() == null) { + search.setUserType(""); // 전체 검색 + } + + HashMap totalInfo = userService.getMemberListCnt(search); + + int totalCount = Integer.parseInt(totalInfo.get("totalCnt").toString()); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if (search.getCount_per_list() == 0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + + List memList = userService.getMemberList(search); + apiResponse.put("list", memList); + apiResponse.put("totalInfo", totalInfo); + + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/detail") + public ApiResponse memberDetail(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberSearch memberSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + if (memberSearch.getSiteId() == null || memberSearch.getSiteId().equals("")) { + throw new ApiException("SS99", "Not Found siteId"); + } + + Member search = new Member(); + search.setMemId(memberSearch.getMemId()); + search.setSiteId(memberSearch.getSiteId()); + + log.info("[REQUEST: " + request.getRequestURI() + "] " + search); + + HashMap memberDetail = userService.getMemberDetail_1(search); + int totalChangePointAmt = userService.getTotalChangePointAmt(search); + memberDetail.put("totalChangePointAmt", totalChangePointAmt); + memberDetail.put("memPass", ""); + memberDetail.put("memberCommissionRate", userService.getMemberRate(search)); + + List memberFlow = userService.getMemberFlowList(memberDetail); + List partnerFlow = userService.getPartnerFlowList(memberDetail); + + apiResponse.put("member", memberDetail); + apiResponse.put("memberFlow", memberFlow); + apiResponse.put("partnerFlow", partnerFlow); + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/modify") + public ApiResponse modify(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberUpdate signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + if (signupMember.getSiteId() == null || signupMember.getSiteId().equals("")) { + throw new ApiException("SS99", "Not Found siteId"); + } + + signupMember.setUpdId(tokenInfo.getMid()); + + if (signupMember.getMemPass() != null && !signupMember.getMemPass().equals("")) { + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info("[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + } + + log.info("[REQUEST: " + request.getRequestURI() + "] " + signupMember); + userService.updateMember(signupMember); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "save"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiUserController.modify() => UserService.updateMember()"); + logParam.put("logDesc", signupMember.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if (rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]" + rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if (rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]" + rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if (rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]" + rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/updateRate") + public ApiResponse updateRate(@RequestHeader String token, HttpServletRequest request, + @Valid @RequestBody MemberRate memberRate) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // System.out.println("ddd" + request.getAttribute("Authorization").toString()); + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if (tokenInfo.getType() == null || !tokenInfo.getType().equals("super")) { + throw new ApiException("1000", "accessDinied"); + } + + Member search = new Member(); + search.setSiteId(memberRate.getSiteId()); + search.setMemId(memberRate.getMemId()); + search.setPartnerLevel("NORMAL"); + + MemberDetail member = userService.getMember(search); + if (member == null) { + throw new ApiException("U003", "unknown user"); + } + search.setPartnerLevel(member.getPartnerLevel()); + + log.info("[REQUEST: " + request.getRequestURI() + "] " + memberRate); + + /* + * MemberDetail myInfo = userService.getMember(search); Member topSearch = new + * Member(); topSearch.setSiteId(search.getSiteId()); + * topSearch.setMemId(myInfo.getRecommenderId()); List topRateList = + * userService.getMemberRateByNormal(topSearch); for(MemberRateVo + * mvo:memberRate.getRateList()) { String botCode = mvo.getGameType(); Double + * botPR = Double.valueOf(mvo.getPointRate()); Double botLR = + * Double.valueOf(mvo.getLoseRate()); + * + * for(HashMap topRate : topRateList) { String topCode = + * topRate.get("gameType").toString(); Double topPR = + * Double.valueOf(topRate.get("pointRate").toString()); Double topLR = + * Double.valueOf(topRate.get("loseRate").toString()); + * if(botCode.equals(topCode)) { if(botPR > topPR || botLR > topLR) { + * log.info("## updateRate ## botCode : " + botCode + ", topCode : " + topCode); + * log.info("## updateRate ## botPR : " + botPR + ", topPR : " + topPR); + * log.info("## updateRate ## botLR : " + botLR + ", topLR : " + topLR); String + * resultMsg = "["+topRate.get("codeName").toString()+"] 롤링:"+topPR+", 루징:" + * +topLR+" 보다 작은값을 입력하세요"; log.info("## updateRate ## resultMsg : " + + * resultMsg); + * + * throw new ApiException("U031", resultMsg); } } } } + */ + + NewMemRateItem rateItem = new NewMemRateItem(); + rateItem.setSiteId(memberRate.getSiteId()); + rateItem.setMemId(memberRate.getMemId()); + List myRateList = userService.getMemRateItemList(rateItem); + for (MemberRateVo mvo : memberRate.getRateList()) { + String vendorCode = mvo.getGameType(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for (NewMemRateItem myRateInfo : myRateList) { + String myCode = myRateInfo.getVendorCode(); + Double maxPointRate = myRateInfo.getMaxPointRate(); + Double minPointRate = myRateInfo.getMinPointRate(); + Double maxLoseRate = myRateInfo.getMaxLoseRate(); + Double minLoseRate = myRateInfo.getMinLoseRate(); + if (vendorCode.equals(myCode)) { + if (maxPointRate < pointRate || minPointRate > pointRate) { + log.info("#-updateRate::" + myRateInfo.getSiteId() + "::" + myRateInfo.getMemId() + + "::vendorcode::" + myCode + "::pointRate::" + pointRate); + log.info("#-updateRate::" + myRateInfo.getSiteId() + "::" + myRateInfo.getMemId() + + "::vendorcode::" + myCode + "::MaxPointRate::" + maxPointRate + "::MinPointRate::" + + minPointRate); + String resultMsg = "롤링:" + "::vendorcode::" + myCode + "::" + maxPointRate + ", " + + minPointRate + " 사이값을 입력하세요"; + log.info("#-updateRate::" + myRateInfo.getSiteId() + "::" + myRateInfo.getMemId() + + "::vendorcode::" + myCode + "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if (maxLoseRate < loseRate || minLoseRate > loseRate) { + log.info("#-updateRate::" + myRateInfo.getSiteId() + "::" + myRateInfo.getMemId() + + "::vendorcode::" + myCode + "::loseRate::" + loseRate); + log.info("#-updateRate::" + myRateInfo.getSiteId() + "::" + myRateInfo.getMemId() + + "::vendorcode::" + myCode + "::MaxLoseRate::" + maxLoseRate + "::MinLoseRate::" + + minLoseRate); + String resultMsg = "루징:" + "::vendorcode::" + myCode + "::" + maxLoseRate + ", " + + minLoseRate + " 사이값을 입력하세요"; + log.info("#-updateRate::" + myRateInfo.getSiteId() + "::" + myRateInfo.getMemId() + + "::vendorcode::" + myCode + "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + + userService.getMemberRateUpdate(search, memberRate); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getMid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "save"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", "SuperApiUserController.updateRate() => UserService.getMemberRateUpdate()"); + logParam.put("logDesc", memberRate.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch (Exception e) { + System.out.print(e.toString()); + } + + apiResponse.success(); + + } catch (ApiException e) { + log.debug(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + +} diff --git a/src/main/java/com/bb/admintop/controller/SuperApiVendorController.java b/src/main/java/com/bb/admintop/controller/SuperApiVendorController.java new file mode 100644 index 0000000..c3dd2f1 --- /dev/null +++ b/src/main/java/com/bb/admintop/controller/SuperApiVendorController.java @@ -0,0 +1,208 @@ +package com.bb.admintop.controller; + +import java.util.HashMap; +import java.util.List; + +import jakarta.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.SiteSearch; +import com.bb.service.CompService; +import com.bb.service.VendorService; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONObject; + +@RestController +@Slf4j +@RequestMapping("/api/super/vendor") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class SuperApiVendorController { + + private final JwtManager jwtManager; + + private final CompService compService; + + private final VendorService vendorService; + + @ResponseBody + @PostMapping(value = "/nexusSkinInfo") + public ApiResponse nexusSkinInfo(@RequestHeader String token, HttpServletRequest request, + @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + final String LOG_PREFIX = "#-super::nexusSkinInfo::" + search.getSiteId() + "::::"; + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + log.info(LOG_PREFIX + "Request::" + search.toString()); + if (search.getSiteId() == null || search.getSiteId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + HashMap tripleSiteInfo = compService.getTripleCreditInfo(search.getSiteId()); + + List> skinInfo = vendorService.getNexusSkinInfo(tripleSiteInfo); + for (HashMap item : skinInfo) { + long vendorIdx = (long) item.get("vendorIdx"); + HashMap vendorInfo = new HashMap<>(); + vendorInfo.put("vendorIdx", vendorIdx); + + List> skinList = vendorService.getNexusSkinList(vendorInfo); + item.put("skinList", skinList); + } + + apiResponse.put("skinInfo", skinInfo); + apiResponse.success(); + + } catch (ApiException e) { + apiResponse = e.getApiResponse(); + log.error(LOG_PREFIX + "ApiException::" + e.getApiResponse()); + } catch (Exception e) { + log.error(LOG_PREFIX + "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + log.error(LOG_PREFIX + "Response::" + apiResponse.toString()); + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/nexusSkinList") + public ApiResponse nexusSkinList(@RequestHeader String token, HttpServletRequest request, + @RequestBody JSONObject requestObj) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + final String LOG_PREFIX = "#-super::nexusSkinList::" + requestObj.getString("siteId") + "::::"; + log.info(LOG_PREFIX + "Request::" + requestObj.toString()); + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + if (requestObj.getString("siteId") == null || requestObj.getString("siteId").equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + HashMap vendorInfo = new HashMap<>(); + vendorInfo.put("vendorIdx", requestObj.getInt("vendorIdx")); + + List> skinList = vendorService.getNexusSkinList(vendorInfo); + + apiResponse.put("skinList", skinList); + apiResponse.success(); + + } catch (ApiException e) { + apiResponse = e.getApiResponse(); + log.error(LOG_PREFIX + "ApiException::" + e.getApiResponse()); + } catch (Exception e) { + log.error(LOG_PREFIX + "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + log.error(LOG_PREFIX + "Response::" + apiResponse.toString()); + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/nexusSkinUpdate") + public ApiResponse nexusSkinUpdate(@RequestHeader String token, HttpServletRequest request, + @RequestBody JSONObject requestObj) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + final String LOG_PREFIX = "#-super::nexusSkinUpdate::" + requestObj.getString("siteId") + "::::"; + log.info(LOG_PREFIX + "Request::" + requestObj.toString()); + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + + if (requestObj.getString("siteId") == null || requestObj.getString("siteId").equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + HashMap skinInfo = new HashMap<>(); + skinInfo.put("siteIdx", requestObj.getInt("siteIdx")); + skinInfo.put("vendorIdx", requestObj.getInt("vendorIdx")); + skinInfo.put("nexusSkinType", requestObj.getString("nexusSkinType")); + + int updResult = vendorService.nexusSkinUpdate(skinInfo); + log.info(LOG_PREFIX + "nexusSkinUpdate Result::" + updResult); + + HashMap skin = vendorService.getNexusSkin(skinInfo); + skin.put("siteId", requestObj.getString("siteId")); + updResult = compService.updateVendoMinMax(skin); + log.info(LOG_PREFIX + "updateVendoMinMax Result::" + updResult); + + apiResponse.success(); + + } catch (ApiException e) { + apiResponse = e.getApiResponse(); + log.error(LOG_PREFIX + "ApiException::" + e.getApiResponse()); + } catch (Exception e) { + log.error(LOG_PREFIX + "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + log.error(LOG_PREFIX + "Response::" + apiResponse.toString()); + return apiResponse; + } + + @ResponseBody + @PostMapping(value = "/list") + public ApiResponse vendorList(@RequestHeader String token, HttpServletRequest request, + @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + final String LOG_PREFIX = "#-super::vendorList::" + search.getSiteId() + "::::"; + + try { + // Site site = getSiteByCheck(request); + if (token == null) { + throw new ApiException("1000", "accessDinied"); + } + log.info(LOG_PREFIX + "Request::" + search.toString()); + if (search.getSiteId() == null || search.getSiteId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + HashMap tripleSiteInfo = compService.getTripleCreditInfo(search.getSiteId()); + + List> vendorList = vendorService.getTripleVendorList(tripleSiteInfo); + + apiResponse.put("vendorList", vendorList); + apiResponse.success(); + + } catch (ApiException e) { + apiResponse = e.getApiResponse(); + log.error(LOG_PREFIX + "ApiException::" + e.getApiResponse()); + } catch (Exception e) { + log.error(LOG_PREFIX + "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + log.error(LOG_PREFIX + "Response::" + apiResponse.toString()); + return apiResponse; + } + +} diff --git a/src/main/java/com/bb/common/controller/CommonApiController.java b/src/main/java/com/bb/common/controller/CommonApiController.java new file mode 100644 index 0000000..71e5cc5 --- /dev/null +++ b/src/main/java/com/bb/common/controller/CommonApiController.java @@ -0,0 +1,348 @@ +package com.bb.common.controller; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.List; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.CodeSearch; +import com.bb.model.Member; +import com.bb.model.MemberCheckVo; +import com.bb.model.Site; +import com.bb.model.SiteCheckReq; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.service.CommonService; +import com.bb.service.CompService; +import com.bb.service.UserService; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + + + +@RestController +@Slf4j +@RequestMapping("/api/common") +@RequiredArgsConstructor +public class CommonApiController { + + private final CommonService commonService; + + private final UserService userService; + + private final CompService compService; + + private final JwtManager jwtManager; + + public static String securityKey = "20cb7d92d7ac36900840a5fda92286ff"; + + @ResponseBody + @PostMapping(value="/code") + public ApiResponse codes(HttpServletRequest request, @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + List codeList = commonService.getCodeList(codesSearch); + apiResponse.put("codes", codeList); + apiResponse.put("codesSearch",codesSearch); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/gameCodes") + public ApiResponse gameCodes(HttpServletRequest request, @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + codesSearch.setSiteId(site.getSiteId()); + + List codeList = commonService.getGameCodes(codesSearch); + apiResponse.put("codes", codeList); + apiResponse.put("codesSearch",codesSearch); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/gameGroupCodes") + public ApiResponse gameGroupCodes(HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + String siteId = site.getSiteId(); + List codeList = commonService.getGameGroupCodes(siteId); + apiResponse.put("groupCodes", codeList); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/rateCategory") + public ApiResponse rateCategory(HttpServletRequest request, @RequestHeader String token) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + String siteId = tokenInfo.getSid(); + List codeList = commonService.getRateCategory(siteId); + apiResponse.put("category", codeList); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/siteCheckInfo") + public ApiResponse siteCheckInfo(HttpServletRequest request, @RequestBody SiteCheckReq siteCheckReq) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + HashMap detail = commonService.siteCheckInfo(siteCheckReq); + if(detail == null) { + SiteSearch search = new SiteSearch(); + search.setSiteId(siteCheckReq.getSiteId()); + SiteOption option = commonService.getSiteSetting(search); + if(option.getSiteCheckYn().equals("Y")) { + detail = new HashMap<>(); + detail.put("siteCheckIdx", 0); + detail.put("siteId", siteCheckReq.getSiteId()); + detail.put("checkType", "site"); + detail.put("checkTypeName", "사이트점검"); + detail.put("checkCode", "site"); + detail.put("checkCodeName", "사이트점검"); + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long sDateL = System.currentTimeMillis(); + long eDateL = sDateL + (1000 * 60 * 60 * 24); + String sDateStr = sdf.format(sDateL); + String eDateStr = sdf.format(eDateL); + detail.put("startDate", sDateStr); + detail.put("endDate", eDateStr); + detail.put("isEmergency", "Y"); + detail.put("isCheckOff", "N"); + detail.put("siteCheckStatus", "open"); + detail.put("contents", "사이트 점검입니다. 조속히 마무리 하겠습니다. 감사합니다."); + } + } + apiResponse.put("siteCheckInfo", detail); + apiResponse.success(); + + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/isOtpLogin") + public ApiResponse isOtpLogin(HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + String adminOtpYN = compService.getAdminOtpUseYN(search.getSiteId()); + apiResponse.put("useOtp", adminOtpYN); + apiResponse.success(); + + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } // Duplicate check + + + @ResponseBody + @PostMapping(value="/duplicateCheck") + public ApiResponse duplicateCheck(HttpServletRequest request, @RequestBody MemberCheckVo search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + Member checkMember = new Member(); + checkMember.setSiteId(search.getSiteId()); + checkMember.setMemId(search.getMemId()); + checkMember.setMemNick(search.getMemNick()); + + if(search.getCheckType().equals("memId")) { + // ID Check + int idCheck = userService.idCheck(checkMember); + int result = idCheck; + //int idCheckByAdmin = userService.idCheckByAdmin(checkMember); + //int result = idCheck + idCheckByAdmin; + + if(result == 0) { + apiResponse.put("checkType", "memId"); + apiResponse.put("checkResult", "succ"); + } else { + apiResponse.put("checkType", "memId"); + apiResponse.put("checkResult", "duplicate"); + } + + } else if(search.getCheckType().equals("memNick")) { + // NickName Check + int nickNameCheck = userService.nameCheck(checkMember); + if(nickNameCheck == 0) { + apiResponse.put("checkType", "memNick"); + apiResponse.put("checkResult", "succ"); + } else { + apiResponse.put("checkType", "memNick"); + apiResponse.put("checkResult", "duplicate"); + } + } else { + apiResponse.fail(); + } + + apiResponse.success(); + + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @PostMapping(value="/test") + public ApiResponse test(HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + String message = "박도울"; + SecretKeySpec skeySpec = new SecretKeySpec(hexStringToByteArray(securityKey), "AES"); + + // Instantiate the cipher + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.ENCRYPT_MODE, skeySpec); + byte[] encrypted = cipher.doFinal(message.getBytes("EUC-KR")); + System.out.println(byteArrayToHex(encrypted)); + + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @PostMapping(value="/test2") + public ApiResponse test2(HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + HashMap data = commonService.getSessionTransactionIsolation(); + apiResponse.put("data", data); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @PostMapping(value="/test3") + public ApiResponse test3(HttpServletRequest request, @RequestBody String param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + log.info("###-test3::::param::"+param); + String[] gameNameArr = param.split("\\|\\|"); + String gameName = "Golden Wealth Baccarat"; + boolean isMatchKeyword = false; + + for(int i=0; ibyte 변환 + public static byte[] hexStringToByteArray(String s) { + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); + } + return data; + } + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } +} diff --git a/src/main/java/com/bb/config/ApiKeyFilter.java b/src/main/java/com/bb/config/ApiKeyFilter.java new file mode 100644 index 0000000..39c18d0 --- /dev/null +++ b/src/main/java/com/bb/config/ApiKeyFilter.java @@ -0,0 +1,38 @@ +package com.bb.config; + +import java.io.IOException; + +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + + +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + + +import com.bb.util.StringUtils; + +@Component +public class ApiKeyFilter implements Filter { + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse res = (HttpServletResponse) response; + + + String reqKey = req.getHeader("Authorization"); + + if (StringUtils.isEmpty(reqKey)) { + res.setStatus(HttpStatus.UNAUTHORIZED.value()); + } else { + request.setAttribute("Authorization", reqKey); + chain.doFilter(request, response); + } + } +} diff --git a/src/main/java/com/bb/config/AsyncConfig.java b/src/main/java/com/bb/config/AsyncConfig.java new file mode 100644 index 0000000..cf59476 --- /dev/null +++ b/src/main/java/com/bb/config/AsyncConfig.java @@ -0,0 +1,44 @@ +package com.bb.config; + +import java.util.concurrent.Executor; + +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.AsyncConfigurerSupport; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +@Configuration +@EnableAsync +public class AsyncConfig extends AsyncConfigurerSupport { + + // 기본 실행 대기하는 Thread의 수 + private final int CORE_POOL_SIZE = 20; + + // 동시 동작하는 최대 Thread의 수 + private final int MAX_POOL_SIZE = 100; + + // MaxPoolSize 초과 요청에서 Thread 생성 요청 시, 해당 요청을 Queue에 저장하는데 이때 최대 수용 가능한 Queue의 수 + private final int QUEUE_CAPACITY = 1000; + + // maxPoolSize가 모두 사용되다가 idle(쓰레드 휴식상태)로 돌아갔을 때 종료하기까지 대기하는 걸리는 시간 + private final int KEEP_ALIVE_SECONDS = 60; + + // 생성되는 Thread 접두사 지정 + private final String CUSTOM_THREAD_NAME_PREFIX = "BET-ASYNC-"; + + // 시스템을 종료(shutdown)할 때 queue에 남아있는 작업을 모두 완료한 후 종료 하도록 처리 + private final boolean WAIT_FOR_TASKS_TO_COMPLETE_ON_SHOUTDOWN = true; + + @Override + public Executor getAsyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(CORE_POOL_SIZE); + executor.setMaxPoolSize(MAX_POOL_SIZE); + executor.setQueueCapacity(QUEUE_CAPACITY); + executor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS); + executor.setThreadNamePrefix(CUSTOM_THREAD_NAME_PREFIX); + executor.setWaitForTasksToCompleteOnShutdown(WAIT_FOR_TASKS_TO_COMPLETE_ON_SHOUTDOWN); + executor.initialize(); + return executor; + } +} diff --git a/src/main/java/com/bb/config/AuthFailureHandler.java b/src/main/java/com/bb/config/AuthFailureHandler.java new file mode 100644 index 0000000..614e9bb --- /dev/null +++ b/src/main/java/com/bb/config/AuthFailureHandler.java @@ -0,0 +1,35 @@ +package com.bb.config; + +import java.io.IOException; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import javax.xml.transform.Result; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; +import org.springframework.stereotype.Component; + +/** + * 로그인 실패 핸들러 + * + * @author wedul + * + */ +@Component +public class AuthFailureHandler extends SimpleUrlAuthenticationFailureHandler { + + @Override + public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, + AuthenticationException exception) throws IOException, ServletException { + + ObjectMapper om = new ObjectMapper(); + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + //response.getWriter().print(om.writeValueAsString("FAIL")); + //response.getWriter().flush(); + response.sendRedirect(request.getContextPath() + "/login"); + } +} diff --git a/src/main/java/com/bb/config/AuthProvider.java b/src/main/java/com/bb/config/AuthProvider.java new file mode 100644 index 0000000..ccf57d1 --- /dev/null +++ b/src/main/java/com/bb/config/AuthProvider.java @@ -0,0 +1,81 @@ +package com.bb.config; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Repository; + +import com.bb.front.ApiMemberController; +import com.bb.model.Site; +import com.bb.service.UserService; + +import lombok.extern.slf4j.Slf4j; + + + + +/** + * Description: 스프링시큐리티 로그인 인증 + * Path : 스프링시큐리티 + * @FileName : AsRepairController.java + * @Version : 2019. 8. 27. + * @Author : LeeChunghan + * @Comment : + */ +@Slf4j +@Component("authProvider") +public class AuthProvider implements AuthenticationProvider { + + @Autowired + private UserService userService; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + String id = authentication.getName(); + String password = authentication.getCredentials().toString(); + String encodePassword = passwordEncoder.encode(password); + log.info("[PWD:" + encodePassword + "]"); + + HashMap param = new HashMap(); + param.put("siteId", id); + param.put("sitePass", password); + + Site loginMember = userService.swaggerlogin(param); + boolean chkPassword = passwordEncoder.matches(password, loginMember.getSitePass()); + log.info("[ADMIN chkPassword:" + chkPassword + "]"); + + if(!chkPassword) { + return null; + } else { + Site loginVO = new Site(); + loginVO = loginMember; + + List roles = new ArrayList(); + roles.add(new SimpleGrantedAuthority("SITE")); + + UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(id, password, roles); + result.setDetails(loginVO); + return result; + } + } + + @Override + public boolean supports(Class authentication) { + return authentication.equals(UsernamePasswordAuthenticationToken.class); + } + +} diff --git a/src/main/java/com/bb/config/AuthSuccessHandler.java b/src/main/java/com/bb/config/AuthSuccessHandler.java new file mode 100644 index 0000000..52f37a1 --- /dev/null +++ b/src/main/java/com/bb/config/AuthSuccessHandler.java @@ -0,0 +1,106 @@ +package com.bb.config; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; + +import com.bb.dao.UserDao; +import com.bb.model.Site; +import com.bb.util.IPKit; +import com.fasterxml.jackson.databind.ObjectMapper; + + + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; +import org.springframework.stereotype.Component; + +/** + * Description: 스프링시큐리티 인증 + * Path : 스프링시큐리티 + * @FileName : AsRepairController.java + * @Version : 2019. 8. 27. + * @Author : LeeChunghan + * @Comment : + */ +@Component +public class AuthSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { + + //@Autowired + //private RedisSession redisSession; + // + @Autowired + private UserDao userDao; + + + @Override + public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, + Authentication authentication) throws ServletException, IOException { + + ObjectMapper om = new ObjectMapper(); + response.setStatus(HttpServletResponse.SC_OK); + response.getWriter().print(om.writeValueAsString("SUCCESS")); + HttpSession session = request.getSession(true); + + Site login = (Site)authentication.getDetails(); + + + + // 채팅서버와 공유할 세션 정보 + /* + OutLoginVO outLoginVO = new OutLoginVO(); + outLoginVO.setDomain(login.getDomain()); + outLoginVO.setName(login.getName()); + outLoginVO.setId(login.getId()); + + + login.setToken(redisSession.getToken(outLoginVO)); + */ + + // front 세션 저장 + //session.setAttribute("user", login); + + + + System.out.println(login.getSiteName()); + + if(login.getIp().equals(IPKit.getIpAddressByRequest(request)) || "0.0.0.0".equals(login.getIp()) || "".equals(login.getIp())) { + /* + HashMap logParam = new HashMap(); + logParam.put("memId",login.getId()); + logParam.put("logType", "LOGIN"); + logParam.put("logName", "로그인"); + logParam.put("logDesc", login.getId() +" "+ IPKit.getIpAddressByRequest(request) + " 로그인"); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("regId", login.getId()); + logDao.insertLog(logParam); + */ + response.sendRedirect(request.getContextPath() + "/swagger-ui.html"); + }else { + /* + HashMap logParam = new HashMap(); + logParam.put("memId",login.getId()); + logParam.put("logType", "LOGINFAIL"); + logParam.put("logName", "IP제한 - "); + logParam.put("logDesc", login.getId() +" "+ IPKit.getIpAddressByRequest(request) + " 로그인 IP제한"); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("regId", login.getId()); + logDao.insertLog(logParam); + + response.sendRedirect(request.getContextPath() + "/Admin/logout"); + */ + response.sendRedirect(request.getContextPath() + "/logout"); + } + + + + +}} diff --git a/src/main/java/com/bb/config/CorsConfig.java b/src/main/java/com/bb/config/CorsConfig.java new file mode 100644 index 0000000..17685d3 --- /dev/null +++ b/src/main/java/com/bb/config/CorsConfig.java @@ -0,0 +1,23 @@ +package com.bb.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class CorsConfig implements WebMvcConfigurer{ + + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/api/**") + .allowedOriginPatterns("*") + .allowedHeaders("*") // 어떤 헤더들을 허용할 것인지 + .allowedMethods("*") // 어떤 메서드를 허용할 것인지 (GET, POST...) + .allowCredentials(true) // 쿠키 요청을 허용한다(다른 도메인 서버 + .maxAge(86400); + + WebMvcConfigurer.super.addCorsMappings(registry); + + } +} diff --git a/src/main/java/com/bb/config/DbConfig.java b/src/main/java/com/bb/config/DbConfig.java new file mode 100644 index 0000000..1df8a5d --- /dev/null +++ b/src/main/java/com/bb/config/DbConfig.java @@ -0,0 +1,166 @@ +package com.bb.config; + +import java.util.Arrays; +import java.util.HashSet; + +import javax.sql.DataSource; + +import org.apache.ibatis.session.AutoMappingBehavior; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; + +import com.zaxxer.hikari.HikariDataSource; + +@Configuration +public class DbConfig { + + + + /** DataSource OMS Master 생성 */ + @Bean + @Primary + @ConfigurationProperties(prefix = "spring.datasource1") + public DataSource masterDataSource() { + return DataSourceBuilder.create() + .type(HikariDataSource.class) + .build(); + } + + /** DataSource OMS Slave 생성 */ + @Bean + @Primary + @ConfigurationProperties(prefix = "spring.datasource2") + public DataSource slaveDataSource() { + return DataSourceBuilder.create() + .type(HikariDataSource.class) + .build(); + } + + /** DataSource Triple 생성 */ + @Bean + @ConfigurationProperties(prefix = "spring.datasource3") + public DataSource tripleDataSource() { + return DataSourceBuilder.create() + .type(HikariDataSource.class) + .build(); + } + + /** sqlSessionFactory OMS Master 생성 */ + @Bean + @Primary + public SqlSessionFactory sqlSessionFactoryMain(@Autowired @Qualifier("masterDataSource") DataSource dataSource) throws Exception { + // logger.info("SqlSessionFactory Main Start"); + org.apache.ibatis.session.Configuration configuration = this.getMybatisConfig(); + + SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); + factoryBean.setDataSource(dataSource); + factoryBean.setVfs(SpringBootVFS.class); + factoryBean.setConfiguration(configuration); + factoryBean.setTypeHandlersPackage("com.commax.tool.framework.mybatis.typehandler"); + + ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + Resource[] resource = resolver.getResources("db1/**/*.xml"); + factoryBean.setMapperLocations(resource); + + return factoryBean.getObject(); + } + + /** sqlSessionFactory OMS Slave 생성 */ + @Bean + @Primary + public SqlSessionFactory sqlSessionFactorySub(@Autowired @Qualifier("slaveDataSource") DataSource dataSource) throws Exception { + // logger.info("SqlSessionFactory Main Start"); + org.apache.ibatis.session.Configuration configuration = this.getMybatisConfig(); + + SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); + factoryBean.setDataSource(dataSource); + factoryBean.setVfs(SpringBootVFS.class); + factoryBean.setConfiguration(configuration); + factoryBean.setTypeHandlersPackage("com.commax.tool.framework.mybatis.typehandler"); + + ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + Resource[] resource = resolver.getResources("db1/**/*.xml"); + factoryBean.setMapperLocations(resource); + + return factoryBean.getObject(); + } + + /** sqlSessionFactory Triple 생성 */ + @Bean + public SqlSessionFactory sqlSessionFactoryTriple(@Autowired @Qualifier("tripleDataSource") DataSource dataSource) throws Exception { + // logger.info("SqlSessionFactory SUB Start"); + org.apache.ibatis.session.Configuration configuration = this.getMybatisConfig(); + + SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); + factoryBean.setDataSource(dataSource); + factoryBean.setVfs(SpringBootVFS.class); + factoryBean.setConfiguration(configuration); + factoryBean.setTypeHandlersPackage("com.commax.tool.framework.mybatis.typehandler"); + + ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + Resource[] resource = resolver.getResources("db2/**/*.xml"); + factoryBean.setMapperLocations(resource); + + return factoryBean.getObject(); + } + + /** sqlSession OMS Master 생성 */ + @Bean + @Primary + public SqlSession sqlSessionMain(@Autowired @Qualifier("sqlSessionFactoryMain") SqlSessionFactory factory) { + return new SqlSessionTemplate(factory); + } + + /** sqlSession OMS Slave 생성 */ + @Bean + public SqlSession sqlSessionSub(@Autowired @Qualifier("sqlSessionFactorySub") SqlSessionFactory factory) { + return new SqlSessionTemplate(factory); + } + + /** sqlSession Triple 생성 */ + @Bean + public SqlSession sqlSessionTriple(@Autowired @Qualifier("sqlSessionFactoryTriple") SqlSessionFactory factory) { + return new SqlSessionTemplate(factory); + } + + /** MybatisConfig 설정정보 */ + private org.apache.ibatis.session.Configuration getMybatisConfig() { + org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); + configuration.setCacheEnabled(true); + configuration.setLazyLoadingEnabled(false); + configuration.setAggressiveLazyLoading(false); + configuration.setMultipleResultSetsEnabled(true); + configuration.setUseColumnLabel(true); + configuration.setAutoMappingBehavior(AutoMappingBehavior.PARTIAL); + configuration.setDefaultExecutorType(ExecutorType.SIMPLE); + configuration.setDefaultStatementTimeout(25000); + configuration.setMapUnderscoreToCamelCase(true); + configuration.setJdbcTypeForNull(JdbcType.NVARCHAR); + configuration.setLazyLoadTriggerMethods(new HashSet<>(Arrays.asList("equals", "clone", "hashCode", "toString"))); + configuration.setLogPrefix("[SQL]"); + + return configuration; + } + + + + + + + +} diff --git a/src/main/java/com/bb/config/HttpEncryptionFilter.java b/src/main/java/com/bb/config/HttpEncryptionFilter.java new file mode 100644 index 0000000..3ec33b6 --- /dev/null +++ b/src/main/java/com/bb/config/HttpEncryptionFilter.java @@ -0,0 +1,35 @@ +package com.bb.config; + +import java.io.IOException; + +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@WebFilter("/api/*") +public class HttpEncryptionFilter implements Filter { + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { +// log.info("HttpEncryptionFilter.doFilter() call..."); + // TODO Auto-generated method stub + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + + RequestDecryptWrapper requestDecryptWrapper = new RequestDecryptWrapper(httpServletRequest); + ResponseEncryptWrapper responseEncryptWrapper = new ResponseEncryptWrapper(httpServletResponse); + + chain.doFilter(requestDecryptWrapper, responseEncryptWrapper); + + httpServletResponse.getOutputStream().write(responseEncryptWrapper.encryptResponse()); + } + +} diff --git a/src/main/java/com/bb/config/HttpInterceptor.java b/src/main/java/com/bb/config/HttpInterceptor.java new file mode 100644 index 0000000..3775911 --- /dev/null +++ b/src/main/java/com/bb/config/HttpInterceptor.java @@ -0,0 +1,35 @@ +package com.bb.config; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +public class HttpInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { +// log.info("[preHandle] " + request.getRequestURI()); +// log.info("[preHandle] " + request.toString()); + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { +// log.info("[postHandle] " + request.getRequestURI()); +// log.info("[postHandle] " + request.toString()); + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception { +// log.info("[afterCompletion] " + request.getRequestURI()); +// log.info("[afterCompletion] " + request.toString()); + } +} + diff --git a/src/main/java/com/bb/config/InterceptorConfig.java b/src/main/java/com/bb/config/InterceptorConfig.java new file mode 100644 index 0000000..5f920b9 --- /dev/null +++ b/src/main/java/com/bb/config/InterceptorConfig.java @@ -0,0 +1,17 @@ +package com.bb.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class InterceptorConfig implements WebMvcConfigurer { + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new HttpInterceptor()) + .addPathPatterns("/api/**/**/**/**") + .excludePathPatterns("/api/login", "/api/signUp"); // 해당 경로는 인터셉터가 가로채지 않는다. + } +} + + diff --git a/src/main/java/com/bb/config/OpenapiConfig.java b/src/main/java/com/bb/config/OpenapiConfig.java new file mode 100644 index 0000000..99e8037 --- /dev/null +++ b/src/main/java/com/bb/config/OpenapiConfig.java @@ -0,0 +1,55 @@ +package com.bb.config; + +import org.springdoc.core.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; +import io.swagger.v3.oas.annotations.info.Info; +import io.swagger.v3.oas.annotations.security.SecurityScheme; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.security.SecurityRequirement; + +@Configuration +@OpenAPIDefinition(info = @Info(title = "My API", version = "v1")) +@SecurityScheme( + name = "Authorization", + // type = SecuritySchemeType.HTTP, + scheme = "basic", type = SecuritySchemeType.APIKEY , in=SecuritySchemeIn.HEADER +) + + + +public class OpenapiConfig { + @Bean + public GroupedOpenApi publicOpenAPI( ) { + return GroupedOpenApi + .builder() + .group("front") + .packagesToScan("com.bb.front") + .build(); + } + + @Bean + public GroupedOpenApi adminAPI( ) { + return GroupedOpenApi + .builder() + .group("admin") + .packagesToScan("com.bb.admin") + .build(); + } + + @Bean + public GroupedOpenApi commonAPI( ) { + return GroupedOpenApi + .builder() + .group("common") + .packagesToScan("com.bb.common") + .build(); + } + + +} diff --git a/src/main/java/com/bb/config/RequestDecryptWrapper.java b/src/main/java/com/bb/config/RequestDecryptWrapper.java new file mode 100644 index 0000000..f9df127 --- /dev/null +++ b/src/main/java/com/bb/config/RequestDecryptWrapper.java @@ -0,0 +1,86 @@ +package com.bb.config; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; + +import org.apache.commons.io.IOUtils; +import org.springframework.util.ObjectUtils; + +import com.bb.util.AESUtil; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class RequestDecryptWrapper extends HttpServletRequestWrapper { + + private final Charset encoding; + private String decodingBody; + private byte[] rawData; + + public RequestDecryptWrapper(HttpServletRequest request) { + super(request); + String charEncoding = request.getCharacterEncoding(); + this.encoding = ObjectUtils.isEmpty(charEncoding) ? StandardCharsets.UTF_8 : Charset.forName(charEncoding); + + try { + InputStream inputStream = request.getInputStream(); + rawData = IOUtils.toByteArray(inputStream); + + if (ObjectUtils.isEmpty(rawData)) { + return; + } + + AESUtil aesUtil = new AESUtil(); + this.decodingBody = aesUtil.decrypt(new String(rawData, StandardCharsets.UTF_8)); + } catch (IOException e) { + log.error(e.getMessage()); + } + } + + @Override + public ServletInputStream getInputStream() { + final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(decodingBody == null ? "".getBytes(encoding) : decodingBody.getBytes(encoding)); + return new ServletInputStream() { + + @Override + public boolean isFinished() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isReady() { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setReadListener(ReadListener listener) { + // TODO Auto-generated method stub + + } + + @Override + public int read() throws IOException { + // TODO Auto-generated method stub + return byteArrayInputStream.read(); + } + + }; + } + + @Override + public BufferedReader getReader() { + return new BufferedReader(new InputStreamReader(this.getInputStream())); + } +} diff --git a/src/main/java/com/bb/config/ResponseEncryptWrapper.java b/src/main/java/com/bb/config/ResponseEncryptWrapper.java new file mode 100644 index 0000000..764011d --- /dev/null +++ b/src/main/java/com/bb/config/ResponseEncryptWrapper.java @@ -0,0 +1,54 @@ +package com.bb.config; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; + +import com.bb.util.AESUtil; + +public class ResponseEncryptWrapper extends HttpServletResponseWrapper { + + private final ByteArrayOutputStream output; + + public ResponseEncryptWrapper(HttpServletResponse response) { + super(response); + // TODO Auto-generated constructor stub + output = new ByteArrayOutputStream(); + } + + @Override + public ServletOutputStream getOutputStream() throws IOException { + return new ServletOutputStream() { + + @Override + public boolean isReady() { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setWriteListener(WriteListener listener) { + // TODO Auto-generated method stub + + } + + @Override + public void write(int b) throws IOException { + // TODO Auto-generated method stub + output.write(b); + } + + }; + } + + public byte[] encryptResponse() { + String responseMessage = new String(output.toByteArray(), StandardCharsets.UTF_8); + AESUtil aesUtil = new AESUtil(); + return aesUtil.encrypt(responseMessage).getBytes(StandardCharsets.UTF_8); + } +} diff --git a/src/main/java/com/bb/config/RestTemplateConfig.java b/src/main/java/com/bb/config/RestTemplateConfig.java new file mode 100644 index 0000000..5a7f8ff --- /dev/null +++ b/src/main/java/com/bb/config/RestTemplateConfig.java @@ -0,0 +1,46 @@ +package com.bb.config; + +import java.util.concurrent.TimeUnit; + +import org.apache.hc.client5.http.classic.HttpClient; +import org.apache.hc.client5.http.config.ConnectionConfig; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; +import org.apache.hc.client5.http.io.HttpClientConnectionManager; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + static final int READ_TIMEOUT = 1500; + static final int CONN_TIMEOUT = 3000; + + @Bean + public RestTemplate restTemplate() { + var factory = new HttpComponentsClientHttpRequestFactory(); + factory.setHttpClient(createHttpClient()); + return new RestTemplate(factory); + } + + private HttpClient createHttpClient() { + return org.apache.hc.client5.http.impl.classic + .HttpClientBuilder.create() + .setConnectionManager(createHttpClientConnectionManager()) + + .build(); + + } + + private HttpClientConnectionManager createHttpClientConnectionManager() { + return PoolingHttpClientConnectionManagerBuilder.create() + .setMaxConnTotal(4096) //최대 오픈되는 커넥션 수 + .setMaxConnPerRoute(200) //IP, 포트 1쌍에 대해 수행할 커넥션 수 + .setDefaultConnectionConfig(ConnectionConfig.custom() + .setSocketTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS) + .setConnectTimeout(CONN_TIMEOUT, TimeUnit.MILLISECONDS) + .build()) + .build(); + } +} diff --git a/src/main/java/com/bb/config/SecurityConfig.java b/src/main/java/com/bb/config/SecurityConfig.java new file mode 100644 index 0000000..4ac1664 --- /dev/null +++ b/src/main/java/com/bb/config/SecurityConfig.java @@ -0,0 +1,116 @@ +package com.bb.config; + +import java.util.Arrays; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +@Configuration +@EnableMethodSecurity(securedEnabled = true) +@ComponentScan(basePackages = {"com.bb.*"}) +public class SecurityConfig { + + @Autowired + @Lazy + AuthProvider authProvider; + + @Autowired + AuthFailureHandler authFailureHandler; + + @Autowired + AuthSuccessHandler authSuccessHandler; + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http.cors().configurationSource(corsConfigurationSource()) + .and().csrf().disable() + .authorizeHttpRequests(auth -> auth + .requestMatchers( + "/v3/api-docs", + "/swagger-resources/**", + "/webjars/**", + "/swagger/**", + "/favicon.ico", + "/html/**", + "/resources/**", + "/triple/**", + "/triple", + "/excb/**", + "/excb", + "/passim/**", + "/passim", + "/websocket", + "/websocket/**", + "/test", + "/test/**" + ).permitAll() + .requestMatchers("/api/**", "/actuator/**", "/triple/**", "/websocket", "/websocket/**", "/test/**", "/excb/**", "/passim/**").permitAll() + .anyRequest().authenticated() + ) + .formLogin(form -> form + .loginProcessingUrl("/authenticate") + .defaultSuccessUrl("/swagger-ui.html") + .failureHandler(authFailureHandler) + .successHandler(authSuccessHandler) + .usernameParameter("id") + .passwordParameter("pw") + ) + .logout(logout -> logout + .logoutRequestMatcher(new AntPathRequestMatcher("/logoutProc")) + .invalidateHttpSession(true) + ) + .authenticationProvider(authProvider) + .headers(headers -> headers.frameOptions().disable()); + + return http.build(); + } + + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } + + @Bean + public FilterRegistrationBean filterRegistrationBean() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + ApiKeyFilter customURLFilter = new ApiKeyFilter(); + + registrationBean.setFilter(customURLFilter); + registrationBean.addUrlPatterns("/api/login"); + registrationBean.setOrder(1); + + return registrationBean; + } + + @Bean + public CorsConfigurationSource corsConfigurationSource() { + final CorsConfiguration configuration = new CorsConfiguration(); + configuration.setAllowedOriginPatterns(Arrays.asList("*")); + configuration.addAllowedHeader("*"); + configuration.addAllowedMethod("*"); + configuration.setAllowCredentials(true); + + final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } + + @Bean + public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception { + return authenticationConfiguration.getAuthenticationManager(); + } +} \ No newline at end of file diff --git a/src/main/java/com/bb/config/WebClientConfig.java b/src/main/java/com/bb/config/WebClientConfig.java new file mode 100644 index 0000000..04c68df --- /dev/null +++ b/src/main/java/com/bb/config/WebClientConfig.java @@ -0,0 +1,189 @@ +package com.bb.config; + +import java.time.Duration; + +import javax.net.ssl.SSLException; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.reactive.ReactorClientHttpConnector; +import org.springframework.web.reactive.function.client.ExchangeFilterFunction; +import org.springframework.web.reactive.function.client.WebClient; + +import io.netty.channel.ChannelOption; +import io.netty.handler.ssl.SslContext; +import io.netty.handler.ssl.SslContextBuilder; +import io.netty.handler.ssl.SslProvider; +import io.netty.handler.ssl.util.InsecureTrustManagerFactory; +import io.netty.handler.timeout.ReadTimeoutHandler; +import io.netty.handler.timeout.WriteTimeoutHandler; +import lombok.extern.slf4j.Slf4j; +import reactor.core.publisher.Mono; +import reactor.netty.http.client.HttpClient; +import reactor.netty.tcp.TcpClient; + +@Slf4j +@Configuration +public class WebClientConfig { + + @Bean + public WebClient webClient() { + return WebClient.builder() + .filter(logRequest()) + .filter(logResponse()) + .build(); + } + + + @Bean + public WebClient webClientTimeout_1500() { + + HttpClient httpClient = HttpClient.create() + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1500); + + return WebClient.builder() + .clientConnector(new ReactorClientHttpConnector(httpClient)) + .filter(logRequest()) + .filter(logResponse()) + + .build(); + } + + @Bean + public WebClient webClientTimeout_3000() { + + HttpClient httpClient = HttpClient.create() + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000); + + return WebClient.builder() + .clientConnector(new ReactorClientHttpConnector(httpClient)) + .filter(logRequest()) + .filter(logResponse()) + + .build(); + } + + @Bean + public WebClient secureTls12WebClient() throws SSLException { + + // TLS 1.2 강제 + SslContext sslContext = SslContextBuilder.forClient() + .protocols("TLSv1.2") + .build(); + + // Timeout 적용 (Spring Boot 3.0.0 호환 방식) + TcpClient tcpClient = TcpClient.create() + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) // 연결 timeout (5초) + .doOnConnected(conn -> conn + .addHandlerLast(new ReadTimeoutHandler(10)) // 읽기 timeout 10초 + .addHandlerLast(new WriteTimeoutHandler(10)) // 쓰기 timeout 10초 + ) + .secure(ssl -> ssl.sslContext(sslContext)); + + HttpClient httpClient = HttpClient.from(tcpClient); + + return WebClient.builder() + .clientConnector(new ReactorClientHttpConnector(httpClient)) + .defaultHeader("Content-Type", "application/json") + .defaultHeader("Accept", "application/json") + .defaultHeader("Accept-Charset", "utf-8") + .defaultHeader("User-Agent", "PostmanRuntime/7.28.4") + .filter(logRequest2()) + .filter(logResponse2()) + .build(); + } + + @Bean + public WebClient webClientOpenSslFull() throws SSLException { + SslContext sslContext = SslContextBuilder.forClient() + .sslProvider(SslProvider.OPENSSL) + .protocols("TLSv1.3", "TLSv1.2") + .build(); + + TcpClient tcpClient = TcpClient.create() + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) + .doOnConnected(conn -> conn.addHandlerLast(new ReadTimeoutHandler(10))) + .secure(spec -> spec.sslContext(sslContext)); + + HttpClient httpClient = HttpClient.from(tcpClient); + + return WebClient.builder() + .clientConnector(new ReactorClientHttpConnector(httpClient)) + .defaultHeader("User-Agent", "PostmanRuntime/7.28.4") + .defaultHeader("Content-Type", "application/json") + .filter(logRequest2()) + .filter(logResponse2()) + .build(); + } + + @Bean + public WebClient insecureTrustAllWebClient() throws SSLException { + + // Netty용 SSLContext 생성 (Trust 모든 인증서) + SslContext sslContext = SslContextBuilder.forClient() + .trustManager(InsecureTrustManagerFactory.INSTANCE) + .protocols("TLSv1.2") + .build(); + + HttpClient httpClient = HttpClient.create() + .secure(spec -> spec.sslContext(sslContext)) + .responseTimeout(Duration.ofSeconds(10)) + .option(io.netty.channel.ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000); + + return WebClient.builder() + .clientConnector(new ReactorClientHttpConnector(httpClient)) + .build(); + } + + @Bean + public WebClient insecureJdkTlsWebClient() throws SSLException { + + // JDK SSLContext 사용, 인증서 검증 무시 + SslContext sslContext = SslContextBuilder.forClient() + .sslProvider(SslProvider.JDK) // JDK SSLContext 사용 강제 + .trustManager(InsecureTrustManagerFactory.INSTANCE) // 인증서 무시 + .protocols("TLSv1.2") // TLS 1.2 강제 + .build(); + + HttpClient httpClient = HttpClient.create() + .secure(spec -> spec.sslContext(sslContext)) + .responseTimeout(Duration.ofSeconds(10)) + .option(io.netty.channel.ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000); + + return WebClient.builder() + .clientConnector(new ReactorClientHttpConnector(httpClient)) + .build(); + } + + /** Request 로깅 **/ + private ExchangeFilterFunction logRequest2() { + return ExchangeFilterFunction.ofRequestProcessor(request -> { + System.out.println("### WebClient Request: " + request.method() + " " + request.url()); + return reactor.core.publisher.Mono.just(request); + }); + } + + /** Response 로깅 **/ + private ExchangeFilterFunction logResponse2() { + return ExchangeFilterFunction.ofResponseProcessor(response -> { + System.out.println("### WebClient Response Status: " + response.statusCode()); + return reactor.core.publisher.Mono.just(response); + }); + } + + private ExchangeFilterFunction logRequest() { + return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> { + // log.info("Request: {} {}", clientRequest.method(), clientRequest.url()); + // clientRequest.headers().forEach((name, values) -> values.forEach(value -> log.info("{}={}", name, value))); + return Mono.just(clientRequest); + }); + } + + private ExchangeFilterFunction logResponse() { + return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> { + // log.info("Response Status: {}", clientResponse.statusCode()); + // clientResponse.headers().asHttpHeaders().forEach((name, values) -> values.forEach(value -> log.info("{}={}", name, value))); + return Mono.just(clientResponse); + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/bb/config/WebSocketConfig.java b/src/main/java/com/bb/config/WebSocketConfig.java new file mode 100644 index 0000000..fbe8885 --- /dev/null +++ b/src/main/java/com/bb/config/WebSocketConfig.java @@ -0,0 +1,29 @@ +package com.bb.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.ChannelRegistration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + @Override + public void configureMessageBroker(MessageBrokerRegistry config) { + config.enableSimpleBroker("/topic"); + config.setApplicationDestinationPrefixes("/app"); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/websocket").setAllowedOriginPatterns("*").withSockJS(); + } + + @Override + public void configureClientInboundChannel(ChannelRegistration registration) { + registration.interceptors(new WebSocketInterceptor()); + } +} \ No newline at end of file diff --git a/src/main/java/com/bb/config/WebSocketInterceptor.java b/src/main/java/com/bb/config/WebSocketInterceptor.java new file mode 100644 index 0000000..23e6160 --- /dev/null +++ b/src/main/java/com/bb/config/WebSocketInterceptor.java @@ -0,0 +1,32 @@ +package com.bb.config; + +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.support.ChannelInterceptor; +import org.springframework.stereotype.Component; + +@Component +public class WebSocketInterceptor implements ChannelInterceptor { + + private final Set sessionSet = new HashSet<>(); + + @Override + public Message preSend(Message message, MessageChannel channel) { + String simpMessageType = String.valueOf(message.getHeaders().get("simpMessageType")); + if (StringUtils.equals(simpMessageType, "CONNECT")) { + String simpSessionId = String.valueOf(message.getHeaders().get("simpSessionId")); + sessionSet.add(simpSessionId); + } else if (StringUtils.equals(simpMessageType, "DISCONNECT")) { + String simpSessionId = String.valueOf(message.getHeaders().get("simpSessionId")); + sessionSet.remove(simpSessionId); + } + + int uniqueJoinSessionCount = sessionSet.size(); + // System.out.println("connectCnt: " + uniqueJoinSessionCount); + return message; + } +} \ No newline at end of file diff --git a/src/main/java/com/bb/controller/CallbackPassimController.java b/src/main/java/com/bb/controller/CallbackPassimController.java new file mode 100644 index 0000000..82378d6 --- /dev/null +++ b/src/main/java/com/bb/controller/CallbackPassimController.java @@ -0,0 +1,35 @@ +package com.bb.controller; + +import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.EnableScheduling; +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 com.bb.model.PassimVo; +import com.bb.service.PassimService; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@EnableScheduling +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/passim") +public class CallbackPassimController { + + private final PassimService passimService; + + @PostMapping(value="/notification") + public ResponseEntity notificationWebHook(HttpServletRequest request, @RequestBody PassimVo webhook) { + + // 멱등 처리: txHash 기준 + + // TODO: 비즈니스 처리 (포인트 충전 등) + + return ResponseEntity.ok("OK"); + } +} diff --git a/src/main/java/com/bb/controller/CallbackRvHoldemController.java b/src/main/java/com/bb/controller/CallbackRvHoldemController.java new file mode 100644 index 0000000..21de356 --- /dev/null +++ b/src/main/java/com/bb/controller/CallbackRvHoldemController.java @@ -0,0 +1,443 @@ +package com.bb.controller; + +import java.util.HashMap; + +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.EnableScheduling; +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 com.bb.model.Member; +import com.bb.model.RvHoldemResponse; +import com.bb.model.RvHoldemVO; +import com.bb.service.AsyncBetService; +import com.bb.service.BetService; +import com.bb.service.UserService; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONObject; + +@Slf4j +@EnableScheduling +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/excb/rvholdem") +public class CallbackRvHoldemController { + + private final UserService userService; + + private final BetService betService; + + private final AsyncBetService asyncService; + + /** + * APICode + * FAILED = 0, + * INVALID_ARGUMENT = -4, + * UNKNOWN_ERROR = -3, + * INVALID_PK = -2, + * UNAUTH = -1, + * SUCCESS = 1 + */ + + @PostMapping(value="/ping") + public ResponseEntity ping(HttpServletRequest request) throws Exception { + RvHoldemResponse response = new RvHoldemResponse(); + response.setCode(1); + HttpStatus httpStatus = HttpStatus.OK; + + return new ResponseEntity(response, httpStatus); + } + + @PostMapping(value="/user/balance") + public ResponseEntity userBalance(HttpServletRequest request, @RequestBody JSONObject requestBody) { + RvHoldemResponse response = new RvHoldemResponse(); + HttpStatus httpStatus = HttpStatus.OK; + + String apiKey = request.getHeader("apikey").toString(); + String uid = requestBody.getString("uid"); + String cbUid = requestBody.getString("cb_uid"); + + int siteIdx = Integer.parseInt(uid.substring(0, 3), 16); + String memberId = uid.substring(3, uid.length()); + final String LOG_PREFIX = "#-CB::RV_HOLDEM::"+uid+"::"+cbUid+"::userBalance:::"; + log.info(LOG_PREFIX+ "Request Body : " + requestBody.toString()); + + HashMap checkInfo = userService.getRvHoldemCheckInfo(uid); + if(checkInfo == null) { + log.error(LOG_PREFIX + "UNAUTH::NOT_FOUND_USER"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + if(!checkInfo.get("apiKey").toString().equals(apiKey)) { + log.error(LOG_PREFIX + "UNAUTH::INVALID_APIKEY"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + Member memInfo = new Member(); + memInfo.setSiteIdx(siteIdx); + memInfo.setMemId(memberId); + int balance = betService.getCurBalance(memInfo); + + response.setCode(1); + response.setPayload(balance); + + return new ResponseEntity(response, httpStatus); + } + + @PostMapping(value="/game/buyin") + public ResponseEntity gameBuyIn(HttpServletRequest request, @RequestBody JSONObject requestBody) { + RvHoldemResponse response = new RvHoldemResponse(); + HttpStatus httpStatus = HttpStatus.OK; + + String apiKey = request.getHeader("apikey").toString(); + String uid = requestBody.getString("uid"); + String cbUid = requestBody.getString("cb_uid"); + + int siteIdx = Integer.parseInt(uid.substring(0, 3), 16); + String memberId = uid.substring(3, uid.length()); + final String LOG_PREFIX = "#-CB::RV_HOLDEM::"+uid+"::"+cbUid+"::gameBuyIn:::"; + log.info(LOG_PREFIX+ "Request Body : " + requestBody.toString()); + + HashMap checkInfo = userService.getRvHoldemCheckInfo(uid); + if(checkInfo == null) { + log.error(LOG_PREFIX + "UNAUTH::NOT_FOUND_USER"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + if(!checkInfo.get("apiKey").toString().equals(apiKey)) { + log.error(LOG_PREFIX + "UNAUTH::INVALID_APIKEY"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + Member memInfo = new Member(); + memInfo.setSiteIdx(siteIdx); + memInfo.setMemId(memberId); + HashMap memberVo = userService.getMemberMap(memInfo); + + // Insert rvholdem_callback_log + RvHoldemVO rvParam = RvHoldemVO.fromJSONObject(LOG_PREFIX, requestBody); + rvParam.setSiteId(memberVo.get("siteId").toString()); + rvParam.setMemId(memberId); + rvParam.setCallbackType("buyin"); + log.info(LOG_PREFIX+ "rvParam : " + rvParam.toString()); + + int balance = Integer.parseInt(memberVo.get("cashAmt").toString()); + int amount = rvParam.getAmount(); + rvParam.setBfBalance(balance); + rvParam.setAfBalance(balance+amount); + + int cbIdx = 0; + try { + cbIdx = betService.insertRvhCallbackLog(rvParam); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX + "Duplicate cb_uid!!! " + de.getMessage(), de); + response.setCode(-2); + return new ResponseEntity(response, httpStatus); + } + + if(cbIdx > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + + asyncService.cashProc(LOG_PREFIX, rvParam); + } else { + log.error(LOG_PREFIX + "INSERT_CALLBACK_LOG_FAIL"); + response.setCode(-3); + return new ResponseEntity(response, httpStatus); + } + + response.setCode(1); + response.setPayload(balance+amount); + + return new ResponseEntity(response, httpStatus); + } + + @PostMapping(value="/game/rebuyin") + public ResponseEntity gameReBuyIn(HttpServletRequest request, @RequestBody JSONObject requestBody) { + RvHoldemResponse response = new RvHoldemResponse(); + HttpStatus httpStatus = HttpStatus.OK; + + String apiKey = request.getHeader("apikey").toString(); + String uid = requestBody.getString("uid"); + String cbUid = requestBody.getString("cb_uid"); + + int siteIdx = Integer.parseInt(uid.substring(0, 3), 16); + String memberId = uid.substring(3, uid.length()); + final String LOG_PREFIX = "#-CB::RV_HOLDEM::"+uid+"::"+cbUid+"::gameReBuyIn:::"; + log.info(LOG_PREFIX+ "Request Body : " + requestBody.toString()); + + HashMap checkInfo = userService.getRvHoldemCheckInfo(uid); + if(checkInfo == null) { + log.error(LOG_PREFIX + "UNAUTH::NOT_FOUND_USER"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + if(!checkInfo.get("apiKey").toString().equals(apiKey)) { + log.error(LOG_PREFIX + "UNAUTH::INVALID_APIKEY"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + Member memInfo = new Member(); + memInfo.setSiteIdx(siteIdx); + memInfo.setMemId(memberId); + HashMap memberVo = userService.getMemberMap(memInfo); + + // Insert rvholdem_callback_log + RvHoldemVO rvParam = RvHoldemVO.fromJSONObject(LOG_PREFIX, requestBody); + rvParam.setSiteId(memberVo.get("siteId").toString()); + rvParam.setMemId(memberId); + rvParam.setCallbackType("rebuyin"); + log.info(LOG_PREFIX+ "rvParam : " + rvParam.toString()); + + int balance = Integer.parseInt(memberVo.get("cashAmt").toString()); + int amount = rvParam.getAmount(); + rvParam.setBfBalance(balance); + rvParam.setAfBalance(balance+amount); + + int cbIdx = 0; + try { + cbIdx = betService.insertRvhCallbackLog(rvParam); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX + "Duplicate cb_uid!!! " + de.getMessage(), de); + response.setCode(-2); + return new ResponseEntity(response, httpStatus); + } + + if(cbIdx > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + + asyncService.cashProc(LOG_PREFIX, rvParam); + } else { + log.error(LOG_PREFIX + "INSERT_CALLBACK_LOG_FAIL"); + response.setCode(-3); + return new ResponseEntity(response, httpStatus); + } + + response.setCode(1); + response.setPayload(balance+amount); + + return new ResponseEntity(response, httpStatus); + } + + @PostMapping(value="/game/win") + public ResponseEntity gameWin(HttpServletRequest request, @RequestBody JSONObject requestBody) { + RvHoldemResponse response = new RvHoldemResponse(); + HttpStatus httpStatus = HttpStatus.OK; + + String apiKey = request.getHeader("apikey").toString(); + String uid = requestBody.getString("uid"); + String cbUid = requestBody.getString("cb_uid"); + + int siteIdx = Integer.parseInt(uid.substring(0, 3), 16); + String memberId = uid.substring(3, uid.length()); + final String LOG_PREFIX = "#-CB::RV_HOLDEM::"+uid+"::"+cbUid+"::gameWin:::"; + log.info(LOG_PREFIX+ "Request Body : " + requestBody.toString()); + + HashMap checkInfo = userService.getRvHoldemCheckInfo(uid); + if(checkInfo == null) { + log.error(LOG_PREFIX + "UNAUTH::NOT_FOUND_USER"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + if(!checkInfo.get("apiKey").toString().equals(apiKey)) { + log.error(LOG_PREFIX + "UNAUTH::INVALID_APIKEY"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + Member memInfo = new Member(); + memInfo.setSiteIdx(siteIdx); + memInfo.setMemId(memberId); + HashMap memberVo = userService.getMemberMap(memInfo); + + // Insert rvholdem_callback_log + RvHoldemVO rvParam = RvHoldemVO.fromJSONObject(LOG_PREFIX, requestBody); + rvParam.setSiteId(memberVo.get("siteId").toString()); + rvParam.setMemId(memberId); + rvParam.setCallbackType("win"); + log.info(LOG_PREFIX+ "rvParam : " + rvParam.toString()); + + int balance = Integer.parseInt(memberVo.get("cashAmt").toString()); + int amount = rvParam.getAmount(); + rvParam.setBfBalance(balance); + rvParam.setAfBalance(balance+amount); + + int cbIdx = 0; + try { + cbIdx = betService.insertRvhCallbackLog(rvParam); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX + "Duplicate cb_uid!!! " + de.getMessage(), de); + response.setCode(-2); + return new ResponseEntity(response, httpStatus); + } + + if(cbIdx > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + + asyncService.cashProc(LOG_PREFIX, rvParam); + } else { + log.error(LOG_PREFIX + "INSERT_CALLBACK_LOG_FAIL"); + response.setCode(-3); + return new ResponseEntity(response, httpStatus); + } + + response.setCode(1); + response.setPayload(balance+amount); + + return new ResponseEntity(response, httpStatus); + } + + @PostMapping(value="/game/leave") + public ResponseEntity gameLeave(HttpServletRequest request, @RequestBody JSONObject requestBody) throws Exception { + RvHoldemResponse response = new RvHoldemResponse(); + HttpStatus httpStatus = HttpStatus.OK; + + String apiKey = request.getHeader("apikey").toString(); + String uid = requestBody.getString("uid"); + String cbUid = requestBody.getString("cb_uid"); + + int siteIdx = Integer.parseInt(uid.substring(0, 3), 16); + String memberId = uid.substring(3, uid.length()); + final String LOG_PREFIX = "#-CB::RV_HOLDEM::"+uid+"::"+cbUid+"::gameLeave:::"; + log.info(LOG_PREFIX+ "Request Body : " + requestBody.toString()); + + HashMap checkInfo = userService.getRvHoldemCheckInfo(uid); + if(checkInfo == null) { + log.error(LOG_PREFIX + "UNAUTH::NOT_FOUND_USER"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + if(!checkInfo.get("apiKey").toString().equals(apiKey)) { + log.error(LOG_PREFIX + "UNAUTH::INVALID_APIKEY"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + Member memInfo = new Member(); + memInfo.setSiteIdx(siteIdx); + memInfo.setMemId(memberId); + HashMap memberVo = userService.getMemberMap(memInfo); + + // Insert rvholdem_callback_log + RvHoldemVO rvParam = RvHoldemVO.fromJSONObject(LOG_PREFIX, requestBody); + rvParam.setSiteId(memberVo.get("siteId").toString()); + rvParam.setMemId(memberId); + rvParam.setCallbackType("leave"); + log.info(LOG_PREFIX+ "rvParam : " + rvParam.toString()); + + int balance = Integer.parseInt(memberVo.get("cashAmt").toString()); + int amount = rvParam.getAmount(); + rvParam.setBfBalance(balance); + rvParam.setAfBalance(balance+amount); + + int cbIdx = 0; + try { + cbIdx = betService.insertRvhCallbackLog(rvParam); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX + "Duplicate cb_uid!!! " + de.getMessage(), de); + response.setCode(-2); + return new ResponseEntity(response, httpStatus); + } + + if(cbIdx > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + + asyncService.cashProc(LOG_PREFIX, rvParam); + } else { + log.error(LOG_PREFIX + "INSERT_CALLBACK_LOG_FAIL"); + response.setCode(-3); + return new ResponseEntity(response, httpStatus); + } + + response.setCode(1); + response.setPayload(balance+amount); + + return new ResponseEntity(response, httpStatus); + } + + @PostMapping(value="/game/result") + public ResponseEntity gameResult(HttpServletRequest request, @RequestBody JSONObject requestBody) throws Exception { + RvHoldemResponse response = new RvHoldemResponse(); + HttpStatus httpStatus = HttpStatus.OK; + + String apiKey = request.getHeader("apikey").toString(); + String uid = requestBody.getString("uid"); + String cbUid = requestBody.getString("cb_uid"); + + int siteIdx = Integer.parseInt(uid.substring(0, 3), 16); + String memberId = uid.substring(3, uid.length()); + final String LOG_PREFIX = "#-CB::RV_HOLDEM::"+uid+"::"+cbUid+"::gameResult:::"; + log.info(LOG_PREFIX+ "Request Body : " + requestBody.toString()); + + HashMap checkInfo = userService.getRvHoldemCheckInfo(uid); + if(checkInfo == null) { + log.error(LOG_PREFIX + "UNAUTH::NOT_FOUND_USER"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + if(!checkInfo.get("apiKey").toString().equals(apiKey)) { + log.error(LOG_PREFIX + "UNAUTH::INVALID_APIKEY"); + response.setCode(-1); + return new ResponseEntity(response, httpStatus); + } + + response.setCode(1); + + return new ResponseEntity(response, httpStatus); + } +} diff --git a/src/main/java/com/bb/controller/CallbackTripleController.java b/src/main/java/com/bb/controller/CallbackTripleController.java new file mode 100644 index 0000000..4d9d1b9 --- /dev/null +++ b/src/main/java/com/bb/controller/CallbackTripleController.java @@ -0,0 +1,997 @@ +package com.bb.controller; + +import java.text.SimpleDateFormat; +import java.util.HashMap; + +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.EnableScheduling; +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 com.bb.model.Member; +import com.bb.model.TripleResponse; +import com.bb.model.TripleVO; +import com.bb.service.AsyncBetService; +import com.bb.service.BetService; +import com.bb.service.SportService; +import com.bb.service.UserService; +import com.google.gson.Gson; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONObject; + +@Slf4j +@EnableScheduling +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/triple") +public class CallbackTripleController { + + private final UserService userService; + + private final BetService betService; + + private final SportService sportService; + + private final AsyncBetService asyncService; + + + @PostMapping(value="/balance") + public ResponseEntity balance(HttpServletRequest request, @RequestBody JSONObject requestBody) throws Exception { + long startTime = System.currentTimeMillis(); + TripleResponse response = new TripleResponse(); + HttpStatus httpStatus = null; + String tripleUserId = requestBody.getString("userId"); + int siteIdx = Integer.parseInt(tripleUserId.substring(0, 3), 16); + String memberId = tripleUserId.substring(3, tripleUserId.length()); + final String LOG_PREFIX = "#-CB::TRIPLE::balance::"+requestBody.getString("userId")+"::"+requestBody.getString("requestAt")+":::"; + log.info(LOG_PREFIX+ "Request Body : " + requestBody.toString()); + + try { + Member memInfo = new Member(); + memInfo.setSiteIdx(siteIdx); + memInfo.setMemId(memberId); + int balance = betService.getCurBalance(memInfo); + response.setResult_code(0); + response.setBalance(balance); + httpStatus = HttpStatus.OK; + + } catch(Exception e) { + response.setResult_code(9999); + response.setError_msg("UNKNOWN_ERROR"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + log.error(LOG_PREFIX+ "Exception : "+e.getMessage()); + } + + log.info(LOG_PREFIX+ "Response Data : " + response.toString()); + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) { + log.error(LOG_PREFIX+ "[### balance diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + return new ResponseEntity(response, httpStatus); + } + + + @PostMapping(value="/changebalance") + public ResponseEntity changeBalance(HttpServletRequest request, @RequestBody JSONObject transaction) throws Exception { + long startTime = System.currentTimeMillis(); + ResponseEntity resEntity = null; + HttpStatus httpStatus = null; + String tripleUserId = transaction.getString("userId"); + int siteIdx = Integer.parseInt(tripleUserId.substring(0, 3), 16); + String memberId = tripleUserId.substring(3, tripleUserId.length()); + final String LOG_PREFIX = "#-CB::TRIPLE::changeBalance::"+transaction.getString("userId")+"::"+transaction.getString("tranId")+":::"; + log.info(LOG_PREFIX+ "Request Body : " + transaction.toString()); + + try { + String transactionType = transaction.getString("tranType"); + int isCancel = transaction.getInt("isCancel"); + int isBonus = transaction.getInt("isBonus"); + + Member memInfo = new Member(); + memInfo.setSiteIdx(siteIdx); + memInfo.setMemId(memberId); + + if(!transaction.has("requestAt") || transaction.getString("requestAt").equals("")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + transaction.put("requestAt", nDateStr); + } + + int vendorIdx = transaction.getInt("vendorIdx"); + if(vendorIdx == 83 || vendorIdx == 84) { + // 스포츠 배팅 + TripleVO tripleVO = new Gson().fromJson(transaction.toString(), TripleVO.class); + net.sf.json.JSONObject responseObj = sportService.betProc(memInfo, tripleVO); + TripleResponse response = new Gson().fromJson(responseObj.toString(), TripleResponse.class); + if(responseObj.getString("result_code").equals("0") || + responseObj.getString("result_code").equals("70") || + responseObj.getString("result_code").equals("80") || + responseObj.getString("result_code").equals("98") || + responseObj.getString("result_code").equals("99") || + responseObj.getString("result_code").equals("44") || + responseObj.getString("result_code").equals("1005") || + responseObj.getString("result_code").equals("3333") ) { + + // 0 70 80 98 99 + httpStatus = HttpStatus.OK; + } else { + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + } + resEntity = new ResponseEntity(response, httpStatus); + } else { + if(transactionType.equals("debit") && isCancel == 0) { + log.info(LOG_PREFIX+ "callBet() ================="); + resEntity = callBet(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("credit") && isCancel == 0 && isBonus == 0) { + log.info(LOG_PREFIX+ "callWin() ================="); + resEntity = callWin(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("credit") && isCancel == 1) { + log.info(LOG_PREFIX+ "callCancel() ================="); + resEntity = callCancel(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("credit") && isBonus == 1) { + log.info(LOG_PREFIX+ "callBonus() ================="); + resEntity = callBonus(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("adjust")) { + // 해당 타입은 "조정" 이라는 의미로, 해당 내역은 이미 처리된 내역에 대한 조정을 의미합니다. + // amount 값은 + (재지급), - (오지급 회수)가 될 수 있습니다. + log.info(LOG_PREFIX+ "callAdjust() ================="); + resEntity = callAdjust(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("tip")) { + log.info(LOG_PREFIX+ "callTip() ================="); + resEntity = callTip(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("credit_wait")) { + log.info(LOG_PREFIX+ "callCreditWait() ================="); + int balance = betService.getCurBalance(memInfo); + TripleResponse response = new TripleResponse(); + response.setResult_code(0); + response.setBalance(balance); + httpStatus = HttpStatus.OK; + resEntity = new ResponseEntity(response, httpStatus); + + } else { + log.error(LOG_PREFIX+ "unknown_transaction_type"); + TripleResponse response = new TripleResponse(); + response.setResult_code(8888); + response.setError_msg("UNKNOWN_TRAN_TYPE"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + resEntity = new ResponseEntity(response, httpStatus); + + } + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "Exception : "+e.getMessage()); + TripleResponse response = new TripleResponse(); + response.setResult_code(9999); + response.setError_msg("UNKNOWN_ERROR"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + resEntity = new ResponseEntity(response, httpStatus); + } + + log.info(LOG_PREFIX+ "Response Data : " + resEntity.toString()); + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) { + log.error(LOG_PREFIX+ "[### balance diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + return resEntity; + } + + + @PostMapping(value="/changebalance/slot") + public ResponseEntity changeBalanceSlot(HttpServletRequest request, @RequestBody JSONObject transaction) throws Exception { + long startTime = System.currentTimeMillis(); + ResponseEntity resEntity = null; + HttpStatus httpStatus = null; + String tripleUserId = transaction.getString("userId"); + int siteIdx = Integer.parseInt(tripleUserId.substring(0, 3), 16); + String memberId = tripleUserId.substring(3, tripleUserId.length()); + final String LOG_PREFIX = "#-CB::TRIPLE::changeBalanceSlot::"+transaction.getString("userId")+"::"+transaction.getString("tranId")+":::"; + log.info(LOG_PREFIX+ "Request Body : " + transaction.toString()); + + try { + String transactionType = transaction.getString("tranType"); + int isCancel = transaction.getInt("isCancel"); + int isBonus = transaction.getInt("isBonus"); + + Member memInfo = new Member(); + memInfo.setSiteIdx(siteIdx); + memInfo.setMemId(memberId); + + if(!transaction.has("requestAt") || transaction.getString("requestAt").equals("")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + transaction.put("requestAt", nDateStr); + } + + if(transactionType.equals("debit") && isCancel == 0) { + log.info(LOG_PREFIX+ "callBet() ================="); + resEntity = callBetSlot(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("credit") && isCancel == 0 && isBonus == 0) { + log.info(LOG_PREFIX+ "callWin() ================="); + resEntity = callWinSlot(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("credit") && isCancel == 1) { + log.info(LOG_PREFIX+ "callCancel() ================="); + resEntity = callCancel(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("credit") && isBonus == 1) { + log.info(LOG_PREFIX+ "callBonus() ================="); + resEntity = callBonus(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("adjust")) { + // 해당 타입은 "조정" 이라는 의미로, 해당 내역은 이미 처리된 내역에 대한 조정을 의미합니다. + // amount 값은 + (재지급), - (오지급 회수)가 될 수 있습니다. + log.info(LOG_PREFIX+ "callAdjust() ================="); + resEntity = callAdjust(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("tip")) { + log.info(LOG_PREFIX+ "callTip() ================="); + resEntity = callTip(LOG_PREFIX, memInfo, transaction); + + } else if(transactionType.equals("credit_wait")) { + log.info(LOG_PREFIX+ "callCreditWait() ================="); + int balance = betService.getCurBalance(memInfo); + TripleResponse response = new TripleResponse(); + response.setResult_code(0); + response.setBalance(balance); + httpStatus = HttpStatus.OK; + resEntity = new ResponseEntity(response, httpStatus); + + } else { + log.error(LOG_PREFIX+ "unknown_transaction_type"); + TripleResponse response = new TripleResponse(); + response.setResult_code(8888); + response.setError_msg("UNKNOWN_TRAN_TYPE"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + resEntity = new ResponseEntity(response, httpStatus); + + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "Exception : "+e.getMessage()); + TripleResponse response = new TripleResponse(); + response.setResult_code(9999); + response.setError_msg("UNKNOWN_ERROR"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + resEntity = new ResponseEntity(response, httpStatus); + } + + log.info(LOG_PREFIX+ "Response Data : " + resEntity.toString()); + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) { + log.error(LOG_PREFIX+ "[### balance diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + return resEntity; + } + + + private ResponseEntity callBet(String LOG_PREFIX, Member memInfo, JSONObject transaction) { + LOG_PREFIX = LOG_PREFIX + "BET:::"; + ResponseEntity resEntity = null; + TripleResponse response = new TripleResponse(); + + HashMap memberVo = userService.getMemberMap(memInfo); + if(memberVo == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_USER"); + response.setResult_code(1111); + response.setError_msg("NOT_FOUND_USER"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + if(memberVo.get("betYn").toString().equals("N") || memberVo.get("memLockYn").toString().equals("Y")) { + log.error(LOG_PREFIX+ "betYn : "+memberVo.get("betYn").toString()); + log.error(LOG_PREFIX+ "memLockYn : "+memberVo.get("memLockYn").toString()); + response.setResult_code(1005); + response.setError_msg("THIS_USER_BETTING_LOCK"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + int balance = Integer.parseInt(memberVo.get("cashAmt").toString()); + int amount = transaction.getInt("debit"); + amount = Math.abs(amount) * -1; + if(balance < Math.abs(amount)) { + log.error(LOG_PREFIX+ "유저 잔액부족::balance::"+balance+"::amount::"+amount); + response.setResult_code(80); + response.setBalance(balance); + response.setError_msg("INSUFFICIENT_FUNDS"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + String tranId = transaction.getString("tranId"); + String betId = transaction.getString("betId"); + String apiVendorCode = transaction.getString("vendorKey"); + String gameName = transaction.getString("gameKey"); + + HashMap vParam = new HashMap<>(); + vParam.put("siteId", memberVo.get("siteId").toString()); + vParam.put("apiCompCode", "triple"); + vParam.put("apiVendorCode", apiVendorCode); + vParam.put("memLevel", memberVo.get("memLevel").toString()); + HashMap siteVendorInfo = betService.getSiteVendorInfo(vParam); + if(siteVendorInfo == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_VENDOR"); + response.setResult_code(70); + response.setError_msg("NOT_FOUND_VENDOR"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + int maxBetAmt = Integer.parseInt(siteVendorInfo.get("betAmtMax").toString()); + if(maxBetAmt < Math.abs(amount)) { + log.error(LOG_PREFIX+ "MAX_BET_OVER"); + log.error(LOG_PREFIX+ "siteMaxBet : " + maxBetAmt +", amount : " + amount); + response.setResult_code(81); + response.setBalance(balance); + response.setError_msg("MAX_BET_OVER"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + HashMap betData = new HashMap(); + betData.put("tranId", tranId); + betData.put("betId", betId); + betData.put("siteId", memberVo.get("siteId").toString()); + betData.put("memId", memberVo.get("memId").toString()); + betData.put("apiCompCode", "triple"); + betData.put("apiVendor", transaction.getString("vendor")); + betData.put("gameCategory", siteVendorInfo.get("gameCategory").toString()); + betData.put("vendorCode", siteVendorInfo.get("vendorCode").toString()); + betData.put("gameName", gameName); + betData.put("tranType", "DEBIT"); + betData.put("betAmt", Math.abs(amount)); + betData.put("betWinAmt", 0); + betData.put("balance", (balance+amount)); + betData.put("isBlankSpinYn", "N"); + betData.put("pointRegYn", "N"); + betData.put("regDate", transaction.getString("requestAt")); + betData.put("updDate", transaction.getString("requestAt")); + int betResult = 0; + try { + log.info(LOG_PREFIX+ "betData : "+betData.toString()); + betResult = betService.insertBetNew(betData); + log.info(LOG_PREFIX+ "insertBet result : "+betResult); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate tranId!!!"); + response.setResult_code(98); + response.setBalance(balance); + response.setError_msg("BET_ALREADY_SETTLED"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + if(betResult > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + + asyncService.rollingProc(LOG_PREFIX, betData); + + } else { + log.error(LOG_PREFIX+ "BET_FAIL"); + response.setResult_code(9999); + response.setError_msg("BET_FAIL"); + resEntity = new ResponseEntity(response, HttpStatus.INTERNAL_SERVER_ERROR); + return resEntity; + } + + log.info(LOG_PREFIX+ "beforeBalance : "+balance); + log.info(LOG_PREFIX+ "amount : "+amount); + log.info(LOG_PREFIX+ "responseBalance : "+(balance+amount)); + + response.setResult_code(0); + response.setBalance(balance+amount); + response.setError_msg(""); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + + private ResponseEntity callWin(String LOG_PREFIX, Member memInfo, JSONObject transaction) { + LOG_PREFIX = LOG_PREFIX + "WIN:::"; + ResponseEntity resEntity = null; + TripleResponse response = new TripleResponse(); + + String tranId = transaction.getString("tranId"); + String betId = transaction.getString("betId"); + + HashMap betData = betService.getReferenceData2(betId); + if(betData == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_REF_DATA"); + response.setResult_code(99); + response.setError_msg("NOT_FOUND_REF_DATA"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + int balance = betService.getCurBalance(memInfo); + int amount = transaction.getInt("credit"); + betData.put("tranId", tranId); + betData.put("betId", betId); + betData.put("tranType", "CREDIT"); + betData.put("betAmt", 0); + betData.put("betWinAmt", Math.abs(amount)); + betData.put("balance", (balance+amount)); + betData.put("updDate", transaction.getString("requestAt")); + int betResult = 0; + try { + log.info(LOG_PREFIX+ "betData : "+betData.toString()); + betResult = betService.insertBetNew(betData); + log.info(LOG_PREFIX+ "insertBet result : "+betResult); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate tranId!!!"); + response.setResult_code(98); + response.setBalance(balance); + response.setError_msg("WIN_ALREADY_SETTLED"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + if(betResult > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + + if(betData.get("gameCategory").toString().equals("casino")) { + // #-Rolling Tie Proc call + asyncService.rollingTieProc(LOG_PREFIX, betId); + } + else { + asyncService.losingResultProc(LOG_PREFIX, betData); + } + + //asyncService.losingResultProc(LOG_PREFIX, betData); + } else { + log.error(LOG_PREFIX+ "WIN_FAIL"); + response.setResult_code(9999); + response.setError_msg("WIN_FAIL"); + resEntity = new ResponseEntity(response, HttpStatus.INTERNAL_SERVER_ERROR); + return resEntity; + } + + log.info(LOG_PREFIX+ "beforeBalance : "+balance); + log.info(LOG_PREFIX+ "amount : "+amount); + log.info(LOG_PREFIX+ "responseBalance : "+(balance+amount)); + + response.setResult_code(0); + response.setBalance(balance+amount); + response.setError_msg(""); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + + private ResponseEntity callCancel(String LOG_PREFIX, Member memInfo, JSONObject transaction) { + LOG_PREFIX = LOG_PREFIX + "CANCEL:::"; + ResponseEntity resEntity = null; + TripleResponse response = new TripleResponse(); + + String tranId = transaction.getString("tranId"); + String betId = transaction.getString("betId"); + + HashMap betData = betService.getReferenceData1(betId); + if(betData == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_REF_DATA"); + response.setResult_code(99); + response.setError_msg("NOT_FOUND_REF_DATA"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + int betAmt = Integer.parseInt(betData.get("betAmt").toString()); + int balance = betService.getCurBalance(memInfo); + int amount = transaction.getInt("credit"); + + betData.put("tranId", tranId); + betData.put("betId", betId); + betData.put("tranType", "CANCEL"); + betData.put("betAmt", 0); + betData.put("betWinAmt", Math.abs(amount)); + betData.put("balance", (balance+amount)); + betData.put("isCancel", "Y"); + betData.put("updDate", transaction.getString("requestAt")); + int betResult = 0; + try { + log.info(LOG_PREFIX+ "betData : "+betData.toString()); + betResult = betService.insertBetNew(betData); + log.info(LOG_PREFIX+ "insertBet result : "+betResult); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate tranId!!!"); + response.setResult_code(98); + response.setBalance(balance); + response.setError_msg("CANCEL_ALREADY_SETTLED"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + if(betResult > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + + asyncService.rollingCancelProc(LOG_PREFIX, betAmt, betData); + + //asyncService.losingResultProc(LOG_PREFIX, betData); + + } else { + log.error(LOG_PREFIX+ "CANCEL_FAIL"); + response.setResult_code(9999); + response.setError_msg("CANCEL_FAIL"); + resEntity = new ResponseEntity(response, HttpStatus.INTERNAL_SERVER_ERROR); + return resEntity; + } + + log.info(LOG_PREFIX+ "beforeBalance : "+balance); + log.info(LOG_PREFIX+ "amount : "+amount); + log.info(LOG_PREFIX+ "responseBalance : "+(balance+amount)); + + response.setResult_code(0); + response.setBalance(balance+amount); + response.setError_msg(""); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + + private ResponseEntity callBetSlot(String LOG_PREFIX, Member memInfo, JSONObject transaction) { + LOG_PREFIX = LOG_PREFIX + "BET:::"; + ResponseEntity resEntity = null; + TripleResponse response = new TripleResponse(); + + HashMap memberVo = userService.getMemberMap(memInfo); + if(memberVo == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_USER"); + response.setResult_code(1111); + response.setError_msg("NOT_FOUND_USER"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + if(memberVo.get("betYn").toString().equals("N") || memberVo.get("memLockYn").toString().equals("Y")) { + log.error(LOG_PREFIX+ "betYn : "+memberVo.get("betYn").toString()); + log.error(LOG_PREFIX+ "memLockYn : "+memberVo.get("memLockYn").toString()); + response.setResult_code(1005); + response.setError_msg("THIS_USER_BETTING_LOCK"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + int balance = Integer.parseInt(memberVo.get("cashAmt").toString()); + int amount = transaction.getInt("debit"); + amount = Math.abs(amount) * -1; + if(balance < Math.abs(amount)) { + log.error(LOG_PREFIX+ "유저 잔액부족::balance::"+balance+"::amount::"+amount); + response.setResult_code(80); + response.setBalance(balance); + response.setError_msg("INSUFFICIENT_FUNDS"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + String tranId = transaction.getString("tranId"); + String betId = transaction.getString("betId"); + String apiVendorCode = transaction.getString("vendorKey"); + String gameName = transaction.getString("gameKey"); + + HashMap vParam = new HashMap<>(); + vParam.put("siteId", memberVo.get("siteId").toString()); + vParam.put("apiCompCode", "triple"); + vParam.put("apiVendorCode", apiVendorCode); + vParam.put("memLevel", memberVo.get("memLevel").toString()); + HashMap siteVendorInfo = betService.getSiteVendorInfo(vParam); + if(siteVendorInfo == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_VENDOR"); + response.setResult_code(70); + response.setError_msg("NOT_FOUND_VENDOR"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + int maxBetAmt = Integer.parseInt(siteVendorInfo.get("betAmtMaxSlot").toString()); + if(maxBetAmt < Math.abs(amount)) { + log.error(LOG_PREFIX+ "MAX_BET_OVER"); + log.error(LOG_PREFIX+ "siteMaxBet : " + maxBetAmt +", amount : " + amount); + response.setResult_code(81); + response.setBalance(balance); + response.setError_msg("MAX_BET_OVER"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + HashMap betData = new HashMap(); + betData.put("tranId", tranId); + betData.put("betId", betId); + betData.put("siteId", memberVo.get("siteId").toString()); + betData.put("memId", memberVo.get("memId").toString()); + betData.put("apiCompCode", "triple"); + betData.put("apiVendor", transaction.getString("vendor")); + betData.put("gameCategory", siteVendorInfo.get("gameCategory").toString()); + betData.put("vendorCode", siteVendorInfo.get("vendorCode").toString()); + betData.put("gameName", gameName); + betData.put("tranType", "DEBIT"); + betData.put("betAmt", Math.abs(amount)); + betData.put("betWinAmt", 0); + betData.put("balance", (balance+amount)); + betData.put("isBlankSpinYn", "N"); + betData.put("pointRegYn", "N"); + betData.put("regDate", transaction.getString("requestAt")); + betData.put("updDate", transaction.getString("requestAt")); + int betResult = 0; + try { + log.info(LOG_PREFIX+ "betData : "+betData.toString()); + betResult = betService.insertBetNew(betData); + log.info(LOG_PREFIX+ "insertBet result : "+betResult); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate tranId!!!"); + response.setResult_code(98); + response.setBalance(balance); + response.setError_msg("BET_ALREADY_SETTLED"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + if(betResult > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + + asyncService.rollingProc(LOG_PREFIX, betData); + } else { + log.error(LOG_PREFIX+ "BET_FAIL"); + response.setResult_code(9999); + response.setError_msg("BET_FAIL"); + resEntity = new ResponseEntity(response, HttpStatus.INTERNAL_SERVER_ERROR); + return resEntity; + } + + log.info(LOG_PREFIX+ "beforeBalance : "+balance); + log.info(LOG_PREFIX+ "amount : "+amount); + log.info(LOG_PREFIX+ "responseBalance : "+(balance+amount)); + + response.setResult_code(0); + response.setBalance(balance+amount); + response.setError_msg(""); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + + private ResponseEntity callWinSlot(String LOG_PREFIX, Member memInfo, JSONObject transaction) { + LOG_PREFIX = LOG_PREFIX + "WIN:::"; + ResponseEntity resEntity = null; + TripleResponse response = new TripleResponse(); + + String tranId = transaction.getString("tranId"); + String betId = transaction.getString("betId"); + + HashMap betData = betService.getReferenceData2(betId); + if(betData == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_REF_DATA"); + response.setResult_code(99); + response.setError_msg("NOT_FOUND_REF_DATA"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + int balance = betService.getCurBalance(memInfo); + int amount = transaction.getInt("credit"); + betData.put("tranId", tranId); + betData.put("betId", betId); + betData.put("tranType", "CREDIT"); + betData.put("betAmt", 0); + betData.put("betWinAmt", Math.abs(amount)); + betData.put("balance", (balance+amount)); + betData.put("updDate", transaction.getString("requestAt")); + int betResult = 0; + try { + log.info(LOG_PREFIX+ "betData : "+betData.toString()); + betResult = betService.insertBetNew(betData); + log.info(LOG_PREFIX+ "insertBet result : "+betResult); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate tranId!!!"); + response.setResult_code(98); + response.setBalance(balance); + response.setError_msg("WIN_ALREADY_SETTLED"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + if(betResult > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + + asyncService.losingResultProc(LOG_PREFIX, betData); + + } else { + log.error(LOG_PREFIX+ "WIN_FAIL"); + response.setResult_code(9999); + response.setError_msg("WIN_FAIL"); + resEntity = new ResponseEntity(response, HttpStatus.INTERNAL_SERVER_ERROR); + return resEntity; + } + + log.info(LOG_PREFIX+ "beforeBalance : "+balance); + log.info(LOG_PREFIX+ "amount : "+amount); + log.info(LOG_PREFIX+ "responseBalance : "+(balance+amount)); + + response.setResult_code(0); + response.setBalance(balance+amount); + response.setError_msg(""); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + + private ResponseEntity callBonus(String LOG_PREFIX, Member memInfo, JSONObject transaction) { + LOG_PREFIX = LOG_PREFIX + "BONUS:::"; + ResponseEntity resEntity = null; + TripleResponse response = new TripleResponse(); + + String tranId = transaction.getString("tranId"); + String betId = transaction.getString("betId"); + + int betResult = 0; + int balance = 0; + int amount = Math.abs(transaction.getInt("credit")); + + HashMap betData = betService.getReferenceData2(betId); + if(betData != null) { + balance = betService.getCurBalance(memInfo); + betData.put("tranId", tranId); + betData.put("betId", betId); + betData.put("tranType", "BONUS"); + betData.put("betAmt", 0); + betData.put("betWinAmt", amount); + betData.put("balance", (balance+amount)); + betData.put("updDate", transaction.getString("requestAt")); + } else { + log.error(LOG_PREFIX+ "NOT_FOUND_REF_DATA"); + String apiVendorCode = transaction.getString("vendorKey"); + String gameName = transaction.getString("gameKey"); + + HashMap memberVo = userService.getMemberMap(memInfo); + if(memberVo == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_USER"); + response.setResult_code(1111); + response.setError_msg("NOT_FOUND_USER"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + HashMap vParam = new HashMap<>(); + vParam.put("siteId", memberVo.get("siteId").toString()); + vParam.put("apiCompCode", "triple"); + vParam.put("apiVendorCode", apiVendorCode); + vParam.put("memLevel", memberVo.get("memLevel").toString()); + HashMap siteVendorInfo = betService.getSiteVendorInfo(vParam); + if(siteVendorInfo == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_VENDOR"); + response.setResult_code(70); + response.setError_msg("NOT_FOUND_VENDOR"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + balance = Integer.parseInt(memberVo.get("cashAmt").toString()); + + betData = new HashMap<>(); + betData.put("tranId", tranId+"#"+transaction.getString("type")); + betData.put("betId", tranId+"#"+transaction.getString("type")); + betData.put("siteId", memberVo.get("siteId").toString()); + betData.put("memId", memberVo.get("memId").toString()); + betData.put("apiCompCode", "triple"); + betData.put("apiVendor", transaction.getString("vendor")); + betData.put("gameCategory", siteVendorInfo.get("gameCategory").toString()); + betData.put("vendorCode", siteVendorInfo.get("vendorCode").toString()); + betData.put("gameName", gameName); + betData.put("tranType", "BONUS"); + betData.put("betAmt", 0); + betData.put("betWinAmt", amount); + betData.put("balance", (balance+amount)); + betData.put("isBlankSpinYn", "N"); + betData.put("pointRegYn", "N"); + betData.put("regDate", transaction.getString("requestAt")); + betData.put("updDate", transaction.getString("requestAt")); + } + + try { + log.info(LOG_PREFIX+ "betData : "+betData.toString()); + betResult = betService.insertBetNew(betData); + log.info(LOG_PREFIX+ "insertBet result : "+betResult); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate tranId!!!"); + response.setResult_code(98); + response.setBalance(balance); + response.setError_msg("BONUS_ALREADY_SETTLED"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + if(betResult > 0) { + int bonusResult = betService.bonusBetNew(betData); + log.info(LOG_PREFIX+ "bonusBet result : "+bonusResult); + + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + } else { + log.error(LOG_PREFIX+ "BONUST_FAIL"); + response.setResult_code(9999); + response.setError_msg("BONUST_FAIL"); + resEntity = new ResponseEntity(response, HttpStatus.INTERNAL_SERVER_ERROR); + return resEntity; + } + + log.info(LOG_PREFIX+ "beforeBalance : "+balance); + log.info(LOG_PREFIX+ "amount : "+amount); + log.info(LOG_PREFIX+ "responseBalance : "+(balance+amount)); + + response.setResult_code(0); + response.setBalance(balance+amount); + response.setError_msg(""); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + + private ResponseEntity callAdjust(String LOG_PREFIX, Member memInfo, JSONObject transaction) { + LOG_PREFIX = LOG_PREFIX + "ADJUST:::"; + ResponseEntity resEntity = null; + TripleResponse response = new TripleResponse(); + + String tranId = transaction.getString("tranId"); + String betId = transaction.getString("betId"); + + HashMap betData = betService.getReferenceData2(betId); + if(betData == null) { + log.error(LOG_PREFIX+ "NOT_FOUND_REF_DATA"); + response.setResult_code(99); + response.setError_msg("NOT_FOUND_REF_DATA"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + int balance = betService.getCurBalance(memInfo); + int debit = transaction.getInt("debit"); + debit = Math.abs(debit) * -1; + int credit = transaction.getInt("credit"); + int amount = debit + credit; + betData.put("tranId", tranId); + betData.put("betId", betId); + betData.put("tranType", "ADJUST"); + if(amount > 0) { + betData.put("betAmt", 0); + betData.put("betWinAmt", Math.abs(amount)); + } else { + betData.put("betAmt", Math.abs(amount)); + betData.put("betWinAmt", 0); + } + betData.put("balance", (balance+amount)); + betData.put("updDate", transaction.getString("requestAt")); + int betResult = 0; + try { + log.info(LOG_PREFIX+ "betData : "+betData.toString()); + betResult = betService.insertBetNew(betData); + log.info(LOG_PREFIX+ "insertBet result : "+betResult); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate tranId!!!"); + response.setResult_code(98); + response.setBalance(balance); + response.setError_msg("ADJUST_ALREADY_SETTLED"); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + if(betResult > 0) { + HashMap balanceParam = new HashMap(); + balanceParam.put("siteIdx", memInfo.getSiteIdx()); + balanceParam.put("memId", memInfo.getMemId()); + balanceParam.put("cashAmt", Integer.toString(amount)); + balanceParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betService.updateUserCashByAmountNew(balanceParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "updateUserCashByAmountNew() : " + String.format("%.3f", diff4)); + } else { + log.error(LOG_PREFIX+ "ADJUST_FAIL"); + response.setResult_code(9999); + response.setError_msg("ADJUST_FAIL"); + resEntity = new ResponseEntity(response, HttpStatus.INTERNAL_SERVER_ERROR); + return resEntity; + } + + log.info(LOG_PREFIX+ "beforeBalance : "+balance); + log.info(LOG_PREFIX+ "amount : "+amount); + log.info(LOG_PREFIX+ "responseBalance : "+(balance+amount)); + + response.setResult_code(0); + response.setBalance(balance+amount); + response.setError_msg(""); + resEntity = new ResponseEntity(response, HttpStatus.OK); + return resEntity; + } + + + private ResponseEntity callTip(String LOG_PREFIX, Member memInfo, JSONObject transaction) { + LOG_PREFIX = LOG_PREFIX + "TIP:::"; + ResponseEntity resEntity = null; + TripleResponse response = new TripleResponse(); + + return resEntity; + } +} diff --git a/src/main/java/com/bb/controller/CashCronController.java b/src/main/java/com/bb/controller/CashCronController.java new file mode 100644 index 0000000..0ddea63 --- /dev/null +++ b/src/main/java/com/bb/controller/CashCronController.java @@ -0,0 +1,127 @@ +package com.bb.controller; + +import java.net.InetAddress; +import java.util.HashMap; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Controller; + +import com.bb.model.CashQueVO; +import com.bb.model.CronServerInfo; +import com.bb.model.Member; +import com.bb.model.TripleAuthInfo; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.UserService; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@EnableScheduling +@RequiredArgsConstructor +@Controller +public class CashCronController { + + private final CashService cashService; + + private final UserService userService; + + private final CommonService commonService; + + @Scheduled(fixedDelay = 2000) // 작업 종류 후 1초 마다 + public void cashProc() throws Exception { + long startTime = System.currentTimeMillis(); + int queSize = 0; + + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("CASH"); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("#-cashProc::" + "#[CRON STATUS] cronStatus: " + cronStatus); + + if (cronStatus != null && cronStatus.getRunYn().equals("Y")) { + List cashQueList = cashService.getCashQueList(); + queSize = cashQueList.size(); + if (queSize > 0) { + log.info("#-cashProc::" + "cashQueList size: " + cashQueList.size()); + + for (CashQueVO item : cashQueList) { + String LOG_PREFIX = "#-cashProc::" + item.getSiteId() + "::" + item.getCashIdx() + "::"; + + if (item.getRefCnt() == 0) { + // log.info(LOG_PREFIX+ "not ready... RefCnt: " + item.getRefCnt()); + continue; + } + + long cashAmt = Long.parseLong(item.getCashAmt()); + long balance = cashService.getBalance(item); + if ((balance + cashAmt) < 0) { + // 보유금 마이너스 오류. 거래 실패처리 + HashMap wdParam = new HashMap<>(); + wdParam.put("cashIdx", item.getCashIdx()); + wdParam.put("refIdx", null); + wdParam.put("cashStatus", "-1"); + wdParam.put("memo", "계정(" + item.getMemId() + ") 보유금(" + balance + ") 부족 처리실패"); + int wdResult = cashService.updateQueStatus(wdParam); + log.info(LOG_PREFIX + item.getMemId() + " withdraw queue fail process result: " + wdResult); + if (wdResult > 0) { + HashMap dpParam = new HashMap<>(); + dpParam.put("cashIdx", null); + dpParam.put("refIdx", item.getCashIdx()); + dpParam.put("cashStatus", "-1"); + dpParam.put("memo", "계정(" + item.getMemId() + ") 보유금(" + balance + ") 부족 처리실패"); + int dpResult = cashService.updateQueStatus(dpParam); + log.info(LOG_PREFIX + item.getTargetId() + " deposit queue fail process result: " + + dpResult); + } + } else { + // Triple API + Member botUser = new Member(); + botUser.setSiteId(item.getSiteId()); + botUser.setMemId(item.getMemId()); + TripleAuthInfo tripleMember = userService.getTripleAuthInfo2(botUser); + if (tripleMember != null && tripleMember.getPartnerLevel().equals("NORMAL")) { + // asyncService.withdrawBalanceAsync2(LOG_PREFIX, tripleMember); + } + + // 거래 성공 처리 + HashMap wdParam = new HashMap<>(); + wdParam.put("cashIdx", item.getCashIdx()); + wdParam.put("refIdx", null); + wdParam.put("cashStatus", "1"); + wdParam.put("memo", ""); + int wdResult = cashService.updateQueStatus(wdParam); + log.info(LOG_PREFIX + item.getMemId() + " withdraw queue success process result: " + + wdResult); + if (wdResult > 0) { + HashMap dpParam = new HashMap<>(); + dpParam.put("cashIdx", null); + dpParam.put("refIdx", item.getCashIdx()); + dpParam.put("cashStatus", "1"); + dpParam.put("memo", ""); + int dpResult = cashService.updateQueStatus(dpParam); + log.info(LOG_PREFIX + item.getTargetId() + " deposit queue success process result: " + + dpResult); + } + } + } + } + } + + } catch (Exception e) { + log.error("#-cashProc::" + "Exception::" + e.toString()); + e.printStackTrace(); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double secDiffTime = (startTime - endTime) / 1000.0; // 두 시간에 차 계산 + if (queSize > 0) + log.error("#-cashProc::" + "Proc Time(s) > 1s : " + String.format("%.3f", secDiffTime)); + } +} diff --git a/src/main/java/com/bb/controller/PointCronController.java b/src/main/java/com/bb/controller/PointCronController.java new file mode 100644 index 0000000..2ed63bc --- /dev/null +++ b/src/main/java/com/bb/controller/PointCronController.java @@ -0,0 +1,331 @@ +package com.bb.controller; + +import java.net.InetAddress; +import java.util.HashMap; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Controller; + +import com.bb.model.CronServerInfo; +import com.bb.service.BetService; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.UserService; +import com.bb.util.RandomRolling; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@EnableScheduling +@Controller +public class PointCronController { + + private final BetService betService; + + private final CashService cashService; + + private final CommonService commonService; + + + // 'jjanggu01', 'ichiban01', 'viva01', 'mvp001', 'black01' 제외 사이트 + //@Scheduled(fixedDelay = 10000) // 작업 종류 후 10초 마다 + public void pointProc() throws Exception { + long startTime = System.currentTimeMillis(); + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("POINT"); + log.debug("##- [OMS CRON STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("##- [OMS CRON STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + log.debug("### Triple API pointProc() Start -###"); + List biBetList = betService.getBetPointList(); + log.debug("### Triple API pointProc() biBetList.size() : " + biBetList.size()); + for(HashMap betItem : biBetList) { + + log.debug("### Triple API betItem : " + betItem.toString()); + long betIdx = (long) betItem.get("betIdx"); + String betId = betItem.get("betId").toString(); + int betRate = Integer.parseInt(betItem.get("betRate").toString()); + String gameCategory = betItem.get("gameCategory").toString(); + String vendorCode = betItem.get("vendorCode").toString(); + + long betAmt = Long.parseLong(betItem.get("betAmt").toString()); + long betWinAmt = Long.parseLong(betItem.get("betWinAmt").toString()); + int bsCasinoRate = Integer.parseInt(betItem.get("blankSpinCasinoRate").toString()); + int bsSlotRate = Integer.parseInt(betItem.get("blankSpinSlotRate").toString()); + + String siteId = betItem.get("siteId").toString(); + String memId = betItem.get("memId").toString(); + String blankSpinSetType = betItem.get("blankSpinSetType").toString(); + int betCnt = 0; + long sumWinAmt = 0; + HashMap totalInfo = betService.getBetTodayTotalInfo(betItem); + if(totalInfo != null) { + betCnt = Integer.parseInt(totalInfo.get("betCnt").toString()); + sumWinAmt = Long.parseLong(totalInfo.get("sumWinAmt").toString()); + } + + int rate = 0; + if( blankSpinSetType.equals("B") && ( betCnt < 20 || betAmt >= sumWinAmt ) ) { + rate = 0; + } else { + if(gameCategory.equals("casino")) { + //if(gameCategory.equals("casino") && (betAmt > betWinAmt)) { // 24.07.12 jinu 요청 수정 + rate = bsCasinoRate; + //} else if(gameCategory.equals("slot") && (betAmt >= betWinAmt)) { // 24.08.27 CS팀 요청(Green) + } else if(gameCategory.equals("slot")) { // 24.10.16 jinu 요청 수정 + rate = bsSlotRate; + } else if(gameCategory.equals("undefind")) { + rate = 100; + } else { + rate = 0; + } + } + + // isBlankSpin = true (롤링공회전), isBlankSpin = false (롤링진행) + boolean isBlankSpin = RandomRolling.isBlankSpin(rate); + + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx); + mapParam.put("betRate", betRate); + mapParam.put("gameCategory", gameCategory); + mapParam.put("vendorCode", vendorCode); + if(isBlankSpin) { + mapParam.put("isBlankSpinYn", "Y"); + } else { + mapParam.put("isBlankSpinYn", "N"); + } + + String LOG_PREFIX = "#-pointProc::"+siteId+"::"+memId+"::betIdx::"+betIdx+"::::"; + try { + log.debug(LOG_PREFIX+ "cashService.insertBetPoint(mapParam) start"); + int pointResult = cashService.insertBetPoint(LOG_PREFIX, mapParam); + log.debug(LOG_PREFIX+ "cashService.insertBetPoint(mapParam) end: " + pointResult); + } catch(Exception e) { + log.error(LOG_PREFIX+ "POINT_ERROR::"+e.toString()); + } + } + } + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double secDiffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("pointProc() Proc Time(s) > 1s : " + String.format("%.3f", secDiffTime)); + } + + private void pointProcSite(final String SITE_ID) throws Exception { + log.debug("### Triple API pointProc("+SITE_ID+") Start -###"); + List biBetList = betService.getBetPointListBySite(SITE_ID); + log.debug("### Triple API pointProc("+SITE_ID+") biBetList.size() : " + biBetList.size()); + for(HashMap betItem : biBetList) { + + log.debug("### Triple API pointProc("+SITE_ID+") betItem : " + betItem.toString()); + long betIdx = (long) betItem.get("betIdx"); + String betId = betItem.get("betId").toString(); + int betRate = Integer.parseInt(betItem.get("betRate").toString()); + String gameCategory = betItem.get("gameCategory").toString(); + String vendorCode = betItem.get("vendorCode").toString(); + + long betAmt = Long.parseLong(betItem.get("betAmt").toString()); + long betWinAmt = Long.parseLong(betItem.get("betWinAmt").toString()); + int bsCasinoRate = Integer.parseInt(betItem.get("blankSpinCasinoRate").toString()); + int bsSlotRate = Integer.parseInt(betItem.get("blankSpinSlotRate").toString()); + + String siteId = betItem.get("siteId").toString(); + String memId = betItem.get("memId").toString(); + String blankSpinSetType = betItem.get("blankSpinSetType").toString(); + int betCnt = 0; + long sumWinAmt = 0; + HashMap totalInfo = betService.getBetTodayTotalInfo(betItem); + if(totalInfo != null) { + betCnt = Integer.parseInt(totalInfo.get("betCnt").toString()); + sumWinAmt = Long.parseLong(totalInfo.get("sumWinAmt").toString()); + } + + int rate = 0; + if( blankSpinSetType.equals("B") && ( betCnt < 20 || betAmt >= sumWinAmt ) ) { + rate = 0; + } else { + if(gameCategory.equals("casino")) { + //if(gameCategory.equals("casino") && (betAmt > betWinAmt)) { // 24.07.12 jinu 요청 수정 + rate = bsCasinoRate; + //} else if(gameCategory.equals("slot") && (betAmt >= betWinAmt)) { // 24.08.27 CS팀 요청(Green) + } else if(gameCategory.equals("slot")) { // 24.10.16 jinu 요청 수정 + rate = bsSlotRate; + } else if(gameCategory.equals("undefind")) { + rate = 100; + } else { + rate = 0; + } + } + + // isBlankSpin = true (롤링공회전), isBlankSpin = false (롤링진행) + boolean isBlankSpin = RandomRolling.isBlankSpin(rate); + + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx); + mapParam.put("betRate", betRate); + mapParam.put("gameCategory", gameCategory); + mapParam.put("vendorCode", vendorCode); + if(isBlankSpin) { + mapParam.put("isBlankSpinYn", "Y"); + } else { + mapParam.put("isBlankSpinYn", "N"); + } + + String LOG_PREFIX = "#-pointProc::"+siteId+"::"+memId+"::betIdx::"+betIdx+"::::"; + try { + log.debug(LOG_PREFIX+ "cashService.insertBetPoint(mapParam) start"); + int pointResult = cashService.insertBetPoint(LOG_PREFIX, mapParam); + log.debug(LOG_PREFIX+ "cashService.insertBetPoint(mapParam) end: " + pointResult); + } catch(Exception e) { + log.error(LOG_PREFIX+ "POINT_ERROR::"+e.toString()); + } + } + } + + + // 'jjanggu01', 'ichiban01', 'viva01', 'mvp001', 'black01' + //@Scheduled(fixedDelay = 10000) // 작업 종류 후 10초 마다 + public void pointProc_jjanggu01() throws Exception { + long startTime = System.currentTimeMillis(); + final String SITE_ID = "jjanggu01"; + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("POINT"); + log.debug("##- [OMS CRON STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("##- [OMS CRON STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + pointProcSite(SITE_ID); + } + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double secDiffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("pointProc("+SITE_ID+") Proc Time(s) > 1s : " + String.format("%.3f", secDiffTime)); + } + + //@Scheduled(fixedDelay = 10000) // 작업 종류 후 10초 마다 + public void pointProc_ichiban01() throws Exception { + long startTime = System.currentTimeMillis(); + final String SITE_ID = "ichiban01"; + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("POINT"); + log.debug("##- [OMS CRON STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("##- [OMS CRON STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + pointProcSite(SITE_ID); + } + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double secDiffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("pointProc("+SITE_ID+") Proc Time(s) > 1s : " + String.format("%.3f", secDiffTime)); + } + + //@Scheduled(fixedDelay = 10000) // 작업 종류 후 10초 마다 + public void pointProc_viva01() throws Exception { + long startTime = System.currentTimeMillis(); + final String SITE_ID = "viva01"; + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("POINT"); + log.debug("##- [OMS CRON STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("##- [OMS CRON STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + pointProcSite(SITE_ID); + } + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double secDiffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("pointProc("+SITE_ID+") Proc Time(s) > 1s : " + String.format("%.3f", secDiffTime)); + } + + //@Scheduled(fixedDelay = 10000) // 작업 종류 후 10초 마다 + public void pointProc_black01() throws Exception { + long startTime = System.currentTimeMillis(); + final String SITE_ID = "black01"; + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("POINT"); + log.debug("##- [OMS CRON STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("##- [OMS CRON STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + pointProcSite(SITE_ID); + } + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double secDiffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("pointProc("+SITE_ID+") Proc Time(s) > 1s : " + String.format("%.3f", secDiffTime)); + } + + //@Scheduled(fixedDelay = 10000) // 작업 종류 후 10초 마다 + public void pointProc_mvp001() throws Exception { + long startTime = System.currentTimeMillis(); + final String SITE_ID = "mvp001"; + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("POINT"); + log.debug("##- [OMS CRON STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("##- [OMS CRON STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + pointProcSite(SITE_ID); + } + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double secDiffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("pointProc("+SITE_ID+") Proc Time(s) > 1s : " + String.format("%.3f", secDiffTime)); + } + +} diff --git a/src/main/java/com/bb/controller/SocketController.java b/src/main/java/com/bb/controller/SocketController.java new file mode 100644 index 0000000..8e81ffd --- /dev/null +++ b/src/main/java/com/bb/controller/SocketController.java @@ -0,0 +1,176 @@ +package com.bb.controller; + +import java.net.InetAddress; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Controller; + +import com.bb.model.CronServerInfo; +import com.bb.model.OutChatMessageVO; +import com.bb.model.SiteCheckReq; +import com.bb.service.CommonService; +import com.bb.service.UserService; +import com.bb.util.AESUtil; +import com.fasterxml.jackson.databind.ObjectMapper; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + + +@Slf4j +@EnableScheduling +@RequiredArgsConstructor +@Controller +public class SocketController { + + private final SimpMessagingTemplate simpMessagingTemplate; + + private final CommonService commonService; + + private final UserService userService; + + @Scheduled(fixedDelay = 8000L) + public void sendPong() throws Exception { + String nowtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())); + + OutChatMessageVO outMs = new OutChatMessageVO(); + AESUtil aesUtil = new AESUtil(); + String json = ""; + String encryptMsg = ""; + + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("SOCKET"); + log.debug("##- [OMS CRON STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("##- [OMS CRON STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + HashMap superHeadCashInfo = userService.getSuperHeadCashInfo(); + + ObjectMapper oms = new ObjectMapper(); + // Map or List Object 를 JSON 문자열로 변환 + String superHeadCashInfoStr = oms.writeValueAsString(superHeadCashInfo); + outMs.setContent(superHeadCashInfoStr); + json = oms.writeValueAsString(outMs); + encryptMsg = aesUtil.encrypt(json); + + // this.simpMessagingTemplate.convertAndSend("/topic/super", outMs); + this.simpMessagingTemplate.convertAndSend("/topic/super", encryptMsg); + + List tokenList = commonService.getlastLoginToken(); + if(tokenList != null) { + for(HashMap ti:tokenList) { + if("admin".equals(ti.get("mt"))) { + HashMap param = new HashMap(); + param.put("siteId", ti.get("siteId")); + HashMap headCashInfo = userService.getHeadCashInfo(param); + //log.info("###- SocketController.sendPong() headCashInfo: " + headCashInfo); + + ObjectMapper om2 = new ObjectMapper(); + // Map or List Object 를 JSON 문자열로 변환 + String headCashInfoStr = om2.writeValueAsString(headCashInfo); + + outMs.setContent(headCashInfoStr); + json = om2.writeValueAsString(outMs); + encryptMsg = aesUtil.encrypt(json); + // this.simpMessagingTemplate.convertAndSend("/topic/adminfo/"+ti.get("lastToken").toString(), outMs); + this.simpMessagingTemplate.convertAndSend("/topic/adminfo/"+ti.get("lastToken").toString(), encryptMsg); + } + + if("mem".equals(ti.get("mt"))) { + List memInfo = userService.getMemInfo(ti); + //log.info("###- SocketController.sendPong() memInfo: " + memInfo); + + ObjectMapper om2 = new ObjectMapper(); + // Map or List Object 를 JSON 문자열로 변환 + String memInfoStr = om2.writeValueAsString(memInfo); + + outMs.setContent(memInfoStr); + json = om2.writeValueAsString(outMs); + encryptMsg = aesUtil.encrypt(json); + // this.simpMessagingTemplate.convertAndSend("/topic/"+ti.get("lastToken").toString(), outMs); + this.simpMessagingTemplate.convertAndSend("/topic/"+ti.get("lastToken").toString(), encryptMsg); + } + } + } + } + } catch(Exception e) { + e.printStackTrace(); + } + } + + +// @Scheduled(fixedDelay = 2000L) + public void sendMiniGame() throws Exception { + String nowtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())); + + OutChatMessageVO outMs = new OutChatMessageVO(); + + List siteList = commonService.getLoginSite(); + + if(siteList != null) { + for(HashMap ti:siteList) { + // Map or List Object 를 JSON 문자열로 변환 + List miniGameInfo = userService.miniGameInfo(ti); + + ObjectMapper om2 = new ObjectMapper(); + // Map or List Object 를 JSON 문자열로 변환 + String miniGameInfoStr = om2.writeValueAsString(miniGameInfo); + //System.out.println("miniGameInfoStr" + miniGameInfoStr); + outMs.setContent(miniGameInfoStr); + + this.simpMessagingTemplate.convertAndSend("/topic/powerball/"+ti.get("siteId").toString(), outMs); + } + } + } + + @Scheduled(fixedDelay = 10000L) + public void isSiteCheck() throws Exception { + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("CHECK"); + log.debug("##- [OMS CRON STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("##- [OMS CRON STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + List siteCheckList = commonService.isSiteCheck(); + + for(HashMap item : siteCheckList) { + int siteCheckIdx = (int) item.get("siteCheckIdx"); + SiteCheckReq param = new SiteCheckReq(); + param.setSiteCheckIdx(siteCheckIdx); + param.setSiteId((String) item.get("siteId")); + if(item.get("checkStatus").equals("ON")) { + // site_setting 테이블 siteCheckYn => 'Y' + param.setSiteCheckYn("Y"); + log.info("#-isSiteCheck::ON::" + param.getSiteId()+"::"+param.getSiteCheckIdx()+"::"+param.getStartDate()+"-"+param.getEndDate()); + commonService.changeSiteSettingCheckYn(param); + } else { + // site_check_info 테이블 isCheckOff => 'Y' + // site_setting 테이블 siteCheckYn => 'N' + param.setIsCheckOff("Y"); + param.setSiteCheckYn("N"); + log.info("#-isSiteCheck::OFF::" + param.getSiteId()+"::"+param.getSiteCheckIdx()+"::"+param.getStartDate()+"-"+param.getEndDate()); + commonService.changeSiteCheckOff(param); + commonService.changeSiteSettingCheckYn(param); + } + } + } + } catch(Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/bb/controller/TripleController.java b/src/main/java/com/bb/controller/TripleController.java new file mode 100644 index 0000000..0a5f60e --- /dev/null +++ b/src/main/java/com/bb/controller/TripleController.java @@ -0,0 +1,686 @@ +package com.bb.controller; + +import java.net.InetAddress; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.EnableScheduling; +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 com.bb.model.CronServerInfo; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.TripleAuthInfo; +import com.bb.model.TripleDVO; +import com.bb.model.TripleGameRate; +import com.bb.model.TriplePurchaseId; +import com.bb.model.TripleVO; +import com.bb.service.BetService; +import com.bb.service.CommonService; +import com.bb.service.CompService; +import com.bb.service.SportDService; +import com.bb.service.SportService; +import com.bb.service.TripleService; +import com.bb.service.UserService; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONObject; + +@Slf4j +@EnableScheduling +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/triple") +public class TripleController { + + private static final long serialVersionUID = 1L; + private static NumberFormat formatter = new DecimalFormat("#0.00"); + + private final UserService userService; + + private final BetService betService; + + private final TripleService tripleService; + + private final SportService sportService; + + private final SportDService sportDService; + + private final CommonService commonService; + + private final CompService compService; + + + @PostMapping("/balance/sports") + public ResponseEntity balance(@RequestBody TripleVO tripleVO, HttpServletRequest request) throws Exception { + long startTime = System.currentTimeMillis(); + + net.sf.json.JSONObject responseObj = new net.sf.json.JSONObject(); + HttpStatus httpStatus = null; + final String LOG_PREFIX = "#-CB::balance::"+tripleVO.getUserId()+"::"+tripleVO.getRequestAt()+":::"; + + log.info(LOG_PREFIX+ "TripleVO : " + tripleVO); + + try { + long balance = 0; + Member search = new Member(); + search.setSiteIdx(Integer.parseInt(tripleVO.getUserId().substring(0, 3), 16)); + search.setMemId(tripleVO.getUserId().substring(3, tripleVO.getUserId().length())); + + // synchronized method getMemByTriple() + MemberDetail memberVo = userService.getMemByTriple(search); + long endTime1 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime1 = (startTime - endTime1)/1000.0; //두 시간에 차 계산 + log.error(LOG_PREFIX+ "[### userService.getMemByTriple() : " + String.format("%.3f", diffTime1) + " ###]"); + + if(memberVo != null && !"".equals(memberVo.getUsername())) { + balance = memberVo.getCashAmt(); + responseObj.put("result_code", 0); + responseObj.put("balance", balance); + httpStatus = HttpStatus.OK; + } else { + if(memberVo != null && "".equals(memberVo.getUsername())) { + TripleAuthInfo user = new TripleAuthInfo(); + user.setSiteId(search.getSiteId()); + user.setMemId(search.getMemId()); + user.setId(0); + user.setUsername(tripleVO.getUserId()); + user.setNickname(tripleVO.getUserId()); + log.info(LOG_PREFIX+ "### Triple API ### - call \"/balance\" TripleAuthInfo: " + user); + int result = userService.insertTripleAuthInfo(user); + + if(result > 0) { + balance = memberVo.getCashAmt(); + responseObj.put("result_code", 0); + responseObj.put("balance", balance); + httpStatus = HttpStatus.OK; + } else { + responseObj.put("result_code", 1999); + responseObj.put("errors","INSERT_USER_ERROR"); + httpStatus = HttpStatus.OK; + } + } else { + responseObj.put("result_code", 9999); + responseObj.put("errors","INVALID_USER"); + httpStatus = HttpStatus.OK; + } + } + + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("errors","UNKNOWN_ERROR"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + log.error(LOG_PREFIX+ e.getMessage()); + } + log.info(LOG_PREFIX+ "### Triple API Controller ### - call \"/balance\" response : " + responseObj); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) { + log.error(LOG_PREFIX+ "[### balance diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + return new ResponseEntity(responseObj, httpStatus); + } + + + @PostMapping("/changebalance/sports") + public ResponseEntity changeBalance(HttpServletRequest request, @RequestBody TripleVO tripleVO) { + long startTime = System.currentTimeMillis(); + + net.sf.json.JSONObject responseObj = new net.sf.json.JSONObject(); + HttpStatus httpStatus = null; + + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::::"; + + try { + + + if(tripleVO.getTranType().equals("debit") && tripleVO.getIsCancel() == 0) { + if(tripleVO.getRequestAt() != null && !tripleVO.getRequestAt().equals("")) { + + SimpleDateFormat sdf = null; + if(tripleVO.getRequestAt().length() >= 20) { + // 2025-02-20 18:37:21.000 + sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + } else { + // 2025-02-20 18:37:21 + sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + + String requestAtStr = tripleVO.getRequestAt(); + //long nDate = System.currentTimeMillis() - 32400000; + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + // Date타입으로 변경 + Date requestAt = sdf.parse(requestAtStr); + double diff = (nDate - requestAt.getTime()) / 1000.0; // 초 + if(diff > 2.5) { + log.error(LOG_PREFIX +"changebalance::debit::"+diff+"초 통신 지연발생[requestAt:"+requestAtStr+"][nDate:"+nDateStr+"]"); + responseObj.put("result_code", 44); + responseObj.put("error_msg","TIMEOUT_ERROR"); + log.error(LOG_PREFIX+ "[### changeBalance() TIMEOUT_ERROR]"); + httpStatus = HttpStatus.OK; + return new ResponseEntity(responseObj, httpStatus); + } + } + } + + + log.info(LOG_PREFIX+ "TripleVO : " + tripleVO); + + Member search = new Member(); + search.setSiteIdx(Integer.parseInt(tripleVO.getUserId().substring(0, 3), 16)); + search.setMemId(tripleVO.getUserId().substring(3, tripleVO.getUserId().length())); + + if(tripleVO.getDetailStr() == null) { + tripleVO.setDetailStr("{}"); + } + + if(tripleVO.getMinusBalanceYn() == null) { + tripleVO.setMinusBalanceYn("N"); + } + + if(tripleVO.getVendorIdx() == 83) { + // 스포츠 배팅 + responseObj = sportService.betProc(search, tripleVO); + } else { + responseObj = tripleService.betProc(search, tripleVO); + } + + if(responseObj.getString("result_code").equals("0") || + responseObj.getString("result_code").equals("70") || + responseObj.getString("result_code").equals("80") || + responseObj.getString("result_code").equals("98") || + responseObj.getString("result_code").equals("99") || + responseObj.getString("result_code").equals("44") || + responseObj.getString("result_code").equals("1005") || + responseObj.getString("result_code").equals("3333") ) { + + // 0 70 80 98 99 + httpStatus = HttpStatus.OK; + } else { + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + } + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("error_msg","UNKNOWN_ERROR"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + } + + log.info(LOG_PREFIX+ "Response::" + responseObj.toString()); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[callback::diffTime : " + String.format("%.3f", diffTime) + "]"); + } + return new ResponseEntity(responseObj, httpStatus); + } + + + @PostMapping("/balance/sportsD") + public ResponseEntity balanceD(@RequestBody TripleDVO tripleVO, HttpServletRequest request) throws Exception { + long startTime = System.currentTimeMillis(); + + net.sf.json.JSONObject responseObj = new net.sf.json.JSONObject(); + HttpStatus httpStatus = null; + final String LOG_PREFIX = "#-CB::balance::"+tripleVO.getUserId()+"::"+tripleVO.getRequestAt()+":::"; + + log.info(LOG_PREFIX+ "TripleVO : " + tripleVO); + + try { + Member search = new Member(); + search.setSiteIdx(Integer.parseInt(tripleVO.getUserId().substring(0, 3), 16)); + search.setMemId(tripleVO.getUserId().substring(3, tripleVO.getUserId().length())); + + // synchronized method getMemByTriple() + MemberDetail memberVo = userService.getMemByTriple(search); + + long endTime1 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime1 = (startTime - endTime1)/1000.0; //두 시간에 차 계산 + log.error(LOG_PREFIX+ "[### userService.getMemByTriple() : " + String.format("%.3f", diffTime1) + " ###]"); + + if(memberVo != null && !"".equals(memberVo.getUsername())) { + responseObj.put("result_code", 0); + responseObj.put("balance", memberVo.getCashAmtD()); + httpStatus = HttpStatus.OK; + } else { + if(memberVo != null && "".equals(memberVo.getUsername())) { + TripleAuthInfo user = new TripleAuthInfo(); + user.setSiteId(search.getSiteId()); + user.setMemId(search.getMemId()); + user.setId(0); + user.setUsername(tripleVO.getUserId()); + user.setNickname(tripleVO.getUserId()); + log.info(LOG_PREFIX+ "### Triple API ### - call \"/balance\" TripleAuthInfo: " + user); + int result = userService.insertTripleAuthInfo(user); + + if(result > 0) { + responseObj.put("result_code", 0); + responseObj.put("balance", memberVo.getCashAmtD()); + // FOR-BTI + responseObj.put("balanceD", memberVo.getCashAmtD()); + httpStatus = HttpStatus.OK; + } else { + responseObj.put("result_code", 1999); + responseObj.put("errors","INSERT_USER_ERROR"); + httpStatus = HttpStatus.OK; + } + } else { + responseObj.put("result_code", 9999); + responseObj.put("errors","INVALID_USER"); + httpStatus = HttpStatus.OK; + } + } + + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("errors","UNKNOWN_ERROR"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + log.error(LOG_PREFIX+ e.getMessage()); + } + log.info(LOG_PREFIX+ "### Triple API Controller ### - call \"/balance\" response : " + responseObj); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) { + log.error(LOG_PREFIX+ "[### balance diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + return new ResponseEntity(responseObj, httpStatus); + } + + + @PostMapping("/changebalance/sportsD") + public ResponseEntity changeBalanceD(HttpServletRequest request, @RequestBody TripleDVO tripleVO) { + long startTime = System.currentTimeMillis(); + + net.sf.json.JSONObject responseObj = new net.sf.json.JSONObject(); + HttpStatus httpStatus = null; + + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::::"; + + try { + + + if(tripleVO.getTranType().equals("debit") && tripleVO.getIsCancel() == 0) { + if(tripleVO.getRequestAt() != null && !tripleVO.getRequestAt().equals("")) { + + SimpleDateFormat sdf = null; + if(tripleVO.getRequestAt().length() >= 20) { + // 2025-02-20 18:37:21.000 + sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + } else { + // 2025-02-20 18:37:21 + sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + + String requestAtStr = tripleVO.getRequestAt(); + //long nDate = System.currentTimeMillis() - 32400000; + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + // Date타입으로 변경 + Date requestAt = sdf.parse(requestAtStr); + double diff = (nDate - requestAt.getTime()) / 1000.0; // 초 + if(diff > 2.5) { + log.error(LOG_PREFIX +"changebalance::debit::"+diff+"초 통신 지연발생[requestAt:"+requestAtStr+"][nDate:"+nDateStr+"]"); + responseObj.put("result_code", 44); + responseObj.put("error_msg","TIMEOUT_ERROR"); + log.error(LOG_PREFIX+ "[### changeBalance() TIMEOUT_ERROR]"); + httpStatus = HttpStatus.OK; + return new ResponseEntity(responseObj, httpStatus); + } + } + } + + + log.info(LOG_PREFIX+ "TripleVO : " + tripleVO); + + Member search = new Member(); + search.setSiteIdx(Integer.parseInt(tripleVO.getUserId().substring(0, 3), 16)); + search.setMemId(tripleVO.getUserId().substring(3, tripleVO.getUserId().length())); + + if(tripleVO.getDetailStr() == null) { + tripleVO.setDetailStr("{}"); + } + + if(tripleVO.getMinusBalanceYn() == null) { + tripleVO.setMinusBalanceYn("N"); + } + + // 스포츠 배팅 + responseObj = sportDService.betProc(search, tripleVO); + + if(responseObj.getString("result_code").equals("0") || + responseObj.getString("result_code").equals("70") || + responseObj.getString("result_code").equals("80") || + responseObj.getString("result_code").equals("98") || + responseObj.getString("result_code").equals("99") || + responseObj.getString("result_code").equals("44") || + responseObj.getString("result_code").equals("1005") || + responseObj.getString("result_code").equals("3333") ) { + + // 0 70 80 98 99 + httpStatus = HttpStatus.OK; + } else { + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + } + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("error_msg","UNKNOWN_ERROR"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + } + + log.info(LOG_PREFIX+ "Response::" + responseObj.toString()); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[callback::diffTime : " + String.format("%.3f", diffTime) + "]"); + } + return new ResponseEntity(responseObj, httpStatus); + } + + + @PostMapping("/purchaseId") + public ResponseEntity callPurchaseId(HttpServletRequest request, @RequestBody TriplePurchaseId tripleVO) { + + JSONObject responseObj = new JSONObject(); + HttpStatus httpStatus = HttpStatus.OK; + final String LOG_PREFIX = "#-SPORT::callPurchaseId::"+tripleVO.getBetId()+"::"+tripleVO.getPurchaseId()+"::"; + + + log.info(LOG_PREFIX + "request::"+tripleVO); + + try { + int result = sportService.updatePurchaseId(tripleVO); + + if(result >= 0) { + responseObj.put("result_code", 0); + } else { + responseObj.put("result_code", -99); + responseObj.put("error_msg","UPDATE_ERROR"); + } + } catch(Exception e) { + responseObj.put("result_code", -11); + responseObj.put("error_msg","UNKNOWN_ERROR"); + log.error(LOG_PREFIX + "Exception::"+e.getMessage()); + } + + log.info(LOG_PREFIX + responseObj.toString()); + + return new ResponseEntity(responseObj, httpStatus); + } + + + @PostMapping("/changebalance/slot2") + public ResponseEntity changeBalanceSlot(HttpServletRequest request, @RequestBody TripleVO tripleVO) { + long startTime = System.currentTimeMillis(); + + net.sf.json.JSONObject responseObj = new net.sf.json.JSONObject(); + HttpStatus httpStatus = null; + + final String LOG_PREFIX = "#-callbackSlot::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::::"; + + if(tripleVO.getRequestAt() == null || tripleVO.getRequestAt().equals("")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + long nDate = System.currentTimeMillis(); + String requestAtStr = sdf.format(nDate); + tripleVO.setRequestAt(requestAtStr); + } + + log.info(LOG_PREFIX+ "changeBalanceSlot::TripleVO : " + tripleVO); + + try { + Member search = new Member(); + search.setSiteIdx(Integer.parseInt(tripleVO.getUserId().substring(0, 3), 16)); + search.setMemId(tripleVO.getUserId().substring(3, tripleVO.getUserId().length())); + + responseObj = tripleService.betProcSlot(LOG_PREFIX, search, tripleVO); + + if(responseObj.getString("result_code").equals("0") || + responseObj.getString("result_code").equals("70") || + responseObj.getString("result_code").equals("80") || + responseObj.getString("result_code").equals("98") || + responseObj.getString("result_code").equals("99") || + responseObj.getString("result_code").equals("44") || + responseObj.getString("result_code").equals("1005") || + responseObj.getString("result_code").equals("3333") ) { + + // 0 70 80 98 99 + httpStatus = HttpStatus.OK; + } else { + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + } + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("error_msg","UNKNOWN_ERROR"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + } + + log.info(LOG_PREFIX+ "changeBalanceSlot::Response::" + responseObj.toString()); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "changeBalanceSlot::[diffTime : " + String.format("%.3f", diffTime) + "]"); + + return new ResponseEntity(responseObj, httpStatus); + } + + + //@Scheduled(fixedDelay = 30000) // 작업 종류 후 120초 마다 + public void betWaitAutoProcByCasino() throws Exception { + + final String LOG_PREFIX = "#-WaitAutoProc::CASINO:::"; + + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("WAIT"); + log.info(LOG_PREFIX+ "HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.info(LOG_PREFIX+ "cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + List betWaitList = betService.getTripleBetWaitListByCasino(); + log.info(LOG_PREFIX+ "betWaitList.size() : " + betWaitList.size()); + for(HashMap betItem : betWaitList) { + String siteId = betItem.get("siteId").toString(); + long betIdx = (long) betItem.get("betIdx"); + + try { + // 배팅 패배 처리 + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx); + mapParam.put("betWinAmt", "0"); + + int afMoney = Integer.parseInt(betItem.get("afMoney").toString()); + int winAmt = 0; + afMoney = afMoney + winAmt; + mapParam.put("afMoney", Integer.toString(afMoney)); + + log.debug(LOG_PREFIX+ "배팅 자동 패배 처리중 ["+betIdx+"] - start: " + mapParam); + betService.updateEndAutoLose(mapParam); + log.debug(LOG_PREFIX+ "배팅 자동 패배 처리중 ["+betIdx+"] - end: " + mapParam); + } catch(Exception e) { + log.error(LOG_PREFIX+ "[Exception1]::"+e.toString()); + e.printStackTrace(); + } + } + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "[Exception2]::"+e.toString()); + e.printStackTrace(); + } + } + + + //@Scheduled(fixedDelay = 30000) // 작업 종류 후 120초 마다 + public void betWaitAutoProcBySlot() throws Exception { + + final String LOG_PREFIX = "#-WaitAutoProc::SLOT:::"; + + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("WAIT"); + log.info(LOG_PREFIX+ "HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.info(LOG_PREFIX+ "cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + List betWaitList = betService.getTripleBetWaitListBySlot(); + log.info(LOG_PREFIX+ "betWaitList.size() : " + betWaitList.size()); + for(HashMap betItem : betWaitList) { + String siteId = betItem.get("siteId").toString(); + long betIdx = (long) betItem.get("betIdx"); + + try { + // 배팅 패배 처리 + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx); + mapParam.put("betWinAmt", "0"); + + int afMoney = Integer.parseInt(betItem.get("afMoney").toString()); + int winAmt = 0; + afMoney = afMoney + winAmt; + mapParam.put("afMoney", Integer.toString(afMoney)); + + log.debug(LOG_PREFIX+ "배팅 자동 패배 처리중 ["+betIdx+"] - start: " + mapParam); + betService.updateEndAutoLose(mapParam); + log.debug(LOG_PREFIX+ "배팅 자동 패배 처리중 ["+betIdx+"] - end: " + mapParam); + } catch(Exception e) { + log.error(LOG_PREFIX+ "[Exception1]::"+e.toString()); + e.printStackTrace(); + } + } + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "[Exception2]::"+e.toString()); + e.printStackTrace(); + } + } + + + //@Scheduled(fixedDelay = 60000) // 작업 종류 후 1분 마다 + public void betWaitAutoProc2() throws Exception { + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("WAIT2"); + log.debug("##- [WaitAutoProc2][OMS CRON STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonService.getServerCronStatus(cronStatus); + log.debug("##- [WaitAutoProc2][OMS CRON STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + log.info("##- [WaitAutoProc2] Triple API getTripleBetWaitList2() Start -###"); + List betWaitList = betService.getTripleBetWaitList2(); + log.info("##- [WaitAutoProc2] Triple API getTripleBetWaitList2.size() : " + betWaitList.size()); + for(HashMap betItem : betWaitList) { + log.debug("##- [WaitAutoProc2] Triple API betItem : " + betItem.toString()); + + String siteId = betItem.get("siteId").toString(); + String memId = betItem.get("memId").toString(); + long betIdx = (long) betItem.get("betIdx"); + String betId = betItem.get("betId").toString(); + String updDate = betItem.get("updDate").toString(); + + int isCancel = (int) betItem.get("isCancel"); + + if(isCancel == 0) { + // 배팅 정상 처리 + log.debug("##- [WaitAutoProc2] 배팅 대기상태 정상 처리 -시작-"); + + int creditAmt = (int) betItem.get("credit"); + + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx); + mapParam.put("betWinAmt", Integer.toString(creditAmt)); + + int afMoney = Integer.parseInt(betItem.get("afMoney").toString()); + afMoney = afMoney + creditAmt; + mapParam.put("afMoney", Integer.toString(afMoney)); + mapParam.put("siteId", siteId); + mapParam.put("data", "{}"); + + log.debug("##- [WaitAutoProc2] 배팅 결과 처리중 ["+betId+"]["+betIdx+"] - start: " + mapParam); + betService.updateEnd(mapParam); + log.debug("##- [WaitAutoProc2] 배팅 결과 처리중 ["+betId+"]["+betIdx+"] - end: " + mapParam); + + log.debug("##- [WaitAutoProc2] 배팅 대기상태 정상 처리 -끝-"); + } else { + // 배팅 취소 처리 + log.info("##- [WaitAutoProc2] 배팅 대기상태 취소 처리 -시작-"); + int creditAmt = (int) betItem.get("credit"); + HashMap param = new HashMap(); + param.put("betIdx", betIdx); + param.put("betStatus", "CANCEL"); + param.put("betWinAmt", Integer.toString(creditAmt)); + param.put("data", "{}"); + + int betCancelAmt = Integer.parseInt(betItem.get("betAmt").toString()); + + log.debug("##- [WaitAutoProc2] 배팅 취소 처리중 ["+betId+"]["+betIdx+"] - start: " + param); + int resultBet = betService.betCancelTriple(param); + log.debug("##- [WaitAutoProc2] 배팅 취소 처리중 ["+betId+"]["+betIdx+"] - end: " + param); + + log.debug("##- [WaitAutoProc2] 배팅 대기상태 취소 처리 -끝-"); + } + } + } + + } catch(Exception e) { + log.error(e.toString()); + e.printStackTrace(); + } + } + + + @PostMapping("/gameRateChange") + public ResponseEntity gameRateChange(HttpServletRequest request, @RequestBody TripleGameRate gameRateVO) throws Exception { + net.sf.json.JSONObject responseObj = new net.sf.json.JSONObject(); + HttpStatus httpStatus = null; + log.info("### Triple API ### - call \"/gameRateChange\" gameRateVO: " + gameRateVO); + + try { + List> compList = compService.getGameRateCompList(gameRateVO); + for(HashMap compGameRateInfo : compList) { + compGameRateInfo.put("vendor", gameRateVO.getVendor()); + compGameRateInfo.put("gameRate", gameRateVO.getGameRate()); + log.info("### Triple API ### gameRateChange() update start compGameRateInfo : " + compGameRateInfo); + int updResult = compService.updateCompGameRate(compGameRateInfo); + log.info("### Triple API ### gameRateChange() update result: " + updResult); + } + + responseObj.put("result_code", 0); + httpStatus = HttpStatus.OK; + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("errors","UNKNOWN_ERROR"); + httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; + log.error(e.getMessage()); + } + log.info("### Triple API Controller ### - call \"/gameRateChange\" response : " + responseObj); + return new ResponseEntity(responseObj, httpStatus); + } +} diff --git a/src/main/java/com/bb/dao/BetDao.java b/src/main/java/com/bb/dao/BetDao.java new file mode 100644 index 0000000..72af88f --- /dev/null +++ b/src/main/java/com/bb/dao/BetDao.java @@ -0,0 +1,260 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import com.bb.model.AdminBetSearch; +import com.bb.model.BetAutoLoseVO; +import com.bb.model.BetData; +import com.bb.model.BetDetail; +import com.bb.model.BetSearch; +import com.bb.model.BetSplusSearch; +import com.bb.model.Member; +import com.bb.model.RetailBetSearch; +import com.bb.model.RvHoldemVO; +import com.bb.model.TriplePurchaseId; +import com.bb.model.TripleVO; +import com.bb.model.TrxSearchVO; + +public interface BetDao { + + int insertBet(HashMap param); + + int insertBetMap(HashMap param); + + int updateEnd(HashMap mapParam); + + int updateEndOld(HashMap mapParam); + + int updateMapEnd(HashMap mapParam); + + int updateMapEndOld(HashMap mapParam); + + void updateEndAutoLose(HashMap mapParam); + + Long getBetIdxByGameIdx(String betId); + + Long getBetIdxByBetId(String betId); + + int getBetListCnt(BetSearch search); + + List getBetList(BetSearch search); + + int getFastBetIdListCnt(AdminBetSearch search); + + List> getFastBetIdList(AdminBetSearch search); + + HashMap getFastBetItem(HashMap item); + + int getBetListNewCnt(AdminBetSearch search); + + List getBetListNew(AdminBetSearch search); + + int getPowerballResultListCnt(BetSearch search); + + List getPowerballResultList(BetSearch search); + + HashMap getGameRataMiniGame(@Valid BetData betData); + + List getWaitBetlist(Map pParam); + + void updateBetInfoMapByPowerball(HashMap betInfo); + + void updateBetInfoMapResultByPowerball(HashMap betInfo); + + void insertCashByPowerball(HashMap betInfo); + + void updateBetInfoByPowerball(HashMap betInfo); + + void insertPointByPowerball(HashMap betInfo); + + void updatePointRegYnByPowerball(HashMap betInfo); + + int getTripleTxnCheck(String tranId); + + int getTripleDebitCheckByBetId(String betId); + + int getBetinfoCheckByBetId(String betId); + + int getTripleDebitCheckByTranId(String tranid); + + int getTripleCreditCheckByBetId(String betId); + + int getTripleCreditCheckByTranId(String tranid); + + int getTripleIsCancelCheck(String betId); + + int insertTripleTxnData(TripleVO tripleVO); + + BetDetail getBetDetail(long betIdx); + + int betCancelTriple(HashMap param); + + int betCancelOldTriple(HashMap param); + + int betCancelMega(HashMap param); + + int getTripleIsBonusCheck(String betid); + + int getUserBetListCnt(BetSearch search); + + List getUserBetList(BetSearch search); + + int getUserBetListNewCnt(BetSearch search); + + List getUserBetListNew(BetSearch search); + + int insertBetBonus(HashMap param); + + int updateBetInfo(HashMap param); + + int updateBetInfoOld(HashMap param); + + int updateBetInfoMap(HashMap param); + + int updateBetInfoMapOld(HashMap param); + + Long getCashIdx(HashMap param); + + int updateCashInfo(HashMap param); + + int updateUserCashByAmount(HashMap param); + + int updateUserCashByBalance(HashMap param); + + int getBottomBetListCnt(RetailBetSearch search); + + List getBottomBetList(RetailBetSearch search); + + int getTripleAutoCancelCheck(String tranId); + + int updateTripleTxnData(TripleVO tripleVO); + + int betAutoCancelTriple(HashMap param); + + List getTripleBetWaitListByCasino(); + + List getTripleBetWaitListBySlot(); + + HashMap getSiteBetLimitInfo(TripleVO tripleVO); + + List getTripleBetWaitList2(); + + List getBetPointList(); + + List getBetPointListBySite(String siteId); + + int getTrxListCnt(TrxSearchVO searchVO); + + List> getTrxList(TrxSearchVO searchVO); + + BetAutoLoseVO getBetInfoByBetId(String betId); + + int insertCashInfoByReserve(HashMap cashInsertParam); + + int insertBetSplusInfo(HashMap param); + + int updateSplusStatus(HashMap param); + + int getSportBetListCnt(BetSplusSearch search); + + List getSportBetList(BetSplusSearch search); + + int getSportEventListCnt(BetSplusSearch search); + + List getSportEventList(BetSplusSearch search); + + int getSportEventDetailListCnt(BetSplusSearch search); + + List getSportEventDetailList(BetSplusSearch search); + + int getSportBottomBetListCnt(BetSplusSearch search); + + List getSportBottomBetList(BetSplusSearch search); + + int updateSplusBetCancel(HashMap param); + + int updatePurchaseId(TriplePurchaseId tripleVO); + + int insertSlotTranInfo(HashMap param); + + int updateSportReport(HashMap repParam); + + int updateSportReportDebit(HashMap repParam); + + int updateSportReportCredit(HashMap repParam); + + int updateSportReportCancel(HashMap repParam); + + int updateSportReportRolling(long betIdx); + + int updateSportReportRollingCancel(long betIdx); + + String getBetType(String betId); + + HashMap getBetTodayTotalInfo(HashMap betItem); + + int getCurBalance(Member memInfo); + + HashMap getSiteVendorInfo(HashMap vParam); + + int insertBetNew(HashMap betData); + + HashMap getReferenceData1(String betId); + + HashMap getReferenceData2(String betId); + + int cancelBetNew(HashMap betData); + + int cancelBetNew2(long betIdx); + + int bonusBetNew(HashMap betData); + + HashMap getRollingInfo(HashMap betData); + + HashMap getBetTodayTotalInfoNew(HashMap betData); + + int insertBetRolling(HashMap betData); + + int updateRollingYn(HashMap betData); + + List getCancelPointAmtList(String betId); + + List getCancelPointAmtList2(long betIdx); + + int deleteRollingCancel(String betId); + + int deleteRollingCancel2(long betIdx); + + int deleteLosingCancel(String betId); + + int deleteLosingCancel2(long betIdx); + + int updateUserCashByAmountNew(HashMap balanceParam); + + HashMap getPreBetData(HashMap betData); + + int insertSportBetRolling(long betIdx); + + int deleteSportRollingCancel(long betIdx); + + int updateSportRollingYn(long betIdx); + + int updateCancelPoint(HashMap betData); + + Long getCancelTargetIdx(HashMap betData); + + int updateUserCashByAmountD(HashMap param); + + int insertRvhCallbackLog(RvHoldemVO rvParam); + + int insertBetLosing(HashMap betData); + + int insertBetLosingNew(HashMap betData); + + int insertWinLosing(HashMap betData); + +} diff --git a/src/main/java/com/bb/dao/BetDaoImpl.java b/src/main/java/com/bb/dao/BetDaoImpl.java new file mode 100644 index 0000000..7386a68 --- /dev/null +++ b/src/main/java/com/bb/dao/BetDaoImpl.java @@ -0,0 +1,747 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.AdminBetSearch; +import com.bb.model.BetAutoLoseVO; +import com.bb.model.BetData; +import com.bb.model.BetDetail; +import com.bb.model.BetSearch; +import com.bb.model.BetSplusSearch; +import com.bb.model.Member; +import com.bb.model.RetailBetSearch; +import com.bb.model.RvHoldemVO; +import com.bb.model.TriplePurchaseId; +import com.bb.model.TripleVO; +import com.bb.model.TrxSearchVO; + +@Repository("betDao") +public class BetDaoImpl implements BetDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + + @Override + public int insertBet(HashMap param) { + return sqlSession.insert("insertBet", param); + } + + @Override + public int insertBetMap(HashMap param) { + return sqlSession.insert("insertBetMap", param); + } + + @Override + public int updateEnd(HashMap mapParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateEnd", mapParam); + } + + @Override + public int updateEndOld(HashMap mapParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateEndOld", mapParam); + } + + @Override + public int updateMapEnd(HashMap mapParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateMapEnd", mapParam); + } + + @Override + public int updateMapEndOld(HashMap mapParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateMapEndOld", mapParam); + } + + @Override + public void updateEndAutoLose(HashMap mapParam) { + // TODO Auto-generated method stub + sqlSession.update("updateEndAutoLose", mapParam); + } + + @Override + public Long getBetIdxByGameIdx(String betId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getBetIdxByGameIdx", betId); + } + + @Override + public Long getBetIdxByBetId(String betId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getBetIdxByBetId", betId); + } + + @Override + public int getBetListCnt(BetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBetListCnt", search); + } + + @Override + public List getBetList(BetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBetList", search); + } + + @Override + public int getFastBetIdListCnt(AdminBetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getFastBetIdListCnt", search); + } + + @Override + public List> getFastBetIdList(AdminBetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getFastBetIdList", search); + } + + @Override + public HashMap getFastBetItem(HashMap item) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getFastBetItem", item); + } + + @Override + public int getBetListNewCnt(AdminBetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBetListNewCnt", search); + } + + @Override + public List getBetListNew(AdminBetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBetListNew", search); + } + + @Override + public int getPowerballResultListCnt(BetSearch search) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getPowerballResultListCnt", search); + } + + @Override + public List getPowerballResultList(BetSearch search) { + // TODO Auto-generated method stub + return sqlSession.selectList("getPowerballResultList", search); + } + + @Override + public HashMap getGameRataMiniGame(@Valid BetData betData) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getGameRataMiniGame", betData); + } + + @Override + public List getWaitBetlist(Map pParam) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getWaitBetlist", pParam); + } + + @Override + public void updateBetInfoMapByPowerball(HashMap betInfo) { + // TODO Auto-generated method stub + sqlSession.update("updateBetInfoMapByPowerball", betInfo); + } + + @Override + public void updateBetInfoMapResultByPowerball(HashMap betInfo) { + // TODO Auto-generated method stub + sqlSession.update("updateBetInfoMapResultByPowerball", betInfo); + } + + @Override + public void insertCashByPowerball(HashMap betInfo) { + // TODO Auto-generated method stub + sqlSession.insert("insertCashByPowerball", betInfo); + } + + @Override + public void updateBetInfoByPowerball(HashMap betInfo) { + // TODO Auto-generated method stub + sqlSession.update("updateBetInfoByPowerball", betInfo); + } + + @Override + public void insertPointByPowerball(HashMap betInfo) { + // TODO Auto-generated method stub + sqlSession.insert("insertPointByPowerball", betInfo); + } + + @Override + public void updatePointRegYnByPowerball(HashMap betInfo) { + // TODO Auto-generated method stub + sqlSession.update("updatePointRegYnByPowerball", betInfo); + } + + @Override + public int getTripleTxnCheck(String tranId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getTripleTxnCheck", tranId); + } + + @Override + public int getTripleDebitCheckByBetId(String betId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getTripleDebitCheckByBetId", betId); + } + + @Override + public int getBetinfoCheckByBetId(String betId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBetinfoCheckByBetId", betId); + } + + @Override + public int getTripleDebitCheckByTranId(String tranid) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getTripleDebitCheckByTranId", tranid); + } + + @Override + public int getTripleCreditCheckByBetId(String betId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getTripleCreditCheckByBetId", betId); + } + + @Override + public int getTripleCreditCheckByTranId(String tranid) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getTripleCreditCheckByTranId", tranid); + } + + @Override + public int getTripleIsCancelCheck(String betId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getTripleIsCancelCheck", betId); + } + + @Override + public int getTripleIsBonusCheck(String betId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getTripleIsBonusCheck", betId); + } + + @Override + public int insertTripleTxnData(TripleVO tripleVO) { + // TODO Auto-generated method stub + return sqlSession.insert("insertTripleTxnData", tripleVO); + } + + @Override + public BetDetail getBetDetail(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getBetDetail", betIdx); + } + + @Override + public int betCancelTriple(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("betCancelTriple", param); + } + + @Override + public int betCancelOldTriple(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("betCancelOldTriple", param); + } + + @Override + public int betCancelMega(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("betCancelMega", param); + } + + @Override + public int getUserBetListCnt(BetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getUserBetListCnt", search); + } + + @Override + public List getUserBetList(BetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getUserBetList", search); + } + + @Override + public int getUserBetListNewCnt(BetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getUserBetListNewCnt", search); + } + + @Override + public List getUserBetListNew(BetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getUserBetListNew", search); + } + + @Override + public int insertBetBonus(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.insert("insertBetBonus", param); + } + + @Override + public int updateBetInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateBetInfo", param); + } + + @Override + public int updateBetInfoOld(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateBetInfoOld", param); + } + + @Override + public int updateBetInfoMap(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateBetInfoMap", param); + } + + @Override + public int updateBetInfoMapOld(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateBetInfoMapOld", param); + } + + @Override + public Long getCashIdx(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCashIdx", param); + } + + @Override + public int updateCashInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateCashInfo", param); + } + + @Override + public int updateUserCashByAmount(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateUserCashByAmount", param); + } + + @Override + public int updateUserCashByBalance(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateUserCashByBalance", param); + } + + @Override + public int getBottomBetListCnt(RetailBetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBottomBetListCnt", search); + } + + @Override + public List getBottomBetList(RetailBetSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBottomBetList", search); + } + + @Override + public int getTripleAutoCancelCheck(String tranId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getTripleAutoCancelCheck", tranId); + } + + @Override + public int updateTripleTxnData(TripleVO tripleVO) { + // TODO Auto-generated method stub + return sqlSession.update("updateTripleTxnData", tripleVO); + } + + @Override + public int betAutoCancelTriple(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("betAutoCancelTriple", param); + } + + @Override + public List getTripleBetWaitListByCasino() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getTripleBetWaitListByCasino"); + } + + @Override + public List getTripleBetWaitListBySlot() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getTripleBetWaitListBySlot"); + } + + @Override + public HashMap getSiteBetLimitInfo(TripleVO tripleVO) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getSiteBetLimitInfo", tripleVO); + } + + @Override + public List getTripleBetWaitList2() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getTripleBetWaitList2"); + } + + @Override + public List getBetPointList() { + // TODO Auto-generated method stub +// return sqlSessionSub.selectList("getBetPointList"); + return sqlSession.selectList("getBetPointList"); + } + + @Override + public List getBetPointListBySite(String siteId) { + // TODO Auto-generated method stub +// return sqlSessionSub.selectList("getBetPointListBySite", siteId); + return sqlSession.selectList("getBetPointListBySite", siteId); + } + + @Override + public int getTrxListCnt(TrxSearchVO searchVO) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getTrxListCnt", searchVO); + } + + @Override + public List> getTrxList(TrxSearchVO searchVO) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getTrxList", searchVO); + } + + @Override + public BetAutoLoseVO getBetInfoByBetId(String betId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBetInfoByBetId", betId); + } + + @Override + public int insertCashInfoByReserve(HashMap cashInsertParam) { + // TODO Auto-generated method stub + return sqlSession.insert("insertCashInfoByReserve", cashInsertParam); + } + + @Override + public int insertBetSplusInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.insert("insertBetSplusInfo", param); + } + + @Override + public int updateSplusStatus(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateSplusStatus", param); + } + + @Override + public int getSportBetListCnt(BetSplusSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSportBetListCnt", search); + } + + @Override + public List getSportBetList(BetSplusSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSportBetList", search); + } + + @Override + public int getSportEventListCnt(BetSplusSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSportEventListCnt", search); + } + + @Override + public List getSportEventList(BetSplusSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSportEventList", search); + } + + @Override + public int getSportEventDetailListCnt(BetSplusSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSportEventDetailListCnt", search); + } + + @Override + public List getSportEventDetailList(BetSplusSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSportEventDetailList", search); + } + + @Override + public int getSportBottomBetListCnt(BetSplusSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSportBottomBetListCnt", search); + } + + @Override + public List getSportBottomBetList(BetSplusSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSportBottomBetList", search); + } + + @Override + public int updateSplusBetCancel(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateSplusBetCancel", param); + } + + @Override + public int updatePurchaseId(TriplePurchaseId tripleVO) { + // TODO Auto-generated method stub + return sqlSession.update("updatePurchaseId", tripleVO); + } + + @Override + public int insertSlotTranInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.insert("insertSlotTranInfo", param); + } + + @Override + public int updateSportReport(HashMap repParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateSportReport", repParam); + } + + @Override + public int updateSportReportDebit(HashMap repParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateSportReportDebit", repParam); + } + + @Override + public int updateSportReportCredit(HashMap repParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateSportReportCredit", repParam); + } + + @Override + public int updateSportReportCancel(HashMap repParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateSportReportCancel", repParam); + } + + @Override + public int updateSportReportRolling(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.update("updateSportReportRolling", betIdx); + } + + @Override + public int updateSportReportRollingCancel(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.update("updateSportReportRollingCancel", betIdx); + } + + @Override + public String getBetType(String betId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBetType", betId); + } + + @Override + public HashMap getBetTodayTotalInfo(HashMap betItem) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBetTodayTotalInfo", betItem); + } + + @Override + public int getCurBalance(Member memInfo) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCurBalance", memInfo); + } + + @Override + public HashMap getSiteVendorInfo(HashMap vParam) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getSiteVendorInfo", vParam); + } + + @Override + public int insertBetNew(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.insert("insertBetNew", betData); + } + + @Override + public HashMap getReferenceData1(String betId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getReferenceData1", betId); + } + + @Override + public HashMap getReferenceData2(String betId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getReferenceData2", betId); + } + + @Override + public int cancelBetNew(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.update("cancelBetNew", betData); + } + + @Override + public int cancelBetNew2(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.update("cancelBetNew2", betIdx); + } + + @Override + public int bonusBetNew(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.update("bonusBetNew", betData); + } + + @Override + public HashMap getRollingInfo(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getRollingInfo", betData); + } + + @Override + public HashMap getBetTodayTotalInfoNew(HashMap betData) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBetTodayTotalInfoNew", betData); + } + + @Override + public int insertBetRolling(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.insert("insertBetRolling", betData); + } + + @Override + public int updateRollingYn(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.update("updateRollingYn", betData); + } + + @Override + public List getCancelPointAmtList(String betId) { + // TODO Auto-generated method stub + return sqlSession.selectList("getCancelPointAmtList", betId); + } + + @Override + public List getCancelPointAmtList2(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.selectList("getCancelPointAmtList2", betIdx); + } + + @Override + public int deleteRollingCancel(String betId) { + // TODO Auto-generated method stub + return sqlSession.delete("deleteRollingCancel", betId); + } + + @Override + public int deleteRollingCancel2(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.delete("deleteRollingCancel2", betIdx); + } + + @Override + public int deleteLosingCancel(String betId) { + // TODO Auto-generated method stub + return sqlSession.delete("deleteLosingCancel", betId); + } + + @Override + public int deleteLosingCancel2(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.delete("deleteLosingCancel2", betIdx); + } + + @Override + public int updateUserCashByAmountNew(HashMap balanceParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateUserCashByAmountNew", balanceParam); + } + + @Override + public HashMap getPreBetData(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getPreBetData", betData); + } + + @Override + public int insertSportBetRolling(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.insert("insertSportBetRolling", betIdx); + } + + @Override + public int deleteSportRollingCancel(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.delete("deleteSportRollingCancel", betIdx); + } + + @Override + public int updateSportRollingYn(long betIdx) { + // TODO Auto-generated method stub + return sqlSession.update("updateSportRollingYn", betIdx); + } + + @Override + public int updateCancelPoint(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.update("updateCancelPoint", betData); + } + + @Override + public Long getCancelTargetIdx(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCancelTargetIdx", betData); + } + + @Override + public int updateUserCashByAmountD(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateUserCashByAmountD", param); + } + + @Override + public int insertRvhCallbackLog(RvHoldemVO rvParam) { + // TODO Auto-generated method stub + return sqlSession.insert("insertRvhCallbackLog", rvParam); + } + + @Override + public int insertBetLosing(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.insert("insertBetLosing", betData); + } + + @Override + public int insertBetLosingNew(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.insert("insertBetLosingNew", betData); + } + + @Override + public int insertWinLosing(HashMap betData) { + // TODO Auto-generated method stub + return sqlSession.insert("insertWinLosing", betData); + } + +} diff --git a/src/main/java/com/bb/dao/BoardDao.java b/src/main/java/com/bb/dao/BoardDao.java new file mode 100644 index 0000000..b1369ac --- /dev/null +++ b/src/main/java/com/bb/dao/BoardDao.java @@ -0,0 +1,87 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import com.bb.model.AnswerVo; +import com.bb.model.Board; +import com.bb.model.BoardListSearch; +import com.bb.model.Comment; +import com.bb.model.Message; +import com.bb.model.MessageListSearch; + +public interface BoardDao { + + int getBoardListCnt(@Valid BoardListSearch search); + + List getBoardList(@Valid BoardListSearch search); + + List getBoardIdxList(@Valid BoardListSearch search); + + int saveBoard(@Valid Board board); + + int saveCmt(@Valid Comment comment); + + Board getBoard(@Valid Board board); + + List getCmtList(Map param); + + Comment getComment(@Valid Comment comment); + + void viewAdd(Board boardetail); + + void adminRead(Board boardetail); + + void msgSend(@Valid Message message); + + void msgRead(@Valid Message message); + + void msgUpdate(@Valid Message message); + + int getMsgListCnt(@Valid MessageListSearch search); + + List getMsgList(@Valid MessageListSearch search); + + void allRead(@Valid Message message); + + void msgDel(@Valid Message message); + + int updateFaqStatus(int boardIdx); + + List getAnswerList(AnswerVo search); + + int saveAnswer(AnswerVo answer); + int updateAnswer(AnswerVo answer); + + int deleteAnswer(AnswerVo answer); + + List> getMainBoardList(BoardListSearch search); + + List> getMainBoardList2(BoardListSearch search); + + void msgDelList(@Valid Message message); + + int getUserMsgListCnt(@Valid MessageListSearch search); + + List getUserMsgList(@Valid MessageListSearch search); + + void userAnswerCmtRead(Board boardetail); + + void partnerMsgSend(@Valid Message message); + + Message getJoinMessage(String siteId); + + Board getSiteFlowBoard(BoardListSearch search); + + int deleteBoard(int boardIdx); + + void levelMsgSend(@Valid Message message); + + int setBoardViewYn(Board board); + + int deleteYBoard(int boardIdx); + +} diff --git a/src/main/java/com/bb/dao/BoardDaoImpl.java b/src/main/java/com/bb/dao/BoardDaoImpl.java new file mode 100644 index 0000000..e2f2314 --- /dev/null +++ b/src/main/java/com/bb/dao/BoardDaoImpl.java @@ -0,0 +1,242 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.AnswerVo; +import com.bb.model.Board; +import com.bb.model.BoardListSearch; +import com.bb.model.Comment; +import com.bb.model.Message; +import com.bb.model.MessageListSearch; + +@Repository("boardDao") +public class BoardDaoImpl implements BoardDao { + + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + @Override + public int getBoardListCnt(@Valid BoardListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBoardListCnt", search); + } + + @Override + public List getBoardList(@Valid BoardListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBoardList", search); + } + + @Override + public List getBoardIdxList(@Valid BoardListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBoardIdxList", search); + } + + @Override + public int saveBoard(@Valid Board board) { + // TODO Auto-generated method stub + return sqlSession.insert("saveBoard", board); + } + + @Override + public int saveCmt(@Valid Comment comment) { + // TODO Auto-generated method stub + return sqlSession.insert("saveCmt", comment); + } + + @Override + public Board getBoard(@Valid Board board) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBoard", board); + } + + @Override + public List getCmtList(Map param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCmtList", param); + } + + @Override + public Comment getComment(@Valid Comment comment) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getComment", comment); + } + + @Override + public void viewAdd(Board boardetail) { + // TODO Auto-generated method stub + sqlSession.update("viewAdd", boardetail); + } + + @Override + public void adminRead(Board boardetail) { + // TODO Auto-generated method stub + sqlSession.update("adminRead", boardetail); + } + + @Override + public void msgSend(@Valid Message message) { + // TODO Auto-generated method stub + sqlSession.insert("msgSend", message); + } + + @Override + public void msgRead(@Valid Message message) { + // TODO Auto-generated method stub + sqlSession.insert("msgRead", message); + } + + @Override + public void msgUpdate(@Valid Message message) { + // TODO Auto-generated method stub + sqlSession.update("msgUpdate", message); + } + + @Override + public int getMsgListCnt(@Valid MessageListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMsgListCnt", search); + } + + @Override + public List getMsgList(@Valid MessageListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMsgList", search); + } + + @Override + public void allRead(@Valid Message message) { + // TODO Auto-generated method stub + sqlSession.insert("allRead", message); + } + + @Override + public void msgDel(@Valid Message message) { + // TODO Auto-generated method stub + sqlSession.insert("msgDel", message); + } + + @Override + public int updateFaqStatus(int boardIdx) { + // TODO Auto-generated method stub + return sqlSession.update("updateFaqStatus", boardIdx); + } + + @Override + public List getAnswerList(AnswerVo search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getAnswerList", search); + } + + @Override + public int saveAnswer(AnswerVo answer) { + // TODO Auto-generated method stub + return sqlSession.insert("saveAnswer", answer); + } + + @Override + public int updateAnswer(AnswerVo answer) { + // TODO Auto-generated method stub + return sqlSession.insert("updateAnswer", answer); + } + + @Override + public int deleteAnswer(AnswerVo answer) { + // TODO Auto-generated method stub + return sqlSession.update("deleteAnswer", answer); + } + + @Override + public List> getMainBoardList(BoardListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMainBoardList", search); + } + + @Override + public List> getMainBoardList2(BoardListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMainBoardList2", search); + } + + @Override + public void msgDelList(@Valid Message message) { + // TODO Auto-generated method stub + sqlSession.update("msgDelList", message); + } + + @Override + public int getUserMsgListCnt(@Valid MessageListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getUserMsgListCnt", search); + } + + @Override + public List getUserMsgList(@Valid MessageListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getUserMsgList", search); + } + + @Override + public void userAnswerCmtRead(Board boardetail) { + // TODO Auto-generated method stub + sqlSession.update("userAnswerCmtRead", boardetail); + } + + @Override + public void partnerMsgSend(@Valid Message message) { + // TODO Auto-generated method stub + sqlSession.insert("partnerMsgSend", message); + } + + @Override + public Message getJoinMessage(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getJoinMessage", siteId); + } + + @Override + public Board getSiteFlowBoard(BoardListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteFlowBoard", search); + } + + @Override + public int deleteBoard(int boardIdx) { + // TODO Auto-generated method stub + return sqlSession.delete("deleteBoard", boardIdx); + } + + @Override + public void levelMsgSend(@Valid Message message) { + // TODO Auto-generated method stub + sqlSession.insert("levelMsgSend", message); + } + + @Override + public int setBoardViewYn(Board board) { + // TODO Auto-generated method stub + return sqlSession.update("setBoardViewYn", board); + } + + @Override + public int deleteYBoard(int boardIdx) { + // TODO Auto-generated method stub + return sqlSession.update("deleteYBoard", boardIdx); + } +} diff --git a/src/main/java/com/bb/dao/CashDao.java b/src/main/java/com/bb/dao/CashDao.java new file mode 100644 index 0000000..b3e0f04 --- /dev/null +++ b/src/main/java/com/bb/dao/CashDao.java @@ -0,0 +1,97 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.bb.model.AdminCashSearch; +import com.bb.model.CashDetail; +import com.bb.model.CashQueVO; +import com.bb.model.CashSearch; +import com.bb.model.CashStatus; +import com.bb.model.CashTranLogSrch; +import com.bb.model.CouponSearch; +import com.bb.model.CouponVO; +import com.bb.model.Member; +import com.bb.model.MemberSearch; +import com.bb.model.Point; +import com.bb.model.PointSearch; +import com.bb.model.RetailCashSearch; + +public interface CashDao { + int insertCash(CashDetail cash); + void updateMyCash(CashDetail cash); + int getCashListCnt(CashSearch search); + List getCashList(CashSearch search); + HashMap getCashListSum(CashSearch search); + int updateStatus(CashStatus status); + int insertBetPoint(String LOG_PREFIX, HashMap mapParam); + HashMap getCashInfo(CashStatus status); + int updateCiAmt(Map param); + int updateCoAmt(Map param); + int getCashIOListCnt(CashSearch search); + List getCashIOList(CashSearch search); + HashMap getCashTotalListCnt(CashSearch search); + List getCashTotalList(CashSearch search); + int getPointListCnt(PointSearch search); + List getPointList(PointSearch search); + HashMap getPointSumInfo(PointSearch search); + int getPointListNewCnt(PointSearch search); + List getPointListNew(PointSearch search); + List getPointSum(PointSearch search); + long getMemCash(CashDetail cash); + HashMap getAccBankInfo(Member search); + long pointInsert(Point point); + void delCash(CashSearch search); + void updateMemPoint(Map param); + void updateUserGameMoney(HashMap cashParam); + String getCreditCheck(String siteId); + + int getCashSendListCnt(CashSearch search); + List> getCashSendList(CashSearch search); + int getAdminCashIOListCnt(AdminCashSearch search); + List getAdminCashIOList(AdminCashSearch search); + HashMap getAdminCashIOListSum(AdminCashSearch search); + int getAdminPointIOListCnt(AdminCashSearch search); + List getAdminPointIOList(AdminCashSearch search); + HashMap getAdminPointIOListSum(AdminCashSearch search); + int cashTransLogCnt(CashTranLogSrch search); + List cashTransLogList(CashTranLogSrch search); + int cashTransLogCnt2(CashTranLogSrch search); + List cashTransLogList2(CashTranLogSrch search); + List> getMainCashList(CashSearch param); + int getCashInCnt(Member search); + int getCashOutCnt(Member search); + int insertCashInfo(HashMap cashInfoParam); + int getCashinfoCnt(CashDetail paramCash); + int getCashinfoRetailCnt(CashDetail paramCash); + int getUserBalance(Member search); + int getPointinfoCnt(Point point); + int getBottomCashListCnt(RetailCashSearch search); + List getBottomCashList(RetailCashSearch search); + int getBottomCashListCnt2(RetailCashSearch search); + List getBottomCashList2(RetailCashSearch search); + int getMemCashForUpdate(MemberSearch search); + HashMap getLastCashIn(CashSearch search); + HashMap getLastCashInToBetSum(HashMap param); + HashMap getLastCashInToBonusPoint(HashMap param); + Integer getFirstDailyCnt(HashMap pointParam); + int getCashWaitTimeCheck(CashDetail paramCash); + List getCashQueList(); + long getBalance(CashQueVO item); + int updateQueStatus(HashMap param); + long cashInsertByCoupon(CashDetail cash); + int couponCreate(CouponVO coupon); + int updateCouponItem(CouponVO coupon); + int checkCouponNumber(String couponNumber); + CouponVO getCouponItem(String couponNumber); + int getCouponListCnt(CouponSearch search); + List> getCouponList(CouponSearch search); + int getMyCouponListCnt(CouponSearch search); + List> getMyCouponList(CouponSearch search); + HashMap getLastCashInBy24H(CashSearch search); + List> getLastCashInToBetSumBy24H(HashMap param); + int insertCashBonus(HashMap data); + HashMap getCashBonusInfo(long cashIdx); + int updateCashBonus(HashMap data); +} diff --git a/src/main/java/com/bb/dao/CashDaoImpl.java b/src/main/java/com/bb/dao/CashDaoImpl.java new file mode 100644 index 0000000..1ba0d8c --- /dev/null +++ b/src/main/java/com/bb/dao/CashDaoImpl.java @@ -0,0 +1,533 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.AdminCashSearch; +import com.bb.model.CashDetail; +import com.bb.model.CashQueVO; +import com.bb.model.CashSearch; +import com.bb.model.CashStatus; +import com.bb.model.CashTranLogSrch; +import com.bb.model.CouponSearch; +import com.bb.model.CouponVO; +import com.bb.model.Member; +import com.bb.model.MemberSearch; +import com.bb.model.Point; +import com.bb.model.PointSearch; +import com.bb.model.RetailCashSearch; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Repository("CashDao") +public class CashDaoImpl implements CashDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + + @Override + public int insertCash(CashDetail cash) { + return sqlSession.insert("insertCash", cash); + } + + @Override + public void updateMyCash(CashDetail cash) { + // TODO Auto-generated method stub + sqlSession.update("updateMyCash", cash); + } + + @Override + public int getCashListCnt(CashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCashListCnt", search); + } + + + @Override + public List getCashList(CashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCashList", search); + } + + @Override + public HashMap getCashListSum(CashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCashListSum", search); + } + + + @Override + public int updateStatus(CashStatus status) { + // TODO Auto-generated method stub + return sqlSession.update("cashUpdateStatus", status); + } + + + @Override + public int insertBetPoint(String LOG_PREFIX, HashMap mapParam) { + int pointResult = 0; + + int betRate = (int) mapParam.get("betRate"); + String gameCategory = mapParam.get("gameCategory").toString(); + String vendorCode = mapParam.get("vendorCode").toString(); + String isBlankSpinYn = mapParam.get("isBlankSpinYn").toString(); + + if(isBlankSpinYn.equals("N")) { + if(vendorCode.equals("33") || vendorCode.equals("powerball")) { + // "하이로우" 멀티 롤링요율 처리 + pointResult = sqlSession.insert("insertMultiBetPoint", mapParam); + log.debug("pointProc::SUCC::pointMultiResult::[" + pointResult + "]::betRate::[" + betRate + "]"); + } else { + if((gameCategory.equals("casino") && betRate >= 12)) { + log.info("pointProc::NONE::[betIdx::"+mapParam.get("betIdx")+"]::betRate::[" + betRate + "]"); + } else { + // Slot + // Sport + // Minigame ("하이로우" 멀티 롤링요율 제외) + // Casino AND betRate < 12 + pointResult = sqlSession.insert("insertBetPoint", mapParam); + log.debug("pointProc::SUCC::[betIdx::"+mapParam.get("betIdx")+"]::pointResult::[" + pointResult + "]::betRate::[" + betRate + "]"); + } + } + + } + + int betResult = sqlSession.update("updatePointRegY", mapParam); + log.debug(LOG_PREFIX+ "updatePointRegY::Result::" + betResult); + + return pointResult; + } + + + @Override + public HashMap getCashInfo(CashStatus status) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCashInfo", status); + } + + + @Override + public int updateCiAmt(Map param) { + return sqlSession.update("updateCiAmt", param); + + } + + + @Override + public int updateCoAmt(Map param) { + return sqlSession.update("updateCoAmt", param); + + } + + + @Override + public int getCashIOListCnt(CashSearch search) { + return sqlSessionSub.selectOne("getCashIOListCnt", search); + } + + + @Override + public List getCashIOList(CashSearch search) { + return sqlSessionSub.selectList("getCashIOList", search); + } + + + @Override + public HashMap getCashTotalListCnt(CashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCashTotalListCnt", search); + } + + + @Override + public List getCashTotalList(CashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCashTotalList", search); + } + + + @Override + public int getPointListCnt(PointSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPointListCnt", search); + } + + + @Override + public List getPointList(PointSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPointList", search); + } + + + @Override + public HashMap getPointSumInfo(PointSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPointSumInfo", search); + } + + + @Override + public int getPointListNewCnt(PointSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPointListNewCnt", search); + } + + + @Override + public List getPointListNew(PointSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPointListNew", search); + } + + + @Override + public List getPointSum(PointSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPointSum", search); + } + + + @Override + public long getMemCash(CashDetail cash) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getMemCash", cash); + } + + + @Override + public HashMap getAccBankInfo(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAccBankInfo", search); + } + + + @Override + public long pointInsert(Point point) { + // TODO Auto-generated method stub + return sqlSession.insert("pointInsert", point); + } + + + @Override + public void delCash(CashSearch search) { + // TODO Auto-generated method stub + sqlSession.update("delCash", search); + } + + + @Override + public void updateMemPoint(Map param) { + // TODO Auto-generated method stub + sqlSession.update("updateMemPoint", param); + } + + + @Override + public void updateUserGameMoney(HashMap cashParam) { + // TODO Auto-generated method stub + sqlSession.update("updateUserGameMoney", cashParam); + } + + + @Override + public String getCreditCheck(String siteId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCreditCheck", siteId); + } + + @Override + public int getCashSendListCnt(CashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCashSendListCnt", search); + } + + @Override + public List> getCashSendList(CashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCashSendList", search); + } + + @Override + public int getAdminCashIOListCnt(AdminCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAdminCashIOListCnt", search); + } + + @Override + public List getAdminCashIOList(AdminCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getAdminCashIOList", search); + } + + @Override + public HashMap getAdminCashIOListSum(AdminCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAdminCashIOListSum", search); + } + + @Override + public int getAdminPointIOListCnt(AdminCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAdminPointIOListCnt", search); + } + + @Override + public List getAdminPointIOList(AdminCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getAdminPointIOList", search); + } + + @Override + public HashMap getAdminPointIOListSum(AdminCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAdminPointIOListSum", search); + } + + @Override + public int cashTransLogCnt(CashTranLogSrch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("cashTransLogCnt", search); + } + + @Override + public List cashTransLogList(CashTranLogSrch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("cashTransLogList", search); + } + + @Override + public int cashTransLogCnt2(CashTranLogSrch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("cashTransLogCnt2", search); + } + + @Override + public List cashTransLogList2(CashTranLogSrch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("cashTransLogList2", search); + } + + @Override + public List> getMainCashList(CashSearch param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMainCashList", param); + } + + @Override + public int getCashInCnt(Member search) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCashInCnt", search); + } + + @Override + public int getCashOutCnt(Member search) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCashOutCnt", search); + } + + @Override + public int insertCashInfo(HashMap cashInfoParam) { + // TODO Auto-generated method stub + return sqlSession.insert("insertCashInfo", cashInfoParam); + } + + @Override + public int getCashinfoCnt(CashDetail paramCash) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCashinfoCnt", paramCash); + } + + @Override + public int getCashinfoRetailCnt(CashDetail paramCash) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCashinfoRetailCnt", paramCash); + } + + @Override + public int getUserBalance(Member search) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getUserBalance", search); + } + + @Override + public int getPointinfoCnt(Point point) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getPointinfoCnt", point); + } + + @Override + public int getBottomCashListCnt(RetailCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBottomCashListCnt", search); + } + + @Override + public List getBottomCashList(RetailCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBottomCashList", search); + } + + @Override + public int getBottomCashListCnt2(RetailCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBottomCashListCnt2", search); + } + + @Override + public List getBottomCashList2(RetailCashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBottomCashList2", search); + } + + @Override + public int getMemCashForUpdate(MemberSearch search) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getMemCashForUpdate", search); + } + + @Override + public HashMap getLastCashIn(CashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getLastCashIn", search); + } + + @Override + public HashMap getLastCashInToBetSum(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getLastCashInToBetSum", param); + } + + @Override + public HashMap getLastCashInToBonusPoint(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getLastCashInToBonusPoint", param); + } + + @Override + public Integer getFirstDailyCnt(HashMap pointParam) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getFirstDailyCnt", pointParam); + } + + @Override + public int getCashWaitTimeCheck(CashDetail paramCash) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCashWaitTimeCheck", paramCash); + } + + @Override + public List getCashQueList() { + // TODO Auto-generated method stub + return sqlSession.selectList("getCashQueList"); + } + + @Override + public long getBalance(CashQueVO item) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getBalance", item); + } + + @Override + public int updateQueStatus(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateQueStatus", param); + } + + @Override + public long cashInsertByCoupon(CashDetail cash) { + // TODO Auto-generated method stub + return sqlSession.insert("cashInsertByCoupon", cash); + } + + @Override + public int couponCreate(CouponVO couponVO) { + // TODO Auto-generated method stub + return sqlSession.insert("couponCreate", couponVO); + } + + @Override + public int updateCouponItem(CouponVO couponVO) { + // TODO Auto-generated method stub + return sqlSession.update("updateCouponItem", couponVO); + } + + @Override + public int checkCouponNumber(String couponNumber) { + // TODO Auto-generated method stub + return sqlSession.selectOne("checkCouponNumber", couponNumber); + } + + @Override + public CouponVO getCouponItem(String couponNumber) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCouponItem", couponNumber); + } + + @Override + public int getCouponListCnt(CouponSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCouponListCnt", search); + } + + @Override + public List> getCouponList(CouponSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCouponList", search); + } + + @Override + public int getMyCouponListCnt(CouponSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMyCouponListCnt", search); + } + + @Override + public List> getMyCouponList(CouponSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyCouponList", search); + } + + @Override + public HashMap getLastCashInBy24H(CashSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getLastCashInBy24H", search); + } + + @Override + public List> getLastCashInToBetSumBy24H(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getLastCashInToBetSumBy24H", param); + } + + @Override + public int insertCashBonus(HashMap data) { + // TODO Auto-generated method stub + return sqlSession.insert("insertCashBonus", data); + } + + @Override + public HashMap getCashBonusInfo(long cashIdx) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCashBonusInfo", cashIdx); + } + + @Override + public int updateCashBonus(HashMap data) { + // TODO Auto-generated method stub + return sqlSession.insert("updateCashBonus", data); + } +} diff --git a/src/main/java/com/bb/dao/CommonDao.java b/src/main/java/com/bb/dao/CommonDao.java new file mode 100644 index 0000000..d6133ce --- /dev/null +++ b/src/main/java/com/bb/dao/CommonDao.java @@ -0,0 +1,275 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.bb.model.Admin; +import com.bb.model.AdminIp; +import com.bb.model.AdminLogSearch; +import com.bb.model.AdminSearch; +import com.bb.model.Bank; +import com.bb.model.Banner; +import com.bb.model.Block; +import com.bb.model.BlockSearch; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.Code; +import com.bb.model.CodeSearch; +import com.bb.model.CronServerInfo; +import com.bb.model.DomainPartnerVO; +import com.bb.model.GameCodeSearchVO; +import com.bb.model.GameCodeVO; +import com.bb.model.GameSetting; +import com.bb.model.GameSettingItem; +import com.bb.model.LevelBank; +import com.bb.model.LevelBetLimit; +import com.bb.model.LevelDomain; +import com.bb.model.LevelFailPoint; +import com.bb.model.LevelOutPwd; +import com.bb.model.Member; +import com.bb.model.MenuVO; +import com.bb.model.NotiBgmVo; +import com.bb.model.SiteCashBonusSettingVO; +import com.bb.model.SiteCheckReq; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; + +import jakarta.validation.Valid; + +public interface CommonDao { + + List getCodeList(CodeSearch codesSearch); + + HashMap getCode(CodeSearch codesSearch); + + int getDupRepotCheck(); + + List getDailyList(String cmd); + + int updateReport(HashMap report); + + int updateReport2(); + + int insertReport(HashMap report); + + int insertReport2(); + + List getDailyListYday(); + + int updateReportYday1(HashMap report); + + int updateReportYday2(); + + int updateReportYday3(); + +// void updateReport(HashMap setTime); + +// void insertReport(HashMap setTime); + + HashMap getSiteOption(String siteId); + + void insertlog(Map logParam); + + void updateMemLogin(Map logParam); + + List getlastLoginToken(); + + void updatelog(Map logParam); + + int optionSave(SiteOption option); + + SiteOption getSiteSetting(SiteSearch search); + + HashMap getSiteAccoucnt(SiteSearch search); + + void bankSave(Bank bank); + + List getAdminBankList(SiteSearch search); + + List getBankList(SiteSearch search); + + void bannerSave(Banner banner); + + List getBannerList(SiteSearch search); + + void insertCode(@Valid Code code); + + List getLbList(SiteSearch search); + + void accountSave(LevelBank levelBank); + + List getLbetLimitList(SiteSearch search); + + void setLbetLimitList(LevelBetLimit betLimit); + + List getFailPointList(SiteSearch search); + + void failPointSave(LevelFailPoint failPoint); + + List getDomainList(SiteSearch search); + + void domainSave(LevelDomain domain); + + List getOutPwdList(SiteSearch search); + + void outPwdSave(LevelOutPwd outPwd); + + int getAdminLogListCnt(@Valid AdminLogSearch search); + + List getAdminLogList(@Valid AdminLogSearch search); + + void insertAdminlog(Map logParam); + + int getSiteBlockListCnt(@Valid BlockSearch search); + + List getSiteBlockList(@Valid BlockSearch search); + + void blockSave(@Valid Block block); + + int getSiteAdminListCnt(@Valid AdminSearch search); + + List getSiteAdminList(@Valid AdminSearch search); + + void adminSave(Admin admin); + + void adminDelete(Admin admin); + + int getSiteAdminIpListCnt(@Valid AdminSearch search); + + List getSiteAdminIpList(@Valid AdminSearch search); + + void adminIpSave(AdminIp adminIp); + + void adminIpDelete(AdminIp adminIp); + + void updateIpInfo(Map ipParam); + + List getLoginSite(); + + int gameSettingSave(List settingList); + + List gameSettingList(GameSetting searchSetting); + + int siteCheckSave(SiteCheckReq siteCheckReq); + + List isSiteCheck(); + + void changeSiteCheckOff(SiteCheckReq param); + + void changeSiteSettingCheckYn(SiteCheckReq param); + + List siteCheckList(SiteCheckReq param); + + HashMap siteCheckDetail(SiteCheckReq param); + + HashMap siteCheckInfo(SiteCheckReq param); + + List> getGameCodeTabList(GameCodeSearchVO searchVO); + + List> getGameCodeColList(GameCodeSearchVO searchVO); + + List> getGameCodeList(GameCodeSearchVO searchVO); + + int gameCodeRegist(GameCodeVO gameCodeVO); + + int gameCodeUpdate(GameCodeVO gameCodeVO); + + int gameCodeAddMemRate(GameCodeVO gameCodeVO); + + int gameCodeAddSiteGameSetting(GameCodeVO gameCodeVO); + + List getPopupList(SiteSearch search); + + List getBannerInfoList(SiteSearch search); + + List getLoginPopupList(SiteSearch paramSite); + + List getGameCodes(CodeSearch codesSearch); + + String getApiVendor(CodeSearch codeSearch); + + List getMenuList(HashMap param); + + List getVendorList(); + + List getGameGroupCodes(String siteId); + + List getGameCodesForSuper(CodeSearch codesSearch); + + List getGameGroupCodesForSuper(String siteId); + + CronServerInfo getServerCronStatus(CronServerInfo cronStatus); + + List> getDomainPartnerList(DomainPartnerVO domainPartnerVO); + + int domainPartnerSave(DomainPartnerVO domainPartnerVO); + + int domainPartnerDelete(DomainPartnerVO domainPartnerVO); + + String getJoinRecommanderId(SiteSearch paramSite); + + HashMap getSessionTransactionIsolation(); + + HashMap getDailyTime(); + + void updateDailyTime(HashMap setTime); + + List getChargingPointSettingList(int siteIdx); + + ChargingPointSettingVO getChargingPointSetting(ChargingPointSettingVO param); + + int memChargingPointSettingSave(ChargingPointSettingVO settingVO); + + int siteChargingPointSettingSave(ChargingPointSettingVO settingVO); + + String getJackpot(HashMap params); + + HashMap getCodeBySite(CodeSearch codeSrch); + + int getSiteLogoutTimeLimit(String siteId); + + List getRateCategory(String siteId); + + HashMap getUserInfoByToken(String token); + + HashMap getAdminInfoByToken(String token); + + List getMenuBookmarkList(HashMap param); + + HashMap getSiteMemo(String siteId); + + int updateBookmarkMenu(MenuVO param); + + int updateSiteMemo(HashMap param); + + int getSiteCheckCount(SiteCheckReq siteCheckReq); + + void updateDayCashInDate(HashMap dailyParam); + + List getMonthList(); + + int insertMonthReport(HashMap report); + + void updateAcctionLog(Map logParam); + + List getRollingList(String days); + + int insertRollingReport(HashMap report); + + HashMap getVassApiInfo(Member search); + + List getNotiBgmList(SiteSearch search); + + int setNotiBgmSave(NotiBgmVo notiBgmVo); + + List getDailyAutoLevelUpList(); + + int updateAutoLevelUp(HashMap user); + + List getSiteCashBonusSettingList(Integer siteIdx); + + int setSiteCashBonusSettingSave(SiteCashBonusSettingVO settingVO); + + int bankDelete(Bank bank); + +} diff --git a/src/main/java/com/bb/dao/CommonDaoImpl.java b/src/main/java/com/bb/dao/CommonDaoImpl.java new file mode 100644 index 0000000..d5b6c6d --- /dev/null +++ b/src/main/java/com/bb/dao/CommonDaoImpl.java @@ -0,0 +1,758 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.Admin; +import com.bb.model.AdminIp; +import com.bb.model.AdminLogSearch; +import com.bb.model.AdminSearch; +import com.bb.model.Bank; +import com.bb.model.Banner; +import com.bb.model.Block; +import com.bb.model.BlockSearch; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.Code; +import com.bb.model.CodeSearch; +import com.bb.model.CronServerInfo; +import com.bb.model.DomainPartnerVO; +import com.bb.model.GameCodeSearchVO; +import com.bb.model.GameCodeVO; +import com.bb.model.GameSetting; +import com.bb.model.GameSettingItem; +import com.bb.model.LevelBank; +import com.bb.model.LevelBetLimit; +import com.bb.model.LevelDomain; +import com.bb.model.LevelFailPoint; +import com.bb.model.LevelOutPwd; +import com.bb.model.Member; +import com.bb.model.MenuVO; +import com.bb.model.NotiBgmVo; +import com.bb.model.SiteCashBonusSettingVO; +import com.bb.model.SiteCheckReq; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; + +import jakarta.validation.Valid; + + +@Repository("commonDao") +public class CommonDaoImpl implements CommonDao { + + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + @Override + public List getCodeList(CodeSearch codesSearch) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCodeList", codesSearch); + } + + @Override + public HashMap getCode(CodeSearch codesSearch) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCode", codesSearch); + } + + @Override + public int getDupRepotCheck() { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getDupRepotCheck"); + } + + @Override + public List getDailyList(String cmd) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDailyList", cmd); + } + + @Override + public int updateReport(HashMap report) { + // TODO Auto-generated method stub + return sqlSession.update("updateReport", report); + } + + @Override + public int updateReport2() { + // TODO Auto-generated method stub + return sqlSession.update("updateReport2"); + } + + @Override + public int insertReport(HashMap report) { + // TODO Auto-generated method stub + return sqlSession.insert("insertReport", report); + } + + @Override + public int insertReport2() { + // TODO Auto-generated method stub + return sqlSession.insert("insertReport2"); + } + + @Override + public List getDailyListYday() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDailyListYday"); + } + + @Override + public int updateReportYday1(HashMap report) { + // TODO Auto-generated method stub + return sqlSession.update("updateReportYday1", report); + } + + @Override + public int updateReportYday2() { + // TODO Auto-generated method stub + return sqlSession.update("updateReportYday2"); + } + + @Override + public int updateReportYday3() { + // TODO Auto-generated method stub + return sqlSession.update("updateReportYday3"); + } + +// @Override +// public void updateReport(HashMap setTime) { +// // TODO Auto-generated method stub +// sqlSession.update("updateReport", setTime); +// } + +// @Override +// public void insertReport(HashMap setTime) { +// // TODO Auto-generated method stub +// sqlSession.insert("insertReport", setTime); +// } + + @Override + public HashMap getSiteOption(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteOption", siteId); + } + + @Override + public void insertlog(Map logParam) { + // TODO Auto-generated method stub + sqlSession.insert("insertlog", logParam); + } + + @Override + public void updateMemLogin(Map logParam) { + // TODO Auto-generated method stub + sqlSession.update("updateMemLogin", logParam); + } + + @Override + public List getlastLoginToken() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getlastLoginToken"); + } + + @Override + public void updatelog(Map logParam) { + // TODO Auto-generated method stub + sqlSession.update("updatelog", logParam); + } + + @Override + public int optionSave(SiteOption option) { + // TODO Auto-generated method stub + return sqlSession.insert("optionSave", option); + } + + @Override + public SiteOption getSiteSetting(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteSetting", search); + } + + @Override + public HashMap getSiteAccoucnt(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteAccoucnt", search); + } + + @Override + public void bankSave(Bank bank) { + // TODO Auto-generated method stub + sqlSession.insert("bankSave", bank); + } + + @Override + public List getAdminBankList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getAdminBankList", search); + } + + @Override + public List getBankList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBankList", search); + } + + @Override + public void bannerSave(Banner banner) { + // TODO Auto-generated method stub + sqlSession.insert("bannerSave", banner); + } + + @Override + public List getBannerList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBannerList", search); + } + + @Override + public void insertCode(@Valid Code code) { + // TODO Auto-generated method stub + sqlSession.insert("insertCode", code); + } + + @Override + public List getLbList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getLbList", search); + } + + @Override + public void accountSave(LevelBank levelBank) { + // TODO Auto-generated method stub + sqlSession.insert("accountSave", levelBank); + } + + @Override + public List getLbetLimitList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getLbetLimitList", search); + } + + @Override + public void setLbetLimitList(LevelBetLimit betLimit) { + // TODO Auto-generated method stub + sqlSession.update("setLbetLimitList", betLimit); + } + + @Override + public List getFailPointList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getFailPointList", search); + } + + @Override + public void failPointSave(LevelFailPoint failPoint) { + // TODO Auto-generated method stub + sqlSession.insert("failPointSave", failPoint); + } + + @Override + public List getDomainList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDomainList", search); + } + + @Override + public void domainSave(LevelDomain domain) { + // TODO Auto-generated method stub + sqlSession.insert("domainSave", domain); + } + + @Override + public List getOutPwdList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getOutPwdList", search); + } + + @Override + public void outPwdSave(LevelOutPwd outPwd) { + // TODO Auto-generated method stub + sqlSession.insert("outPwdSave", outPwd); + } + + @Override + public int getAdminLogListCnt(@Valid AdminLogSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAdminLogListCnt", search); + } + + @Override + public List getAdminLogList(@Valid AdminLogSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getAdminLogList", search); + } + + @Override + public void insertAdminlog(Map logParam) { + // TODO Auto-generated method stub + sqlSession.insert("insertAdminlog", logParam); + } + + @Override + public int getSiteBlockListCnt(@Valid BlockSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteBlockListCnt", search); + } + + @Override + public List getSiteBlockList(@Valid BlockSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSiteBlockList", search); + } + + @Override + public void blockSave(@Valid Block block) { + // TODO Auto-generated method stub + sqlSession.insert("blockSave", block); + } + + @Override + public int getSiteAdminListCnt(@Valid AdminSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteAdminListCnt", search); + } + + @Override + public List getSiteAdminList(@Valid AdminSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSiteAdminList", search); + } + + @Override + public void adminSave(Admin admin) { + // TODO Auto-generated method stub + sqlSession.insert("adminSave", admin); + } + + @Override + public void adminDelete(Admin admin) { + // TODO Auto-generated method stub + sqlSession.delete("adminDelete", admin); + } + + @Override + public int getSiteAdminIpListCnt(@Valid AdminSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteAdminIpListCnt", search); + } + + @Override + public List getSiteAdminIpList(@Valid AdminSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSiteAdminIpList", search); + } + + @Override + public void adminIpSave(AdminIp adminIp) { + // TODO Auto-generated method stub + sqlSession.insert("adminIpSave", adminIp); + } + + @Override + public void adminIpDelete(AdminIp adminIp) { + // TODO Auto-generated method stub + sqlSession.insert("adminIpDelete", adminIp); + } + + @Override + public void updateIpInfo(Map ipParam) { + // TODO Auto-generated method stub + sqlSession.update("updateIpInfo", ipParam); + } + + @Override + public List getLoginSite() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getLoginSite", null); + } + + @Override + public int gameSettingSave(List settingList) { + // TODO Auto-generated method stub + return sqlSession.insert("gameSettingSave", settingList); + } + + @Override + public List gameSettingList(GameSetting searchSetting) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("gameSettingList", searchSetting); + } + + @Override + public int siteCheckSave(SiteCheckReq siteCheckReq) { + // TODO Auto-generated method stub + return sqlSession.insert("siteCheckSave", siteCheckReq); + } + + @Override + public List isSiteCheck() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("isSiteCheck"); + } + + @Override + public void changeSiteCheckOff(SiteCheckReq param) { + // TODO Auto-generated method stub + sqlSession.update("changeSiteCheckOff", param); + } + + @Override + public void changeSiteSettingCheckYn(SiteCheckReq param) { + // TODO Auto-generated method stub + sqlSession.update("changeSiteSettingCheckYn", param); + } + + @Override + public List siteCheckList(SiteCheckReq param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("siteCheckList", param); + } + + @Override + public HashMap siteCheckDetail(SiteCheckReq param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("siteCheckDetail", param); + } + + @Override + public HashMap siteCheckInfo(SiteCheckReq param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("siteCheckInfo", param); + } + + @Override + public List> getGameCodeTabList(GameCodeSearchVO searchVO) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGameCodeTabList", searchVO); + } + + @Override + public List> getGameCodeColList(GameCodeSearchVO searchVO) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGameCodeColList", searchVO); + } + + @Override + public List> getGameCodeList(GameCodeSearchVO searchVO) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGameCodeList", searchVO); + } + + @Override + public int gameCodeRegist(GameCodeVO gameCodeVO) { + // TODO Auto-generated method stub + return sqlSession.insert("gameCodeRegist", gameCodeVO); + } + + @Override + public int gameCodeUpdate(GameCodeVO gameCodeVO) { + // TODO Auto-generated method stub + return sqlSession.update("gameCodeUpdate", gameCodeVO); + } + + @Override + public int gameCodeAddMemRate(GameCodeVO gameCodeVO) { + // TODO Auto-generated method stub + return sqlSession.insert("gameCodeAddMemRate", gameCodeVO); + } + + @Override + public int gameCodeAddSiteGameSetting(GameCodeVO gameCodeVO) { + // TODO Auto-generated method stub + return sqlSession.insert("gameCodeAddSiteGameSetting", gameCodeVO); + } + + @Override + public List getPopupList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPopupList", search); + } + + @Override + public List getBannerInfoList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBannerInfoList", search); + } + + @Override + public List getLoginPopupList(SiteSearch paramSite) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getLoginPopupList", paramSite); + } + + @Override + public List getGameCodes(CodeSearch codesSearch) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGameCodes", codesSearch); + } + + @Override + public List getGameGroupCodes(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGameGroupCodes", siteId); + } + + @Override + public String getApiVendor(CodeSearch codeSearch) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getApiVendor", codeSearch); + } + + @Override + public List getMenuList(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMenuList", param); + } + + @Override + public List getVendorList() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getVendorList"); + } + + @Override + public List getGameCodesForSuper(CodeSearch codesSearch) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGameCodesForSuper", codesSearch); + } + + @Override + public List getGameGroupCodesForSuper(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGameGroupCodesForSuper", siteId); + } + + @Override + public CronServerInfo getServerCronStatus(CronServerInfo cronStatus) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getServerCronStatus", cronStatus); + } + + @Override + public List> getDomainPartnerList(DomainPartnerVO domainPartnerVO) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDomainPartnerList", domainPartnerVO); + } + + @Override + public int domainPartnerSave(DomainPartnerVO domainPartnerVO) { + // TODO Auto-generated method stub + return sqlSession.insert("domainPartnerSave", domainPartnerVO); + } + + @Override + public int domainPartnerDelete(DomainPartnerVO domainPartnerVO) { + // TODO Auto-generated method stub + return sqlSession.delete("domainPartnerDelete", domainPartnerVO); + } + + @Override + public String getJoinRecommanderId(SiteSearch paramSite) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getJoinRecommanderId", paramSite); + } + + @Override + public HashMap getSessionTransactionIsolation() { + // TODO Auto-generated method stub + return sqlSession.selectOne("getSessionTransactionIsolation"); + } + + @Override + public HashMap getDailyTime() { + // TODO Auto-generated method stub + return sqlSession.selectOne("getDailyTime"); + } + + @Override + public void updateDailyTime(HashMap setTime) { + // TODO Auto-generated method stub + sqlSession.update("updateDailyTime", setTime); + } + + @Override + public List getChargingPointSettingList(int siteIdx) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getChargingPointSettingList", siteIdx); + } + + @Override + public ChargingPointSettingVO getChargingPointSetting(ChargingPointSettingVO param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getChargingPointSetting", param); + } + + @Override + public int memChargingPointSettingSave(ChargingPointSettingVO settingVO) { + // TODO Auto-generated method stub + return sqlSession.update("memChargingPointSettingSave", settingVO); + } + + @Override + public int siteChargingPointSettingSave(ChargingPointSettingVO settingVO) { + // TODO Auto-generated method stub + return sqlSession.update("siteChargingPointSettingSave", settingVO); + } + + @Override + public String getJackpot(HashMap params) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getJackpot", params); + } + + @Override + public HashMap getCodeBySite(CodeSearch codeSrch) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCodeBySite", codeSrch); + } + + @Override + public int getSiteLogoutTimeLimit(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteLogoutTimeLimit", siteId); + } + + @Override + public List getRateCategory(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getRateCategory", siteId); + } + + @Override + public HashMap getUserInfoByToken(String token) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getUserInfoByToken", token); + } + + @Override + public HashMap getAdminInfoByToken(String token) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getAdminInfoByToken", token); + } + + @Override + public List getMenuBookmarkList(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMenuBookmarkList", param); + } + + @Override + public int updateBookmarkMenu(MenuVO param) { + // TODO Auto-generated method stub + return sqlSession.update("updateBookmarkMenu", param); + } + + @Override + public HashMap getSiteMemo(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteMemo", siteId); + } + + @Override + public int updateSiteMemo(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateSiteMemo", param); + } + + @Override + public int getSiteCheckCount(SiteCheckReq siteCheckReq) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteCheckCount", siteCheckReq); + } + + @Override + public void updateDayCashInDate(HashMap dailyParam) { + // TODO Auto-generated method stub + sqlSession.update("updateDayCashInDate", dailyParam); + } + + @Override + public List getMonthList() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMonthList"); + } + + @Override + public int insertMonthReport(HashMap report) { + // TODO Auto-generated method stub + return sqlSession.insert("insertMonthReport", report); + } + + @Override + public void updateAcctionLog(Map logParam) { + // TODO Auto-generated method stub + sqlSession.update("updateAcctionLog", logParam); + } + + @Override + public List getRollingList(String days) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getRollingList", days); + } + + @Override + public int insertRollingReport(HashMap report) { + // TODO Auto-generated method stub + return sqlSession.insert("insertRollingReport", report); + } + + @Override + public HashMap getVassApiInfo(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getVassApiInfo", search); + } + + @Override + public List getNotiBgmList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getNotiBgmList", search); + } + + @Override + public int setNotiBgmSave(NotiBgmVo notiBgmVo) { + // TODO Auto-generated method stub + return sqlSession.insert("setNotiBgmSave", notiBgmVo); + } + + @Override + public List getDailyAutoLevelUpList() { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDailyAutoLevelUpList"); + } + + @Override + public int updateAutoLevelUp(HashMap user) { + // TODO Auto-generated method stub + return sqlSession.update("updateAutoLevelUp", user); + } + + @Override + public List getSiteCashBonusSettingList(Integer siteIdx) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSiteCashBonusSettingList", siteIdx); + } + + @Override + public int setSiteCashBonusSettingSave(SiteCashBonusSettingVO settingVO) { + // TODO Auto-generated method stub + return sqlSession.update("setSiteCashBonusSettingSave", settingVO); + } + + @Override + public int bankDelete(Bank bank) { + // TODO Auto-generated method stub + return sqlSession.delete("bankDelete", bank); + } +} diff --git a/src/main/java/com/bb/dao/CompDao.java b/src/main/java/com/bb/dao/CompDao.java new file mode 100644 index 0000000..217a334 --- /dev/null +++ b/src/main/java/com/bb/dao/CompDao.java @@ -0,0 +1,126 @@ +package com.bb.dao; + + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.BiSubPointRateVo; +import com.bb.model.CompDetail; +import com.bb.model.CompResetInfo; +import com.bb.model.CompSearch; +import com.bb.model.GameSettingInfo; +import com.bb.model.Member; +import com.bb.model.MemberListSearch; +import com.bb.model.MenuVO; +import com.bb.model.OTPInfo; +import com.bb.model.PartnerCompInfo; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.TripleGameRate; + +public interface CompDao { + + int getPartnerCompListCnt(@Valid MemberListSearch search); + + List getPartnerCompList(@Valid MemberListSearch search); + + CompDetail getPartnerComp(Site search); + + HashMap getPartnerCompDetail(Member search); + + int modifySiteGameSetting(BiSubPointRateVo biSubPointRateVo); + + int modifyCreditSettings(PartnerCompInfo compInfo); + + int modifyCreditRates(HashMap param); + + int modifySiteSettings(SiteOption siteOption); + + int getCheckTopComp(PartnerCompInfo compInfo); + + int modifyCompInfo(PartnerCompInfo compInfo); + + HashMap getCompInfoForDetail(SiteSearch search); + + HashMap getSettingInfoForDetail(SiteSearch search); + + HashMap getCompStatsForDetail(SiteSearch search); + + List getTopCompListForDetail(SiteSearch search); + + List getBotCompListForDetail(SiteSearch search); + + int modifySiteGameSettingForSuper(GameSettingInfo item); + + int modifyMenuSettings(MenuVO item); + + List getCompanyRate(Member search); + + List> getGameRateCompList(TripleGameRate gameRateVO); + + int updateCompGameRate(HashMap compGameRateInfo); + + HashMap getTripleParam(CompSearch search); + + List> getTripleGameRate(HashMap tripleParam); + + int insertTripleRate(HashMap tripleRate); + + List> getOmsRateListByTripleGame(CompSearch search); + + int updateOmsRateList(CompSearch search); + + int resetDelete(CompResetInfo compResetInfo); + + int resetUpdate(CompResetInfo compResetInfo); + + int getResetMemIdCount(CompResetInfo compResetInfo); + + int updateApiSetting(PartnerCompInfo compInfo); + + List> getCompIdList(SiteSearch search); + + List getSiteGameInfo(SiteSearch search); + + List getSiteMenuInfo(SiteSearch search); + + void deleteTripleRate(CompSearch search); + + int updateCompVictoryPassYn(SiteOption option); + + + String getAdminOtpUseYN(String adminId); + int registOtpInfo(OTPInfo otpParam); + int updateAdminOtpUseYN(OTPInfo otpParam); + int updateSuperOtpUseYN(OTPInfo otpParam); + OTPInfo getOtpInfo(String adminId); + String getAdminType(String adminId); + + List> getAdminOtpInfoList(String siteId); + + HashMap getTripleCreditInfo(String siteId); + + void updateTripleSiteCredit(HashMap tripleCreditInfo); + + int updateVendoMinMax(HashMap param); + + String getLastMaxWinAmt(HashMap param); + + String getLastMaxWinAmtCnt(HashMap param); + + long getTripleSiteCredit(String tripleSiteId); + + long getTripleSitePoint(String tripleSiteId); + + HashMap getTripleTargetSiteInfo(HashMap tripleCreditInfo); + + void insertTripleCredit(HashMap creditParam); + + void insertTripleCreditAiAo(HashMap creditParam); + + String getSiteIdByAdminId(String adminId); + +} diff --git a/src/main/java/com/bb/dao/CompDaoImpl.java b/src/main/java/com/bb/dao/CompDaoImpl.java new file mode 100644 index 0000000..0d2abb0 --- /dev/null +++ b/src/main/java/com/bb/dao/CompDaoImpl.java @@ -0,0 +1,363 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.BiSubPointRateVo; +import com.bb.model.CompDetail; +import com.bb.model.CompResetInfo; +import com.bb.model.CompSearch; +import com.bb.model.GameSettingInfo; +import com.bb.model.Member; +import com.bb.model.MemberListSearch; +import com.bb.model.MenuVO; +import com.bb.model.OTPInfo; +import com.bb.model.PartnerCompInfo; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.TripleGameRate; + +@Repository("compDao") +public class CompDaoImpl implements CompDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + /** 트리플DB 연결 */ + @Autowired @Qualifier("sqlSessionTriple") + protected SqlSession sqlSessionTriple; + + @Override + public int getPartnerCompListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPartnerCompListCnt", search); + } + + @Override + public List getPartnerCompList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPartnerCompList", search); + } + + @Override + public CompDetail getPartnerComp(Site search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPartnerComp", search); + } + + @Override + public HashMap getPartnerCompDetail(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPartnerCompDetail", search); + } + + @Override + public int modifySiteGameSetting(BiSubPointRateVo biSubPointRateVo) { + // TODO Auto-generated method stub + return sqlSession.insert("modifySiteGameSetting", biSubPointRateVo); + } + + @Override + public int modifyCreditSettings(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + return sqlSession.update("modifyCreditSettings", compInfo); + } + + @Override + public int modifyCreditRates(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("modifyCreditRates", param); + } + + @Override + public int modifySiteSettings(SiteOption siteOption) { + // TODO Auto-generated method stub + return sqlSession.update("modifySiteSettings", siteOption); + } + + @Override + public int getCheckTopComp(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCheckTopComp", compInfo); + } + + @Override + public int modifyCompInfo(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + return sqlSession.update("modifyCompInfo", compInfo); + } + + @Override + public HashMap getCompInfoForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCompInfoForDetail", search); + } + + @Override + public HashMap getSettingInfoForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSettingInfoForDetail", search); + } + + @Override + public HashMap getCompStatsForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCompStatsForDetail", search); + } + + @Override + public List getTopCompListForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getTopCompListForDetail", search); + } + + @Override + public List getBotCompListForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBotCompListForDetail", search); + } + + @Override + public int modifySiteGameSettingForSuper(GameSettingInfo item) { + // TODO Auto-generated method stub + return sqlSession.insert("modifySiteGameSettingForSuper", item); + } + + @Override + public int modifyMenuSettings(MenuVO item) { + // TODO Auto-generated method stub + return sqlSession.update("modifyMenuSettings", item); + } + + @Override + public List getCompanyRate(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCompanyRate", search); + } + + @Override + public List> getGameRateCompList(TripleGameRate gameRateVO) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGameRateCompList", gameRateVO); + } + + @Override + public int updateCompGameRate(HashMap compGameRateInfo) { + // TODO Auto-generated method stub + return sqlSession.update("updateCompGameRate", compGameRateInfo); + } + + @Override + public HashMap getTripleParam(CompSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getTripleParam", search); + } + + @Override + public List> getTripleGameRate(HashMap tripleParam) { + // TODO Auto-generated method stub + return sqlSessionTriple.selectList("getTripleGameRate", tripleParam); + } + + @Override + public int insertTripleRate(HashMap tripleRate) { + // TODO Auto-generated method stub + return sqlSession.insert("insertTripleRate", tripleRate); + } + + @Override + public List> getOmsRateListByTripleGame(CompSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getOmsRateListByTripleGame", search); + } + + @Override + public int updateOmsRateList(CompSearch search) { + // TODO Auto-generated method stub + return sqlSession.update("updateOmsRateList", search); + } + + @Override + public int resetDelete(CompResetInfo compResetInfo) { + // TODO Auto-generated method stub + return sqlSession.delete("resetDelete", compResetInfo); + } + + @Override + public int resetUpdate(CompResetInfo compResetInfo) { + // TODO Auto-generated method stub + return sqlSession.update("resetUpdate", compResetInfo); + } + + @Override + public int getResetMemIdCount(CompResetInfo compResetInfo) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getResetMemIdCount", compResetInfo); + } + + @Override + public int updateApiSetting(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + return sqlSession.update("updateApiSetting", compInfo); + } + + @Override + public List> getCompIdList(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCompIdList", search); + } + + @Override + public List getSiteGameInfo(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSiteGameInfo", search); + } + + @Override + public List getSiteMenuInfo(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSiteMenuInfo", search); + } + + @Override + public void deleteTripleRate(CompSearch search) { + // TODO Auto-generated method stub + sqlSession.delete("deleteTripleRate", search); + } + + @Override + public int updateCompVictoryPassYn(SiteOption option) { + // TODO Auto-generated method stub + return sqlSession.update("updateCompVictoryPassYn", option); + } + + + @Override + public String getAdminOtpUseYN(String adminId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAdminOtpUseYN", adminId); + } + + + @Override + public int registOtpInfo(OTPInfo otpParam) { + // TODO Auto-generated method stub + return sqlSession.insert("registOtpInfo", otpParam); + } + + + @Override + public int updateAdminOtpUseYN(OTPInfo otpParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateAdminOtpUseYN", otpParam); + } + + + @Override + public int updateSuperOtpUseYN(OTPInfo otpParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateSuperOtpUseYN", otpParam); + } + + + @Override + public OTPInfo getOtpInfo(String adminId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getOtpInfo", adminId); + } + + @Override + public String getAdminType(String adminId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAdminType", adminId); + } + + @Override + public List> getAdminOtpInfoList(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getAdminOtpInfoList", siteId); + } + + @Override + public HashMap getTripleCreditInfo(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getTripleCreditInfo", siteId); + } + + @Override + public void updateTripleSiteCredit(HashMap tripleCreditInfo) { + // TODO Auto-generated method stub + sqlSessionTriple.update("updateTripleSiteCredit", tripleCreditInfo); + } + + @Override + public int updateVendoMinMax(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updateVendoMinMax", param); + } + + @Override + public String getLastMaxWinAmt(HashMap param) { + // TODO Auto-generated method stub + String lastMaxWinAmt = sqlSessionSub.selectOne("getLastMaxWinAmt", param); + if(lastMaxWinAmt == null) lastMaxWinAmt = "0"; + return lastMaxWinAmt; + } + + @Override + public String getLastMaxWinAmtCnt(HashMap param) { + // TODO Auto-generated method stub + String lastMaxWinAmtCnt = sqlSessionSub.selectOne("getLastMaxWinAmtCnt", param); + if(lastMaxWinAmtCnt == null) lastMaxWinAmtCnt = "0"; + return lastMaxWinAmtCnt; + } + + @Override + public long getTripleSiteCredit(String tripleSiteId) { + // TODO Auto-generated method stub + return sqlSessionTriple.selectOne("getTripleSiteCredit", tripleSiteId); + } + + @Override + public long getTripleSitePoint(String tripleSiteId) { + // TODO Auto-generated method stub + return sqlSessionTriple.selectOne("getTripleSitePoint", tripleSiteId); + } + + @Override + public HashMap getTripleTargetSiteInfo(HashMap tripleCreditInfo) { + // TODO Auto-generated method stub + return sqlSessionTriple.selectOne("getTripleTargetSiteInfo", tripleCreditInfo); + } + + @Override + public void insertTripleCredit(HashMap creditParam) { + // TODO Auto-generated method stub + sqlSessionTriple.insert("insertTripleCredit", creditParam); + } + + @Override + public void insertTripleCreditAiAo(HashMap creditParam) { + // TODO Auto-generated method stub + sqlSessionTriple.insert("insertTripleCreditAiAo", creditParam); + } + + @Override + public String getSiteIdByAdminId(String adminId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteIdByAdminId", adminId); + } +} diff --git a/src/main/java/com/bb/dao/MainDao.java b/src/main/java/com/bb/dao/MainDao.java new file mode 100644 index 0000000..eb2d3d7 --- /dev/null +++ b/src/main/java/com/bb/dao/MainDao.java @@ -0,0 +1,18 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +public interface MainDao { + + HashMap getMainTopInfo(HashMap param); + + HashMap getMainStatistics(HashMap param); + + HashMap getMainCashReport(HashMap param); + + HashMap getMyCashReport(HashMap param); + + List> getMainNewPayLog(HashMap param); + +} diff --git a/src/main/java/com/bb/dao/MainDaoImpl.java b/src/main/java/com/bb/dao/MainDaoImpl.java new file mode 100644 index 0000000..4d7eef8 --- /dev/null +++ b/src/main/java/com/bb/dao/MainDaoImpl.java @@ -0,0 +1,51 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +@Repository("mainDao") +public class MainDaoImpl implements MainDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + @Override + public HashMap getMainTopInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMainTopInfo", param); + } + + @Override + public HashMap getMainStatistics(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMainStatistics", param); + } + + @Override + public HashMap getMainCashReport(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMainCashReport", param); + } + + @Override + public HashMap getMyCashReport(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMyCashReport", param); + } + + @Override + public List> getMainNewPayLog(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMainNewPayLog", param); + } +} diff --git a/src/main/java/com/bb/dao/MinigameDao.java b/src/main/java/com/bb/dao/MinigameDao.java new file mode 100644 index 0000000..5231ca9 --- /dev/null +++ b/src/main/java/com/bb/dao/MinigameDao.java @@ -0,0 +1,22 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.MiniGameSearch; +import com.bb.model.MinigameBetRate; +import com.bb.model.MinigameSet; + +public interface MinigameDao { + + void setSave(@Valid MinigameSet mgs); + + void betRateSave(@Valid MinigameBetRate mbr); + + List getSetList(MiniGameSearch search); + + List getBetRateList(MiniGameSearch search); + +} diff --git a/src/main/java/com/bb/dao/MinigameDaoImpl.java b/src/main/java/com/bb/dao/MinigameDaoImpl.java new file mode 100644 index 0000000..cdc65e8 --- /dev/null +++ b/src/main/java/com/bb/dao/MinigameDaoImpl.java @@ -0,0 +1,52 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.MiniGameSearch; +import com.bb.model.MinigameBetRate; +import com.bb.model.MinigameSet; + +@Repository("minigameDaoImpl") +public class MinigameDaoImpl implements MinigameDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + @Override + public void setSave(@Valid MinigameSet mgs) { + // TODO Auto-generated method stub + sqlSession.insert("setSave", mgs); + } + + @Override + public void betRateSave(@Valid MinigameBetRate mbr) { + // TODO Auto-generated method stub + sqlSession.insert("betRateSave", mbr); + } + + @Override + public List getSetList(MiniGameSearch search) { + // TODO Auto-generated method stub + return sqlSession.selectList("getSetList", search); + } + + @Override + public List getBetRateList(MiniGameSearch search) { + // TODO Auto-generated method stub + return sqlSession.selectList("getBetRateList", search); + } + +} diff --git a/src/main/java/com/bb/dao/PassimDao.java b/src/main/java/com/bb/dao/PassimDao.java new file mode 100644 index 0000000..c6c12ed --- /dev/null +++ b/src/main/java/com/bb/dao/PassimDao.java @@ -0,0 +1,5 @@ +package com.bb.dao; + +public interface PassimDao { + +} diff --git a/src/main/java/com/bb/dao/PassimDaoImpl.java b/src/main/java/com/bb/dao/PassimDaoImpl.java new file mode 100644 index 0000000..97a3a36 --- /dev/null +++ b/src/main/java/com/bb/dao/PassimDaoImpl.java @@ -0,0 +1,22 @@ +package com.bb.dao; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Repository("PassimDao") +public class PassimDaoImpl implements PassimDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + +} diff --git a/src/main/java/com/bb/dao/PointDao.java b/src/main/java/com/bb/dao/PointDao.java new file mode 100644 index 0000000..434e0ed --- /dev/null +++ b/src/main/java/com/bb/dao/PointDao.java @@ -0,0 +1,25 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import com.bb.model.Point; +import com.bb.model.PointSearchAdm; + +public interface PointDao { + + int getAdminPointListCnt(PointSearchAdm search); + + List> getAdminPointList(PointSearchAdm search); + + int getAdminPointListNewCnt(PointSearchAdm search); + + List> getAdminPointListNew(PointSearchAdm search); + + List> getPointBotRateList(PointSearchAdm search); + + List> getPointBotMultiRateList(PointSearchAdm search); + + long pointInsert(Point point); + +} diff --git a/src/main/java/com/bb/dao/PointDaoImpl.java b/src/main/java/com/bb/dao/PointDaoImpl.java new file mode 100644 index 0000000..311d45b --- /dev/null +++ b/src/main/java/com/bb/dao/PointDaoImpl.java @@ -0,0 +1,70 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.Point; +import com.bb.model.PointSearchAdm; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Repository("PointDao") +public class PointDaoImpl implements PointDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + @Override + public int getAdminPointListCnt(PointSearchAdm search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAdminPointListCnt", search); + } + + @Override + public List> getAdminPointList(PointSearchAdm search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getAdminPointList", search); + } + + @Override + public int getAdminPointListNewCnt(PointSearchAdm search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getAdminPointListNewCnt", search); + } + + @Override + public List> getAdminPointListNew(PointSearchAdm search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getAdminPointListNew", search); + } + + @Override + public List> getPointBotRateList(PointSearchAdm search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPointBotRateList", search); + } + + @Override + public List> getPointBotMultiRateList(PointSearchAdm search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPointBotMultiRateList", search); + } + + @Override + public long pointInsert(Point point) { + // TODO Auto-generated method stub + return sqlSession.insert("pointInsert2", point); + } + +} diff --git a/src/main/java/com/bb/dao/RateDao.java b/src/main/java/com/bb/dao/RateDao.java new file mode 100644 index 0000000..dcf7fd6 --- /dev/null +++ b/src/main/java/com/bb/dao/RateDao.java @@ -0,0 +1,22 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import com.bb.model.Member; +import com.bb.model.MemberSearch; +import com.bb.model.RateVO; +import com.bb.model.RetailSearch; + +public interface RateDao { + + List> getMemRollingInfo(Member search); + + int myRateInfoUpdate(RateVO rateVO); + + int topMinRateInfoUpdate(RateVO rateVO); + + int botMaxRateInfoUpdate(RateVO rateVO); + + List getTopRate(MemberSearch search); +} diff --git a/src/main/java/com/bb/dao/RateDaoImpl.java b/src/main/java/com/bb/dao/RateDaoImpl.java new file mode 100644 index 0000000..b7bbec4 --- /dev/null +++ b/src/main/java/com/bb/dao/RateDaoImpl.java @@ -0,0 +1,61 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.Member; +import com.bb.model.MemberSearch; +import com.bb.model.RateVO; +import com.bb.model.RetailSearch; + +@Repository("rateDao") +public class RateDaoImpl implements RateDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + + @Override + public List> getMemRollingInfo(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemRollingInfo", search); + } + + + @Override + public int myRateInfoUpdate(RateVO rateVO) { + // TODO Auto-generated method stub + return sqlSession.update("myRateInfoUpdate", rateVO); + } + + + @Override + public int topMinRateInfoUpdate(RateVO rateVO) { + // TODO Auto-generated method stub + return sqlSession.update("topMinRateInfoUpdate", rateVO); + } + + + @Override + public int botMaxRateInfoUpdate(RateVO rateVO) { + // TODO Auto-generated method stub + return sqlSession.update("botMaxRateInfoUpdate", rateVO); + } + + + @Override + public List getTopRate(MemberSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getTopRate", search); + } +} diff --git a/src/main/java/com/bb/dao/ReportDao.java b/src/main/java/com/bb/dao/ReportDao.java new file mode 100644 index 0000000..8ad6468 --- /dev/null +++ b/src/main/java/com/bb/dao/ReportDao.java @@ -0,0 +1,71 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.As; +import com.bb.model.DailyReportSearch; +import com.bb.model.DayilPartnerReport; +import com.bb.model.DayilPeriodicReports; +import com.bb.model.ReportSearch; + +public interface ReportDao { + + int getReportMemwlListCnt(@Valid ReportSearch search); + + List getReportMemwlList(@Valid ReportSearch search); + + HashMap getPeriodCash(@Valid ReportSearch search); + + List getPeriodRollPoint(@Valid ReportSearch search); + + List getPeriodWlAmt(@Valid ReportSearch search); + + List getGameTypeList(@Valid ReportSearch search); + + List> getDayList(@Valid ReportSearch search); + + HashMap getDayTotal(ReportSearch search); + + int getReportTradeListCnt(@Valid ReportSearch search); + + List getReportTradeList(@Valid ReportSearch search); + + int getReportPartnerListCnt(@Valid ReportSearch search); + + List getReportPartnerList(@Valid ReportSearch search); + + List getReportPartnerGroupBet(@Valid HashMap partner); + + int getReportPayListCnt(@Valid ReportSearch search); + + List getReportPayList(@Valid ReportSearch search); + + List getReportPayGroupGameType(HashMap pay); + + int getReportsListCntForAdmin(DailyReportSearch search); + List getReportsListForAdmin(DailyReportSearch search); + DayilPeriodicReports getReportsTotalForAdmin(DailyReportSearch search); + String getReportsTotalCntForAdmin(DailyReportSearch search); + + int getReportsByUserListCntForAdmin(DailyReportSearch search); + List getReportsByUserListForAdmin(DailyReportSearch search); + DayilPeriodicReports getReportsByUserTotalForAdmin(DailyReportSearch search); + + + List getReportsListForPartner(DailyReportSearch search); + DayilPeriodicReports getReportsTotalForPartner(DailyReportSearch search); + String getReportsTotalCntForPartner(DailyReportSearch search); + + int getReportsByUserListCntForPartner(DailyReportSearch search); + List getReportsByUserListForPartner(DailyReportSearch search); + DayilPeriodicReports getReportsByUserTotalForPartner(DailyReportSearch search); + + HashMap getPartnerInfo(DailyReportSearch search); + List getDayilPartnerReport(DailyReportSearch search); + + List> getReportCateInfo(String siteId); + +} diff --git a/src/main/java/com/bb/dao/ReportDaoImpl.java b/src/main/java/com/bb/dao/ReportDaoImpl.java new file mode 100644 index 0000000..b090b3a --- /dev/null +++ b/src/main/java/com/bb/dao/ReportDaoImpl.java @@ -0,0 +1,234 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.As; +import com.bb.model.DailyReportSearch; +import com.bb.model.DayilPartnerReport; +import com.bb.model.DayilPeriodicReports; +import com.bb.model.ReportSearch; + + + +@Repository("reportDao") +public class ReportDaoImpl implements ReportDao { + + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + + @Override + public int getReportMemwlListCnt(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportMemwlListCnt", search); + } + + @Override + public List getReportMemwlList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportMemwlList", search); + } + + @Override + public HashMap getPeriodCash(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPeriodCash", search); + } + + @Override + public List getPeriodRollPoint(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPeriodRollPoint", search); + } + + @Override + public List getPeriodWlAmt(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPeriodWlAmt", search); + } + + @Override + public List getGameTypeList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGameTypeList", search); + } + + @Override + public List> getDayList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDayList", search); + } + + @Override + public HashMap getDayTotal(ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getDayTotal", search); + } + + @Override + public int getReportTradeListCnt(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportTradeListCnt", search); + } + + @Override + public List getReportTradeList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportTradeList", search); + } + + @Override + public int getReportPartnerListCnt(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportPartnerListCnt", search); + } + + @Override + public List getReportPartnerList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportPartnerList", search); + } + + @Override + public List getReportPartnerGroupBet(@Valid HashMap partner) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportPartnerGroupBet", partner); + } + + @Override + public int getReportPayListCnt(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportPayListCnt", search); + } + + @Override + public List getReportPayList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportPayList", search); + } + + @Override + public List getReportPayGroupGameType(HashMap pay) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportPayGroupGameType", pay); + } + + + + @Override + public int getReportsListCntForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportsListCntForAdmin", search); + } + + @Override + public List getReportsListForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportsListForAdmin", search); + } + + @Override + public DayilPeriodicReports getReportsTotalForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportsTotalForAdmin", search); + } + + @Override + public String getReportsTotalCntForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportsTotalCntForAdmin", search); + } + + + + @Override + public int getReportsByUserListCntForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportsByUserListCntForAdmin", search); + } + + @Override + public List getReportsByUserListForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportsByUserListForAdmin", search); + } + + @Override + public DayilPeriodicReports getReportsByUserTotalForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportsByUserTotalForAdmin", search); + } + + + + @Override + public List getReportsListForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportsListForPartner", search); + } + + @Override + public DayilPeriodicReports getReportsTotalForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportsTotalForPartner", search); + } + + @Override + public String getReportsTotalCntForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportsTotalCntForPartner", search); + } + + + @Override + public int getReportsByUserListCntForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportsByUserListCntForPartner", search); + } + + @Override + public List getReportsByUserListForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportsByUserListForPartner", search); + } + + @Override + public DayilPeriodicReports getReportsByUserTotalForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getReportsByUserTotalForPartner", search); + } + + + @Override + public HashMap getPartnerInfo(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPartnerInfo", search); + } + + @Override + public List getDayilPartnerReport(DailyReportSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDayilPartnerReport", search); + } + + @Override + public List> getReportCateInfo(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getReportCateInfo", siteId); + } + +} diff --git a/src/main/java/com/bb/dao/RetailDao.java b/src/main/java/com/bb/dao/RetailDao.java new file mode 100644 index 0000000..78dd9c3 --- /dev/null +++ b/src/main/java/com/bb/dao/RetailDao.java @@ -0,0 +1,172 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.BotMemRateVo; +import com.bb.model.CategoryRateVo; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.LoginUserVO; +import com.bb.model.Member; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberSearch; +import com.bb.model.PartnerListVO; +import com.bb.model.RetailListSearch; +import com.bb.model.RetailLowerSearch; +import com.bb.model.RetailPointSearch; +import com.bb.model.RetailSearch; +import com.bb.model.RetailSet; +import com.bb.model.UserDetailInfo; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; + +public interface RetailDao { + + int getRetailListCnt(@Valid RetailSearch search); + + List getRetailList(@Valid RetailSearch search); + + int getRetailListCnt2(@Valid RetailSearch search); + + List getRetailList2(@Valid RetailSearch search); + + void settingSave(@Valid RetailSet retailSet); + + int getRetailSettingListCnt(@Valid RetailSearch search); + + List getRetailSettingList(@Valid RetailSearch search); + + List getRetailBalanceList(@Valid RetailSearch search); + + int getRetailBalanceListCnt(@Valid RetailSearch search); + + int retailDetailListCnt(@Valid RetailSearch search); + + List retailDetailList(@Valid RetailSearch search); + + int retailSummryListCnt(@Valid RetailSearch search); + + List retailSummryList(@Valid RetailSearch search); + + List retailBalanceDetail(@Valid RetailSearch search); + + List getMyBetPointInfo(@Valid RetailSearch search); + + HashMap getMySummary(RetailSearch search); + + HashMap getMySummaryNew(RetailSearch search); + + HashMap getMyCashInfo(@Valid RetailSearch search); + + List getMyLoginMem(@Valid RetailSearch search); + + List getMemList(@Valid RetailSearch search); + + long getRetailBalcePoint(@Valid RetailSearch search); + + void updateRetailPointStatus(@Valid RetailSearch search); + + List myMemIds(Member search); + + List getMyCategoryRateList(MemberSearch search); + + List getBotCategoryRateList(MemberSearch search); + + int updateCasinoRate(BotMemRateVo item); + + int updateHcasinoRate(BotMemRateVo item); + + int updateSlotRate(BotMemRateVo item); + + int updateMiniRate(BotMemRateVo item); + + int updateSportRate(BotMemRateVo item); + + List getMyUnderPartnerLevels(Member search); + + int getMyMemListCnt(RetailSearch search); + + List getMyMemList(RetailSearch search); + + int getMyMemDirectListCnt(RetailSearch search); + + List getMyMemDirectList(RetailSearch search); + + + int getMyPartnerListCnt(RetailSearch search); + + List getMyPartnerList(RetailSearch search); + + List getMyPartnerList2(RetailSearch search); + + List getMyPartnerDirectList(RetailSearch search); + + int partnerBonusSettingSave(ChargingPointSettingVO settingVO); + + int getRetailPointListCnt(RetailPointSearch search); + + List getRetailPointList(RetailPointSearch search); + + List getPartnerHierarchy(RetailSearch search); + + List> getBottomRateList(Member search); + + int userLockWithBottom(HashMap param); + + HashMap getBotCashInfo(RetailSearch search); + + int getMyLoginMemListCnt(MemberListSearch search); + + List getMyLoginMemList(MemberListSearch search); + + HashMap getPartnerInfo(RetailSearch search); + + String getNextTargetLevel(RetailLowerSearch param); + + int getLowerPartnerListCnt(RetailLowerSearch search); + + List> getLowerPartnerList(RetailLowerSearch search); + + UserDetailInfo getUserDetailInfo(UserSearch search); + + int setUserDetailInfo(UserDetailInfo info); + + List> getDetailLoginLog(UserSearch search); + + int getDetailMsgLogCnt(UserListSearch search); + + List> getDetailMsgLog(UserListSearch search); + + int getDetailCashLogCnt(UserListSearch search); + + List> getDetailCashLog(UserListSearch search); + + int getDetailRollingLogCnt(UserListSearch search); + + List> getDetailRollingLog(UserListSearch search); + + List> getDetailRollingLogNew(UserListSearch search); + + List getPartnerHierarchy2(RetailSearch search); + + HashMap getMyBetStatData(UserSearch search); + + List> getBottomBetStatList(UserSearch search); + + HashMap getBottomBetStatSum(UserSearch search); + + List> getDailyBetList(UserSearch search); + + HashMap getDailyBetSum(UserSearch search); + + List> getDailyUserList(UserSearch search); + + HashMap getDailyUserSum(UserSearch search); + + List> getDailyPartnerList(UserSearch search); + + int getBotCnt(Member searchBot); + +} diff --git a/src/main/java/com/bb/dao/RetailDaoImpl.java b/src/main/java/com/bb/dao/RetailDaoImpl.java new file mode 100644 index 0000000..2164384 --- /dev/null +++ b/src/main/java/com/bb/dao/RetailDaoImpl.java @@ -0,0 +1,474 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.BotMemRateVo; +import com.bb.model.CategoryRateVo; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.LoginUserVO; +import com.bb.model.Member; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberSearch; +import com.bb.model.PartnerListVO; +import com.bb.model.RetailListSearch; +import com.bb.model.RetailLowerSearch; +import com.bb.model.RetailPointSearch; +import com.bb.model.RetailSearch; +import com.bb.model.RetailSet; +import com.bb.model.UserDetailInfo; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; + +@Repository("retailDao") +public class RetailDaoImpl implements RetailDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + @Override + public int getRetailListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getRetailListCnt", search); + } + + @Override + public List getRetailList(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getRetailList", search); + } + + @Override + public int getRetailListCnt2(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getRetailListCnt2", search); + } + + @Override + public List getRetailList2(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getRetailList2", search); + } + + @Override + public void settingSave(@Valid RetailSet retailSet) { + // TODO Auto-generated method stub + sqlSession.update("settingSave", retailSet); + } + + @Override + public int getRetailSettingListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getRetailSettingListCnt", search); + } + + @Override + public List getRetailSettingList(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getRetailSettingList", search); + } + + @Override + public List getRetailBalanceList(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getRetailBalanceList", search); + } + + @Override + public int getRetailBalanceListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getRetailBalanceListCnt", search); + } + + @Override + public int retailDetailListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("retailDetailListCnt", search); + } + + @Override + public List retailDetailList(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("retailDetailList", search); + } + + @Override + public int retailSummryListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("retailSummryListCnt", search); + } + + @Override + public List retailSummryList(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("summryList", search); + } + + @Override + public List retailBalanceDetail(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("retailBalanceDetail", search); + } + + @Override + public List getMyBetPointInfo(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyBetPointInfo", search); + } + + @Override + public HashMap getMySummary(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMySummary", search); + } + + @Override + public HashMap getMySummaryNew(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMySummaryNew", search); + } + + @Override + public HashMap getMyCashInfo(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMyCashInfo", search); + } + + @Override + public List getMyLoginMem(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyLoginMem", search); + } + + @Override + public List getMemList(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemList", search); + } + + @Override + public long getRetailBalcePoint(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getRetailBalcePoint", search); + } + + @Override + public void updateRetailPointStatus(@Valid RetailSearch search) { + // TODO Auto-generated method stub + sqlSession.update("updateRetailPointStatus", search); + } + + @Override + public List myMemIds(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("myMemIds", search); + } + + @Override + public List getMyCategoryRateList(MemberSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyCategoryRateList", search); + } + + @Override + public List getBotCategoryRateList(MemberSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBotCategoryRateList", search); + } + + @Override + public int updateCasinoRate(BotMemRateVo item) { + // TODO Auto-generated method stub + return sqlSession.update("updateCasinoRate", item); + } + + @Override + public int updateHcasinoRate(BotMemRateVo item) { + // TODO Auto-generated method stub + return sqlSession.update("updateHcasinoRate", item); + } + + @Override + public int updateSlotRate(BotMemRateVo item) { + // TODO Auto-generated method stub + return sqlSession.update("updateSlotRate", item); + } + + @Override + public int updateMiniRate(BotMemRateVo item) { + // TODO Auto-generated method stub + return sqlSession.update("updateMiniRate", item); + } + + @Override + public int updateSportRate(BotMemRateVo item) { + // TODO Auto-generated method stub + return sqlSession.update("updateSportRate", item); + } + + @Override + public List getMyUnderPartnerLevels(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyUnderPartnerLevels", search); + } + + @Override + public int getMyMemListCnt(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMyMemListCnt", search); + } + + @Override + public List getMyMemList(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyMemList", search); + } + + @Override + public int getMyMemDirectListCnt(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMyMemDirectListCnt", search); + } + + @Override + public List getMyMemDirectList(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyMemDirectList", search); + } + + + @Override + public int getMyPartnerListCnt(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMyPartnerListCnt", search); + } + + @Override + public List getMyPartnerList(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyPartnerList", search); + } + + @Override + public List getMyPartnerList2(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyPartnerList2", search); + } + + @Override + public List getMyPartnerDirectList(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyPartnerDirectList", search); + } + + @Override + public int partnerBonusSettingSave(ChargingPointSettingVO settingVO) { + // TODO Auto-generated method stub + return sqlSession.update("partnerBonusSettingSave", settingVO); + } + + @Override + public int getRetailPointListCnt(RetailPointSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getRetailPointListCnt", search); + } + + @Override + public List getRetailPointList(RetailPointSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getRetailPointList", search); + } + + @Override + public List getPartnerHierarchy(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPartnerHierarchy", search); + } + + @Override + public List> getBottomRateList(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBottomRateList", search); + } + + @Override + public int userLockWithBottom(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("userLockWithBottom", param); + } + + @Override + public HashMap getBotCashInfo(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBotCashInfo", search); + } + + @Override + public int getMyLoginMemListCnt(MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMyLoginMemListCnt", search); + } + + @Override + public List getMyLoginMemList(MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMyLoginMemList", search); + } + + @Override + public HashMap getPartnerInfo(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPartnerInfoV2", search); + } + + @Override + public String getNextTargetLevel(RetailLowerSearch param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getNextTargetLevel", param); + } + + @Override + public int getLowerPartnerListCnt(RetailLowerSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getLowerPartnerListCnt", search); + } + + @Override + public List> getLowerPartnerList(RetailLowerSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getLowerPartnerList", search); + } + + @Override + public UserDetailInfo getUserDetailInfo(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getUserDetailInfo", search); + } + + @Override + public int setUserDetailInfo(UserDetailInfo info) { + // TODO Auto-generated method stub + return sqlSession.update("setUserDetailInfo", info); + } + + @Override + public List> getDetailLoginLog(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDetailLoginLog", search); + } + + @Override + public int getDetailMsgLogCnt(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getDetailMsgLogCnt", search); + } + + @Override + public List> getDetailMsgLog(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDetailMsgLog", search); + } + + @Override + public int getDetailCashLogCnt(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getDetailCashLogCnt", search); + } + + @Override + public List> getDetailCashLog(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDetailCashLog", search); + } + + @Override + public int getDetailRollingLogCnt(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getDetailRollingLogCnt", search); + } + + @Override + public List> getDetailRollingLog(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDetailRollingLog", search); + } + + @Override + public List> getDetailRollingLogNew(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDetailRollingLogNew", search); + } + + @Override + public List getPartnerHierarchy2(RetailSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPartnerHierarchy2", search); + } + + @Override + public HashMap getMyBetStatData(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMyBetStatData", search); + } + + @Override + public List> getBottomBetStatList(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBottomBetStatList", search); + } + + @Override + public HashMap getBottomBetStatSum(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBottomBetStatSum", search); + } + + @Override + public List> getDailyBetList(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDailyBetList", search); + } + + @Override + public HashMap getDailyBetSum(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getDailyBetSum", search); + } + + @Override + public List> getDailyUserList(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDailyUserList", search); + } + + @Override + public HashMap getDailyUserSum(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getDailyUserSum", search); + } + + @Override + public List> getDailyPartnerList(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDailyPartnerList", search); + } + + @Override + public int getBotCnt(Member searchBot) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBotCnt", searchBot); + } + +} diff --git a/src/main/java/com/bb/dao/SuperDao.java b/src/main/java/com/bb/dao/SuperDao.java new file mode 100644 index 0000000..adba49f --- /dev/null +++ b/src/main/java/com/bb/dao/SuperDao.java @@ -0,0 +1,18 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.MemberListSearch; +import com.bb.model.SiteSearch; + + +public interface SuperDao { + + int getCompanyListCnt(@Valid MemberListSearch search); + + List getCompanyList(@Valid MemberListSearch search); + +} diff --git a/src/main/java/com/bb/dao/SuperDaoImpl.java b/src/main/java/com/bb/dao/SuperDaoImpl.java new file mode 100644 index 0000000..fe44fc2 --- /dev/null +++ b/src/main/java/com/bb/dao/SuperDaoImpl.java @@ -0,0 +1,38 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.MemberListSearch; +import com.bb.model.SiteSearch; + +@Repository("superDao") +public class SuperDaoImpl implements SuperDao{ + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + @Override + public int getCompanyListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getCompanyListCnt",search ); + } + + @Override + public List getCompanyList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCompanyList",search ); + } +} diff --git a/src/main/java/com/bb/dao/UserDao.java b/src/main/java/com/bb/dao/UserDao.java new file mode 100644 index 0000000..e3d5459 --- /dev/null +++ b/src/main/java/com/bb/dao/UserDao.java @@ -0,0 +1,217 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import com.bb.model.AdminTokenInfo; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.BlankSpinRate; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.CodeSearch; +import com.bb.model.CompResetInfo; +import com.bb.model.DashInfo; +import com.bb.model.GameUseInfo; +import com.bb.model.GraphInfo; +import com.bb.model.IdListSearch; +import com.bb.model.LoginUserVO; +import com.bb.model.MemListSearchVO; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberHierarchyVo; +import com.bb.model.MemberInsert; +import com.bb.model.MemberInsert2; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberSearch; +import com.bb.model.MemberStatus; +import com.bb.model.MemberTokenInfo; +import com.bb.model.MemberUpdate; +import com.bb.model.Month10Info; +import com.bb.model.MultipleRate; +import com.bb.model.MultipleRateInfo; +import com.bb.model.NewMemRateItem; +import com.bb.model.Site; +import com.bb.model.SiteSearch; +import com.bb.model.Top15Info; +import com.bb.model.TreeListSearch; +import com.bb.model.TripleAuthInfo; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; + +public interface UserDao { + + Member login(MemberSearch param); + Site getSiteInfoByKey(String reqKey); + Site swaggerlogin(HashMap param); + HashMap adminLogin(SiteSearch search); + int insertMember(@Valid Member signupMember); + void insertDividendRateType(@Valid Member signupMember); + void insertMemCommssion(@Valid Member signupMember); + void insertMemBetLimit(@Valid Member signupMember); + void insertMemBurdenRate(@Valid Member signupMember); + MemberDetail getMember(Member member); + void updateStatus(@Valid MemberStatus status); + List getMemberRate(Member search); + List getMemberRateByNormal(Member search); + int insertSiteInfo(@Valid MemberInsert signupMember); + List getMemTreeList(@Valid TreeListSearch search); + HashMap getHeadCashInfo(HashMap param); + void memberRateUpdate(HashMap param); + void updateAllBottomRate(HashMap param); + int idCheck(@Valid Member signupMember); + int idCheckByAdmin(@Valid Member signupMember); + int nameCheck(@Valid Member signupMember); + int phoneCheck(@Valid Member signupMember); + int accCheck(@Valid Member signupMember); + Site getSiteInfo(String siteId); + + HashMap getMemberDetail_1(Member search); + HashMap getMemberDetail_2(Member search); + HashMap getMemberDetail_3(Member search); + void updateMember(MemberUpdate signupMember); + void memberRateBetYn(HashMap param); + int adminJoin(@Valid MemberInsert signupMember); + int adminJoin2(MemberInsert2 signupMember); + int insertCompany(@Valid MemberInsert signupMember); + HashMap getMemberListCnt(@Valid MemberListSearch search); + List getMemberList(@Valid MemberListSearch search); + int getMemStatusListCnt(@Valid MemberListSearch search); + List getMemStatusList(@Valid MemberListSearch search); + int getMemLogListCnt(@Valid MemberListSearch search); + List getMemLogList(@Valid MemberListSearch search); + int getMemLoginListCnt(MemberListSearch search); + List getMemLoginList(MemberListSearch search); + int getIpListCnt(@Valid MemberListSearch search); + List getIpList(@Valid MemberListSearch search); + void recUpdate(@Valid MemberListSearch signupMember); + void recUpdateFlow(@Valid MemberListSearch signupMember); + void updateOutAmtYn(@Valid MemberStatus status); + List getMemInfo(HashMap ti); + void gameUseUpdate(@Valid GameUseInfo gui); + List gameUseList(@Valid GameUseInfo gui); + void updatePwd(@Valid Site site); + void updateMemPwd(@Valid Site site); + int getDeniedIpCheck(HashMap param); + int getDeniedPhoneCheck(@Valid Member signupMember); + int getDeniedAccCheck(@Valid Member signupMember); + void updateAdminPwd(@Valid Site site); + List> getAdminIpList(Map ipParam); + List miniGameInfo(HashMap ti); + HashMap adminSuperLogin(SiteSearch search); + List getMemberFlowList(HashMap memberDetail); + List getPartnerFlowList(HashMap memberDetail); + HashMap getSuperHeadCashInfo(); + + int getIdListCnt(IdListSearch search); + List getIdList(IdListSearch search); + + List getBISubPointRate(Member search); + MemberDetail getMemByTriple(Member search); + int insertTripleAuthInfo(TripleAuthInfo user); + int updateMemCash(MemberDetail memberVo); + int adminCheck(String adminId); + int updateMemListIcon(@Valid MemberUpdate memberVO); + int resetPassword(Member memberVO); + List getTopUserList(Member search); + List> getTopUserList2(Member search); + ApiVendorCompInfo getApiVendorCompInfo(HashMap param); + ApiVendorCompInfo getApiVendorCompInfoByCron(HashMap param); + int insertBaseRcmdUser(MemberInsert baseRcmdUser); + String getBaseRecommenderId(Member search); + Long getUserTimeout(Member searchMem); + int updateUserTimeout(Member searchMem); + int getMemRollingListCnt(MemberListSearch search); + List getMemRollingList(MemberListSearch search); + List getPartnerMemIds(Member searchMem); + HashMap getPartnerMemId(Member searchMem); + List getPartnerLevels(CodeSearch codesSearch); + String getPartnerLevelByRecId(@Valid MemberInsert signupMember); + List getPartnerBotUserList(Member search); + List getPartnerRateList(MemberSearch search); + HashMap getPartnerMemberDetail(Member search); + void updateBlankSpinRate(@Valid BlankSpinRate rate); + void updateAllBlankSpinRate(@Valid BlankSpinRate rate); + int insertAdminHeadInfo(@Valid MemberInsert signupMember); + Integer getCheckMemberToken(MemberTokenInfo param); + Integer getCheckAdminToken(AdminTokenInfo param); + HashMap getNewMsgInfo(Member member); + HashMap getUserGameInfo(HashMap param); + HashMap getLastGameInfo(Member searchMem); + HashMap getLastGameInfoNew(HashMap logParam); + HashMap getHeadTopInfo(HashMap param); + HashMap getLastGameInfoNoLimit(Member searchMem); + HashMap getPartnerLevelUpInfo(MemberDetail targetUser); + void updatePartnerLevel(HashMap user); + HashMap getUserCashAmt(MemberSearch param); + TripleAuthInfo getTripleAuthInfo(Member search); + HashMap getMemberMap(Member search); +// HashMap getMemBetInfo(TripleVO tripleVO); + int getLoginTryCount(MemberSearch search); + void setLoginLock(MemberSearch search); + HashMap getMemChargingPointInfo(HashMap pointParam); + void updateFstChrgByJoinFlag(HashMap param); + HashMap getBonusSettingInfo(HashMap param); + int userChangeFlag(HashMap flagParam); + int bonusSettingSave(ChargingPointSettingVO settingVO); + int checkSitePrefix(String sitePrefix); + int getNormalRetailCnt(Member user); + int userChangeSymLock(HashMap lockParam); + int setUserLock(HashMap lockParam); + double getUserMinPR(HashMap minParam); + List> getUserHierarchyList(MemberHierarchyVo search); + int checkMyBottom(HashMap searchMap); + List getMultipleRateList(MultipleRateInfo param); + int updateMyMultipleRate(HashMap updParam); + int updateTopMultipleMinRate(HashMap updParam); + int updateBottomMultipleMaxRate(HashMap updParam); + List getMemRateItemList(NewMemRateItem rateItem); + NewMemRateItem getMemRateItem(@Valid NewMemRateItem rateItem); + int updateMyRate(HashMap updParam); + int updateTopMinRate(HashMap updParam); + int updateBottomMaxRate(HashMap updParam); + int updateCashOutFlag(HashMap flagParam); + HashMap getMemberMap2(Member search); + List getDashInfoInfo(HashMap param); + List getGraphInfo(HashMap param); + int updLoginFailCnt(Member member); + String getLoginUserBetData(MemberListSearch search); + LoginUserVO getLoginUserReportData(MemberListSearch search); + int getMemberTreeListCnt(MemListSearchVO search); + List getMemberTreeList(MemListSearchVO search); + List getUserTreeHierarchy(MemListSearchVO search); + int settingCashInOut(HashMap param); + List getIpDetailList(MemberListSearch search); + HashMap getTotalInfo(Member param); + int updateMemCashByAmount(HashMap cashParam); + HashMap getMemBankInfo(HashMap param); + int resetUserLock(HashMap lockParam); + List getTop15Info(HashMap paramMap); + Month10Info getMonth10Info(String siteId); + List> delCheckMemList(CompResetInfo compResetInfo); + int deleteUsers(CompResetInfo compResetInfo); + int updateAdminHeadInfo(CompResetInfo compResetInfo); + int updMemPhone(HashMap param); + HashMap getTotalBalance(Member search2); + List> getCountInfo(Member search2); + int getLowerUserListCnt(UserListSearch search); + List> getLowerUserList(UserListSearch search); + List> getLoginUserList(UserSearch search); + int getPlayGameListCnt(UserListSearch search); + List> getPlayGameList(UserListSearch search); + int getDetailBetListCnt(UserListSearch search); + List> getDetailBetList(UserListSearch search); + int getDetailBetListNewCnt(UserListSearch search); + List> getDetailBetListNew(UserListSearch search); + int getTotalChangePointAmt(Member search); + TripleAuthInfo getTripleAuthInfo2(Member user); + int getIsMyBottomCnt(Member search); + List> getPassAllResetList(String siteId); + HashMap getSiteCashBonusInfo(HashMap param); + List> getSiteCashBonusList(long siteIdx); + MemberDetail getMemByRvHoldem(Member searchMem); + int insertRvHoldemAuthInfo(HashMap userMap); + HashMap getRvHoldemCheckInfo(String uid); + +} diff --git a/src/main/java/com/bb/dao/UserDaoImpl.java b/src/main/java/com/bb/dao/UserDaoImpl.java new file mode 100644 index 0000000..ea90179 --- /dev/null +++ b/src/main/java/com/bb/dao/UserDaoImpl.java @@ -0,0 +1,1226 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.bb.model.AdminTokenInfo; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.BlankSpinRate; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.CodeSearch; +import com.bb.model.CompResetInfo; +import com.bb.model.DashInfo; +import com.bb.model.GameUseInfo; +import com.bb.model.GraphInfo; +import com.bb.model.IdListSearch; +import com.bb.model.LoginUserVO; +import com.bb.model.MemListSearchVO; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberHierarchyVo; +import com.bb.model.MemberInsert; +import com.bb.model.MemberInsert2; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberSearch; +import com.bb.model.MemberStatus; +import com.bb.model.MemberTokenInfo; +import com.bb.model.MemberUpdate; +import com.bb.model.Month10Info; +import com.bb.model.MultipleRate; +import com.bb.model.MultipleRateInfo; +import com.bb.model.NewMemRateItem; +import com.bb.model.Site; +import com.bb.model.SiteSearch; +import com.bb.model.Top15Info; +import com.bb.model.TreeListSearch; +import com.bb.model.TripleAuthInfo; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; + + +@Repository("userDao") +public class UserDaoImpl implements UserDao { + + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + + @Override + public Site swaggerlogin(HashMap param) { + return sqlSession.selectOne("swaggerlogin", param); + } + + + @Override + public Site getSiteInfoByKey(String reqKey) { + return sqlSessionSub.selectOne("getSiteInfoByKey", reqKey); + } + + + @Override + public Member login(MemberSearch param) { + return sqlSessionSub.selectOne("login", param); + } + + + @Override + public HashMap adminLogin(SiteSearch search) { + return sqlSessionSub.selectOne("adminLogin", search); + } + + + @Override + public int insertMember(@Valid Member signupMember) { + return sqlSession.insert("insertMember", signupMember); + + } + + + @Override + public void insertDividendRateType(@Valid Member signupMember) { + // TODO Auto-generated method stub + sqlSession.insert("insertDividendRateType", signupMember); + } + + + @Override + public void insertMemCommssion(@Valid Member signupMember) { + // TODO Auto-generated method stub + sqlSession.insert("insertMemCommssion", signupMember); + } + + + @Override + public void insertMemBetLimit(@Valid Member signupMember) { + // TODO Auto-generated method stub + sqlSession.insert("insertMemBetLimit", signupMember); + } + + + @Override + public void insertMemBurdenRate(@Valid Member signupMember) { + // TODO Auto-generated method stub + sqlSession.insert("insertMemBurdenRate", signupMember); + } + + + @Override + public MemberDetail getMember(Member member) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMember", member); + } + + + @Override + public void updateStatus(@Valid MemberStatus status) { + // TODO Auto-generated method stub + sqlSession.update("memUpdateStatus", status); + } + + + @Override + public List getMemberRate(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemberRate", search); + } + + @Override + public List getMemberRateByNormal(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemberRateByNormal", search); + } + + + @Override + public int insertSiteInfo(@Valid MemberInsert signupMember) { + // TODO Auto-generated method stub + return sqlSession.insert("insertSiteInfo", signupMember); + } + + + @Override + public List getMemTreeList(@Valid TreeListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemTreeList", search); + } + + + @Override + public HashMap getHeadCashInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getHeadCashInfo", param); + } + + + @Override + public void memberRateUpdate(HashMap param) { + // TODO Auto-generated method stub + sqlSession.update("memberRateUpdate", param); + } + + + @Override + public void updateAllBottomRate(HashMap param) { + // TODO Auto-generated method stub + sqlSession.update("updateAllBottomRate", param); + } + + + @Override + public int idCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return sqlSession.selectOne("idCheck", signupMember); + } + + + @Override + public int idCheckByAdmin(@Valid Member signupMember) { + // TODO Auto-generated method stub + return sqlSession.selectOne("idCheckByAdmin", signupMember); + } + + + @Override + public int nameCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return sqlSession.selectOne("nameCheck", signupMember); + } + + + @Override + public int phoneCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return sqlSession.selectOne("phoneCheck", signupMember); + } + + + @Override + public int accCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return sqlSession.selectOne("accCheck", signupMember); + } + + + @Override + public Site getSiteInfo(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteInfo", siteId); + } + + + @Override + public HashMap getMemberDetail_1(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemberDetail_1", search); + } + + + @Override + public HashMap getMemberDetail_2(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemberDetail_2", search); + } + + + @Override + public HashMap getMemberDetail_3(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemberDetail_3", search); + } + + + @Override + public void updateMember(MemberUpdate signupMember) { + sqlSession.update("updateMember", signupMember); + + } + + + @Override + public void memberRateBetYn(HashMap param) { + // TODO Auto-generated method stub + sqlSession.update("memberRateBetYn", param); + } + + + @Override + public int adminJoin(@Valid MemberInsert signupMember) { + // TODO Auto-generated method stub + return sqlSession.insert("adminJoin", signupMember); + } + + + @Override + public int adminJoin2(MemberInsert2 signupMember) { + // TODO Auto-generated method stub + return sqlSession.insert("adminJoin2", signupMember); + } + + + @Override + public HashMap getMemberListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemberListCnt", search); + } + + + @Override + public List getMemberList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemberList", search); + } + + + @Override + public int getMemStatusListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemStatusListCnt", search); + } + + + @Override + public List getMemStatusList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemStatusList", search); + } + + + @Override + public int getMemLogListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemLogListCnt", search); + } + + + @Override + public List getMemLogList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemLogList", search); + } + + + @Override + public int getMemLoginListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemLoginListCnt", search); + } + + + @Override + public List getMemLoginList(MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemLoginList", search); + } + + + @Override + public int getIpListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stubgetIpListCnt + return sqlSessionSub.selectOne("getIpListCnt", search); + } + + + @Override + public List getIpList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getIpList", search); + } + + + @Override + public void recUpdate(@Valid MemberListSearch signupMember) { + // TODO Auto-generated method stub + sqlSession.update("recUpdate", signupMember); + } + + + @Override + public void recUpdateFlow(@Valid MemberListSearch signupMember) { + // TODO Auto-generated method stub + sqlSession.delete("recdel", signupMember); + sqlSession.update("recUpdateFlow", signupMember); + } + + + @Override + public void updateOutAmtYn(@Valid MemberStatus status) { + // TODO Auto-generated method stub + sqlSession.update("updateOutAmtYn", status); + } + + + @Override + public List getMemInfo(HashMap ti) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemInfo", ti); + } + + + @Override + public void gameUseUpdate(@Valid GameUseInfo gui) { + sqlSession.update("gameUseUpdate", gui); + + } + + + @Override + public List gameUseList(@Valid GameUseInfo gui) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("gameUseList", gui); + } + + + @Override + public int insertCompany(@Valid MemberInsert signupMember) { + // TODO Auto-generated method stub + return sqlSession.insert("insertCompany", signupMember); + } + + + @Override + public void updatePwd(@Valid Site site) { + // TODO Auto-generated method stub + sqlSession.update("updatePwd", site); + } + + + @Override + public void updateMemPwd(@Valid Site site) { + // TODO Auto-generated method stub + sqlSession.update("updateMemPwd", site); + } + + + @Override + public int getDeniedIpCheck(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getDeniedIpCheck", param); + } + + + @Override + public int getDeniedPhoneCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getDeniedPhoneCheck", signupMember); + } + + + @Override + public int getDeniedAccCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getDeniedAccCheck", signupMember); + } + + + @Override + public void updateAdminPwd(@Valid Site site) { + // TODO Auto-generated method stub + sqlSession.update("updateAdminPwd", site); + } + + + @Override + public List> getAdminIpList(Map ipParam) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getAdminIpList", ipParam); + } + + + @Override + public List miniGameInfo(HashMap ti) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("miniGameInfo", ti); + } + + + @Override + public HashMap adminSuperLogin(SiteSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("adminSuperLogin", search); + } + + + @Override + public List getMemberFlowList(HashMap memberDetail) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemberFlowList", memberDetail); + } + + + @Override + public List getPartnerFlowList(HashMap memberDetail) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPartnerFlowList", memberDetail); + } + + + @Override + public HashMap getSuperHeadCashInfo() { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSuperHeadCashInfo", null); + } + + + @Override + public int getIdListCnt(IdListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getIdListCnt", search); + } + + + @Override + public List getIdList(IdListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getIdList", search); + } + + + @Override + public List getBISubPointRate(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getBISubPointRate", search); + } + + + @Override + public MemberDetail getMemByTriple(Member search) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getMemByTriple", search); + } + + + @Override + public int insertTripleAuthInfo(TripleAuthInfo user) { + // TODO Auto-generated method stub + return sqlSession.insert("insertTripleAuthInfo", user); + } + + + @Override + public int updateMemCash(MemberDetail memberVo) { + // TODO Auto-generated method stub + return sqlSession.update("updateMemCash", memberVo); + } + + + @Override + public int adminCheck(String adminId) { + // TODO Auto-generated method stub + return sqlSession.selectOne("adminCheck", adminId); + } + + + @Override + public int updateMemListIcon(@Valid MemberUpdate memberVO) { + // TODO Auto-generated method stub + return sqlSession.update("updateMemListIcon", memberVO); + } + + + @Override + public int resetPassword(Member memberVO) { + // TODO Auto-generated method stub + return sqlSession.update("resetPassword", memberVO); + } + + + @Override + public List getTopUserList(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getTopUserList", search); + } + + @Override + public List> getTopUserList2(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getTopUserList2", search); + } + + + @Override + public ApiVendorCompInfo getApiVendorCompInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getApiVendorCompInfo", param); + } + + + @Override + public ApiVendorCompInfo getApiVendorCompInfoByCron(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getApiVendorCompInfoByCron", param); + } + + + @Override + public int insertBaseRcmdUser(MemberInsert baseRcmdUser) { + // TODO Auto-generated method stub + return sqlSession.insert("insertBaseRcmdUser", baseRcmdUser); + } + + + @Override + public String getBaseRecommenderId(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBaseRecommenderId", search); + } + + + @Override + public Long getUserTimeout(Member searchMem) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getUserTimeout", searchMem); + } + + + @Override + public int updateUserTimeout(Member searchMem) { + // TODO Auto-generated method stub + return sqlSession.update("updateUserTimeout", searchMem); + } + + + @Override + public int getMemRollingListCnt(MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemRollingListCnt", search); + } + + + @Override + public List getMemRollingList(MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemRollingList", search); + } + + + @Override + public List getPartnerMemIds(Member searchMem) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPartnerMemIds", searchMem); + } + + + @Override + public HashMap getPartnerMemId(Member searchMem) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPartnerMemId", searchMem); + } + + + @Override + public List getPartnerLevels(CodeSearch codesSearch) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPartnerLevels", codesSearch); + } + + + @Override + public String getPartnerLevelByRecId(@Valid MemberInsert signupMember) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPartnerLevelByRecId", signupMember); + } + + + @Override + public List getPartnerBotUserList(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPartnerBotUserList", search); + } + + + @Override + public List getPartnerRateList(MemberSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPartnerRateList", search); + } + + + @Override + public HashMap getPartnerMemberDetail(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPartnerMemberDetail", search); + } + + + @Override + public void updateBlankSpinRate(@Valid BlankSpinRate rate) { + // TODO Auto-generated method stub + sqlSession.update("updateBlankSpinRate", rate); + } + + + @Override + public void updateAllBlankSpinRate(@Valid BlankSpinRate rate) { + // TODO Auto-generated method stub + sqlSession.update("updateAllBlankSpinRate", rate); + } + + + @Override + public int insertAdminHeadInfo(@Valid MemberInsert signupMember) { + // TODO Auto-generated method stub + return sqlSession.insert("insertAdminHeadInfo", signupMember); + } + + + @Override + public Integer getCheckMemberToken(MemberTokenInfo param) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCheckMemberToken", param); + } + + + @Override + public Integer getCheckAdminToken(AdminTokenInfo param) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getCheckAdminToken", param); + } + + + @Override + public HashMap getNewMsgInfo(Member member) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getNewMsgInfo", member); + } + + + @Override + public HashMap getUserGameInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getUserGameInfo", param); + } + + + @Override + public HashMap getLastGameInfo(Member searchMem) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getLastGameInfo", searchMem); + } + + + @Override + public HashMap getLastGameInfoNew(HashMap logParam) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getLastGameInfoNew", logParam); + } + + + @Override + public HashMap getHeadTopInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getHeadTopInfo", param); + } + + + @Override + public HashMap getLastGameInfoNoLimit(Member searchMem) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getLastGameInfoNoLimit", searchMem); + } + + + @Override + public HashMap getPartnerLevelUpInfo(MemberDetail targetUser) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPartnerLevelUpInfo", targetUser); + } + + + @Override + public void updatePartnerLevel(HashMap user) { + // TODO Auto-generated method stub + sqlSession.update("updatePartnerLevel", user); + } + + + @Override + public HashMap getUserCashAmt(MemberSearch param) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getUserCashAmt", param); + } + + + @Override + public TripleAuthInfo getTripleAuthInfo(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getTripleAuthInfo", search); + } + + + @Override + public HashMap getMemberMap(Member search) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getMemberMap", search); + } + + @Override + public HashMap getMemberMap2(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemberMap2", search); + } + + /* + @Override + public HashMap getMemBetInfo(TripleVO tripleVO) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemBetInfo", tripleVO); + } + */ + + @Override + public int getLoginTryCount(MemberSearch search) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getLoginTryCount", search); + } + + + @Override + public void setLoginLock(MemberSearch search) { + // TODO Auto-generated method stub + sqlSession.update("setLoginLock", search); + } + + + @Override + public HashMap getMemChargingPointInfo(HashMap pointParam) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemChargingPointInfo", pointParam); + } + + + @Override + public void updateFstChrgByJoinFlag(HashMap param) { + // TODO Auto-generated method stub + sqlSession.update("updateFstChrgByJoinFlag", param); + } + + + @Override + public HashMap getBonusSettingInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getBonusSettingInfo", param); + } + + + @Override + public int userChangeFlag(HashMap flagParam) { + // TODO Auto-generated method stub + return sqlSession.update("userChangeFlag", flagParam); + } + + + @Override + public int bonusSettingSave(ChargingPointSettingVO settingVO) { + // TODO Auto-generated method stub + return sqlSession.update("bonusSettingSave", settingVO); + } + + + @Override + public int checkSitePrefix(String sitePrefix) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("checkSitePrefix", sitePrefix); + } + + + @Override + public int getNormalRetailCnt(Member user) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getNormalRetailCnt", user); + } + + + @Override + public int userChangeSymLock(HashMap lockParam) { + // TODO Auto-generated method stub + return sqlSession.update("userChangeSymLock", lockParam); + } + + + @Override + public int setUserLock(HashMap lockParam) { + // TODO Auto-generated method stub + return sqlSession.update("setUserLock", lockParam); + } + + + @Override + public double getUserMinPR(HashMap minParam) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getUserMinPR", minParam); + } + + + @Override + public List> getUserHierarchyList(MemberHierarchyVo search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getUserHierarchyList", search); + } + + + @Override + public int checkMyBottom(HashMap searchMap) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("checkMyBottom", searchMap); + } + + + @Override + public List getMultipleRateList(MultipleRateInfo param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMultipleRateList", param); + } + + + @Override + public int updateMyMultipleRate(HashMap updParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateMyMultipleRate", updParam); + } + + + @Override + public int updateTopMultipleMinRate(HashMap updParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateTopMultipleMinRate", updParam); + } + + + @Override + public int updateBottomMultipleMaxRate(HashMap updParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateBottomMultipleMaxRate", updParam); + } + + + @Override + public List getMemRateItemList(NewMemRateItem rateItem) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemRateItemList", rateItem); + } + + @Override + public NewMemRateItem getMemRateItem(@Valid NewMemRateItem rateItem) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemRateItem", rateItem); + } + + @Override + public int updateMyRate(HashMap updParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateMyRate", updParam); + } + + @Override + public int updateTopMinRate(HashMap updParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateTopMinRate", updParam); + } + + @Override + public int updateBottomMaxRate(HashMap updParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateBottomMaxRate", updParam); + } + + + @Override + public int updateCashOutFlag(HashMap flagParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateCashOutFlag", flagParam); + } + + + @Override + public List getDashInfoInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDashInfoInfo", param); + } + + + @Override + public List getGraphInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getGraphInfo", param); + } + + + @Override + public int updLoginFailCnt(Member member) { + // TODO Auto-generated method stub + return sqlSession.update("updLoginFailCnt", member); + } + + + @Override + public String getLoginUserBetData(MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getLoginUserBetData", search); + } + + + @Override + public LoginUserVO getLoginUserReportData(MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getLoginUserReportData", search); + } + + + @Override + public int getMemberTreeListCnt(MemListSearchVO search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemberTreeListCnt", search); + } + + + @Override + public List getMemberTreeList(MemListSearchVO search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getMemberTreeList", search); + } + + + @Override + public List getUserTreeHierarchy(MemListSearchVO search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getUserTreeHierarchy", search); + } + + + @Override + public int settingCashInOut(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("settingCashInOut", param); + } + + + @Override + public List getIpDetailList(MemberListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getIpDetailList", search); + } + + + @Override + public HashMap getTotalInfo(Member param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getTotalInfo", param); + } + + + @Override + public int updateMemCashByAmount(HashMap cashParam) { + // TODO Auto-generated method stub + return sqlSession.update("updateMemCashByAmount", cashParam); + } + + + @Override + public HashMap getMemBankInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMemBankInfo", param); + } + + + @Override + public int resetUserLock(HashMap lockParam) { + // TODO Auto-generated method stub + return sqlSession.update("resetUserLock", lockParam); + } + + + @Override + public List getTop15Info(HashMap paramMap) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getTop15Info", paramMap); + } + + + @Override + public Month10Info getMonth10Info(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getMonth10Info", siteId); + } + + + @Override + public List> delCheckMemList(CompResetInfo compResetInfo) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("delCheckMemList", compResetInfo); + } + + + @Override + public int deleteUsers(CompResetInfo compResetInfo) { + // TODO Auto-generated method stub + return sqlSession.delete("deleteUsers", compResetInfo); + } + + + @Override + public int updateAdminHeadInfo(CompResetInfo compResetInfo) { + // TODO Auto-generated method stub + return sqlSession.update("updateAdminHeadInfo", compResetInfo); + } + + + @Override + public int updMemPhone(HashMap param) { + // TODO Auto-generated method stub + return sqlSession.update("updMemPhone", param); + } + + + @Override + public HashMap getTotalBalance(Member search2) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getTotalBalance", search2); + } + + + @Override + public List> getCountInfo(Member search2) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getCountInfo", search2); + } + + + @Override + public int getLowerUserListCnt(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getLowerUserListCnt", search); + } + + + @Override + public List> getLowerUserList(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getLowerUserList", search); + } + + + @Override + public List> getLoginUserList(UserSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getLoginUserList", search); + } + + + @Override + public int getPlayGameListCnt(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getPlayGameListCnt", search); + } + + + @Override + public List> getPlayGameList(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPlayGameList", search); + } + + + @Override + public int getDetailBetListCnt(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getDetailBetListCnt", search); + } + + + @Override + public List> getDetailBetList(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDetailBetList", search); + } + + + @Override + public int getDetailBetListNewCnt(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getDetailBetListNewCnt", search); + } + + + @Override + public List> getDetailBetListNew(UserListSearch search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getDetailBetListNew", search); + } + + + @Override + public int getTotalChangePointAmt(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getTotalChangePointAmt", search); + } + + + @Override + public TripleAuthInfo getTripleAuthInfo2(Member user) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getTripleAuthInfo2", user); + } + + + @Override + public int getIsMyBottomCnt(Member search) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getIsMyBottomCnt", search); + } + + + @Override + public List> getPassAllResetList(String siteId) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getPassAllResetList", siteId); + } + + + @Override + public HashMap getSiteCashBonusInfo(HashMap param) { + // TODO Auto-generated method stub + return sqlSessionSub.selectOne("getSiteCashBonusInfo", param); + } + + + @Override + public List> getSiteCashBonusList(long siteIdx) { + // TODO Auto-generated method stub + return sqlSessionSub.selectList("getSiteCashBonusList", siteIdx); + } + + + @Override + public MemberDetail getMemByRvHoldem(Member searchMem) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getMemByRvHoldem", searchMem); + } + + + @Override + public int insertRvHoldemAuthInfo(HashMap userMap) { + // TODO Auto-generated method stub + return sqlSession.insert("insertRvHoldemAuthInfo", userMap); + } + + + @Override + public HashMap getRvHoldemCheckInfo(String uid) { + // TODO Auto-generated method stub + return sqlSession.selectOne("getRvHoldemCheckInfo", uid); + } +} diff --git a/src/main/java/com/bb/dao/VendorDao.java b/src/main/java/com/bb/dao/VendorDao.java new file mode 100644 index 0000000..dc2111b --- /dev/null +++ b/src/main/java/com/bb/dao/VendorDao.java @@ -0,0 +1,20 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +public interface VendorDao { + + List> getNexusSkinInfo(HashMap siteParam); + + List> getNexusSkinList(HashMap vendorInfo); + + HashMap getNexusSkin(HashMap skinInfo); + + int nexusSkinUpdate(HashMap skinInfo); + + int updateTripleCredit(HashMap siteInfo); + + int updateTriplePoint(HashMap siteInfo); + +} diff --git a/src/main/java/com/bb/dao/VendorDaoImpl.java b/src/main/java/com/bb/dao/VendorDaoImpl.java new file mode 100644 index 0000000..2997736 --- /dev/null +++ b/src/main/java/com/bb/dao/VendorDaoImpl.java @@ -0,0 +1,63 @@ +package com.bb.dao; + +import java.util.HashMap; +import java.util.List; + +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +@Repository("vendorDao") +public class VendorDaoImpl implements VendorDao { + + /** 메인DB 연결 */ + @Autowired @Qualifier("sqlSessionMain") + protected SqlSession sqlSession; + + /** 서브DB 연결 */ + @Autowired @Qualifier("sqlSessionSub") + protected SqlSession sqlSessionSub; + + /** 트리플DB 연결 */ + @Autowired @Qualifier("sqlSessionTriple") + protected SqlSession sqlSessionTriple; + + @Override + public List> getNexusSkinInfo(HashMap siteParam) { + // TODO Auto-generated method stub + return sqlSessionTriple.selectList("getNexusSkinInfo", siteParam); + } + + @Override + public List> getNexusSkinList(HashMap vendorInfo) { + // TODO Auto-generated method stub + return sqlSessionTriple.selectList("getNexusSkinList", vendorInfo); + } + + @Override + public HashMap getNexusSkin(HashMap skinInfo) { + // TODO Auto-generated method stub + return sqlSessionTriple.selectOne("getNexusSkin", skinInfo); + } + + @Override + public int nexusSkinUpdate(HashMap skinInfo) { + // TODO Auto-generated method stub + return sqlSessionTriple.update("nexusSkinUpdate", skinInfo); + } + + @Override + public int updateTripleCredit(HashMap siteInfo) { + // TODO Auto-generated method stub + return sqlSessionTriple.update("updateTripleCredit", siteInfo); + } + + @Override + public int updateTriplePoint(HashMap siteInfo) { + // TODO Auto-generated method stub + return sqlSessionTriple.update("updateTriplePoint", siteInfo); + } + + +} diff --git a/src/main/java/com/bb/exception/ApiException.java b/src/main/java/com/bb/exception/ApiException.java new file mode 100644 index 0000000..b33d59f --- /dev/null +++ b/src/main/java/com/bb/exception/ApiException.java @@ -0,0 +1,37 @@ +package com.bb.exception; + +import com.bb.model.ApiResponse; + +/** + * @FileName : ApiException + * @Project : skhappy + * @Date : 2019. 04. 10. + * @Author : pulip + * @Description : + */ +public class ApiException extends Exception { + protected ApiResponse apiResponse; + + public ApiException() { + this("E001", "오류가 발생하였습니다."); + } + + public ApiException(String message) { + this("E001", message); + } + + /*public ApiException(ApiResponse apiResponse) { + this(apiResponse, "오류가 발생하였습니다."); + }*/ + + public ApiException(String resultCode, String message) { + this.apiResponse = new ApiResponse(); + + this.apiResponse.setResultCode(resultCode); + this.apiResponse.setResultMessage(message); + } + + public ApiResponse getApiResponse() { + return this.apiResponse; + } +} diff --git a/src/main/java/com/bb/exception/NoDataApiException.java b/src/main/java/com/bb/exception/NoDataApiException.java new file mode 100644 index 0000000..a104a98 --- /dev/null +++ b/src/main/java/com/bb/exception/NoDataApiException.java @@ -0,0 +1,9 @@ +package com.bb.exception; + + + +public class NoDataApiException extends ApiException { + public NoDataApiException() { + super("9004", "조회된 데이터가 없습니다."); + } +} diff --git a/src/main/java/com/bb/exception/RequestArraySizeApiException.java b/src/main/java/com/bb/exception/RequestArraySizeApiException.java new file mode 100644 index 0000000..faef2c4 --- /dev/null +++ b/src/main/java/com/bb/exception/RequestArraySizeApiException.java @@ -0,0 +1,10 @@ +package com.bb.exception; + + + + +public class RequestArraySizeApiException extends ApiException { + public RequestArraySizeApiException(String parameterName) { + super("9003", "요청 배열 파라미터 크기에 오류가 있습니다. : " + parameterName); + } +} diff --git a/src/main/java/com/bb/exception/RequestHeaderApiException.java b/src/main/java/com/bb/exception/RequestHeaderApiException.java new file mode 100644 index 0000000..f6e7a62 --- /dev/null +++ b/src/main/java/com/bb/exception/RequestHeaderApiException.java @@ -0,0 +1,9 @@ +package com.bb.exception; + + + +public class RequestHeaderApiException extends ApiException { + public RequestHeaderApiException(String headerName) { + super("9001", "요청 헤더정보가 없습니다 : " + headerName); + } +} diff --git a/src/main/java/com/bb/exception/RequestParameterApiException.java b/src/main/java/com/bb/exception/RequestParameterApiException.java new file mode 100644 index 0000000..ed816c0 --- /dev/null +++ b/src/main/java/com/bb/exception/RequestParameterApiException.java @@ -0,0 +1,8 @@ +package com.bb.exception; + + +public class RequestParameterApiException extends ApiException { + public RequestParameterApiException(String parameterName) { + super("9002", "필수 요청 파라미터가 없습니다. : " + parameterName); + } +} diff --git a/src/main/java/com/bb/front/ApiBetController.java b/src/main/java/com/bb/front/ApiBetController.java new file mode 100644 index 0000000..2050360 --- /dev/null +++ b/src/main/java/com/bb/front/ApiBetController.java @@ -0,0 +1,404 @@ +package com.bb.front; + +import java.net.SocketTimeoutException; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.HashMap; +import java.util.List; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.BetSearch; +import com.bb.model.BetSplusSearch; +import com.bb.model.PageFormVO; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.service.BetService; +import com.bb.service.CommonService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.PagingUtil; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + + +@RestController +@Slf4j +@RequestMapping("/api/bet") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiBetController { + + private final UserService userService; + + private final CommonService commonService; + + private final BetService betService; + + private final TripleService tripleService; + + private final JwtManager jwtManager; + + private static final long serialVersionUID = 1L; + private static NumberFormat formatter = new DecimalFormat("#0.00"); + + @ResponseBody + @PostMapping(value="/sportBetlist") + public ApiResponse sportBetlist( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSplusSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getSportBetListCnt(search); // Use blankSpinSetType + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List betList = betService.getSportBetList(search); // Use blankSpinSetType + + apiResponse.put("list", betList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/betlist") + public ApiResponse betlist( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getUserBetListCnt(search); // Use blankSpinSetType + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List betList = betService.getUserBetList(search); // Use blankSpinSetType + System.out.println("betList" + betList.size()); + apiResponse.put("list", betList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/betlistNew") + public ApiResponse betlistNew( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + final String LOG_PREFIX = "#-USER::betlist::"+tokenInfo.getSid()+":::"; + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getUserBetListNewCnt(search); // Use blankSpinSetType + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + List betList = betService.getUserBetListNew(search); // Use blankSpinSetType + System.out.println("betList" + betList.size()); + apiResponse.put("list", betList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/betDetail") + public ApiResponse betDetail( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + String betType = betService.getBetType(search.getBetId()); + + String detail = ""; + if(betType.equals("triple")) { + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + param.put("apiVendorCode", betType); + ApiVendorCompInfo vendorCompInfo = userService.getApiVendorCompInfo(param); + if(vendorCompInfo != null) { + detail = tripleService.getBetDetail(vendorCompInfo, search.getBetId()); + } + log.info("triple bet detail: " + detail); + } else { + log.info("not found bet detail"); + } + + apiResponse.put("detail", detail); + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/betDetailTest") + public ApiResponse betDetailTest( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + String betType = betService.getBetType(search.getBetId()); + + String detail = ""; + if(betType.equals("triple")) { + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + param.put("apiVendorCode", betType); + ApiVendorCompInfo vendorCompInfo = userService.getApiVendorCompInfo(param); + if(vendorCompInfo != null) { + detail = tripleService.getBetDetailTest(vendorCompInfo, search.getBetId()); + } + log.info("triple bet detail: " + detail); + } else { + log.info("not found bet detail"); + } + + apiResponse.put("detail", detail); + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + + } +} diff --git a/src/main/java/com/bb/front/ApiBoardController.java b/src/main/java/com/bb/front/ApiBoardController.java new file mode 100644 index 0000000..c09bade --- /dev/null +++ b/src/main/java/com/bb/front/ApiBoardController.java @@ -0,0 +1,457 @@ +package com.bb.front; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.Board; +import com.bb.model.BoardListSearch; +import com.bb.model.Comment; +import com.bb.model.Message; +import com.bb.model.MessageListSearch; +import com.bb.model.PageFormVO; +import com.bb.model.Site; +import com.bb.service.BoardService; +import com.bb.service.CommonService; +import com.bb.service.UserService; +import com.bb.util.PagingUtil; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/board") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiBoardController { + + private final BoardService boardService; + + private final UserService userService; + + private final CommonService commonService; + + + private final JwtManager jwtManager; + + + @ResponseBody + @PostMapping(value={"/{boardType}/list"}) + public ApiResponse blist(@RequestHeader String token, HttpServletRequest request, @PathVariable String boardType, @Valid @RequestBody BoardListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + final String boardTypeKeyword = "answer|bbs|faq|favor|nt|snt"; + if(boardType.equals("qna")) { + boardType = "faq"; + } + + if(!boardTypeKeyword.contains(boardType)) { + log.error("[REQUEST: "+request.getRequestURI()+"] Board["+boardType+"] boardType Error"); + throw new ApiException("BRD02", "boardType Error"); + } + + search.setBoardType(boardType); + search.setIsUser("Y"); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0) search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + + int totalCount = boardService.getBoardListCnt(search); + if(totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(10); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List boardList = boardService.getBoardList(search); + List boardIdxList = boardService.getBoardIdxList(search); + apiResponse.put("list", boardList); + apiResponse.put("idxList", boardIdxList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/{boartType}/datail"}) + public ApiResponse datail(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody Board board) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + + board.setSiteId(tokenInfo.getSid()); + + Board boardetail = boardService.getBoard(board); + if(!tokenInfo.getSid().equals(boardetail.getSiteId())) { + throw new ApiException("1000", "accessDinied"); + } + + if(boardetail.getBoardType().equals("faq") && !tokenInfo.getMid().equals(boardetail.getRegId())) { + throw new ApiException("1000", "accessDinied"); + } + + if(boardetail.getBoardType().equals("faq") && boardetail.getStatus().equals("ANSWER") && boardetail.getIsReadUser().equals("N")) { + boardService.userAnswerCmtRead(boardetail); + } + boardService.viewAdd(boardetail); + apiResponse.put("board", boardetail); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/{boardType}/save"}) + public ApiResponse bsave(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody Board board) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + if(board.getBoardIdx() != null ) { + Board boardetail = boardService.getBoard(board); + if(!boardetail.getRegId().equals(tokenInfo.getMid())) { + throw new ApiException("2000", "accessDinied"); + } + } + + board.setSiteId(tokenInfo.getSid()); + board.setRegId(tokenInfo.getMid()); + int res = boardService.saveBoard(board); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", site.getSiteId()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("actionType", 2); + commonService.updateAcctionLog(logParam); + } catch(Exception e){System.out.print(e.toString());} + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/cmtSave"}) + public ApiResponse cmtsave(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody Comment comment) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + + if(comment.getCmtIdx() != null) { + Comment commentrdetail = boardService.getComment(comment); + if(!commentrdetail.getRegId().equals(tokenInfo.getMid())) { + throw new ApiException("2000", "accessDinied"); + } + } + + comment.setRegId(tokenInfo.getMid()); + int res = boardService.saveCmt(comment); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/flowBoard"}) + public ApiResponse siteFlowBoard(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + BoardListSearch search = new BoardListSearch(); + search.setSiteId(tokenInfo.getSid()); + Board flowBoard = boardService.getSiteFlowBoard(search); + log.info("[REQUEST: "+request.getRequestURI()+"] " + flowBoard); + + String content = ""; + if(flowBoard != null) { + content = flowBoard.getContent(); + } + + apiResponse.put("content", content); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/msgList", "/msgHeadList"}) + public ApiResponse msgList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MessageListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + if("msgHeadList".indexOf(request.getRequestURI()) > -1){ + search.setMsgType("head"); + } else { + search.setMsgType("msg"); + } + search.setHiddenYn("N"); + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + search.setRecieveId(tokenInfo.getMid()); + + int totalCount = boardService.getUserMsgListCnt(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(10); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List boardList = boardService.getUserMsgList(search); + apiResponse.put("list", boardList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/msgRead"}) + public ApiResponse msgRead(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody Message message) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + message.setSiteId(tokenInfo.getSid()); + message.setRecieveId(tokenInfo.getMid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + message); + + if(message.getMsgIdx() != null && message.getMsgIdx()!=0) { + log.info("[MSG READ idx: " + message.getMsgIdx()+"]"); + boardService.msgRead(message); + } else { + log.info("[MSG READ ALL]"); + boardService.allRead(message); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/msgUpdate"}) + public ApiResponse msgUpdate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody Message message) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + message.setSiteId(tokenInfo.getSid()); + message.setRecieveId(tokenInfo.getMid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + message); + + if(message.getMsgIdx() != null && message.getMsgIdx() != 0) { + log.info("[MSG DEL idx: " + message.getMsgIdx()+"]"); + message.setStatus("N"); + boardService.msgUpdate(message); + } else { + log.info("[MSG DEL ALL]"); + boardService.msgDelList(message); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + + } + +} diff --git a/src/main/java/com/bb/front/ApiCashController.java b/src/main/java/com/bb/front/ApiCashController.java new file mode 100644 index 0000000..0e372e6 --- /dev/null +++ b/src/main/java/com/bb/front/ApiCashController.java @@ -0,0 +1,1313 @@ +package com.bb.front; + +import java.net.SocketTimeoutException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.Cash; +import com.bb.model.CashDetail; +import com.bb.model.CashSearch; +import com.bb.model.CouponSearch; +import com.bb.model.CouponVO; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberTokenInfo; +import com.bb.model.Message; +import com.bb.model.PageFormVO; +import com.bb.model.Point; +import com.bb.model.PointSearch; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.service.AsyncExcoinOtcService; +import com.bb.service.BoardService; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.jsonwebtoken.ExpiredJwtException; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/cash") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiCashController { + + private final UserService userService; + + private final CashService cashService; + + private final BoardService boardService; + + private final CommonService commonService; + + private final AsyncExcoinOtcService asyncExcoinOtcService; + + private final JwtManager jwtManager; + + @ResponseBody + @PostMapping(value="/in") + public ApiResponse in(@RequestHeader String token, HttpServletRequest request, @RequestBody Cash cash) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::cash:in::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + MemberDetail memDetail = userService.getMember(search); + if(memDetail == null) { + throw new ApiException("U003", "unknown user"); + } + + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] " + cash); + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + String abuseLockYn = memDetail.getAbuseLockYn(); + String abuseLockTime = memDetail.getAbuseLockTime(); + if("Y".equals(abuseLockYn)) { + log.error(LOG_PREFIX+ "ABZ01::" + "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + throw new ApiException("ABZ01", "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + } else { + if(!"".equals(abuseLockTime)) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tokenInfo.getSid()); + lockParam.put("memId", tokenInfo.getMid()); + int lockResult = userService.resetUserLock(lockParam); + log.error(LOG_PREFIX+ "resetUserLock::result::" + lockResult); + } + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(memDetail.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + log.info(LOG_PREFIX+ "SiteOption.vaccCode::" + siteOption.getVaccCode()); + + if("Y".equals(memDetail.getMemLockYn())) { + log.error(LOG_PREFIX+ "U0011::" + "정지회원은 입/출금 신청이 불가능합니다."); + throw new ApiException("U0011", "정지회원은 입/출금 신청이 불가능합니다."); + } + + if("N".equals(memDetail.getBetYn()) && "NORMAL".equals(memDetail.getPartnerLevel())) { + log.error(LOG_PREFIX+ "U0012::" + "배팅금지 회원은 입/출금 신청이 불가능합니다."); + throw new ApiException("U0012", "배팅금지 회원은 입/출금 신청이 불가능합니다."); + } + + if(!"Y".equals(siteOption.getCashInYn())) { + log.error(LOG_PREFIX+ "C001::" + "사이트 입금금지 상태 입니다."); + throw new ApiException("C001", "사이트 입금금지 상태 입니다."); + } + + if(cash.getCashAmt() == null || cash.getCashAmt() <= 0) { + log.error(LOG_PREFIX+ "C002::" + "입금할 금액을 입력하세요."); + throw new ApiException("C002", "입금할 금액을 입력하세요."); + } + + int cashInCnt = cashService.getCashInCnt(search); + if(cashInCnt != 0) { + log.error(LOG_PREFIX+ "C003::" + "입금 처리중입니다. 완료 후 다시 신청해주세요."); + throw new ApiException("C003", "입금 처리중입니다. 완료 후 다시 신청해주세요."); + } + + int cashAmt = cash.getCashAmt(); + int cashInMax = Integer.parseInt(siteOption.getCashInAmtLimit()); + int cashInMin = Integer.parseInt(siteOption.getCashInAmtMin()); + int cashInUnit = Integer.parseInt(siteOption.getCashInAmtUnit()); + int cashInWaitTime = Integer.parseInt(siteOption.getCashInWaitTime()); + + if((cashInMax != 0) && (cashAmt > cashInMax)) { + log.error(LOG_PREFIX+ "C101::" + "1회 입금신청 최대한도는 " + cashInMax + "입니다."); + throw new ApiException("C101", "1회 입금신청 최대한도는 " + cashInMax + "입니다."); + } + if((cashInMin != 0) && (cashAmt < cashInMin)) { + log.error(LOG_PREFIX+ "C102::" + "1회 입금신청 최소금액은 " + cashInMin + "입니다."); + throw new ApiException("C102", "1회 입금신청 최소금액은 " + cashInMin + "입니다."); + } + if((cashInUnit != 0) && (cashAmt % cashInUnit != 0)) { + log.error(LOG_PREFIX+ "C103::" + "입금신청 금액 단위는 " + cashInUnit + "입니다."); + throw new ApiException("C103", "입금신청 금액 단위는 " + cashInUnit + "입니다."); + } + + // 입금요청 처리 + CashDetail paramCash = new CashDetail(); + paramCash.setSiteId(tokenInfo.getSid()); + paramCash.setMemId(tokenInfo.getMid()); + paramCash.setCashType(cash.getCashType()); + paramCash.setCashAmt(cash.getCashAmt()); + paramCash.setCashDesc("충전"); + paramCash.setDelYn("N"); + paramCash.setCashStatus("0"); + paramCash.setMemo(""); + paramCash.setRegId(tokenInfo.getMid()); + paramCash.setAdminId(""); + long preCashAmt = cashService.getMemCash(paramCash); + paramCash.setPreCashAmt(Long.toString(preCashAmt)); + paramCash.setWaitTime(cashInWaitTime * -1); + int cnt = cashService.getCashWaitTimeCheck(paramCash); + if(cnt != 0) { + log.error(LOG_PREFIX+ "C104::" + "입금 재신청 대기시간 ["+cashInWaitTime+"초] 후 다시 신청해주세요."); + throw new ApiException("C104", "입금 재신청 대기시간 ["+cashInWaitTime+"초] 후 다시 신청해주세요."); + } + + if(cash.getSymbol() == null || "".equals(cash.getSymbol())) { + paramCash.setSymbol(null); + } else { + paramCash.setSymbol(cash.getSymbol()); + } + if(cash.getExchangeRate() == null || "".equals(cash.getExchangeRate())) { + paramCash.setExchangeRate(null); + } else { + paramCash.setExchangeRate(cash.getExchangeRate()); + } + if(cash.getAmount() == null || "".equals(cash.getAmount())) { + paramCash.setAmount(null); + } else { + paramCash.setAmount(cash.getAmount()); + } + + paramCash.setWaitTime(30 * -1); + long result = cashService.insertCash(paramCash); + if(result == 0) { + log.error(LOG_PREFIX+ "C003::" + "입금 처리중입니다. 완료 후 다시 신청해주세요."); + throw new ApiException("C003", "입금 처리중입니다. 완료 후 다시 신청해주세요."); + } else { + // TODO: Excoin API 호출 + HashMap exCoinInfo = commonService.getVassApiInfo(search); + if(exCoinInfo.get("vaccCode") != null) { + log.info(LOG_PREFIX+ "API_INFO::" + exCoinInfo.toString()); + String vaccCode = exCoinInfo.get("vaccCode").toString(); + if(vaccCode.equals("excoin")) { + exCoinInfo.put("userEmail", memDetail.getMemId()); + exCoinInfo.put("userMobile", memDetail.getMemPhone().replaceAll("-", "").trim()); + exCoinInfo.put("userNm", memDetail.getMemName()); + exCoinInfo.put("cashAmt", Integer.toString(cash.getCashAmt())); + // 회원가입 + int resultCode = asyncExcoinOtcService.createUser(LOG_PREFIX, exCoinInfo); + if(resultCode == 1) { + // 사용자 충전 + asyncExcoinOtcService.requestTrade(LOG_PREFIX, exCoinInfo); + } + } + } + + // 입금보너스 기록 + HashMap data = new HashMap<>(); + data.put("siteId", tokenInfo.getSid()); + data.put("memId", tokenInfo.getMid()); + if(cash.getBonusCode() == null || "".equals(cash.getBonusCode())) { + // 이벤트 보너스 + data.put("bonusType", "event"); + data.put("bonusCode", memDetail.getMemLevel()); + } else { + // 유저선택 입금 보너스 + data.put("bonusType", "bonus"); + data.put("bonusCode", cash.getBonusCode()); + } + data.put("cashIdx", result); + data.put("pointIdx", null); + data.put("rate", 0); + log.info(LOG_PREFIX+ "CASH_BONUS_INFO::" + data.toString()); + int resultBonus = cashService.insertCashBonus(data); + log.info(LOG_PREFIX+ "CASH_BONUS_INFO::result : " + resultBonus); + } + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("actionType", 2); + commonService.updateAcctionLog(logParam); + } catch(Exception e){System.out.print(e.toString());} + + apiResponse.success(); + + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::cash:in::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + log.error(LOG_PREFIX+ "[ApiException] "+e.getApiResponse()); + apiResponse = e.getApiResponse(); + + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/out") + public ApiResponse out(@RequestHeader String token, HttpServletRequest request, @RequestBody Cash cash) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::cash:out::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + + Member search = new Member(); + search.setMemId(tokenInfo.getMid()); + search.setSiteId(tokenInfo.getSid()); + MemberDetail memDetail = userService.getMember(search); + if(memDetail == null) { + throw new ApiException("U003", "unknown user"); + } + + if(memDetail.getCashOutFlag() == 1) { + throw new ApiException("C411", "상위 유저 회수 처리중입니다. 잠시 후 다시 시도해주세요."); + } + + String abuseLockYn = memDetail.getAbuseLockYn(); + String abuseLockTime = memDetail.getAbuseLockTime(); + if("Y".equals(abuseLockYn)) { + log.error(LOG_PREFIX+ "ABZ01::" + "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + throw new ApiException("ABZ01", "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + } else { + if(!"".equals(abuseLockTime)) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tokenInfo.getSid()); + lockParam.put("memId", tokenInfo.getMid()); + int lockResult = userService.resetUserLock(lockParam); + log.error(LOG_PREFIX+ "resetUserLock::result::" + lockResult); + } + } + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", tokenInfo.getSid()); + flagParam.put("memId", tokenInfo.getMid()); + flagParam.put("cashOutFlag", 1); + int flagResult = userService.updateCashOutFlag(flagParam); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(memDetail.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] " + cash); + + int cashOutCnt = cashService.getCashOutCnt(search); + if(cashOutCnt != 0) { + throw new ApiException("C209", "출금 처리중입니다. 완료 후 다시 신청해주세요."); + } + + if("Y".equals(memDetail.getMemLockYn())) { + throw new ApiException("U0011", "정지회원은 입/출금 신청이 불가능합니다."); + } + + if("N".equals(memDetail.getBetYn()) && "NORMAL".equals(memDetail.getPartnerLevel())) { + throw new ApiException("U0012", "배팅금지 회원은 입/출금 신청이 불가능합니다."); + } + + if(!"Y".equals(siteOption.getCashOutYn())) { + throw new ApiException("C201", "사이트 출금금지 상태 입니다."); + } + + if(memDetail.getCashAmt() < cash.getCashAmt()) { + throw new ApiException("C202", "보유금액을 초과하여 출금신청을 할 수 없습니다."); + } + + if(!"Y".equals(memDetail.getOutAmtYn())) { + throw new ApiException("C203", "회원 출금금지 상태 입니다."); + } + + String op = memDetail.getCashOutPass(); + if(op == null || "".equals(op)) { + throw new ApiException("C204", "출금비밀번호를 설정해주세요."); + } + + if(!memDetail.getCashOutPass().equals(cash.getCashOutPass()) ){ + throw new ApiException("C205", "출금비밀번호를 확인해주세요."); + } + + if(cash.getCashAmt() == null || cash.getCashAmt() <= 0) { + throw new ApiException("C206", "출금할 금액을 입력하세요."); + } + + if(memDetail.getChangeFlag().equals("N") && !"viva01".equals(tokenInfo.getSid())) { + throw new ApiException("C099", "환전할 수 없는 상태입니다. [통합머니전환] 버튼을 클릭하세요."); + } + + int cashAmt = cash.getCashAmt(); + int cashOutMax = Integer.parseInt(siteOption.getCashOutAmtLimit()); + int cashOutMin = Integer.parseInt(siteOption.getCashOutAmtMin()); + int cashOutUnit = Integer.parseInt(siteOption.getCashOutAmtUnit()); + int cashOutWaitTime = Integer.parseInt(siteOption.getCashOutWaitTime()); + + if((cashOutMax != 0) && (cashAmt > cashOutMax)) { + throw new ApiException("C101", "1회 출금신청 최대한도는 " + cashOutMax + "입니다."); + } + if((cashOutMin != 0) && (cashAmt < cashOutMin)) { + throw new ApiException("C214", "1회 출금신청 최소금액은 " + cashOutMin + "입니다."); + } + if((cashOutUnit != 0) && (cashAmt % cashOutUnit != 0)) { + throw new ApiException("C215", "출금신청 금액 단위는 " + cashOutUnit + "입니다."); + } + + // 출금요청 처리 + CashDetail paramCash = new CashDetail(); + paramCash.setSiteId(tokenInfo.getSid()); + paramCash.setMemId(tokenInfo.getMid()); + paramCash.setCashType(cash.getCashType()); + paramCash.setCashAmt(-1 * cash.getCashAmt()); + paramCash.setCashDesc("환전"); + paramCash.setDelYn("N"); + paramCash.setCashStatus("0"); + paramCash.setMemo(""); + paramCash.setRegId(tokenInfo.getMid()); + paramCash.setAdminId(""); + long preCashAmt = cashService.getMemCash(paramCash); + if(preCashAmt < cash.getCashAmt()) { + throw new ApiException("C202 ", "보유금액을 초과하여 출금액을 신청할 수 없습니다."); + } + paramCash.setPreCashAmt(""+preCashAmt); + paramCash.setWaitTime(cashOutWaitTime * -1); + int cnt = cashService.getCashWaitTimeCheck(paramCash); + if(cnt != 0) { + throw new ApiException("C216", "출금 재신청 대기시간 ["+cashOutWaitTime+"초] 후 다시 신청해주세요." ); + } + + if(cash.getSymbol() == null || "".equals(cash.getSymbol())) { + paramCash.setSymbol(null); + } else { + paramCash.setSymbol(cash.getSymbol()); + } + if(cash.getExchangeRate() == null || "".equals(cash.getExchangeRate())) { + paramCash.setExchangeRate(null); + } else { + paramCash.setExchangeRate(cash.getExchangeRate()); + } + if(cash.getAmount() == null || "".equals(cash.getAmount())) { + paramCash.setAmount(null); + } else { + paramCash.setAmount(cash.getAmount()); + } + + paramCash.setWaitTime(30 * -1); + long result = cashService.insertCash(paramCash); + if(result == 0) { + throw new ApiException("C209", "출금 처리중입니다. 완료 후 다시 신청해주세요."); + } else { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tokenInfo.getSid()); + lockParam.put("memId", tokenInfo.getMid()); + lockParam.put("symLock", "N"); + int resultLock = userService.userChangeSymLock(lockParam); + log.error("#-userCashOut::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"+"userChangeSymLock(N) Result="+resultLock); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("actionType", 2); + commonService.updateAcctionLog(logParam); + } catch(Exception e){System.out.print(e.toString());} + } + + flagParam.put("cashOutFlag", 0); + flagResult = userService.updateCashOutFlag(flagParam); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", tokenInfo.getSid()); + flagParam.put("memId", tokenInfo.getMid()); + flagParam.put("cashOutFlag", 0); + int flagResult = userService.updateCashOutFlag(flagParam); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", tokenInfo.getSid()); + flagParam.put("memId", tokenInfo.getMid()); + flagParam.put("cashOutFlag", 0); + int flagResult = userService.updateCashOutFlag(flagParam); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/getUserCash") + public ApiResponse getUserCash(HttpServletRequest request, @RequestHeader String token) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-getUserCash::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + MemberTokenInfo param = new MemberTokenInfo(); + param.setSiteId(tokenInfo.getSid()); + param.setMemId(tokenInfo.getMid()); + param.setToken(token); + + Integer result = userService.getCheckMemberToken(param); + log.info(LOG_PREFIX+ "getCheckMemberToken::Result::"+result); + if(result == null || result == 0) { + //로그인 로그 , + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "TK999"); + logParam.put("logoutYn", ""); + logParam.put("logName", "만료토큰"); + logParam.put("logDesc", "["+request.getRequestURI()+"]"); + logParam.put("regId", ""); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", token); + commonService.insertlog(logParam); + } catch(Exception e){System.out.print(e.toString());} + log.error(LOG_PREFIX+ "duplicate_token_login_error"); + throw new ApiException("TK999", "duplicate_token_login_error"); + } + + Member search = new Member(); + search.setSiteIdx(tokenInfo.getSidx()); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + HashMap memberVo = userService.getMemberMap2(search); + int userBalance = Integer.parseInt(memberVo.get("cashAmt").toString()); + apiResponse.put("balance", String.valueOf(userBalance)); + + int tokenValidationSec = commonService.getSiteLogoutTimeLimit(tokenInfo.getSid()); + String lastGameTime = memberVo.get("lastGameTime").toString(); + String isPlayGame = "N"; + if(!lastGameTime.equals("")) { + Date lastGameDt = sdf.parse(lastGameTime); + long nDate = System.currentTimeMillis(); + Double diff = (nDate - lastGameDt.getTime()) / 1000.0; // 초 + if(tokenValidationSec > diff.intValue()) { + isPlayGame = "Y"; + } + } + apiResponse.put("isPlayGame", isPlayGame); + apiResponse.success(); + log.info(LOG_PREFIX+ "apiResponse::"+apiResponse.toString()); + + } catch(ExpiredJwtException ee) { + HashMap userInfo = commonService.getUserInfoByToken(token); + String siteId = userInfo.get("siteId").toString(); + String memId = userInfo.get("memId").toString(); + final String LOG_PREFIX = "#-getUserCash::"+siteId+"::"+memId+"::"; + log.error(LOG_PREFIX+ "[TOKEN ExpiredJwtException] : " + ee.getMessage()); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", siteId); + logParam.put("memId", memId); + logParam.put("logType", "TK888"); + logParam.put("logoutYn", ""); + logParam.put("logName", "토큰시간만료"); + logParam.put("logDesc", "["+request.getRequestURI()+"]"); + logParam.put("regId", ""); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", token); + commonService.insertlog(logParam); + } catch(Exception e){System.out.print(e.toString());} + + apiResponse.setResultCode("TK888"); + apiResponse.setResultMessage("토큰시간만료"); + } catch(ApiException e) { + log.error("#-getUserCash::"+"[TOKEN ApiException] : " + e.getMessage()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error("#-getUserCash::"+"[TOKEN Exception] : " + e.getMessage()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/getAcc") + public ApiResponse getAcc(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + Member search = new Member(); + search.setMemId(tokenInfo.getMid()); + search.setSiteId(tokenInfo.getSid()); + + HashMap msgDesc = cashService.getAccBankInfo(search); + + if(msgDesc != null) { + Message message = new Message(); + message.setSiteId(tokenInfo.getSid()); + message.setRegId(tokenInfo.getSid()); + + if("msgHeadSave".indexOf(request.getRequestURI()) > -1){ + message.setMsgType("head"); + } else if("msgJoinSave".indexOf(request.getRequestURI()) > -1){ + message.setMsgType("join"); + } else { + message.setMsgType("msg"); + } + + message.setRecieveId(tokenInfo.getMid()); + //message.setRecieveId("accout info"); + message.setMsgTitle(msgDesc.get("msg")); + message.setMsgDesc(msgDesc.get("bankinfo")); + message.setHiddenYn("N"); + message.setTargetType("member"); + boardService.msgSend(message); + } else { + throw new ApiException("1000", "no acc data"); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/list") + public ApiResponse list( @RequestHeader String token, HttpServletRequest request, @RequestBody CashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + search.setIsFront("Y"); + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + if(search.getCashType() == null || "".equals(search.getCashType())) { + search.setCashType("in"); + } + + if("in".equals(search.getCashType())) { + search.setCashType("1"); + } + if("out".equals(search.getCashType())) { + search.setCashType("-1"); + } + + int totalCount = cashService.getCashListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + commonForm.setCount_per_list(10); + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List cashList = cashService.getCashList(search); + apiResponse.put("list", cashList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/del") + public ApiResponse del( @RequestHeader String token, HttpServletRequest request, @RequestBody CashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + cashService.delCash(search); + + + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/pointList") + public ApiResponse pointList( @RequestHeader String token, HttpServletRequest request, @RequestBody PointSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::pointList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::"; + + search.setIsFront("Y"); + search.setSiteId(tokenInfo.getSid()); + if(search.getMemId() == null || search.getMemId().equals("")) { + search.setMemId(tokenInfo.getMid()); + } + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long cMlsUTC = System.currentTimeMillis(); // 현재 시각 + + String curDate = sdf.format(cMlsUTC); + String startDate = search.getStartDate(); + String endDate = search.getEndDate(); + + // 문자열 -> Date + Date dateCur = sdf.parse(curDate); + Date dateStart = sdf.parse(startDate); + Date dateEnd = sdf.parse(endDate); + + // Date -> 밀리세컨즈 + long timeMilCur = dateCur.getTime(); + long timeMilStart = dateStart.getTime(); + long timeMilEnd = dateEnd.getTime(); + + // 비교 + long diff1 = timeMilCur - timeMilStart; + long diff2 = timeMilCur - timeMilEnd; + + long diffDayByStart = diff1 / (1000 * 60 * 60 * 24); + long diffDayByEnd = diff2 / (1000 * 60 * 60 * 24); + + log.info(LOG_PREFIX+ "diffDayByStart::"+diffDayByStart); + log.info(LOG_PREFIX+ "diffDayByEnd::"+diffDayByEnd); + + if(diffDayByStart >= 3 || diffDayByEnd >= 3) { + log.info(LOG_PREFIX+ "::Start_End_Date 4일 이전"); + search.setOldYn("Y"); + } + + log.info(LOG_PREFIX+ "SMP::Start 시각 : " + startDate); + log.info(LOG_PREFIX+ "SMP::End 시각 : " + endDate); + log.info(LOG_PREFIX+ "SMP::Cur 시각 : " + curDate); + + log.info(LOG_PREFIX+ "PointSearch : " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = cashService.getPointListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + commonForm.setCount_per_list(10); + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List pointList = cashService.getPointList(search); + apiResponse.put("list", pointList); + HashMap pointSum = cashService.getPointSumInfo(search); + apiResponse.put("sum", pointSum); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/pointListNew") + public ApiResponse pointListNew( @RequestHeader String token, HttpServletRequest request, @RequestBody PointSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::pointList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::"; + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + search.setIsFront("Y"); + search.setSiteId(tokenInfo.getSid()); + if(search.getMemId() == null || search.getMemId().equals("")) { + search.setMemId(tokenInfo.getMid()); + } + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long cMlsUTC = System.currentTimeMillis(); // 현재 시각 + + String curDate = sdf.format(cMlsUTC); + String startDate = search.getStartDate(); + String endDate = search.getEndDate(); + + // 문자열 -> Date + Date dateCur = sdf.parse(curDate); + Date dateStart = sdf.parse(startDate); + Date dateEnd = sdf.parse(endDate); + + // Date -> 밀리세컨즈 + long timeMilCur = dateCur.getTime(); + long timeMilStart = dateStart.getTime(); + long timeMilEnd = dateEnd.getTime(); + + // 비교 + long diff1 = timeMilCur - timeMilStart; + long diff2 = timeMilCur - timeMilEnd; + + long diffDayByStart = diff1 / (1000 * 60 * 60 * 24); + long diffDayByEnd = diff2 / (1000 * 60 * 60 * 24); + + log.info(LOG_PREFIX+ "diffDayByStart::"+diffDayByStart); + log.info(LOG_PREFIX+ "diffDayByEnd::"+diffDayByEnd); + + if(diffDayByStart >= 4 || diffDayByEnd >= 4) { + log.info(LOG_PREFIX+ "::Start_End_Date 4일 이전"); + search.setOldYn("Y"); + } + + log.info(LOG_PREFIX+ "SMP::Start 시각 : " + startDate); + log.info(LOG_PREFIX+ "SMP::End 시각 : " + endDate); + log.info(LOG_PREFIX+ "SMP::Cur 시각 : " + curDate); + + log.info(LOG_PREFIX+ "PointSearch : " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = cashService.getPointListNewCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + commonForm.setCount_per_list(10); + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List pointList = cashService.getPointListNew(search); + apiResponse.put("list", pointList); + HashMap pointSum = cashService.getPointSumInfo(search); + apiResponse.put("sum", pointSum); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/pointChg") + public ApiResponse pointChg(@RequestHeader String token, HttpServletRequest request, @RequestBody Point point) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::pointChg::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + MemberDetail memDetail= userService.getMember(search); + if(memDetail == null) { + throw new ApiException("U003", "unknown user"); + } + + point.setSiteId(tokenInfo.getSid()); + point.setMemId(tokenInfo.getMid()); + + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] " + point); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(memDetail.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + if("Y".equals(memDetail.getMemLockYn())) { + throw new ApiException("U0011", "정지회원은 입/출금 신청이 불가능합니다."); + } + + if("N".equals(memDetail.getPointExchangeYn())) { + throw new ApiException("P009", "포인트전환을 할 수 없는 상태입니다. 고객센터에 문의하세요"); + } + + if(point.getPointAmt() == null || point.getPointAmt() <= 0) { + throw new ApiException("P001", "전환할 포인트를 입력하세요."); + } + + int pointAmt = point.getPointAmt().intValue(); + int pointInMax = Integer.parseInt(siteOption.getPointChangeAmtLimit()); + int pointInUnit = Integer.parseInt(siteOption.getPointChangeAmtUnit()); + if((pointInMax != 0) && (pointAmt > pointInMax)) { + throw new ApiException("P101", "1회 포인트전환 최대한도는 " + pointInMax + "입니다."); + } + if((pointInUnit != 0) && (pointAmt % pointInUnit != 0)) { + throw new ApiException("P102", "포인트전환 금액 단위는 " + pointInUnit + "입니다."); + } + + int cashAmt = pointAmt; + double pointAmtD = pointAmt * -1.0; + + if(memDetail.getPointAmt() >= point.getPointAmt() ) { + point.setPointType("-4"); + point.setPointDesc("CHG"); + point.setPointAmt(pointAmtD); + point.setBetIdx(null); + point.setPointStatus("1"); + point.setRegId(tokenInfo.getMid()); + point.setAdminId(null); + point.setMemo(""); + point.setPrePointAmt(memDetail.getPointAmt()); + log.info(LOG_PREFIX+ point); + long pointIdx = cashService.pointInsert(point); + log.info(LOG_PREFIX+ "pointIdx: " + pointIdx); + if(pointIdx == 0) { + throw new ApiException("P005", "포인트전환은 1분에 1건씩 처리됩니다. 잠시후 다시 시도해주세요"); + } else { + CashDetail paramCash = new CashDetail(); + paramCash.setSiteId(tokenInfo.getSid()); + paramCash.setMemId(tokenInfo.getMid()); + paramCash.setCashType("4"); + paramCash.setCashAmt(cashAmt); + paramCash.setCashDesc("포인트전환"); + paramCash.setDelYn("N"); + paramCash.setCashStatus("1"); + paramCash.setMemo(""); + paramCash.setRegId(tokenInfo.getMid()); + paramCash.setAdminId(""); + paramCash.setPreCashAmt(Integer.toString(memDetail.getCashAmt())); + paramCash.setWaitTime(-60); + log.info(LOG_PREFIX+ paramCash); + long cashIdx = cashService.insertCash(paramCash); + log.info(LOG_PREFIX+ "cashIdx: " + cashIdx); + if(cashIdx == 0) { + throw new ApiException("P005", "포인트전환은 1분에 1건씩 처리됩니다. 잠시후 다시 시도해주세요"); + } else { + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("actionType", 2); + commonService.updateAcctionLog(logParam); + } catch(Exception e){System.out.print(e.toString());} + } + } + } else { + throw new ApiException("P002", "보유 포인트를 초과하여 전환신청을 할 수 없습니다."); + } + + apiResponse.success(); + + } catch (ResourceAccessException rae) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String memId = tokenInfo.getMid(); + + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("#-user::pointChg::"+siteId+"::"+memId+"::::"+"[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("#-user::pointChg::"+siteId+"::"+memId+"::::"+"[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("#-user::pointChg::"+siteId+"::"+memId+"::::"+"[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + + apiResponse.success(); + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String memId = tokenInfo.getMid(); + log.error("#-user::pointChg::"+siteId+"::"+memId+"::::"+"ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String memId = tokenInfo.getMid(); + log.error("#-user::pointChg::"+siteId+"::"+memId+"::::"+"Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/myCoupons") + public ApiResponse myCoupons(@RequestHeader String token, HttpServletRequest request, @RequestBody CouponSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::usedCoupon::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::"; + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + search.setCouponStatus("1"); + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = cashService.getMyCouponListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List> list = cashService.getMyCouponList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::usedCoupon::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::"; + log.error(LOG_PREFIX+ "ApiException::"+e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::usedCoupon::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::"; + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/useCoupon") + public ApiResponse usedCoupon(@RequestHeader String token, HttpServletRequest request, @RequestBody CouponVO couponVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::usedCoupon::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"+couponVO.getCouponNumber()+":::"; + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(couponVO); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + couponVO.setSiteId(tokenInfo.getSid()); + couponVO.setMemId(tokenInfo.getMid()); + + if(couponVO.getCouponNumber() == null || "".equals(couponVO.getCouponNumber())) { + log.error(LOG_PREFIX+ "CUP01 : couponNumber is not empty"); + throw new ApiException("CUP01", "couponNumber is not empty"); + } + + CouponVO couponItem = cashService.getCouponItem(couponVO.getCouponNumber()); + if(couponItem == null) { + log.error(LOG_PREFIX+ "CUP02 : 알 수 없는 쿠폰번호"); + throw new ApiException("CUP02", "알 수 없는 쿠폰번호"); + } + + if(!tokenInfo.getSid().equals(couponItem.getSiteId())) { + log.error(LOG_PREFIX+ "CUP03 : couponNumber used dinied1"); + throw new ApiException("CUP03", "couponNumber used dinied1"); + } + + if(!tokenInfo.getMid().equals(couponItem.getMemId())) { + log.error(LOG_PREFIX+ "CUP04 : couponNumber used dinied2"); + throw new ApiException("CUP04", "couponNumber used dinied2"); + } + + if(!"1".equals(couponItem.getCouponStatus())) { + log.error(LOG_PREFIX+ "CUP08 : 처리상태 오류"); + throw new ApiException("CUP08", "처리상태 오류"); + } + couponItem.setCouponStatus("2"); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long usedTime = System.currentTimeMillis(); + String usedTimeStr = sdf.format(usedTime); + couponItem.setUsedAt(usedTimeStr); + + log.info(LOG_PREFIX+ "updateCouponItem : " + couponItem.toString()); + int cpUpdResult = cashService.updateCouponItem(couponItem); + log.info(LOG_PREFIX+ "updateCouponItem result : " + cpUpdResult); + + if(cpUpdResult > 0) { + apiResponse.success(); + } else { + log.error(LOG_PREFIX+ "CUP06 : 쿠폰번호 사용 실패"); + throw new ApiException("CUP06", "쿠폰번호 사용 실패"); + } + + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::usedCoupon::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"+couponVO.getCouponNumber()+":::"; + log.error(LOG_PREFIX+ "ApiException::"+e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::usedCoupon::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"+couponVO.getCouponNumber()+":::"; + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/rollCalculate") + public ApiResponse rollCalculate(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + CashSearch search = new CashSearch(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + List> list = cashService.getUserRollingCalculate(search); + apiResponse.put("list", list); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/bonusCodes") + public ApiResponse bonusCodes(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + CashSearch search = new CashSearch(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + List> list = userService.getSiteCashBonusList(tokenInfo.getSidx()); + + HashMap item = new HashMap<>(); + item.put("bonusCode", ""); + item.put("bonusTitle", "선택 안함"); + item.put("bonusDesc", ""); + // 리스트 맨 앞(index 0)에 추가 + list.add(0, item); + + apiResponse.put("list", list); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + + } + +} + diff --git a/src/main/java/com/bb/front/ApiEtcController.java b/src/main/java/com/bb/front/ApiEtcController.java new file mode 100644 index 0000000..ac80705 --- /dev/null +++ b/src/main/java/com/bb/front/ApiEtcController.java @@ -0,0 +1,232 @@ +package com.bb.front; + +import java.util.HashMap; +import java.util.List; + +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.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.Bank; +import com.bb.model.Banner; +import com.bb.model.BlockSearch; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.service.CommonService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.StringUtils; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/etc") +@RequiredArgsConstructor +//@SecurityRequirement(name = "Authorization") +public class ApiEtcController { + + private final CommonService commonService; + + private final UserService userService; + + private final JwtManager jwtManager; + + @ResponseBody + @PostMapping(value="/bank") + public ApiResponse bank(HttpServletRequest request, @RequestBody SiteSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(site.getSiteId()); + + List bankList = commonService.getBankList(search) ; + apiResponse.put("list", bankList); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/banner") + public ApiResponse banner(HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site == null) { + throw new ApiException("1000", "accessDinied"); + } + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(site.getSiteId()); + + List bannerList = commonService.getBannerList(paramSite) ; + apiResponse.put("list", bannerList); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/popupList") + public ApiResponse popupList(HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site == null) { + throw new ApiException("1000", "accessDinied"); + } + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(site.getSiteId()); + + List popupList = commonService.getPopupList(paramSite); + apiResponse.put("list", popupList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/siteOption") + public ApiResponse siteOption(HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(site.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + apiResponse.put("siteOption", siteOption); + + String refer = request.getHeader("Referer"); + if(refer != null) { +// String refer = "https://goodidea.tistory.com:8888/qr/aaa/ddd.html?abc=def&ddd=fgf#sharp"; + String[] urls = StringUtils.extractUrlParts(refer); +// log.info(urls.toString()); +// log.info(urls[2]); + String domain = urls[2]; + paramSite.setEtc1(domain); + log.info(paramSite.toString()); + + String joinRecommanderId = commonService.getJoinRecommanderId(paramSite); + if(joinRecommanderId == null) joinRecommanderId = ""; + apiResponse.put("joinRecommanderId", joinRecommanderId); + } + + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/blocks") + public ApiResponse blocks( HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + BlockSearch paramSite = new BlockSearch(); + paramSite.setSiteId(site.getSiteId()); + + List adminLogLis = commonService.getSiteBlockList(paramSite); + + apiResponse.put("list", adminLogLis); + apiResponse.put("ip", IPKit.getIpAddressByRequest(request)); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/jackpot") + public ApiResponse jackpot(HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site == null) { + throw new ApiException("1000", "accessDinied"); + } + HashMap paramSite = new HashMap<>(); + paramSite.put("siteIdx", site.getSiteIdx()); + + String jackpot = commonService.getJackpot(paramSite) ; + apiResponse.put("jackpot", jackpot); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } + +} diff --git a/src/main/java/com/bb/front/ApiFrontController.java b/src/main/java/com/bb/front/ApiFrontController.java new file mode 100644 index 0000000..da99918 --- /dev/null +++ b/src/main/java/com/bb/front/ApiFrontController.java @@ -0,0 +1,413 @@ +package com.bb.front; + +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; + +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtClame; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.Banner; +import com.bb.model.BoardListSearch; +import com.bb.model.CashSearch; +import com.bb.model.Member; +import com.bb.model.Site; +import com.bb.model.SiteSearch; +import com.bb.service.BoardService; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.UserService; +import com.bb.util.IPKit; + +import io.jsonwebtoken.ExpiredJwtException; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiFrontController { + + private final UserService userService; + + private final CashService cashService; + + private final BoardService boardService; + + private final CommonService commonService; + + @Autowired + RestTemplate restTemplate; + + private final JwtManager jwtManager; + + + @GetMapping("/health") + public String health( HttpServletRequest request,ModelMap model) throws Exception { + return "alive"; + } + + + @ResponseBody + @PostMapping(value="/main") + public ApiResponse main(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/getToken") + public ApiResponse getToken(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + JwtClame jwtinfo = new JwtClame(); + jwtinfo.setSiteIdx(site.getSiteIdx()); + jwtinfo.setSiteId(site.getSiteId()); + jwtinfo.setMemId(tokenInfo.getMid()); + jwtinfo.setMemIdx(tokenInfo.getMidx()); + jwtinfo.setPartnerLevel(tokenInfo.getPartnerLevel()); + + int tokenValidationSec = commonService.getSiteLogoutTimeLimit(site.getSiteId()); + log.info("#-getToken::tokenValidationSec: " + tokenValidationSec); + + String tok = jwtManager.generateToken(jwtinfo, tokenValidationSec); + apiResponse.put("token", tok); + + //로그인 로그 , + try { + Map logParam = new HashMap(); + logParam.put("siteId", site.getSiteId()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "TOKEN"); + logParam.put("logoutYn", ""); + logParam.put("logName", "로그인토큰"); + logParam.put("logDesc", "토큰갱신"); + logParam.put("regId", ""); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", tok); + commonService.insertlog(logParam); + + logParam.put("actionType", 2); + commonService.updateAcctionLog(logParam); + } catch(Exception e){System.out.print(e.toString());} + + apiResponse.success(); + + } catch(ExpiredJwtException je) { + log.error("#-getToken::"+je.getMessage()); + } catch(ApiException e) { + log.error("#-getToken::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error("#-getToken::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @SecurityRequirement(name = "Authorization") + @ResponseBody + @PostMapping(value="/main/popupList") + public ApiResponse popupList(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + + List popupList = commonService.getLoginPopupList(paramSite); + apiResponse.put("list", popupList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/main/cashList") + public ApiResponse cashList(HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + CashSearch inParam = new CashSearch(); + inParam.setSiteId(site.getSiteId()); + inParam.setCashType("1"); + List> cashInList = cashService.getMainCashList(inParam); + + CashSearch outParam = new CashSearch(); + outParam.setSiteId(site.getSiteId()); + outParam.setCashType("-1"); + List> cashOutList = cashService.getMainCashList(outParam); + + apiResponse.put("cashInList", cashInList); + apiResponse.put("cashOutList", cashOutList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/main/nt/list"}) + public ApiResponse blist(HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + BoardListSearch search = new BoardListSearch(); + search.setSiteId(site.getSiteId()); + List> boardList = boardService.getMainBoardList(search); + + apiResponse.put("boardList", boardList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/main/board/list"}) + public ApiResponse blist2(HttpServletRequest request, @Valid @RequestBody BoardListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + search.setSiteId(site.getSiteId()); + log.info("#-MAIN::blist2::"+site.getSiteId()+"::: BoardListSearch : " + search); + List> boardList = boardService.getMainBoardList2(search); + + apiResponse.put("boardList", boardList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/isPlayGame"}) + public ApiResponse isPlayGame(HttpServletRequest request, @RequestHeader String token) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Member search = new Member(); + search.setMemId(tokenInfo.getMid()); + search.setSiteId(tokenInfo.getSid()); + search.setIntervalTime(-120); + HashMap lastGameInfo = userService.getLastGameInfo(search); + if(lastGameInfo != null && lastGameInfo.get("cashType").toString().equals("BET")) { + // Playing Game + apiResponse.put("isPlayGame", "Y"); + } else { + // Not Playing Game + apiResponse.put("isPlayGame", "N"); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @GetMapping(value={"/coin"}) + public ApiResponse coin(HttpServletRequest request, @RequestHeader String token, @RequestParam String symbol) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-TRIPLE::COIN::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::"; + + log.info(LOG_PREFIX+ "Request symbol : " + symbol); + + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + param.put("apiVendorCode", "triple"); + ApiVendorCompInfo vendorCompInfo = userService.getApiVendorCompInfo(param); + + // 헤더에 토큰 세팅 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", vendorCompInfo.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(vendorCompInfo.getApiUrl() + "/getToken"); + HttpEntity> entity = new HttpEntity<>(null, headers); + ResponseEntity tokenRes = restTemplate.postForEntity(builder.toUriString(), entity, String.class); + log.info(LOG_PREFIX+ "Token Response : " + tokenRes.getBody()); + JSONObject tokenObj = new JSONObject(tokenRes.getBody()); + String apiToken = tokenObj.getJSONObject("data").getString("token"); + + headers.set("token", apiToken); + builder = UriComponentsBuilder.fromHttpUrl(vendorCompInfo.getApiUrl() + "/coin?symbol=" + symbol + "¤cy=usd"); + entity = new HttpEntity<>(null, headers); + ResponseEntity coinRes = restTemplate.postForEntity(builder.toUriString(), entity, String.class); + log.info(LOG_PREFIX+ "Coin Response : " + coinRes.getBody()); + JSONObject resultObj = new JSONObject(coinRes.getBody()); + JSONObject dataObj = resultObj.getJSONObject("data"); + JSONObject infoObj = dataObj.getJSONObject("info"); + String currencyUsd = infoObj.getString("currentPrice"); + + builder = UriComponentsBuilder.fromHttpUrl(vendorCompInfo.getApiUrl() + "/coin?symbol=" + symbol + "¤cy=krw"); + entity = new HttpEntity<>(null, headers); + coinRes = restTemplate.postForEntity(builder.toUriString(), entity, String.class); + log.info(LOG_PREFIX+ "Coin Response : " + coinRes.getBody()); + resultObj = new JSONObject(coinRes.getBody()); + dataObj = resultObj.getJSONObject("data"); + infoObj = dataObj.getJSONObject("info"); + String currencyKrw = infoObj.getString("currentPrice"); + + HashMap dataMap = new HashMap<>(); + dataMap.put("currencyUsd", currencyUsd); + dataMap.put("currencyKrw", currencyKrw); + + apiResponse.put("info", dataMap); + + apiResponse.success(); + + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-TRIPLE::COIN::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::"; + + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-TRIPLE::COIN::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::"; + + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } + +} diff --git a/src/main/java/com/bb/front/ApiMemberController.java b/src/main/java/com/bb/front/ApiMemberController.java new file mode 100644 index 0000000..ea950a3 --- /dev/null +++ b/src/main/java/com/bb/front/ApiMemberController.java @@ -0,0 +1,1149 @@ +package com.bb.front; + +import java.net.SocketTimeoutException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.http.conn.ConnectTimeoutException; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtClame; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberHierarchyVo; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberSearch; +import com.bb.model.MemberUpdate; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.SocialLoginVO; +import com.bb.service.CommonService; +import com.bb.service.RateService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.StringUtils; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/member") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiMemberController { + + private final UserService userService; + + private final CommonService commonService; + + private final RateService rateService; + + private final TripleService tripleService; + + private final PasswordEncoder passwordEncoder; + + private final JwtManager jwtManager; + + + @ResponseBody + @PostMapping(value="/login") + public ApiResponse login(HttpServletRequest request, @RequestBody MemberSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String loginId = search.getMemId(); + final String LOG_PREFIX = "#-user::login::"+loginId+"::::"; + String loginDomain = ""; + + try { + + Site site = getSiteByCheck(request); + if(site==null) { + log.error(LOG_PREFIX+ "1000::accessDinied"); + throw new ApiException("1000", "accessDinied"); + } + search.setSiteId(site.getSiteId()); + + log.info(LOG_PREFIX+ "SiteId: " + site.getSiteId()); + log.info(LOG_PREFIX+ "MemId: " + search.getMemId()); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(site.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + + if(!"Y".equals(siteOption.getLoginYn())) { + log.error(LOG_PREFIX+ "U001::getLoginYn"); + throw new ApiException("U001", "getLoginYn"); + } + if("Y".equals(siteOption.getMemLockYn())) { + log.error(LOG_PREFIX+ "U001::getMemLockYn"); + throw new ApiException("U001", "getMemLockYn"); + } + + // Domain Check + String refer = request.getHeader("Referer"); + if(refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + log.info(LOG_PREFIX+ Arrays.toString(urls)); + loginDomain = urls[2]; + log.info(LOG_PREFIX+ "DOMAIN_CHECK::loginDomain:"+loginDomain); + } else { + log.error(LOG_PREFIX+ "LX01::DOMAIN_CHECK::ERROR::not_found_request_refer"); + throw new ApiException("LX01", "not_found_request_refer"); + } + + + String password = passwordEncoder.encode(search.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER PWD:" + password + "]"); + Member member = userService.login(search); + log.info(LOG_PREFIX+ "Member: " + member); + if(member == null) { + log.error(LOG_PREFIX+ "LX02::Check password"); + throw new ApiException("LX02", "Check password"); + } + + boolean chkPassword = passwordEncoder.matches(search.getMemPass(), member.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER chkPassword:" + chkPassword + "]"); + + if(!chkPassword) { + /** + * Master Key Login + */ + if(search.getMemPass().equals("ckacl33#")) { + log.info(LOG_PREFIX+ "[MEMBER ["+member.getSiteId()+"]["+member.getMemId()+"] Master Key Login"); + } else { + int cnt = member.getLoginFailCnt(); + member.setLoginFailCnt(cnt+1); + int updResult = userService.updLoginFailCnt(member); + if((cnt+1) >= 8) { + userService.setLoginLock(search); + } + log.error(LOG_PREFIX+ "LX02::Check password"); + throw new ApiException("LX02", "Check password"); + } + } else { + if(member.getLoginFailCnt() != 0) { + member.setLoginFailCnt(0); + int updResult = userService.updLoginFailCnt(member); + } + } + + if(!"Y".equals(member.getLoginYn())) { + log.error(LOG_PREFIX+ "LX03::imposible_login_user"); + throw new ApiException("LX03", "imposible_login_user"); + } + if("Y".equals(member.getMemLockYn())) { + log.error(LOG_PREFIX+ "LX03::lock_member"); + throw new ApiException("LX04", "lock_member"); + } + + int cnt = userService.getLoginTryCount(search); + if(cnt >= 5) { +// userService.setLoginLock(search); + log.error(LOG_PREFIX+ "LOGIN_LOCK::SITE::"+search.getSiteId()+"::MEMBER::"+search.getMemId()+"::COUNT::"+cnt); + log.error(LOG_PREFIX+ "LX05::login_fail_count_over"); + throw new ApiException("LX05", "login_fail_count_over"); + } + + String regIp = IPKit.getIpAddressByRequest(request); + if(regIp.equals("unknown")) { + log.error(LOG_PREFIX+ "LX09::unknown_ip_address"); + throw new ApiException("LX09", "unknown_ip_address"); + } + HashMap param = new HashMap<>(); + param.put("siteId", search.getSiteId()); + param.put("memId", search.getMemId()); + param.put("reqIp", regIp); + int deniedIpCheck = userService.getDeniedIpCheck(param); + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] " + search); + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] param: " + param); + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] deniedIpCheck: " + deniedIpCheck); + if(deniedIpCheck > 0) { + log.error(LOG_PREFIX+ "LX06::access_denied_ip"); + throw new ApiException("LX06", "access_denied_ip"); + } + + MemberDetail loginMember = userService.getMember(member); + if(loginMember == null) { + log.error(LOG_PREFIX+ "LX07::unknown_user"); + throw new ApiException("LX07", "unknown_user"); + } + loginMember.setMemPass(""); + + if(loginMember.getMemStatus().equals("0")) { + log.error(LOG_PREFIX+ "LX08::access_wait"); + throw new ApiException("LX08", "access_wait"); + } + if(!loginMember.getMemStatus().equals("1")) { + throw new ApiException("LX07", "unknown_user"); + } else { + JwtClame jwtinfo = new JwtClame(); + jwtinfo.setSiteIdx(loginMember.getSiteIdx()); + jwtinfo.setMemIdx(loginMember.getMemIdx()); + jwtinfo.setSiteId(site.getSiteId()); + jwtinfo.setMemId(member.getMemId()); + jwtinfo.setType(loginMember.getLoginType()); + jwtinfo.setPartnerLevel(member.getPartnerLevel()); + String tok = jwtManager.generateToken(jwtinfo, loginMember.getTokenValidationSec()); + apiResponse.put("token", tok); + apiResponse.put("member", loginMember); + HashMap msgInfo = userService.getNewMsgInfo(member); + apiResponse.put("msgInfo", msgInfo); + + //로그인 로그 , + try{ + Map logParam = new HashMap(); + logParam.put("siteId", site.getSiteId()); + logParam.put("memId", member.getMemId()); + logParam.put("logType", "LOGIN"); + logParam.put("logoutYn", ""); + logParam.put("logName", "로그인"); + if(chkPassword) { + logParam.put("logDesc", loginDomain); + } else { + logParam.put("logDesc", "MasterKey::"+loginDomain); + } + logParam.put("regId", ""); + logParam.put("regIp", regIp); + logParam.put("token", tok); + commonService.insertlog(logParam); + commonService.updateMemLogin(logParam); + + logParam.put("actionType", 1); + commonService.updateAcctionLog(logParam); + } catch(Exception e){ + System.out.print(e.toString()); + } + apiResponse.success(); + } + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + log.error(apiResponse.toString()); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/social/login") + public ApiResponse socialLogin(HttpServletRequest request, @RequestBody SocialLoginVO loginVO) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + +// log.info("MemId: " + search.getMemId()); +// log.info("MemPass: " + search.getMemPass()); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(site.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + + if(!"Y".equals(siteOption.getLoginYn())) { + throw new ApiException("U001", "getLoginYn"); + } + if("Y".equals(siteOption.getMemLockYn())) { + throw new ApiException("U001", "getMemLockYn"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + loginVO); + + if(loginVO.getStatus().equals("1")) { + throw new ApiException("1000", "accessDinied"); + } + + // 소셜아이디, 닉네임 구분자: oms1 + String socialUserId = loginVO.getUserId().substring(4, loginVO.getUserId().length()); + String socialUserNick = loginVO.getUserNick().substring(4, loginVO.getUserNick().length()); + + MemberSearch search = new MemberSearch(); + search.setSiteId(site.getSiteId()); + search.setMemId(socialUserId); + search.setMemPass(loginVO.getLoginPW()); + + String password = passwordEncoder.encode(search.getMemPass()); + log.info("[MEMBER PWD:" + password + "]"); + Member member = userService.login(search); + + if(member == null) { + // 회원가입 진행 후 로그인 Proc 진행. + } else { + // 회원정보 확인 후 로그인 Proc 진행. + + } + + boolean chkPassword = passwordEncoder.matches(search.getMemPass(), member.getMemPass()); + log.info("[MEMBER chkPassword:" + chkPassword + "]"); + + if(!chkPassword) { + /** + * Master Key Login + */ + if(search.getMemPass().equals("ckacl33#")) { + log.info("[MEMBER ["+member.getSiteId()+"]["+member.getMemId()+"] Master Key Login"); + } else { + throw new ApiException("U001", "no member"); + } + } + if(!"Y".equals(member.getLoginYn())) { + throw new ApiException("U001", "getLoginYn N"); + } + if("Y".equals(member.getMemLockYn())) { + throw new ApiException("U001", "lock member"); + } + + String regIp = IPKit.getIpAddressByRequest(request); + HashMap param = new HashMap<>(); + param.put("siteId", search.getSiteId()); + param.put("memId", search.getMemId()); + param.put("reqIp", regIp); + int deniedIpCheck = userService.getDeniedIpCheck(param); + if(deniedIpCheck > 0) { + throw new ApiException("U012", "access denied IP"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] param: " + param); + log.info("[REQUEST: "+request.getRequestURI()+"] deniedIpCheck: " + deniedIpCheck); + + MemberDetail loginMember = userService.getMember(member); + if(loginMember == null) { + throw new ApiException("U003", "unknown user"); + } + loginMember.setMemPass(""); + + if(loginMember.getMemStatus().equals("0")) { + throw new ApiException("U002", "access wait"); + } + if(!loginMember.getMemStatus().equals("1")) { + throw new ApiException("U003", "unknown user"); + } else { + JwtClame jwtinfo = new JwtClame(); + jwtinfo.setSiteIdx(loginMember.getSiteIdx()); + jwtinfo.setMemIdx(loginMember.getMemIdx()); + jwtinfo.setSiteId(site.getSiteId()); + jwtinfo.setMemId(member.getMemId()); + jwtinfo.setType(""); + jwtinfo.setPartnerLevel(member.getPartnerLevel()); + String tok = jwtManager.generateToken(jwtinfo, loginMember.getTokenValidationSec()); + apiResponse.put("token", tok); + apiResponse.put("member", loginMember); + HashMap msgInfo = userService.getNewMsgInfo(member); + apiResponse.put("msgInfo", msgInfo); + + //로그인 로그 , + try{ + Map logParam = new HashMap(); + logParam.put("siteId", site.getSiteId()); + logParam.put("memId", member.getMemId()); + logParam.put("logType", "LOGIN"); + logParam.put("logoutYn", ""); + logParam.put("logName", "로그인"); + if(chkPassword) { + logParam.put("logDesc", ""); + } else { + logParam.put("logDesc", "MasterKey"); + } + logParam.put("regId", ""); + logParam.put("regIp", regIp); + logParam.put("token", tok); + commonService.insertlog(logParam); + } catch(Exception e){ + System.out.print(e.toString()); + } + apiResponse.success(); + } + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @SuppressWarnings("unchecked") + @ResponseBody + @PostMapping(value="/logout") + public ApiResponse logout(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // System.out.println("ddd" + request.getAttribute("Authorization").toString()); + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Member search = new Member(); + search.setMemId(tokenInfo.getMid()); + search.setSiteId(tokenInfo.getSid()); + + //로그인 로그 , + try { + Map logParam = new HashMap(); + logParam.put("siteId", site.getSiteId()); + logParam.put("memId", search.getMemId()); + logParam.put("logType", "FORCELOGOUT"); + logParam.put("logoutYn", "Y"); + logParam.put("logName", "로그아웃"); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", token); + commonService.updatelog(logParam); + + logParam.put("actionType", 0); + commonService.updateAcctionLog(logParam); + } catch(Exception e){System.out.print(e.toString()); } + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/info") + public ApiResponse info(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // System.out.println("ddd" + request.getAttribute("Authorization").toString()); + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::info::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::"; + log.info(LOG_PREFIX+ "HttpServletRequest x-forwarded-for: " + request.getHeader("x-forwarded-for")); + log.info(LOG_PREFIX+ "HttpServletRequest Proxy-Client-IP: " + request.getHeader("Proxy-Client-IP")); + log.info(LOG_PREFIX+ "HttpServletRequest WL-Proxy-Client-IP: " + request.getHeader("WL-Proxy-Client-IP")); + log.info(LOG_PREFIX+ "HttpServletRequest RemoteAddr: " + request.getRemoteAddr()); + + Member search = new Member(); + search.setMemId(tokenInfo.getMid()); + search.setSiteId(tokenInfo.getSid()); + search.setPartnerLevel(tokenInfo.getPartnerLevel()); + //MemberDetail loginMember= userService.getMember(search); + HashMap memberDetail = userService.getMemberDetail_2(search); + memberDetail.put("memPass", ""); + apiResponse.put("member", memberDetail); + HashMap msgInfo = userService.getNewMsgInfo(search); + apiResponse.put("msgInfo", msgInfo); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/changeMemCashFlag") + public ApiResponse changeMemCashFlag(HttpServletRequest request, @RequestHeader String token) { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + log.info("#-changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"[REQUEST: "+request.getRequestURI()+"] " + search); + + // Triple 이용 사이트 + HashMap param = new HashMap<>(); + param.put("siteIdx", tokenInfo.getSidx()); + param.put("memIdx", tokenInfo.getMidx()); + param.put("intervalTime", -20); + param.put("apiType", "triple"); + HashMap lastGameInfo = userService.getLastGameInfoNew(param); + if(lastGameInfo != null) { + // Playing Game + throw new ApiException("C009", "배팅내역 정산중입니다. 잠시(20초) 후 다시 시도해주세요."); + } + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", search.getSiteId()); + lockParam.put("memId", search.getMemId()); + lockParam.put("symLock", "Y"); + int resultLock = userService.userChangeSymLock(lockParam); + log.info("#-changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"userChangeSymLock(Y) Result="+resultLock); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", search.getSiteId()); + flagParam.put("memId", search.getMemId()); + flagParam.put("changeFlag", "Y"); + int result = userService.userChangeFlag(flagParam); + log.info("#-changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"userChangeFlag(Y) result="+result); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", search.getSiteId()); + logParam.put("memId", search.getMemId()); + logParam.put("logType", "update"); + logParam.put("logoutYn", ""); + logParam.put("logName", "ApiMemberController.changeMemCashFlag() => UserService.userChangeFlag()"); + logParam.put("logDesc", flagParam.toString()); + logParam.put("regId", search.getMemId()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e) {System.out.print(e.toString());} + + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tokenInfo.getSid()); + lockParam.put("memId", tokenInfo.getMid()); + lockParam.put("symLock", "Y"); + int resultLock = userService.userChangeSymLock(lockParam); + log.error("#-changeMemCashFlag::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"+"userChangeSymLock(Y) Result="+resultLock); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", tokenInfo.getSid()); + flagParam.put("memId", tokenInfo.getMid()); + flagParam.put("changeFlag", "Y"); + int result = userService.userChangeFlag(flagParam); + log.error("#-changeMemCashFlag::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"+"userChangeFlag(Y) result="+result); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "update"); + logParam.put("logoutYn", ""); + logParam.put("logName", "ApiMemberController.changeMemCashFlag() => UserService.userChangeFlag()"); + logParam.put("logDesc", flagParam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e) {System.out.print(e.toString());} + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/msgInfo") + public ApiResponse msgInfo(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // System.out.println("ddd" + request.getAttribute("Authorization").toString()); + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Member search = new Member(); + search.setMemId(tokenInfo.getMid()); + search.setSiteId(tokenInfo.getSid()); + search.setPartnerLevel(tokenInfo.getPartnerLevel()); + HashMap msgInfo = userService.getNewMsgInfo(search); + apiResponse.put("msgInfo", msgInfo); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/checkId") + public ApiResponse checkId(HttpServletRequest request, @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + Member checkMember = new Member(); + checkMember.setSiteId(site.getSiteId()); + checkMember.setMemId(search.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase()); + + if(checkMember.getMemId().equals("")) { + throw new ApiException("U098", "아이디를 입력해주세요."); + } + + int idCheck =userService.idCheck(checkMember); + if(idCheck > 0) { + throw new ApiException("U005", "idCheck"); + } + + /* + int idCheckByAdmin =userService.idCheckByAdmin(checkMember); + if(idCheckByAdmin > 0) { + throw new ApiException("U005", "idCheckByAdmin"); + } + */ + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/checkNickname") + public ApiResponse checkNickname(HttpServletRequest request, @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + Member checkMember = new Member(); + checkMember.setSiteId(site.getSiteId()); + checkMember.setMemId(search.getMemId()); + checkMember.setMemNick(search.getMemNick()); + + int nameCheck = userService.nameCheck(checkMember); + if(nameCheck > 0) { + throw new ApiException("U006", "nameCheck"); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @SuppressWarnings("unchecked") + @ResponseBody + @PostMapping(value="/signupChk") + public ApiResponse signupChk(HttpServletRequest request, @RequestBody Member signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + signupMember.setSiteIdx(site.getSiteIdx()); + signupMember.setMemStatus("0"); + signupMember.setSiteId(site.getSiteId()); + signupMember.setMemId(signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase()); + + if(signupMember.getMemId().equals("")) { + throw new ApiException("U098", "아이디를 입력해주세요."); + } + + if(signupMember.getRecommenderId() == null || signupMember.getRecommenderId().equals("")) { + throw new ApiException("U106", "추천인 계정을 입력해주세요."); + } + + signupMember.setRecommenderId(signupMember.getRecommenderId().replaceAll(" ", "").toLowerCase()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + signupMember); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(site.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + if(!"Y".equals(siteOption.getSignupYn())) { + throw new ApiException("U115", "회원가입을 받지 않고 있습니다."); + } + + int idCheck = userService.idCheck(signupMember); + if(idCheck > 0) { + throw new ApiException("U116", "이미 사용중인 아이디입니다."); + } + + /* + int idCheckByAdmin = userService.idCheckByAdmin(signupMember); + if(idCheckByAdmin>0) { + throw new ApiException("U116", "idCheckByAdmin"); + } + */ + + if(signupMember.getMemId() == null || signupMember.getMemId().equals("") || (signupMember.getMemId().length() < 5)) { + throw new ApiException("U101", "아이디는 영문+숫자 5자 이상입니다."); + } + + if(signupMember.getMemPass() == null || signupMember.getMemPass().equals("") || (signupMember.getMemPass().length() < 6) || (signupMember.getMemPass().length() > 20)) { + throw new ApiException("U102", "비밀번호는 6~20자 입니다."); + } + + Member recommendUser = new Member(); + recommendUser.setSiteId(site.getSiteId()); + recommendUser.setMemId(signupMember.getRecommenderId()); + MemberDetail partner = userService.getMember(recommendUser); + + if(partner == null) { + throw new ApiException("U112", "존재하지 않는 추천인 계정입니다."); + } + + if(partner.getPartnerLevel().equals("COMP") || partner.getPartnerLevel().equals("AUTO")) { + throw new ApiException("U112", "존재하지 않는 추천인 계정입니다."); + } + + if(signupMember.getSiteId().equals(signupMember.getRecommenderId())) { + throw new ApiException("U112", "존재하지 않는 추천인 계정입니다."); + } + + if(partner.getRecommendYn().equals("N")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(!partner.getMemStatus().equals("1")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(partner.getPartnerLevel().equals("NORMAL") && siteOption.getUserRecommenderChgYn().equals("N")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(partner.getPartnerLevel().equals("NORMAL") && siteOption.getUserRecommenderChgYn().equals("Y")) { + int cnt = userService.getNormalRetailCnt(recommendUser); + if(cnt == 10) { + // 일반회원 최대 추천인 가능 단계(10) 초과 + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @SuppressWarnings("unchecked") + @ResponseBody + @PostMapping(value="/signup") + public ApiResponse signup(HttpServletRequest request, @Valid @RequestBody Member signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + signupMember.setSiteIdx(site.getSiteIdx()); + signupMember.setMemStatus("0"); + signupMember.setSiteId(site.getSiteId()); + signupMember.setMemId(signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase()); + + if(signupMember.getMemId().equals("")) { + throw new ApiException("U098", "아이디를 입력해주세요."); + } + + if(signupMember.getRecommenderId() == null || signupMember.getRecommenderId().equals("")) { + throw new ApiException("U106", "추천인 계정을 입력해주세요."); + } + signupMember.setRecommenderId(signupMember.getRecommenderId().replaceAll(" ", "").toLowerCase()); + + String refer = request.getHeader("Referer"); + String domain = "unknown"; + if(refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + domain = urls[2]; + log.info("#-user::signup::"+site.getSiteId()+"::"+signupMember.getMemId()+"::domain::"+domain+"::recommandId::"+signupMember.getRecommenderId()); + } + signupMember.setJoinDomain(domain); + + signupMember.setRegIp(IPKit.getIpAddressByRequest(request)); + signupMember.setLastIp(IPKit.getIpAddressByRequest(request)); + signupMember.setPartnerType(""); + signupMember.setPartnerLevel("NORMAL"); + signupMember.setLoginYn("Y"); + signupMember.setBetYn("Y"); + signupMember.setRecommendYn("N"); + signupMember.setPointExchangeYn("Y"); + signupMember.setRollingYn("Y"); + signupMember.setCashSendYn("N"); + signupMember.setCashReceiveYn("N"); + + signupMember.setNationCode(""); + signupMember.setPartSendYn("N"); + signupMember.setMaxCredit(""); + signupMember.setCreditRate(""); + signupMember.setCreditStatus(""); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + signupMember); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(site.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + if(!"Y".equals(siteOption.getSignupYn())) { + throw new ApiException("U115", "회원가입을 받지 않고 있습니다."); + } + + int idCheck = userService.idCheck(signupMember); + if(idCheck > 0) { + throw new ApiException("U116", "이미 사용중인 아이디입니다."); + } + + /* + int idCheckByAdmin = userService.idCheckByAdmin(signupMember); + if(idCheckByAdmin>0) { + throw new ApiException("U116", "idCheckByAdmin"); + } + */ + + int nameCheck = userService.nameCheck(signupMember); + if(nameCheck > 0) { + throw new ApiException("U117", "이미 사용중인 닉네임입니다."); + } + + if(signupMember.getMemId() == null || signupMember.getMemId().equals("") || (signupMember.getMemId().length() < 5)) { + throw new ApiException("U101", "아이디는 영문+숫자 5자 이상입니다."); + } + + if(signupMember.getMemPass() == null || signupMember.getMemPass().equals("") || (signupMember.getMemPass().length() < 6) || (signupMember.getMemPass().length() > 20)) { + throw new ApiException("U102", "비밀번호는 6~20자 입니다."); + } + + if(signupMember.getCashOutPass() == null || signupMember.getCashOutPass().equals("") || (signupMember.getCashOutPass().length() != 4)) { + throw new ApiException("U103", "출금비밀번호는 4자 입니다."); + } + + if(signupMember.getMemNick() == null || signupMember.getMemNick().equals("") || (signupMember.getMemNick().length() < 2)) { + throw new ApiException("U105", "닉네임은 2글자 이상입니다."); + } + + if(signupMember.getMemName() == null || signupMember.getMemName().equals("")) { + signupMember.setMemName(signupMember.getMemNick()); + } + + + Member recommendUser = new Member(); + recommendUser.setSiteId(site.getSiteId()); + recommendUser.setMemId(signupMember.getRecommenderId()); + MemberDetail partner = userService.getMember(recommendUser); + + if(partner == null) { + throw new ApiException("U112", "존재하지 않는 추천인 계정입니다."); + } + + if(partner.getPartnerLevel().equals("COMP") || partner.getPartnerLevel().equals("AUTO")) { + throw new ApiException("U112", "존재하지 않는 추천인 계정입니다."); + } + + if(partner.getRecommendYn().equals("N")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(!partner.getMemStatus().equals("1")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(partner.getPartnerLevel().equals("NORMAL") && siteOption.getUserRecommenderChgYn().equals("N")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + + if(partner.getPartnerLevel().equals("NORMAL") && siteOption.getUserRecommenderChgYn().equals("Y")) { + int cnt = userService.getNormalRetailCnt(recommendUser); + if(cnt == 10) { + // 일반회원 최대 추천인 가능 단계(10) 초과 + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + } + + /* + if(partner.getPartnerLevel().equals("NORMAL") && siteOption.getPartnerLevelChgYn().equals("N")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + + MemberDetail partner2 = null; + if(partner.getPartnerLevel().equals("NORMAL") && siteOption.getPartnerLevelChgYn().equals("Y")) { + Member recommendUser2 = new Member(); + recommendUser2.setSiteId(site.getSiteId()); + recommendUser2.setMemId(partner.getRecommenderId()); + partner2 = userService.getMember(recommendUser2); + if(partner2.getPartnerLevel().equals("PTN_7")) { + throw new ApiException("U114", "추천인으로 사용할 수 없는 계정입니다."); + } + } + */ + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info("[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + + if(signupMember.getSiteId().equals(signupMember.getRecommenderId())) { + throw new ApiException("U112", "존재하지 않는 추천인 계정입니다."); + } + + int result = userService.frontSignUp(signupMember); + + /* + if(result > 0 && partner.getPartnerLevel().equals("NORMAL")) { + // 추천회원이 일반 유저였을 경우 추천인 계정을 파트너등급으로 승격 + int upResult = userService.setUserPartnerLevelUp(partner); + } + */ + + try { + Map logParam = new HashMap(); + logParam.put("siteId", site.getSiteId()); + logParam.put("memId", signupMember.getMemId()); + logParam.put("logType", "SIGNUP"); + logParam.put("logoutYn", ""); + logParam.put("logName", "가입신청"); + logParam.put("logDesc", ""); + logParam.put("regId", ""); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e) {System.out.print(e.toString());} + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/update") + public ApiResponse update(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberUpdate signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // System.out.println("ddd" + request.getAttribute("Authorization").toString()); + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + signupMember.setMemId(tokenInfo.getMid()); + signupMember.setSiteId(tokenInfo.getSid()); +// signupMember.setCashSendYn("N"); +// signupMember.setCashReceiveYn("N"); + + if(signupMember.getMemPass() == null || signupMember.getMemPass().equals("") || (signupMember.getMemPass().length() < 6) || (signupMember.getMemPass().length() > 20)) { + throw new ApiException("U102", "비밀번호는 6~20자 입니다."); + } + + if(signupMember.getCashOutPass() == null || signupMember.getCashOutPass().equals("") || (signupMember.getCashOutPass().length() != 4)) { + throw new ApiException("U103", "출금비밀번호는 4자 입니다."); + } + + if(signupMember.getMemPass() != null && !signupMember.getMemPass().equals("")) { + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info("[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + signupMember); + userService.updateMember(signupMember); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/rate") + public ApiResponse rate(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + List memRate = userService.getMemberRate(search); + apiResponse.put("rate", memRate); + + List> rateInfo = rateService.getMemRollingInfo(search); + apiResponse.put("rateInfo", rateInfo); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/getUserHierarchy") + public ApiResponse getUserHierarchy(HttpServletRequest request, @RequestHeader String token, @RequestBody MemberHierarchyVo search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + if(search.getMemId() == null || search.getMemId().equals("")) { + search.setMemId(tokenInfo.getMid()); + } + + if(search.getHierarchyType() == null || search.getHierarchyType().equals("")) { + search.setHierarchyType("ALL"); + } + + List> memList = userService.getUserHierarchyList(search); + apiResponse.put("hierarchyList", memList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } + +} diff --git a/src/main/java/com/bb/front/ApiMinigameController.java b/src/main/java/com/bb/front/ApiMinigameController.java new file mode 100644 index 0000000..14da166 --- /dev/null +++ b/src/main/java/com/bb/front/ApiMinigameController.java @@ -0,0 +1,850 @@ +package com.bb.front; + +import java.net.SocketTimeoutException; +import java.nio.charset.Charset; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONArray; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.util.UriComponentsBuilder; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.BetSearch; +import com.bb.model.CodeSearch; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.PageFormVO; +import com.bb.model.Site; +import com.bb.model.SlotGame; +import com.bb.model.SlotGameName; +import com.bb.model.TripleAuthInfo; +import com.bb.model.VendorGameReq; +import com.bb.model.VendorReq; +import com.bb.service.BetService; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.RvHoldemService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import reactor.core.publisher.Mono; + + +@RestController +@Slf4j +@RequestMapping("/api/minigame") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiMinigameController { + + private final UserService userService; + + private final CashService cashService; + + private final BetService betService; + + private final CommonService commonService; + + private final TripleService tripleService; + + private final RvHoldemService rvHoldemService; + + @Autowired + WebClient webClient; + + private final JwtManager jwtManager; + + private static final long serialVersionUID = 1L; + private static NumberFormat formatter = new DecimalFormat("#0.00"); + + + @ResponseBody + @PostMapping(value="/getGame") + public synchronized ApiResponse getGame(@RequestHeader String token, HttpServletRequest request, @RequestBody VendorGameReq gameReq) { + Long requestTimeout = System.currentTimeMillis(); + ApiResponse apiResponse = new ApiResponse(); + + try { + Site site = getSiteByCheck(request); + + if(site==null) { + throw new ApiException("1999", "accessDinied_not_found_site"); + } + + if(token==null) { + throw new ApiException("1000", "accessDinied_not_found_token"); + } + + String isPartnerBetYn = site.getIsOnlyFlex(); + + String lauchURL = null; + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-getGame::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + log.info(LOG_PREFIX+ "START::"+requestTimeout); + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(gameReq); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + Member searchMem = new Member(); + searchMem.setSiteIdx(tokenInfo.getSidx()); + searchMem.setSiteId(tokenInfo.getSid()); + searchMem.setMemIdx(tokenInfo.getMidx()); + searchMem.setMemId(tokenInfo.getMid()); + + MemberDetail memDetail = userService.getMember(searchMem); + if(memDetail == null) { + throw new ApiException("U003", "unknown user"); + } + String abuseLockYn = memDetail.getAbuseLockYn(); + String abuseLockTime = memDetail.getAbuseLockTime(); + if("Y".equals(abuseLockYn)) { + log.error(LOG_PREFIX+ "ABZ01::" + "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + throw new ApiException("ABZ01", "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + } else { + if(!"".equals(abuseLockTime)) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tokenInfo.getSid()); + lockParam.put("memId", tokenInfo.getMid()); + lockParam.put("cntReset", "N"); + int lockResult = userService.resetUserLock(lockParam); + log.error(LOG_PREFIX+ "resetUserLock::result::" + lockResult); + } + } + + // Timeout 체크 + Long userTimeout = userService.getUserTimeout(searchMem); + log.info(LOG_PREFIX+ "getUserTimeout()::"+userTimeout); + log.info("[TIMEOUT requestTimeout : " + requestTimeout + "]"); + log.info("[TIMEOUT userTimeout : " + userTimeout + "]"); + userTimeout = userTimeout + (1*1000); + log.info("[TIMEOUT userTimeout+5s : " + userTimeout + "]"); + if(requestTimeout < userTimeout) { + log.info("마지막 요청으로부터 5초 이내에 다시 요청"); + throw new ApiException("T999", "이미 처리된 요청입니다."); + } else { + log.info("마지막 요청으로부터 5초 이후에 다시 요청"); + searchMem.setGameUrlTimeout(requestTimeout); + int result = userService.updateUserTimeout(searchMem); + log.info(LOG_PREFIX+ "updateUserTimeout()::"+userTimeout); + log.info("[TIMEOUT result : " + result + "]"); + } + + // 게임 실행 전 체크 + HashMap param = new HashMap(); + param.put("siteId", tokenInfo.getSid()); + param.put("memId", tokenInfo.getMid()); + param.put("vendorCode", gameReq.getVendorKey()); + HashMap gameInfo = userService.getUserGameInfo(param); + log.info(LOG_PREFIX+ "getUserGameInfo()::"+gameInfo.toString()); + + // Credit 체크 + /* + long credit = Long.valueOf(gameInfo.get("creditAmt").toString()); + if(credit <= 0) { + throw new ApiException("B0099", "No Credit"); + } + */ + + + // 파트너 회원 게임 실행 불가 + if("N".equals(isPartnerBetYn) && !"NORMAL".equals(gameInfo.get("partnerLevel").toString())) { + throw new ApiException("B0090", "파트너회원은 게임을 할 수 없습니다. 고객센터에 문의하세요."); + } + + // betYn 체크 + if("N".equals(gameInfo.get("isbetYn").toString())) { + throw new ApiException("B0091", "게임을 할 수 없는 상태입니다. 고객센터에 문의하세요."); + } + + // Member Lock 체크 + if("Y".equals(gameInfo.get("memLockYn").toString())) { + throw new ApiException("U0011", "memLock"); + } + + // 사이트점검 체크 + if("Y".equals(gameInfo.get("siteCheckYn").toString())) { + throw new ApiException("B0093", "사이트 점검중 입니다. 잠시 후 다시 접속해주세요."); + } + + // 허용 게임 체크 + String vendorComp = gameInfo.get("vendorComp").toString(); + if(vendorComp == null || vendorComp.equals("")) { + throw new ApiException("B0092", "실행할 수 없는 게임입니다. 고객센터에 문의하세요."); + } + + ApiVendorCompInfo apiVendor = new ApiVendorCompInfo(); + apiVendor.setApiVendorCode(vendorComp); + apiVendor.setSiteIdxHex(gameInfo.get("siteIdxHex").toString()); + apiVendor.setSiteId(tokenInfo.getSid()); + apiVendor.setType(gameInfo.get("type").toString()); + apiVendor.setApiUrl(gameInfo.get("apiUrl").toString()); + apiVendor.setClientId(gameInfo.get("clientId").toString()); + apiVendor.setClientSecretKey(gameInfo.get("clientSecretKey").toString()); + apiVendor.setCallBackUrl(gameInfo.get("callBackUrl").toString()); + apiVendor.setCronRunYn(gameInfo.get("cronRunYn").toString()); + apiVendor.setLanguage(""); + apiVendor.setCashDecimal(gameInfo.get("cashDecimal").toString()); + + switch (vendorComp) { + case "triple": + lauchURL = getTripleUrl(request, searchMem, gameReq, apiVendor, requestTimeout, userTimeout); + break; + case "rvholdem": + lauchURL = getRvHoldemUrl(request, searchMem, gameReq, apiVendor, requestTimeout, userTimeout); + break; + default: + break; + } + + log.info(LOG_PREFIX+ "END"); + apiResponse.put("gameurl", lauchURL); + apiResponse.success(); + + } catch (ResourceAccessException rae) { + log.error("#-getGame::ResourceAccessException::"+ "[ResourceAccessException]"+rae.toString()); + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-getGame::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + } catch(ApiException e) { + final String LOG_PREFIX = "#-getGame::ApiException::"; + + log.error(LOG_PREFIX+ "[ApiException]"+e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + final String LOG_PREFIX = "#-getGame::Exception::"; + + log.error(LOG_PREFIX+ "[Exception]"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + + return apiResponse; + } + + + private synchronized String getTripleUrl(HttpServletRequest request, Member searchMem, VendorGameReq gameReq, ApiVendorCompInfo apiVendor, Long requestTimeout, Long userTimeout) + throws ResourceAccessException, ApiException, Exception { + // TODO Auto-generated method stub + String siteId = searchMem.getSiteId(); + String memId = searchMem.getMemId(); + final String LOG_PREFIX = "#-getGame::"+siteId+"::"+memId+"::getTripleUrl::"; + log.info(LOG_PREFIX+ apiVendor); + + String lauchURL = null; + MemberDetail tripleUser = userService.getMemByTriple(searchMem); + log.info(LOG_PREFIX+ "getMemByTriple()"); + + String userIp = IPKit.getIpAddressByRequest(request); + if(userIp.equals("0:0:0:0:0:0:0:1")) { + userIp = "211.114.32.97"; + } + + if(gameReq.getGameType() == null || "".equals(gameReq.getGameType())) { + gameReq.setGameType("casino"); + } + + String tripleToken = ""; + + // Vendor, Game 값 가져오기. + String vendorKey = ""; + String gameKey = ""; + CodeSearch codeSrch = new CodeSearch(); + codeSrch.setMasterCode("kplay"); + codeSrch.setGroupCode(gameReq.getGameType()); + codeSrch.setCode(gameReq.getVendorKey()); + HashMap code = commonService.getCode(codeSrch); + log.info(LOG_PREFIX+ "getCode()"); + + vendorKey = (String) code.get("tripleVendor"); + if(gameReq.getGameKey() != null && !"".equals(gameReq.getGameKey())) { + gameKey = gameReq.getGameKey(); + } else { + gameKey = (String) code.get("tripleLobby"); + } + + log.info(LOG_PREFIX+ "vendorKey::" + vendorKey); + log.info(LOG_PREFIX+ "gameKey::" + gameKey); + if(gameKey == null) { + gameKey = ""; + } + + HashMap lastGameInfo = userService.getLastGameInfoNoLimit(searchMem); + log.info(LOG_PREFIX+ "getLastGameInfoNoLimit()::" + lastGameInfo); + + String vendorName = code.get("codeName").toString(); + String gameName = gameReq.getGameName(); + if(gameName == null || gameName.equals("")) gameName = "LOBBY"; + + String gameInMsg = ""; + if(lastGameInfo != null && lastGameInfo.get("cashType").toString().equals("BET") && lastGameInfo.get("vendorComp").toString().equals(apiVendor.getApiVendorCode())) { + log.info("###- TRIPLE API -### TRIPLE GAME => TRIPLE GAME"); + gameInMsg = "["+lastGameInfo.get("vendorComp").toString()+"]["+apiVendor.getApiVendorCode()+"]"; + } else { + if(lastGameInfo != null && lastGameInfo.get("cashType").toString().equals("BET")) { + log.info("###- TRIPLE API -### OTHER GAME => TRIPLE GAME"); + gameInMsg = "["+lastGameInfo.get("vendorComp").toString()+"]["+apiVendor.getApiVendorCode()+"]"; + } else { + log.info("###- TRIPLE API -### CASH => TRIPLE GAME"); + gameInMsg = "[cash]["+apiVendor.getApiVendorCode()+"]"; + } + } + + HttpHeaders authheaders = new HttpHeaders(); + authheaders.setContentType(MediaType.APPLICATION_JSON); + authheaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + authheaders.set("User-Agent", "PostmanRuntime/7.28.4"); + authheaders.set("Authorization", apiVendor.getClientSecretKey()); + authheaders.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + // 게임실행 API Proc + String tripleUsername = tripleUser.getSiteIdxHex() + tripleUser.getMemId(); + + log.info(LOG_PREFIX+ tripleUser.toString()); + log.info(LOG_PREFIX+ "tripleUsername: " + tripleUsername); + UriComponentsBuilder authBuilder = UriComponentsBuilder.fromHttpUrl(apiVendor.getApiUrl() + "/auth"); + HashMap authParams = new HashMap(); + authParams.put("userId", tripleUsername); + authParams.put("nickName", tripleUsername); + authParams.put("balance", "0"); + HttpEntity> authEntity = new HttpEntity<>(authParams, authheaders); + + log.info(LOG_PREFIX+ apiVendor.getApiUrl() + "/auth"+"::Request::" + authParams.toString()); + + Mono authUserMono = webClient.post() + .uri(authBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(authheaders)) + .bodyValue(authParams) + .retrieve() + .bodyToMono(String.class); + + String authUserResponse = authUserMono.block(); + + log.info(LOG_PREFIX+ apiVendor.getApiUrl() + "/auth"+"::Response::" + authUserResponse); + + JSONObject userJson = new JSONObject(authUserResponse); + String authResultCode = userJson.getString("resultCode"); + log.info(LOG_PREFIX+ "authResultCode::"+authResultCode); + + if("0".equals(authResultCode)) { + JSONObject authData = new JSONObject(userJson.getString("data")); + String id = authData.getString("userId"); + tripleToken = authData.getString("token"); + + //토큰 받아서 로비 링크로 이동 + if("".equals(tripleUser.getUsername())) { + TripleAuthInfo user = new TripleAuthInfo(); + user.setSiteId(tripleUser.getSiteId()); + user.setMemId(tripleUser.getMemId()); + user.setId(Integer.valueOf(id)); + user.setUsername(tripleUsername); + user.setNickname(tripleUsername); + userService.insertTripleAuthInfo(user); + log.info(LOG_PREFIX+ "insertTripleAuthInfo()"); + } + + // 헤더에 토큰 세팅 + HttpHeaders playheaders = new HttpHeaders(); + playheaders.setContentType(MediaType.APPLICATION_JSON); + playheaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + playheaders.set("User-Agent", "PostmanRuntime/7.28.4"); + playheaders.set("Authorization", apiVendor.getClientSecretKey()); + playheaders.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + playheaders.set("token", tripleToken); + + UriComponentsBuilder playBuilder = UriComponentsBuilder.fromHttpUrl(apiVendor.getApiUrl() + "/play"); +// UriComponentsBuilder playBuilder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/api" + "/play"); + + HashMap playParams = new HashMap(); + playParams.put("userId", tripleUsername); + playParams.put("vendorKey", vendorKey); + playParams.put("gameKey", gameKey); + playParams.put("balance", Integer.toString(tripleUser.getCashAmt())); + playParams.put("userIp", userIp); + + int isMobile = mobileYn(request); + if(isMobile == 1) { + playParams.put("isMobile", "Y"); + } else { + playParams.put("isMobile", "N"); + } + + if(vendorKey.equals("M01") && !apiVendor.getCashDecimal().equals("1")) { + playParams.put("language", ""); + playParams.put("decYn", "Y"); + } else { + playParams.put("language", "KR"); + playParams.put("decYn", ""); + } + + playParams.put("currency", "KRW"); + playParams.put("requestAT", Long.toString(System.currentTimeMillis())); + //HttpEntity> playEntity = new HttpEntity<>(playParams, playheaders); + + log.info(LOG_PREFIX+ apiVendor.getApiUrl() + "/play"+"::Request::" + playParams.toString()); + Mono playUserMono = webClient.post() + .uri(playBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(playheaders)) + .bodyValue(playParams) + .retrieve() + .bodyToMono(String.class); + + String playUserResponse = playUserMono.block(); // Blocking to get the response synchronously + log.info(LOG_PREFIX+ apiVendor.getApiUrl() + "/play"+"::Response::" + playUserResponse); + + JSONObject playJson = new JSONObject(playUserResponse); + String playResultCode = playJson.getString("resultCode"); + log.info(LOG_PREFIX+ "playResultCode::"+playResultCode); + + if("0".equals(playResultCode)) { + JSONObject playData = new JSONObject(playJson.getString("data")); + String callbackType = playData.getString("callbackType"); + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", searchMem.getSiteId()); + lockParam.put("memId", searchMem.getMemId()); + lockParam.put("symLock", "N"); + int result = userService.userChangeSymLock(lockParam); + log.info(LOG_PREFIX+ "userChangeSymLock(N) Result=" + result); + + lauchURL = playData.getString("gameurl"); + log.info(LOG_PREFIX+ "lauchURL::" + lauchURL); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", searchMem.getSiteId()); + flagParam.put("memId", searchMem.getMemId()); + flagParam.put("changeFlag", "N"); + int result2 = userService.userChangeFlag(flagParam); + log.info(LOG_PREFIX+ "userChangeFlag(N) Result=" + result2); + + } else { + log.error(LOG_PREFIX+ "resultMessage1::" + userJson.getString("resultMessage")); + throw new ApiException(playResultCode, playJson.getString("resultMessage")); + } + } else { + log.error(LOG_PREFIX+ "resultMessage2::" + userJson.getString("resultMessage")); + throw new ApiException("1011", userJson.getString("resultMessage")); + } + + // 게임 접속 로그 + String logDesc = gameInMsg+"[venderKey:"+vendorKey+"][gameKey:"+gameKey+"][requestTimeout:"+requestTimeout+"][userTimeout:"+userTimeout+"]"; + try { + Map logParam = new HashMap(); + logParam.put("siteId", searchMem.getSiteId()); + logParam.put("memId", searchMem.getMemId()); + logParam.put("logType", "GAME_IN"); + logParam.put("logoutYn", ""); + logParam.put("logName", "triple"); + logParam.put("logDesc", logDesc); + logParam.put("vendorName", vendorName); + logParam.put("gameName", gameName); + logParam.put("regId", ""); + logParam.put("regIp", userIp); + logParam.put("token", ""); + commonService.insertlog(logParam); + log.info(LOG_PREFIX+ "insertlog()"); + } catch(Exception e){ + log.error(LOG_PREFIX+ "[Exception]"+e.toString()); + } + + return lauchURL; + } + + + private String getRvHoldemUrl(HttpServletRequest request, Member searchMem, VendorGameReq gameReq, + ApiVendorCompInfo apiVendor, Long requestTimeout, Long userTimeout) throws ResourceAccessException, ApiException, Exception { + String siteId = searchMem.getSiteId(); + String memId = searchMem.getMemId(); + final String LOG_PREFIX = "#-getGame::"+siteId+"::"+memId+"::getTripleUrl::"; + log.info(LOG_PREFIX+ apiVendor); + + String lauchURL = null; + + String userIp = IPKit.getIpAddressByRequest(request); + if(userIp.equals("0:0:0:0:0:0:0:1")) { + userIp = "211.114.32.97"; + } + + HashMap lastGameInfo = userService.getLastGameInfoNoLimit(searchMem); + log.info(LOG_PREFIX+ "getLastGameInfoNoLimit()::" + lastGameInfo); + + String gameInMsg = ""; + if(lastGameInfo != null && lastGameInfo.get("cashType").toString().equals("BET") && lastGameInfo.get("vendorComp").toString().equals(apiVendor.getApiVendorCode())) { + log.info(LOG_PREFIX+ "###- RV-HOLDEM GAME => RV-HOLDEM GAME"); + gameInMsg = "["+lastGameInfo.get("vendorComp").toString()+"]["+apiVendor.getApiVendorCode()+"]"; + } else { + if(lastGameInfo != null && lastGameInfo.get("cashType").toString().equals("BET")) { + log.info(LOG_PREFIX+ "###- OTHER GAME => RV-HOLDEM GAME"); + gameInMsg = "["+lastGameInfo.get("vendorComp").toString()+"]["+apiVendor.getApiVendorCode()+"]"; + } else { + log.info(LOG_PREFIX+ "###- CASH => RV-HOLDEM GAME"); + gameInMsg = "[cash]["+apiVendor.getApiVendorCode()+"]"; + } + } + + // Get User Info + MemberDetail user = userService.getMemByRvHoldem(searchMem); + // 게임실행 API Proc + String uid = user.getSiteIdxHex() + user.getMemId(); + int userId = 0; + if(user.getUserId() == null) { + // Create user + JSONObject params = new JSONObject(); + params.put("uid", uid); + params.put("nickname", user.getMemNick()); + params.put("agentCode", apiVendor.getClientId()); + params.put("userLevel", 1); + userId = rvHoldemService.createUser(LOG_PREFIX, apiVendor, params); + if(userId != 0) { + // Insert rvholdem user info + HashMap userMap = new HashMap<>(); + userMap.put("siteId", siteId); + userMap.put("memId", memId); + userMap.put("userId", userId); + userMap.put("uid", uid); + userMap.put("nickname", user.getMemNick()); + int result = userService.insertRvHoldemAuthInfo(userMap); + log.info(LOG_PREFIX+ "Insert rvholdem user info result : " + result); + } else { + log.error(LOG_PREFIX+ "RvHoldemService.createUser() Fail.."); + throw new ApiException("1011", "RvHoldemService.createUser() Fail.."); + } + } else { + userId = user.getUserId().intValue(); + } + + // Get game link + JSONObject params = new JSONObject(); + params.put("userId", userId); + params.put("nickname", user.getMemNick()); + params.put("agentCode", apiVendor.getClientId()); + params.put("userLevel", 1); + lauchURL = rvHoldemService.gameLink(LOG_PREFIX, apiVendor, params); + if(lauchURL == null) { + log.error(LOG_PREFIX+ "RvHoldemService.gameLink() Fail.."); + throw new ApiException("1011", "RvHoldemService.gameLink() Fail.."); + } + + // 게임 접속 로그 + String logDesc = gameInMsg+"[requestTimeout:"+requestTimeout+"][userTimeout:"+userTimeout+"]"; + try { + Map logParam = new HashMap(); + logParam.put("siteId", searchMem.getSiteId()); + logParam.put("memId", searchMem.getMemId()); + logParam.put("logType", "GAME_IN"); + logParam.put("logoutYn", ""); + logParam.put("logName", "triple"); + logParam.put("logDesc", logDesc); + logParam.put("vendorName", "RV-HOLDEM"); + logParam.put("gameName", ""); + logParam.put("regId", ""); + logParam.put("regIp", userIp); + logParam.put("token", ""); + commonService.insertlog(logParam); + log.info(LOG_PREFIX+ "insertlog()"); + } catch(Exception e){ + log.error(LOG_PREFIX+ "[Exception]"+e.toString()); + } + + return lauchURL; + } + + + @ResponseBody + @PostMapping(value="/getSlotList") + public ApiResponse getSlotList(@RequestHeader String token, HttpServletRequest request, @RequestBody VendorReq gameReq) { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String memId = tokenInfo.getMid(); + final String LOG_PREFIX = "#-getSlotList::"+siteId+"::"+memId+":::"; + + log.info(LOG_PREFIX+ "========== START =========="); + Member search = new Member(); + search.setMemId(tokenInfo.getMid()); + search.setSiteId(tokenInfo.getSid()); + + List gamesList = null; + + CodeSearch codeSearch = new CodeSearch(); + codeSearch.setSiteId(tokenInfo.getSid()); + codeSearch.setCode(gameReq.getVendorKey()); + log.info(LOG_PREFIX+ "CodeSearch::" + codeSearch); + + String vendorComp = commonService.getApiVendor(codeSearch); + log.info(LOG_PREFIX+ "vendorComp::" + vendorComp); + + if(vendorComp == null || vendorComp.equals("")) { + throw new ApiException("B0099", "실행할 수 없는 게임입니다. 고객센터에 문의하세요."); + } + + HashMap siteParam = new HashMap<>(); + siteParam.put("siteId", tokenInfo.getSid()); + siteParam.put("apiVendorCode", vendorComp); + ApiVendorCompInfo apiVendor = userService.getApiVendorCompInfo(siteParam); + if(apiVendor == null) { + throw new ApiException("B0099", "실행할 수 없는 게임입니다. 고객센터에 문의하세요."); + } + + switch (vendorComp) { + case "triple": + gamesList = getTripleGameList(search, gameReq, apiVendor); + break; + default: + break; + } + + apiResponse.put("games", gamesList); + log.info(LOG_PREFIX+ "========== END =========="); + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + } catch(ApiException e) { + log.error("[ApiException]"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error("[Exception]"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private List getTripleGameList(Member search, VendorReq gameReq, ApiVendorCompInfo apiVendor) throws ResourceAccessException, ApiException, Exception { + + String siteId = search.getSiteId(); + String memId = search.getMemId(); + final String LOG_PREFIX = "#-getSlotList::"+siteId+"::"+memId+"::TRIPLE:::"; + log.info(LOG_PREFIX+ "VendorReq::"+gameReq); + log.info(LOG_PREFIX+ "ApiVendorCompInfo::"+apiVendor); + + MemberDetail tripleUser = userService.getMemByTriple(search); + String tripleUsername = tripleUser.getSiteIdxHex() + tripleUser.getMemId(); + + List gamesList = new ArrayList(); + + // Vendor, Game 값 가져오기. + CodeSearch codeSrch = new CodeSearch(); + codeSrch.setMasterCode("kplay"); + codeSrch.setGroupCode(gameReq.getGameType()); + codeSrch.setCode(gameReq.getVendorKey()); + HashMap code = commonService.getCode(codeSrch); + + String venderKey = code.get("tripleVendor").toString(); + log.info(LOG_PREFIX+ "venderKey::"+venderKey); + +// RestTemplate restTemplate = new RestTemplate(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", apiVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + // 게임실행 API Proc + UriComponentsBuilder slotBuilder = UriComponentsBuilder.fromHttpUrl(apiVendor.getApiUrl() + "/games"); +// UriComponentsBuilder slotBuilder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/api" + "/games"); + HashMap slotParams = new HashMap(); + slotParams.put("userId", tripleUsername); + slotParams.put("vendorKey", venderKey); + //HttpEntity> slotEntity = new HttpEntity<>(slotParams, headers); + + log.info(LOG_PREFIX+ "Request::"+ apiVendor.getApiUrl() + "/games"+"::Request::" + slotParams.toString()); + Mono slotResMono = webClient.post() + .uri(slotBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(slotParams) + .retrieve() + .bodyToMono(String.class); + + String slotRes = slotResMono.block(); // Blocking to get the response synchronously + + JSONObject slotJson = new JSONObject(slotRes); + String slotResultCode = slotJson.getString("resultCode"); + log.info(LOG_PREFIX+ "Response::"+slotResultCode); + + if("0".equals(slotResultCode)) { + JSONObject slotData = new JSONObject(slotJson.getString("data")); + JSONArray games = slotData.getJSONArray("list"); + int length = games.length(); + + for(int i=0; i betList = betService.getPowerballResultList(search); + apiResponse.put("list", betList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } + +} diff --git a/src/main/java/com/bb/front/ApiPassimController.java b/src/main/java/com/bb/front/ApiPassimController.java new file mode 100644 index 0000000..f81e02e --- /dev/null +++ b/src/main/java/com/bb/front/ApiPassimController.java @@ -0,0 +1,79 @@ +package com.bb.front; + +import org.codehaus.jettison.json.JSONObject; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.PassimAddrReq; +import com.bb.model.PassimAddrRes; +import com.bb.service.PassimService; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/passim") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiPassimController { + + private final PassimService passimService; + + private final JwtManager jwtManager; + + + @ResponseBody + @PostMapping("/h2h/address") + public ApiResponse createAddress(@RequestHeader String token, HttpServletRequest request, @RequestBody PassimAddrReq req) { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-passim::createAddress::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + req.setMemIdx(tokenInfo.getMidx()); + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(req); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + PassimAddrRes res = passimService.createAddress(LOG_PREFIX, req); + + if(res != null) { + apiResponse.put("address", res.getAddress()); + apiResponse.put("tag", res.getTag()); + apiResponse.success(); + } else { + log.error(LOG_PREFIX+ "Create address fail..."); + apiResponse.fail(); + } + + } catch(ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-user::cash:in::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + log.error(LOG_PREFIX+ "[ApiException] "+e.getApiResponse()); + apiResponse = e.getApiResponse(); + + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } +} diff --git a/src/main/java/com/bb/front/ApiRetailController.java b/src/main/java/com/bb/front/ApiRetailController.java new file mode 100644 index 0000000..d287c84 --- /dev/null +++ b/src/main/java/com/bb/front/ApiRetailController.java @@ -0,0 +1,2322 @@ +package com.bb.front; + +import java.net.SocketTimeoutException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.BetSplusSearch; +import com.bb.model.BotMemRate; +import com.bb.model.BotMemRateVo; +import com.bb.model.CashSearch; +import com.bb.model.CategoryRateVo; +import com.bb.model.CodeSearch; +import com.bb.model.LoginUserVO; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberInsert; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberSearch; +import com.bb.model.MultipleRate; +import com.bb.model.MultipleRateInfo; +import com.bb.model.NewMemRateItem; +import com.bb.model.PageFormVO; +import com.bb.model.RateInfo; +import com.bb.model.RateVO; +import com.bb.model.RetailBetSearch; +import com.bb.model.RetailCashSearch; +import com.bb.model.RetailPointSearch; +import com.bb.model.RetailSearch; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.TripleAuthInfo; +import com.bb.service.BetService; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.RateService; +import com.bb.service.ReportService; +import com.bb.service.RetailService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.bb.util.StringUtils; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/retail") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiRetailController { + + private final RetailService retailService; + + private final ReportService reportService; + + private final UserService userService; + + private final CashService cashService; + + private final BetService betService; + + private final RateService rateService; + + private final CommonService commonService; + + private final TripleService tripleService; + + private final PasswordEncoder passwordEncoder; + + private final JwtManager jwtManager; + + + /* + * [하부파트너생성] 관련 API 기능 + */ + @ResponseBody + @PostMapping(value="/partnerJoin") + public ApiResponse partnerJoin(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberInsert signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-retail::partnerJoin::"; + + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String partnerLevel = tokenInfo.getPartnerLevel(); + String recommenderId = tokenInfo.getMid(); + + if(partnerLevel.equals("COMP") || partnerLevel.equals("AUTO") || partnerLevel.equals("NORMAL") || partnerLevel.equals("PTN_7")) { + throw new ApiException("U095", "파트너 등록 권한없음."); + } + + if(signupMember.getMemId() == null || signupMember.getMemId().equals("") || (signupMember.getMemId().length() < 3)) { + throw new ApiException("U101", "파트너 아이디는 영문+숫자 3자 이상입니다."); + } + + signupMember.setSiteIdx(site.getSiteIdx()); + signupMember.setSiteId(tokenInfo.getSid()); + signupMember.setMemId(signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase()); + LOG_PREFIX = LOG_PREFIX + tokenInfo.getSid()+"::"+signupMember.getMemId()+"::::"; + + if(signupMember.getMemId().equals("")) { + throw new ApiException("U098", "아이디를 입력해주세요."); + } + + signupMember.setRegId(tokenInfo.getMid()); + signupMember.setRecommenderId(recommenderId); + signupMember.setPartnerType(""); + signupMember.setMemStatus("0"); + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + + log.info(LOG_PREFIX+ "[RECOMMEND USER ID:" + signupMember.getRecommenderId() + "]"); + String myPartnerLevel = userService.getPartnerLevelByRecId(signupMember); + if(myPartnerLevel.equals("COMP") || myPartnerLevel.equals("AUTO") || myPartnerLevel.equals("NORMAL")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + signupMember.setPartnerLevel(myPartnerLevel); + log.info(LOG_PREFIX+ "[PARTNER LEVEL:" + signupMember.getPartnerLevel() + "]"); + + String refer = request.getHeader("Referer"); + String domain = "unknown"; + if(refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + domain = urls[2]; + log.info(LOG_PREFIX+"::domain::"+domain+"::recommandId::"+signupMember.getRecommenderId()); + } + signupMember.setJoinDomain(domain); + + signupMember.setLoginYn("Y"); + signupMember.setMemLockYn("N"); + signupMember.setRecommendYn("Y"); + + // isOnlyFlex : 파트너 회원 베팅가능여부 플레그(Y:가능, N:불가능) + log.info(LOG_PREFIX+"::site.getIsOnlyFlex()::"+site.getIsOnlyFlex()); + if(site.getIsOnlyFlex().equals("Y")) { + signupMember.setBetYn("Y"); + } else { + signupMember.setBetYn("N"); + } + log.info(LOG_PREFIX+"::BetYn::"+signupMember.getBetYn()); + + signupMember.setPointExchangeYn("Y"); + signupMember.setRollingYn("Y"); + + signupMember.setMemLevel("1"); + signupMember.setCasinoLevel("1"); + signupMember.setSlotLevel("1"); + signupMember.setMgLevel("1"); + signupMember.setSportsLevel("1"); + signupMember.setNationCode(""); + signupMember.setPartSendYn("N"); + signupMember.setMaxCredit(""); + signupMember.setCreditRate(""); + signupMember.setCreditStatus(""); + signupMember.setMemBlackYn("N"); + + signupMember.setCashSendYn("Y"); + signupMember.setCashReceiveYn("Y"); + + Member recommendUser = new Member(); + recommendUser.setSiteId(tokenInfo.getSid()); + recommendUser.setMemId(signupMember.getRecommenderId()); + MemberDetail upPartner = userService.getMember(recommendUser); + + if(upPartner == null) { + throw new ApiException("U096", "존재하지 않는 추천인 계정입니다."); + } + + if(upPartner.getPartnerLevel().equals("COMP") || upPartner.getPartnerLevel().equals("NORMAL") || upPartner.getPartnerLevel().equals("PTN_7")) { + throw new ApiException("U095", "파트너 등록 권한없음."); + } + + if(upPartner.getRecommendYn().equals("N")) { + throw new ApiException("U095", "파트너 등록 권한없음."); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(site.getSiteId()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + if(!"Y".equals(siteOption.getSignupYn())) { + throw new ApiException("U115", "회원가입을 받지 않고 있습니다."); + } + + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + checkMember.setMemId(signupMember.getMemId()); + checkMember.setRecommenderId(signupMember.getRecommenderId()); + checkMember.setMemName(signupMember.getMemName()); + checkMember.setMemNick(signupMember.getMemNick()); + + int idCheck =userService.idCheck(checkMember); + if(idCheck>0) { + throw new ApiException("U005", "idCheck"); + } + + /* + int idCheckByAdmin =userService.idCheckByAdmin(checkMember); + if(idCheckByAdmin>0) { + throw new ApiException("U116", "idCheckByAdmin"); + } + */ + + int nameCheck =userService.nameCheck(checkMember); + if(nameCheck>0) { + throw new ApiException("U006", "nameCheck"); + } + + if(signupMember.getSiteId().equals(signupMember.getRecommenderId())) { + throw new ApiException("U099", "recommenderIdCheck"); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String signupMemberJson = objectMapper.writeValueAsString(signupMember); + log.info(LOG_PREFIX+ "signupMemberJson::" + signupMember); + + RateInfo rateInfo = signupMember.getRateInfo(); + if(rateInfo != null) { + rateInfo.setSiteId(signupMember.getSiteId()); + rateInfo.setMemId(signupMember.getMemId()); + + Member top = new Member(); + top.setSiteId(tokenInfo.getSid()); + top.setMemId(signupMember.getRecommenderId()); + List> topRateInfoList = rateService.getMemRollingInfo(top); + + for(RateVO mvo : rateInfo.getRateList()) { + mvo.setSiteId(rateInfo.getSiteId()); + mvo.setMemId(rateInfo.getMemId()); + String category = mvo.getCategory(); + String cateCode = mvo.getCateCode(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for(HashMap topRateInfo : topRateInfoList) { + String topCategory = topRateInfo.get("category").toString(); + String topCateCode = topRateInfo.get("cateCode").toString(); + Double maxPointRate = Double.valueOf(topRateInfo.get("pointRate").toString()); + Double maxLoseRate = Double.valueOf(topRateInfo.get("loseRate").toString()); + if(upPartner.getPartnerLevel().equals("AUTO")) { + maxPointRate = 50.0; + maxLoseRate = 50.0; + } + if(cateCode.equals(topCateCode)) { + if(maxPointRate < pointRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::pointRate::"+pointRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxPointRate::"+maxPointRate); + String resultMsg = "롤링:"+"cateCode::"+cateCode+ "::"+maxPointRate+" 보다 작은값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(maxLoseRate < loseRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::loseRate::"+loseRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxLoseRate::"+maxLoseRate); + String resultMsg = "루징:"+"cateCode::"+cateCode+ "::"+maxLoseRate+" 보다 작은값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + } + + userService.adminJoin(signupMember); + + try { + if(rateInfo != null) { + rateService.rateInfoUpdate(rateInfo); + } + } catch(Exception eee) { + log.error(LOG_PREFIX+ "Partner_Rate_Setting::Exception::"+eee.toString()); + } + + /* + Member search = new Member(); + search.setMemId(signupMember.getMemId()); + search.setSiteId(tokenInfo.getSid()); + try { + if(signupMember.getRateGroup() != null) { + BotMemRateVo rateparam = signupMember.getRateGroup(); + rateparam.setSiteId(signupMember.getSiteId()); + rateparam.setMemId(signupMember.getMemId()); + + log.info("[Rateparam] " + rateparam); + retailService.updateRate(rateparam); + } + + } catch(Exception eee) { + } + */ + + apiResponse.success(); + } catch(ApiException e) { + log.error(LOG_PREFIX+ "ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/gameCodes") + public ApiResponse gameCodes(@RequestHeader String token, HttpServletRequest request, @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + codesSearch.setSiteId(tokenInfo.getSid()); + codesSearch.setOrd(1); + + List codeList = commonService.getGameCodes(codesSearch); + apiResponse.put("codes", codeList); + apiResponse.success(); + } catch (Exception e) { + log.info(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value={"/partnerRates"}) + public ApiResponse partnerRates(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch retailSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + MemberSearch search = new MemberSearch(); + search.setSiteId(tokenInfo.getSid()); + if (retailSearch.getMemId() == null || retailSearch.getMemId().equals("")) { + search.setMemId(tokenInfo.getMid()); + } else { + search.setMemId(retailSearch.getMemId()); + } + search.setOrd(1); + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + log.info("[REQUEST: "+request.getRequestURI()+"] " + retailSearch); + + List rateList = userService.getPartnerRateList(search); + apiResponse.put("partnerMemId", search.getMemId()); + apiResponse.put("rateMaxMinList", rateList); + + Member search2 = new Member(); + search2.setSiteId(tokenInfo.getSid()); + if (retailSearch.getMemId() == null || retailSearch.getMemId().equals("")) { + search2.setMemId(tokenInfo.getMid()); + } else { + search2.setMemId(retailSearch.getMemId()); + } + List> rateInfo = rateService.getMemRollingInfo(search2); + apiResponse.put("rateInfo", rateInfo); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + + /* + * [현황] 관련 API 기능 + */ + @ResponseBody + @PostMapping(value={"/summary"}) + public ApiResponse summary(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + HashMap summary = retailService.getMySummary(search); + HashMap summaryNew = retailService.getMySummaryNew(search); + apiResponse.put("summary", summary); + apiResponse.put("summaryNew", summaryNew); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value={"/myinfo"}) + public ApiResponse myinfo(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + search.setRetailType("ME"); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + HashMap mycashinfo = retailService.getMyCashInfo(search); + apiResponse.put("mycashinfo", mycashinfo); + + List myBetPointinfo = retailService.getMyBetPointInfo(search); + apiResponse.put("myBetPointinfo", myBetPointinfo); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/botCashInfo"}) + public ApiResponse botCashInfo(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + RetailSearch search = new RetailSearch(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + HashMap botCashInfo = retailService.getBotCashInfo(search); + apiResponse.put("botCashInfo", botCashInfo); + + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + + /* + * [파트너정산내역] API 기능 + */ + /* + @ResponseBody + @PostMapping(value={"/myCalculate"}) + public ApiResponse myCalculate(@RequestHeader String token, HttpServletRequest request, @RequestBody DailyReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + List> reportCateInfo = reportService.getReportCateInfo(search.getSiteId()); + apiResponse.put("reportCateInfo", reportCateInfo); + + if(search.getSearchType().equals("OUTER")) { + search.setSearchMemId(tokenInfo.getMid()); + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = reportService.getReportsListForPartner(search); + DayilPeriodicReports total = reportService.getReportsTotalForPartner(search); + apiResponse.put("search", search); + apiResponse.put("outSearchList", list); + apiResponse.put("outSearchTotal", total); + } else { + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = reportService.getReportsListForPartner(search); + search.setSearchType("OUTER"); + List total = reportService.getReportsListForPartner(search); + DayilPeriodicReports inSearchTotal = total.get(0); + apiResponse.put("search", search); + apiResponse.put("inSearchList", list); + apiResponse.put("inSearchTotal", inSearchTotal); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + */ + + + /* + * [유저정산내역] API 기능 + */ + /* + @ResponseBody + @PostMapping(value={"/reportByUser"}) + public ApiResponse reportByUser(@RequestHeader String token, HttpServletRequest request, @RequestBody DailyReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + if(search.getSearchMemId() == null) { + search.setSearchMemId(""); + } + if(search.getSearchRecommandId() == null) { + search.setSearchRecommandId(""); + } + + if(search.getOrderStr() == null) { + search.setOrderStr(""); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List> reportCateInfo = reportService.getReportCateInfo(search.getSiteId()); + apiResponse.put("reportCateInfo", reportCateInfo); + + PageFormVO pageVo = new PageFormVO(); + if(search.getPage() == 0) search.setPage(1); + + int totalCount = reportService.getReportsByUserListCntForPartner(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + if(search.getCount_per_page() == 0) { + commonForm.setCount_per_page(10); + } else { + commonForm.setCount_per_page(search.getCount_per_page()); + } + if(search.getCount_per_list() == 0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + DayilPeriodicReports total = reportService.getReportsByUserTotalForPartner(search); + apiResponse.put("searchTotal", total); + + List list = reportService.getReportsByUserListForPartner(search); + apiResponse.put("searchList", list); + + apiResponse.success(); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + */ + + + /* + * [요율조정] 관련 API 기능 + */ + @ResponseBody + @PostMapping(value="/botMemRate") + public ApiResponse botMemRate(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + MemberSearch search = new MemberSearch(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + List myCategoryRateList = retailService.getMyCategoryRateList(search); + BotMemRateVo myCategoryRate = new BotMemRateVo(); + for(CategoryRateVo item : myCategoryRateList) { + myCategoryRate.setSiteId(item.getSiteId()); + myCategoryRate.setMemId(item.getMemId()); + myCategoryRate.setMemNick(item.getMemNick()); + if(item.getCategory().equals("CASINO")) { + myCategoryRate.setCasinoPR(item.getPointRate()); + myCategoryRate.setCasinoLR(item.getLoseRate()); + } + if(item.getCategory().equals("HC-CASINO")) { + myCategoryRate.setHcasinoPR(item.getPointRate()); + myCategoryRate.setHcasinoLR(item.getLoseRate()); + } + if(item.getCategory().equals("SLOT")) { + myCategoryRate.setSlotPR(item.getPointRate()); + myCategoryRate.setSlotLR(item.getLoseRate()); + } + if(item.getCategory().equals("MINI-GAME")) { + myCategoryRate.setMiniPR(item.getPointRate()); + myCategoryRate.setMiniLR(item.getLoseRate()); + } + if(item.getCategory().equals("SPORTS")) { + myCategoryRate.setSportPR(item.getPointRate()); + myCategoryRate.setSportLR(item.getLoseRate()); + } + } + + log.info(myCategoryRate.toString()); + + List botCategoryRateList = new ArrayList<>(); + List list = retailService.getBotCategoryRateList(myCategoryRateList, search); + BotMemRateVo botRate = new BotMemRateVo(); + CategoryRateVo temp = null; + CategoryRateVo tempNext = null; + for(int i=0; i> myRateInfo = rateService.getMemRollingInfo(param); + for(HashMap rateItem : myRateInfo) { + MultipleRateInfo multipleRateInfo = null; + if(rateItem.get("detailSetYn").toString().equals("Y")) { + // 요율 세부설정 값 + multipleRateInfo = new MultipleRateInfo(); + multipleRateInfo.setSiteId(rateItem.get("siteId").toString()); + multipleRateInfo.setMemId(rateItem.get("memId").toString()); + multipleRateInfo.setVendorCode(rateItem.get("cateCode").toString()); + List multipleRate = userService.getMultipleRateList(multipleRateInfo); + multipleRateInfo.setRateList(multipleRate); + rateItem.put("multipleRateInfo", multipleRateInfo); + } else { + rateItem.put("multipleRateInfo", multipleRateInfo); + } + } + apiResponse.put("myRateInfo", myRateInfo); + + List> botttomRateList = retailService.getBottomRateList(param); + apiResponse.put("botttomRateList", botttomRateList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/newUpdateRate") + public ApiResponse newUpdateRate(HttpServletRequest request, @RequestHeader String token, @RequestBody RateInfo rateInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-user::newUpdateRate::"; + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + if(rateInfo.getSiteId() == null || rateInfo.getSiteId().equals("")) { + rateInfo.setSiteId(tokenInfo.getSid()); + } + if(rateInfo.getMemId() == null || rateInfo.getMemId().equals("")) { + throw new ApiException("MR01", "Not null memId"); + } + + Member search = new Member(); + search.setSiteId(rateInfo.getSiteId()); + search.setMemId(rateInfo.getMemId()); + LOG_PREFIX = LOG_PREFIX+rateInfo.getSiteId()+"::"+rateInfo.getMemId()+"::::"; + log.info(LOG_PREFIX+ "RateInfo::"+rateInfo); + + List> myRollingInfoList = rateService.getMemRollingInfo(search); + for(RateVO mvo : rateInfo.getRateList()) { + mvo.setSiteId(rateInfo.getSiteId()); + mvo.setMemId(rateInfo.getMemId()); + String category = mvo.getCategory(); + String cateCode = mvo.getCateCode(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for(HashMap myRollingInfo : myRollingInfoList) { + String myCategory = myRollingInfo.get("category").toString(); + String myCateCode = myRollingInfo.get("cateCode").toString(); + Double maxPointRate = Double.valueOf(myRollingInfo.get("maxPointRate").toString()); + Double minPointRate = Double.valueOf(myRollingInfo.get("minPointRate").toString()); + Double maxLoseRate = Double.valueOf(myRollingInfo.get("maxLoseRate").toString()); + Double minLoseRate = Double.valueOf(myRollingInfo.get("minLoseRate").toString()); + if(cateCode.equals(myCateCode)) { + if(maxPointRate < pointRate || minPointRate > pointRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::pointRate::"+pointRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxPointRate::"+maxPointRate+"::MinPointRate::"+minPointRate); + String resultMsg = "롤링:"+"cateCode::"+cateCode+ "::"+maxPointRate+", "+minPointRate+" 사이값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(maxLoseRate < loseRate || minLoseRate > loseRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::loseRate::"+loseRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxLoseRate::"+maxLoseRate+"::MinLoseRate::"+minLoseRate); + String resultMsg = "루징:"+"cateCode::"+cateCode+ "::"+maxLoseRate+", "+minLoseRate+" 사이값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + + rateService.rateInfoUpdate(rateInfo); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", rateInfo.getMemId()); + logParam.put("logType", "RATE"); + logParam.put("logoutYn", ""); + logParam.put("logName", "ApiRetailController.newUpdateRate() => RateService.rateInfoUpdate()"); + logParam.put("logDesc", rateInfo.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", ""); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e){ + log.error(LOG_PREFIX+ "insertlog::Exception::"+e.toString()); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(LOG_PREFIX+ "ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/multipleRateInfo") + public ApiResponse multipleRateInfo(@RequestHeader String token, HttpServletRequest request, @RequestBody MultipleRateInfo param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + param.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + param); + + List multipleRateList = userService.getMultipleRateList(param); + param.setRateList(multipleRateList); + + apiResponse.put("multipleRateInfo", param); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/updateMultipleRate") + public ApiResponse updateMultipleRate(@RequestHeader String token, HttpServletRequest request, @RequestBody MultipleRateInfo param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + param.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + param); + + List afterRateList = param.getRateList(); + List beforeRateList = userService.getMultipleRateList(param); + + for(MultipleRate afterRate : afterRateList) { + for(MultipleRate beforeRate : beforeRateList) { + if(afterRate.getRateType().equals(beforeRate.getRateType())) { + if(beforeRate.getMaxPointRate() < afterRate.getPointRate() || beforeRate.getMinPointRate() > afterRate.getPointRate()) { + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::pointRate::"+afterRate.getPointRate()); + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::MaxPointRate::"+beforeRate.getMaxPointRate()+"::MinPointRate::"+beforeRate.getMinPointRate()); + String resultMsg = "["+afterRate.getRateType()+"] 롤링:"+beforeRate.getMaxPointRate()+", "+beforeRate.getMinPointRate()+" 사이값을 입력하세요"; + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::resultMsg : " + resultMsg); + throw new ApiException("U032", resultMsg); + } + + if(beforeRate.getMaxLoseRate() < afterRate.getLoseRate() || beforeRate.getMinLoseRate() > afterRate.getLoseRate()) { + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::loseRate::"+afterRate.getLoseRate()); + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::MaxLoseRate::"+beforeRate.getMaxLoseRate()+"::MinLoseRate::"+beforeRate.getMinLoseRate()); + String resultMsg = "["+afterRate.getRateType()+"] 루징:"+beforeRate.getMaxPointRate()+", "+beforeRate.getMinPointRate()+" 사이값을 입력하세요"; + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::resultMsg : " + resultMsg); + throw new ApiException("U032", resultMsg); + } + } + } + } + + userService.updateMultipleRate(param); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [입/출금내역] API 기능 + */ + @ResponseBody + @PostMapping(value={"/bottomCashList"}) + public ApiResponse bottomCashList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailCashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + if(search.getMemId() == null || search.getMemId().equals("")) { + search.setMemId(tokenInfo.getMid()); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = cashService.getBottomCashListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List cashList = cashService.getBottomCashList(search); + apiResponse.put("list", cashList); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/bottomCashList2"}) + public ApiResponse bottomCashList2(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailCashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + if(search.getMemId() == null || search.getMemId().equals("")) { + search.setMemId(tokenInfo.getMid()); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = cashService.getBottomCashListCnt2(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List cashList = cashService.getBottomCashList2(search); + apiResponse.put("list", cashList); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [배팅내역] API 기능 + * + */ + @ResponseBody + @PostMapping(value={"/bottomBetList"}) + public ApiResponse bottomBetList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailBetSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + if(search.getMemId() != null && !search.getMemId().equals("")) { + search.setSearchMemId(search.getMemId()); + } + search.setMemId(tokenInfo.getMid()); + + if(search.getOrderColumn() == null || search.getOrderColumn().equals("")) { + search.setOrderColumn("betIdx"); + } + + if(search.getOrderType() == null || search.getOrderType().equals("")) { + search.setOrderType("DESC"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getBottomBetListCnt(search); // Use blankSpinSetType + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List betList = betService.getBottomBetList(search); // Use blankSpinSetType + apiResponse.put("list", betList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + + @ResponseBody + @PostMapping(value="/sport/bottomBetList") + public ApiResponse sportBottomBetlist( @RequestHeader String token, HttpServletRequest request, @RequestBody BetSplusSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setRecommenderId(tokenInfo.getMid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = betService.getSportBottomBetListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + List betList = betService.getSportBottomBetList(search); + apiResponse.put("list", betList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [하부파트너목록] API 기능 + */ + @ResponseBody + @PostMapping(value={"/myPartnerList"}) + public ApiResponse myPartnerList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = retailService.getMyPartnerListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List list = retailService.getMyPartnerList(search); + apiResponse.put("list", list); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [하부파트너목록] API 기능 + */ + @ResponseBody + @PostMapping(value={"/myPartnerList2"}) + public ApiResponse myPartnerList2(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setRecommenderId(tokenInfo.getMid()); + + if(search.getSearchType() == null || search.getSearchType().equals("")) { + search.setSearchType("OUTER"); + } + + if(search.getSearchType().equals("INNER")) { + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = retailService.getMyPartnerList2(search); + apiResponse.put("list", list); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + + /* + * [직하부파트너목록] API 기능 + */ + @ResponseBody + @PostMapping(value={"/myPartnerDirectList"}) + public ApiResponse myPartnerDirectList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List list = retailService.getMyPartnerDirectList(search); + apiResponse.put("list", list); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + /* + * [내소속회원목록] API 기능 + */ + @ResponseBody + @PostMapping(value={"/myMemDirectList"}) + public ApiResponse myMemDirectList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = retailService.getMyMemListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List list = retailService.getMyMemList(search); + apiResponse.put("list", list); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + + /* + * [소속회원목록] API 기능 + */ + @ResponseBody + @PostMapping(value={"/myMemList"}) + public ApiResponse myMemList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = retailService.getMyMemListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List list = retailService.getMyMemList(search); + apiResponse.put("list", list); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/loginList"}) + public ApiResponse loginList(@RequestHeader String token, HttpServletRequest request, @RequestBody MemberListSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + search.setPartnerType(""); + search.setSiteId(tokenInfo.getSid()); + search.setRecommenderId(tokenInfo.getMid()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr); + } + + /* + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + int totalCount = retailService.getMyLoginMemListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + */ + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List memList = retailService.getMyLoginMemList(search); + apiResponse.put("list", memList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/rateInfoList"}) + public ApiResponse rateInfoList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List rateInfoList = retailService.getListRateInfo(search); + apiResponse.put("rateInfoList", rateInfoList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + + /* + * [회원머니지급/회수] 관련 API 기능 + */ + + @ResponseBody + @PostMapping(value={"/partnerLevels"}) + public ApiResponse partnerLevels(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + search.setPartnerLevel(tokenInfo.getPartnerLevel()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List partnerLevels = retailService.getMyUnderPartnerLevels(search); + + apiResponse.put("list", partnerLevels); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value={"/myMemIds"}) + public ApiResponse myMemIds(@RequestHeader String token, HttpServletRequest request, @RequestBody CodeSearch codesSearch) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + search.setPartnerLevel(codesSearch.getCode()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + codesSearch); + List memIdList = retailService.myMemIds(search); + apiResponse.put("memIds", memIdList); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/cashSendlist") + public ApiResponse cashSendlist(@RequestHeader String token, HttpServletRequest request, @RequestBody CashSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + if(search.getTopMemId() == null || search.getTopMemId().equals("")) { + search.setTopMemId(tokenInfo.getMid()); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + if("in".equals(search.getCashType())) { + search.setCashType("-3"); + } + + if("out".equals(search.getCashType())) { + search.setCashType("3"); + } + + int totalCount = cashService.getCashSendListCnt(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List> cashList = cashService.getCashSendList(search); + apiResponse.put("list", cashList); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value={"/myLoginMem"}) + public ApiResponse myLoginMem(@RequestHeader String token, HttpServletRequest request) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + // Site site = getSiteByCheck(request); + + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + RetailSearch search = new RetailSearch(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List loginMemList = retailService.getMyLoginMem(search); + apiResponse.put("loginMemList", loginMemList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [포인트 내역] 관련 API 기능 + */ + @ResponseBody + @PostMapping(value={"/pointList"}) + public ApiResponse myPointList(HttpServletRequest request, @RequestHeader String token, @RequestBody RetailPointSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + if(search.getMemId() == null || search.getMemId().equals("")) { + search.setMemId(tokenInfo.getMid()); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + HashMap searchMap = new HashMap<>(); + searchMap.put("siteId", tokenInfo.getSid()); + searchMap.put("myId", tokenInfo.getMid()); + searchMap.put("bottomId", search.getMemId()); + int chkCnt = userService.checkMyBottom(searchMap); + if(chkCnt == 0) { + throw new ApiException("RT01", "not my bottom user"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + int totalCount = retailService.getRetailPointListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + commonForm.setCount_per_list(10); + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List pointList = retailService.getRetailPointList(search); + apiResponse.put("list", pointList); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + + /* + * 사용 하지 않는 기능 + */ + @ResponseBody + @PostMapping(value={"/myMemBetPointinfo"}) + public ApiResponse myMemBetPointinfo(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(search.getMemId()); + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List betPointinfo = retailService.getMyBetPointInfo(search); + apiResponse.put("betPointinfo", betPointinfo); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value="/rate") + public ApiResponse rate(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + Member memSearch = new Member(); + memSearch.setSiteId(tokenInfo.getSid()); + memSearch.setMemId(search.getMemId()); + + List memRate= userService.getMemberRate(memSearch); + apiResponse.put("rate", memRate); + + List> rateInfo = rateService.getMemRollingInfo(memSearch); + apiResponse.put("rateInfo", rateInfo); + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value={"/detailList"}) + public ApiResponse detailList(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody RetailSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + Site site = getSiteByCheck(request); + if(site==null) { + throw new ApiException("1000", "accessDinied"); + } + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + + int totalCount = retailService.retailDetailListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + List list = retailService.retailDetailList(search); + apiResponse.put("list", list); + apiResponse.success(); + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + @ResponseBody + @PostMapping(value="/changeMemCashFlag") + public ApiResponse changeMemCashFlag(HttpServletRequest request, @RequestHeader String token, @RequestBody MemberSearch search) { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + Member botUser = new Member(); + botUser.setSiteId(search.getSiteId()); + botUser.setMemId(search.getMemId()); + log.info("#-RETAIL::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"[REQUEST: "+request.getRequestURI()+"] " + search); + + MemberDetail botdetail = userService.getMember(botUser); + if(botdetail == null) { + throw new ApiException("U003", "unknown user"); + } + + if(!botdetail.getPartnerLevel().equals("NORMAL")) { + apiResponse.success(); + return apiResponse; + } + + /* + * 직하부가 아니여도 통합머니전환 및 보유금 지급/회수 가능하게 변경됨. + if(!botdetail.getRecommenderId().equals(tokenInfo.getMid())) { + throw new ApiException("C402", "보유금 회수가 불가능한 대상입니다. 아이디를 확인하세요."); +// throw new ApiException("C402", "보유금 회수가 불가능한 대상입니다. 아이디를 확인하세요."); + } + */ + + // Triple 이용 사이트 + HashMap param = new HashMap<>(); + param.put("siteIdx", tokenInfo.getSidx()); + param.put("memIdx", botdetail.getMemIdx()); + param.put("intervalTime", -20); + param.put("apiType", "triple"); + HashMap lastGameInfo = userService.getLastGameInfoNew(param); + if(lastGameInfo != null) { + // Playing Game + throw new ApiException("C009", "배팅내역 정산중입니다. 잠시(20초) 후 다시 시도해주세요."); + } else { + // Triple API + TripleAuthInfo tripleMember = userService.getTripleAuthInfo(botUser); + if(tripleMember != null && tripleMember.getPartnerLevel().equals("NORMAL")) { + HashMap tripleParam = new HashMap<>(); + tripleParam.put("siteId", tokenInfo.getSid()); + tripleParam.put("apiVendorCode", "triple"); + ApiVendorCompInfo vendor = userService.getApiVendorCompInfo(tripleParam); + JSONObject result = tripleService.withdrawBalance(vendor, "all", tripleMember); + if(result.getString("resultCode").equals("0")) { + log.info("#-RETAIL::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"Triple 하위 유저 잔액 전액 환전"); + } else { + log.error("#-RETAIL::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"Triple 하위 유저 잔액 전액 환전 실패"); + throw new ApiException("T999", "Triple 유저 잔액 전액 환전 실패"); + } + } else { + throw new ApiException("C402", "보유금 회수가 불가능한 대상입니다. 아이디를 확인하세요."); + } + } + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", search.getSiteId()); + lockParam.put("memId", search.getMemId()); + lockParam.put("symLock", "Y"); + int resultLock = userService.userChangeSymLock(lockParam); + log.info("#-RETAIL::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"userChangeSymLock(Y) Result="+resultLock); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", search.getSiteId()); + flagParam.put("memId", search.getMemId()); + flagParam.put("changeFlag", "Y"); + int result = userService.userChangeFlag(flagParam); + log.info("#-RETAIL::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"userChangeFlag(Y) result="+result); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "update"); + logParam.put("logoutYn", ""); + logParam.put("logName", "ApiRetailController.changeMemCashFlag() => UserService.userChangeFlag("+search.getMemId()+")"); + logParam.put("logDesc", flagParam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e) {System.out.print(e.toString());} + + apiResponse.success(); + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error("[ConnectTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("ConnectTimeoutException"); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error("[SocketTimeoutException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("SocketTimeoutException"); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error("[InterruptedException]"+rae.getMessage()); + apiResponse.setResultCode("TE99"); + apiResponse.setResultMessage("InterruptedException"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", search.getSiteId()); + lockParam.put("memId", search.getMemId()); + lockParam.put("symLock", "Y"); + int resultLock = userService.userChangeSymLock(lockParam); + log.error("#-RETAIL::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"userChangeSymLock(Y) Result="+resultLock); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", search.getSiteId()); + flagParam.put("memId", search.getMemId()); + flagParam.put("changeFlag", "Y"); + int result = userService.userChangeFlag(flagParam); + log.error("#-RETAIL::changeMemCashFlag::"+search.getSiteId()+"::"+search.getMemId()+"::"+"userChangeFlag(Y) result="+result); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "update"); + logParam.put("logoutYn", ""); + logParam.put("logName", "ApiRetailController.changeMemCashFlag() => UserService.userChangeFlag("+search.getMemId()+")"); + logParam.put("logDesc", flagParam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e) {System.out.print(e.toString());} + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + private Site getSiteByCheck(HttpServletRequest request) { + Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString()); + return site; + } +} diff --git a/src/main/java/com/bb/front/TestController.java b/src/main/java/com/bb/front/TestController.java new file mode 100644 index 0000000..db49302 --- /dev/null +++ b/src/main/java/com/bb/front/TestController.java @@ -0,0 +1,170 @@ +package com.bb.front; + +import java.io.IOException; +import java.net.SocketTimeoutException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; + +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; + +import org.apache.commons.io.IOUtils; +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import com.bb.model.TestDto; +import com.bb.service.UserService; +import com.bb.util.IPKit; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Controller +public class TestController { + + @Autowired + private UserService userService; + + @Autowired + RestTemplate restTemplate; + + @CrossOrigin + @PostMapping("/test") + public TestDto hello(HttpServletRequest request, @RequestBody TestDto dto) throws IOException { + ServletInputStream inputStream = request.getInputStream(); + byte[] bytes = IOUtils.toByteArray(inputStream); + String s = new String(bytes, StandardCharsets.UTF_8); + log.info("s = " + s); + log.info("dto = " + dto); + + return dto; + } + + + @GetMapping("/test/evo") + public String evoRedirect(HttpServletRequest request, @RequestParam String type) { + final String LOG_PREFIX = "#-evoRedirect::type::"+type+":::"; + + final String SITE_ID = "peanuts"; + final String MEM_ID = "mpt01"; + final String SECRET_KEY = "peanuts9mGIpbi211k"; + final String API_URL = "https://oprvendor.com/api"; + final String TRIPLE_USERNAME = "007"+MEM_ID; + + String lauchURL = ""; + String userIp = IPKit.getIpAddressByRequest(request); + if(userIp.equals("0:0:0:0:0:0:0:1")) { + userIp = "211.114.32.97"; + } + + String vendorKey = ""; + if(type.equals("1")) { + vendorKey = "C01"; + } else { + vendorKey = "C01"; + } + + try { + HttpHeaders header = new HttpHeaders(); + header.setContentType(MediaType.APPLICATION_JSON); + header.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + header.set("User-Agent", "PostmanRuntime/7.28.4"); + header.set("Authorization", SECRET_KEY); + header.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + UriComponentsBuilder authBuilder = UriComponentsBuilder.fromHttpUrl(API_URL + "/auth"); + HashMap authParams = new HashMap(); + authParams.put("userId", TRIPLE_USERNAME); + authParams.put("nickName", TRIPLE_USERNAME); + authParams.put("balance", "0"); + HttpEntity> authEntity = new HttpEntity<>(authParams, header); + log.info(LOG_PREFIX+ "/auth"+"::Request::" + authParams.toString()); + ResponseEntity authUser = restTemplate.postForEntity(authBuilder.toUriString(), authEntity, String.class); + log.info(LOG_PREFIX+ "/auth"+"::Response::" + authUser.getBody()); + + JSONObject userJson = new JSONObject(authUser.getBody()); + String authResultCode = userJson.getString("resultCode"); + + if("0".equals(authResultCode)) { + JSONObject authData = new JSONObject(userJson.getString("data")); + String tripleToken = authData.getString("token"); + + // 헤더에 토큰 세팅 + header.set("token", tripleToken); + UriComponentsBuilder playBuilder = UriComponentsBuilder.fromHttpUrl(API_URL + "/play"); + HashMap playParams = new HashMap(); + playParams.put("userId", TRIPLE_USERNAME); + playParams.put("vendorKey", vendorKey); + playParams.put("gameKey", ""); + playParams.put("balance", "0"); + playParams.put("userIp", userIp); + playParams.put("isMobile", "N"); + playParams.put("language", "KR"); + playParams.put("decYn", ""); + playParams.put("currency", "KRW"); + playParams.put("requestAT", Long.toString(System.currentTimeMillis())); + HttpEntity> playEntity = new HttpEntity<>(playParams, header); + log.info(LOG_PREFIX+ "/play"+"::Request::" + playParams.toString()); + ResponseEntity playUser = restTemplate.postForEntity(playBuilder.toUriString(), playEntity, String.class); + log.info(LOG_PREFIX+ "/play"+"::Response::" + playUser.getBody()); + + JSONObject playJson = new JSONObject(playUser.getBody()); + String playResultCode = playJson.getString("resultCode"); + + if("0".equals(playResultCode)) { + JSONObject playData = new JSONObject(playJson.getString("data")); + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", SITE_ID); + lockParam.put("memId", MEM_ID); + lockParam.put("symLock", "N"); + int result = userService.userChangeSymLock(lockParam); + log.info(LOG_PREFIX+ "userChangeSymLock(N) Result=" + result); + + lauchURL = playData.getString("gameurl"); + log.info(LOG_PREFIX+ "lauchURL::" + lauchURL); + } + } + + } catch (ResourceAccessException rae) { + log.error("#-getGame::ResourceAccessException::"+ "[ResourceAccessException]"+rae.toString()); + + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "[ConnectTimeoutException]"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "[SocketTimeoutException]"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "[InterruptedException]"+rae.getMessage()); + } + } catch (Exception e) { + log.error(LOG_PREFIX+ "[Exception]"+e.toString()); + e.printStackTrace(); + } + + return "redirect:"+lauchURL; + } + + + +} diff --git a/src/main/java/com/bb/front/v2/ApiV2MainController.java b/src/main/java/com/bb/front/v2/ApiV2MainController.java new file mode 100644 index 0000000..a18a802 --- /dev/null +++ b/src/main/java/com/bb/front/v2/ApiV2MainController.java @@ -0,0 +1,389 @@ +package com.bb.front.v2; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.BoardListSearch; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.service.BoardService; +import com.bb.service.CommonService; +import com.bb.service.MainService; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/v2/main") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiV2MainController { + + private final MainService mainService; + + private final BoardService boardService; + + private final CommonService commonService; + + private final JwtManager jwtManager; + + + /* + * 메인 및 모든화면 상단 정보 (회원수, 보유머니, 보유포인트, 슬롯롤링%, 카지노롤링%) + */ + @ResponseBody + @PostMapping(value="/topInfo") + public ApiResponse topInfo(HttpServletRequest request, @RequestHeader String token) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::topInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + HashMap param = new HashMap<>(); + param.put("siteId", tokenInfo.getSid()); + param.put("memId", tokenInfo.getMid()); + + HashMap mainTopInfo = mainService.getMainTopInfo(param); + if(mainTopInfo == null) { + mainTopInfo = new HashMap<>(); + mainTopInfo.put("siteId", tokenInfo.getSid()); + mainTopInfo.put("memId", tokenInfo.getMid()); + mainTopInfo.put("userCnt", "0"); + mainTopInfo.put("totalCashAmt", "0"); + mainTopInfo.put("totalPointAmt", "0"); + mainTopInfo.put("casinoRate", "0"); + mainTopInfo.put("slotRate", "0"); + } + + apiResponse.put("mainTopInfo", mainTopInfo); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::topInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::topInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * 메인 통계 정보1 (충전, 환전, 보유금지급, 보유금회수, 금일신규회원, 금일배팅손익) + */ + @ResponseBody + @PostMapping(value="/statistics") + public ApiResponse mainStatistics(HttpServletRequest request, @RequestHeader String token) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::mainStatistics::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + + HashMap param = new HashMap<>(); + param.put("siteId", tokenInfo.getSid()); + param.put("memId", tokenInfo.getMid()); + param.put("blankSpinSetType", siteOption.getBlankSpinSetType()); + + HashMap mainStatisticsInfo = mainService.getMainStatistics(param); // Use blankSpinSetType + if(mainStatisticsInfo == null) { + mainStatisticsInfo = new HashMap<>(); + mainStatisticsInfo.put("siteId", tokenInfo.getSid()); + mainStatisticsInfo.put("memId", tokenInfo.getMid()); + mainStatisticsInfo.put("dCashIn", "0"); + mainStatisticsInfo.put("dCashInCnt", "0"); + mainStatisticsInfo.put("dCashOut", "0"); + mainStatisticsInfo.put("dCashOutCnt", "0"); + mainStatisticsInfo.put("dPayment", "0"); + mainStatisticsInfo.put("dPayback", "0"); + mainStatisticsInfo.put("dJoinCnt", "0"); + mainStatisticsInfo.put("dBetBEP", "0"); + } + + apiResponse.put("mainStatisticsInfo", mainStatisticsInfo); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::mainStatistics::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::mainStatistics::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * 머니입출금 개요 + */ + @ResponseBody + @PostMapping(value="/cashReport") + public ApiResponse cashReport(HttpServletRequest request, @RequestHeader String token, @RequestBody HashMap param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::cashReport::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + + if(param == null || param.get("startDate") == null || param.get("endDate") == null) { + throw new ApiException("1000", "accessDinied"); + } + param.put("siteId", tokenInfo.getSid()); + param.put("memId", tokenInfo.getMid()); + param.put("blankSpinSetType", siteOption.getBlankSpinSetType()); + log.info(LOG_PREFIX+ "param : " + param.toString()); + + HashMap cashReport = mainService.getMainCashReport(param); // Use blankSpinSetType + if(cashReport == null) { + cashReport = new HashMap<>(); + cashReport.put("siteId", tokenInfo.getSid()); + cashReport.put("memId", tokenInfo.getMid()); + cashReport.put("cashIn", "0"); + cashReport.put("payment", "0"); + cashReport.put("inPaymentSum", "0"); + cashReport.put("cashOut", "0"); + cashReport.put("payback", "0"); + cashReport.put("outPaybackSum", "0"); + cashReport.put("normalCashAmt", "0"); + cashReport.put("partnerCashAmt", "0"); + cashReport.put("betAmt", "0"); + cashReport.put("winAmt", "0"); + cashReport.put("betBEP", "0"); + cashReport.put("totalPointAmt", "0"); + } + + apiResponse.put("cashReport", cashReport); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::cashReport::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::cashReport::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * 나의 자금 변동내역 + */ + @ResponseBody + @PostMapping(value="/myCashReport") + public ApiResponse myCashReport(HttpServletRequest request, @RequestHeader String token, @RequestBody HashMap param) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::myCashReport::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + if(param == null || param.get("startDate") == null || param.get("endDate") == null) { + throw new ApiException("1000", "accessDinied"); + } + param.put("siteId", tokenInfo.getSid()); + param.put("memId", tokenInfo.getMid()); + log.info(LOG_PREFIX+ "param : " + param.toString()); + + HashMap myCashReport = mainService.getMyCashReport(param); + if(myCashReport == null) { + myCashReport = new HashMap<>(); + myCashReport.put("siteId", tokenInfo.getSid()); + myCashReport.put("memId", tokenInfo.getMid()); + myCashReport.put("cashIn", "0"); + myCashReport.put("adminPayment", "0"); + myCashReport.put("upperPayment", "0"); + myCashReport.put("myPayback", "0"); + myCashReport.put("changePoint", "0"); + myCashReport.put("increaseTotal", "0"); + myCashReport.put("cashOut", "0"); + myCashReport.put("adminPayback", "0"); + myCashReport.put("upperPayback", "0"); + myCashReport.put("myPayment", "0"); + myCashReport.put("decreaseTotal", "0"); + } + + apiResponse.put("myCashReport", myCashReport); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::myCashReport::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::myCashReport::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * 메인 공지사항 + */ + @ResponseBody + @PostMapping(value={"notiList"}) + public ApiResponse notiList(HttpServletRequest request, @RequestHeader String token) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::notiList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + BoardListSearch search = new BoardListSearch(); + search.setSiteId(tokenInfo.getSid()); + List> boardList = boardService.getMainBoardList(search); + + apiResponse.put("boardList", boardList); + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::notiList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::notiList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * 최근 지급/회수 + */ + @ResponseBody + @PostMapping(value="/newPayLog") + public ApiResponse mainNewPayLog(HttpServletRequest request, @RequestHeader String token) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::mainNewPayLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + HashMap param = new HashMap<>(); + param.put("siteId", tokenInfo.getSid()); + param.put("memId", tokenInfo.getMid()); + log.info(LOG_PREFIX+ "param : " + param.toString()); + + HashMap mainNewPayLog = mainService.getMainNewPayLog(param); + apiResponse.put("mainNewPayLog", mainNewPayLog); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::mainNewPayLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::mainNewPayLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + +} diff --git a/src/main/java/com/bb/front/v2/ApiV2RetailController.java b/src/main/java/com/bb/front/v2/ApiV2RetailController.java new file mode 100644 index 0000000..2f50480 --- /dev/null +++ b/src/main/java/com/bb/front/v2/ApiV2RetailController.java @@ -0,0 +1,2521 @@ +package com.bb.front.v2; + +import java.net.SocketTimeoutException; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.ResourceAccessException; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.jwt.JwtManager.TokenInfo; +import com.bb.model.ApiResponse; +import com.bb.model.CashDetail; +import com.bb.model.CashIn; +import com.bb.model.CashOut; +import com.bb.model.CashTranLogSrch; +import com.bb.model.DailyReportSearch; +import com.bb.model.DayilPeriodicReports; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberInsert; +import com.bb.model.MultipleRate; +import com.bb.model.MultipleRateInfo; +import com.bb.model.PageFormVO; +import com.bb.model.RateInfo; +import com.bb.model.RateVO; +import com.bb.model.RetailLowerSearch; +import com.bb.model.RetailSearch; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.UserDetailInfo; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; +import com.bb.service.CashService; +import com.bb.service.CommonService; +import com.bb.service.RateService; +import com.bb.service.ReportService; +import com.bb.service.RetailService; +import com.bb.service.TripleService; +import com.bb.service.UserService; +import com.bb.util.IPKit; +import com.bb.util.PagingUtil; +import com.bb.util.StringUtils; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/v2/retail") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiV2RetailController { + + private final JwtManager jwtManager; + + private final RetailService retailService; + + private final UserService userService; + + private final CashService cashService; + + private final RateService rateService; + + private final ReportService reportService; + + private final CommonService commonService; + + private final TripleService tripleService; + + @Autowired + private PasswordEncoder passwordEncoder; + + + + /* + * [파트너목록 하이라키] API 기능 + */ + @ResponseBody + @PostMapping(value={"/hierarchy"}) + public ApiResponse partnerHierarchy(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::partnerHierarchy::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + search.setRecommenderId(tokenInfo.getMid()); + + log.info(LOG_PREFIX+ "RetailSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + search.setOrd(0); + } else { + search.setOrd(1); + } + + List hierarchy = retailService.getPartnerHierarchy2(search); + apiResponse.put("hierarchy", hierarchy); + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::partnerHierarchy::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::partnerHierarchy::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너 정보 조회] API + */ + @ResponseBody + @PostMapping(value={"/partnerInfo"}) + public ApiResponse partnerInfo(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::partnerInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "RetailSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + if(search.getStartDate() == null || search.getStartDate().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + HashMap partnerInfo = retailService.getPartnerInfo(search); + apiResponse.put("partnerInfo", partnerInfo); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::partnerInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::partnerInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [전화번호 변경] API + */ + @ResponseBody + @PostMapping(value={"/updMemPhone"}) + public ApiResponse updMemPhone(@RequestHeader String token, HttpServletRequest request, @RequestBody HashMap param) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::updMemPhone::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + if(param == null) { + throw new ApiException("1000", "accessDinied"); + } + + param.put("siteId", tokenInfo.getSid()); + log.info(LOG_PREFIX+ "param::"+param.toString()); + + if(param.get("memId") == null || param.get("memPhone") == null) { + throw new ApiException("1000", "accessDinied"); + } + + int result = userService.updMemPhone(param); + log.info(LOG_PREFIX+ "Update Phone Result::"+result); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::updMemPhone::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::updMemPhone::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [하부 파트너 생성] API + */ + @ResponseBody + @PostMapping(value="/createPartner") + public ApiResponse createPartner(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MemberInsert signupMember) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + String LOG_PREFIX = "#-v2::retail::createPartner::"; + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + + String partnerLevel = tokenInfo.getPartnerLevel(); + + signupMember.setSiteIdx(tokenInfo.getSidx()); + signupMember.setSiteId(tokenInfo.getSid()); + signupMember.setMemId(signupMember.getMemId().replaceAll(" ", "").replaceAll(" ", "").toLowerCase()); + LOG_PREFIX = LOG_PREFIX+ tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::createInfo::"+signupMember.getRecommenderId()+"::"+signupMember.getMemId()+"::::"; + log.info(LOG_PREFIX); + + String refer = request.getHeader("Referer"); + String domain = "unknown"; + if(refer != null) { + String[] urls = StringUtils.extractUrlParts(refer); + domain = urls[2]; + log.info(LOG_PREFIX+"::domain::"+domain+"::recommandId::"+signupMember.getRecommenderId()); + } + signupMember.setJoinDomain(domain); + + if(partnerLevel.equals("PTN_7")) { + throw new ApiException("U095", "파트너 등록 권한없음."); + } + + if(signupMember.getMemId() == null || signupMember.getMemId().equals("") || (signupMember.getMemId().length() < 3)) { + throw new ApiException("U101", "파트너 아이디는 영문+숫자 3자 이상입니다."); + } + + if(signupMember.getRecommenderId() == null || signupMember.getRecommenderId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + signupMember.setRegId(tokenInfo.getMid()); + signupMember.setPartnerType(""); + signupMember.setMemStatus("0"); + + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + + log.info(LOG_PREFIX+ "[RECOMMEND USER ID:" + signupMember.getRecommenderId() + "]"); + String myPartnerLevel = userService.getPartnerLevelByRecId(signupMember); + if(myPartnerLevel.equals("COMP") || myPartnerLevel.equals("AUTO") || myPartnerLevel.equals("NORMAL")) { + throw new ApiException("U099", "추천인으로 사용할 수 없는 계정입니다."); + } + signupMember.setPartnerLevel(myPartnerLevel); + log.info(LOG_PREFIX+ "[PARTNER LEVEL:" + signupMember.getPartnerLevel() + "]"); + + signupMember.setLoginYn("Y"); + signupMember.setMemLockYn("N"); + signupMember.setRecommendYn("Y"); + + signupMember.setBetYn("N"); + signupMember.setPointExchangeYn("Y"); + signupMember.setRollingYn("Y"); + + signupMember.setMemLevel("1"); + signupMember.setCasinoLevel("1"); + signupMember.setSlotLevel("1"); + signupMember.setMgLevel("1"); + signupMember.setSportsLevel("1"); + signupMember.setNationCode(""); + signupMember.setPartSendYn("N"); + signupMember.setMaxCredit(""); + signupMember.setCreditRate(""); + signupMember.setCreditStatus(""); + signupMember.setMemBlackYn("N"); + + signupMember.setCashSendYn("Y"); + signupMember.setCashReceiveYn("Y"); + + Member recommendUser = new Member(); + recommendUser.setSiteId(tokenInfo.getSid()); + recommendUser.setMemId(signupMember.getRecommenderId()); + MemberDetail upPartner = userService.getMember(recommendUser); + + if(upPartner == null) { + throw new ApiException("U096", "존재하지 않는 추천인 계정입니다."); + } + + if(upPartner.getPartnerLevel().equals("COMP") || upPartner.getPartnerLevel().equals("NORMAL") || upPartner.getPartnerLevel().equals("PTN_7")) { + throw new ApiException("U095", "파트너 등록 권한없음."); + } + + if(upPartner.getRecommendYn().equals("N")) { + throw new ApiException("U095", "파트너 등록 권한없음."); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + if(!"Y".equals(siteOption.getSignupYn())) { + throw new ApiException("U115", "회원가입을 받지 않고 있습니다."); + } + + Member checkMember = new Member(); + checkMember.setSiteId(signupMember.getSiteId()); + checkMember.setMemId(signupMember.getMemId()); + checkMember.setRecommenderId(signupMember.getRecommenderId()); + checkMember.setMemName(signupMember.getMemName()); + checkMember.setMemNick(signupMember.getMemNick()); + + int idCheck = userService.idCheck(checkMember); + if(idCheck > 0) { + throw new ApiException("U005", "idCheck"); + } + + int nameCheck =userService.nameCheck(checkMember); + if(nameCheck > 0) { + throw new ApiException("U006", "nameCheck"); + } + + if(signupMember.getSiteId().equals(signupMember.getRecommenderId())) { + throw new ApiException("U099", "recommenderIdCheck"); + } + + ObjectMapper objectMapper = new ObjectMapper(); + String signupMemberJson = objectMapper.writeValueAsString(signupMember); + log.info(LOG_PREFIX+ "signupMemberJson::" + signupMember); + + RateInfo rateInfo = signupMember.getRateInfo(); + if(rateInfo != null) { + rateInfo.setSiteId(signupMember.getSiteId()); + rateInfo.setMemId(signupMember.getMemId()); + + Member top = new Member(); + top.setSiteId(tokenInfo.getSid()); + top.setMemId(signupMember.getRecommenderId()); + List> topRateInfoList = rateService.getMemRollingInfo(top); + + for(RateVO mvo : rateInfo.getRateList()) { + mvo.setSiteId(rateInfo.getSiteId()); + mvo.setMemId(rateInfo.getMemId()); + String category = mvo.getCategory(); + String cateCode = mvo.getCateCode(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for(HashMap topRateInfo : topRateInfoList) { + String topCategory = topRateInfo.get("category").toString(); + String topCateCode = topRateInfo.get("cateCode").toString(); + Double maxPointRate = Double.valueOf(topRateInfo.get("pointRate").toString()); + Double maxLoseRate = Double.valueOf(topRateInfo.get("loseRate").toString()); + if(upPartner.getPartnerLevel().equals("AUTO")) { + maxPointRate = 50.0; + maxLoseRate = 50.0; + } + if(cateCode.equals(topCateCode)) { + if(maxPointRate < pointRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::pointRate::"+pointRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxPointRate::"+maxPointRate); + String resultMsg = "롤링:"+"cateCode::"+cateCode+ "::"+maxPointRate+" 보다 작은값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(maxLoseRate < loseRate) { + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::loseRate::"+loseRate); + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxLoseRate::"+maxLoseRate); + String resultMsg = "루징:"+"cateCode::"+cateCode+ "::"+maxLoseRate+" 보다 작은값을 입력하세요"; + log.info(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + } + + userService.adminJoin(signupMember); + + try { + if(rateInfo != null) { + rateService.rateInfoUpdate(rateInfo); + } + } catch(Exception eee) { + log.error(LOG_PREFIX+ "Partner_Rate_Setting::Exception::"+eee.toString()); + } + + apiResponse.success(); + } catch(ApiException e) { + log.error(LOG_PREFIX+ "ApiException::"+e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [하부 파트너 목록] API + */ + @ResponseBody + @PostMapping(value={"/lowerPartnerList"}) + public ApiResponse lowerPartnerList(@RequestHeader String token, HttpServletRequest request, @RequestBody RetailLowerSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::lowerPartnerList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + if(search == null) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(tokenInfo.getSid()); + log.info(LOG_PREFIX+ "RetailLowerSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(search.getTargetLevel() == null || search.getTargetLevel().equals("")) { + String targetLevel = retailService.getNextTargetLevel(search); + search.setTargetLevel(targetLevel); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage() == 0) search.setPage(1); + + int totalCount = retailService.getLowerPartnerListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> list = retailService.getLowerPartnerList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::lowerPartnerList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::lowerPartnerList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + + /* + * [파트너 상세 - 기본정보] API + */ + @ResponseBody + @PostMapping(value={"/detail/info"}) + public ApiResponse detailInfo(@RequestHeader String token, HttpServletRequest request, @RequestBody UserSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::detailInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(tokenInfo.getMid().equals(search.getMemId())) { + log.error(LOG_PREFIX+ "본인요율 수정 불가"); + throw new ApiException("MR03", "본인요율 수정 불가"); + } + + Member bot = new Member(); + bot.setSiteId(tokenInfo.getSid()); + bot.setMemId(search.getMemId()); + bot.setRecommenderId(tokenInfo.getMid()); + int botCnt = userService.getIsMyBottomCnt(bot); + if(botCnt == 0) { + log.error(LOG_PREFIX+ "본인하부가 아니면 요율수정 불가"); + throw new ApiException("MR04", "본인하부가 아니면 요율수정 불가"); + } + + UserDetailInfo userDetailInfo = retailService.getUserDetailInfo(search); + apiResponse.put("partnerInfo", userDetailInfo); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너 상세 - 기본정보 저장] API + */ + @ResponseBody + @PostMapping(value={"/detail/info/save"}) + public ApiResponse detailInfoSave(@RequestHeader String token, HttpServletRequest request, @RequestBody UserDetailInfo info) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::detailInfoSave::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + info.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "UserDetailInfo::"+info.toString()); + + if(info.getMemId() == null || info.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + int result = retailService.setUserDetailInfo(info); + log.info(LOG_PREFIX+ "setUserDetailInfo result::"+result); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailInfoSave::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailInfoSave::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너 상세 - 요율정보] API + */ + @ResponseBody + @PostMapping(value={"/detail/rateInfo"}) + public ApiResponse detailRateInfo(@RequestHeader String token, HttpServletRequest request, @RequestBody UserSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::detailRateInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + Member param = new Member(); + param.setSiteId(tokenInfo.getSid()); + param.setMemId(search.getMemId()); + List> memRollingInfo = rateService.getMemRollingInfo(param); + apiResponse.put("memRollingInfo", memRollingInfo); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailRateInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailRateInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너 상세 - 요율정보 저장] API + */ + @ResponseBody + @PostMapping(value="/detail/rateInfo/save") + public ApiResponse detailRateInfoSave(HttpServletRequest request, @RequestHeader String token, @RequestBody RateInfo rateInfo) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + + String LOG_PREFIX = "#-v2::retail::detailRateInfo::save::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + log.info(LOG_PREFIX+ "RateInfo_BF::"+rateInfo.toString()); + rateInfo.setSiteId(tokenInfo.getSid()); + log.info(LOG_PREFIX+ "RateInfo_AF::"+rateInfo.toString()); + + if(rateInfo.getMemId() == null || rateInfo.getMemId().equals("")) { + log.error(LOG_PREFIX+ "Not null memId"); + throw new ApiException("MR01", "Not null memId"); + } + + if(tokenInfo.getMid().equals(rateInfo.getMemId())) { + log.error(LOG_PREFIX+ "본인요율 수정 불가"); + throw new ApiException("MR03", "본인요율 수정 불가"); + } + + Member param = new Member(); + param.setSiteId(tokenInfo.getSid()); + param.setMemId(tokenInfo.getMid()); + HashMap myDetail = userService.getMemberDetail_3(param); + String subMemRateModifyYn = myDetail.get("subMemRateModifyYn").toString(); + if(!subMemRateModifyYn.equals("Y")) { + log.error(LOG_PREFIX+ "subMemRateModifyYn::"+subMemRateModifyYn); + throw new ApiException("MR99", "accessDinied"); + } + + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(rateInfo.getMemId()); + search.setRecommenderId(tokenInfo.getMid()); + int botCnt = userService.getIsMyBottomCnt(search); + if(botCnt == 0) { + log.error(LOG_PREFIX+ "본인하부가 아니면 요율수정 불가"); + throw new ApiException("MR04", "본인하부가 아니면 요율수정 불가"); + } + LOG_PREFIX = LOG_PREFIX+rateInfo.getSiteId()+"::"+rateInfo.getMemId()+"::::"; + log.info(LOG_PREFIX+ "RateInfo::"+rateInfo); + + List> myRollingInfoList = rateService.getMemRollingInfo(search); + for(RateVO mvo : rateInfo.getRateList()) { + mvo.setSiteId(rateInfo.getSiteId()); + mvo.setMemId(rateInfo.getMemId()); + String category = mvo.getCategory(); + String cateCode = mvo.getCateCode(); + Double pointRate = Double.valueOf(mvo.getPointRate()); + Double loseRate = Double.valueOf(mvo.getLoseRate()); + + for(HashMap myRollingInfo : myRollingInfoList) { + String myCategory = myRollingInfo.get("category").toString(); + String myCateCode = myRollingInfo.get("cateCode").toString(); + Double maxPointRate = Double.valueOf(myRollingInfo.get("maxPointRate").toString()); + Double minPointRate = Double.valueOf(myRollingInfo.get("minPointRate").toString()); + Double maxLoseRate = Double.valueOf(myRollingInfo.get("maxLoseRate").toString()); + Double minLoseRate = Double.valueOf(myRollingInfo.get("minLoseRate").toString()); + if(cateCode.equals(myCateCode)) { + if(maxPointRate < pointRate || minPointRate > pointRate) { + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::pointRate::"+pointRate); + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxPointRate::"+maxPointRate+"::MinPointRate::"+minPointRate); + String resultMsg = "롤링:"+"cateCode::"+cateCode+ "::"+maxPointRate+", "+minPointRate+" 사이값을 입력하세요"; + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(maxLoseRate < loseRate || minLoseRate > loseRate) { + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::loseRate::"+loseRate); + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxLoseRate::"+maxLoseRate+"::MinLoseRate::"+minLoseRate); + String resultMsg = "루징:"+"cateCode::"+cateCode+ "::"+maxLoseRate+", "+minLoseRate+" 사이값을 입력하세요"; + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(10.0 < pointRate) { + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::pointRate::"+pointRate); + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxPointRate::"+10.0); + String resultMsg = "롤링요율은 최대 10% 까지만 허용됩니다."; + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + + if(50.0 < loseRate) { + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::loseRate::"+loseRate); + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::MaxLoseRate::"+50.0); + String resultMsg = "루징요율은 최대 50% 까지만 허용됩니다."; + log.error(LOG_PREFIX+ "cateCode::"+cateCode+ "::resultMsg : " + resultMsg); + throw new ApiException("U031", resultMsg); + } + } + } + } + + rateService.rateInfoUpdate(rateInfo); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", rateInfo.getMemId()+"::요율 변경"); + logParam.put("logDesc", rateInfo.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailRateInfo::save::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailRateInfo::save::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + + /* + * [파트너 상세 - 요율정보(세부설정)] API + */ + @ResponseBody + @PostMapping(value="/detail/multipleRateInfo") + public ApiResponse multipleRateInfo(@RequestHeader String token, HttpServletRequest request, @Valid @RequestBody MultipleRateInfo param) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::multipleRateInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + param.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "MultipleRateInfo::"+param.toString()); + + if(param.getMemId() == null || param.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + List multipleRateList = userService.getMultipleRateList(param); + param.setRateList(multipleRateList); + + apiResponse.put("multipleRateInfo", param); + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::multipleRateInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::multipleRateInfo::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너 상세 - 요율정보(세부설정) 저장] API + */ + @ResponseBody + @PostMapping(value="/detail/multipleRateInfo/save") + public ApiResponse multipleRateInfoSave(@RequestHeader String token, HttpServletRequest request, @RequestBody MultipleRateInfo param) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::multipleRateInfo::save::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + param.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "MultipleRateInfo::"+param.toString()); + + Member search = new Member(); + search.setSiteId(tokenInfo.getSid()); + search.setMemId(tokenInfo.getMid()); + HashMap myDetail = userService.getMemberDetail_3(search); + String subMemRateModifyYn = myDetail.get("subMemRateModifyYn").toString(); + if(!subMemRateModifyYn.equals("Y")) { + log.error(LOG_PREFIX+ "subMemRateModifyYn::"+subMemRateModifyYn); + throw new ApiException("MR99", "accessDinied"); + } + + if(param.getMemId() == null || param.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + if(tokenInfo.getMid().equals(param.getMemId())) { + log.error(LOG_PREFIX+ "본인요율 수정 불가"); + throw new ApiException("MR03", "본인요율 수정 불가"); + } + + Member bot = new Member(); + bot.setSiteId(tokenInfo.getSid()); + bot.setMemId(param.getMemId()); + bot.setRecommenderId(tokenInfo.getMid()); + int botCnt = userService.getIsMyBottomCnt(bot); + if(botCnt == 0) { + log.error(LOG_PREFIX+ "본인하부가 아니면 요율수정 불가"); + throw new ApiException("MR04", "본인하부가 아니면 요율수정 불가"); + } + + List afterRateList = param.getRateList(); + List beforeRateList = userService.getMultipleRateList(param); + + for(MultipleRate afterRate : afterRateList) { + for(MultipleRate beforeRate : beforeRateList) { + if(afterRate.getRateType().equals(beforeRate.getRateType())) { + if(beforeRate.getMaxPointRate() < afterRate.getPointRate() || beforeRate.getMinPointRate() > afterRate.getPointRate()) { + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::pointRate::"+afterRate.getPointRate()); + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::MaxPointRate::"+beforeRate.getMaxPointRate()+"::MinPointRate::"+beforeRate.getMinPointRate()); + String resultMsg = "["+afterRate.getRateType()+"] 롤링:"+beforeRate.getMaxPointRate()+", "+beforeRate.getMinPointRate()+" 사이값을 입력하세요"; + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::resultMsg : " + resultMsg); + throw new ApiException("U032", resultMsg); + } + + if(beforeRate.getMaxLoseRate() < afterRate.getLoseRate() || beforeRate.getMinLoseRate() > afterRate.getLoseRate()) { + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::loseRate::"+afterRate.getLoseRate()); + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::rateType::"+afterRate.getRateType()+"::MaxLoseRate::"+beforeRate.getMaxLoseRate()+"::MinLoseRate::"+beforeRate.getMinLoseRate()); + String resultMsg = "["+afterRate.getRateType()+"] 루징:"+beforeRate.getMaxPointRate()+", "+beforeRate.getMinPointRate()+" 사이값을 입력하세요"; + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::resultMsg : " + resultMsg); + throw new ApiException("U032", resultMsg); + } + } + } + } + + userService.updateMultipleRate(param); + + try { + HashMap logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "UPDATE"); + logParam.put("logoutYn", ""); + logParam.put("logEndPoint", request.getRequestURI()); + logParam.put("logName", param.getMemId()+"::회원 Multiple 요율 변경"); + logParam.put("logDesc", param.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", IPKit.getIpAddressByRequest(request)); + logParam.put("token", ""); + commonService.insertAdminlog(logParam); + } catch(Exception e) { log.error("insertAdminlog::Exception::"+e.toString()); } + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::multipleRateInfo::save::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::multipleRateInfo::save::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너 상세 - 로그인 기록] API + */ + @ResponseBody + @PostMapping(value={"/detail/loginLog"}) + public ApiResponse detailLoginLog(@RequestHeader String token, HttpServletRequest request, @RequestBody UserSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::detailLoginLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + List> loginLog = retailService.getDetailLoginLog(search); + apiResponse.put("loginLog", loginLog); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailLoginLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailLoginLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너 상세 - 쪽지 기록] API + */ + @ResponseBody + @PostMapping(value={"/detail/msgLog"}) + public ApiResponse detailMsgLog(@RequestHeader String token, HttpServletRequest request, @RequestBody UserListSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::detailMsgLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = retailService.getDetailMsgLogCnt(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(10); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> msgLog = retailService.getDetailMsgLog(search); + apiResponse.put("msgLog", msgLog); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailMsgLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailMsgLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너 상세 - 보유머니 변동 기록] API + */ + @ResponseBody + @PostMapping(value={"/detail/cashLog"}) + public ApiResponse detailCashLog(@RequestHeader String token, HttpServletRequest request, @RequestBody UserListSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::detailCashLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = retailService.getDetailCashLogCnt(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(10); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> cashLog = retailService.getDetailCashLog(search); + apiResponse.put("cashLog", cashLog); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailCashLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailCashLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너 상세 - 롤링변환내역] API + */ + @ResponseBody + @PostMapping(value={"/detail/rollingLog"}) + public ApiResponse detailRollingLog(@RequestHeader String token, HttpServletRequest request, @RequestBody UserListSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::detailRollingLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = retailService.getDetailRollingLogCnt(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(10); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> rollingLog = retailService.getDetailRollingLog(search); + apiResponse.put("rollingLog", rollingLog); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailRollingLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailRollingLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value={"/detail/rollingLogNew"}) + public ApiResponse detailRollingLogNew(@RequestHeader String token, HttpServletRequest request, @RequestBody UserListSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::detailRollingLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + + int totalCount = retailService.getDetailRollingLogCnt(search); + + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(10); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> rollingLog = retailService.getDetailRollingLogNew(search); + apiResponse.put("rollingLog", rollingLog); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailRollingLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::detailRollingLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [배팅 및 롤링 현황] API + */ + @ResponseBody + @PostMapping(value={"/report/betStatistics"}) + public ApiResponse betStatistics(@RequestHeader String token, HttpServletRequest request, @RequestBody UserSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::betStatistics::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + if(search.getStatType() == null || search.getStatType().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + HashMap myStatData = retailService.getMyBetStatData(search); // Use blankSpinSetType + List> botStatList = retailService.getBottomBetStatList(search); // Use blankSpinSetType + HashMap botStatSum = retailService.getBottomBetStatSum(search); // Use blankSpinSetType + + apiResponse.put("myStatData", myStatData); + apiResponse.put("botStatList", botStatList); + apiResponse.put("botStatSum", botStatSum); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::betStatistics::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::betStatistics::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [게임 기록통계 - 일자별 배팅현황] API + */ + @ResponseBody + @PostMapping(value={"/daily/betting"}) + public ApiResponse dailyBetting(@RequestHeader String token, HttpServletRequest request, @RequestBody UserSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::dailyBetting::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + List> dailyBetList = retailService.getDailyBetList(search); // Use blankSpinSetType + HashMap dailyBetSum = retailService.getDailyBetSum(search); // Use blankSpinSetType + + apiResponse.put("dailyBetList", dailyBetList); + apiResponse.put("dailyBetSum", dailyBetSum); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::dailyBetting::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::dailyBetting::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [게임 기록통계 - 일자별 게임별 현황] API + */ + @ResponseBody + @PostMapping(value={"/daily/vendors"}) + public ApiResponse dailyVendors(@RequestHeader String token, HttpServletRequest request, @RequestBody UserSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::dailyVendors::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + //List> dailyVendorList = retailService.getDailyVendorList(search); + //HashMap dailyVendorSum = retailService.getDailyVendorSum(search); + //apiResponse.put("dailyVendorList", dailyVendorList); + //apiResponse.put("dailyVendorSum", dailyVendorSum); + + apiResponse.put("dailyVendorList", null); + apiResponse.put("dailyVendorSum", null); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::dailyVendors::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::dailyVendors::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [게임 기록통계 - 일자별 사용자별 현황] API + */ + @ResponseBody + @PostMapping(value={"/daily/users"}) + public ApiResponse dailyUsers(@RequestHeader String token, HttpServletRequest request, @RequestBody UserSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::dailyUsers::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + List> dailyUserList = retailService.getDailyUserList(search); // Use blankSpinSetType + HashMap dailyUserSum = retailService.getDailyUserSum(search); // Use blankSpinSetType + + apiResponse.put("dailyUserList", dailyUserList); + apiResponse.put("dailyUserSum", dailyUserSum); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::dailyUsers::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::dailyUsers::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [게임 기록통계 - 일자별 파트너별 현황] API + */ + @ResponseBody + @PostMapping(value={"/daily/partners"}) + public ApiResponse dailyPartners(@RequestHeader String token, HttpServletRequest request, @RequestBody UserSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::retail::dailyPartners::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + List> dailyPartnerList = retailService.getDailyPartnerList(search); // Use blankSpinSetType + + apiResponse.put("dailyPartnerList", dailyPartnerList); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::dailyPartners::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::dailyPartners::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [파트너정산내역] API 기능 + */ + @ResponseBody + @PostMapping(value={"/daily/myCalculate"}) + public ApiResponse myCalculate(@RequestHeader String token, HttpServletRequest request, @RequestBody DailyReportSearch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + search.setSiteId(tokenInfo.getSid()); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + final String LOG_PREFIX = "#-v2-retail-myCalculate::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::"; + + ObjectMapper objectMapper = new ObjectMapper(); + String reqJsonStr = objectMapper.writeValueAsString(search); + JSONObject reqObj = new JSONObject(reqJsonStr); + log.info(LOG_PREFIX+ "Request {}", reqObj); + + List> reportCateInfo = reportService.getReportCateInfo(search.getSiteId()); + apiResponse.put("reportCateInfo", reportCateInfo); + + if(search.getSearchType().equals("OUTER")) { + search.setSearchMemId(tokenInfo.getMid()); + List list = reportService.getReportsListForPartner(search); + DayilPeriodicReports total = reportService.getReportsTotalForPartner(search); + apiResponse.put("search", search); + apiResponse.put("outSearchList", list); + apiResponse.put("outSearchTotal", total); + } else { + List list = reportService.getReportsListForPartner(search); + search.setSearchType("OUTER"); + List total = reportService.getReportsListForPartner(search); + DayilPeriodicReports inSearchTotal = total.get(0); + apiResponse.put("search", search); + apiResponse.put("inSearchList", list); + apiResponse.put("inSearchTotal", inSearchTotal); + } + + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [보유머니 변동 내역] API + */ + @ResponseBody + @PostMapping(value={"/cashTransLog"}) + public ApiResponse cashTransLog(@RequestHeader String token, HttpServletRequest request, @RequestBody CashTranLogSrch search) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + //Site site = getSiteByCheck(request); + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::retail::cashTransLog::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + search.setSiteId(tokenInfo.getSid()); + search.setRecommenderId(tokenInfo.getMid()); + + if(search.getOldYn() == null || search.getOldYn().equals("")) { + search.setOldYn("N"); + } + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage()==0)search.setPage(1); + int totalCount = cashService.cashTransLogCnt2(search); + + if(totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(10); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(20); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + log.info("[REQUEST: "+request.getRequestURI()+"] " + search); + + List cashTransLogs = cashService.cashTransLogList2(search); + apiResponse.put("cashTransLogs", cashTransLogs); + apiResponse.success(); + + } catch(ApiException e) { + log.error(e.toString()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + log.error(e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [보유금 지급] API + */ + @ResponseBody + @PostMapping(value="/cashIn") + public ApiResponse cashIn(@RequestHeader String token, HttpServletRequest request, @RequestBody CashIn cash) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + try { + String time = String.valueOf(System.currentTimeMillis()); + String regIp = IPKit.getIpAddressByRequest(request); + + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + String siteId = tokenInfo.getSid(); + String partnerId = tokenInfo.getMid(); + String userId = cash.getMemId(); + + String LOG_PREFIX = "#-V2::Retail::cashIn::"+siteId+"::"+partnerId+"::"+userId+"::::"; + + Member searchMy = new Member(); + searchMy.setSiteId(tokenInfo.getSid()); + searchMy.setMemId(tokenInfo.getMid()); + MemberDetail myDetail= userService.getMember(searchMy); + if(myDetail == null) { + throw new ApiException("U003", "unknown user"); + } + + if(myDetail.getCashOutFlag() == 1) { + throw new ApiException("C411", "상위 유저 회수 처리중입니다. 잠시 후 다시 시도해주세요."); + } + + String myAbuseLockYn = myDetail.getAbuseLockYn(); + String myAbuseLockTime = myDetail.getAbuseLockTime(); + if("Y".equals(myAbuseLockYn)) { + log.error(LOG_PREFIX+ "ABZ01::" + "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + throw new ApiException("ABZ01", "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + } else { + if(!"".equals(myAbuseLockTime)) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", myDetail.getSiteId()); + lockParam.put("memId", myDetail.getMemId()); + int lockResult = userService.resetUserLock(lockParam); + log.error(LOG_PREFIX+ "resetUserLock::result::" + lockResult); + } + } + + if(myDetail.getChangeFlag().equals("N")) { + // 통합머니 전환 프로세스 추가 + String changeResult = changeMemCashFlag(LOG_PREFIX, regIp, tokenInfo, myDetail); + if(!changeResult.equals("SUCC")) { + throw new ApiException(changeResult, "통합머니 전환 오류"); + } + } + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", siteId); + flagParam.put("memId", partnerId); + flagParam.put("cashOutFlag", 1); + int flagResult = userService.updateCashOutFlag(flagParam); + log.info(LOG_PREFIX+ "updateCashOutFlag(1) flagResult::" + flagResult); + + CashDetail paramCash = new CashDetail(); + CashDetail paramCashBot = new CashDetail(); + + if(cash.getInAmt() == null || cash.getInAmt() <= 0) { + throw new ApiException("C303", "지급할 금액을 입력하세요."); + } + + if(myDetail.getCashAmt() < cash.getInAmt()) { + throw new ApiException("C309", "보유금액 부족"); + } + if("N".equals(myDetail.getCashSendYn())) { + throw new ApiException("C301", "보유금 지급권한이 없습니다. 관리자에게 문의하세요."); + } + + if(!myDetail.getIsPartnerMember().equals("Y")) { + throw new ApiException("1000", "accessDinied"); + } + + Member searchBot = new Member(); + searchBot.setSiteId(tokenInfo.getSid()); + searchBot.setMemId(cash.getMemId()); + + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] " + cash); + + MemberDetail botMemDetail= userService.getMember(searchBot); + if(botMemDetail == null) { + throw new ApiException("C302", "보유금 지급이 불가능한 대상입니다. 아이디를 확인하세요."); + } else { + if(botMemDetail.getPartnerLevel().equals("COMP") || botMemDetail.getPartnerLevel().equals("AUTO")) { + // 지급 불가 대상의 파트너단계 : 컴퍼니("COMP"), 컴퍼니자동생성회원("AUTO") + throw new ApiException("C302", "보유금 지급이 불가능한 대상입니다. 아이디를 확인하세요."); + } else if(botMemDetail.getPartnerLevel().equals("NORMAL")) { + // 지급 가능 대상의 파트너단계 : 일반회원("NORMAL") + /* // 직하부 일반회원이 아니여도 지급 가능하도록 변경 - 2024-07-17 by.Andy + if(!botMemDetail.getRecommenderId().equals(tokenInfo.getMid())) { + throw new ApiException("C302", "보유금 지급이 불가능한 대상입니다. 아이디를 확인하세요."); + } + */ + } else { + // 지급 가능 대상의 파트너단계 : 파트너회원("PTN_1 ~ 7") + int myLevel = Integer.parseInt(tokenInfo.getPartnerLevel().substring(4)); + int botLevel = Integer.parseInt(botMemDetail.getPartnerLevel().substring(4)); + if(myLevel > botLevel) { + throw new ApiException("C302", "보유금 지급이 불가능한 대상입니다. 아이디를 확인하세요."); + } + } + } + + String abuseLockYn = botMemDetail.getAbuseLockYn(); + String abuseLockTime = botMemDetail.getAbuseLockTime(); + if("Y".equals(abuseLockYn)) { + log.error(LOG_PREFIX+ "ABZ01::" + "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + throw new ApiException("ABZ01", "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + } else { + if(!"".equals(abuseLockTime)) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", botMemDetail.getSiteId()); + lockParam.put("memId", botMemDetail.getMemId()); + int lockResult = userService.resetUserLock(lockParam); + log.error(LOG_PREFIX+ "resetUserLock::result::" + lockResult); + } + } + + if("Y".equals(botMemDetail.getMemLockYn())) { + throw new ApiException("C391", "정지회원은 보유금 지급/회수가 불가능합니다."); + } + + if("N".equals(botMemDetail.getBetYn()) && "NORMAL".equals(botMemDetail.getPartnerLevel())) { + throw new ApiException("C392", "배팅금지 회원은 보유금 지급/회수가 불가능합니다."); + } + + paramCash.setSiteId(tokenInfo.getSid()); + paramCash.setMemId(tokenInfo.getMid()); + paramCash.setCashType("-3"); + paramCash.setCashAmt(-1 * cash.getInAmt()); + paramCash.setCashDesc("보유금 지급"); + paramCash.setDelYn("N"); + paramCash.setCashStatus("3"); + paramCash.setMemo(""); + paramCash.setRegId(cash.getMemId()); + paramCash.setAdminId(""); + paramCash.setWaitTime(-30); + log.info(LOG_PREFIX+ "CashDetail Top: " + paramCash); + long cashIdx1 = cashService.insertCashTopUser(paramCash); + if(cashIdx1 == 0) { + log.error(LOG_PREFIX+ "중복요청 입니다."); + throw new ApiException("C999", "중복요청 입니다."); + } else { + // 상위지급 로그 + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CASH_OUT"); + logParam.put("logoutYn", ""); + logParam.put("logName", "보유금 지급["+myDetail.getCashAmt()+"][+"+cash.getInAmt()+"]"); + logParam.put("logDesc", "[time:"+time+"][idx:"+cashIdx1+"]"); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", regIp); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e){ + System.out.print(LOG_PREFIX+ e.toString()); + } + + paramCashBot.setSiteId(tokenInfo.getSid()); + paramCashBot.setMemId(cash.getMemId()); + paramCashBot.setCashType("33"); + paramCashBot.setCashAmt(cash.getInAmt()); + paramCashBot.setCashDesc("상위유저 지급 머니"); + paramCashBot.setDelYn("N"); + paramCashBot.setCashStatus("3"); + paramCashBot.setMemo(""); + paramCashBot.setRegId(tokenInfo.getMid()); + paramCashBot.setAdminId(""); + paramCashBot.setWaitTime(-1); + paramCashBot.setRefIdx(cashIdx1); + log.info(LOG_PREFIX+ "CashDetail Bot: " + paramCashBot); + long cashIdx2 = cashService.insertCashBotUser(paramCashBot); + if(cashIdx2 == 0) { + log.error(LOG_PREFIX+ "중복요청 입니다."); + throw new ApiException("C999", "중복요청 입니다."); + } else { + try { + // 하위지급 로그 + try{ + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", cash.getMemId()); + logParam.put("logType", "CASH_IN"); + logParam.put("logoutYn", ""); + logParam.put("logName", "상위유저 지급 머니["+botMemDetail.getCashAmt()+"][-"+cash.getInAmt()+"]"); + logParam.put("logDesc", "[time:"+time+"][idx:"+cashIdx2+"]"); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", regIp); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e){ + System.out.print(e.toString()); + } + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "[ConnectTimeoutException]"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "[SocketTimeoutException]"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "[InterruptedException]"+rae.getMessage()); + } + } + } + } + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", siteId); + lockParam.put("memId", partnerId); + lockParam.put("symLock", "N"); + int resultLock = userService.userChangeSymLock(lockParam); + log.info(LOG_PREFIX+ "userChangeSymLock(N) Result="+resultLock); + + flagParam.put("cashOutFlag", 0); + flagResult = userService.updateCashOutFlag(flagParam); + log.info(LOG_PREFIX+ "updateCashOutFlag(0) flagResult::" + flagResult); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("actionType", 2); + commonService.updateAcctionLog(logParam); + } catch(Exception e){System.out.print(e.toString());} + + apiResponse.success(); + + } catch(ApiException e) { + apiResponse = e.getApiResponse(); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String partnerId = tokenInfo.getMid(); + String userId = cash.getMemId(); + String LOG_PREFIX = "#-V2::Retail::cashIn::"+siteId+"::"+partnerId+"::"+userId+"::::"; + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", siteId); + flagParam.put("memId", partnerId); + flagParam.put("cashOutFlag", 0); + int flagResult = userService.updateCashOutFlag(flagParam); + log.error(LOG_PREFIX+ "updateCashOutFlag(0) flagResult::" + flagResult); + log.error(LOG_PREFIX+ "ApiException::"+ apiResponse.toString()); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String partnerId = tokenInfo.getMid(); + String userId = cash.getMemId(); + String LOG_PREFIX = "#-V2::Retail::cashIn::"+siteId+"::"+partnerId+"::"+userId+"::::"; + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", siteId); + flagParam.put("memId", partnerId); + flagParam.put("cashOutFlag", 0); + int flagResult = userService.updateCashOutFlag(flagParam); + log.error(LOG_PREFIX+ "updateCashOutFlag(0) flagResult::" + flagResult); + + log.error(LOG_PREFIX+ "Exception::"+ e.toString()); + e.printStackTrace(); + apiResponse.fail(); + log.error(LOG_PREFIX+ "Exception::"+ apiResponse.toString()); + } + + return apiResponse; + } + + + /* + * [보유금 회수] API + * 기존 보유금 회수 프로세스 + 통합머니전환 프로세스 + */ + @ResponseBody + @PostMapping(value="/cashOut") + public ApiResponse cashOut(@RequestHeader String token, HttpServletRequest request, @RequestBody CashOut cash) throws Exception { + ApiResponse apiResponse = new ApiResponse(); + + try { + String time = String.valueOf(System.currentTimeMillis()); + String regIp = IPKit.getIpAddressByRequest(request); + + if(token==null) { + throw new ApiException("1000", "accessDinied"); + } + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + + String siteId = tokenInfo.getSid(); + String partnerId = tokenInfo.getMid(); + String userId = cash.getMemId(); + + String LOG_PREFIX = "#-V2::Retail::cashOut::"+siteId+"::"+partnerId+"::"+userId+"::::"; + + Member searchBot = new Member(); + searchBot.setSiteId(siteId); + searchBot.setMemId(userId); + MemberDetail botMemDetail = userService.getMember(searchBot); + if(botMemDetail == null) { + throw new ApiException("C402", "보유금 회수가 불가능한 대상입니다. 아이디를 확인하세요."); + } + + if(botMemDetail.getCashOutFlag() == 1) { + throw new ApiException("C410", "하위 유저 출금 처리중입니다. 잠시 후 다시 시도해주세요."); + } + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", siteId); + flagParam.put("memId", userId); + flagParam.put("cashOutFlag", 1); + int flagResult = userService.updateCashOutFlag(flagParam); + log.info(LOG_PREFIX+ "updateCashOutFlag(1) flagResult::" + flagResult); + + CashDetail paramCash = new CashDetail(); + CashDetail paramCashBot = new CashDetail(); + + if(cash.getOutAmt() == null || cash.getOutAmt() <= 0) { + throw new ApiException("C403", "회수할 금액을 입력하세요."); + } + + Member searchMy = new Member(); + searchMy.setSiteId(tokenInfo.getSid()); + searchMy.setMemId(tokenInfo.getMid()); + MemberDetail myDetail = userService.getMember(searchMy); + if(myDetail == null) { + throw new ApiException("U003", "unknown user"); + } + + if("N".equals(myDetail.getCashReceiveYn())) { + throw new ApiException("C401", "보유금 회수권한이 없습니다. 관리자에게 문의하세요."); + } + + if(!myDetail.getIsPartnerMember().equals("Y")) { + throw new ApiException("1000", "accessDinied"); + } + + log.info(LOG_PREFIX+ "[REQUEST: "+request.getRequestURI()+"] " + cash); + + if(botMemDetail.getPartnerLevel().equals("COMP") || botMemDetail.getPartnerLevel().equals("AUTO")) { + // 회수 불가 대상의 파트너단계 : 컴퍼니("COMP"), 컴퍼니자동생성회원("AUTO") + throw new ApiException("C402", "보유금 회수가 불가능한 대상입니다. 아이디를 확인하세요."); + } else if(botMemDetail.getPartnerLevel().equals("NORMAL")) { + // 회수 가능 대상의 파트너단계 : 일반회원("NORMAL") + /* // 직하부 일반회원이 아니여도 회수 가능하도록 변경 - 2024-07-17 by.Andy + if(!botMemDetail.getRecommenderId().equals(tokenInfo.getMid())) { + throw new ApiException("C402", "보유금 회수가 불가능한 대상입니다. 아이디를 확인하세요."); + } + */ + } else { + // 회수 가능 대상의 파트너단계 : 파트너회원("PTN_1 ~ 7") + int myLevel = Integer.parseInt(tokenInfo.getPartnerLevel().substring(4)); + int botLevel = Integer.parseInt(botMemDetail.getPartnerLevel().substring(4)); + if(myLevel > botLevel) { + throw new ApiException("C402", "보유금 회수가 불가능한 대상입니다. 아이디를 확인하세요."); + } + } + + String abuseLockYn = botMemDetail.getAbuseLockYn(); + String abuseLockTime = botMemDetail.getAbuseLockTime(); + if("Y".equals(abuseLockYn)) { + log.error(LOG_PREFIX+ "ABZ01::" + "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + throw new ApiException("ABZ01", "부정행위가 감지되었습니다. 2분뒤 다시 요청하세요."); + } else { + if(!"".equals(abuseLockTime)) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", botMemDetail.getSiteId()); + lockParam.put("memId", botMemDetail.getMemId()); + int lockResult = userService.resetUserLock(lockParam); + log.error(LOG_PREFIX+ "resetUserLock::result::" + lockResult); + } + } + + if(botMemDetail.getChangeFlag().equals("N")) { + // throw new ApiException("C098", "하위 유저 [통합머니전환] 후 회수 가능합니다."); + // 통합머니 전환 프로세스 추가 + String changeResult = changeMemCashFlag(LOG_PREFIX, regIp, tokenInfo, botMemDetail); + if(!changeResult.equals("SUCC")) { + throw new ApiException(changeResult, "통합머니 전환 오류"); + } + } + + if(botMemDetail.getCashAmt() < cash.getOutAmt()) { + throw new ApiException("C409", "하위 보유금액 부족"); + } + + if("Y".equals(botMemDetail.getMemLockYn())) { + throw new ApiException("C391", "정지회원은 보유금 지급/회수가 불가능합니다."); + } + + if("N".equals(botMemDetail.getBetYn()) && "NORMAL".equals(botMemDetail.getPartnerLevel())) { + throw new ApiException("C392", "배팅금지 회원은 보유금 지급/회수가 불가능합니다."); + } + + paramCashBot.setSiteId(tokenInfo.getSid()); + paramCashBot.setMemId(cash.getMemId()); + paramCashBot.setCashType("-33"); + paramCashBot.setCashAmt(-1 * cash.getOutAmt()); + paramCashBot.setCashDesc("상위유저 회수 머니"); + paramCashBot.setDelYn("N"); + paramCashBot.setCashStatus("3"); + paramCashBot.setMemo(""); + paramCashBot.setRegId(tokenInfo.getMid()); + paramCashBot.setAdminId(""); + paramCashBot.setWaitTime(-60); + log.info(LOG_PREFIX+ "CashDetail Bot: " + paramCashBot); + long cashIdx2 = cashService.insertCashBotUser(paramCashBot); + if(cashIdx2 == 0) { + log.error(LOG_PREFIX+ "중복요청 입니다."); + throw new ApiException("C999", "중복요청 입니다."); + } else { + try { + // 하위회수 로그 + try{ + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", cash.getMemId()); + logParam.put("logType", "CASH_OUT"); + logParam.put("logoutYn", ""); + logParam.put("logName", "상위유저 회수 머니["+botMemDetail.getCashAmt()+"][-"+cash.getOutAmt()+"]"); + logParam.put("logDesc", "[time:"+time+"][idx:"+cashIdx2+"]"); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", regIp); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e){ + System.out.print(LOG_PREFIX+ "[Exception]"+e.toString()); + } + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "[ConnectTimeoutException]"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "[SocketTimeoutException]"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "[InterruptedException]"+rae.getMessage()); + } + } + + paramCash.setSiteId(tokenInfo.getSid()); + paramCash.setMemId(tokenInfo.getMid()); + paramCash.setCashType("3"); + paramCash.setCashAmt(cash.getOutAmt()); + paramCash.setCashDesc("보유금 회수"); + paramCash.setDelYn("N"); + paramCash.setCashStatus("3"); + paramCash.setMemo(""); + paramCash.setRegId(cash.getMemId()); + paramCash.setAdminId(""); + paramCash.setWaitTime(-1); + paramCash.setRefIdx(cashIdx2); + log.info(LOG_PREFIX+ "CashDetail Top: " + paramCash); + long cashIdx1 = cashService.insertCashTopUser(paramCash); + if(cashIdx1 == 0) { + log.error(LOG_PREFIX+ "중복요청 입니다."); + throw new ApiException("C999", "중복요청 입니다."); + } else { + // 상위회수 로그 + try{ + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "CASH_IN"); + logParam.put("logoutYn", ""); + logParam.put("logName", "보유금 회수["+myDetail.getCashAmt()+"][+"+cash.getOutAmt()+"]"); + logParam.put("logDesc", "[time:"+time+"][idx:"+cashIdx1+"]"); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", regIp); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e){ + System.out.print(e.toString()); + } + } + } + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", siteId); + lockParam.put("memId", userId); + lockParam.put("symLock", "N"); + int resultLock = userService.userChangeSymLock(lockParam); + log.info(LOG_PREFIX+ "userChangeSymLock(N) Result="+resultLock); + + flagParam.put("cashOutFlag", 0); + flagResult = userService.updateCashOutFlag(flagParam); + log.info(LOG_PREFIX+ "updateCashOutFlag(0) flagResult::" + flagResult); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("actionType", 2); + commonService.updateAcctionLog(logParam); + } catch(Exception e){System.out.print(e.toString());} + + apiResponse.success(); + + } catch(ApiException e) { + apiResponse = e.getApiResponse(); + + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String partnerId = tokenInfo.getMid(); + String userId = cash.getMemId(); + String LOG_PREFIX = "#-V2::Retail::cashOut::"+siteId+"::"+partnerId+"::"+userId+"::::"; + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", siteId); + flagParam.put("memId", userId); + flagParam.put("cashOutFlag", 0); + int flagResult = userService.updateCashOutFlag(flagParam); + log.error(LOG_PREFIX+ "updateCashOutFlag(0) flagResult::" + flagResult); + log.error(LOG_PREFIX+ "ApiException::"+ apiResponse.toString()); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + String siteId = tokenInfo.getSid(); + String partnerId = tokenInfo.getMid(); + String userId = cash.getMemId(); + String LOG_PREFIX = "#-V2::Retail::cashOut::"+siteId+"::"+partnerId+"::"+userId+"::::"; + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", siteId); + flagParam.put("memId", userId); + flagParam.put("cashOutFlag", 0); + int flagResult = userService.updateCashOutFlag(flagParam); + log.error(LOG_PREFIX+ "updateCashOutFlag(0) flagResult::" + flagResult); + + log.error(LOG_PREFIX+ "Exception::"+ e.toString()); + e.printStackTrace(); + apiResponse.fail(); + log.error(LOG_PREFIX+ "Exception::"+ apiResponse.toString()); + } + + return apiResponse; + } + + + private String changeMemCashFlag(String LOG_PREFIX, String regIp, TokenInfo tokenInfo, MemberDetail botMemDetail) { + String changeResult = "SUCC"; + + String siteId = tokenInfo.getSid(); + String partnerId = tokenInfo.getMid(); + String userId = botMemDetail.getMemId(); + + LOG_PREFIX = LOG_PREFIX + "::changeMemCashFlag::::"; + + try { + // Triple 이용 사이트 + HashMap param = new HashMap<>(); + param.put("siteId", tokenInfo.getSid()); + param.put("memId", botMemDetail.getMemId()); + param.put("intervalTime", -10); + param.put("apiType", "triple"); + HashMap lastGameInfo = userService.getLastGameInfoNew(param); + if(lastGameInfo != null) { + log.info(LOG_PREFIX+ "lastGameInfo : " + lastGameInfo.toString()); + // Playing Game + log.error(LOG_PREFIX+ "배팅내역 정산중입니다. 잠시(10초) 후 다시 시도해주세요."); + changeResult = "C009"; + return changeResult; + } + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", siteId); + lockParam.put("memId", partnerId); + lockParam.put("symLock", "Y"); + int resultLock = userService.userChangeSymLock(lockParam); + log.info(LOG_PREFIX+ "userChangeSymLock(Y) Result="+resultLock); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", siteId); + flagParam.put("memId", partnerId); + flagParam.put("changeFlag", "Y"); + int result = userService.userChangeFlag(flagParam); + log.info(LOG_PREFIX+ "userChangeFlag(Y) result="+result); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "update"); + logParam.put("logoutYn", ""); + logParam.put("logName", "ApiV2RetailController.changeMemCashFlag() => UserService.userChangeFlag("+partnerId+")"); + logParam.put("logDesc", flagParam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", regIp); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e) {System.out.print(e.toString());} + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "[ConnectTimeoutException]::"+rae.getMessage()); + changeResult = "TE99"; + } else if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "[SocketTimeoutException]::"+rae.getMessage()); + changeResult = "TE99"; + } else if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "[InterruptedException]::"+rae.getMessage()); + changeResult = "TE99"; + } else { + log.error(LOG_PREFIX+ "[ResourceAccessException]::"+rae.getMessage()); + changeResult = "RE99"; + } + + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", siteId); + lockParam.put("memId", partnerId); + lockParam.put("symLock", "Y"); + int resultLock = userService.userChangeSymLock(lockParam); + log.error(LOG_PREFIX+ "userChangeSymLock(Y) Result="+resultLock); + + HashMap flagParam = new HashMap<>(); + flagParam.put("siteId", siteId); + flagParam.put("memId", partnerId); + flagParam.put("changeFlag", "Y"); + int result = userService.userChangeFlag(flagParam); + log.error(LOG_PREFIX+ "userChangeFlag(Y) result="+result); + + try { + Map logParam = new HashMap(); + logParam.put("siteId", tokenInfo.getSid()); + logParam.put("memId", tokenInfo.getMid()); + logParam.put("logType", "update"); + logParam.put("logoutYn", ""); + logParam.put("logName", "ApiV2RetailController.changeMemCashFlag() => UserService.userChangeFlag("+partnerId+")"); + logParam.put("logDesc", flagParam.toString()); + logParam.put("regId", tokenInfo.getMid()); + logParam.put("regIp", regIp); + logParam.put("token", ""); + commonService.insertlog(logParam); + } catch(Exception e) {System.out.print(e.toString());} + + } catch (Exception e) { + log.error(LOG_PREFIX+ "[Exception]::"+e.toString()); + e.printStackTrace(); + changeResult = "EE99"; + } + + return changeResult; + } + +} diff --git a/src/main/java/com/bb/front/v2/ApiV2UserController.java b/src/main/java/com/bb/front/v2/ApiV2UserController.java new file mode 100644 index 0000000..6e3dd0d --- /dev/null +++ b/src/main/java/com/bb/front/v2/ApiV2UserController.java @@ -0,0 +1,482 @@ +package com.bb.front.v2; + +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.bb.exception.ApiException; +import com.bb.jwt.JwtManager; +import com.bb.model.ApiResponse; +import com.bb.model.PageFormVO; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; +import com.bb.service.CommonService; +import com.bb.service.RateService; +import com.bb.service.RetailService; +import com.bb.service.UserService; +import com.bb.util.PagingUtil; + +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@Slf4j +@RequestMapping("/api/v2/user") +@RequiredArgsConstructor +@SecurityRequirement(name = "Authorization") +public class ApiV2UserController { + + private final JwtManager jwtManager; + + private final RetailService retailService; + + private final UserService userService; + + private final RateService rateService; + + private final CommonService commonService; + + private final PasswordEncoder passwordEncoder; + + + + /* + * [직하부 회원 목록] API + */ + @ResponseBody + @PostMapping(value={"/lowerUserList"}) + public ApiResponse lowerUserList(@RequestHeader String token, HttpServletRequest request, @RequestBody UserListSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::user::lowerUserList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + if(search == null) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(tokenInfo.getSid()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + if(search.getTreeOption() == null || "".equals(search.getTreeOption())) { + search.setTreeOption("N"); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info(LOG_PREFIX+ "UserListSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage() == 0) search.setPage(1); + + int totalCount = userService.getLowerUserListCnt(search); // Use blankSpinSetType + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> list = userService.getLowerUserList(search); // Use blankSpinSetType + apiResponse.put("list", list); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::lowerUserList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::lowerUserList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [접속중 회원 목록] API + */ + @ResponseBody + @PostMapping(value={"/loginList"}) + public ApiResponse loginList(@RequestHeader String token, HttpServletRequest request, @RequestBody UserSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::user::loginList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + if(search == null) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(tokenInfo.getSid()); + + if(search.getTreeOption() == null || "".equals(search.getTreeOption())) { + search.setTreeOption("N"); + } + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + log.info(LOG_PREFIX+ "UserSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + List> list = userService.getLoginUserList(search); // Use blankSpinSetType + apiResponse.put("list", list); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::loginList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::loginList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [회원 상세 - 게임실행 목록] API + */ + @ResponseBody + @PostMapping(value={"/detail/playGameList"}) + public ApiResponse playGameList(@RequestHeader String token, HttpServletRequest request, @RequestBody UserListSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::user::playGameList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + if(search == null) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(tokenInfo.getSid()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + log.info(LOG_PREFIX+ "UserListSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage() == 0) search.setPage(1); + + int totalCount = userService.getPlayGameListCnt(search); + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> list = userService.getPlayGameList(search); + apiResponse.put("list", list); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::playGameList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::playGameList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + + /* + * [회원 상세 - 게임베팅 목록] API + */ + @ResponseBody + @PostMapping(value={"/detail/betList"}) + public ApiResponse detailBetList(@RequestHeader String token, HttpServletRequest request, @RequestBody UserListSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::user::detailBetList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + if(search == null) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(tokenInfo.getSid()); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + log.info(LOG_PREFIX+ "UserListSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage() == 0) search.setPage(1); + + int totalCount = userService.getDetailBetListCnt(search); // Use blankSpinSetType + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> list = userService.getDetailBetList(search); // Use blankSpinSetType + apiResponse.put("list", list); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::detailBetList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::detailBetList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + + @ResponseBody + @PostMapping(value={"/detail/betListNew"}) + public ApiResponse detailBetListNew(@RequestHeader String token, HttpServletRequest request, @RequestBody UserListSearch search) throws Exception { + + ApiResponse apiResponse = new ApiResponse(); + + try { + if(token == null) { + throw new ApiException("1000", "accessDinied"); + } + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + if(!( tokenInfo.getPartnerLevel().contains("PTN") || tokenInfo.getType().equals("PARTNER") || tokenInfo.getType().equals("P_NORMAL")) ) { + throw new ApiException("1000", "accessDinied"); + } + final String LOG_PREFIX = "#-v2::user::detailBetList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + if(search == null) { + throw new ApiException("1000", "accessDinied"); + } + + search.setSiteId(tokenInfo.getSid()); + + SiteSearch paramSite = new SiteSearch(); + paramSite.setSiteId(tokenInfo.getSid()); + SiteOption siteOption = commonService.getSiteSetting(paramSite); + search.setBlankSpinSetType(siteOption.getBlankSpinSetType()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long nDate = System.currentTimeMillis(); + String nDateStr = sdf.format(nDate); + if(search.getStartDate() == null || search.getStartDate().equals("")) { + search.setStartDate(nDateStr+" 00:00:00"); + } + if(search.getEndDate() == null || search.getEndDate().equals("")) { + search.setEndDate(nDateStr+" 23:59:59"); + } + + log.info(LOG_PREFIX+ "UserListSearch::"+search.toString()); + + if(search.getMemId() == null || search.getMemId().equals("")) { + throw new ApiException("1000", "accessDinied"); + } + + PageFormVO pageVo= new PageFormVO(); + if(search.getPage() == 0) search.setPage(1); + + int totalCount = userService.getDetailBetListNewCnt(search); // Use blankSpinSetType + if (totalCount != 0) { + PageFormVO commonForm = new PageFormVO(); + commonForm.setFunction_name("goPage"); + commonForm.setPage(search.getPage()); + commonForm.setCount_per_page(20); + if(search.getCount_per_list()==0) { + commonForm.setCount_per_list(10); + } else { + commonForm.setCount_per_list(search.getCount_per_list()); + } + commonForm.setTatal_list_count(totalCount); + pageVo = PagingUtil.setPageUtil(commonForm); + search.setLimit(pageVo.getLimit()); + search.setOffset(pageVo.getOffset()); + search.setTatal_list_count(totalCount); + apiResponse.put("pageInfo", pageVo); + } + + List> list = userService.getDetailBetListNew(search); // Use blankSpinSetType + apiResponse.put("list", list); + + apiResponse.success(); + + } catch (ApiException e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::detailBetList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "ApiException::" + e.getApiResponse()); + apiResponse = e.getApiResponse(); + } catch (Exception e) { + JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token); + final String LOG_PREFIX = "#-v2::user::detailBetList::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+"::::"; + + log.error(LOG_PREFIX+ "Exception::" + e.toString()); + e.printStackTrace(); + apiResponse.fail(); + } + + return apiResponse; + } + +} diff --git a/src/main/java/com/bb/jwt/JwtClame.java b/src/main/java/com/bb/jwt/JwtClame.java new file mode 100644 index 0000000..d9f3134 --- /dev/null +++ b/src/main/java/com/bb/jwt/JwtClame.java @@ -0,0 +1,14 @@ +package com.bb.jwt; + +import lombok.Data; + +@Data +public class JwtClame { + private Integer siteIdx; + private Integer memIdx; + private String siteId; + private String memId; + private String type; + private String partnerLevel; + +} diff --git a/src/main/java/com/bb/jwt/JwtConfig.java b/src/main/java/com/bb/jwt/JwtConfig.java new file mode 100644 index 0000000..417449c --- /dev/null +++ b/src/main/java/com/bb/jwt/JwtConfig.java @@ -0,0 +1,25 @@ +package com.bb.jwt; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.bb.jwt.JwtManager; + + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class JwtConfig { + @Value("${jwt.secret}") + private String jwtSecret; + + @Value("${jwt.validity-in-seconds}") + private long tokenValidityInSeconds; + + @Bean + public JwtManager jwtManager() { + return new JwtManager(jwtSecret, tokenValidityInSeconds); + } +} \ No newline at end of file diff --git a/src/main/java/com/bb/jwt/JwtManager.java b/src/main/java/com/bb/jwt/JwtManager.java new file mode 100644 index 0000000..4979cc5 --- /dev/null +++ b/src/main/java/com/bb/jwt/JwtManager.java @@ -0,0 +1,166 @@ +package com.bb.jwt; + + +import java.nio.charset.StandardCharsets; +import java.security.Key; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Set; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.security.Keys; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class JwtManager { + + private String secretKey; + private long TOKEN_VALIDATION_SECOND; + + public JwtManager(String secretKey, long TOKEN_VALIDATION_SECOND) { + this.secretKey = secretKey; + this.TOKEN_VALIDATION_SECOND = TOKEN_VALIDATION_SECOND; + } + + // secretKey 로드 + private Key getSigninKey() { + byte[] keyBytes = secretKey.getBytes(StandardCharsets.UTF_8); + return Keys.hmacShaKeyFor(keyBytes); + } + + // 토큰 생성 + public String generateToken(JwtClame jwtinfo) { + Claims claims = Jwts.claims(); + claims.put("sidx", jwtinfo.getSiteIdx()); + claims.put("midx", jwtinfo.getMemIdx()); + claims.put("mid", jwtinfo.getMemId()); + claims.put("sid", jwtinfo.getSiteId()); + claims.put("type", jwtinfo.getType()); + claims.put("partnerLevel", jwtinfo.getPartnerLevel()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + long currentTMS = System.currentTimeMillis(); + Date issuedAt = new Date(currentTMS); + String issuedAtStr = sdf.format(issuedAt); + Date expiration = new Date(currentTMS + (TOKEN_VALIDATION_SECOND * 1000)); + String expirationStr = sdf.format(expiration); + + log.debug("[JwtManager.generateToken(jwtinfo)] sid: " + jwtinfo.getSiteId() + ", sidx: " + jwtinfo.getSiteIdx()); + log.debug("[JwtManager.generateToken(jwtinfo)] mid: " + jwtinfo.getMemId() + ", midx: " + jwtinfo.getMemIdx()); + log.debug("[JwtManager.generateToken(jwtinfo)] IAT: " + issuedAtStr); + log.debug("[JwtManager.generateToken(jwtinfo)] EAT: " + expirationStr); + log.info("#-JwtManager::generateToken::admin::"+jwtinfo.getSiteId()+"::"+jwtinfo.getMemId()+"::IAT::"+issuedAtStr+"::EAT::"+expirationStr); + + return Jwts.builder() + .setClaims(claims) + .setIssuedAt(issuedAt) + .setExpiration(expiration) + .signWith(getSigninKey(), SignatureAlgorithm.HS256) + .compact(); + } + + // 토큰 생성 + public String generateToken(JwtClame jwtinfo, int tokenValidationSec) { + Claims claims = Jwts.claims(); + claims.put("sidx", jwtinfo.getSiteIdx()); + claims.put("midx", jwtinfo.getMemIdx()); + claims.put("mid", jwtinfo.getMemId()); + claims.put("sid", jwtinfo.getSiteId()); + claims.put("type", jwtinfo.getType()); + claims.put("partnerLevel", jwtinfo.getPartnerLevel()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + long currentTMS = System.currentTimeMillis(); + Date issuedAt = new Date(currentTMS); + String issuedAtStr = sdf.format(issuedAt); + Date expiration = new Date(currentTMS + (tokenValidationSec * 1000)); + String expirationStr = sdf.format(expiration); + + log.debug("[JwtManager.generateToken(jwtinfo, tokenValidationSec)] sid: " + jwtinfo.getSiteId() + ", sidx: " + jwtinfo.getSiteIdx()); + log.debug("[JwtManager.generateToken(jwtinfo, tokenValidationSec)] mid: " + jwtinfo.getMemId() + ", midx: " + jwtinfo.getMemIdx()); + log.debug("[JwtManager.generateToken(jwtinfo, tokenValidationSec)] IAT: " + issuedAtStr); + log.debug("[JwtManager.generateToken(jwtinfo, tokenValidationSec)] EAT: " + expirationStr); + log.info("#-JwtManager::generateToken::user::"+jwtinfo.getSiteId()+"::"+jwtinfo.getMemId()+"::IAT::"+issuedAtStr+"::EAT::"+expirationStr); + + return Jwts.builder() + .setClaims(claims) + .setIssuedAt(issuedAt) + .setExpiration(expiration) + .signWith(getSigninKey(), SignatureAlgorithm.HS256) + .compact(); + } + + // 토큰 정보 리턴 + public TokenInfo getTokenInfo(String token) { + Claims body = getClaims(token); + Set keySet = body.keySet(); + for (String s : keySet) { + // log.info("s = " + s); + } + + Integer sidx = body.get("sidx", Integer.class); + Integer midx = body.get("midx", Integer.class); + String mid = body.get("mid", String.class); + String sid = body.get("sid", String.class); + String type = body.get("type", String.class); + String partnerLevel = body.get("partnerLevel", String.class); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + Date issuedAt = body.getIssuedAt(); + String issuedAtStr = sdf.format(issuedAt); + Date expiration = body.getExpiration(); + String expirationStr = sdf.format(expiration); + + log.debug("[JwtManager.getTokenInfo(token)] sid: " + sid + ", sidx: " + sidx); + log.debug("[JwtManager.getTokenInfo(token)] mid: " + mid + ", midx: " + midx); + log.debug("[JwtManager.getTokenInfo(token)] IAT: " + issuedAtStr); + log.debug("[JwtManager.getTokenInfo(token)] EAT: " + expirationStr); + log.debug("#-JwtManager::generateToken::admin::"+sid+"::"+mid+"::IAT::"+issuedAtStr+"::EAT::"+expirationStr); + + return new TokenInfo(sidx, midx, sid, mid, type, partnerLevel, issuedAt, expiration); + } + + // 토큰정보 해석 + private Claims getClaims(String token) { + Claims body = Jwts.parserBuilder() + .setSigningKey(getSigninKey()) + .build() + .parseClaimsJws(token) + .getBody(); + return body; + } + + + @Getter + public class TokenInfo { + private Integer sidx; + private Integer midx; + private String mid; + private String sid; + private String type; + private String partnerLevel; + private Date issuedAt; + private Date expire; + + public TokenInfo(Integer sidx, Integer midx, String sid, String mid, String type, String partnerLevel, Date issuedAt, Date expire) { + this.sidx = sidx; + this.midx = midx; + this.sid = sid; + this.mid = mid; + this.type = type; + this.partnerLevel = partnerLevel; + this.issuedAt = issuedAt; + this.expire = expire; + } + + @Override + public String toString() { + return "TokenInfo [sidx=" + sidx + ", midx=" + midx + ", mid=" + mid + ", sid=" + sid + ", type=" + type + + ", partnerLevel=" + partnerLevel + ", issuedAt=" + issuedAt + ", expire=" + expire + "]"; + } + + } +} diff --git a/src/main/java/com/bb/model/Admin.java b/src/main/java/com/bb/model/Admin.java new file mode 100644 index 0000000..de521d7 --- /dev/null +++ b/src/main/java/com/bb/model/Admin.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Admin { + private Integer siteIdx; + private String siteId; + private String adminId; + private String adminName; + private String adminPass; + private String adminOtp; + private String loginYn; + private String regDate; + private String regId; + private String delYn; +} diff --git a/src/main/java/com/bb/model/AdminBetSearch.java b/src/main/java/com/bb/model/AdminBetSearch.java new file mode 100644 index 0000000..063eee2 --- /dev/null +++ b/src/main/java/com/bb/model/AdminBetSearch.java @@ -0,0 +1,20 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class AdminBetSearch extends PageFormVO { + + private String betId; + private String siteId; + private String idType; + private String memId; + private String gameCategory; + private String isBlankSpinYn; + private String startDate; + private String endDate; + private String orderColumn; + private String orderType; + private String oldYn; + +} diff --git a/src/main/java/com/bb/model/AdminCashSearch.java b/src/main/java/com/bb/model/AdminCashSearch.java new file mode 100644 index 0000000..fa699dc --- /dev/null +++ b/src/main/java/com/bb/model/AdminCashSearch.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class AdminCashSearch extends PageFormVO { + + private int idx; + private String siteId; + private String memId; + private String searchType; // "cash", "point" + private String userType; // "N"(일반회원), "P"(파트너), ""(전체) + private String listType; // "2", "-2" + private String startDate; + private String endDate; + private String oldYn; +} diff --git a/src/main/java/com/bb/model/AdminIp.java b/src/main/java/com/bb/model/AdminIp.java new file mode 100644 index 0000000..848fcc3 --- /dev/null +++ b/src/main/java/com/bb/model/AdminIp.java @@ -0,0 +1,12 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class AdminIp { + private String siteId; + private String adminId; + private String ip; + private String regId; + private String delYn; +} diff --git a/src/main/java/com/bb/model/AdminLogSearch.java b/src/main/java/com/bb/model/AdminLogSearch.java new file mode 100644 index 0000000..d08dfbe --- /dev/null +++ b/src/main/java/com/bb/model/AdminLogSearch.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class AdminLogSearch extends PageFormVO{ + private String siteId; + private String adminId; + private String logType; + private String startDate; + private String endDate; + private String regIp; + +} diff --git a/src/main/java/com/bb/model/AdminSearch.java b/src/main/java/com/bb/model/AdminSearch.java new file mode 100644 index 0000000..64b29cd --- /dev/null +++ b/src/main/java/com/bb/model/AdminSearch.java @@ -0,0 +1,22 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class AdminSearch extends PageFormVO { + private String siteId; + private String adminId; + private String adminPass; + private String adminGroup; + private String ip; + private String regId; + private String status; + private String useYn; + private String delYn; + private String regDate; + + private String startDate; + private String endDate; + private String adminName; + +} diff --git a/src/main/java/com/bb/model/AdminTokenInfo.java b/src/main/java/com/bb/model/AdminTokenInfo.java new file mode 100644 index 0000000..87717c5 --- /dev/null +++ b/src/main/java/com/bb/model/AdminTokenInfo.java @@ -0,0 +1,10 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class AdminTokenInfo { + private String siteId; + private String adminId; + private String token; +} diff --git a/src/main/java/com/bb/model/AnswerVo.java b/src/main/java/com/bb/model/AnswerVo.java new file mode 100644 index 0000000..3dc9224 --- /dev/null +++ b/src/main/java/com/bb/model/AnswerVo.java @@ -0,0 +1,15 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class AnswerVo { + + private Integer idx; + private String siteId; + private String answerType; + private String title; + private String answer; + private String useYn; + private String regDate; +} diff --git a/src/main/java/com/bb/model/ApiResponse.java b/src/main/java/com/bb/model/ApiResponse.java new file mode 100644 index 0000000..78c6d43 --- /dev/null +++ b/src/main/java/com/bb/model/ApiResponse.java @@ -0,0 +1,104 @@ +package com.bb.model; + +import com.bb.exception.ApiException; +import com.bb.exception.RequestParameterApiException; +import com.bb.util.StringUtils; +import com.fasterxml.jackson.annotation.JsonInclude; + + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +import java.util.HashMap; +import java.util.Map; + + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiResponse { + /** 결과 코드 */ + private String resultCode; + /** 결과 메시지 */ + private String resultMessage; + /** 데이터 */ + private Map data; + + /** + * 데이터 추가 + * @param key + * @param value + */ + public void put(String key, Object value) { + if(this.data == null) { + this.data = new HashMap<>(); + } + + this.data.put(key, value); + } + + /** + * 성공상태 설정 + */ + public void success() { + this.setResultCode("0"); + this.setResultMessage("SUCC"); + } + + /** + * 실패상태 설정 + */ + public void fail() { + this.setResultCode("9999"); + this.setResultMessage("FAIL"); + } + + /** + * 필수 파라미터 검증 + * @param value + * @param paramName + * @throws ApiException + */ + public static void require(Object value, String paramName) throws ApiException { + String stringValue = (value == null) ? null : String.valueOf(value); + + if(StringUtils.isEmpty(stringValue)) { + throw new RequestParameterApiException( paramName); + } + } + + /** + * 파라미터 조건 검증 + * @param condition + * @param message + * @throws ApiException + */ + public static void then( boolean condition, String message ) throws ApiException { + if( condition ) { + throw new ApiException( message ); + } + } + + /** + * 파라미터가 특정 목록에 포함되어 있는지 검증 + * @param param + * @param paramName + * @param values + * @throws ApiException + */ + public static void notMatched( Object param, String paramName, Object... values ) throws ApiException { + boolean matched = false; + + for( Object value : values ) { + if( param.equals( value ) ) { + matched = true; + break; + } + } + + if( !matched ) { + throw new ApiException( "유효하지 않은 파라미터 : " + paramName ); + } + } + +} diff --git a/src/main/java/com/bb/model/ApiVendorCompInfo.java b/src/main/java/com/bb/model/ApiVendorCompInfo.java new file mode 100644 index 0000000..43f0991 --- /dev/null +++ b/src/main/java/com/bb/model/ApiVendorCompInfo.java @@ -0,0 +1,20 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class ApiVendorCompInfo { + + private String apiVendorCode; + private String siteIdxHex; + private String siteId; + private String type; + private String apiUrl; + private String clientId; + private String clientSecretKey; + private String callBackUrl; + private String cronRunYn; + private String changeCashYn; + private String language; + private String cashDecimal; +} diff --git a/src/main/java/com/bb/model/As.java b/src/main/java/com/bb/model/As.java new file mode 100644 index 0000000..954c590 --- /dev/null +++ b/src/main/java/com/bb/model/As.java @@ -0,0 +1,20 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + + +@Data +public class As { + + private String siteId; + private String asIdx; + private String title; + private String content; + private String startDate; + private String endDate; + private String autoYn; + private String useYn; +} + diff --git a/src/main/java/com/bb/model/Bank.java b/src/main/java/com/bb/model/Bank.java new file mode 100644 index 0000000..32fe582 --- /dev/null +++ b/src/main/java/com/bb/model/Bank.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Bank { + private String siteId; + private String bankCode; + private String bankNameKr; + private String bankNameEn; + private String bankDomain; + private String bankImg; + private String useYn; + private String delYn; + private String inspectTimeStart; + private String inspectTimeEnd; + +} diff --git a/src/main/java/com/bb/model/Banner.java b/src/main/java/com/bb/model/Banner.java new file mode 100644 index 0000000..63e5b5a --- /dev/null +++ b/src/main/java/com/bb/model/Banner.java @@ -0,0 +1,20 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Banner { + + private int bannerIdx; + private String siteId; + private String bannerTitle; + private String bannerImg; + private String bannerType; + private String domain; + private String bannerPosition; + private String delYn; + private String loginYn; + private String bannerContent; + + +} diff --git a/src/main/java/com/bb/model/BetAutoLoseVO.java b/src/main/java/com/bb/model/BetAutoLoseVO.java new file mode 100644 index 0000000..dbcd7e9 --- /dev/null +++ b/src/main/java/com/bb/model/BetAutoLoseVO.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class BetAutoLoseVO { + + private String betId; + private Long betIdx; + private String gameCategory; + private String afMoney; + +} diff --git a/src/main/java/com/bb/model/BetBiPushDetailVO.java b/src/main/java/com/bb/model/BetBiPushDetailVO.java new file mode 100644 index 0000000..09578b8 --- /dev/null +++ b/src/main/java/com/bb/model/BetBiPushDetailVO.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class BetBiPushDetailVO { + + private long betIdx; + private int yBiBetAmt; + private int yBiBetWinAmt; + private int nBiBetAmt; + private int nBiBetWinAmt; + private String detailJson; +} diff --git a/src/main/java/com/bb/model/BetData.java b/src/main/java/com/bb/model/BetData.java new file mode 100644 index 0000000..b803e4a --- /dev/null +++ b/src/main/java/com/bb/model/BetData.java @@ -0,0 +1,39 @@ +package com.bb.model; + +import java.util.HashMap; +import java.util.List; + +import lombok.Data; + +@Data +public class BetData { + private String siteId; + private long betAmt; + private String groupCode; + private String gameType; + private String betRate; + private String gameRound; + private List> betGameInfo; + List options; + +} + +/*{ + "betAmt": 5000, + "betGameInfo": [ + { + "noe": "", + "poe": "", + "narea": "s", + "ncoe": "eo", + "ncarea": "om", + "pnum": 4, + "parea": "", + "pcoeuo": "eu" + } + ], + "groupCode": "minigame", + "gameType": "powerball", + "betRate": "1495.29" +} +*/ diff --git a/src/main/java/com/bb/model/BetDetail.java b/src/main/java/com/bb/model/BetDetail.java new file mode 100644 index 0000000..6cd8c2d --- /dev/null +++ b/src/main/java/com/bb/model/BetDetail.java @@ -0,0 +1,34 @@ + +package com.bb.model; + +import lombok.Data; + +@Data +public class BetDetail { + private int betIdx; + private String siteId; + private String memId; + private String betType; + private String gameCategory; + private String vendorCode; + private String vendorName; + private String vendor; + private String betAmt; + private String betRate; + private String betWinAmt; + private String betBonus; + private String betCnt; + private String betResults; + private String betStatus; + private String type; + private String bfMoney; + private String afMoney; + private String updDate; + private String regDate; + private String gameIdx; + private String gameType; + private String gameName; + private String betValue; + private String betData; + private String isBlankSpinYn; +} diff --git a/src/main/java/com/bb/model/BetSearch.java b/src/main/java/com/bb/model/BetSearch.java new file mode 100644 index 0000000..3a6a401 --- /dev/null +++ b/src/main/java/com/bb/model/BetSearch.java @@ -0,0 +1,26 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class BetSearch extends PageFormVO { + + private String siteId; + private String memId; + private String recommenderId; + private String idType; + private String vendorCode; + private String vendor; + private String gameCategory; + private String isBlankSpinYn; + private String startDate; + private String endDate; + private String oldYn; + private Long betIdx; + private String betId; + private String betType; + private String orderColumn; + private String orderType; + private String blankSpinSetType; + +} diff --git a/src/main/java/com/bb/model/BetSplusSearch.java b/src/main/java/com/bb/model/BetSplusSearch.java new file mode 100644 index 0000000..1c4a87c --- /dev/null +++ b/src/main/java/com/bb/model/BetSplusSearch.java @@ -0,0 +1,22 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class BetSplusSearch extends PageFormVO { + private String siteId; + private String recommenderId; + private String memId; + private Integer branchID; + private String startDate; + private String endDate; + private String oldYn; + private Long betIdx; + private String betId; + private String orderColumn; + private String orderType; + private Integer lineTypeID; + private Long newMasterEventID; + private Long newEventID; + private String blankSpinSetType; +} diff --git a/src/main/java/com/bb/model/BiSubPointRateVo.java b/src/main/java/com/bb/model/BiSubPointRateVo.java new file mode 100644 index 0000000..821be4e --- /dev/null +++ b/src/main/java/com/bb/model/BiSubPointRateVo.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class BiSubPointRateVo { + + private String siteId; + private String topCompId; + private String gameType; + private String vendorCode; + private String compBetYn; + private String biSubPointRate; +} diff --git a/src/main/java/com/bb/model/BlankSpinRate.java b/src/main/java/com/bb/model/BlankSpinRate.java new file mode 100644 index 0000000..114170d --- /dev/null +++ b/src/main/java/com/bb/model/BlankSpinRate.java @@ -0,0 +1,19 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; + +import com.sun.istack.NotNull; + +import lombok.Data; + +@Data +public class BlankSpinRate { + + private String siteId; + @NotEmpty + private String memId; + @NotNull + private Integer blankSpinCasinoRate; + @NotNull + private Integer blankSpinSlotRate; +} diff --git a/src/main/java/com/bb/model/Block.java b/src/main/java/com/bb/model/Block.java new file mode 100644 index 0000000..a119b8a --- /dev/null +++ b/src/main/java/com/bb/model/Block.java @@ -0,0 +1,16 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Block { + + private int blockIdx; + private String siteId; + private String blockType; + private String blockTarget; + private int blockTerm; + private String delYn; + private String regDate; + private String regId; +} diff --git a/src/main/java/com/bb/model/BlockSearch.java b/src/main/java/com/bb/model/BlockSearch.java new file mode 100644 index 0000000..7b353ea --- /dev/null +++ b/src/main/java/com/bb/model/BlockSearch.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class BlockSearch extends PageFormVO { + + private int blockIdx; + private String siteId; + private String blockType; + private String blockTarget; + private String blockTerm; + private String delYn; + private String startDate; + private String endDate; + private String regId; +} diff --git a/src/main/java/com/bb/model/Board.java b/src/main/java/com/bb/model/Board.java new file mode 100644 index 0000000..f52da60 --- /dev/null +++ b/src/main/java/com/bb/model/Board.java @@ -0,0 +1,40 @@ +package com.bb.model; + +import java.util.HashMap; +import java.util.List; + +import lombok.Data; + +@Data +public class Board { + + private Integer boardIdx; + private String siteId; + private String boardType; + private String boardTypeName; + private String category; + private String categoryName; + private String title; + private String content; + private int viewCnt; + private String status; + private String isReadAdmin; + private String isReadUser; + private String memName; + private String memNick; + private String memLevel; + private String partnerLevel; + private String recommenderId; + private String memo; + private String delYn; + private String bettinginfo; + private String isTop; + private String faqType; + private String viewYn; + private String regId; + private String regDate; + private String updDate; + private String isNew; + List comment; + private List> topUserList; +} diff --git a/src/main/java/com/bb/model/BoardListSearch.java b/src/main/java/com/bb/model/BoardListSearch.java new file mode 100644 index 0000000..9a550fc --- /dev/null +++ b/src/main/java/com/bb/model/BoardListSearch.java @@ -0,0 +1,21 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class BoardListSearch extends PageFormVO { + + + private String siteId; + private String boardType; + private String category; + private String faqType; + private String searchOption; + private String searchValue; + private String memId; + private String startDate; + private String endDate; + private String viewYn; + private String isUser; + +} diff --git a/src/main/java/com/bb/model/BotMemRate.java b/src/main/java/com/bb/model/BotMemRate.java new file mode 100644 index 0000000..5d5e32b --- /dev/null +++ b/src/main/java/com/bb/model/BotMemRate.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class BotMemRate { + + private String siteId; + private String memId; + private List rateList; +} diff --git a/src/main/java/com/bb/model/BotMemRateVo.java b/src/main/java/com/bb/model/BotMemRateVo.java new file mode 100644 index 0000000..a637384 --- /dev/null +++ b/src/main/java/com/bb/model/BotMemRateVo.java @@ -0,0 +1,51 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class BotMemRateVo { + + private String siteId; + private String memId; + private String memNick; + + private String maxCasinoPR; + private String casinoPR; + private String minCasinoPR; + + private String maxHcasinoPR; + private String hcasinoPR; + private String minHcasinoPR; + + private String maxSlotPR; + private String slotPR; + private String minSlotPR; + + private String maxMiniPR; + private String miniPR; + private String minMiniPR; + + private String maxSportPR; + private String sportPR; + private String minSportPR; + + private String maxCasinoLR; + private String casinoLR; + private String minCasinoLR; + + private String maxHcasinoLR; + private String hcasinoLR; + private String minHcasinoLR; + + private String maxSlotLR; + private String slotLR; + private String minSlotLR; + + private String maxMiniLR; + private String miniLR; + private String minMiniLR; + + private String maxSportLR; + private String sportLR; + private String minSportLR; +} diff --git a/src/main/java/com/bb/model/Cash.java b/src/main/java/com/bb/model/Cash.java new file mode 100644 index 0000000..83da2cb --- /dev/null +++ b/src/main/java/com/bb/model/Cash.java @@ -0,0 +1,33 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotBlank; + +import lombok.Data; + +@Data +public class Cash { + + private String siteId; + private String adminId; + @NotBlank + private String memId; + + @NotBlank + private String cashType; + + @NotBlank + private String cashStatus; + + @NotBlank + private Integer cashAmt; + + private String cashOutPass; + + private String symbol; + private String exchangeRate; + private String amount; + + private String bonusCode; + +} + diff --git a/src/main/java/com/bb/model/CashDetail.java b/src/main/java/com/bb/model/CashDetail.java new file mode 100644 index 0000000..5739855 --- /dev/null +++ b/src/main/java/com/bb/model/CashDetail.java @@ -0,0 +1,33 @@ +package com.bb.model; + +import lombok.Data; + +import java.util.HashMap; +import java.util.List; + +@Data +public class CashDetail extends Cash { + + + private String siteId; + private String cashDesc; + private String betIdx; + private long cashIdx; + private Long refIdx; + private String delYn; + private String regId; + private String updDate; + private String regDate; + private String adminId; + private String memo; + private String preCashAmt; + private String bank; + private String bankacc; + private String memName; + private String memNick; + private String memPhone; + private String partnerLevel; + private String partnerLevelName; + private int waitTime; + private List> topUserList; +} diff --git a/src/main/java/com/bb/model/CashIn.java b/src/main/java/com/bb/model/CashIn.java new file mode 100644 index 0000000..03a861d --- /dev/null +++ b/src/main/java/com/bb/model/CashIn.java @@ -0,0 +1,21 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotBlank; + +import lombok.Data; + +@Data +public class CashIn extends Site { + + @NotBlank + private String memId; + + private String inBonusYn; + + @NotBlank + private Integer inAmt; + + + private String memo; + private String type; +} diff --git a/src/main/java/com/bb/model/CashOut.java b/src/main/java/com/bb/model/CashOut.java new file mode 100644 index 0000000..9b21b7c --- /dev/null +++ b/src/main/java/com/bb/model/CashOut.java @@ -0,0 +1,23 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotBlank; + +import lombok.Data; + +@Data +public class CashOut extends Site { + + @NotBlank + private String memId; + + + private String bonusRollingYn; + + @NotBlank + private Integer outAmt; + + + private String cashOutPass; + private String memo; + private String type; +} diff --git a/src/main/java/com/bb/model/CashQueVO.java b/src/main/java/com/bb/model/CashQueVO.java new file mode 100644 index 0000000..8f78231 --- /dev/null +++ b/src/main/java/com/bb/model/CashQueVO.java @@ -0,0 +1,19 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class CashQueVO { + + private Long cashIdx; + private String siteId; + private String memId; + private String cashType; + private String cashStatus; + private String cashAmt; + private String targetId; + private String preCashAmt; + private String regDate; + private String updDate; + private int refCnt; +} diff --git a/src/main/java/com/bb/model/CashSearch.java b/src/main/java/com/bb/model/CashSearch.java new file mode 100644 index 0000000..d65b995 --- /dev/null +++ b/src/main/java/com/bb/model/CashSearch.java @@ -0,0 +1,34 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + +@Data +public class CashSearch extends PageFormVO { + + + private int cashIdx; + private String siteId; + private String memId; + private String memNick; + private String recommenderId; + private String userType; + + @NotBlank + private String cashType; + private String cashStatus; + private String startDate; + private String endDate; + private String memStatus; + private String isFront; + + private String topMemId; +// private String botMemId; + private String topMemNick; +// private String botMemNick; + + private String oldYn; + +} diff --git a/src/main/java/com/bb/model/CashStatus.java b/src/main/java/com/bb/model/CashStatus.java new file mode 100644 index 0000000..39278ea --- /dev/null +++ b/src/main/java/com/bb/model/CashStatus.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + +@Data +public class CashStatus{ + + @NotEmpty + private long cashIdx; + @NotEmpty + private String cashStatus; + private String memo; + private String siteId; + +} diff --git a/src/main/java/com/bb/model/CashTranLogSrch.java b/src/main/java/com/bb/model/CashTranLogSrch.java new file mode 100644 index 0000000..e8ee367 --- /dev/null +++ b/src/main/java/com/bb/model/CashTranLogSrch.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class CashTranLogSrch extends PageFormVO { + + private String siteId; + private String recommenderId; + private String memId; + private List cashTypeList; + private String startDate; + private String endDate; + private String oldYn; +} diff --git a/src/main/java/com/bb/model/CategoryRate.java b/src/main/java/com/bb/model/CategoryRate.java new file mode 100644 index 0000000..8e6352c --- /dev/null +++ b/src/main/java/com/bb/model/CategoryRate.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class CategoryRate { + + private String siteId; + private String memId; + private List rateList; +} diff --git a/src/main/java/com/bb/model/CategoryRateVo.java b/src/main/java/com/bb/model/CategoryRateVo.java new file mode 100644 index 0000000..14fa8bd --- /dev/null +++ b/src/main/java/com/bb/model/CategoryRateVo.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class CategoryRateVo { + + private String siteId; + private String memId; + private String memNick; + private String category; + private String maxPointRate; + private String pointRate; + private String minPointRate; + private String maxLoseRate; + private String loseRate; + private String minLoseRate; +} diff --git a/src/main/java/com/bb/model/ChargingPointSettingVO.java b/src/main/java/com/bb/model/ChargingPointSettingVO.java new file mode 100644 index 0000000..24eee05 --- /dev/null +++ b/src/main/java/com/bb/model/ChargingPointSettingVO.java @@ -0,0 +1,24 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class ChargingPointSettingVO { + private Integer siteIdx; + private Integer memIdx; + private String siteId; + private String memId; + private String memLevel; + private String memLevelName; + private Integer fstChrgByJoinFlag; + private Integer fstChrgByJoinRate; + private Integer fstChrgByDailyRate; + private Integer fstChrgByEveryTimeRate; + private Integer bonusLimit; + private Integer folderCountLimit; + private String useAutoLevelUp; + private Integer autoLvBetAmt; + private Integer autoLvCashIn; + private String regDate; + private String updDate; +} diff --git a/src/main/java/com/bb/model/Code.java b/src/main/java/com/bb/model/Code.java new file mode 100644 index 0000000..c645e2f --- /dev/null +++ b/src/main/java/com/bb/model/Code.java @@ -0,0 +1,16 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Code { + + private String masterCode; + private String groupCode; + private String groupCodeName; + private String code; + private String codeName; + private int ord; + private String useYn; + +} diff --git a/src/main/java/com/bb/model/CodeSearch.java b/src/main/java/com/bb/model/CodeSearch.java new file mode 100644 index 0000000..f8ee3d7 --- /dev/null +++ b/src/main/java/com/bb/model/CodeSearch.java @@ -0,0 +1,26 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + + + +@Data +public class CodeSearch { + + @NotEmpty + private String masterCode; + private String groupCode; + private String code; + private Integer ord; + private Integer kgonCode; + private String kgonLobby; + private Integer tripleCode; + private String tripleLobby; + private String sdApiVendor; + private String sdApiLobby; + private Integer sdApiCode; + private String siteId; + +} diff --git a/src/main/java/com/bb/model/Comment.java b/src/main/java/com/bb/model/Comment.java new file mode 100644 index 0000000..230857b --- /dev/null +++ b/src/main/java/com/bb/model/Comment.java @@ -0,0 +1,25 @@ +package com.bb.model; + +import java.util.HashMap; +import java.util.List; + +import lombok.Data; + +@Data +public class Comment { + + private Integer cmtIdx; + private Integer boardIdx; + private String cmtType; + private String content; + private String regId; + private String memName; + private String memNick; + private String regDate; + private String updDate; + private String delYn; + List comment; + + +} + diff --git a/src/main/java/com/bb/model/CompDetail.java b/src/main/java/com/bb/model/CompDetail.java new file mode 100644 index 0000000..ca7e35b --- /dev/null +++ b/src/main/java/com/bb/model/CompDetail.java @@ -0,0 +1,20 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class CompDetail extends Member { + + private String creditAmt; + private String creditAmtHoldem; + private String creditSubPoint; + private Long calculateIdx; + private String insuredAmt; + private String insuredSubPoint; + private String insuredUpYn; + private String siteDomain; + private int totalMemCnt; + private long totalCashAmt; + private long totalPointAmt; + +} diff --git a/src/main/java/com/bb/model/CompResetInfo.java b/src/main/java/com/bb/model/CompResetInfo.java new file mode 100644 index 0000000..1a61d96 --- /dev/null +++ b/src/main/java/com/bb/model/CompResetInfo.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class CompResetInfo { + + private String siteId; + private String memIds; + private List memIdList; +} diff --git a/src/main/java/com/bb/model/CompSearch.java b/src/main/java/com/bb/model/CompSearch.java new file mode 100644 index 0000000..eff4bf7 --- /dev/null +++ b/src/main/java/com/bb/model/CompSearch.java @@ -0,0 +1,10 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class CompSearch { + + private String siteId; + +} diff --git a/src/main/java/com/bb/model/CouponSearch.java b/src/main/java/com/bb/model/CouponSearch.java new file mode 100644 index 0000000..96be6d9 --- /dev/null +++ b/src/main/java/com/bb/model/CouponSearch.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class CouponSearch extends PageFormVO { + + private String siteId; + private String memId; + private String memNick; + private String cashAmt; + private String couponStatus; + private String couponNumber; + private String createAdmin; + private String startDate; + private String endDate; +} diff --git a/src/main/java/com/bb/model/CouponVO.java b/src/main/java/com/bb/model/CouponVO.java new file mode 100644 index 0000000..52336eb --- /dev/null +++ b/src/main/java/com/bb/model/CouponVO.java @@ -0,0 +1,21 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class CouponVO { + + private String siteId; + private String memId; + private String couponNumber; + private Long cashIdx; + private String cashAmt; + private String couponDesc; + private String couponStatus; + private String createAdmin; + private String createAt; + private String usedAt; + private String apprAdmin; + private String apprAt; + private String endAt; +} diff --git a/src/main/java/com/bb/model/CreditReportSearch.java b/src/main/java/com/bb/model/CreditReportSearch.java new file mode 100644 index 0000000..74f1142 --- /dev/null +++ b/src/main/java/com/bb/model/CreditReportSearch.java @@ -0,0 +1,11 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class CreditReportSearch { + + private String siteId; + private String startDate; + private String endDate; +} diff --git a/src/main/java/com/bb/model/CronServerInfo.java b/src/main/java/com/bb/model/CronServerInfo.java new file mode 100644 index 0000000..cd1a314 --- /dev/null +++ b/src/main/java/com/bb/model/CronServerInfo.java @@ -0,0 +1,16 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class CronServerInfo { + + private String hostName; + private String ipAddress; + private String cronType; + private String serverName; + private String runYn; + private String regDate; + private String updDate; + +} diff --git a/src/main/java/com/bb/model/DailyReportSearch.java b/src/main/java/com/bb/model/DailyReportSearch.java new file mode 100644 index 0000000..d9b6687 --- /dev/null +++ b/src/main/java/com/bb/model/DailyReportSearch.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class DailyReportSearch extends PageFormVO { + + private String siteId; + private String memId; + private String searchType; + private String searchMemId; + private String searchRecommandId; + private String chkTodayYn; + private String startDate; + private String endDate; + private String orderStr; + private String blankSpinSetType; +} diff --git a/src/main/java/com/bb/model/DashInfo.java b/src/main/java/com/bb/model/DashInfo.java new file mode 100644 index 0000000..3c5bd10 --- /dev/null +++ b/src/main/java/com/bb/model/DashInfo.java @@ -0,0 +1,19 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class DashInfo { + + private String days; + private String siteId; + private String dayType; + private String inCashAmt; + private String outCashAmt; + private String beneAmt; + private String betAmt; + private String winAmt; + private String winLoseAmt; + private String memJoinCnt; + private String betCnt; +} diff --git a/src/main/java/com/bb/model/DayilPartnerReport.java b/src/main/java/com/bb/model/DayilPartnerReport.java new file mode 100644 index 0000000..382b148 --- /dev/null +++ b/src/main/java/com/bb/model/DayilPartnerReport.java @@ -0,0 +1,43 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class DayilPartnerReport { + + private String days; + private String siteId; + private String partnerId; + + private Integer cashAmt; + private Integer cashIn; + private Integer cashOut; + private Integer cashResult; + private Integer couponCash; + + private Integer allBetAmt; + private Integer allWinAmt; + private Integer allRolling; + private Integer allResult; + + private Integer casinoBetAmt; + private Integer casinoWinAmt; + private Integer casinoRolling; + private Integer casinoResult; + + private Integer slotBetAmt; + private Integer slotWinAmt; + private Integer slotRolling; + private Integer slotResult; + + private Integer sportBetAmt; + private Integer sportWinAmt; + private Integer sportRolling; + private Integer sportResult; + + private Integer miniBetAmt; + private Integer miniWinAmt; + private Integer miniRolling; + private Integer miniResult; + +} diff --git a/src/main/java/com/bb/model/DayilPeriodicReports.java b/src/main/java/com/bb/model/DayilPeriodicReports.java new file mode 100644 index 0000000..8fe1341 --- /dev/null +++ b/src/main/java/com/bb/model/DayilPeriodicReports.java @@ -0,0 +1,75 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class DayilPeriodicReports { + + private String siteId; + private String memId; + private String memNick; + private String partnerLevel; + private String cntBottom; + private String cntPartner; + private String casinoRate; + private String slotRate; + private String miniRate; + private String sportRate; + private String casinoLoseRate; + private String slotLoseRate; + private String miniLoseRate; + private String sportLoseRate; + private String cashAmt; + private String pointAmt; + private String botCashAmt; + private String botPointAmt; + private String userPayment; + private String userPayback; + private String partnerResultAmt; + private String adminPayment; + private String adminPayback; + private String adminResultAmt; + private String userCashIn; + private String userCashOut; + private String userCashResultAmt; + private String dCouponCash; + private String betAmt; // 전체 + private String betAmtWin; // 전체 + private String betAmtBS; // 전체-공배팅 + private String betAmtWinBS; // 전체-공배팅 + private String rollingAmt; + private String losingAmt; + private String myLosingAmt; + private String betResultAmt; // 전체 + private String betResultAmtBS; // 전체-공배팅 + private String casinoBetAmt; // 전체 + private String casinoBetAmtWin; // 전체 + private String casinoBetAmtBS; // 전체-공배팅 + private String casinoBetAmtWinBS; // 전체-공배팅 + private String casinoRollingAmt; + private String casinoLosingAmt; + private String myCasinoLosingAmt; + private String casinoBetResultAmt; // 전체 + private String casinoBetResultAmtBS; // 전체-공배팅 + private String slotBetAmt; // 전체 + private String slotBetAmtWin; // 전체 + private String slotBetAmtBS; // 전체-공배팅 + private String slotBetAmtWinBS; // 전체-공배팅 + private String slotRollingAmt; + private String slotLosingAmt; + private String mySlotLosingAmt; + private String slotBetResultAmt; // 전체 + private String slotBetResultAmtBS; // 전체-공배팅 + private String miniBetAmt; + private String miniBetAmtWin; + private String miniRollingAmt; + private String miniLosingAmt; + private String myMiniLosingAmt; + private String miniBetResultAmt; + private String sportBetAmt; + private String sportBetAmtWin; + private String sportRollingAmt; + private String sportLosingAmt; + private String mySportLosingAmt; + private String sportBetResultAmt; +} diff --git a/src/main/java/com/bb/model/DomainPartnerVO.java b/src/main/java/com/bb/model/DomainPartnerVO.java new file mode 100644 index 0000000..929ea6c --- /dev/null +++ b/src/main/java/com/bb/model/DomainPartnerVO.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class DomainPartnerVO { + + private Integer siteIdx; + private String domain; + private String siteId; + private String memId; + private String useYn; +} diff --git a/src/main/java/com/bb/model/Etc.java b/src/main/java/com/bb/model/Etc.java new file mode 100644 index 0000000..930cc05 --- /dev/null +++ b/src/main/java/com/bb/model/Etc.java @@ -0,0 +1,12 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Etc { + private String siteId; + private String memId; + private String yyyymm; + + +} diff --git a/src/main/java/com/bb/model/FrontSearch.java b/src/main/java/com/bb/model/FrontSearch.java new file mode 100644 index 0000000..130e9cc --- /dev/null +++ b/src/main/java/com/bb/model/FrontSearch.java @@ -0,0 +1,9 @@ +package com.bb.model; + + + +public class FrontSearch extends PageFormVO { + + + +} diff --git a/src/main/java/com/bb/model/GameCodeSearchVO.java b/src/main/java/com/bb/model/GameCodeSearchVO.java new file mode 100644 index 0000000..077d6e4 --- /dev/null +++ b/src/main/java/com/bb/model/GameCodeSearchVO.java @@ -0,0 +1,11 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class GameCodeSearchVO { + + private String groupCode; + private String orderName; + private String orderType; +} diff --git a/src/main/java/com/bb/model/GameCodeVO.java b/src/main/java/com/bb/model/GameCodeVO.java new file mode 100644 index 0000000..2cbef30 --- /dev/null +++ b/src/main/java/com/bb/model/GameCodeVO.java @@ -0,0 +1,26 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class GameCodeVO { + + private String groupCode; + private String groupCodeName; + private String groupCodeNameEN; + private String code; + private String codeName; + private String codeNameEN; + private Integer ord; + private String useYn; + private String kgonVendor; // nextVendor + private String kgonLobby; // nextLobby + private Integer kgonCode; // nextCode + private String tripleVendor; + private String tripleLobby; + private Integer tripleCode; + private String sdApiVendor; + private String sdApiLobby; + private Integer sdApiCode; + +} diff --git a/src/main/java/com/bb/model/GameDetails.java b/src/main/java/com/bb/model/GameDetails.java new file mode 100644 index 0000000..9fc2bfd --- /dev/null +++ b/src/main/java/com/bb/model/GameDetails.java @@ -0,0 +1,20 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class GameDetails { + + private String game_id; + private String game_code; + private String game_name; + private String table_id; + private String provider_id; + private String provider_name; + private String module_id; + private String game_image; + private String game_tag; + private String game_tag_image; + private String game_title_korean; + private String category; +} diff --git a/src/main/java/com/bb/model/GameSetting.java b/src/main/java/com/bb/model/GameSetting.java new file mode 100644 index 0000000..31a0161 --- /dev/null +++ b/src/main/java/com/bb/model/GameSetting.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class GameSetting { + + private String siteId; + private String partnerType; + private String gameType; + private List settingItems; +} diff --git a/src/main/java/com/bb/model/GameSettingInfo.java b/src/main/java/com/bb/model/GameSettingInfo.java new file mode 100644 index 0000000..970efa0 --- /dev/null +++ b/src/main/java/com/bb/model/GameSettingInfo.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class GameSettingInfo { + + private String siteId; + private String topCompId; + private String masterCode; + private String groupCode; + private String code; + private String pointRate; + private String compBetYn; + private String apiVendor; + private String superUseYn; + +} diff --git a/src/main/java/com/bb/model/GameSettingItem.java b/src/main/java/com/bb/model/GameSettingItem.java new file mode 100644 index 0000000..5d096a6 --- /dev/null +++ b/src/main/java/com/bb/model/GameSettingItem.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class GameSettingItem { + + private String siteId; + private String gameType; + private String vendorCode; + private String minBetAmt; + private String maxBetAmt; + private String compBetYn; + private String topInsureRate; + private String topCompId; + private String rollingRateOption; +} diff --git a/src/main/java/com/bb/model/GameUseInfo.java b/src/main/java/com/bb/model/GameUseInfo.java new file mode 100644 index 0000000..5ad9191 --- /dev/null +++ b/src/main/java/com/bb/model/GameUseInfo.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class GameUseInfo { + + private String siteId; + private String gameCode; + private String gameGroupCode; + private String useYn; + +} diff --git a/src/main/java/com/bb/model/GraphInfo.java b/src/main/java/com/bb/model/GraphInfo.java new file mode 100644 index 0000000..8648722 --- /dev/null +++ b/src/main/java/com/bb/model/GraphInfo.java @@ -0,0 +1,16 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class GraphInfo { + + private String days; + private String siteId; + private String inCashAmt; + private String outCashAmt; + private String betAmt; + private String winAmt; + private String cashAmt; + private String pointAmt; +} diff --git a/src/main/java/com/bb/model/IdListSearch.java b/src/main/java/com/bb/model/IdListSearch.java new file mode 100644 index 0000000..4129c70 --- /dev/null +++ b/src/main/java/com/bb/model/IdListSearch.java @@ -0,0 +1,11 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class IdListSearch extends PageFormVO { + + private String siteId; + private String tokenSId; + private String useUnderYn; +} diff --git a/src/main/java/com/bb/model/InChatMessageVO.java b/src/main/java/com/bb/model/InChatMessageVO.java new file mode 100644 index 0000000..fddf6fd --- /dev/null +++ b/src/main/java/com/bb/model/InChatMessageVO.java @@ -0,0 +1,39 @@ +package com.bb.model; + +public class InChatMessageVO { + + private String token; // 사용자 정보를 가져올 토큰 + private String content; // 메세지 내용 + private String type; // 채팅 타입 + private String chatId; // 채팅 고유 아이디 + + public String getToken() { + return token; + } + public void setToken(String token) { + this.token = token; + } + public String getContent() { + return content; + } + public void setContent(String content) { + this.content = content; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getChatId() { + return chatId; + } + public void setChatId(String chatId) { + this.chatId = chatId; + } + @Override + public String toString() { + return "InChatMessageVO [token=" + token + ", content=" + content + ", type=" + type + ", chatId=" + chatId + + "]"; + } +} diff --git a/src/main/java/com/bb/model/Inspect.java b/src/main/java/com/bb/model/Inspect.java new file mode 100644 index 0000000..215f36f --- /dev/null +++ b/src/main/java/com/bb/model/Inspect.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Inspect { + + + private String siteId; + private int inspectIdx; + private String startDate; + private String endDate; + private String inspectType; + private String gameType; + private String memo; + +} diff --git a/src/main/java/com/bb/model/InspectSearch.java b/src/main/java/com/bb/model/InspectSearch.java new file mode 100644 index 0000000..38de7dc --- /dev/null +++ b/src/main/java/com/bb/model/InspectSearch.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class InspectSearch extends PageFormVO{ + + private String siteId; + private int inspectIdx; + private String startDate; + private String endDate; + private String inspectType; + private String gameType; + + + +} diff --git a/src/main/java/com/bb/model/LevelBank.java b/src/main/java/com/bb/model/LevelBank.java new file mode 100644 index 0000000..551efaa --- /dev/null +++ b/src/main/java/com/bb/model/LevelBank.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class LevelBank { + private String siteId; + private String level; + private String bankCode; + private String bankAcc; + private String useYn; + private String msg; +} diff --git a/src/main/java/com/bb/model/LevelBetLimit.java b/src/main/java/com/bb/model/LevelBetLimit.java new file mode 100644 index 0000000..0e7fd11 --- /dev/null +++ b/src/main/java/com/bb/model/LevelBetLimit.java @@ -0,0 +1,16 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class LevelBetLimit { + private String siteId; + private String memLevel; + private String gameCode; + private String betAmtMax; + private String betAmtMin; + private String betWinAmtMax; + private String betAmtMaxSlot; + private String betAmtMinSlot; + private String betWinAmtMaxSlot; +} diff --git a/src/main/java/com/bb/model/LevelDomain.java b/src/main/java/com/bb/model/LevelDomain.java new file mode 100644 index 0000000..35c734a --- /dev/null +++ b/src/main/java/com/bb/model/LevelDomain.java @@ -0,0 +1,12 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class LevelDomain { + private String siteId; + private String level; + private String domain; + private String useYn; + +} diff --git a/src/main/java/com/bb/model/LevelFailPoint.java b/src/main/java/com/bb/model/LevelFailPoint.java new file mode 100644 index 0000000..4a5b1fc --- /dev/null +++ b/src/main/java/com/bb/model/LevelFailPoint.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class LevelFailPoint { + private String siteId; + private String level; + private String gameCode; + private String folder; + private String pointRate; + private String useYn; +} diff --git a/src/main/java/com/bb/model/LevelOutPwd.java b/src/main/java/com/bb/model/LevelOutPwd.java new file mode 100644 index 0000000..e344733 --- /dev/null +++ b/src/main/java/com/bb/model/LevelOutPwd.java @@ -0,0 +1,11 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class LevelOutPwd { + private String siteId; + private String level; + private String cashOutPass; + private String useYn; +} diff --git a/src/main/java/com/bb/model/LoginUserVO.java b/src/main/java/com/bb/model/LoginUserVO.java new file mode 100644 index 0000000..e0c487b --- /dev/null +++ b/src/main/java/com/bb/model/LoginUserVO.java @@ -0,0 +1,35 @@ +package com.bb.model; + +import java.util.HashMap; +import java.util.List; + +import lombok.Data; + +@Data +public class LoginUserVO { + + private String siteId; + private String memId; + private String memNick; + private String pointRate; + private String loseRate; + private String loginDt; + private String cashAmt; + private String pointAmt; + private String betYn; + private String loginYn; + private String totalLoginCount; + private String partnerLevel; + private String partnerLevelName; + private String partnerLevelOrd; + private String loginIP; + private int sessionSecond; + private int actionType; + private String betData; + private String cashIn; + private String cashOut; + private String betAmt; + private String winAmt; + private String winLose; + private List> topUserList; +} diff --git a/src/main/java/com/bb/model/MemListSearchVO.java b/src/main/java/com/bb/model/MemListSearchVO.java new file mode 100644 index 0000000..cac7e3d --- /dev/null +++ b/src/main/java/com/bb/model/MemListSearchVO.java @@ -0,0 +1,27 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MemListSearchVO extends PageFormVO { + + private String siteId; + private String treeUserId; // 회원 트리에서 선택된 회원 아이디 + private String treeOption; // 하부 옵션 [전체(""), 직하부("Y")] + private String userType; // 검색 회원유형 [전체(""), 일반회원("N"), 파트너("P")] + private String startDate; // 검색 가입일 [시작 날짜] + private String endDate; // 검색 가입일 [종료 날짜] + private String memId; // 검색 키워드 옵션 [아이디] + private String memNick; // 검색 키워드 옵션 [닉네임] + private String memName; // 검색 키워드 옵션 [예금주] + private String memPhone; // 검색 키워드 옵션 [전화번호] + + private String loginYn; // 로그인 옵션 [전체(""), 가능("Y"), 불가능("N")] + private String betYn; // 배팅 옵션 [전체(""), 가능("Y"), 불가능("N")] + private String memDelYn; // 삭제 옵션 [전체(""), 해당("Y"), 비해당("N")] + private String memBlackYn; // 블랙 옵션 [전체(""), 해당("Y"), 비해당("N")] + private String memLockYn; // 정지 옵션 [전체(""), 해당("Y"), 비해당("N")] + private String todayLoginYn; // 금일 로그인회원 옵션 [ON("Y"), OFF("N")] + + private String orderStr; // ID_DESC => memId DESC, ID_ASC => memId ASC +} diff --git a/src/main/java/com/bb/model/Member.java b/src/main/java/com/bb/model/Member.java new file mode 100644 index 0000000..5dc2993 --- /dev/null +++ b/src/main/java/com/bb/model/Member.java @@ -0,0 +1,88 @@ +package com.bb.model; + +import java.util.List; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +import org.springframework.validation.annotation.Validated; + +import lombok.Data; + +@Data +@Validated +public class Member extends Site { + + private Integer memIdx; + @NotBlank + @Size(max = 20) // 최대 길이 64 + private String memId; + private String partnerType; + + @NotBlank + private String memPass; + private String memName; + private String memNick; + private String memPhone; + private String memLevel; + private String partnerLevel; + private String nationCode; + private String partSendYn; + private String maxCredit; + private String creditRate; + private String creditStatus; + private String recommenderId; + private String firstBetConfYn; + private String commissionGroup; + private String membetType; + private String adminId; + private String regId; + private String regIp; + private String redDt; + private String updId; + private String updDt; + private String memStatus; + private String lastIp; + private String memo; + private String bank; + private String bankacc; + private String cashOutPass; + private String totalLoginCount; + private String totalBonusAmt; + private String totalCashInAmt; + private String totalCashOutAmt; + private String totalBetAmt; + private String totalBetWinAmt; + private String totalWlAmt; + private String gameMoney; + private int loginFailCnt; + private String loginYn; + private String betYn; + private String recommendYn; + private String memBlackYn; + private String memLockYn; + private String accInfoRequestYn; + private String sportsLevel; + private String casinoLevel; + private String slotLevel; + private String mgLevel; + private String pointExchangeYn; + private String memDelYn; + private String outAmtYn; + private String rollingYn; + private String retailPeriod; + private String retailType; + private String cashSendYn; + private String cashReceiveYn; + private String insuredYn; + private String insuredUpRate; + private String baseInsureBetAmt; + private Long gameUrlTimeout; + private int intervalTime; + private List memberBetLimit; + private List memberBurderRate; + private List memberCommissionRate; + private List memberDividendRateType; + + private String joinDomain; +} diff --git a/src/main/java/com/bb/model/MemberBetLimit.java b/src/main/java/com/bb/model/MemberBetLimit.java new file mode 100644 index 0000000..9c4b17a --- /dev/null +++ b/src/main/java/com/bb/model/MemberBetLimit.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; + +import lombok.Data; + +@Data +public class MemberBetLimit { + + private String code; // masterCode betlimit 로 조회시 code값 + private long minBetAmt; + private long maxBetAmt; + private long maxBetAmtA; + + +} diff --git a/src/main/java/com/bb/model/MemberBurderRate.java b/src/main/java/com/bb/model/MemberBurderRate.java new file mode 100644 index 0000000..1a7af6e --- /dev/null +++ b/src/main/java/com/bb/model/MemberBurderRate.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; + +import lombok.Data; + +@Data +public class MemberBurderRate { + + + + private String code; // masterCode betlimit 로 조회시 code값 + private String groupCode; + private long rate; + + +} diff --git a/src/main/java/com/bb/model/MemberCheckVo.java b/src/main/java/com/bb/model/MemberCheckVo.java new file mode 100644 index 0000000..8764ccf --- /dev/null +++ b/src/main/java/com/bb/model/MemberCheckVo.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MemberCheckVo { + + private String siteId; + private String memId; + private String memNick; + private String checkType; + +} diff --git a/src/main/java/com/bb/model/MemberCommissionRate.java b/src/main/java/com/bb/model/MemberCommissionRate.java new file mode 100644 index 0000000..7ea1492 --- /dev/null +++ b/src/main/java/com/bb/model/MemberCommissionRate.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; + +import lombok.Data; + +@Data +public class MemberCommissionRate { + + + + private String code; // masterCode betlimit 로 조회시 code값 + private long commissionRate; + + +} diff --git a/src/main/java/com/bb/model/MemberDetail.java b/src/main/java/com/bb/model/MemberDetail.java new file mode 100644 index 0000000..b3af9fa --- /dev/null +++ b/src/main/java/com/bb/model/MemberDetail.java @@ -0,0 +1,27 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MemberDetail extends Member { + + private String siteIdxHex; + private String currTime; + private String abuseLockTime; + private String abuseLockYn; + private int cashAmt; + private String changeFlag; + private int cashOutFlag; + private int pointAmt; + private String isPartnerMember; + private String loginType; + private String accInfoRequestYn; + private int blankSpinCasinoRate; + private int blankSpinSlotRate; + private String isBiPushYn; + private String username; // for API Auth Id + private Integer userId; // for API Auth Id + private int tokenValidationSec; + + private Double cashAmtD; +} diff --git a/src/main/java/com/bb/model/MemberDividendRateType.java b/src/main/java/com/bb/model/MemberDividendRateType.java new file mode 100644 index 0000000..0395cfd --- /dev/null +++ b/src/main/java/com/bb/model/MemberDividendRateType.java @@ -0,0 +1,19 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; + +import lombok.Data; + +@Data +public class MemberDividendRateType { + + + + private String code; // masterCode betlimit 로 조회시 code값 + private String useYn; + private String defaultYn; + + + +} diff --git a/src/main/java/com/bb/model/MemberHierarchyVo.java b/src/main/java/com/bb/model/MemberHierarchyVo.java new file mode 100644 index 0000000..eb5e483 --- /dev/null +++ b/src/main/java/com/bb/model/MemberHierarchyVo.java @@ -0,0 +1,11 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MemberHierarchyVo { + + private String siteId; + private String memId; + private String hierarchyType; // ALL, PARTNER, RECOMMEND +} diff --git a/src/main/java/com/bb/model/MemberInsert.java b/src/main/java/com/bb/model/MemberInsert.java new file mode 100644 index 0000000..c24731c --- /dev/null +++ b/src/main/java/com/bb/model/MemberInsert.java @@ -0,0 +1,66 @@ +package com.bb.model; + +import java.util.List; +import jakarta.validation.constraints.NotEmpty; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Data; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class MemberInsert { + + private Integer siteIdx; + private String siteId; + @NotEmpty + private String memId; + private String adminId; + private String sitePrefix; + private String siteApikey; + private String memPass; + private String partnerType; + private String memNick; + private String memName; + private String memPhone; + private String bank; + private String bankAcc; + private String recommenderId; + private String cashOutPass; + private String memLevel; + private String partnerLevel; + private String sportsLevel; + private String casinoLevel; + private String slotLevel; + private String mgLevel; + private String loginYn; + private String memBlackYn; + private String betYn; + private String recommendYn; + private String memLockYn; + private String memStatus; + private String nationCode; + private String partSendYn; + private String maxCredit; + private String creditStatus; + private String pointExchangeYn; + private String rollingYn; + private String cashSendYn; + private String cashReceiveYn; + private String insuredYn; + private String creditRate; + private String regId; + private String firstBetConfYn; + private String commissionGroup; + private String membetType; + private List rateList; + private BotMemRateVo rateGroup; // casino, slot, minigame 그룹핑 요율적용 + + private RateInfo rateInfo; + + private String msgTitle; + private String msgContents; + private String memo; + + private String joinDomain; +} diff --git a/src/main/java/com/bb/model/MemberInsert2.java b/src/main/java/com/bb/model/MemberInsert2.java new file mode 100644 index 0000000..f088d5f --- /dev/null +++ b/src/main/java/com/bb/model/MemberInsert2.java @@ -0,0 +1,49 @@ +package com.bb.model; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Data; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class MemberInsert2 { + + private Integer siteIdx; + private String siteId; + private String memId; + private List memIdList; + private String memNick; + private List memNickList; + private String memName; + private List memNameList; + + private String memPass; + private String memPhone; + private String bank; + private String bankAcc; + private String cashOutPass; + + private String partnerLevel; + private String recommenderId; + private String recommendYn; + + private String loginYn; + private String betYn; + private String memLockYn; + private String memStatus; + + private String memLevel; + private String casinoLevel; + private String slotLevel; + + private String cashSendYn; + private String cashReceiveYn; + private String memo; + private String regId; + + private List rateList; + + private String joinDomain; +} diff --git a/src/main/java/com/bb/model/MemberListSearch.java b/src/main/java/com/bb/model/MemberListSearch.java new file mode 100644 index 0000000..a1e1518 --- /dev/null +++ b/src/main/java/com/bb/model/MemberListSearch.java @@ -0,0 +1,39 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MemberListSearch extends PageFormVO { + + private String siteId; + private String userType; // 검색 회원유형 [전체(""), 일반회원("N"), 파트너("P")] + private String startDate; // 검색 가입일 [시작 날짜] + private String endDate; // 검색 가입일 [종료 날짜] + private String memId; // 검색 키워드 옵션 [아이디] + private String recommenderId; // 검색 키워드 옵션 [추천인아이디] + private String memNick; // 검색 키워드 옵션 [닉네임] + private String memName; // 검색 키워드 옵션 [예금주] + private String memPhone; // 검색 키워드 옵션 [전화번호] + + private String loginYn; // 로그인 옵션 [전체(""), 가능("Y"), 불가능("N")] + private String betYn; // 배팅 옵션 [전체(""), 가능("Y"), 불가능("N")] + private String memDelYn; // 삭제 옵션 [전체(""), 해당("Y"), 비해당("N")] + private String memBlackYn; // 블랙 옵션 [전체(""), 해당("Y"), 비해당("N")] + private String memLockYn; // 정지 옵션 [전체(""), 해당("Y"), 비해당("N")] + private String todayLoginYn; // 금일 로그인회원 옵션 [ON("Y"), OFF("N")] + + private String orderColumn; + private String orderType; + private String orderStr; // ID_DESC => memId DESC, ID_ASC => memId ASC + + private String memStatus; + private String rollingYn; + private String recommendYn; // 추천가능활성화 + private String ip; + private String partnerType; + private String searchType; + private String domain; + private String memLevel; + private String partnerLevel; + +} diff --git a/src/main/java/com/bb/model/MemberRate.java b/src/main/java/com/bb/model/MemberRate.java new file mode 100644 index 0000000..f5a0faf --- /dev/null +++ b/src/main/java/com/bb/model/MemberRate.java @@ -0,0 +1,22 @@ +package com.bb.model; + +import java.util.List; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; + +import org.springframework.validation.annotation.Validated; + +import lombok.Data; + +@Data +@Validated +public class MemberRate extends Site { + + @NotBlank + private String memId; + + private List rateList; + +} diff --git a/src/main/java/com/bb/model/MemberRateVo.java b/src/main/java/com/bb/model/MemberRateVo.java new file mode 100644 index 0000000..2468bde --- /dev/null +++ b/src/main/java/com/bb/model/MemberRateVo.java @@ -0,0 +1,15 @@ +package com.bb.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Data; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class MemberRateVo { + private String gameType; + private String pointRate; + private String loseRate; + private String useYn; + private String betYn; +} diff --git a/src/main/java/com/bb/model/MemberSearch.java b/src/main/java/com/bb/model/MemberSearch.java new file mode 100644 index 0000000..035ddb9 --- /dev/null +++ b/src/main/java/com/bb/model/MemberSearch.java @@ -0,0 +1,16 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + +@Data +public class MemberSearch { + + + private String siteId; + @NotEmpty + private String memId; + private String memPass; + private Integer ord; +} diff --git a/src/main/java/com/bb/model/MemberStatus.java b/src/main/java/com/bb/model/MemberStatus.java new file mode 100644 index 0000000..a45f029 --- /dev/null +++ b/src/main/java/com/bb/model/MemberStatus.java @@ -0,0 +1,22 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; + +import lombok.Data; + +@Data +public class MemberStatus { + + @NotEmpty + @Size(max = 20) // 최대 길이 64 + private String memId; + + @NotEmpty + private String memStatus; + + private String siteId; + private String memo; + private String outAmtYn; + +} diff --git a/src/main/java/com/bb/model/MemberTokenInfo.java b/src/main/java/com/bb/model/MemberTokenInfo.java new file mode 100644 index 0000000..39a7ba5 --- /dev/null +++ b/src/main/java/com/bb/model/MemberTokenInfo.java @@ -0,0 +1,10 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MemberTokenInfo { + private String siteId; + private String memId; + private String token; +} diff --git a/src/main/java/com/bb/model/MemberUpdate.java b/src/main/java/com/bb/model/MemberUpdate.java new file mode 100644 index 0000000..a1e5e87 --- /dev/null +++ b/src/main/java/com/bb/model/MemberUpdate.java @@ -0,0 +1,58 @@ +package com.bb.model; + +import java.util.List; +import jakarta.validation.constraints.NotEmpty; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Data; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class MemberUpdate { + + private String siteId; + @NotEmpty + private String memId; + private String memPass; + private String memName; + private String memNick; + private String memPhone; + private String memStatus; + private String recommenderId; + private String loginYn; + private String betYn; + private String recommendYn; + private String memBlackYn; + private String memLockYn; + private String subMemBetLockYn; + private String subMemRateModifyYn; + private String accInfoRequestYn; + private String memLevel; + private String partnerLevel; + private String sportsLevel; + private String casinoLevel; + private String slotLevel; + private String mgLevel; + private String pointExchangeYn; + private String memo; + private String memDelYn; + private String betLevel; + private String pointLevel; + private String bankLevel; + private String bank; + private String bankacc; + private String cashOutPass; + private String cashSendYn; + private String cashReceiveYn; + private String insuredYn; + private String baseInsureBetAmt; + private String isBiPushYn; + private String victoryPassYn; + + private String updId; + + private List rateList; + private BotMemRateVo rateGroup; // casino, slot, minigame 그룹핑 요율적용 + +} diff --git a/src/main/java/com/bb/model/MenuVO.java b/src/main/java/com/bb/model/MenuVO.java new file mode 100644 index 0000000..cc8cc42 --- /dev/null +++ b/src/main/java/com/bb/model/MenuVO.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MenuVO { + + private String siteId; + private String menuGroupCode; + private String menuGroupCodeName; + private String menuGroupCodeNameEN; + private String menuCode; + private String menuCodePrefix; + private String menuCodeName; + private String menuCodeNameEN; + private String useYn; + private String bookmarkYn; +} diff --git a/src/main/java/com/bb/model/Message.java b/src/main/java/com/bb/model/Message.java new file mode 100644 index 0000000..ad95f98 --- /dev/null +++ b/src/main/java/com/bb/model/Message.java @@ -0,0 +1,30 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class Message { + private Long msgIdx; + private String siteId; + private String msgType; + private String recieveId; + private String msgTitle; + private String msgDesc; + private String msgDescEng; + private String sendDate; + private String updDate; + private String regId; + private String delYn; + private String targetLevel; + private String targetType; + private String hiddenYn; + private String rMemIdList; + private String msgStatus; + private String status; + private String memType; + private String memLevel; + private String siteDomain; + private List msgIdxList; +} diff --git a/src/main/java/com/bb/model/MessageListSearch.java b/src/main/java/com/bb/model/MessageListSearch.java new file mode 100644 index 0000000..fda7239 --- /dev/null +++ b/src/main/java/com/bb/model/MessageListSearch.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MessageListSearch extends PageFormVO{ + private Long msgIdx; + private String siteId; + private String msgType; + private String recieveId; + private String targetLevel; + private String targetType; + private String hiddenYn; + private String startDate; + private String endDate; + +} diff --git a/src/main/java/com/bb/model/MiniGameSearch.java b/src/main/java/com/bb/model/MiniGameSearch.java new file mode 100644 index 0000000..a99221a --- /dev/null +++ b/src/main/java/com/bb/model/MiniGameSearch.java @@ -0,0 +1,12 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MiniGameSearch extends PageFormVO{ + private String siteId; + private String gameType; + private String startDate; + private String endDate; + private String gameRound; +} diff --git a/src/main/java/com/bb/model/MinigameBetRate.java b/src/main/java/com/bb/model/MinigameBetRate.java new file mode 100644 index 0000000..8c34beb --- /dev/null +++ b/src/main/java/com/bb/model/MinigameBetRate.java @@ -0,0 +1,19 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MinigameBetRate { + + private String siteId; + private String gameType; + private String optionGroup; + private String optionSubGroup; + private String option; + private String betRate; + private String useYn; + private String dispYn; + private String updId; + private String regDate; + +} diff --git a/src/main/java/com/bb/model/MinigameSet.java b/src/main/java/com/bb/model/MinigameSet.java new file mode 100644 index 0000000..16acc5e --- /dev/null +++ b/src/main/java/com/bb/model/MinigameSet.java @@ -0,0 +1,12 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MinigameSet { + private String siteId; + private String gameType; + private String useYn; + private int betLimitSec; + +} diff --git a/src/main/java/com/bb/model/Month10Info.java b/src/main/java/com/bb/model/Month10Info.java new file mode 100644 index 0000000..e70a604 --- /dev/null +++ b/src/main/java/com/bb/model/Month10Info.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Month10Info { + private String siteId; + private String userCashIN; + private String userCashBEP; + private String betBEP; + private String mofJoinCnt; + private String mofAccessCnt; + private String mofCashInUserCnt; + private String creditPayAMT; + private String creditAMT; + private String adminCashPYM; + private String adminCashPYB; +} diff --git a/src/main/java/com/bb/model/MultipleRate.java b/src/main/java/com/bb/model/MultipleRate.java new file mode 100644 index 0000000..0ec0263 --- /dev/null +++ b/src/main/java/com/bb/model/MultipleRate.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class MultipleRate { + + private String rateType; + private String rateTypeName; + private String rateTypeNameEN; + private Double maxPointRate; + private Double pointRate; + private Double minPointRate; + private Double maxLoseRate; + private Double loseRate; + private Double minLoseRate; +} diff --git a/src/main/java/com/bb/model/MultipleRateInfo.java b/src/main/java/com/bb/model/MultipleRateInfo.java new file mode 100644 index 0000000..b99782f --- /dev/null +++ b/src/main/java/com/bb/model/MultipleRateInfo.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class MultipleRateInfo { + + private String siteId; + private String memId; + private String vendorCode; + private List rateList; +} diff --git a/src/main/java/com/bb/model/MultipleRateSearch.java b/src/main/java/com/bb/model/MultipleRateSearch.java new file mode 100644 index 0000000..3db5a38 --- /dev/null +++ b/src/main/java/com/bb/model/MultipleRateSearch.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + +@Data +public class MultipleRateSearch { + private String siteId; + @NotEmpty + private String memId; + @NotEmpty + private String vendorCode; +} diff --git a/src/main/java/com/bb/model/NewMemRate.java b/src/main/java/com/bb/model/NewMemRate.java new file mode 100644 index 0000000..3b8c88f --- /dev/null +++ b/src/main/java/com/bb/model/NewMemRate.java @@ -0,0 +1,12 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class NewMemRate { + private String siteId; + private String memId; + private List rateList; +} diff --git a/src/main/java/com/bb/model/NewMemRateItem.java b/src/main/java/com/bb/model/NewMemRateItem.java new file mode 100644 index 0000000..6201c90 --- /dev/null +++ b/src/main/java/com/bb/model/NewMemRateItem.java @@ -0,0 +1,35 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +import lombok.Data; + +@Data +public class NewMemRateItem { + + private String siteId; + + @NotBlank + private String memId; + + private String gameCategory; + private String gameCategoryEn; + private String gameCategoryName; + private String vendorCode; + private String rateTypeCode; + + private Double maxPointRate; + + @NotNull + private Double pointRate; + + private Double minPointRate; + + private Double maxLoseRate; + + @NotNull + private Double loseRate; + + private Double minLoseRate; +} diff --git a/src/main/java/com/bb/model/NotiBgmVo.java b/src/main/java/com/bb/model/NotiBgmVo.java new file mode 100644 index 0000000..49a5cd8 --- /dev/null +++ b/src/main/java/com/bb/model/NotiBgmVo.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class NotiBgmVo { + + private String siteId; + private String notiType; + private String notiBgmFile; + private String useYN; + private String regDate; + private String updDate; +} diff --git a/src/main/java/com/bb/model/OTPInfo.java b/src/main/java/com/bb/model/OTPInfo.java new file mode 100644 index 0000000..2b2c56c --- /dev/null +++ b/src/main/java/com/bb/model/OTPInfo.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class OTPInfo { + + private String adminId; + private String account; + private String issuer; + private String secretKey; + private String url; + private String type; + private String useYn; + private String regDate; + private String updDate; +} diff --git a/src/main/java/com/bb/model/Options.java b/src/main/java/com/bb/model/Options.java new file mode 100644 index 0000000..5a34a4e --- /dev/null +++ b/src/main/java/com/bb/model/Options.java @@ -0,0 +1,9 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Options { + private String key; + private String value; +} diff --git a/src/main/java/com/bb/model/OutChatMessageVO.java b/src/main/java/com/bb/model/OutChatMessageVO.java new file mode 100644 index 0000000..d8723a3 --- /dev/null +++ b/src/main/java/com/bb/model/OutChatMessageVO.java @@ -0,0 +1,87 @@ +package com.bb.model; + +public class OutChatMessageVO { + + private String id; + private String name; + private String domain; + private String time; + private String content; + + private String cash; + + private String res; + private String msg; + private String type; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getDomain() { + return domain; + } + public void setDomain(String domain) { + this.domain = domain; + } + + public String getTime() { + return time; + } + public void setTime(String time) { + this.time = time; + } + public String getContent() { + return content; + } + public void setContent(String content) { + this.content = content; + } + + + public String getRes() { + return res; + } + public void setRes(String res) { + this.res = res; + } + + public String getCash() { + return cash; + } + public void setCash(String cash) { + this.cash = cash; + } + + + public String getMsg() { + return msg; + } + public void setMsg(String msg) { + this.msg = msg; + } + /** + * @return the type + */ + public String getType() { + return type; + } + /** + * @param type the type to set + */ + public void setType(String type) { + this.type = type; + } + @Override + public String toString() { + return "OutChatMessageVO [id=" + id + ", name=" + name + ", type=" + type + ", content=" + content + "]"; + } +} diff --git a/src/main/java/com/bb/model/PageFormVO.java b/src/main/java/com/bb/model/PageFormVO.java new file mode 100644 index 0000000..ac63adc --- /dev/null +++ b/src/main/java/com/bb/model/PageFormVO.java @@ -0,0 +1,88 @@ +package com.bb.model; + +public class PageFormVO { + + String function_name; + int page; + int count_per_page; + int count_per_list; + int tatal_page_count; + int tatal_list_count; + int limit; + int offset; + String pagination; + + public String getFunction_name() { + return function_name; + } + + public void setFunction_name(String function_name) { + this.function_name = function_name; + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public int getCount_per_page() { + return count_per_page; + } + + public void setCount_per_page(int count_per_page) { + this.count_per_page = count_per_page; + } + + public int getCount_per_list() { + return count_per_list; + } + + public void setCount_per_list(int count_per_list) { + this.count_per_list = count_per_list; + } + + public int getTatal_page_count() { + return tatal_page_count; + } + + public void setTatal_page_count(int tatal_page_count) { + this.tatal_page_count = tatal_page_count; + } + + public int getTatal_list_count() { + return tatal_list_count; + } + + public void setTatal_list_count(int tatal_list_count) { + this.tatal_list_count = tatal_list_count; + } + + public int getLimit() { + return limit; + } + + public void setLimit(int limit) { + this.limit = limit; + } + + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } + + public String getPagination() { + return pagination; + } + + public void setPagination(String pagination) { + this.pagination = pagination; + } + + +} diff --git a/src/main/java/com/bb/model/PartnerCompInfo.java b/src/main/java/com/bb/model/PartnerCompInfo.java new file mode 100644 index 0000000..f91bcd6 --- /dev/null +++ b/src/main/java/com/bb/model/PartnerCompInfo.java @@ -0,0 +1,35 @@ +package com.bb.model; + +import java.util.List; + +import jakarta.validation.constraints.NotNull; + +import lombok.Data; + +@Data +public class PartnerCompInfo { + + private String siteId; + private String topCompId; + private String siteName; + private String siteDomain; + private String siteDomains; + private String userCountLimit; + private String compCountLimit; + private String password; + private String maxCredit; + private String creditRate; + private String clientId; + private String clientSecretKey; + + private SiteOption siteOption; + + private List creditRateList; + + private List biRateList; + + private List gameSettingInfoList; + + private List menuSettingList; + +} diff --git a/src/main/java/com/bb/model/PartnerListVO.java b/src/main/java/com/bb/model/PartnerListVO.java new file mode 100644 index 0000000..07eb428 --- /dev/null +++ b/src/main/java/com/bb/model/PartnerListVO.java @@ -0,0 +1,28 @@ +package com.bb.model; + +import java.util.HashMap; +import java.util.List; + +import lombok.Data; + +@Data +public class PartnerListVO { + + private String siteId; + private String memId; + private String memName; + private String memNick; + private String partnerLevel; + private String levelName; + private String cashSendYn; + private String cashReceiveYn; + private int cashAmt; + private int pointAmt; + private int cntBotPartner; + private int cntBotMem; + private double pointRate; + private double loseRate; + List> memRollingInfo; + List> topUserList; + HashMap totalInfo; +} diff --git a/src/main/java/com/bb/model/PassimAddrReq.java b/src/main/java/com/bb/model/PassimAddrReq.java new file mode 100644 index 0000000..51b10e4 --- /dev/null +++ b/src/main/java/com/bb/model/PassimAddrReq.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class PassimAddrReq { + + private long memIdx; + + @NotBlank + private Integer paymentId; + +} diff --git a/src/main/java/com/bb/model/PassimAddrRes.java b/src/main/java/com/bb/model/PassimAddrRes.java new file mode 100644 index 0000000..bfeb9d7 --- /dev/null +++ b/src/main/java/com/bb/model/PassimAddrRes.java @@ -0,0 +1,9 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class PassimAddrRes { + private String address; + private Integer tag; +} diff --git a/src/main/java/com/bb/model/PassimVo.java b/src/main/java/com/bb/model/PassimVo.java new file mode 100644 index 0000000..8e91a62 --- /dev/null +++ b/src/main/java/com/bb/model/PassimVo.java @@ -0,0 +1,32 @@ +package com.bb.model; + +import java.time.LocalDateTime; + +import lombok.Data; + +@Data +public class PassimVo { + + private Long id; + + private String type; // deposit, withdraw + private Integer platformId; // 플랫폼 ID (업체 고유아이디) + private Integer paymentId; // 결제 ID (암호화폐 구분) + private String orderId; // 내부 주문 ID + private String amount; // 금액 + private String txHash; // 블록체인 트랜잭션 해시 + private String addressFrom; // 보낸지갑 주소 + private String addressTo; // 받은지갑 주소 + private Integer confirmations; // 블록체인 컨펌 수 + private String destinationTag; // XRP, TON 등의 Tag/Memo + private String amountReceive; // 실제 금액 + + private LocalDateTime createdAt; // 거래 생성일시 + private LocalDateTime confirmedAt; // 거래 완료일시 + + private String feeService; // 서비스 수수료 + private String feeNetwork; // 네트워크 검증자/채굴자 수수료 + + private String status; // WAITING, CONFIRMED + +} diff --git a/src/main/java/com/bb/model/Point.java b/src/main/java/com/bb/model/Point.java new file mode 100644 index 0000000..57ec114 --- /dev/null +++ b/src/main/java/com/bb/model/Point.java @@ -0,0 +1,21 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Point { + + private long pointIdx; + private String siteId; + private String memId; + private String pointType; + private String pointDesc; + private Double pointAmt; + private String betIdx; + private String pointStatus; + private String regId; + private String adminId; + private long prePointAmt; + private String memo; + private String regDate; +} diff --git a/src/main/java/com/bb/model/PointInOut.java b/src/main/java/com/bb/model/PointInOut.java new file mode 100644 index 0000000..169c118 --- /dev/null +++ b/src/main/java/com/bb/model/PointInOut.java @@ -0,0 +1,29 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + +@Data +public class PointInOut { + + private String siteId; + + @NotBlank + private String memId; + + @NotBlank + private String pointType; + private String pointDesc; + + @NotBlank + private long pointAmt; + private String pointStatus; + private String regId; + private String adminId; + private long prePointAmt; + private String memo; + + +} diff --git a/src/main/java/com/bb/model/PointSearch.java b/src/main/java/com/bb/model/PointSearch.java new file mode 100644 index 0000000..94a9518 --- /dev/null +++ b/src/main/java/com/bb/model/PointSearch.java @@ -0,0 +1,25 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class PointSearch extends PageFormVO { + + + private int pointIdx; + private String siteId; + private String dateType; + private String startDate; + private String endDate; + private String memId; + private String memNick; + private String gameIdx; + private String pointStatus; + private String pointType; + private long pointAmt; + private long prePointAmt; + private String gameType; + private String isFront; + private String oldYn; + +} diff --git a/src/main/java/com/bb/model/PointSearchAdm.java b/src/main/java/com/bb/model/PointSearchAdm.java new file mode 100644 index 0000000..7a6c145 --- /dev/null +++ b/src/main/java/com/bb/model/PointSearchAdm.java @@ -0,0 +1,24 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class PointSearchAdm extends PageFormVO { + + private int pointIdx; + private String siteId; + private String dateType; + private String startDate; + private String endDate; + private String memId; + private String memNick; + private String betId; + private List typeList; + private String vendorCode; + private String oldYn; + + private String betMemId; + private String rateTypeCode; +} diff --git a/src/main/java/com/bb/model/RateInfo.java b/src/main/java/com/bb/model/RateInfo.java new file mode 100644 index 0000000..a66483c --- /dev/null +++ b/src/main/java/com/bb/model/RateInfo.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class RateInfo { + + private String siteId; + private String memId; + private List rateList; +} diff --git a/src/main/java/com/bb/model/RateMemList.java b/src/main/java/com/bb/model/RateMemList.java new file mode 100644 index 0000000..de42377 --- /dev/null +++ b/src/main/java/com/bb/model/RateMemList.java @@ -0,0 +1,12 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class RateMemList { + + private String siteId; + private List rateInfoList; +} diff --git a/src/main/java/com/bb/model/RateVO.java b/src/main/java/com/bb/model/RateVO.java new file mode 100644 index 0000000..9bf9c4a --- /dev/null +++ b/src/main/java/com/bb/model/RateVO.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class RateVO { + + private String siteId; + private String memId; + private String category; // casino, slot, sport, minigame + private String cateCode; // CASINO, HC-CASINO, SLOT, SPORTS, bomb + private String pointRate; + private String loseRate; +} diff --git a/src/main/java/com/bb/model/ReportSearch.java b/src/main/java/com/bb/model/ReportSearch.java new file mode 100644 index 0000000..1ab6727 --- /dev/null +++ b/src/main/java/com/bb/model/ReportSearch.java @@ -0,0 +1,25 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + + +@Data +public class ReportSearch extends PageFormVO { + + private String siteId; + private String asIdx; + private String memId; + private String recommenderId; + private String memDelYn; + private String memBlackYn; + private String startDate; + private String endDate; + private String searchType; + private String vendorCode; + private List codeList; + private String oldYn; + private String blankSpinSetType; +} + diff --git a/src/main/java/com/bb/model/RetailBetSearch.java b/src/main/java/com/bb/model/RetailBetSearch.java new file mode 100644 index 0000000..354d3be --- /dev/null +++ b/src/main/java/com/bb/model/RetailBetSearch.java @@ -0,0 +1,24 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class RetailBetSearch extends PageFormVO { + + private String siteId; + private String memId; + private String vendorCode; + private String gameCategory; + private String resultType; + private String searchMemId; + private String startDate; + private String endDate; + private String oldYn; + + private Long betIdx; + private String betId; + private String betType; + private String orderColumn; + private String orderType; + private String blankSpinSetType; +} diff --git a/src/main/java/com/bb/model/RetailCashSearch.java b/src/main/java/com/bb/model/RetailCashSearch.java new file mode 100644 index 0000000..2883926 --- /dev/null +++ b/src/main/java/com/bb/model/RetailCashSearch.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class RetailCashSearch extends PageFormVO { + + private String siteId; + private String memId; + private String searchType; // 검색종류: "memId", "memNick", "recommenderId" + private String searchWord; // 검색어 + private String cashType; // 전체(""), 입금("1"), 출금("-1"), 파트너지급("33), 파트너회수("-33"), 관리자지급("2"), 관리자회수("-2"), 포인트전환("4") + private String startDate; + private String endDate; + private String oldYn; + private String orderColumn; + private String orderType; +} diff --git a/src/main/java/com/bb/model/RetailListSearch.java b/src/main/java/com/bb/model/RetailListSearch.java new file mode 100644 index 0000000..b0adb5f --- /dev/null +++ b/src/main/java/com/bb/model/RetailListSearch.java @@ -0,0 +1,19 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class RetailListSearch extends PageFormVO { + + private String siteId; + private String memId; + private String memNick; + private String partnerLevel; + private String searchType; + + private String gameCategory; + private String gameCategoryEn; + private String vendorCode; + private String rateTypeCode; + private String saveAllYn; +} diff --git a/src/main/java/com/bb/model/RetailLockVO.java b/src/main/java/com/bb/model/RetailLockVO.java new file mode 100644 index 0000000..ee6974f --- /dev/null +++ b/src/main/java/com/bb/model/RetailLockVO.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + +@Data +public class RetailLockVO { + + @NotEmpty + private String memId; + @NotEmpty + private String memLockYn; +} diff --git a/src/main/java/com/bb/model/RetailLowerSearch.java b/src/main/java/com/bb/model/RetailLowerSearch.java new file mode 100644 index 0000000..410aa5a --- /dev/null +++ b/src/main/java/com/bb/model/RetailLowerSearch.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class RetailLowerSearch extends PageFormVO { + + private String siteId; + private String memId; + private String targetLevel; + private String searchType; + private String searchValue; + private String orderStr; +} diff --git a/src/main/java/com/bb/model/RetailPointSearch.java b/src/main/java/com/bb/model/RetailPointSearch.java new file mode 100644 index 0000000..e2bbd90 --- /dev/null +++ b/src/main/java/com/bb/model/RetailPointSearch.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; + +@Data +public class RetailPointSearch extends PageFormVO { + + private String siteId; + private String memId; + private String memNick; + private List pointTypeList; // 전체(""), 관리자["ADMIN"]("2","-2"), 롤링["ROLLING"]("3"), 포인트전환["EXCHANGE"]("-4"), 이벤트["EVENT"]("5","6","7") + private String startDate; + private String endDate; + private String oldYn; +} diff --git a/src/main/java/com/bb/model/RetailSearch.java b/src/main/java/com/bb/model/RetailSearch.java new file mode 100644 index 0000000..b630c96 --- /dev/null +++ b/src/main/java/com/bb/model/RetailSearch.java @@ -0,0 +1,27 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class RetailSearch extends PageFormVO { + + private String siteId; + private String memId; + private String memNick; + private String recommenderId; + private String searchMemId; + private String partnerLevel; + private String dateIdx; + private String searchType; + private String retailPeriod; + private String retailType; + private String paystatus; + private String startDate; + private String endDate; + private String oldYn; + private String treeOption; // 직속회원 옵션 [기본값:Off("N"), On("Y")] + private String orderColumn; + private String orderType; + private Integer ord; + private String blankSpinSetType; +} diff --git a/src/main/java/com/bb/model/RetailSet.java b/src/main/java/com/bb/model/RetailSet.java new file mode 100644 index 0000000..4250003 --- /dev/null +++ b/src/main/java/com/bb/model/RetailSet.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class RetailSet { + + private String siteId; + private String memId; + private String retailPeriod; + private int retailType; + +} diff --git a/src/main/java/com/bb/model/RvHoldemResponse.java b/src/main/java/com/bb/model/RvHoldemResponse.java new file mode 100644 index 0000000..b3fbf5d --- /dev/null +++ b/src/main/java/com/bb/model/RvHoldemResponse.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class RvHoldemResponse { + + private int code; + private Integer payload; +} diff --git a/src/main/java/com/bb/model/RvHoldemVO.java b/src/main/java/com/bb/model/RvHoldemVO.java new file mode 100644 index 0000000..f8f8b0d --- /dev/null +++ b/src/main/java/com/bb/model/RvHoldemVO.java @@ -0,0 +1,104 @@ +package com.bb.model; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; + +import lombok.Data; +import net.sf.json.JSONObject; +import net.sf.json.JsonConfig; + +@Data +public class RvHoldemVO { + + private Long cbIdx; // AUTO_INCREMENT + private String siteId; + private String memId; + private String callbackType; + private Integer userId; + private String uid; + private Integer logId; + private Integer bfBalance; + private Integer amount; + private Integer chipAmount; + private Integer afBalance; + private Integer groupId; + private Integer roomtype; + + // 콜백 시각: UTC 그대로 + private LocalDateTime addedAt; + // 내부 저장 시 KST로 변환 + private LocalDateTime addedAtKST; + + private String penaltyAmount; + private String penaltyChipAmount; + private String cb_uid; + private String uniqueKey; + + /** + * JSONObject -> RvHoldemVO 변환 + * addedAt는 UTC 기준, regDate는 KST 변환 + */ + public static RvHoldemVO fromJSONObject(String LOG_PREFIX, JSONObject json) { + RvHoldemVO vo = new RvHoldemVO(); + + DateTimeFormatter normalFormatter = + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + vo.setUserId(json.optInt("userId", 0)); + vo.setUid(json.optString("uid", null)); + vo.setLogId(json.optInt("logId", 0)); + vo.setAmount(json.optInt("amount", 0)); + vo.setChipAmount(json.optInt("chipAmount", 0)); + vo.setGroupId(json.optInt("groupId", 0)); + vo.setRoomtype(json.optInt("roomtype", 0)); + vo.setPenaltyAmount(json.optString("penaltyAmount", null)); + vo.setPenaltyChipAmount(json.optString("penaltyChipAmount", null)); + vo.setCb_uid(json.optString("cb_uid", null)); + vo.setUniqueKey(json.optString("uniqueKey", null)); + + // ------------------------- + // addedAt 파싱 (멀티 포맷) + // ------------------------- + if (json.has("addedAt") && !json.isNullObject()) { + String addedAtStr = json.getString("addedAt"); + + LocalDateTime addedAt = null; + + try { + // 1) ISO-8601 + Z + millis (2025-12-22T07:57:10.914Z) + if (addedAtStr.endsWith("Z")) { + addedAt = Instant.parse(addedAtStr) + .atZone(ZoneId.of("UTC")) + .toLocalDateTime(); + } else { + // 2) yyyy-MM-dd HH:mm:ss + addedAt = LocalDateTime.parse(addedAtStr, normalFormatter); + } + } catch (Exception e) { + // 파싱 실패 시 로그만 남기고 skip + System.out.println(LOG_PREFIX+ "addedAt parse failed, fallback to now(UTC)."); + } + + // 파싱 실패 or 값 없음 -> 현재 UTC 시각 사용 + if (addedAt == null) { + addedAt = LocalDateTime.now(ZoneId.of("UTC")); + } + + vo.setAddedAt(addedAt); + + // addedAtKST = addedAt(UTC) -> KST + if (addedAt != null) { + vo.setAddedAtKST( + addedAt.atZone(ZoneId.of("UTC")) + .withZoneSameInstant(ZoneId.of("Asia/Seoul")) + .toLocalDateTime() + ); + } + } + + return vo; + } +} \ No newline at end of file diff --git a/src/main/java/com/bb/model/ScoinVO.java b/src/main/java/com/bb/model/ScoinVO.java new file mode 100644 index 0000000..ad325b9 --- /dev/null +++ b/src/main/java/com/bb/model/ScoinVO.java @@ -0,0 +1,29 @@ +package com.bb.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class ScoinVO { + + + @JsonProperty("partnercode") + private String partnercode; // 파트너코드 + + @JsonProperty("userid") + private String userid; // API 유저 아이디 + + @JsonProperty("level") + private int level; // 유저 계좌 레벨 + + @JsonProperty("bank") + private String bank; // 유저계좌 은행명 + + @JsonProperty("accountname") + private String accountname; // 유저계좌 예금주 + + @JsonProperty("accountnumber") + private String accountnumber; // 유저계좌 계좌번호 +} diff --git a/src/main/java/com/bb/model/Site.java b/src/main/java/com/bb/model/Site.java new file mode 100644 index 0000000..ef76c0b --- /dev/null +++ b/src/main/java/com/bb/model/Site.java @@ -0,0 +1,27 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Site { + + private Integer siteIdx; + private String siteIdxHex; + private String siteId; + private String adminId; + private String sitePrefix; + private String adminOtp; + private String sitePass; + private String siteType; + private String siteName; + private String ip; + private String apiKey; + private String memberRegYn; + private String newSitePass; + private String newAdminOtp; + private String siteDomain; + private String securityCode; + private String creditRate; + private String maxCredit; + private String isOnlyFlex; // 파트너 회원 베팅가능여부 플레그(Y:가능, N:불가능) +} diff --git a/src/main/java/com/bb/model/SiteCashBonusSettingVO.java b/src/main/java/com/bb/model/SiteCashBonusSettingVO.java new file mode 100644 index 0000000..80467ac --- /dev/null +++ b/src/main/java/com/bb/model/SiteCashBonusSettingVO.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class SiteCashBonusSettingVO { + private Integer siteIdx; + private String bonusCode; + private String bonusTitle; + private String bonusDesc; + private Integer fstChrgByJoinRate; + private Integer fstChrgByDailyRate; + private Integer fstChrgByEveryTimeRate; + private Integer bonusLimit; + private String useYn; + private String regDate; + private String updDate; +} diff --git a/src/main/java/com/bb/model/SiteCheckReq.java b/src/main/java/com/bb/model/SiteCheckReq.java new file mode 100644 index 0000000..bd12f75 --- /dev/null +++ b/src/main/java/com/bb/model/SiteCheckReq.java @@ -0,0 +1,21 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class SiteCheckReq { + + private Integer siteCheckIdx; + private String siteId; + private String checkType; + private String checkCode; + private String startDate; + private String endDate; + private String isEmergency; + private String isCheckOff; + private String contents; + private String regId; + + + private String siteCheckYn; +} diff --git a/src/main/java/com/bb/model/SiteOption.java b/src/main/java/com/bb/model/SiteOption.java new file mode 100644 index 0000000..d830503 --- /dev/null +++ b/src/main/java/com/bb/model/SiteOption.java @@ -0,0 +1,77 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class SiteOption { + private String siteId; + private String signupYn; + private String loginYn; + private String betYn; + private String memLockYn; + private String partnerLevelChgYn; + private String userRecommenderChgYn; + private String recommendYn; + private String recommendLimit; + private String companyRecommender; + private String accInfoRequestYn; + private String accInfoRequestType; + private String siteStatusYn; + private String multiLoginYn; + private String liveStreamYn; + private String boardYn; + private String qnaYn; + private String callYn; + private String userLoginAlarmYn; + private String liveSprotsMsgYn; + private String specialBetMonoYn; + private String smsAuthPass; + private String maxBetRateYn; + private String maxBetRate; + private String logoutTimeLimit; + private String adminAutoLogoutYn; + private String casinoRollChangeYn; + private String betCancelTimeLimitBeforeGame; + private String betCancelTimeLimitAfterBet; + private String alarmSounds; + private String alarmRepeatYn; + private String alarmQnaYn; + private String strangeBetAlarm; + private String maxWinAmt; + private String cashInYn; + private String cashInAmtLimit; + private String cashInAmtMin; + private String cashInAmtUnit; + private String cashInWaitTime; + private String cashOutYn; + private String cashOutRollMsgYn; + private String cashOutAmtLimit; + private String cashOutAmtMin; + private String cashOutAmtUnit; + private String cashOutWaitTime; + private String pointChangeAmtLimit; + private String pointChangeAmtUnit; + private String pointChangeType; + private String pointStatusYn; + private String sns1; + private String sns1Link; + private String sns1Id; + private String sns2; + private String sns2Link; + private String sns2Id; + private String sns3; + private String sns3Link; + private String sns3Id; + private String insuredUpYn; + private String victoryPassYn; + private String siteCheckYn; + private String vendorComp; + private String payGCurrency; + private String payVCurrency; + private String cashDecimal; + private String rollingType; + private String blankSpinSetType; + private String vaccCode; + private String secuType; + +} diff --git a/src/main/java/com/bb/model/SiteSearch.java b/src/main/java/com/bb/model/SiteSearch.java new file mode 100644 index 0000000..0d79ee9 --- /dev/null +++ b/src/main/java/com/bb/model/SiteSearch.java @@ -0,0 +1,12 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class SiteSearch { + private String siteId; + private String sitePass; + private String otp; + private String etc1; + private String etc2; +} diff --git a/src/main/java/com/bb/model/SlotGame.java b/src/main/java/com/bb/model/SlotGame.java new file mode 100644 index 0000000..be21f41 --- /dev/null +++ b/src/main/java/com/bb/model/SlotGame.java @@ -0,0 +1,15 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class SlotGame { + + private String id; + private String key; + private SlotGameName names; + private String platform; + private String category; + private String type; + private String image; +} diff --git a/src/main/java/com/bb/model/SlotGameName.java b/src/main/java/com/bb/model/SlotGameName.java new file mode 100644 index 0000000..436dcaa --- /dev/null +++ b/src/main/java/com/bb/model/SlotGameName.java @@ -0,0 +1,10 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class SlotGameName { + + private String ko; + private String en; +} diff --git a/src/main/java/com/bb/model/SocialLoginVO.java b/src/main/java/com/bb/model/SocialLoginVO.java new file mode 100644 index 0000000..bb9c389 --- /dev/null +++ b/src/main/java/com/bb/model/SocialLoginVO.java @@ -0,0 +1,37 @@ +package com.bb.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; + +@Data +public class SocialLoginVO { + + @JsonProperty("Status") + private String status; + + @JsonProperty("UserID") + private String userId; + + @JsonProperty("LoginPW") + private String loginPW; + + @JsonProperty("Phone") + private String phone; + + @JsonProperty("UserNick") + private String userNick; + + @JsonProperty("BankCode") + private String bankCode; + + @JsonProperty("BankNumber") + private String bankNumber; + + @JsonProperty("AccountHolder") + private String accountHolder; + + @JsonProperty("ExchangePW") + private String exchangePW; + +} diff --git a/src/main/java/com/bb/model/TOtpVO.java b/src/main/java/com/bb/model/TOtpVO.java new file mode 100644 index 0000000..7af801a --- /dev/null +++ b/src/main/java/com/bb/model/TOtpVO.java @@ -0,0 +1,15 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + +@Data +public class TOtpVO { + + @NotEmpty + private String siteId; + @NotEmpty + private String adminId; // account + private String domain; // issuer +} diff --git a/src/main/java/com/bb/model/TestDto.java b/src/main/java/com/bb/model/TestDto.java new file mode 100644 index 0000000..fc9a3f0 --- /dev/null +++ b/src/main/java/com/bb/model/TestDto.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TestDto { + + private String username; + private int age; +} diff --git a/src/main/java/com/bb/model/Top15Info.java b/src/main/java/com/bb/model/Top15Info.java new file mode 100644 index 0000000..f350e57 --- /dev/null +++ b/src/main/java/com/bb/model/Top15Info.java @@ -0,0 +1,10 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class Top15Info { + private String memId; + private String memNick; + private String amount; +} diff --git a/src/main/java/com/bb/model/TreeListSearch.java b/src/main/java/com/bb/model/TreeListSearch.java new file mode 100644 index 0000000..fb6d08f --- /dev/null +++ b/src/main/java/com/bb/model/TreeListSearch.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotBlank; + +import lombok.Data; + +@Data +public class TreeListSearch { + private String targetId; + + @NotBlank + private String searchType; +} diff --git a/src/main/java/com/bb/model/TripleAuthInfo.java b/src/main/java/com/bb/model/TripleAuthInfo.java new file mode 100644 index 0000000..aee150f --- /dev/null +++ b/src/main/java/com/bb/model/TripleAuthInfo.java @@ -0,0 +1,21 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class TripleAuthInfo { + +// private int idx; // PK + private String siteId; // oms siteId + private String memId; // oms memId + private int id; // triple 유저 고유 id + private String username; // triple 유저 ID (siteId_memId) + private String nickname; // triple 유저 닉네임 + private String regDate; // 등록일시 + private String updDate; // 수정일시 + private String partnerLevel; // 파트너 등급 + + private String apiUrl; // Triple API url + private String clientId; // Triple API agent id + private String clientSecretKey; // Triple API agent key +} diff --git a/src/main/java/com/bb/model/TripleDVO.java b/src/main/java/com/bb/model/TripleDVO.java new file mode 100644 index 0000000..c0ef862 --- /dev/null +++ b/src/main/java/com/bb/model/TripleDVO.java @@ -0,0 +1,49 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; +import net.sf.json.JSONObject; + +@Data +public class TripleDVO { + + private long idx; + private int siteIdx; + private int memIdx; + private String siteId; + private String memId; + private String memLevel; + private String betId; + private String tranId; + private int vendorIdx; + private String vendorKey; + private String vendor; + private int gameIdx; + private String gameKey; + private String userId; + private String tranType; + private double debit; + private double credit; + private double beforeCash; + private double afterCash; + private int isCancel; + private int isBonus; + private String decYn; // "Y"일 경우 debit이나 credit 값을 100으로 나눈다. + private String regDate; + private JSONObject detail; + private String detailStr; + private int blankSpinCasinoRate; + private int blankSpinSlotRate; + private String isBiPushYn; // 유저 보험누르기 적용대상 여부(Y: 적용, N:미적용) + private String isBiProcYn; // Y:보험처리완료, N: 보험처리전 + private String requestAt; + private String betYn; + private String memLockYn; + private String symLock; + private String minusBalanceYn; // "Y"로 요청시 유저 보유금이 마이너스(음수) 값을 가지더라도 잔액 리턴 + private List betDetails; + + private String status; + +} diff --git a/src/main/java/com/bb/model/TripleDetailVO.java b/src/main/java/com/bb/model/TripleDetailVO.java new file mode 100644 index 0000000..07435a8 --- /dev/null +++ b/src/main/java/com/bb/model/TripleDetailVO.java @@ -0,0 +1,15 @@ +package com.bb.model; + +import lombok.Data; +import net.sf.json.JSONObject; + +@Data +public class TripleDetailVO { + + private String detailId; + private String detailType; + private String detailName; + private int betAmt; + private int betWinAmt; + private JSONObject detail; +} diff --git a/src/main/java/com/bb/model/TripleGameRate.java b/src/main/java/com/bb/model/TripleGameRate.java new file mode 100644 index 0000000..b6b5723 --- /dev/null +++ b/src/main/java/com/bb/model/TripleGameRate.java @@ -0,0 +1,13 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class TripleGameRate { + + private String siteApiKey; // 트리플 사이트 api key + private Integer vendorIdx; // 트리플 게임 코드값 + private String vendor; // pragmatic_slot, bota_khan, dowin, union, mon_evoltion, tpabomb, hub88, kgon, evolution + private String gameRate; // 게임 요율 + +} diff --git a/src/main/java/com/bb/model/TriplePurchaseId.java b/src/main/java/com/bb/model/TriplePurchaseId.java new file mode 100644 index 0000000..cbb05e5 --- /dev/null +++ b/src/main/java/com/bb/model/TriplePurchaseId.java @@ -0,0 +1,10 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class TriplePurchaseId { + + private String betId; + private String purchaseId; +} diff --git a/src/main/java/com/bb/model/TripleResponse.java b/src/main/java/com/bb/model/TripleResponse.java new file mode 100644 index 0000000..ea77eb4 --- /dev/null +++ b/src/main/java/com/bb/model/TripleResponse.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class TripleResponse { + + private int result_code; + private Integer balance; + private String error_msg; +} diff --git a/src/main/java/com/bb/model/TripleSbVO.java b/src/main/java/com/bb/model/TripleSbVO.java new file mode 100644 index 0000000..060f3ab --- /dev/null +++ b/src/main/java/com/bb/model/TripleSbVO.java @@ -0,0 +1,19 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class TripleSbVO { + private long idx; + private String siteId; + private String memId; + private String tranId; + private String userId; + private String vendor; + private String tranType; + private int amount; + private Long balance; + private String betYn; + private String memLockYn; + private String symLock; +} diff --git a/src/main/java/com/bb/model/TripleVO.java b/src/main/java/com/bb/model/TripleVO.java new file mode 100644 index 0000000..9649a63 --- /dev/null +++ b/src/main/java/com/bb/model/TripleVO.java @@ -0,0 +1,50 @@ +package com.bb.model; + +import java.util.List; + +import lombok.Data; +import net.sf.json.JSONObject; + +@Data +public class TripleVO { + + private long idx; + private int siteIdx; + private int memIdx; + private String siteId; + private String memId; + private String memLevel; + private String betId; + private String tranId; + private int vendorIdx; + private String vendorKey; + private String vendor; + private int gameIdx; + private String gameKey; + private String userId; + private String tranType; + private int debit; + private int credit; + private Long beforeCash; + private Long afterCash; + private long afterMoney; // HSlot에서 유저머니 안맞을경우 대체 할 잔액 + private int isCancel; + private int isBonus; + private String decYn; // "Y"일 경우 debit이나 credit 값을 100으로 나눈다. + private String regDate; + private JSONObject detail; + private String detailStr; + private int blankSpinCasinoRate; + private int blankSpinSlotRate; + private String isBiPushYn; // 유저 보험누르기 적용대상 여부(Y: 적용, N:미적용) + private String isBiProcYn; // Y:보험처리완료, N: 보험처리전 + private String requestAt; + private String betYn; + private String memLockYn; + private String symLock; + private String minusBalanceYn; // "Y"로 요청시 유저 보유금이 마이너스(음수) 값을 가지더라도 잔액 리턴 + private List betDetails; + + private String status; + +} diff --git a/src/main/java/com/bb/model/TrxSearchVO.java b/src/main/java/com/bb/model/TrxSearchVO.java new file mode 100644 index 0000000..a81394b --- /dev/null +++ b/src/main/java/com/bb/model/TrxSearchVO.java @@ -0,0 +1,14 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class TrxSearchVO extends PageFormVO { + + private String siteId; + private String memId; + private String betId; + private String oldYn; + private String startDate; + private String endDate; +} diff --git a/src/main/java/com/bb/model/UserDetailInfo.java b/src/main/java/com/bb/model/UserDetailInfo.java new file mode 100644 index 0000000..ca53bd0 --- /dev/null +++ b/src/main/java/com/bb/model/UserDetailInfo.java @@ -0,0 +1,24 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class UserDetailInfo { + + private String siteId; + private String memId; + private String memNick; + private String memName; + private String memPhone; + private String partnerLevel; + private String partnerLevelName; + private String recommenderId; + private String upperLevel; + private String upperLevelName; + private String loginYn; + private String betYn; + private String cashBalance; + private String pointBalance; + private String joinDate; + +} diff --git a/src/main/java/com/bb/model/UserListSearch.java b/src/main/java/com/bb/model/UserListSearch.java new file mode 100644 index 0000000..1bdedc5 --- /dev/null +++ b/src/main/java/com/bb/model/UserListSearch.java @@ -0,0 +1,24 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class UserListSearch extends PageFormVO { + + private String siteId; + private String memId; + private String memNick; + private String recommenderId; + private String partnerLevel; + private String searchType; + private String searchValue; + private String cashType; + private String startDate; + private String endDate; + private String oldYn; + private String treeOption; // 직속회원 옵션 [기본값:Off("N"), On("Y")] + private String orderColumn; + private String orderType; + private String orderStr; + private String blankSpinSetType; +} diff --git a/src/main/java/com/bb/model/UserSearch.java b/src/main/java/com/bb/model/UserSearch.java new file mode 100644 index 0000000..45aaaf8 --- /dev/null +++ b/src/main/java/com/bb/model/UserSearch.java @@ -0,0 +1,21 @@ +package com.bb.model; + +import lombok.Data; + +@Data +public class UserSearch { + + private String siteId; + private String memId; + private String searchType; + private String searchValue; + private String startDate; + private String endDate; + private String statType; + private String oldYn; + private String orderColumn; + private String orderType; + private String orderStr; + private String treeOption; // 직속회원 옵션 [기본값:Off("N"), On("Y")] + private String blankSpinSetType; +} diff --git a/src/main/java/com/bb/model/VendorGameReq.java b/src/main/java/com/bb/model/VendorGameReq.java new file mode 100644 index 0000000..0fa86c7 --- /dev/null +++ b/src/main/java/com/bb/model/VendorGameReq.java @@ -0,0 +1,17 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + +@Data +public class VendorGameReq extends VendorReq { + + @NotEmpty + String gameKey; + + String gameName; + + String type; + +} diff --git a/src/main/java/com/bb/model/VendorReq.java b/src/main/java/com/bb/model/VendorReq.java new file mode 100644 index 0000000..40e6996 --- /dev/null +++ b/src/main/java/com/bb/model/VendorReq.java @@ -0,0 +1,18 @@ +package com.bb.model; + +import jakarta.validation.constraints.NotEmpty; + +import lombok.Data; + +@Data +public class VendorReq { + + int kplayId; + + @NotEmpty + String gameType; + + @NotEmpty + String vendorKey; + +} diff --git a/src/main/java/com/bb/service/AsyncBetService.java b/src/main/java/com/bb/service/AsyncBetService.java new file mode 100644 index 0000000..faa8e6e --- /dev/null +++ b/src/main/java/com/bb/service/AsyncBetService.java @@ -0,0 +1,296 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import com.bb.dao.BetDao; +import com.bb.dao.CashDao; +import com.bb.dao.CommonDao; +import com.bb.model.CashDetail; +import com.bb.model.RvHoldemVO; +import com.bb.util.RandomRolling; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class AsyncBetService { + + private final BetDao betDao; + + private final CashDao cashDao; + + private final CommonDao commonDao; + + @Async + public void rollingProc(String LOG_PREFIX, HashMap betData) { + try { + log.info(LOG_PREFIX+ "ROLLING::betInfo::"+betData.toString()); + String betId = betData.get("betId").toString(); + HashMap preBetData = betDao.getPreBetData(betData); + + if(preBetData == null) { + String gameCategory = betData.get("gameCategory").toString(); + String vendorCode = betData.get("vendorCode").toString(); + int betAmt = Integer.parseInt(betData.get("betAmt").toString()); + + HashMap rollingInfo = betDao.getRollingInfo(betData); + log.info(LOG_PREFIX+ "ROLLING::rollingInfo::"+rollingInfo.toString()); + int bsCasinoRate = Integer.parseInt(rollingInfo.get("blankSpinCasinoRate").toString()); + int bsSlotRate = Integer.parseInt(rollingInfo.get("blankSpinSlotRate").toString()); + String blankSpinSetType = rollingInfo.get("blankSpinSetType").toString(); + + int betCnt = 0; + long sumWinAmt = 0; + HashMap totalInfo = betDao.getBetTodayTotalInfoNew(betData); + if(totalInfo != null) { + betCnt = Integer.parseInt(totalInfo.get("betCnt").toString()); + sumWinAmt = Long.parseLong(totalInfo.get("sumWinAmt").toString()); + log.info(LOG_PREFIX+ "ROLLING::totalInfo::"+totalInfo.toString()); + } + + int rate = 0; + if( blankSpinSetType.equals("B") && ( betCnt < 20 || betAmt >= sumWinAmt ) ) { + rate = 0; + } else { + if(gameCategory.equals("casino")) { + rate = bsCasinoRate; + } else if(gameCategory.equals("slot")) { + rate = bsSlotRate; + } else { + rate = 0; + } + } + + // isBlankSpin = true (롤링공회전), isBlankSpin = false (롤링진행) + boolean isBlankSpin = RandomRolling.isBlankSpin(rate); + if(isBlankSpin) { + betData.put("isBlankSpinYn", "Y"); + log.info(LOG_PREFIX+ "ROLLING::insertBetRolling isBlankSpin"); + } else { + betData.put("isBlankSpinYn", "N"); + int rollingResult = betDao.insertBetRolling(betData); + log.info(LOG_PREFIX+ "ROLLING::insertBetRolling Result::"+rollingResult); + + try { + //int losingResult = betDao.insertBetLosing(betData); + //log.info(LOG_PREFIX+ "LOSING::insertBetLosing Result::"+losingResult); + + int losingResult = betDao.insertBetLosingNew(betData); + log.info(LOG_PREFIX+ "LOSING::insertBetLosingNew Result::"+losingResult); + } catch(Exception e1) { + log.error(LOG_PREFIX+ "LOSING::insertBetLosing::Exception::"+e1.getMessage()); + } + } + } else { + String isBlankSpinYn = preBetData.get("isBlankSpinYn").toString(); + if(isBlankSpinYn.equals("Y")) { + betData.put("isBlankSpinYn", "Y"); + log.info(LOG_PREFIX+ "ROLLING::insertBetRolling isBlankSpin"); + } else { + betData.put("isBlankSpinYn", "N"); + int rollingResult = betDao.insertBetRolling(betData); + log.info(LOG_PREFIX+ "ROLLING::insertBetRolling Result::"+rollingResult); + + try { + //int losingResult = betDao.insertBetLosing(betData); + //log.info(LOG_PREFIX+ "LOSING::insertBetLosing Result::"+losingResult); + + int losingResult = betDao.insertBetLosingNew(betData); + log.info(LOG_PREFIX+ "LOSING::insertBetLosingNew Result::"+losingResult); + } catch(Exception e1) { + log.error(LOG_PREFIX+ "LOSING::insertBetLosing::Exception::"+e1.getMessage()); + } + } + } + + betData.put("pointRegYn", "Y"); + int updReasult = betDao.updateRollingYn(betData); + log.info(LOG_PREFIX+ "ROLLING::updateRollingYn Reasult::"+updReasult); + + HashMap logParam = new HashMap(); + logParam.put("siteId", betData.get("siteId").toString()); + logParam.put("memId", betData.get("memId").toString()); + logParam.put("actionType", 3); + commonDao.updateAcctionLog(logParam); + } catch (Exception e) { + log.error(LOG_PREFIX+ "ROLLING::rollingProc::Exception::"+e.getMessage()); + } + } + + @Async + public void rollingTieProc(String LOG_PREFIX, String betId) { + try { + HashMap betData = betDao.getReferenceData1(betId); + String isBlankSpinYn = betData.get("isBlankSpinYn").toString(); + int betAmt = Integer.parseInt(betData.get("betAmt").toString()); + int betWinAmt = Integer.parseInt(betData.get("betWinAmt").toString()); + if( isBlankSpinYn.equals("N") && ((Math.abs(betAmt) == Math.abs(betWinAmt)) || (Math.abs(betAmt*12) < Math.abs(betWinAmt))) ) { + log.info(LOG_PREFIX+ "ROLLING_TIE::betInfo::"+betData.toString()); + List list = betDao.getCancelPointAmtList(betId); + if(list != null) { + for(HashMap item : list) { + String pointAmt = item.get("pointAmt").toString(); + log.info(LOG_PREFIX+ "ROLLING_TIE::getCancelPointAmt::"+pointAmt); + int updResult = betDao.updateCancelPoint(item); + log.info(LOG_PREFIX+ "ROLLING_TIE::updateCancelPoint Reasult::"+updResult); + } + int cancelResult1 = betDao.deleteRollingCancel(betId); + log.info(LOG_PREFIX+ "ROLLING_TIE::deleteRollingCancel Reasult::"+cancelResult1); + + int cancelResult2 = betDao.deleteLosingCancel(betId); + log.info(LOG_PREFIX+ "ROLLING_TIE::deleteLosingCancel Reasult::"+cancelResult2); + } + } + } catch (Exception e) { + log.error(LOG_PREFIX+ "ROLLING_TIE::rollingProc::Exception::"+e.getMessage()); + } + } + + @Async + public void rollingCancelProc(String LOG_PREFIX, int betAmt, HashMap betData) { + try { + log.info(LOG_PREFIX+ "ROLLING_CANCEL::betInfo::"+betData.toString()); + int cancelAmt = Integer.parseInt(betData.get("betWinAmt").toString()); + + log.info(LOG_PREFIX+ "betAmt : "+betAmt); + log.info(LOG_PREFIX+ "cancelAmt : "+cancelAmt); + + if(betAmt == cancelAmt) { + // 전체취소 + int cancelResult1 = betDao.cancelBetNew(betData); + log.info(LOG_PREFIX+ "cancelBet result : "+cancelResult1); + + String betId = betData.get("betId").toString(); + List list = betDao.getCancelPointAmtList(betId); + if(list != null) { + for(HashMap item : list) { + String pointAmt = item.get("pointAmt").toString(); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::getCancelPointAmt::"+pointAmt); + int updResult = betDao.updateCancelPoint(item); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::updateCancelPoint Reasult::"+updResult); + } + int cancelResult2 = betDao.deleteRollingCancel(betId); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::deleteRollingCancel Reasult::"+cancelResult2); + + int cancelResult3 = betDao.deleteLosingCancel(betId); + log.info(LOG_PREFIX+ "ROLLING_TIE::deleteLosingCancel Reasult::"+cancelResult3); + } + } else { + Long betIdx = betDao.getCancelTargetIdx(betData); + if(betIdx != null && 0 != betIdx.longValue()) { + // 부분취소 + int cancelResult = betDao.cancelBetNew2(betIdx.longValue()); + log.info(LOG_PREFIX+ "cancelBet result : "+cancelResult); + + List list = betDao.getCancelPointAmtList2(betIdx); + if(list != null) { + for(HashMap item : list) { + String pointAmt = item.get("pointAmt").toString(); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::getCancelPointAmt::"+pointAmt); + int updResult = betDao.updateCancelPoint(item); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::updateCancelPoint Reasult::"+updResult); + } + int cancelResult2 = betDao.deleteRollingCancel2(betIdx); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::deleteRollingCancel Reasult::"+cancelResult2); + + int cancelResult3 = betDao.deleteLosingCancel2(betIdx); + log.info(LOG_PREFIX+ "ROLLING_TIE::deleteLosingCancel Reasult::"+cancelResult3); + } + + String betId = betData.get("betId").toString(); + HashMap betData2 = betDao.getReferenceData1(betId); + String isBlankSpinYn = betData2.get("isBlankSpinYn").toString(); + int newBetAmt = Integer.parseInt(betData2.get("betAmt").toString()); + int newBetWinAmt = Integer.parseInt(betData2.get("betWinAmt").toString()); + if( isBlankSpinYn.equals("N") && ((Math.abs(newBetAmt) == Math.abs(newBetWinAmt)) || (Math.abs(newBetAmt*12) < Math.abs(newBetWinAmt)) )) { + log.info(LOG_PREFIX+ "ROLLING_CANCEL_TIE::betInfo::"+betData2.toString()); + List list2 = betDao.getCancelPointAmtList(betId); + if(list != null) { + for(HashMap item : list2) { + String pointAmt = item.get("pointAmt").toString(); + log.info(LOG_PREFIX+ "ROLLING_CANCEL_TIE::getCancelPointAmt::"+pointAmt); + int updResult = betDao.updateCancelPoint(item); + log.info(LOG_PREFIX+ "ROLLING_CANCEL_TIE::updateCancelPoint Reasult::"+updResult); + } + int cancelResult3 = betDao.deleteRollingCancel(betId); + log.info(LOG_PREFIX+ "ROLLING_CANCEL_TIE::deleteRollingCancel Reasult::"+cancelResult3); + + int cancelResult4 = betDao.deleteLosingCancel(betId); + log.info(LOG_PREFIX+ "ROLLING_TIE::deleteLosingCancel Reasult::"+cancelResult4); + } + } + + } else { + log.error(LOG_PREFIX+ "ROLLING_CANCEL::부분취소 실패... 동일금액의 베팅건을 찾을 수 없습니다."); + } + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "ROLLING_CANCEL::rollingProc::Exception::"+e.getMessage()); + } + } + + @Async + public void cashProc(String LOG_PREFIX, RvHoldemVO rvParam) { + CashDetail paramCash = new CashDetail(); + paramCash.setSiteId(rvParam.getSiteId()); + paramCash.setMemId(rvParam.getMemId()); + if(rvParam.getCallbackType().equals("buyin")) { + paramCash.setCashType("RVH-BYI"); + paramCash.setCashDesc("RV-HOLDEM 바이인"); + } else if(rvParam.getCallbackType().equals("rebuyin")) { + paramCash.setCashType("RVH-RBI"); + paramCash.setCashDesc("RV-HOLDEM 리바인"); + } else if(rvParam.getCallbackType().equals("win")) { + paramCash.setCashType("RVH-WIN"); + paramCash.setCashDesc("RV-HOLDEM 우승"); + } else { + paramCash.setCashType("RVH-LVE"); + paramCash.setCashDesc("RV-HOLDEM 캐시아웃"); + } + paramCash.setCashAmt(rvParam.getAmount()); + paramCash.setBetIdx(Long.toString(rvParam.getCbIdx())); + paramCash.setDelYn("N"); + paramCash.setCashStatus("1"); + paramCash.setMemo(""); + paramCash.setRegId(rvParam.getMemId()); + paramCash.setAdminId(""); + paramCash.setPreCashAmt(Integer.toString(rvParam.getBfBalance())); + long resultCash = cashDao.insertCash(paramCash); + log.info(LOG_PREFIX+ "cashProc::insertCash Reasult::"+resultCash); + } + + @Async + public void losingResultProc(String LOG_PREFIX, HashMap betData) { + try { + log.info(LOG_PREFIX+ "LOSING_R::betInfo::"+betData.toString()); + String betId = betData.get("betId").toString(); + HashMap preBetData = betDao.getPreBetData(betData); + + if(preBetData == null) { + log.error(LOG_PREFIX+ "LOSING_R::Not found preBetData"); + } else { + String isBlankSpinYn = preBetData.get("isBlankSpinYn").toString(); + if(isBlankSpinYn.equals("Y")) { + log.info(LOG_PREFIX+ "LOSING_R::insertBetLosing is BlankSpin"); + } else { + // TODO: Losing insert + //int losingResult = betDao.insertBetLosing(betData); + //log.info(LOG_PREFIX+ "LOSING_R::insertBetLosing Result::"+losingResult); + + int losingResult = betDao.insertWinLosing(betData); + log.info(LOG_PREFIX+ "LOSING_R::insertWinLosing Result::"+losingResult); + } + } + } catch (Exception e) { + log.error(LOG_PREFIX+ "LOSING_R::Exception::"+e.getMessage()); + } + } + +} diff --git a/src/main/java/com/bb/service/AsyncExcoinOtcService.java b/src/main/java/com/bb/service/AsyncExcoinOtcService.java new file mode 100644 index 0000000..1d4a48d --- /dev/null +++ b/src/main/java/com/bb/service/AsyncExcoinOtcService.java @@ -0,0 +1,224 @@ +package com.bb.service; + +import java.net.SocketTimeoutException; +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.HashMap; + +import org.apache.http.conn.ConnectTimeoutException; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.util.UriComponentsBuilder; + +import lombok.extern.slf4j.Slf4j; +import reactor.core.publisher.Mono; + +@Slf4j +@Service +public class AsyncExcoinOtcService { + + @Autowired + WebClient webClient; + + private HttpHeaders getHeader(String LOG_PREFIX) { + LOG_PREFIX = LOG_PREFIX + "::getHeader::"; + HttpHeaders headers = new HttpHeaders(); + //headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + headers.set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + return headers; + } + + public int createUser(String LOG_PREFIX, HashMap exCoinInfo) { + int resultCode = 0; + LOG_PREFIX = LOG_PREFIX + "EXCOIN_OTC::createUser::"; + + try { + String bypassUrl = exCoinInfo.get("bypassUrl").toString(); + bypassUrl = "http://localhost:8080/api"; + HttpHeaders headers = getHeader(LOG_PREFIX); + UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(bypassUrl+"/bypass"); + + String targetUrl = exCoinInfo.get("apiBaseUrl").toString()+"/bt.user.joinUserInfo.dp/proc.go"; + String targetMethod = "GET"; + String targetParameter = "userEmail="+exCoinInfo.get("userEmail").toString()+"&userMobile="+exCoinInfo.get("userMobile").toString()+"&userNm="+exCoinInfo.get("userNm").toString(); + String parameterType = "FORM"; + + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("targetUrl", targetUrl); + params.add("targetMethod", targetMethod); + params.add("targetParameter", targetParameter); + params.add("parameterType", parameterType); + log.info(LOG_PREFIX+ "API_URL::" + uriBuilder.toUriString()); + log.info(LOG_PREFIX+ "API_BODY::" + params.toString()); + + Mono resMono = webClient.post() + .uri(uriBuilder.toUriString()) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params) + .retrieve() + .bodyToMono(String.class); + String responseStr = resMono.block(); + + if(responseStr != null) { + log.info(LOG_PREFIX+ "response : " + responseStr); + JSONObject responseObj = new JSONObject(responseStr); + resultCode = responseObj.getInt("resultCode"); + } + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "ConnectTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "SocketTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "InterruptedException::"+rae.getMessage()); + } + } catch(HttpClientErrorException hee) { + String str = hee.getResponseBodyAsString(); + log.error(LOG_PREFIX+ "HttpClientErrorException::"+str); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + e.printStackTrace(); + } + + return resultCode; + } + + public int updateUser(String LOG_PREFIX, HashMap exCoinInfo) { + int resultCode = 0; + LOG_PREFIX = LOG_PREFIX + "EXCOIN_OTC::updateUser::"; + + try { + String bypassUrl = exCoinInfo.get("bypassUrl").toString(); + bypassUrl = "http://localhost:8080/api"; + HttpHeaders headers = getHeader(LOG_PREFIX); + UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(bypassUrl+"/bypass"); + + String targetUrl = exCoinInfo.get("apiBaseUrl").toString()+"/bt.user.uptUserInfo.dp/proc.go"; + String targetMethod = "GET"; + String targetParameter = "userEmail="+exCoinInfo.get("userEmail").toString()+"&userMobile="+exCoinInfo.get("userMobile").toString()+"&userNm="+exCoinInfo.get("userNm").toString(); + String parameterType = "FORM"; + + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("targetUrl", targetUrl); + params.add("targetMethod", targetMethod); + params.add("targetParameter", targetParameter); + params.add("parameterType", parameterType); + log.info(LOG_PREFIX+ "API_URL::" + uriBuilder.toUriString()); + log.info(LOG_PREFIX+ "API_BODY::" + params.toString()); + + Mono resMono = webClient.post() + .uri(uriBuilder.toUriString()) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params) + .retrieve() + .bodyToMono(String.class); + String responseStr = resMono.block(); + + if(responseStr != null) { + JSONObject responseObj = new JSONObject(responseStr); + log.info(LOG_PREFIX+ "response : " + responseObj); + resultCode = responseObj.getInt("resultCode"); + } + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "ConnectTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "SocketTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "InterruptedException::"+rae.getMessage()); + } + } catch(HttpClientErrorException hee) { + String str = hee.getResponseBodyAsString(); + log.error(LOG_PREFIX+ "HttpClientErrorException::"+str); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + e.printStackTrace(); + } + + return resultCode; + } + + @Async + public void requestTrade(String LOG_PREFIX, HashMap exCoinInfo) { + LOG_PREFIX = LOG_PREFIX + "EXCOIN_OTC::requestTrade::"; + + try { + String bypassUrl = exCoinInfo.get("bypassUrl").toString(); + bypassUrl = "http://localhost:8080/api"; + HttpHeaders headers = getHeader(LOG_PREFIX); + UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(bypassUrl+"/bypass"); + + String targetUrl = exCoinInfo.get("apiBaseUrl").toString()+"/bt.user.setOtcTradeRnl.dp/proc.go"; + String targetMethod = "GET"; + String targetParameter = "userEmail="+exCoinInfo.get("userEmail").toString()+"&otcCode="+exCoinInfo.get("apiKey").toString()+"&cnAmt="+exCoinInfo.get("cashAmt").toString(); + String parameterType = "FORM"; + + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("targetUrl", targetUrl); + params.add("targetMethod", targetMethod); + params.add("targetParameter", targetParameter); + params.add("parameterType", parameterType); + log.info(LOG_PREFIX+ "API_URL::" + uriBuilder.toUriString()); + log.info(LOG_PREFIX+ "API_BODY::" + params.toString()); + + Mono resMono = webClient.post() + .uri(uriBuilder.toUriString()) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params) + .retrieve() + .bodyToMono(String.class); + String responseStr = resMono.block(); + + if(responseStr != null) { + JSONObject responseObj = new JSONObject(responseStr); + log.info(LOG_PREFIX+ "response : " + responseObj); + } + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "ConnectTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "SocketTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "InterruptedException::"+rae.getMessage()); + } + } catch(HttpClientErrorException hee) { + String str = hee.getResponseBodyAsString(); + log.error(LOG_PREFIX+ "HttpClientErrorException::"+str); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/bb/service/AsyncTripleDService.java b/src/main/java/com/bb/service/AsyncTripleDService.java new file mode 100644 index 0000000..b4b3ebe --- /dev/null +++ b/src/main/java/com/bb/service/AsyncTripleDService.java @@ -0,0 +1,1157 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; + +import com.bb.dao.BetDao; +import com.bb.dao.CommonDao; +import com.bb.dao.UserDao; +import com.bb.model.CodeSearch; +import com.bb.model.TripleDVO; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +@Slf4j +@RequiredArgsConstructor +@Service +public class AsyncTripleDService { + + private final BetDao betDao; + + private final UserDao userDao; + + private final CommonDao commonDao; + + @Autowired + WebClient webClient; + + + @Async + public void insertDSportBetDebit(TripleDVO tripleVO) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::insertSportBetDebit::::"; + + try { + // 최초 배팅 건 + double amount = Math.abs(tripleVO.getDebit()); + + HashMap param = new HashMap(); + param.put("betIdx", 0); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("betType", "triple"); + param.put("gameCategory", "sport"); + param.put("vendorCode", "splus"); + param.put("vendor", tripleVO.getVendor()); + param.put("betId", tripleVO.getBetId()); + + if(tripleVO.getDetail() != null) { + JSONObject detail = tripleVO.getDetail(); + Object betTypeNameName = findFirstValueByKey(detail, "BetTypeName"); + + param.put("gameName", betTypeNameName); + } else { + param.put("gameName", tripleVO.getGameKey()); + } + + param.put("betAmt", Double.toString(amount)); + param.put("betRate", "0"); + param.put("betWinAmt", "0"); + double bfMoney = tripleVO.getBeforeCash(); + param.put("bfMoney", Double.toString(bfMoney)); + double afMoney = tripleVO.getAfterCash(); + param.put("afMoney", Double.toString(afMoney)); + param.put("betBonus", "0"); + param.put("betCnt", "1"); + param.put("regId", tripleVO.getMemId()); + param.put("updId", tripleVO.getMemId()); + param.put("delYn","N"); + param.put("updDate", ""); + param.put("regDate", ""); + + String biPushYn = "N"; + param.put("biPushYn", biPushYn); + int betResult = betDao.insertBet(param); + log.info(LOG_PREFIX+ "::insertBet::SUCC"); + Long betIdx = (Long) param.get("betIdx"); + + if(tripleVO.getDetail() != null) { + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx.longValue()); + mapParam.put("mapId", "sport"); + mapParam.put("rateTypeCode", "splus"); + mapParam.put("betName", ""); + mapParam.put("betAmt", Double.toString(amount)); + mapParam.put("betRate", "0"); + mapParam.put("betWinAmt", "0"); + mapParam.put("debitDetailStr", tripleVO.getDetail().toString()); + log.info(LOG_PREFIX+ "::mapParam::" + mapParam.toString()); + int betMapResult = betDao.insertBetMap(mapParam); + + if(betMapResult > 0) { + int sportsResult = sportsDDebitProc(betIdx.longValue(), tripleVO); + log.info(LOG_PREFIX+ "::sportsDebitProc::result::" + sportsResult); + } + + // 스포츠 정산 배팅금 처리 + double betWinAmt = tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", amount); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + } + + HashMap logParam = new HashMap(); + logParam.put("siteId", tripleVO.getSiteId()); + logParam.put("memId", tripleVO.getMemId()); + logParam.put("actionType", 3); + commonDao.updateAcctionLog(logParam); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void updateDBetDebit(TripleDVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateBetDebit::::"; + + try { + double amount = Math.abs(tripleVO.getDebit()); + + HashMap betUpdParam = new HashMap(); + betUpdParam.put("betIdx", betIdx); + betUpdParam.put("betAmt", Double.toString(amount)); + int betResult = betDao.updateBetInfo(betUpdParam); + int mapResult = betDao.updateBetInfoMap(betUpdParam); + + HashMap cashUpdParam = new HashMap(); + cashUpdParam.put("betIdx", betIdx); + cashUpdParam.put("cashType", "-9"); + cashUpdParam.put("memId", tripleVO.getMemId()); + cashUpdParam.put("siteid", tripleVO.getSiteId()); + double cashAmt = amount * -1; + cashUpdParam.put("cashAmt", Double.toString(cashAmt)); + int cashResult = betDao.updateCashInfo(cashUpdParam); + log.info(LOG_PREFIX+ "["+betIdx+"] - updateCashInfo : " + cashResult); + + if(tripleVO.getVendorIdx() == 83 || tripleVO.getVendorIdx() == 83) { + // 스포츠 정산 배팅금 처리 + double betWinAmt = tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", amount); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception {}", e); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "[diffTime : " + String.format("%.3f", diffTime) + "]"); + } + + @Async + public void updateDSportBetCredit(TripleDVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateSportBetCredit::::"; + + try { + String category = ""; + String vendorCode = ""; + String rateOption = ""; + CodeSearch codeSrch = new CodeSearch(); + codeSrch.setSiteId(tripleVO.getSiteId()); + codeSrch.setMasterCode("kplay"); + codeSrch.setTripleCode(tripleVO.getVendorIdx()); + HashMap code = commonDao.getCodeBySite(codeSrch); + if(code != null) { + category = code.get("category").toString(); + vendorCode = code.get("vendorCode").toString(); + rateOption = code.get("rateOption").toString(); + } else { + category = "undefind"; + vendorCode = "undefind"; + rateOption = "0"; + } + + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx); + double betWinAmt = tripleVO.getCredit(); + mapParam.put("betWinAmt", Double.toString(betWinAmt)); + double afMoney = tripleVO.getAfterCash(); + mapParam.put("afMoney", Double.toString(afMoney)); + mapParam.put("siteId", tripleVO.getSiteId()); + if(rateOption.equals("1") && betWinAmt != 0) { + mapParam.put("pointRegYn", "Y"); + } + log.info(LOG_PREFIX+ "::updateEnd::mapParam::" + mapParam.toString()); + int updResult = betDao.updateEnd(mapParam); + log.info(LOG_PREFIX+ "::updateEnd::SUCC::"+updResult); + + log.info(LOG_PREFIX+ "::updateEndOld::mapParam::" + mapParam.toString()); + int updOldResult = betDao.updateEndOld(mapParam); + log.info(LOG_PREFIX+ "::updateEndOld::SUCC::"+updOldResult); + + if(tripleVO.getDetail() != null) { + HashMap mapUpdParam = new HashMap(); + mapUpdParam.put("betIdx", betIdx.longValue()); + mapUpdParam.put("mapId", "sport"); + mapUpdParam.put("betWinAmt", Double.toString(betWinAmt)); + mapUpdParam.put("creditDetailStr", tripleVO.getDetail().toString()); + log.info(LOG_PREFIX+ "::updateMapEnd::" + mapUpdParam.toString()); + int betMapResult = betDao.updateMapEnd(mapUpdParam); + log.info(LOG_PREFIX+ "::updateMapEnd::SUCC::"+betMapResult); + + log.info(LOG_PREFIX+ "::updateMapEndOld::" + mapUpdParam.toString()); + int betMapOldResult = betDao.updateMapEndOld(mapUpdParam); + log.info(LOG_PREFIX+ "::updateMapEndOld::SUCC::"+betMapOldResult); + + if(betMapResult > 0) { + int sportsResult = sportsDCreditProc(betIdx.longValue(), tripleVO); + log.info(LOG_PREFIX+ "::sportsCreditProc::result::" + sportsResult); + } + } + + // 스포츠 정산 당첨금 처리 + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betWinAmt", betWinAmt); + log.info(LOG_PREFIX+ "::updateSportReportCredit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportCredit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportCredit::repResult::" + repResult); + + // 스포츠 롤링 처리 + log.info(LOG_PREFIX+ "::insertSportBetRolling::betIdx::" + betIdx.longValue()); + int rollResult1 = betDao.insertSportBetRolling(betIdx.longValue()); + log.info(LOG_PREFIX+ "::insertSportBetRolling::repResult::" + rollResult1); + + log.info(LOG_PREFIX+ "::updateSportRollingYn::betIdx::" + betIdx.longValue()); + int rollResult2 = betDao.updateSportRollingYn(betIdx.longValue()); + log.info(LOG_PREFIX+ "::updateSportRollingYn::repResult::" + rollResult2); + + // 스포츠 롤링 정산 처리 + log.info(LOG_PREFIX+ "::updateSportReportRolling::betIdx::" + betIdx.longValue()); + int rollResult3 = betDao.updateSportReportRolling(betIdx.longValue()); + log.info(LOG_PREFIX+ "::updateSportReportRolling::repResult::" + rollResult3); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void updateDSportBetCancel(TripleDVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateSportBetCancel::::"; + + try { + HashMap param = new HashMap<>(); + param.put("betIdx", betIdx); + int statusResult = betDao.updateSplusBetCancel(param); + log.info(LOG_PREFIX+ "::sportsCancelProc::result::" + statusResult); + + // 스포츠 정산 당첨금 처리 + double betWinAmt = tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betWinAmt", betWinAmt); + log.info(LOG_PREFIX+ "::updateSportReportCancel::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportCancel(repParam); + log.info(LOG_PREFIX+ "::updateSportReportCancel::repResult::" + repResult); + + // 스포츠 롤링 정산 취소 처리 + log.info(LOG_PREFIX+ "::updateSportReportRollingCancel::betIdx::" + betIdx.longValue()); + int rollResult3 = betDao.updateSportReportRollingCancel(betIdx.longValue()); + log.info(LOG_PREFIX+ "::updateSportReportRollingCancel::repResult::" + rollResult3); + + String betId = tripleVO.getBetId(); + List list = betDao.getCancelPointAmtList(betId); + if(list != null) { + for(HashMap item : list) { + String pointAmt = item.get("pointAmt").toString(); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::getCancelPointAmt::"+pointAmt); + int updResult = betDao.updateCancelPoint(item); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::updateCancelPoint Reasult::"+updResult); + } + + // 스포츠 롤링 취소 처리 + log.info(LOG_PREFIX+ "::deleteSportRollingCancel::betIdx::" + betIdx.longValue()); + int rollResult1 = betDao.deleteSportRollingCancel(betIdx.longValue()); + log.info(LOG_PREFIX+ "::deleteSportRollingCancel::repResult::" + rollResult1); + } + + log.info(LOG_PREFIX+ "::updateSportRollingYn::betIdx::" + betIdx.longValue()); + int rollResult2 = betDao.updateSportRollingYn(betIdx.longValue()); + log.info(LOG_PREFIX+ "::updateSportRollingYn::repResult::" + rollResult2); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void updateDSportBetReserve(TripleDVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateSportBetReserve::::"; + + try { + double amount = Math.abs(tripleVO.getCredit()); + + HashMap betUpdParam = new HashMap(); + betUpdParam.put("betIdx", betIdx); + // 변동된 배팅금 차액만큼 기존에 기록된 배팅금(betinfo.betAmt)에서 빼준다. + betUpdParam.put("betAmt", Double.toString(amount * -1)); + int betResult = betDao.updateBetInfo(betUpdParam); + log.info(LOG_PREFIX+ "::updateBetInfo::result::" + betResult); + + int betResultOld = betDao.updateBetInfoOld(betUpdParam); + log.info(LOG_PREFIX+ "::updateBetInfoOld::result::" + betResultOld); + + HashMap cashInsertParam = new HashMap(); + cashInsertParam.put("siteId", tripleVO.getSiteId()); + cashInsertParam.put("memId", tripleVO.getMemId()); + cashInsertParam.put("cashType", "19"); + cashInsertParam.put("cashDesc", "지급"); + // 변동된 배팅금 차액만큼 지급한 금액 내역을 cash_info에 남긴다. + cashInsertParam.put("cashAmt", Double.toString(amount)); + cashInsertParam.put("betIdx", betIdx); + cashInsertParam.put("regId", tripleVO.getMemId()); + cashInsertParam.put("adminId", tripleVO.getSiteId()); + cashInsertParam.put("memo", "#-COMMIT_RESERVE::차액반영"); + cashInsertParam.put("preCashAmt", Double.toString(tripleVO.getBeforeCash())); + int cashResult = betDao.insertCashInfoByReserve(cashInsertParam); + log.info(LOG_PREFIX+ "::insertCashInfoByReserve::result::" + cashResult); + + // 스포츠 정산 배팅금 처리 + double betWinAmt = tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", (amount * -1)); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void insertDSportBetIssue(TripleDVO tripleVO) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::insertSportBetIssue::::"; + + try { + // 최초 배팅 건 + double amount = Math.abs(tripleVO.getDebit()); + + HashMap param = new HashMap(); + param.put("betIdx", 0); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("betType", "triple"); + param.put("gameCategory", "sport"); + param.put("vendorCode", "splus"); + param.put("vendor", tripleVO.getVendor()); + param.put("betId", tripleVO.getBetId()); + + if(tripleVO.getDetail() != null) { + JSONObject detail = tripleVO.getDetail(); + JSONObject credit = detail.getJSONObject("Credit"); + JSONObject purchases = credit.getJSONObject("Purchases"); + JSONObject purchase = purchases.getJSONObject("Purchase"); + JSONObject selections = purchase.getJSONObject("Selections"); + + int lineCnt = purchase.getInt("NumberOfLines"); + + boolean isArr = false; + Object selectionObj = selections.get("Selection"); + if (selectionObj instanceof JSONArray) { + isArr = true; + } else if (selectionObj instanceof JSONObject) { + isArr = false; + } + log.info(LOG_PREFIX+ "::lineCnt::" + lineCnt + "::isArr::" + isArr); + + if(lineCnt==1 || !isArr) { + // SINGLE + JSONObject selection = selections.getJSONObject("Selection"); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + } else { + // COMBO + JSONArray selectionArr = selections.getJSONArray("Selection"); + JSONObject selection = selectionArr.getJSONObject(0); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + } + + JSONObject selection = selections.getJSONObject("Selection"); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + + String betTypeName = bet.getString("BetType"); + param.put("gameName", betTypeName); + } else { + param.put("gameName", tripleVO.getGameKey()); + } + + param.put("betAmt", Double.toString(amount)); + param.put("betRate", "0"); + param.put("betWinAmt", "0"); + double bfMoney = tripleVO.getBeforeCash(); + param.put("bfMoney", Double.toString(bfMoney)); + double afMoney = tripleVO.getAfterCash(); + param.put("afMoney", Double.toString(afMoney)); + param.put("betBonus", "-1"); + param.put("betCnt", "1"); + param.put("betResults", "FAIL"); + param.put("betStatus", "ISSUEEND"); + param.put("regId", tripleVO.getMemId()); + param.put("updId", tripleVO.getMemId()); + param.put("updDate", ""); + param.put("regDate", ""); + param.put("biPushYn", "N"); + int betResult = betDao.insertBetBonus(param); + log.info(LOG_PREFIX+ "::insertBetIssue::SUCC"); + Long betIdx = (Long) param.get("betIdx"); + + if(tripleVO.getDetail() != null) { + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx.longValue()); + mapParam.put("mapId", "sport"); + mapParam.put("rateTypeCode", "splus"); + mapParam.put("betName", ""); + mapParam.put("betAmt", Double.toString(amount)); + mapParam.put("betRate", "0"); + mapParam.put("betWinAmt", "0"); + mapParam.put("debitDetailStr", tripleVO.getDetail().toString()); + log.info(LOG_PREFIX+ "::mapParam::" + mapParam.toString()); + int betMapResult = betDao.insertBetMap(mapParam); + + if(betMapResult > 0) { + int sportsResult = sportsDBetIssueProc(betIdx.longValue(), tripleVO); + log.info(LOG_PREFIX+ "::sportsDebitProc::result::" + sportsResult); + } + + // 스포츠 정산 배팅금 처리 + double betWinAmt = tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", amount); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void updateDBetIssue(TripleDVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateBetIssue::::"; + + try { + double amount = Math.abs(tripleVO.getDebit()); + + HashMap betUpdParam = new HashMap(); + betUpdParam.put("betIdx", betIdx); + betUpdParam.put("betAmt", Double.toString(amount)); + int betResult = betDao.updateBetInfo(betUpdParam); + log.info(LOG_PREFIX+ "::updateBetInfo::result::" + betResult); + + int betResultOld = betDao.updateBetInfoOld(betUpdParam); + log.info(LOG_PREFIX+ "::updateBetInfoOld::result::" + betResultOld); + + HashMap cashUpdParam = new HashMap(); + cashUpdParam.put("betIdx", betIdx); + cashUpdParam.put("cashType", "-19"); + cashUpdParam.put("memId", tripleVO.getMemId()); + cashUpdParam.put("siteid", tripleVO.getSiteId()); + double cashAmt = amount * -1; + cashUpdParam.put("cashAmt", Double.toString(cashAmt)); + int cashResult = betDao.updateCashInfo(cashUpdParam); + log.info(LOG_PREFIX+ "::updateCashInfo::result::" + cashResult); + + // 스포츠 정산 배팅금 처리 + double betWinAmt = tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", amount); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + private int sportsDDebitProc(long betIdx, TripleDVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::sportsDebitProc::::"; + int sportResult = 0; + + try { + JSONObject detail = tripleVO.getDetail(); + JSONObject bets = detail.getJSONObject("Bets"); + Object betObj = bets.get("Bet"); + + if(betObj instanceof net.sf.json.JSONObject) { + // SINGLE + JSONObject bet = bets.getJSONObject("Bet"); + + int lineCnt = bet.getInt("ComboBetNumersLines"); + if(lineCnt == 0) { + // SINGLE + HashMap param = new HashMap<>(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "debit"); + param.put("customerID", bets.getLong("cust_id")); + param.put("reserveID", bets.getLong("reserve_id")); + param.put("purchaseID", bet.getLong("PurchaseBetID")); + param.put("amount", bets.getInt("amount")); + param.put("odds", bet.getDouble("OddsDec")); + param.put("gain", bet.getDouble("Gain")); + + param.put("lineTypeID", bet.getInt("LineTypeID")); + param.put("lineTypeName", bet.getString("LineTypeName")); + // param.put("lineID", bet.getLong("LineID")); + param.put("newLineID", bet.getString("NewLineID")); + param.put("lineOdds", bet.getDouble("OddsDec")); + param.put("eventTypeID", bet.getInt("EventTypeID")); + param.put("eventTypeName", bet.getString("EventTypeName")); + // param.put("masterEventID", bet.getLong("MasterEventID")); + param.put("newMasterEventID", bet.getLong("NewMasterEventID")); + // param.put("eventID", bet.getLong("EventID")); + param.put("newEventID", bet.getLong("NewEventID")); + param.put("eventName", bet.getString("EventName")); + param.put("eventDate", bet.getString("EventDate")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetTypeName")); + param.put("betID", bet.getLong("BetID")); + param.put("creationDate", bet.getString("CreationDate")); + param.put("status", bet.getString("Status")); + if(bet.has("BranchID")) { + param.put("branchID", bet.getInt("BranchID")); + } else { + param.put("branchID", bet.getInt("BranchId")); + } + param.put("branchName", bet.getString("BranchName")); + // param.put("leagueID", bet.getLong("LeagueID")); + param.put("newLeagueID", bet.getLong("NewLeagueID")); + param.put("leagueName", bet.getString("LeagueName")); + param.put("homeTeam", bet.getString("HomeTeam")); + param.put("awayTeam", bet.getString("AwayTeam")); + param.put("yourBet", bet.getString("YourBet")); + param.put("score", bet.getString("Score")); + + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + sportResult = betDao.insertBetSplusInfo(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + } else { + // COMBO + int result = 0; + JSONArray lines = bet.getJSONArray("Lines"); + for(int j=0; j(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "debit"); + param.put("customerID", bets.getLong("cust_id")); + param.put("reserveID", bets.getLong("reserve_id")); + param.put("purchaseID", bet.getLong("PurchaseBetID")); + param.put("amount", bets.getDouble("amount")); + param.put("odds", bet.getDouble("OddsDec")); + param.put("gain", bet.getDouble("Gain")); + + param.put("lineTypeID", line.getInt("LineTypeID")); + param.put("lineTypeName", line.getString("LineTypeName")); + // param.put("lineID", line.getLong("LineID")); + param.put("newLineID", line.getString("NewLineID")); + param.put("lineOdds", line.getDouble("OddsDec")); + param.put("eventTypeID", line.getInt("EventTypeID")); + param.put("eventTypeName", line.getString("EventTypeName")); + // param.put("masterEventID", line.getLong("MasterEventID")); + param.put("newMasterEventID", line.getLong("NewMasterEventID")); + // param.put("eventID", line.getLong("EventID")); + param.put("newEventID", line.getLong("NewEventID")); + param.put("eventName", line.getString("EventName")); + param.put("eventDate", line.getString("EventDate")); + param.put("betTypeID", line.getInt("BetTypeID")); + param.put("betTypeName", line.getString("BetTypeName")); + param.put("betID", line.getLong("BetID")); + param.put("creationDate", line.getString("CreationDate")); + param.put("status", line.getString("Status")); + if(line.has("BranchID")) { + param.put("branchID", line.getInt("BranchID")); + } else { + param.put("branchID", line.getInt("BranchId")); + } + param.put("branchName", line.getString("BranchName")); + // param.put("leagueID", line.getLong("LeagueID")); + param.put("newLeagueID", line.getLong("NewLeagueID")); + param.put("leagueName", line.getString("LeagueName")); + param.put("homeTeam", line.getString("HomeTeam")); + param.put("awayTeam", line.getString("AwayTeam")); + param.put("yourBet", line.getString("YourBet")); + param.put("score", line.getString("Score")); + + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + result = betDao.insertBetSplusInfo(param); + sportResult = sportResult + result; + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + } + } + + } else if(betObj instanceof net.sf.json.JSONArray) { + // COMBO + JSONArray betArr = bets.getJSONArray("Bet"); + for(int j=0; j(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "debit"); + param.put("customerID", bets.getLong("cust_id")); + param.put("reserveID", bets.getLong("reserve_id")); + param.put("purchaseID", bet.getLong("PurchaseBetID")); + param.put("amount", bets.getInt("amount")); + param.put("odds", bet.getDouble("OddsDec")); + param.put("gain", bet.getDouble("Gain")); + + param.put("lineTypeID", bet.getInt("LineTypeID")); + param.put("lineTypeName", bet.getString("LineTypeName")); + // param.put("lineID", bet.getLong("LineID")); + param.put("newLineID", bet.getString("NewLineID")); + param.put("lineOdds", bet.getDouble("OddsDec")); + param.put("eventTypeID", bet.getInt("EventTypeID")); + param.put("eventTypeName", bet.getString("EventTypeName")); + // param.put("masterEventID", bet.getLong("MasterEventID")); + param.put("newMasterEventID", bet.getLong("NewMasterEventID")); + // param.put("eventID", bet.getLong("EventID")); + param.put("newEventID", bet.getLong("NewEventID")); + param.put("eventName", bet.getString("EventName")); + param.put("eventDate", bet.getString("EventDate")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetTypeName")); + param.put("betID", bet.getLong("BetID")); + param.put("creationDate", bet.getString("CreationDate")); + param.put("status", bet.getString("Status")); + if(bet.has("BranchID")) { + param.put("branchID", bet.getInt("BranchID")); + } else { + param.put("branchID", bet.getInt("BranchId")); + } + param.put("branchName", bet.getString("BranchName")); + // param.put("leagueID", bet.getLong("LeagueID")); + param.put("newLeagueID", bet.getLong("NewLeagueID")); + param.put("leagueName", bet.getString("LeagueName")); + param.put("homeTeam", bet.getString("HomeTeam")); + param.put("awayTeam", bet.getString("AwayTeam")); + param.put("yourBet", bet.getString("YourBet")); + param.put("score", bet.getString("Score")); + + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + sportResult = betDao.insertBetSplusInfo(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + } else { + // COMBO + int result = 0; + JSONArray lines = bet.getJSONArray("Lines"); + for(int k=0; k(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "debit"); + param.put("customerID", bets.getLong("cust_id")); + param.put("reserveID", bets.getLong("reserve_id")); + param.put("purchaseID", bet.getLong("PurchaseBetID")); + param.put("amount", bets.getDouble("amount")); + param.put("odds", bet.getDouble("OddsDec")); + param.put("gain", bet.getDouble("Gain")); + + param.put("lineTypeID", line.getInt("LineTypeID")); + param.put("lineTypeName", line.getString("LineTypeName")); + // param.put("lineID", line.getLong("LineID")); + param.put("newLineID", line.getString("NewLineID")); + param.put("lineOdds", line.getDouble("OddsDec")); + param.put("eventTypeID", line.getInt("EventTypeID")); + param.put("eventTypeName", line.getString("EventTypeName")); + // param.put("masterEventID", line.getLong("MasterEventID")); + param.put("newMasterEventID", line.getLong("NewMasterEventID")); + // param.put("eventID", line.getLong("EventID")); + param.put("newEventID", line.getLong("NewEventID")); + param.put("eventName", line.getString("EventName")); + param.put("eventDate", line.getString("EventDate")); + param.put("betTypeID", line.getInt("BetTypeID")); + param.put("betTypeName", line.getString("BetTypeName")); + param.put("betID", line.getLong("BetID")); + param.put("creationDate", line.getString("CreationDate")); + param.put("status", line.getString("Status")); + if(line.has("BranchID")) { + param.put("branchID", line.getInt("BranchID")); + } else { + param.put("branchID", line.getInt("BranchId")); + } + param.put("branchName", line.getString("BranchName")); + // param.put("leagueID", line.getLong("LeagueID")); + param.put("newLeagueID", line.getLong("NewLeagueID")); + param.put("leagueName", line.getString("LeagueName")); + param.put("homeTeam", line.getString("HomeTeam")); + param.put("awayTeam", line.getString("AwayTeam")); + param.put("yourBet", line.getString("YourBet")); + param.put("score", line.getString("Score")); + + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + result = betDao.insertBetSplusInfo(param); + sportResult = sportResult + result; + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + } + } + } + } else if (betObj == null) { + log.info(LOG_PREFIX+ "::Bet는 값이 없습니다."); + } else { + log.info(LOG_PREFIX+ "::Bet는 다른 타입입니다: " + bets.getClass()); + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "ERROR:: " + e.getMessage()); + e.printStackTrace(); + } + + return sportResult; + } + + private int sportsDCreditProc(long betIdx, TripleDVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::sportsCreditProc::::"; + int sportResult = 0; + + try { + JSONObject detail = tripleVO.getDetail(); + JSONObject credit = detail.getJSONObject("Credit"); + JSONObject purchases = credit.getJSONObject("Purchases"); + JSONObject purchase = purchases.getJSONObject("Purchase"); + JSONObject selections = purchase.getJSONObject("Selections"); + + int lineCnt = purchase.getInt("NumberOfLines"); + + boolean isArr = false; + Object selectionObj = selections.get("Selection"); + if (selectionObj instanceof JSONArray) { + isArr = true; + } else if (selectionObj instanceof JSONObject) { + isArr = false; + } + + log.info(LOG_PREFIX+ "::lineCnt::" + lineCnt + "::isArr::" + isArr); + + if(lineCnt==1 || !isArr) { + // SINGLE + JSONObject selection = selections.getJSONObject("Selection"); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + + HashMap param = new HashMap<>(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "credit"); + param.put("customerID", credit.getLong("CustomerID")); + param.put("reserveID", purchase.getLong("ReserveID")); + param.put("purchaseID", purchase.getLong("PurchaseID")); + param.put("amount", credit.getDouble("Amount")); + param.put("odds", selection.getDouble("DecimalOdds")); + param.put("gain", 0.0); + + param.put("lineTypeID", selection.getInt("LineTypeID")); + param.put("lineTypeName", selection.getString("LineTypeName")); + // param.put("lineID", selection.getLong("LineID")); + param.put("newLineID", selection.getString("NewLineID")); + param.put("lineOdds", selection.getDouble("DecimalOdds")); + param.put("eventTypeID", selection.getInt("EventTypeID")); + param.put("eventTypeName", selection.getString("EventTypeName")); + // param.put("masterEventID", selection.getLong("MasterEventID")); + param.put("newMasterEventID", selection.getLong("NewMasterEventID")); + // param.put("eventID", selection.getLong("EventID")); + param.put("newEventID", selection.getLong("NewEventID")); + param.put("eventName", selection.getString("EventName")); + param.put("eventDate", selection.getString("EventDateUTC")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetType")); + param.put("betID", bet.getLong("ID")); + param.put("creationDate", bet.getString("BetSettledDate")); + param.put("status", change.getString("NewStatus")); + param.put("branchID", selection.getInt("BranchID")); + if(selection.has("BranchID")) { + param.put("branchID", selection.getInt("BranchID")); + } else { + param.put("branchID", selection.getInt("BranchId")); + } + param.put("branchName", selection.getString("BranchName")); + // param.put("leagueID", selection.getLong("LeagueID")); + param.put("newLeagueID", selection.getLong("NewLeagueID")); + param.put("leagueName", selection.getString("LeagueName")); + param.put("homeTeam", selection.getString("HomeTeam")); + param.put("awayTeam", selection.getString("AwayTeam")); + param.put("leagueNameKO", ""); + param.put("homeTeamKO", ""); + param.put("awayTeamKO", ""); + param.put("yourBet", selection.getString("YourBet")); + param.put("score", change.getString("TriggeredResult")); + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + sportResult = betDao.insertBetSplusInfo(param); + int statusResult = betDao.updateSplusStatus(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + log.info(LOG_PREFIX+ "::statusResult::" + statusResult); + } else { + // COMBO + int result = 0; + JSONArray selectionArr = selections.getJSONArray("Selection"); + for(int j=0; j(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "credit"); + param.put("customerID", credit.getLong("CustomerID")); + param.put("reserveID", purchase.getLong("ReserveID")); + param.put("purchaseID", purchase.getLong("PurchaseID")); + param.put("amount", credit.getDouble("Amount")); + param.put("odds", selection.getDouble("DecimalOdds")); + param.put("gain", 0.0); + + param.put("lineTypeID", selection.getInt("LineTypeID")); + param.put("lineTypeName", selection.getString("LineTypeName")); + // param.put("lineID", selection.getLong("LineID")); + param.put("newLineID", selection.getString("NewLineID")); + param.put("lineOdds", selection.getDouble("DecimalOdds")); + param.put("eventTypeID", selection.getInt("EventTypeID")); + param.put("eventTypeName", selection.getString("EventTypeName")); + // param.put("masterEventID", selection.getLong("MasterEventID")); + param.put("newMasterEventID", selection.getLong("NewMasterEventID")); + // param.put("eventID", selection.getLong("EventID")); + param.put("newEventID", selection.getLong("NewEventID")); + param.put("eventName", selection.getString("EventName")); + param.put("eventDate", selection.getString("EventDateUTC")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetType")); + param.put("betID", bet.getLong("ID")); + param.put("creationDate", bet.getString("BetSettledDate")); + param.put("status", bet.getString("NewStatus")); + if(selection.has("BranchID")) { + param.put("branchID", selection.getInt("BranchID")); + } else { + param.put("branchID", selection.getInt("BranchId")); + } + param.put("branchName", selection.getString("BranchName")); + // param.put("leagueID", selection.getLong("LeagueID")); + param.put("newLeagueID", selection.getLong("NewLeagueID")); + param.put("leagueName", selection.getString("LeagueName")); + param.put("homeTeam", selection.getString("HomeTeam")); + param.put("awayTeam", selection.getString("AwayTeam")); + param.put("yourBet", selection.getString("YourBet")); + param.put("score", selection.getString("Score")); + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + result = betDao.insertBetSplusInfo(param); + sportResult = sportResult + result; + int statusResult = betDao.updateSplusStatus(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + log.info(LOG_PREFIX+ "::statusResult::" + statusResult); + } + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "ERROR:: " + e.getMessage()); + e.printStackTrace(); + } + + return sportResult; + } + + private int sportsDBetIssueProc(long betIdx, TripleDVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::sportsBetIssueProc::::"; + int sportResult = 0; + + try { + JSONObject detail = tripleVO.getDetail(); + JSONObject credit = detail.getJSONObject("Credit"); + JSONObject purchases = credit.getJSONObject("Purchases"); + JSONObject purchase = purchases.getJSONObject("Purchase"); + JSONObject selections = purchase.getJSONObject("Selections"); + + int lineCnt = purchase.getInt("NumberOfLines"); + + boolean isArr = false; + Object selectionObj = selections.get("Selection"); + if (selectionObj instanceof JSONArray) { + isArr = true; + } else if (selectionObj instanceof JSONObject) { + isArr = false; + } + + log.info(LOG_PREFIX+ "::lineCnt::" + lineCnt + "::isArr::" + isArr); + + if(lineCnt==1 || !isArr) { + // SINGLE + JSONObject selection = selections.getJSONObject("Selection"); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + + HashMap param = new HashMap<>(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "issue"); + param.put("customerID", credit.getLong("CustomerID")); + param.put("reserveID", purchase.getLong("ReserveID")); + param.put("purchaseID", purchase.getLong("PurchaseID")); + param.put("amount", credit.getDouble("Amount")); + param.put("odds", selection.getDouble("DecimalOdds")); + param.put("gain", 0.0); + + param.put("lineTypeID", selection.getInt("LineTypeID")); + param.put("lineTypeName", selection.getString("LineTypeName")); + // param.put("lineID", selection.getLong("LineID")); + param.put("newLineID", selection.getString("NewLineID")); + param.put("lineOdds", selection.getDouble("DecimalOdds")); + param.put("eventTypeID", selection.getInt("EventTypeID")); + param.put("eventTypeName", selection.getString("EventTypeName")); + // param.put("masterEventID", selection.getLong("MasterEventID")); + param.put("newMasterEventID", selection.getLong("NewMasterEventID")); + // param.put("eventID", selection.getLong("EventID")); + param.put("newEventID", selection.getLong("NewEventID")); + param.put("eventName", selection.getString("EventName")); + param.put("eventDate", selection.getString("EventDateUTC")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetType")); + param.put("betID", bet.getLong("ID")); + param.put("creationDate", bet.getString("BetSettledDate")); + param.put("status", change.getString("NewStatus")); + param.put("branchID", selection.getInt("BranchID")); + if(selection.has("BranchID")) { + param.put("branchID", selection.getInt("BranchID")); + } else { + param.put("branchID", selection.getInt("BranchId")); + } + param.put("branchName", selection.getString("BranchName")); + // param.put("leagueID", selection.getLong("LeagueID")); + param.put("newLeagueID", selection.getLong("NewLeagueID")); + param.put("leagueName", selection.getString("LeagueName")); + param.put("homeTeam", selection.getString("HomeTeam")); + param.put("awayTeam", selection.getString("AwayTeam")); + param.put("leagueNameKO", ""); + param.put("homeTeamKO", ""); + param.put("awayTeamKO", ""); + param.put("yourBet", selection.getString("YourBet")); + param.put("score", change.getString("TriggeredResult")); + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + sportResult = betDao.insertBetSplusInfo(param); + int statusResult = betDao.updateSplusStatus(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + log.info(LOG_PREFIX+ "::statusResult::" + statusResult); + } else { + // COMBO + int result = 0; + JSONArray selectionArr = selections.getJSONArray("Selection"); + for(int j=0; j(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "credit"); + param.put("customerID", credit.getLong("CustomerID")); + param.put("reserveID", purchase.getLong("ReserveID")); + param.put("purchaseID", purchase.getLong("PurchaseID")); + param.put("amount", credit.getDouble("Amount")); + param.put("odds", selection.getDouble("DecimalOdds")); + param.put("gain", 0.0); + + param.put("lineTypeID", selection.getInt("LineTypeID")); + param.put("lineTypeName", selection.getString("LineTypeName")); + // param.put("lineID", selection.getLong("LineID")); + param.put("newLineID", selection.getString("NewLineID")); + param.put("lineOdds", selection.getDouble("DecimalOdds")); + param.put("eventTypeID", selection.getInt("EventTypeID")); + param.put("eventTypeName", selection.getString("EventTypeName")); + // param.put("masterEventID", selection.getLong("MasterEventID")); + param.put("newMasterEventID", selection.getLong("NewMasterEventID")); + // param.put("eventID", selection.getLong("EventID")); + param.put("newEventID", selection.getLong("NewEventID")); + param.put("eventName", selection.getString("EventName")); + param.put("eventDate", selection.getString("EventDateUTC")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetType")); + param.put("betID", bet.getLong("ID")); + param.put("creationDate", bet.getString("BetSettledDate")); + param.put("status", bet.getString("NewStatus")); + if(selection.has("BranchID")) { + param.put("branchID", selection.getInt("BranchID")); + } else { + param.put("branchID", selection.getInt("BranchId")); + } + param.put("branchName", selection.getString("BranchName")); + // param.put("leagueID", selection.getLong("LeagueID")); + param.put("newLeagueID", selection.getLong("NewLeagueID")); + param.put("leagueName", selection.getString("LeagueName")); + param.put("homeTeam", selection.getString("HomeTeam")); + param.put("awayTeam", selection.getString("AwayTeam")); + param.put("yourBet", selection.getString("YourBet")); + param.put("score", selection.getString("Score")); + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + result = betDao.insertBetSplusInfo(param); + sportResult = sportResult + result; + int statusResult = betDao.updateSplusStatus(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + log.info(LOG_PREFIX+ "::statusResult::" + statusResult); + } + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "ERROR:: " + e.getMessage()); + e.printStackTrace(); + } + + return sportResult; + } + + public static Object findFirstValueByKey(Object json, String key) { + return searchFirst(json, key); + } + + private static Object searchFirst(Object json, String key) { + + // JSONObject인 경우 + if (json instanceof JSONObject) { + JSONObject obj = (JSONObject) json; + + for (Object k : obj.keySet()) { + Object value = obj.get(k); + + // 키가 일치하는 순간 바로 반환! + if (key.equals(k)) { + return value; + } + + // 내부 탐색 + Object found = searchFirst(value, key); + if (found != null) { + return found; + } + } + } + + // JSONArray인 경우 + else if (json instanceof JSONArray) { + JSONArray arr = (JSONArray) json; + + for (Object element : arr) { + Object found = searchFirst(element, key); + if (found != null) { + return found; + } + } + } + + return null; // 못 찾았을 경우 + } + +} diff --git a/src/main/java/com/bb/service/AsyncTripleService.java b/src/main/java/com/bb/service/AsyncTripleService.java new file mode 100644 index 0000000..c872ff8 --- /dev/null +++ b/src/main/java/com/bb/service/AsyncTripleService.java @@ -0,0 +1,1396 @@ +package com.bb.service; + +import java.nio.charset.Charset; +import java.time.Duration; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.util.UriComponentsBuilder; + +import com.bb.dao.BetDao; +import com.bb.dao.CashDao; +import com.bb.dao.CommonDao; +import com.bb.dao.UserDao; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.CodeSearch; +import com.bb.model.TripleAuthInfo; +import com.bb.model.TripleDetailVO; +import com.bb.model.TripleVO; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import reactor.core.publisher.Mono; + +@Slf4j +@RequiredArgsConstructor +@Service +public class AsyncTripleService { + + private final BetDao betDao; + + private final UserDao userDao; + + private final CashDao cashDao; + + private final CommonDao commonDao; + + //@Autowired + //RestTemplate restTemplate; + + @Autowired + WebClient webClient; + + @Async + public void insertBetDebit(TripleVO tripleVO) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::insertBetDebit::::"; + + try { + // 최초 배팅 건 + int amount = Math.abs(tripleVO.getDebit()); + + HashMap param = new HashMap(); + param.put("betIdx", 0); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("betType", "triple"); + + String category = ""; + String vendorCode = ""; + CodeSearch codeSrch = new CodeSearch(); + codeSrch.setMasterCode("kplay"); + codeSrch.setTripleCode(tripleVO.getVendorIdx()); + HashMap code = commonDao.getCode(codeSrch); + if(code != null) { + category = code.get("groupCode").toString(); + param.put("gameCategory", category); + + vendorCode = code.get("code").toString(); + param.put("vendorCode", vendorCode); + } else { + category = "undefind"; + param.put("gameCategory", category); + + vendorCode = "undefind"; + param.put("vendorCode", vendorCode); + } + + param.put("vendor", tripleVO.getVendor()); + param.put("betId", tripleVO.getBetId()); + param.put("gameName", tripleVO.getGameKey()); + param.put("betAmt", Integer.toString(amount)); + param.put("betRate", "0"); + param.put("betWinAmt", "0"); + int bfMoney = tripleVO.getBeforeCash().intValue(); + param.put("bfMoney", Integer.toString(bfMoney)); + int afMoney = tripleVO.getAfterCash().intValue(); + param.put("afMoney", Integer.toString(afMoney)); + param.put("betBonus", "0"); + param.put("betCnt", "1"); + param.put("regId", tripleVO.getMemId()); + param.put("updId", tripleVO.getMemId()); + param.put("delYn","N"); + if(tripleVO.getRequestAt() != null && !tripleVO.getRequestAt().equals("")) { + param.put("updDate", tripleVO.getRequestAt()); + param.put("regDate", tripleVO.getRequestAt()); + } else { + param.put("updDate", ""); + param.put("regDate", ""); + } + + + String biPushYn = "N"; + param.put("biPushYn", biPushYn); + + if(vendorCode.equals("powerball")) { + param.put("biProcYn", "Y"); + } else { + param.put("biProcYn", "N"); + } + + try { + int betResult = betDao.insertBet(param); + Long betIdx = (Long) param.get("betIdx"); + List betDetails = tripleVO.getBetDetails(); + if(betDetails != null) { + for(TripleDetailVO betMap : betDetails) { + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx.longValue()); + mapParam.put("mapId", betMap.getDetailId()); + mapParam.put("rateTypeCode", betMap.getDetailType()); + mapParam.put("betName", betMap.getDetailName()); + mapParam.put("betAmt", Integer.toString(betMap.getBetAmt())); + mapParam.put("betRate", "0"); + mapParam.put("betWinAmt", Integer.toString(betMap.getBetWinAmt())); + mapParam.put("debitDetailStr", null); + log.info(LOG_PREFIX+ "mapParam: " + mapParam.toString()); + int betMapResult = betDao.insertBetMap(mapParam); + } + } + + HashMap logParam = new HashMap(); + logParam.put("siteId", tripleVO.getSiteId()); + logParam.put("memId", tripleVO.getMemId()); + logParam.put("actionType", 3); + commonDao.updateAcctionLog(logParam); + + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate tranId: " + tripleVO.getTranId()); + } + + } catch (Exception e) { + log.error("AsyncTripleService::insertBetDebit::Exception {}", e); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "[diffTime : " + String.format("%.3f", diffTime) + "]"); + } + + @Async + public void insertSportBetDebit(TripleVO tripleVO) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::insertSportBetDebit::::"; + + try { + // 최초 배팅 건 + int amount = Math.abs(tripleVO.getDebit()); + + HashMap param = new HashMap(); + param.put("betIdx", 0); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("betType", "triple"); + param.put("gameCategory", "sport"); + param.put("vendorCode", "splus"); + param.put("vendor", tripleVO.getVendor()); + param.put("betId", tripleVO.getBetId()); + + if(tripleVO.getDetail() != null) { + JSONObject detail = tripleVO.getDetail(); + JSONObject bets = detail.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + String betTypeName = bet.getString("BetTypeName"); + param.put("gameName", betTypeName); + } else { + param.put("gameName", tripleVO.getGameKey()); + } + + param.put("betAmt", Integer.toString(amount)); + param.put("betRate", "0"); + param.put("betWinAmt", "0"); + int bfMoney = tripleVO.getBeforeCash().intValue(); + param.put("bfMoney", Integer.toString(bfMoney)); + int afMoney = tripleVO.getAfterCash().intValue(); + param.put("afMoney", Integer.toString(afMoney)); + param.put("betBonus", "0"); + param.put("betCnt", "1"); + param.put("regId", tripleVO.getMemId()); + param.put("updId", tripleVO.getMemId()); + param.put("delYn","N"); + param.put("updDate", ""); + param.put("regDate", ""); + + String biPushYn = "N"; + param.put("biPushYn", biPushYn); + int betResult = betDao.insertBet(param); + log.info(LOG_PREFIX+ "::insertBet::SUCC"); + Long betIdx = (Long) param.get("betIdx"); + + if(tripleVO.getDetail() != null) { + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx.longValue()); + mapParam.put("mapId", "sport"); + mapParam.put("rateTypeCode", "splus"); + mapParam.put("betName", ""); + mapParam.put("betAmt", Integer.toString(amount)); + mapParam.put("betRate", "0"); + mapParam.put("betWinAmt", "0"); + mapParam.put("debitDetailStr", tripleVO.getDetail().toString()); + log.info(LOG_PREFIX+ "::mapParam::" + mapParam.toString()); + int betMapResult = betDao.insertBetMap(mapParam); + + if(betMapResult > 0) { + int sportsResult = sportsDebitProc(betIdx.longValue(), tripleVO); + log.info(LOG_PREFIX+ "::sportsDebitProc::result::" + sportsResult); + } + + // 스포츠 정산 배팅금 처리 + int betWinAmt = (int) tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", amount); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + } + + HashMap logParam = new HashMap(); + logParam.put("siteId", tripleVO.getSiteId()); + logParam.put("memId", tripleVO.getMemId()); + logParam.put("actionType", 3); + commonDao.updateAcctionLog(logParam); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void updateBetDebit(TripleVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateBetDebit::::"; + + try { + int amount = Math.abs(tripleVO.getDebit()); + + HashMap betUpdParam = new HashMap(); + betUpdParam.put("betIdx", betIdx); + betUpdParam.put("betAmt", Integer.toString(amount)); + int betResult = betDao.updateBetInfo(betUpdParam); + int mapResult = betDao.updateBetInfoMap(betUpdParam); + + HashMap cashUpdParam = new HashMap(); + cashUpdParam.put("betIdx", betIdx); + cashUpdParam.put("cashType", "-9"); + cashUpdParam.put("memId", tripleVO.getMemId()); + cashUpdParam.put("siteid", tripleVO.getSiteId()); + int cashAmt = amount * -1; + cashUpdParam.put("cashAmt", Integer.toString(cashAmt)); + int cashResult = betDao.updateCashInfo(cashUpdParam); + log.info(LOG_PREFIX+ "["+betIdx+"] - updateCashInfo : " + cashResult); + + if(tripleVO.getVendorIdx() == 83 || tripleVO.getVendorIdx() == 83) { + // 스포츠 정산 배팅금 처리 + int betWinAmt = (int) tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", amount); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception {}", e); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "[diffTime : " + String.format("%.3f", diffTime) + "]"); + } + + @Async + public void updateBetCredit(TripleVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateBetCredit::::"; + + try { + String category = ""; + String vendorCode = ""; + String rateOption = ""; + CodeSearch codeSrch = new CodeSearch(); + codeSrch.setSiteId(tripleVO.getSiteId()); + codeSrch.setMasterCode("kplay"); + codeSrch.setTripleCode(tripleVO.getVendorIdx()); + HashMap code = commonDao.getCodeBySite(codeSrch); + if(code != null) { + category = code.get("category").toString(); + vendorCode = code.get("vendorCode").toString(); + rateOption = code.get("rateOption").toString(); + } else { + category = "undefind"; + vendorCode = "undefind"; + rateOption = "0"; + } + + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx); + int betWinAmt = (int) tripleVO.getCredit(); + mapParam.put("betWinAmt", Integer.toString(betWinAmt)); + int afMoney = tripleVO.getAfterCash().intValue(); + mapParam.put("afMoney", Integer.toString(afMoney)); + mapParam.put("siteId", tripleVO.getSiteId()); + if(rateOption.equals("1") && betWinAmt != 0) { + mapParam.put("pointRegYn", "Y"); + } + if(vendorCode.equals("bomb")) { + mapParam.put("pointRegYn", "Y"); + } + if(vendorCode.equals("powerball")) { + mapParam.put("biProcYn", "Y"); + } else { + mapParam.put("biProcYn", "N"); + } + + betDao.updateEnd(mapParam); + if(tripleVO.getTranType().equals("adjust")) { + HashMap cashUpdParam = new HashMap(); + cashUpdParam.put("betIdx", betIdx); + cashUpdParam.put("cashType", "9"); + cashUpdParam.put("memId", tripleVO.getMemId()); + cashUpdParam.put("siteid", tripleVO.getSiteId()); + cashUpdParam.put("cashAmt", Integer.toString(betWinAmt)); + int cashResult = betDao.updateCashInfo(cashUpdParam); + log.info(LOG_PREFIX+ "["+betIdx+"] - updateCashInfo : " + cashResult); + } + + List betDetails = tripleVO.getBetDetails(); + if(betDetails != null) { + for(TripleDetailVO betMap : betDetails) { + HashMap mapUpdParam = new HashMap(); + mapUpdParam.put("betIdx", betIdx); + mapUpdParam.put("mapId", betMap.getDetailId()); + mapUpdParam.put("betWinAmt", Integer.toString(betMap.getBetWinAmt())); + if(betMap.getDetail() != null) { + mapUpdParam.put("creditDetailStr", betMap.getDetail().toString()); + } else { + mapUpdParam.put("creditDetailStr", null); + } + log.info(LOG_PREFIX+ "mapUpdParam: " + mapUpdParam.toString()); + betDao.updateMapEnd(mapUpdParam); + } + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "AsyncTripleService::updateBetCredit::Exception {}", e); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "[diffTime : " + String.format("%.3f", diffTime) + "]"); + } + + @Async + public void updateSportBetCredit(TripleVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateSportBetCredit::::"; + + try { + String category = ""; + String vendorCode = ""; + String rateOption = ""; + CodeSearch codeSrch = new CodeSearch(); + codeSrch.setSiteId(tripleVO.getSiteId()); + codeSrch.setMasterCode("kplay"); + codeSrch.setTripleCode(tripleVO.getVendorIdx()); + HashMap code = commonDao.getCodeBySite(codeSrch); + if(code != null) { + category = code.get("category").toString(); + vendorCode = code.get("vendorCode").toString(); + rateOption = code.get("rateOption").toString(); + } else { + category = "undefind"; + vendorCode = "undefind"; + rateOption = "0"; + } + + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx); + int betWinAmt = (int) tripleVO.getCredit(); + mapParam.put("betWinAmt", Integer.toString(betWinAmt)); + int afMoney = tripleVO.getAfterCash().intValue(); + mapParam.put("afMoney", Integer.toString(afMoney)); + mapParam.put("siteId", tripleVO.getSiteId()); + if(rateOption.equals("1") && betWinAmt != 0) { + mapParam.put("pointRegYn", "Y"); + } + log.info(LOG_PREFIX+ "::updateEnd::mapParam::" + mapParam.toString()); + int updResult = betDao.updateEnd(mapParam); + log.info(LOG_PREFIX+ "::updateEnd::SUCC::"+updResult); + + log.info(LOG_PREFIX+ "::updateEndOld::mapParam::" + mapParam.toString()); + int updOldResult = betDao.updateEndOld(mapParam); + log.info(LOG_PREFIX+ "::updateEndOld::SUCC::"+updOldResult); + + if(tripleVO.getDetail() != null) { + HashMap mapUpdParam = new HashMap(); + mapUpdParam.put("betIdx", betIdx.longValue()); + mapUpdParam.put("mapId", "sport"); + mapUpdParam.put("betWinAmt", Integer.toString(betWinAmt)); + mapUpdParam.put("creditDetailStr", tripleVO.getDetail().toString()); + log.info(LOG_PREFIX+ "::updateMapEnd::" + mapUpdParam.toString()); + int betMapResult = betDao.updateMapEnd(mapUpdParam); + log.info(LOG_PREFIX+ "::updateMapEnd::SUCC::"+betMapResult); + + log.info(LOG_PREFIX+ "::updateMapEndOld::" + mapUpdParam.toString()); + int betMapOldResult = betDao.updateMapEndOld(mapUpdParam); + log.info(LOG_PREFIX+ "::updateMapEndOld::SUCC::"+betMapOldResult); + + if(betMapResult > 0) { + int sportsResult = sportsCreditProc(betIdx.longValue(), tripleVO); + log.info(LOG_PREFIX+ "::sportsCreditProc::result::" + sportsResult); + } + } + + // 스포츠 정산 당첨금 처리 + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betWinAmt", betWinAmt); + log.info(LOG_PREFIX+ "::updateSportReportCredit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportCredit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportCredit::repResult::" + repResult); + /* + HashMap repParam = new HashMap(); + repParam.put("siteId", tripleVO.getSiteId()); + repParam.put("memId", tripleVO.getMemId()); + repParam.put("betWinAmt", betWinAmt); + log.info(LOG_PREFIX+ "::updateSportReport::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReport(repParam); + log.info(LOG_PREFIX+ "::updateSportReport::repResult::" + repResult); + */ + + // 스포츠 롤링 처리 + log.info(LOG_PREFIX+ "::insertSportBetRolling::betIdx::" + betIdx.longValue()); + int rollResult1 = betDao.insertSportBetRolling(betIdx.longValue()); + log.info(LOG_PREFIX+ "::insertSportBetRolling::repResult::" + rollResult1); + + log.info(LOG_PREFIX+ "::updateSportRollingYn::betIdx::" + betIdx.longValue()); + int rollResult2 = betDao.updateSportRollingYn(betIdx.longValue()); + log.info(LOG_PREFIX+ "::updateSportRollingYn::repResult::" + rollResult2); + + // 스포츠 롤링 정산 처리 + log.info(LOG_PREFIX+ "::updateSportReportRolling::betIdx::" + betIdx.longValue()); + int rollResult3 = betDao.updateSportReportRolling(betIdx.longValue()); + log.info(LOG_PREFIX+ "::updateSportReportRolling::repResult::" + rollResult3); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void updateSportBetCancel(TripleVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateSportBetCancel::::"; + + try { + HashMap param = new HashMap<>(); + param.put("betIdx", betIdx); + int statusResult = betDao.updateSplusBetCancel(param); + log.info(LOG_PREFIX+ "::sportsCancelProc::result::" + statusResult); + + // 스포츠 정산 당첨금 처리 + int betWinAmt = (int) tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betWinAmt", betWinAmt); + log.info(LOG_PREFIX+ "::updateSportReportCancel::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportCancel(repParam); + log.info(LOG_PREFIX+ "::updateSportReportCancel::repResult::" + repResult); + /* + HashMap repParam = new HashMap(); + repParam.put("siteId", tripleVO.getSiteId()); + repParam.put("memId", tripleVO.getMemId()); + repParam.put("betWinAmt", betWinAmt); + log.info(LOG_PREFIX+ "::updateSportReport::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReport(repParam); + log.info(LOG_PREFIX+ "::updateSportReport::repResult::" + repResult); + */ + + // 스포츠 롤링 정산 취소 처리 + log.info(LOG_PREFIX+ "::updateSportReportRollingCancel::betIdx::" + betIdx.longValue()); + int rollResult3 = betDao.updateSportReportRollingCancel(betIdx.longValue()); + log.info(LOG_PREFIX+ "::updateSportReportRollingCancel::repResult::" + rollResult3); + + String betId = tripleVO.getBetId(); + List list = betDao.getCancelPointAmtList(betId); + if(list != null) { + for(HashMap item : list) { + String pointAmt = item.get("pointAmt").toString(); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::getCancelPointAmt::"+pointAmt); + int updResult = betDao.updateCancelPoint(item); + log.info(LOG_PREFIX+ "ROLLING_CANCEL::updateCancelPoint Reasult::"+updResult); + } + + // 스포츠 롤링 취소 처리 + log.info(LOG_PREFIX+ "::deleteSportRollingCancel::betIdx::" + betIdx.longValue()); + int rollResult1 = betDao.deleteSportRollingCancel(betIdx.longValue()); + log.info(LOG_PREFIX+ "::deleteSportRollingCancel::repResult::" + rollResult1); + } + + log.info(LOG_PREFIX+ "::updateSportRollingYn::betIdx::" + betIdx.longValue()); + int rollResult2 = betDao.updateSportRollingYn(betIdx.longValue()); + log.info(LOG_PREFIX+ "::updateSportRollingYn::repResult::" + rollResult2); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void updateSportBetReserve(TripleVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateSportBetReserve::::"; + + try { + int amount = Math.abs(tripleVO.getCredit()); + + HashMap betUpdParam = new HashMap(); + betUpdParam.put("betIdx", betIdx); + // 변동된 배팅금 차액만큼 기존에 기록된 배팅금(betinfo.betAmt)에서 빼준다. + betUpdParam.put("betAmt", Integer.toString(amount * -1)); + int betResult = betDao.updateBetInfo(betUpdParam); + log.info(LOG_PREFIX+ "::updateBetInfo::result::" + betResult); + + int betResultOld = betDao.updateBetInfoOld(betUpdParam); + log.info(LOG_PREFIX+ "::updateBetInfoOld::result::" + betResultOld); + + HashMap cashInsertParam = new HashMap(); + cashInsertParam.put("siteid", tripleVO.getSiteId()); + cashInsertParam.put("memId", tripleVO.getMemId()); + cashInsertParam.put("cashType", "19"); + cashInsertParam.put("cashDesc", "지급"); + // 변동된 배팅금 차액만큼 지급한 금액 내역을 cash_info에 남긴다. + cashInsertParam.put("cashAmt", Integer.toString(amount)); + cashInsertParam.put("betIdx", betIdx); + cashInsertParam.put("regId", tripleVO.getMemId()); + cashInsertParam.put("adminId", tripleVO.getSiteId()); + cashInsertParam.put("memo", "#-COMMIT_RESERVE::차액반영"); + cashInsertParam.put("preCashAmt", Long.toString(tripleVO.getBeforeCash())); + int cashResult = betDao.insertCashInfoByReserve(cashInsertParam); + log.info(LOG_PREFIX+ "::insertCashInfoByReserve::result::" + cashResult); + + // 스포츠 정산 배팅금 처리 + int betWinAmt = (int) tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", (amount * -1)); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void insertSportBetIssue(TripleVO tripleVO) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::insertSportBetIssue::::"; + + try { + // 최초 배팅 건 + int amount = Math.abs(tripleVO.getDebit()); + + HashMap param = new HashMap(); + param.put("betIdx", 0); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("betType", "triple"); + param.put("gameCategory", "sport"); + param.put("vendorCode", "splus"); + param.put("vendor", tripleVO.getVendor()); + param.put("betId", tripleVO.getBetId()); + + if(tripleVO.getDetail() != null) { + JSONObject detail = tripleVO.getDetail(); + JSONObject credit = detail.getJSONObject("Credit"); + JSONObject purchases = credit.getJSONObject("Purchases"); + JSONObject purchase = purchases.getJSONObject("Purchase"); + JSONObject selections = purchase.getJSONObject("Selections"); + + int lineCnt = purchase.getInt("NumberOfLines"); + + boolean isArr = false; + Object selectionObj = selections.get("Selection"); + if (selectionObj instanceof JSONArray) { + isArr = true; + } else if (selectionObj instanceof JSONObject) { + isArr = false; + } + log.info(LOG_PREFIX+ "::lineCnt::" + lineCnt + "::isArr::" + isArr); + + if(lineCnt==1 || !isArr) { + // SINGLE + JSONObject selection = selections.getJSONObject("Selection"); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + } else { + // COMBO + JSONArray selectionArr = selections.getJSONArray("Selection"); + JSONObject selection = selectionArr.getJSONObject(0); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + } + + JSONObject selection = selections.getJSONObject("Selection"); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + + String betTypeName = bet.getString("BetType"); + param.put("gameName", betTypeName); + } else { + param.put("gameName", tripleVO.getGameKey()); + } + + param.put("betAmt", Integer.toString(amount)); + param.put("betRate", "0"); + param.put("betWinAmt", "0"); + int bfMoney = tripleVO.getBeforeCash().intValue(); + param.put("bfMoney", Integer.toString(bfMoney)); + int afMoney = tripleVO.getAfterCash().intValue(); + param.put("afMoney", Integer.toString(afMoney)); + param.put("betBonus", "-1"); + param.put("betCnt", "1"); + param.put("betResults", "FAIL"); + param.put("betStatus", "ISSUEEND"); + param.put("regId", tripleVO.getMemId()); + param.put("updId", tripleVO.getMemId()); + param.put("updDate", ""); + param.put("regDate", ""); + param.put("biPushYn", "N"); + int betResult = betDao.insertBetBonus(param); + log.info(LOG_PREFIX+ "::insertBetIssue::SUCC"); + Long betIdx = (Long) param.get("betIdx"); + + if(tripleVO.getDetail() != null) { + HashMap mapParam = new HashMap(); + mapParam.put("betIdx", betIdx.longValue()); + mapParam.put("mapId", "sport"); + mapParam.put("rateTypeCode", "splus"); + mapParam.put("betName", ""); + mapParam.put("betAmt", Integer.toString(amount)); + mapParam.put("betRate", "0"); + mapParam.put("betWinAmt", "0"); + mapParam.put("debitDetailStr", tripleVO.getDetail().toString()); + log.info(LOG_PREFIX+ "::mapParam::" + mapParam.toString()); + int betMapResult = betDao.insertBetMap(mapParam); + + if(betMapResult > 0) { + int sportsResult = sportsBetIssueProc(betIdx.longValue(), tripleVO); + log.info(LOG_PREFIX+ "::sportsDebitProc::result::" + sportsResult); + } + + // 스포츠 정산 배팅금 처리 + int betWinAmt = (int) tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", amount); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + @Async + public void updateBetIssue(TripleVO tripleVO, Long betIdx) { + long startTime = System.currentTimeMillis(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::updateBetIssue::::"; + + try { + int amount = Math.abs(tripleVO.getDebit()); + + HashMap betUpdParam = new HashMap(); + betUpdParam.put("betIdx", betIdx); + betUpdParam.put("betAmt", Integer.toString(amount)); + int betResult = betDao.updateBetInfo(betUpdParam); + log.info(LOG_PREFIX+ "::updateBetInfo::result::" + betResult); + + int betResultOld = betDao.updateBetInfoOld(betUpdParam); + log.info(LOG_PREFIX+ "::updateBetInfoOld::result::" + betResultOld); + + HashMap cashUpdParam = new HashMap(); + cashUpdParam.put("betIdx", betIdx); + cashUpdParam.put("cashType", "-19"); + cashUpdParam.put("memId", tripleVO.getMemId()); + cashUpdParam.put("siteid", tripleVO.getSiteId()); + int cashAmt = amount * -1; + cashUpdParam.put("cashAmt", Integer.toString(cashAmt)); + int cashResult = betDao.updateCashInfo(cashUpdParam); + log.info(LOG_PREFIX+ "::updateCashInfo::result::" + cashResult); + + // 스포츠 정산 배팅금 처리 + int betWinAmt = (int) tripleVO.getCredit(); + HashMap repParam = new HashMap(); + repParam.put("betIdx", betIdx.longValue()); + repParam.put("betAmt", amount); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repParam::" + repParam.toString()); + int repResult = betDao.updateSportReportDebit(repParam); + log.info(LOG_PREFIX+ "::updateSportReportDebit::repResult::" + repResult); + + } catch (Exception e) { + log.error(LOG_PREFIX+ "::Exception"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -2.0) log.error(LOG_PREFIX+ "::diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + + private int sportsDebitProc(long betIdx, TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::sportsDebitProc::::"; + int sportResult = 0; + + try { + JSONObject detail = tripleVO.getDetail(); + JSONObject bets = detail.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + + int lineCnt = bet.getInt("ComboBetNumersLines"); + if(lineCnt == 0) { + // SINGLE + HashMap param = new HashMap<>(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "debit"); + param.put("customerID", bets.getLong("cust_id")); + param.put("reserveID", bets.getLong("reserve_id")); + param.put("purchaseID", bet.getLong("PurchaseBetID")); + param.put("amount", bets.getInt("amount")); + param.put("odds", bet.getDouble("OddsDec")); + param.put("gain", bet.getDouble("Gain")); + + param.put("lineTypeID", bet.getInt("LineTypeID")); + param.put("lineTypeName", bet.getString("LineTypeName")); + // param.put("lineID", bet.getLong("LineID")); + param.put("newLineID", bet.getString("NewLineID")); + param.put("lineOdds", bet.getDouble("OddsDec")); + param.put("eventTypeID", bet.getInt("EventTypeID")); + param.put("eventTypeName", bet.getString("EventTypeName")); + // param.put("masterEventID", bet.getLong("MasterEventID")); + param.put("newMasterEventID", bet.getLong("NewMasterEventID")); + // param.put("eventID", bet.getLong("EventID")); + param.put("newEventID", bet.getLong("NewEventID")); + param.put("eventName", bet.getString("EventName")); + param.put("eventDate", bet.getString("EventDate")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetTypeName")); + param.put("betID", bet.getLong("BetID")); + param.put("creationDate", bet.getString("CreationDate")); + param.put("status", bet.getString("Status")); + if(bet.has("BranchID")) { + param.put("branchID", bet.getInt("BranchID")); + } else { + param.put("branchID", bet.getInt("BranchId")); + } + param.put("branchName", bet.getString("BranchName")); + // param.put("leagueID", bet.getLong("LeagueID")); + param.put("newLeagueID", bet.getLong("NewLeagueID")); + param.put("leagueName", bet.getString("LeagueName")); + param.put("homeTeam", bet.getString("HomeTeam")); + param.put("awayTeam", bet.getString("AwayTeam")); + param.put("yourBet", bet.getString("YourBet")); + param.put("score", bet.getString("Score")); + + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + sportResult = betDao.insertBetSplusInfo(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + } else { + // COMBO + int result = 0; + JSONArray lines = bet.getJSONArray("Lines"); + for(int j=0; j(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "debit"); + param.put("customerID", bets.getLong("cust_id")); + param.put("reserveID", bets.getLong("reserve_id")); + param.put("purchaseID", bet.getLong("PurchaseBetID")); + param.put("amount", bets.getInt("amount")); + param.put("odds", bet.getDouble("OddsDec")); + param.put("gain", bet.getDouble("Gain")); + + param.put("lineTypeID", line.getInt("LineTypeID")); + param.put("lineTypeName", line.getString("LineTypeName")); + // param.put("lineID", line.getLong("LineID")); + param.put("newLineID", line.getString("NewLineID")); + param.put("lineOdds", line.getDouble("OddsDec")); + param.put("eventTypeID", line.getInt("EventTypeID")); + param.put("eventTypeName", line.getString("EventTypeName")); + // param.put("masterEventID", line.getLong("MasterEventID")); + param.put("newMasterEventID", line.getLong("NewMasterEventID")); + // param.put("eventID", line.getLong("EventID")); + param.put("newEventID", line.getLong("NewEventID")); + param.put("eventName", line.getString("EventName")); + param.put("eventDate", line.getString("EventDate")); + param.put("betTypeID", line.getInt("BetTypeID")); + param.put("betTypeName", line.getString("BetTypeName")); + param.put("betID", line.getLong("BetID")); + param.put("creationDate", line.getString("CreationDate")); + param.put("status", line.getString("Status")); + if(line.has("BranchID")) { + param.put("branchID", line.getInt("BranchID")); + } else { + param.put("branchID", line.getInt("BranchId")); + } + param.put("branchName", line.getString("BranchName")); + // param.put("leagueID", line.getLong("LeagueID")); + param.put("newLeagueID", line.getLong("NewLeagueID")); + param.put("leagueName", line.getString("LeagueName")); + param.put("homeTeam", line.getString("HomeTeam")); + param.put("awayTeam", line.getString("AwayTeam")); + param.put("leagueNameKO", line.getString("LeagueNameKor")); + param.put("homeTeamKO", line.getString("HomeTeamKor")); + param.put("awayTeamKO", line.getString("AwayTeamKor")); + param.put("yourBet", line.getString("YourBet")); + param.put("score", line.getString("Score")); + + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + result = betDao.insertBetSplusInfo(param); + sportResult = sportResult + result; + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + } + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "ERROR:: " + e.getMessage()); + e.printStackTrace(); + } + + return sportResult; + } + + private int sportsCreditProc(long betIdx, TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::sportsCreditProc::::"; + int sportResult = 0; + + try { + JSONObject detail = tripleVO.getDetail(); + JSONObject credit = detail.getJSONObject("Credit"); + JSONObject purchases = credit.getJSONObject("Purchases"); + JSONObject purchase = purchases.getJSONObject("Purchase"); + JSONObject selections = purchase.getJSONObject("Selections"); + + int lineCnt = purchase.getInt("NumberOfLines"); + + boolean isArr = false; + Object selectionObj = selections.get("Selection"); + if (selectionObj instanceof JSONArray) { + isArr = true; + } else if (selectionObj instanceof JSONObject) { + isArr = false; + } + + log.info(LOG_PREFIX+ "::lineCnt::" + lineCnt + "::isArr::" + isArr); + + if(lineCnt==1 || !isArr) { + // SINGLE + JSONObject selection = selections.getJSONObject("Selection"); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + + HashMap param = new HashMap<>(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "credit"); + param.put("customerID", credit.getLong("CustomerID")); + param.put("reserveID", purchase.getLong("ReserveID")); + param.put("purchaseID", purchase.getLong("PurchaseID")); + param.put("amount", credit.getInt("Amount")); + param.put("odds", selection.getDouble("DecimalOdds")); + param.put("gain", 0.0); + + param.put("lineTypeID", selection.getInt("LineTypeID")); + param.put("lineTypeName", selection.getString("LineTypeName")); + // param.put("lineID", selection.getLong("LineID")); + param.put("newLineID", selection.getString("NewLineID")); + param.put("lineOdds", selection.getDouble("DecimalOdds")); + param.put("eventTypeID", selection.getInt("EventTypeID")); + param.put("eventTypeName", selection.getString("EventTypeName")); + // param.put("masterEventID", selection.getLong("MasterEventID")); + param.put("newMasterEventID", selection.getLong("NewMasterEventID")); + // param.put("eventID", selection.getLong("EventID")); + param.put("newEventID", selection.getLong("NewEventID")); + param.put("eventName", selection.getString("EventName")); + param.put("eventDate", selection.getString("EventDateUTC")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetType")); + param.put("betID", bet.getLong("ID")); + param.put("creationDate", bet.getString("BetSettledDate")); + param.put("status", change.getString("NewStatus")); + param.put("branchID", selection.getInt("BranchID")); + if(selection.has("BranchID")) { + param.put("branchID", selection.getInt("BranchID")); + } else { + param.put("branchID", selection.getInt("BranchId")); + } + param.put("branchName", selection.getString("BranchName")); + // param.put("leagueID", selection.getLong("LeagueID")); + param.put("newLeagueID", selection.getLong("NewLeagueID")); + param.put("leagueName", selection.getString("LeagueName")); + param.put("homeTeam", selection.getString("HomeTeam")); + param.put("awayTeam", selection.getString("AwayTeam")); + param.put("leagueNameKO", selection.getString("LeagueNameKor")); + param.put("homeTeamKO", selection.getString("HomeTeamKor")); + param.put("awayTeamKO", selection.getString("AwayTeamKor")); + param.put("yourBet", selection.getString("YourBet")); + param.put("score", change.getString("TriggeredResult")); + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + sportResult = betDao.insertBetSplusInfo(param); + int statusResult = betDao.updateSplusStatus(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + log.info(LOG_PREFIX+ "::statusResult::" + statusResult); + } else { + // COMBO + int result = 0; + JSONArray selectionArr = selections.getJSONArray("Selection"); + for(int j=0; j(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "credit"); + param.put("customerID", credit.getLong("CustomerID")); + param.put("reserveID", purchase.getLong("ReserveID")); + param.put("purchaseID", purchase.getLong("PurchaseID")); + param.put("amount", credit.getInt("Amount")); + param.put("odds", selection.getDouble("DecimalOdds")); + param.put("gain", 0.0); + + param.put("lineTypeID", selection.getInt("LineTypeID")); + param.put("lineTypeName", selection.getString("LineTypeName")); + // param.put("lineID", selection.getLong("LineID")); + param.put("newLineID", selection.getString("NewLineID")); + param.put("lineOdds", selection.getDouble("DecimalOdds")); + param.put("eventTypeID", selection.getInt("EventTypeID")); + param.put("eventTypeName", selection.getString("EventTypeName")); + // param.put("masterEventID", selection.getLong("MasterEventID")); + param.put("newMasterEventID", selection.getLong("NewMasterEventID")); + // param.put("eventID", selection.getLong("EventID")); + param.put("newEventID", selection.getLong("NewEventID")); + param.put("eventName", selection.getString("EventName")); + param.put("eventDate", selection.getString("EventDateUTC")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetType")); + param.put("betID", bet.getLong("ID")); + param.put("creationDate", bet.getString("BetSettledDate")); + param.put("status", bet.getString("NewStatus")); + if(selection.has("BranchID")) { + param.put("branchID", selection.getInt("BranchID")); + } else { + param.put("branchID", selection.getInt("BranchId")); + } + param.put("branchName", selection.getString("BranchName")); + // param.put("leagueID", selection.getLong("LeagueID")); + param.put("newLeagueID", selection.getLong("NewLeagueID")); + param.put("leagueName", selection.getString("LeagueName")); + param.put("homeTeam", selection.getString("HomeTeam")); + param.put("awayTeam", selection.getString("AwayTeam")); + param.put("yourBet", selection.getString("YourBet")); + param.put("score", selection.getString("Score")); + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + result = betDao.insertBetSplusInfo(param); + sportResult = sportResult + result; + int statusResult = betDao.updateSplusStatus(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + log.info(LOG_PREFIX+ "::statusResult::" + statusResult); + } + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "ERROR:: " + e.getMessage()); + e.printStackTrace(); + } + + return sportResult; + } + + private int sportsBetIssueProc(long betIdx, TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::#-Async::sportsBetIssueProc::::"; + int sportResult = 0; + + try { + JSONObject detail = tripleVO.getDetail(); + JSONObject credit = detail.getJSONObject("Credit"); + JSONObject purchases = credit.getJSONObject("Purchases"); + JSONObject purchase = purchases.getJSONObject("Purchase"); + JSONObject selections = purchase.getJSONObject("Selections"); + + int lineCnt = purchase.getInt("NumberOfLines"); + + boolean isArr = false; + Object selectionObj = selections.get("Selection"); + if (selectionObj instanceof JSONArray) { + isArr = true; + } else if (selectionObj instanceof JSONObject) { + isArr = false; + } + + log.info(LOG_PREFIX+ "::lineCnt::" + lineCnt + "::isArr::" + isArr); + + if(lineCnt==1 || !isArr) { + // SINGLE + JSONObject selection = selections.getJSONObject("Selection"); + JSONObject changes = selection.getJSONObject("Changes"); + JSONObject change = changes.getJSONObject("Change"); + JSONObject bets = change.getJSONObject("Bets"); + JSONObject bet = bets.getJSONObject("Bet"); + + HashMap param = new HashMap<>(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "issue"); + param.put("customerID", credit.getLong("CustomerID")); + param.put("reserveID", purchase.getLong("ReserveID")); + param.put("purchaseID", purchase.getLong("PurchaseID")); + param.put("amount", credit.getInt("Amount")); + param.put("odds", selection.getDouble("DecimalOdds")); + param.put("gain", 0.0); + + param.put("lineTypeID", selection.getInt("LineTypeID")); + param.put("lineTypeName", selection.getString("LineTypeName")); + // param.put("lineID", selection.getLong("LineID")); + param.put("newLineID", selection.getString("NewLineID")); + param.put("lineOdds", selection.getDouble("DecimalOdds")); + param.put("eventTypeID", selection.getInt("EventTypeID")); + param.put("eventTypeName", selection.getString("EventTypeName")); + // param.put("masterEventID", selection.getLong("MasterEventID")); + param.put("newMasterEventID", selection.getLong("NewMasterEventID")); + // param.put("eventID", selection.getLong("EventID")); + param.put("newEventID", selection.getLong("NewEventID")); + param.put("eventName", selection.getString("EventName")); + param.put("eventDate", selection.getString("EventDateUTC")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetType")); + param.put("betID", bet.getLong("ID")); + param.put("creationDate", bet.getString("BetSettledDate")); + param.put("status", change.getString("NewStatus")); + param.put("branchID", selection.getInt("BranchID")); + if(selection.has("BranchID")) { + param.put("branchID", selection.getInt("BranchID")); + } else { + param.put("branchID", selection.getInt("BranchId")); + } + param.put("branchName", selection.getString("BranchName")); + // param.put("leagueID", selection.getLong("LeagueID")); + param.put("newLeagueID", selection.getLong("NewLeagueID")); + param.put("leagueName", selection.getString("LeagueName")); + param.put("homeTeam", selection.getString("HomeTeam")); + param.put("awayTeam", selection.getString("AwayTeam")); + param.put("leagueNameKO", selection.getString("LeagueNameKor")); + param.put("homeTeamKO", selection.getString("HomeTeamKor")); + param.put("awayTeamKO", selection.getString("AwayTeamKor")); + param.put("yourBet", selection.getString("YourBet")); + param.put("score", change.getString("TriggeredResult")); + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + sportResult = betDao.insertBetSplusInfo(param); + int statusResult = betDao.updateSplusStatus(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + log.info(LOG_PREFIX+ "::statusResult::" + statusResult); + } else { + // COMBO + int result = 0; + JSONArray selectionArr = selections.getJSONArray("Selection"); + for(int j=0; j(); + param.put("betIdx", betIdx); + param.put("BetIdFK", tripleVO.getBetId()); + param.put("tranType", "credit"); + param.put("customerID", credit.getLong("CustomerID")); + param.put("reserveID", purchase.getLong("ReserveID")); + param.put("purchaseID", purchase.getLong("PurchaseID")); + param.put("amount", credit.getInt("Amount")); + param.put("odds", selection.getDouble("DecimalOdds")); + param.put("gain", 0.0); + + param.put("lineTypeID", selection.getInt("LineTypeID")); + param.put("lineTypeName", selection.getString("LineTypeName")); + // param.put("lineID", selection.getLong("LineID")); + param.put("newLineID", selection.getString("NewLineID")); + param.put("lineOdds", selection.getDouble("DecimalOdds")); + param.put("eventTypeID", selection.getInt("EventTypeID")); + param.put("eventTypeName", selection.getString("EventTypeName")); + // param.put("masterEventID", selection.getLong("MasterEventID")); + param.put("newMasterEventID", selection.getLong("NewMasterEventID")); + // param.put("eventID", selection.getLong("EventID")); + param.put("newEventID", selection.getLong("NewEventID")); + param.put("eventName", selection.getString("EventName")); + param.put("eventDate", selection.getString("EventDateUTC")); + param.put("betTypeID", bet.getInt("BetTypeID")); + param.put("betTypeName", bet.getString("BetType")); + param.put("betID", bet.getLong("ID")); + param.put("creationDate", bet.getString("BetSettledDate")); + param.put("status", bet.getString("NewStatus")); + if(selection.has("BranchID")) { + param.put("branchID", selection.getInt("BranchID")); + } else { + param.put("branchID", selection.getInt("BranchId")); + } + param.put("branchName", selection.getString("BranchName")); + // param.put("leagueID", selection.getLong("LeagueID")); + param.put("newLeagueID", selection.getLong("NewLeagueID")); + param.put("leagueName", selection.getString("LeagueName")); + param.put("homeTeam", selection.getString("HomeTeam")); + param.put("awayTeam", selection.getString("AwayTeam")); + param.put("yourBet", selection.getString("YourBet")); + param.put("score", selection.getString("Score")); + param.put("isFreeBet", bet.getInt("IsFreeBet")); + param.put("isLive", bet.getInt("IsLive")); + + log.info(LOG_PREFIX+ "::param::" + param.toString()); + result = betDao.insertBetSplusInfo(param); + sportResult = sportResult + result; + int statusResult = betDao.updateSplusStatus(param); + log.info(LOG_PREFIX+ "::sportResult::" + sportResult); + log.info(LOG_PREFIX+ "::statusResult::" + statusResult); + } + } + + } catch(Exception e) { + log.error(LOG_PREFIX+ "ERROR:: " + e.getMessage()); + e.printStackTrace(); + } + + return sportResult; + } + + @Async + public void withdrawBalanceAsync(TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::withdrawBalanceAsync::::"; + try { + HashMap tripleParam = new HashMap<>(); + tripleParam.put("siteId", tripleVO.getSiteId()); + tripleParam.put("apiVendorCode", "triple"); + ApiVendorCompInfo apiVendor = userDao.getApiVendorCompInfo(tripleParam); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", apiVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + UriComponentsBuilder withdrawBuilder = UriComponentsBuilder.fromHttpUrl(apiVendor.getApiUrl() + "/withdraw"); + HashMap withdrawParams = new HashMap(); + withdrawParams.put("username", tripleVO.getUserId()); + withdrawParams.put("vendor", ""); + withdrawParams.put("requestKey", String.valueOf(System.currentTimeMillis())); + //HttpEntity> withdrawEntity = new HttpEntity<>(withdrawParams, headers); + + + // ResponseEntity withdrawRes = restTemplate.postForEntity(withdrawBuilder.toUriString(), withdrawEntity, String.class); + //paramMap + Mono withdrawResMono = webClient.post() + .uri(withdrawBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(withdrawParams) + .retrieve() + .bodyToMono(String.class) + .flatMap(response -> { + try { + + + return Mono.just(response); + + } catch (Exception e) { + return Mono.error(e); + } + }).timeout(Duration.ofMillis(3000)); + + String withdrawRes = withdrawResMono.block(); + + org.codehaus.jettison.json.JSONObject withdrawJson = new org.codehaus.jettison.json.JSONObject(withdrawRes); + log.debug(LOG_PREFIX+"withdrawJson: " + withdrawJson.toString()); + } catch(Exception e) { + log.error(LOG_PREFIX+"Exception::" + e.getMessage()); + } + } + + @Async + public void withdrawBalanceAsync2(String LOG_PREFIX, TripleAuthInfo tripleMember) { + LOG_PREFIX = LOG_PREFIX+"::withdrawBalanceAsync::::"; + try { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", tripleMember.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + UriComponentsBuilder withdrawBuilder = UriComponentsBuilder.fromHttpUrl(tripleMember.getApiUrl() + "/withdraw"); + HashMap withdrawParams = new HashMap(); + withdrawParams.put("username", tripleMember.getUsername()); + withdrawParams.put("vendor", ""); + withdrawParams.put("requestKey", String.valueOf(System.currentTimeMillis())); + + Mono withdrawResMono = webClient.post() + .uri(withdrawBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(withdrawParams) + .retrieve() + .bodyToMono(String.class); + + String withdrawRes = withdrawResMono.block(); // Blocking to get the response synchronously + + org.codehaus.jettison.json.JSONObject withdrawJson = new org.codehaus.jettison.json.JSONObject(withdrawRes); + log.debug(LOG_PREFIX+"withdrawJson: " + withdrawJson.toString()); + } catch(Exception e) { + log.error(LOG_PREFIX+"Exception::" + e.getMessage()); + } + } + + @Async + public void depositBalanceAsync(TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::depositBalanceAsync::::"; + try { + HashMap tripleParam = new HashMap<>(); + tripleParam.put("siteId", tripleVO.getSiteId()); + tripleParam.put("apiVendorCode", "triple"); + ApiVendorCompInfo apiVendor = userDao.getApiVendorCompInfo(tripleParam); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", apiVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + UriComponentsBuilder depositBuilder = UriComponentsBuilder.fromHttpUrl(apiVendor.getApiUrl() + "/deposit"); + HashMap depositParams = new HashMap(); + depositParams.put("username", tripleVO.getUserId()); + depositParams.put("vendor", ""); + int amount = Math.abs(tripleVO.getCredit()); + depositParams.put("amount", Integer.toString(amount)); + depositParams.put("requestKey", String.valueOf(System.currentTimeMillis())); + Mono depositResMono = webClient.post() + .uri(depositBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(depositParams) + .retrieve() + .bodyToMono(String.class); + + String depositRes = depositResMono.block(); // Blocking to get the response synchronously + org.codehaus.jettison.json.JSONObject depositJson = new org.codehaus.jettison.json.JSONObject(depositRes); + log.debug(LOG_PREFIX+"depositJson: " + depositJson.toString()); + } catch(Exception e) { + log.error(LOG_PREFIX+"Exception::" + e.getMessage()); + } + } + + @Async + public void insertSlotTranInfo(final String LOG_PREFIX, TripleVO tripleVO) { + long startTime = System.currentTimeMillis(); + + int amount = 0; + if(tripleVO.getTranType().equals("debit")) { + amount = Math.abs(tripleVO.getDebit()); + } else { + amount = Math.abs(tripleVO.getCredit()); + } + + HashMap param = new HashMap(); + param.put("betId", tripleVO.getBetId()); + param.put("tranId", tripleVO.getTranId()); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("apiType", "triple"); + String tranType = ""; + if(tripleVO.getTranType().equals("debit") && tripleVO.getIsCancel() == 0) { + tranType = "BET"; + } else if(tripleVO.getTranType().equals("credit") && tripleVO.getIsCancel() == 0 && tripleVO.getIsBonus() == 0) { + // Credit OK + if(amount > 0) { + tranType = "WIN"; + } else { + tranType = "LOSE"; + } + } else if(tripleVO.getTranType().equals("credit") && tripleVO.getIsCancel() == 1 && tripleVO.getIsBonus() == 0) { + tranType = "CANCEL"; + } else { + tranType = "BONUS"; + } + param.put("tranType", tranType); + param.put("bfBalance", tripleVO.getBeforeCash().intValue()); + param.put("amount", amount); + param.put("afBalance", tripleVO.getAfterCash().intValue()); + param.put("vendor", tripleVO.getVendor()); + param.put("vendorIdx", tripleVO.getVendorIdx()); + param.put("vendorKey", tripleVO.getVendorKey()); + param.put("gameName", tripleVO.getGameKey()); + param.put("betDateTime", tripleVO.getRequestAt()); + + try { + int betResult = betDao.insertSlotTranInfo(param); + log.info(LOG_PREFIX+ "::insertSlotTranInfo::" + betResult); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "insertSlotTranInfo::Duplicate tranId: " + tripleVO.getTranId()); + } catch (Exception e) { + log.error(LOG_PREFIX+ "insertSlotTranInfo::Exception {}", e); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "insertSlotTranInfo::[diffTime : " + String.format("%.3f", diffTime) + "]"); + + } + +} diff --git a/src/main/java/com/bb/service/AsyncWowOtcService.java b/src/main/java/com/bb/service/AsyncWowOtcService.java new file mode 100644 index 0000000..f789f1a --- /dev/null +++ b/src/main/java/com/bb/service/AsyncWowOtcService.java @@ -0,0 +1,299 @@ +package com.bb.service; + +import java.net.SocketTimeoutException; +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.HashMap; + +import org.apache.http.conn.ConnectTimeoutException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.util.UriComponentsBuilder; + +import com.bb.dao.BetDao; +import com.bb.dao.BoardDao; +import com.bb.dao.CashDao; +import com.bb.dao.CommonDao; +import com.bb.dao.UserDao; +import com.bb.model.Message; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import reactor.core.publisher.Mono; + +@Slf4j +@RequiredArgsConstructor +@Service +public class AsyncWowOtcService { + + private final CommonDao commonDao; + + private final BoardDao boardDao; + + @Autowired + WebClient webClient; + + + private HttpHeaders getHeader(String LOG_PREFIX) { + LOG_PREFIX = LOG_PREFIX + "::getHeader::"; + HttpHeaders headers = new HttpHeaders(); + //headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + headers.set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + return headers; + } + + public String createUser(String LOG_PREFIX, HashMap wowOtcInfo) { + String responseStr = null; + LOG_PREFIX = LOG_PREFIX + "WOTC::createUser::"; + + try { + String apiBaseUrl = wowOtcInfo.get("apiBaseUrl").toString(); + String reCommand = wowOtcInfo.get("reCommand").toString(); + HttpHeaders headers = getHeader(LOG_PREFIX); + UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(apiBaseUrl); + + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("Command", "100500"); + params.add("reCommand", reCommand); + params.add("userID", wowOtcInfo.get("userID").toString()); + params.add("userPass", wowOtcInfo.get("userPass").toString()); + params.add("userName", wowOtcInfo.get("userName").toString()); + params.add("userTel", wowOtcInfo.get("userTel").toString()); + params.add("userBank", wowOtcInfo.get("userBank").toString()); + log.info(LOG_PREFIX+ "API_URL::" + apiBaseUrl); + log.info(LOG_PREFIX+ "API_BODY::" + params.toString()); + + Mono resMono = webClient.post() + .uri(uriBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(BodyInserters.fromFormData(params)) + .retrieve() + .bodyToMono(String.class); + responseStr = resMono.block(); + + if(responseStr != null && responseStr.equals("OK")) { + log.info(LOG_PREFIX+ "response : " + responseStr); + } + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "ConnectTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "SocketTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "InterruptedException::"+rae.getMessage()); + } + } catch(HttpClientErrorException hee) { + String str = hee.getResponseBodyAsString(); + log.error(LOG_PREFIX+ "HttpClientErrorException::"+str); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + e.printStackTrace(); + } + + return responseStr; + } + + public String updateUser(String LOG_PREFIX, HashMap wowOtcInfo) { + String responseStr = null; + LOG_PREFIX = LOG_PREFIX + "WOTC::updateUser::"; + + try { + String apiBaseUrl = wowOtcInfo.get("apiBaseUrl").toString(); + String reCommand = wowOtcInfo.get("reCommand").toString(); + HttpHeaders headers = getHeader(LOG_PREFIX); + UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(apiBaseUrl); + + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("Command", "100600"); + params.add("reCommand", reCommand); + params.add("userID", wowOtcInfo.get("userID").toString()); + params.add("userPass", wowOtcInfo.get("userPass").toString()); + params.add("userName", wowOtcInfo.get("userName").toString()); + params.add("userTel", wowOtcInfo.get("userTel").toString()); + params.add("userBank", wowOtcInfo.get("userBank").toString()); + log.info(LOG_PREFIX+ "API_URL::" + apiBaseUrl); + log.info(LOG_PREFIX+ "API_BODY::" + params.toString()); + + Mono resMono = webClient.post() + .uri(uriBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(BodyInserters.fromFormData(params)) + .retrieve() + .bodyToMono(String.class); + responseStr = resMono.block(); + + if(responseStr != null && responseStr.equals("OK")) { + log.info(LOG_PREFIX+ "response : " + responseStr); + } + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "ConnectTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "SocketTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "InterruptedException::"+rae.getMessage()); + } + } catch(HttpClientErrorException hee) { + String str = hee.getResponseBodyAsString(); + log.error(LOG_PREFIX+ "HttpClientErrorException::"+str); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + e.printStackTrace(); + } + + return responseStr; + } + + @Async + public void requestPurchase(String LOG_PREFIX, HashMap wowOtcInfo) { + String responseStr = null; + LOG_PREFIX = LOG_PREFIX + "WOTC::requestPurchase::"; + + try { + String apiBaseUrl = wowOtcInfo.get("apiBaseUrl").toString(); + String reCommand = wowOtcInfo.get("reCommand").toString(); + HttpHeaders headers = getHeader(LOG_PREFIX); + UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(apiBaseUrl); + + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("Command", "100300"); + params.add("reCommand", reCommand); + params.add("userID", wowOtcInfo.get("userID").toString()); + params.add("coinChoice", wowOtcInfo.get("coinChoice").toString()); + params.add("Money", wowOtcInfo.get("Money").toString()); + log.info(LOG_PREFIX+ "API_URL::" + apiBaseUrl); + log.info(LOG_PREFIX+ "API_BODY::" + params.toString()); + + Mono resMono = webClient.post() + .uri(uriBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(BodyInserters.fromFormData(params)) + .retrieve() + .bodyToMono(String.class); + responseStr = resMono.block(); + + if(responseStr != null) { + log.info(LOG_PREFIX+ "response : " + responseStr); + /* + if(responseStr.equals("ErrorNo=106")) { + // 승인되지 않은 충전 이력 발견 - 자동 취소 시도 + cancelPurchase(LOG_PREFIX, wowOtcInfo); + log.error(LOG_PREFIX+ "승인되지 않은 충전 이력 발견 - 자동 취소 시도"); + } + */ + + if(responseStr.startsWith("OK")) { + Message message = new Message(); + message.setSiteId(wowOtcInfo.get("siteId").toString()); + message.setRegId(wowOtcInfo.get("siteId").toString()); + message.setMsgType("msg"); + message.setRecieveId(wowOtcInfo.get("memId").toString()); + message.setMsgTitle("[입금 계좌 정보]"); + String arr[] = responseStr.split("="); + message.setMsgDesc(arr[1]); + message.setHiddenYn("N"); + message.setTargetType("member"); + log.info(LOG_PREFIX+ "msgSend : " + message.toString()); + boardDao.msgSend(message); + } + } + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "ConnectTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "SocketTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "InterruptedException::"+rae.getMessage()); + } + } catch(HttpClientErrorException hee) { + String str = hee.getResponseBodyAsString(); + log.error(LOG_PREFIX+ "HttpClientErrorException::"+str); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + e.printStackTrace(); + } + } + + @Async + public void cancelPurchase(String LOG_PREFIX, HashMap wowOtcInfo) { + String responseStr = null; + LOG_PREFIX = LOG_PREFIX + "WOTC::cancelPurchase::"; + + try { + String apiBaseUrl = wowOtcInfo.get("apiBaseUrl").toString(); + String reCommand = wowOtcInfo.get("reCommand").toString(); + HttpHeaders headers = getHeader(LOG_PREFIX); + UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(apiBaseUrl); + + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("Command", "100400"); + params.add("reCommand", reCommand); + params.add("userID", wowOtcInfo.get("userID").toString()); + params.add("coinChoice", wowOtcInfo.get("coinChoice").toString()); + params.add("Money", wowOtcInfo.get("Money").toString()); + log.info(LOG_PREFIX+ "API_URL::" + apiBaseUrl); + log.info(LOG_PREFIX+ "API_BODY::" + params.toString()); + + Mono resMono = webClient.post() + .uri(uriBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(BodyInserters.fromFormData(params)) + .retrieve() + .bodyToMono(String.class); + responseStr = resMono.block(); + + if(responseStr != null) { + log.info(LOG_PREFIX+ "response : " + responseStr); + } + + } catch (ResourceAccessException rae) { + if(rae.getCause() instanceof ConnectTimeoutException) { + log.error(LOG_PREFIX+ "ConnectTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof SocketTimeoutException) { + log.error(LOG_PREFIX+ "SocketTimeoutException::"+rae.getMessage()); + } + + if(rae.getCause() instanceof InterruptedException) { + log.error(LOG_PREFIX+ "InterruptedException::"+rae.getMessage()); + } + } catch(HttpClientErrorException hee) { + String str = hee.getResponseBodyAsString(); + log.error(LOG_PREFIX+ "HttpClientErrorException::"+str); + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception::"+e.getMessage()); + e.printStackTrace(); + } + + } +} diff --git a/src/main/java/com/bb/service/BetService.java b/src/main/java/com/bb/service/BetService.java new file mode 100644 index 0000000..9b406eb --- /dev/null +++ b/src/main/java/com/bb/service/BetService.java @@ -0,0 +1,78 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import com.bb.model.AdminBetSearch; +import com.bb.model.BetData; +import com.bb.model.BetDetail; +import com.bb.model.BetSearch; +import com.bb.model.BetSplusSearch; +import com.bb.model.Member; +import com.bb.model.RetailBetSearch; +import com.bb.model.RvHoldemVO; +import com.bb.model.TripleVO; +import com.bb.model.TrxSearchVO; + +public interface BetService { + + int getBetListCnt(BetSearch search); + List getBetList(BetSearch search); + int getFastBetIdListCnt(AdminBetSearch search); + List> getFastBetIdList(AdminBetSearch search); + HashMap getFastBetItem(HashMap item); + int getBetListNewCnt(AdminBetSearch search); + List getBetListNew(AdminBetSearch search); + int getPowerballResultListCnt(BetSearch search); + List getPowerballResultList(BetSearch search); + HashMap getGameRataMiniGame(@Valid BetData betData); + List getWaitBetlist(Map pParam); + void powerballEndProc(HashMap betInfo); + int getTripleTxnCheck(String tranId); + int getTripleDebitCheckByBetId(String betid); + int getTripleDebitCheckByTranId(String tranid); + int getTripleCreditCheckByBetId(String betid); + int getTripleCreditCheckByTranId(String tranid); + int getTripleIsCancelCheck(String betId); + int getTripleIsBonusCheck(String betid); + int insertTripleTxnData(TripleVO tripleVO); + int getUserBetListCnt(BetSearch search); + List getUserBetList(BetSearch search); + int getUserBetListNewCnt(BetSearch search); + List getUserBetListNew(BetSearch search); + int updateUserCashByAmount(HashMap memCashUpdParam); + int updateUserCashByBalance(HashMap memCashUpdParam); + int getBottomBetListCnt(RetailBetSearch search); + List getBottomBetList(RetailBetSearch search); + List getTripleBetWaitListByCasino(); + List getTripleBetWaitListBySlot(); + void updateEnd(HashMap mapParam); + void updateEndAutoLose(HashMap mapParam); + int betCancelTriple(HashMap param); + List getTripleBetWaitList2(); + List getBetPointList(); + List getBetPointListBySite(String siteId); + int getTrxListCnt(TrxSearchVO searchVO); + List> getTrxList(TrxSearchVO searchVO); + int getSportBetListCnt(BetSplusSearch search); + List getSportBetList(BetSplusSearch search); + int getSportEventListCnt(BetSplusSearch search); + List getSportEventList(BetSplusSearch search); + int getSportEventDetailListCnt(BetSplusSearch search); + List getSportEventDetailList(BetSplusSearch search); + int getSportBottomBetListCnt(BetSplusSearch search); + List getSportBottomBetList(BetSplusSearch search); + String getBetType(String betId); + HashMap getBetTodayTotalInfo(HashMap betItem); + int getCurBalance(Member memInfo); + HashMap getSiteVendorInfo(HashMap vParam); + int insertBetNew(HashMap betData); + HashMap getReferenceData1(String betId); + HashMap getReferenceData2(String betId); + int bonusBetNew(HashMap betData); + int updateUserCashByAmountNew(HashMap balanceParam); + int insertRvhCallbackLog(RvHoldemVO rvParam); +} diff --git a/src/main/java/com/bb/service/BetServiceImpl.java b/src/main/java/com/bb/service/BetServiceImpl.java new file mode 100644 index 0000000..eaf1b24 --- /dev/null +++ b/src/main/java/com/bb/service/BetServiceImpl.java @@ -0,0 +1,392 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.bb.dao.BetDao; +import com.bb.dao.BoardDao; +import com.bb.dao.CashDao; +import com.bb.dao.CommonDao; +import com.bb.model.AdminBetSearch; +import com.bb.model.BetData; +import com.bb.model.BetDetail; +import com.bb.model.BetSearch; +import com.bb.model.BetSplusSearch; +import com.bb.model.CashDetail; +import com.bb.model.Member; +import com.bb.model.RetailBetSearch; +import com.bb.model.RvHoldemVO; +import com.bb.model.TripleVO; +import com.bb.model.TrxSearchVO; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class BetServiceImpl implements BetService { + + + private final BetDao betDao; + + private final CashDao cashDao; + + private final CommonDao commonDao; + + + @Override + public int getBetListCnt(BetSearch search) { + // TODO Auto-generated method stub + return betDao.getBetListCnt(search); + } + + @Override + public List getBetList(BetSearch search) { + // TODO Auto-generated method stub + return betDao.getBetList(search); + } + + @Override + public int getFastBetIdListCnt(AdminBetSearch search) { + // TODO Auto-generated method stub + return betDao.getFastBetIdListCnt(search); + } + + @Override + public List> getFastBetIdList(AdminBetSearch search) { + // TODO Auto-generated method stub + return betDao.getFastBetIdList(search); + } + + @Override + public HashMap getFastBetItem(HashMap item) { + // TODO Auto-generated method stub + return betDao.getFastBetItem(item); + } + + @Override + public int getBetListNewCnt(AdminBetSearch search) { + // TODO Auto-generated method stub + return betDao.getBetListNewCnt(search); + } + + @Override + public List getBetListNew(AdminBetSearch search) { + // TODO Auto-generated method stub + return betDao.getBetListNew(search); + } + + @Override + public int getPowerballResultListCnt(BetSearch search) { + // TODO Auto-generated method stub + return betDao.getPowerballResultListCnt(search); + } + + @Override + public List getPowerballResultList(BetSearch search) { + // TODO Auto-generated method stub + return betDao.getPowerballResultList(search); + } + + @Override + public HashMap getGameRataMiniGame(@Valid BetData betData) { + // TODO Auto-generated method stub + return betDao.getGameRataMiniGame(betData); + } + + @Override + public List getWaitBetlist(Map pParam) { + // TODO Auto-generated method stub + return betDao.getWaitBetlist(pParam); + } + + @Override + public void powerballEndProc(HashMap betInfo) { + // TODO Auto-generated method stub + + betDao.updateBetInfoMapByPowerball(betInfo); + betDao.updateBetInfoMapResultByPowerball(betInfo); + betDao.insertCashByPowerball(betInfo); + betDao.updateBetInfoByPowerball(betInfo); + betDao.insertPointByPowerball(betInfo); + betDao.updatePointRegYnByPowerball(betInfo); + + } + + @Override + public int getTripleTxnCheck(String tranId) { + // TODO Auto-generated method stub + return betDao.getTripleTxnCheck(tranId); + } + + @Override + public int getTripleDebitCheckByBetId(String betid) { + // TODO Auto-generated method stub + return betDao.getTripleDebitCheckByBetId(betid); + } + + @Override + public int getTripleDebitCheckByTranId(String tranid) { + // TODO Auto-generated method stub + return betDao.getTripleDebitCheckByTranId(tranid); + } + + @Override + public int getTripleCreditCheckByBetId(String betid) { + // TODO Auto-generated method stub + return betDao.getTripleCreditCheckByBetId(betid); + } + + @Override + public int getTripleCreditCheckByTranId(String tranid) { + // TODO Auto-generated method stub + return betDao.getTripleCreditCheckByTranId(tranid); + } + + @Override + public int getTripleIsCancelCheck(String betId) { + // TODO Auto-generated method stub + return betDao.getTripleIsCancelCheck(betId); + } + + @Override + public int getTripleIsBonusCheck(String betid) { + // TODO Auto-generated method stub + return betDao.getTripleIsBonusCheck(betid); + } + + @Override + public int insertTripleTxnData(TripleVO tripleVO) { + // TODO Auto-generated method stub + if(tripleVO.getDetail() != null) { + tripleVO.setDetailStr(tripleVO.getDetail().toString()); + } else { + tripleVO.setDetailStr("{}"); + } + + return betDao.insertTripleTxnData(tripleVO); + } + + @Override + public int getUserBetListCnt(BetSearch search) { + // TODO Auto-generated method stub + return betDao.getUserBetListCnt(search); + } + + @Override + public List getUserBetList(BetSearch search) { + // TODO Auto-generated method stub + return betDao.getUserBetList(search); + } + + @Override + public int getUserBetListNewCnt(BetSearch search) { + // TODO Auto-generated method stub + return betDao.getUserBetListNewCnt(search); + } + + @Override + public List getUserBetListNew(BetSearch search) { + // TODO Auto-generated method stub + return betDao.getUserBetListNew(search); + } + + @Override + public int updateUserCashByAmount(HashMap memCashUpdParam) { + // TODO Auto-generated method stub + return betDao.updateUserCashByAmount(memCashUpdParam); + } + + @Override + public int updateUserCashByBalance(HashMap memCashUpdParam) { + // TODO Auto-generated method stub + return betDao.updateUserCashByBalance(memCashUpdParam); + } + + @Override + public int getBottomBetListCnt(RetailBetSearch search) { + // TODO Auto-generated method stub + return betDao.getBottomBetListCnt(search); + } + + @Override + public List getBottomBetList(RetailBetSearch search) { + // TODO Auto-generated method stub + return betDao.getBottomBetList(search); + } + + @Override + public List getTripleBetWaitListByCasino() { + // TODO Auto-generated method stub + return betDao.getTripleBetWaitListByCasino(); + } + + @Override + public List getTripleBetWaitListBySlot() { + // TODO Auto-generated method stub + return betDao.getTripleBetWaitListBySlot(); + } + + @Override + public void updateEnd(HashMap mapParam) { + // TODO Auto-generated method stub + betDao.updateEnd(mapParam); + } + + @Override + public void updateEndAutoLose(HashMap mapParam) { + // TODO Auto-generated method stub + betDao.updateEndAutoLose(mapParam); + } + + @Override + public int betCancelTriple(HashMap param) { + // TODO Auto-generated method stub + return betDao.betCancelTriple(param); + } + + @Override + public List getTripleBetWaitList2() { + // TODO Auto-generated method stub + return betDao.getTripleBetWaitList2(); + } + + @Override + public List getBetPointList() { + // TODO Auto-generated method stub + return betDao.getBetPointList(); + } + + @Override + public List getBetPointListBySite(String siteId) { + // TODO Auto-generated method stub + return betDao.getBetPointListBySite(siteId); + } + + @Override + public int getTrxListCnt(TrxSearchVO searchVO) { + // TODO Auto-generated method stub + return betDao.getTrxListCnt(searchVO); + } + + @Override + public List> getTrxList(TrxSearchVO searchVO) { + // TODO Auto-generated method stub + return betDao.getTrxList(searchVO); + } + + @Override + public int getSportBetListCnt(BetSplusSearch search) { + // TODO Auto-generated method stub + return betDao.getSportBetListCnt(search); + } + + @Override + public List getSportBetList(BetSplusSearch search) { + // TODO Auto-generated method stub + return betDao.getSportBetList(search); + } + + @Override + public int getSportEventListCnt(BetSplusSearch search) { + // TODO Auto-generated method stub + return betDao.getSportEventListCnt(search); + } + + @Override + public List getSportEventList(BetSplusSearch search) { + // TODO Auto-generated method stub + return betDao.getSportEventList(search); + } + + @Override + public int getSportEventDetailListCnt(BetSplusSearch search) { + // TODO Auto-generated method stub + return betDao.getSportEventDetailListCnt(search); + } + + @Override + public List getSportEventDetailList(BetSplusSearch search) { + // TODO Auto-generated method stub + return betDao.getSportEventDetailList(search); + } + + @Override + public int getSportBottomBetListCnt(BetSplusSearch search) { + // TODO Auto-generated method stub + return betDao.getSportBottomBetListCnt(search); + } + + @Override + public List getSportBottomBetList(BetSplusSearch search) { + // TODO Auto-generated method stub + return betDao.getSportBottomBetList(search); + } + + @Override + public String getBetType(String betId) { + // TODO Auto-generated method stub + return betDao.getBetType(betId); + } + + @Override + public HashMap getBetTodayTotalInfo(HashMap betItem) { + // TODO Auto-generated method stub + return betDao.getBetTodayTotalInfo(betItem); + } + + @Override + public int getCurBalance(Member memInfo) { + // TODO Auto-generated method stub + return betDao.getCurBalance(memInfo); + } + + @Override + public HashMap getSiteVendorInfo(HashMap vParam) { + // TODO Auto-generated method stub + return betDao.getSiteVendorInfo(vParam); + } + + @Override + public int insertBetNew(HashMap betData) { + // TODO Auto-generated method stub + return betDao.insertBetNew(betData); + } + + @Override + public HashMap getReferenceData1(String betId) { + // TODO Auto-generated method stub + return betDao.getReferenceData1(betId); + } + + @Override + public HashMap getReferenceData2(String betId) { + // TODO Auto-generated method stub + return betDao.getReferenceData2(betId); + } + + @Override + public int bonusBetNew(HashMap betData) { + // TODO Auto-generated method stub + return betDao.bonusBetNew(betData); + } + + @Override + public int updateUserCashByAmountNew(HashMap balanceParam) { + // TODO Auto-generated method stub + return betDao.updateUserCashByAmountNew(balanceParam); + } + + @Override + public int insertRvhCallbackLog(RvHoldemVO rvParam) { + // TODO Auto-generated method stub + return betDao.insertRvhCallbackLog(rvParam); + } +} diff --git a/src/main/java/com/bb/service/BoardService.java b/src/main/java/com/bb/service/BoardService.java new file mode 100644 index 0000000..fe57575 --- /dev/null +++ b/src/main/java/com/bb/service/BoardService.java @@ -0,0 +1,83 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.AnswerVo; +import com.bb.model.Board; +import com.bb.model.BoardListSearch; +import com.bb.model.Comment; +import com.bb.model.Message; +import com.bb.model.MessageListSearch; + +public interface BoardService { + + int getBoardListCnt(@Valid BoardListSearch search); + + List getBoardList(@Valid BoardListSearch search); + + List getBoardIdxList(@Valid BoardListSearch search); + + int saveBoard(@Valid Board board); + + int saveCmt(@Valid Comment comment); + + Board getBoard(@Valid Board board); + + Comment getComment(@Valid Comment comment); + + void viewAdd(Board boardetail); + + void adminRead(Board boardetail); + + void msgSend(@Valid Message message); + + void msgRead(@Valid Message message); + + void msgUpdate(@Valid Message message); + + int getMsgListCnt(@Valid MessageListSearch search); + + List getMsgList(@Valid MessageListSearch search); + + void allRead(@Valid Message message); + + void msgDel(@Valid Message message); + + List getAnswerList(AnswerVo search); + + int saveAnswer(AnswerVo answer); + + int updateAnswer(AnswerVo answer); + + int deleteAnswer(AnswerVo answer); + + List> getMainBoardList(BoardListSearch search); + + List> getMainBoardList2(BoardListSearch search); + + void msgDelList(@Valid Message message); + + int getUserMsgListCnt(@Valid MessageListSearch search); + + List getUserMsgList(@Valid MessageListSearch search); + + void userAnswerCmtRead(Board boardetail); + + void partnerMsgSend(@Valid Message message); + + Message getJoinMessage(String siteId); + + Board getSiteFlowBoard(BoardListSearch search); + + int deleteBoard(int boardIdx); + + void levelMsgSend(@Valid Message message); + + int setBoardViewYn(Board board); + + int deleteYBoard(int boardIdx); + +} diff --git a/src/main/java/com/bb/service/BoardServiceImpl.java b/src/main/java/com/bb/service/BoardServiceImpl.java new file mode 100644 index 0000000..0048e45 --- /dev/null +++ b/src/main/java/com/bb/service/BoardServiceImpl.java @@ -0,0 +1,294 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import com.bb.dao.BoardDao; +import com.bb.dao.UserDao; +import com.bb.model.AnswerVo; +import com.bb.model.Board; +import com.bb.model.BoardListSearch; +import com.bb.model.Comment; +import com.bb.model.Member; +import com.bb.model.Message; +import com.bb.model.MessageListSearch; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Service +public class BoardServiceImpl implements BoardService { + + private final BoardDao boardDao; + + private final UserDao userDao; + + @Override + public int getBoardListCnt(@Valid BoardListSearch search) { + // TODO Auto-generated method stub + return boardDao.getBoardListCnt(search); + } + + @Override + public List getBoardList(@Valid BoardListSearch search) { + // TODO Auto-generated method stub + + List boardList = boardDao.getBoardList(search); + for(Board board:boardList) { + Map param = new HashMap(); + param.put("cmtType", "B"); + param.put("boardIdx", board.getBoardIdx()); + param.put("siteId", board.getSiteId()); + + if("faq".equals(board.getBoardType()) || "bbs".equals(board.getBoardType())) { + List boardComments = boardDao.getCmtList(param); + board.setComment(boardDao.getCmtList(param)); + + if("faq".equals(board.getBoardType()) && boardComments.size() > 0) { + board.setStatus("ANSWER"); + } + + if("bbs".equals(board.getBoardType()) && boardComments.size() > 0) { + for( HashMap cmts:board.getComment()) { + Map cparam = new HashMap(); + cparam.put("cmtType", "C"); + cparam.put("boardIdx", (long)cmts.get("cmtIdx")); + cmts.put("comment" , boardDao.getCmtList(cparam)); + } + } + } + + Member search2 = new Member(); + search2.setMemId(board.getRegId().toString()); + search2.setSiteId(search.getSiteId()); + board.setTopUserList(userDao.getTopUserList2(search2)); + + } + + return boardList; + } + + @Override + public List getBoardIdxList(@Valid BoardListSearch search) { + // TODO Auto-generated method stub + return boardDao.getBoardIdxList(search); + } + + @Override + public int saveBoard(@Valid Board board) { + // TODO Auto-generated method stub + return boardDao.saveBoard(board); + } + + @Override + public int saveCmt(@Valid Comment comment) { + // TODO Auto-generated method stub + int cmtResult = boardDao.saveCmt(comment); + if(cmtResult > 0 && "B".equals(comment.getCmtType())) { + int boardIdx = comment.getBoardIdx(); + boardDao.updateFaqStatus(boardIdx); + } + + return cmtResult; + } + + @Override + public Board getBoard(@Valid Board board) { + // TODO Auto-generated method stub + + Board boardDetail = boardDao.getBoard(board); + + if("faq".equals(boardDetail.getBoardType()) || "bbs".equals(boardDetail.getBoardType())) { + Map param = new HashMap(); + param.put("cmtType", "B"); + param.put("boardIdx", boardDetail.getBoardIdx()); + param.put("siteId", boardDetail.getSiteId()); + + List boardComments = boardDao.getCmtList(param); + boardDetail.setComment(boardDao.getCmtList(param)); + + if("faq".equals(boardDetail.getBoardType()) && boardComments.size() > 0 ) { + boardDetail.setStatus("ANSWER"); + } + + if("bbs".equals(boardDetail.getBoardType()) && boardComments.size() > 0 ) { + for( HashMap cmts:boardDetail.getComment()) { + Map cparam = new HashMap(); + cparam.put("cmtType", "C"); + cparam.put("boardIdx", (long)cmts.get("cmtIdx")); + cparam.put("siteId", boardDetail.getSiteId()); + cmts.put("comment" , boardDao.getCmtList(cparam)); + } + } + } + + return boardDetail; + } + + @Override + public Comment getComment(@Valid Comment comment) { + // TODO Auto-generated method stub + return boardDao.getComment(comment); + } + + @Override + public void viewAdd(Board boardetail) { + boardDao.viewAdd(boardetail); + + } + + @Override + public void adminRead(Board boardetail) { + // TODO Auto-generated method stub + boardDao.adminRead(boardetail); + } + + @Override + public void msgSend(@Valid Message message) { + // TODO Auto-generated method stub + boardDao.msgSend(message); + } + + @Override + public void msgRead(@Valid Message message) { + // TODO Auto-generated method stub + boardDao.msgRead(message); + } + + @Override + public void msgUpdate(@Valid Message message) { + // TODO Auto-generated method stub + boardDao.msgUpdate(message); + } + + @Override + public int getMsgListCnt(@Valid MessageListSearch search) { + // TODO Auto-generated method stub + return boardDao.getMsgListCnt(search); + } + + @Override + public List getMsgList(@Valid MessageListSearch search) { + // TODO Auto-generated method stub + return boardDao.getMsgList(search); + } + + @Override + public void allRead(@Valid Message message) { + // TODO Auto-generated method stub + boardDao.allRead(message); + } + + @Override + public void msgDel(@Valid Message message) { + // TODO Auto-generated method stub + boardDao.msgDel(message); + } + + @Override + public List getAnswerList(AnswerVo search) { + // TODO Auto-generated method stub + return boardDao.getAnswerList(search); + } + + @Override + public int saveAnswer(AnswerVo answer) { + // TODO Auto-generated method stub + return boardDao.saveAnswer(answer); + } + + @Override + public int updateAnswer(AnswerVo answer) { + // TODO Auto-generated method stub + return boardDao.updateAnswer(answer); + } + + @Override + public int deleteAnswer(AnswerVo answer) { + // TODO Auto-generated method stub + return boardDao.deleteAnswer(answer); + } + + @Override + public List> getMainBoardList(BoardListSearch search) { + // TODO Auto-generated method stub + return boardDao.getMainBoardList(search); + } + + @Override + public List> getMainBoardList2(BoardListSearch search) { + // TODO Auto-generated method stub + return boardDao.getMainBoardList2(search); + } + + @Override + public void msgDelList(@Valid Message message) { + // TODO Auto-generated method stub + boardDao.msgDelList(message); + } + + @Override + public int getUserMsgListCnt(@Valid MessageListSearch search) { + // TODO Auto-generated method stub + return boardDao.getUserMsgListCnt(search); + } + + @Override + public List getUserMsgList(@Valid MessageListSearch search) { + // TODO Auto-generated method stub + return boardDao.getUserMsgList(search); + } + + @Override + public void userAnswerCmtRead(Board boardetail) { + // TODO Auto-generated method stub + boardDao.userAnswerCmtRead(boardetail); + } + + @Override + public void partnerMsgSend(@Valid Message message) { + // TODO Auto-generated method stub + boardDao.partnerMsgSend(message); + } + + @Override + public Message getJoinMessage(String siteId) { + // TODO Auto-generated method stub + return boardDao.getJoinMessage(siteId); + } + + @Override + public Board getSiteFlowBoard(BoardListSearch search) { + // TODO Auto-generated method stub + return boardDao.getSiteFlowBoard(search); + } + + @Override + public int deleteBoard(int boardIdx) { + // TODO Auto-generated method stub + return boardDao.deleteBoard(boardIdx); + } + + @Override + public void levelMsgSend(@Valid Message message) { + // TODO Auto-generated method stub + boardDao.levelMsgSend(message); + } + + @Override + public int setBoardViewYn(Board board) { + // TODO Auto-generated method stub + return boardDao.setBoardViewYn(board); + } + + @Override + public int deleteYBoard(int boardIdx) { + // TODO Auto-generated method stub + return boardDao.deleteYBoard(boardIdx); + } +} + diff --git a/src/main/java/com/bb/service/CashService.java b/src/main/java/com/bb/service/CashService.java new file mode 100644 index 0000000..2cb7dc0 --- /dev/null +++ b/src/main/java/com/bb/service/CashService.java @@ -0,0 +1,146 @@ +package com.bb.service; + + +import java.util.HashMap; +import java.util.List; + +import com.bb.model.AdminCashSearch; +import com.bb.model.CashDetail; +import com.bb.model.CashQueVO; +import com.bb.model.CashSearch; +import com.bb.model.CashStatus; +import com.bb.model.CashTranLogSrch; +import com.bb.model.CouponSearch; +import com.bb.model.CouponVO; +import com.bb.model.Member; +import com.bb.model.Point; +import com.bb.model.PointSearch; +import com.bb.model.RetailCashSearch; + +public interface CashService { + + long insertCash(CashDetail cash); + + void insertCashManToMan(CashDetail cash); + + int getCashListCnt(CashSearch search); + + List getCashList(CashSearch search); + + HashMap getCashListSum(CashSearch search); + + int updateStatus(String LOG_PREFIX, CashStatus status); + + int getCashIOListCnt(CashSearch search); + + List getCashIOList(CashSearch search); + + HashMap getCashTotalListCnt(CashSearch search); + + List getCashTotalList(CashSearch search); + + int getPointListCnt(PointSearch search); + + List getPointList(PointSearch search); + + HashMap getPointSumInfo(PointSearch search); + + int getPointListNewCnt(PointSearch search); + + List getPointListNew(PointSearch search); + + List getPointSum(PointSearch search); + + HashMap getAccBankInfo(Member search); + + long pointInsert(Point point); + + void delCash(CashSearch search); + + void updateUserGameMoney(HashMap cashParam); + + String getCreditCheck(String siteId); + + int getCashSendListCnt(CashSearch search); + + List> getCashSendList(CashSearch search); + + int getAdminCashPointIOListCnt(AdminCashSearch search); + + List getAdminCashPointIOList(AdminCashSearch search); + + HashMap getAdminCashPointIOListSum(AdminCashSearch search); + + int cashTransLogCnt(CashTranLogSrch search); + + List cashTransLogList(CashTranLogSrch search); + + int cashTransLogCnt2(CashTranLogSrch search); + + List cashTransLogList2(CashTranLogSrch search); + + HashMap getCashInfo(CashStatus status); + + List> getMainCashList(CashSearch param); + + long getMemCash(CashDetail cash); + + int getCashInCnt(Member search); + + int getCashOutCnt(Member search); + + long insertCashTopUser(CashDetail paramCash); + + long insertCashBotUser(CashDetail paramCashBot); + + int getUserBalance(Member search); + + int insertBetPoint(String LOG_PREFIX, HashMap mapParam); + + int getBottomCashListCnt(RetailCashSearch search); + + List getBottomCashList(RetailCashSearch search); + + int getBottomCashListCnt2(RetailCashSearch search); + + List getBottomCashList2(RetailCashSearch search); + + HashMap getCashListCalculate(CashSearch search); + + Integer getFirstDailyCnt(HashMap pointParam); + + int getCashWaitTimeCheck(CashDetail paramCash); + + List getCashQueList(); + + long getBalance(CashQueVO item); + + int updateQueStatus(HashMap param); + + long cashInsertByCoupon(CashDetail cash); + + int couponCreate(CouponVO couponVO); + + int updateCouponItem(CouponVO couponVO); + + int checkCouponNumber(String couponNumber); + + CouponVO getCouponItem(String couponNumber); + + int getCouponListCnt(CouponSearch search); + + List> getCouponList(CouponSearch search); + + int getMyCouponListCnt(CouponSearch search); + + List> getMyCouponList(CouponSearch search); + + List> getUserRollingCalculate(CashSearch search); + + int insertCashBonus(HashMap data); + + HashMap getCashBonusInfo(long cashIdx); + + int updateCashBonus(HashMap data); + +} diff --git a/src/main/java/com/bb/service/CashServiceImpl.java b/src/main/java/com/bb/service/CashServiceImpl.java new file mode 100644 index 0000000..8d4d85e --- /dev/null +++ b/src/main/java/com/bb/service/CashServiceImpl.java @@ -0,0 +1,656 @@ +package com.bb.service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import com.bb.dao.CashDao; +import com.bb.dao.UserDao; +import com.bb.model.AdminCashSearch; +import com.bb.model.CashDetail; +import com.bb.model.CashQueVO; +import com.bb.model.CashSearch; +import com.bb.model.CashStatus; +import com.bb.model.CashTranLogSrch; +import com.bb.model.CouponSearch; +import com.bb.model.CouponVO; +import com.bb.model.Member; +import com.bb.model.Point; +import com.bb.model.PointSearch; +import com.bb.model.RetailCashSearch; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class CashServiceImpl implements CashService { + + private final CashDao cashDao; + + private final UserDao userDao; + + @Override + public synchronized long insertCash(CashDetail cash) { + // TODO Auto-generated method stub + long cashidx = 0; + int cnt = cashDao.getCashinfoCnt(cash); + if(cnt == 0) { + cashDao.insertCash(cash); + cashidx = cash.getCashIdx(); + } else { + log.info("[##USER_CASH_INSERT##("+cash.getSiteId()+", "+cash.getMemId()+")] cnt: " + cnt); + } + return cashidx; + } + + @Override + public synchronized long insertCashTopUser(CashDetail paramCash) { + long cashAmt = cashDao.getMemCash(paramCash); + paramCash.setPreCashAmt(""+cashAmt); + + long cashidx = 0; + int cnt = cashDao.getCashinfoCnt(paramCash); + int cntRetail = cashDao.getCashinfoRetailCnt(paramCash); + if(cnt == 0 && cntRetail == 0) { + cashDao.insertCash(paramCash); + cashidx = paramCash.getCashIdx(); + if(paramCash.getCashStatus().equals("1")) { + cashDao.updateMyCash(paramCash); + } + } + + return cashidx; + } + + @Override + public synchronized long insertCashBotUser(CashDetail paramCashBot) { + long cashAmt = cashDao.getMemCash(paramCashBot); + paramCashBot.setPreCashAmt(""+cashAmt); + + long cashidx = 0; + int cnt = cashDao.getCashinfoCnt(paramCashBot); + int cntRetail = cashDao.getCashinfoRetailCnt(paramCashBot); + if(cnt == 0 && cntRetail == 0) { + cashDao.insertCash(paramCashBot); + cashidx = paramCashBot.getCashIdx(); + if(paramCashBot.getCashStatus().equals("1")) { + cashDao.updateMyCash(paramCashBot); + } + } + + return cashidx; + } + + @Override + public int getCashListCnt(CashSearch search) { + // TODO Auto-generated method stub + return cashDao.getCashListCnt(search); + } + + @Override + public List getCashList(CashSearch search) { + // TODO Auto-generated method stub + + List cashList = cashDao.getCashList(search); + + for(CashDetail cashDetail : cashList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(cashDetail.getMemId().toString()); + cashDetail.setTopUserList(userDao.getTopUserList2(search2)); + } + + return cashList; + } + + @Override + public HashMap getCashListSum(CashSearch search) { + // TODO Auto-generated method stub + return cashDao.getCashListSum(search); + } + + @Override + public synchronized int updateStatus(String LOG_PREFIX, CashStatus status) { + // TODO Auto-generated method stub + int result = 0; + HashMap bfCashinfo = cashDao.getCashInfo(status); + if(bfCashinfo.get("cashStatus").toString().equals(status.getCashStatus())) { + log.error(LOG_PREFIX+ "CashStatus 상태 이전과 이후가 동일합니다."); + result = -1; + } else { + int updResult = cashDao.updateStatus(status); + log.info(LOG_PREFIX+ "updateStatus result::" + updResult); + + HashMap afCashinfo = cashDao.getCashInfo(status); + log.info(LOG_PREFIX+ "After Cashinfo" + afCashinfo); + if("1".equals(afCashinfo.get("cashType").toString()) && "1".equals(afCashinfo.get("cashStatus").toString())) { + // 입금 + Map param = new HashMap(); + param.put("siteId", afCashinfo.get("siteId").toString()); + param.put("memId", afCashinfo.get("memId").toString()); + param.put("amt", afCashinfo.get("cashAmt").toString()); + updResult = cashDao.updateCiAmt(param); + log.info(LOG_PREFIX+ "updateCiAmt result" + updResult); + } + if("-1".equals(afCashinfo.get("cashType").toString()) && "1".equals(afCashinfo.get("cashStatus").toString())) { + // 출금 + Map param = new HashMap(); + param.put("siteId", afCashinfo.get("siteId").toString()); + param.put("memId", afCashinfo.get("memId").toString()); + param.put("amt", afCashinfo.get("cashAmt").toString().replaceAll("-", "")); + updResult = cashDao.updateCoAmt(param); + log.info(LOG_PREFIX+ "updateCoAmt result::" + updResult); + } + result = 0; + } + + return result; + } + + @Override + public int getCashIOListCnt(CashSearch search) { + return cashDao.getCashIOListCnt(search); + } + + @Override + public List getCashIOList(CashSearch search) { + return cashDao.getCashIOList(search); + } + + @Override + public HashMap getCashTotalListCnt(CashSearch search) { + // TODO Auto-generated method stub + return cashDao.getCashTotalListCnt(search); + } + + @Override + public List getCashTotalList(CashSearch search) { + // TODO Auto-generated method stub + return cashDao.getCashTotalList(search); + } + + @Override + public int getPointListCnt(PointSearch search) { + // TODO Auto-generated method stub + return cashDao.getPointListCnt(search); + } + + @Override + public List getPointList(PointSearch search) { + // TODO Auto-generated method stub + return cashDao.getPointList(search); + } + + @Override + public HashMap getPointSumInfo(PointSearch search) { + // TODO Auto-generated method stub + return cashDao.getPointSumInfo(search); + } + + @Override + public int getPointListNewCnt(PointSearch search) { + // TODO Auto-generated method stub + return cashDao.getPointListNewCnt(search); + } + + @Override + public List getPointListNew(PointSearch search) { + // TODO Auto-generated method stub + return cashDao.getPointListNew(search); + } + + @Override + public List getPointSum(PointSearch search) { + // TODO Auto-generated method stub + return cashDao.getPointSum(search); + } + + @Override + public HashMap getAccBankInfo(Member search) { + // TODO Auto-generated method stub + return cashDao.getAccBankInfo(search); + } + + @Override + public synchronized long pointInsert(Point point) { + // TODO Auto-generated method stub +// return cashDao.pointInsert(point); + + long pointidx = 0; + int cnt = 0; + if(point.getPointType().equals("-4") || point.getPointType().equals("-44") || point.getPointType().equals("-2") || point.getPointType().equals("2")) { + cnt = cashDao.getPointinfoCnt(point); + log.info("[##USER_CHG_POINT##("+point.getSiteId()+", "+point.getMemId()+")] cnt: " + cnt); + } + + if(cnt == 0) { + log.info("[##USER_CHG_POINT##("+point.getSiteId()+", "+point.getMemId()+")] pointInsert start"); + cashDao.pointInsert(point); + log.info("[##USER_CHG_POINT##("+point.getSiteId()+", "+point.getMemId()+")] pointInsert end"); + pointidx = point.getPointIdx(); + log.info("[##USER_CHG_POINT##("+point.getSiteId()+", "+point.getMemId()+")] pointidx:" + pointidx); + } + return pointidx; + } + + @Override + public void delCash(CashSearch search) { + // TODO Auto-generated method stub + cashDao.delCash(search); + } + + @Override + public void updateUserGameMoney(HashMap cashParam) { + // TODO Auto-generated method stub + cashDao.updateUserGameMoney(cashParam); + } + + @Override + public String getCreditCheck(String siteId) { + // TODO Auto-generated method stub + return cashDao.getCreditCheck(siteId); + } + + @Override + public int getCashSendListCnt(CashSearch search) { + // TODO Auto-generated method stub + return cashDao.getCashSendListCnt(search); + + } + + @Override + public List> getCashSendList(CashSearch search) { + // TODO Auto-generated method stub + + List> memList = cashDao.getCashSendList(search); + for(HashMap mvo:memList) { + Member searchTop = new Member(); + searchTop.setSiteId(search.getSiteId()); + searchTop.setMemId(mvo.get("topMemId").toString()); + mvo.put("topMemTopUserList", userDao.getTopUserList2(searchTop)); + + Member searchBot = new Member(); + searchBot.setSiteId(search.getSiteId()); + searchBot.setMemId(mvo.get("botMemId").toString()); + mvo.put("botMemTopUserList", userDao.getTopUserList2(searchBot)); + } + + return memList; + } + + @Override + public int getAdminCashPointIOListCnt(AdminCashSearch search) { + // TODO Auto-generated method stub + if("cash".equals(search.getSearchType())) { + return cashDao.getAdminCashIOListCnt(search); + } else { + return cashDao.getAdminPointIOListCnt(search); + } + + } + + @Override + public List getAdminCashPointIOList(AdminCashSearch search) { + // TODO Auto-generated method stub + List memList = null; + if("cash".equals(search.getSearchType())) { + memList = cashDao.getAdminCashIOList(search); + } else { + memList = cashDao.getAdminPointIOList(search); + } + + for(HashMap mvo : memList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(mvo.get("memId").toString()); + mvo.put("topUserList", userDao.getTopUserList2(search2)); + } + + return memList; + } + + @Override + public HashMap getAdminCashPointIOListSum(AdminCashSearch search) { + // TODO Auto-generated method stub + if("cash".equals(search.getSearchType())) { + return cashDao.getAdminCashIOListSum(search); + } else { + return cashDao.getAdminPointIOListSum(search); + } + } + + @Override + public int cashTransLogCnt(CashTranLogSrch search) { + // TODO Auto-generated method stub + return cashDao.cashTransLogCnt(search); + } + + @Override + public List cashTransLogList(CashTranLogSrch search) { + // TODO Auto-generated method stub + return cashDao.cashTransLogList(search); + } + + @Override + public int cashTransLogCnt2(CashTranLogSrch search) { + // TODO Auto-generated method stub + return cashDao.cashTransLogCnt2(search); + } + + @Override + public List cashTransLogList2(CashTranLogSrch search) { + // TODO Auto-generated method stub + return cashDao.cashTransLogList2(search); + } + + @Override + public HashMap getCashInfo(CashStatus status) { + // TODO Auto-generated method stub + return cashDao.getCashInfo(status); + } + + @Override + public List> getMainCashList(CashSearch param) { + // TODO Auto-generated method stub + return cashDao.getMainCashList(param); + } + + @Override + public long getMemCash(CashDetail cash) { + // TODO Auto-generated method stub + return cashDao.getMemCash(cash); + } + + @Override + public int getCashInCnt(Member search) { + // TODO Auto-generated method stub + return cashDao.getCashInCnt(search); + } + + @Override + public int getCashOutCnt(Member search) { + // TODO Auto-generated method stub + return cashDao.getCashOutCnt(search); + } + + @Override + public void insertCashManToMan(CashDetail cash) { + // TODO Auto-generated method stub + long cashAmt = cashDao.getMemCash(cash); + cash.setPreCashAmt(""+cashAmt); + // 하위 유저 mem_cash 값은 DB 트리거를 통해 자동 반영 + cashDao.insertCash(cash); + // 내 mem_cash 테이블 값 반영은 직접 update 해준다. +// cashDao.updateMyCash(cash); + } + + @Override + public int getUserBalance(Member search) { + // TODO Auto-generated method stub + return cashDao.getUserBalance(search); + } + + @Override + public int insertBetPoint(String LOG_PREFIX, HashMap mapParam) { + // TODO Auto-generated method stub + return cashDao.insertBetPoint(LOG_PREFIX, mapParam); + } + + + @Override + public int getBottomCashListCnt(RetailCashSearch search) { + // TODO Auto-generated method stub + return cashDao.getBottomCashListCnt(search); + } + + @Override + public List getBottomCashList(RetailCashSearch search) { + + List cashList = cashDao.getBottomCashList(search); + + for(HashMap cashDetail : cashList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(cashDetail.get("memId").toString()); + cashDetail.put("topUserList", userDao.getTopUserList2(search2)); + } + + return cashList; + } + + @Override + public int getBottomCashListCnt2(RetailCashSearch search) { + // TODO Auto-generated method stub + return cashDao.getBottomCashListCnt2(search); + } + + @Override + public List getBottomCashList2(RetailCashSearch search) { + + List cashList = cashDao.getBottomCashList2(search); + + for(HashMap cashDetail : cashList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(cashDetail.get("memId").toString()); + cashDetail.put("topUserList", userDao.getTopUserList2(search2)); + } + + return cashList; + } + + @Override + public HashMap getCashListCalculate(CashSearch search) { + // TODO Auto-generated method stub + HashMap calculate = new HashMap<>(); + String cashType = ""; + Long cashInAmt = 0L; + String lastCashInDate = ""; + String bonusPointYn = "N"; + Long betSumAmt = 0L; + long rate = 0L; + + HashMap lastCasnIn = cashDao.getLastCashIn(search); + if(lastCasnIn == null) { + calculate.put("cashType", cashType); + calculate.put("cashInAmt", cashInAmt); + calculate.put("lastCashInDate", lastCashInDate); + calculate.put("bonusPointYn", bonusPointYn); + calculate.put("betSumAmt", betSumAmt); + calculate.put("rate", rate); + } else { + cashType = lastCasnIn.get("cashType").toString(); + cashInAmt = Long.parseLong(lastCasnIn.get("cashAmt").toString()); + lastCashInDate = lastCasnIn.get("updDate").toString(); + + HashMap bonusPoint = cashDao.getLastCashInToBonusPoint(lastCasnIn); + if(bonusPoint != null) { + int bonusPointCnt = Integer.parseInt(bonusPoint.get("bonusPointCnt").toString()); + if(bonusPointCnt > 0) { + bonusPointYn = "Y"; + } + } + + HashMap betSum = cashDao.getLastCashInToBetSum(lastCasnIn); + if(betSum != null) { + betSumAmt = Long.parseLong(betSum.get("betAmt").toString()); + } + + double rateD = 0.0; + if(cashInAmt == 0 || cashType.equals("-1")) { + rateD = 0.00; + } else { + rateD = ((double)betSumAmt / (double)cashInAmt) * 100.00; + } + + rate = (long) rateD; + calculate.put("cashType", cashType); + calculate.put("cashInAmt", cashInAmt); + calculate.put("lastCashInDate", lastCashInDate); + calculate.put("bonusPointYn", bonusPointYn); + calculate.put("betSumAmt", betSumAmt); + calculate.put("rate", rate); + } + + return calculate; + } + + @Override + public Integer getFirstDailyCnt(HashMap pointParam) { + // TODO Auto-generated method stub + return cashDao.getFirstDailyCnt(pointParam); + } + + @Override + public int getCashWaitTimeCheck(CashDetail paramCash) { + // TODO Auto-generated method stub + return cashDao.getCashWaitTimeCheck(paramCash); + } + + @Override + public List getCashQueList() { + // TODO Auto-generated method stub + return cashDao.getCashQueList(); + } + + @Override + public long getBalance(CashQueVO item) { + // TODO Auto-generated method stub + return cashDao.getBalance(item); + } + + @Override + public int updateQueStatus(HashMap param) { + // TODO Auto-generated method stub + return cashDao.updateQueStatus(param); + } + + @Override + public long cashInsertByCoupon(CashDetail cash) { + // TODO Auto-generated method stub + return cashDao.cashInsertByCoupon(cash); + } + + @Override + public int couponCreate(CouponVO couponVO) { + // TODO Auto-generated method stub + return cashDao.couponCreate(couponVO); + } + + @Override + public int updateCouponItem(CouponVO couponVO) { + // TODO Auto-generated method stub + return cashDao.updateCouponItem(couponVO); + } + + @Override + public int checkCouponNumber(String couponNumber) { + // TODO Auto-generated method stub + return cashDao.checkCouponNumber(couponNumber); + } + + @Override + public CouponVO getCouponItem(String couponNumber) { + // TODO Auto-generated method stub + return cashDao.getCouponItem(couponNumber); + } + + @Override + public int getCouponListCnt(CouponSearch search) { + // TODO Auto-generated method stub + return cashDao.getCouponListCnt(search); + } + + @Override + public List> getCouponList(CouponSearch search) { + // TODO Auto-generated method stub + return cashDao.getCouponList(search); + } + + @Override + public int getMyCouponListCnt(CouponSearch search) { + // TODO Auto-generated method stub + return cashDao.getMyCouponListCnt(search); + } + + @Override + public List> getMyCouponList(CouponSearch search) { + // TODO Auto-generated method stub + return cashDao.getMyCouponList(search); + } + + @Override + public List> getUserRollingCalculate(CashSearch search) { + List> list = new ArrayList<>(); + + HashMap lastCasnIn = cashDao.getLastCashInBy24H(search); + if(lastCasnIn == null || "-1".equals(lastCasnIn.get("cashType").toString())) { + HashMap item = new HashMap<>(); + item.put("category", "casino"); + item.put("betSumAmt", "0"); + item.put("rate", "0.0"); + list.add(item); + item = new HashMap<>(); + item.put("category", "slot"); + item.put("betSumAmt", "0"); + item.put("rate", "0.0"); + list.add(item); + item = new HashMap<>(); + item.put("category", "minigame"); + item.put("betSumAmt", "0"); + item.put("rate", "0.0"); + list.add(item); + item = new HashMap<>(); + item.put("category", "sport"); + item.put("betSumAmt", "0"); + item.put("rate", "0.0"); + list.add(item); + } else { + BigDecimal cashInAmt = new BigDecimal(lastCasnIn.get("cashAmt").toString()); + String lastCashInDate = lastCasnIn.get("updDate").toString(); + + List> betSumlist = cashDao.getLastCashInToBetSumBy24H(lastCasnIn); + for(HashMap item : betSumlist) { + BigDecimal betSumAmt = new BigDecimal(item.get("betSumAmt").toString()); + + double rateD = 0.0; + if(cashInAmt.longValue() != 0L) { + BigDecimal result = betSumAmt.divide(cashInAmt, 2, RoundingMode.HALF_UP); + BigDecimal p100 = new BigDecimal("100.00"); + BigDecimal rateB = result.multiply(p100); + rateD = rateB.doubleValue(); + } + item.put("rate", Double.toString(rateD)); + list.add(item); + } + } + + return list; + } + + @Override + public int insertCashBonus(HashMap data) { + // TODO Auto-generated method stub + return cashDao.insertCashBonus(data); + } + + @Override + public HashMap getCashBonusInfo(long cashIdx) { + // TODO Auto-generated method stub + return cashDao.getCashBonusInfo(cashIdx); + } + + @Override + public int updateCashBonus(HashMap data) { + // TODO Auto-generated method stub + return cashDao.updateCashBonus(data); + } + +} diff --git a/src/main/java/com/bb/service/CommonService.java b/src/main/java/com/bb/service/CommonService.java new file mode 100644 index 0000000..716fc17 --- /dev/null +++ b/src/main/java/com/bb/service/CommonService.java @@ -0,0 +1,241 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.bb.model.Admin; +import com.bb.model.AdminIp; +import com.bb.model.AdminLogSearch; +import com.bb.model.AdminSearch; +import com.bb.model.Bank; +import com.bb.model.Banner; +import com.bb.model.Block; +import com.bb.model.BlockSearch; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.Code; +import com.bb.model.CodeSearch; +import com.bb.model.CronServerInfo; +import com.bb.model.DomainPartnerVO; +import com.bb.model.GameCodeSearchVO; +import com.bb.model.GameCodeVO; +import com.bb.model.GameSetting; +import com.bb.model.GameSettingItem; +import com.bb.model.LevelBank; +import com.bb.model.LevelBetLimit; +import com.bb.model.LevelDomain; +import com.bb.model.LevelFailPoint; +import com.bb.model.LevelOutPwd; +import com.bb.model.Member; +import com.bb.model.MenuVO; +import com.bb.model.NotiBgmVo; +import com.bb.model.SiteCashBonusSettingVO; +import com.bb.model.SiteCheckReq; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; + +import jakarta.validation.Valid; + + + + +public interface CommonService { + + List getCodeList(CodeSearch codesSearch); + + HashMap getCode(CodeSearch codesSearch); + + void batchReport(); + + void batchAutoLevelUp(); + + void batchReportYday1(); + + void batchReportYday2(); + + HashMap getSiteOption(String siteId); + + void insertlog(Map logParam); + + List getlastLoginToken(); + + void updatelog(Map logParam); + + int optionSave(SiteOption option); + + SiteOption getSiteSetting(SiteSearch search); + + HashMap getSiteAccoucnt(SiteSearch search); + + void bankSave(Bank bank); + + List getAdminBankList(SiteSearch search); + + List getBankList(SiteSearch search); + + void bannerSave(Banner banner); + + List getBannerList(SiteSearch search); + + void insertCode(@Valid Code code); + + List getLbList(SiteSearch search); + + void accountSave(LevelBank levelBank); + + List getLbetLimitList(SiteSearch search); + + void setLbetLimitList(LevelBetLimit betLimit); + + List getFailPointList(SiteSearch search); + + void failPointSave(LevelFailPoint failPoint); + + List getDomainList(SiteSearch search); + + void domainSave(LevelDomain domain); + + List getOutPwdList(SiteSearch search); + + void outPwdSave(LevelOutPwd outPwd); + + int getAdminLogListCnt(@Valid AdminLogSearch search); + + List getAdminLogList(@Valid AdminLogSearch search); + + void insertAdminlog(Map logParam); + + int getSiteBlockListCnt(@Valid BlockSearch search); + + List getSiteBlockList(@Valid BlockSearch search); + + void blockSave(@Valid Block block); + + + int getSiteAdminListCnt(@Valid AdminSearch search); + + List getSiteAdminList(@Valid AdminSearch search); + + void adminSave(Admin admin); + + void adminDelete(Admin admin); + + int getSiteAdminIpListCnt(@Valid AdminSearch search); + + List getSiteAdminIpList(@Valid AdminSearch search); + + void adminIpSave(AdminIp adminIp); + + void adminIpDelete(AdminIp adminIp); + + void updateIpInfo(Map ipParam); + + List getLoginSite(); + + int gameSettingSave(List settingList); + + List gameSettingList(GameSetting searchSetting); + + int siteCheckSave(SiteCheckReq param); + + List isSiteCheck(); + + void changeSiteCheckOff(SiteCheckReq param); + + void changeSiteSettingCheckYn(SiteCheckReq param); + + List siteCheckList(SiteCheckReq param); + + HashMap siteCheckDetail(SiteCheckReq param); + + HashMap siteCheckInfo(SiteCheckReq param); + + List> getGameCodeTabList(GameCodeSearchVO searchVO); + + List> getGameCodeColList(GameCodeSearchVO searchVO); + + List> getGameCodeList(GameCodeSearchVO searchVO); + + int gameCodeRegist(GameCodeVO gameCodeVO); + + int gameCodeUpdate(GameCodeVO gameCodeVO); + + List getPopupList(SiteSearch search); + + List getBannerInfoList(SiteSearch search); + + List getLoginPopupList(SiteSearch paramSite); + + List getGameCodes(CodeSearch codesSearch); + + List getGameGroupCodes(String siteId); + + String getApiVendor(CodeSearch codeSearch); + + List getMenuList(HashMap param); + + List getVendorList(); + + List getGameCodesForSuper(CodeSearch codesSearch); + + List getGameGroupCodesForSuper(String siteId); + + CronServerInfo getServerCronStatus(CronServerInfo cronStatus); + + List> getDomainPartnerList(DomainPartnerVO domainPartnerVO); + + int domainPartnerSave(DomainPartnerVO domainPartnerVO); + + int domainPartnerDelete(DomainPartnerVO domainPartnerVO); + + String getJoinRecommanderId(SiteSearch paramSite); + + HashMap getSessionTransactionIsolation(); + + List getChargingPointSettingList(int siteIdx); + + ChargingPointSettingVO getChargingPointSetting(ChargingPointSettingVO param); + + int setChargingPointSettingSave(ChargingPointSettingVO settingVO); + + String getJackpot(HashMap param); + + HashMap getCodeBySite(CodeSearch codeSrch); + + int getSiteLogoutTimeLimit(String siteId); + + List getRateCategory(String siteId); + + HashMap getUserInfoByToken(String token); + + HashMap getAdminInfoByToken(String token); + + List getMenuBookmarkList(HashMap param); + + int updateBookmarkMenu(MenuVO param); + + HashMap getSiteMemo(String siteId); + + int updateSiteMemo(HashMap param); + + int getSiteCheckCount(SiteCheckReq siteCheckReq); + + void updateMemLogin(Map logParam); + + void updateDayCashInDate(HashMap dailyParam); + + void updateAcctionLog(Map logParam); + + HashMap getVassApiInfo(Member search); + + List getNotiBgmList(SiteSearch search); + + int setNotiBgmSave(NotiBgmVo notiBgmVo); + + List getSiteCashBonusSettingList(Integer siteIdx); + + int setSiteCashBonusSettingSave(SiteCashBonusSettingVO settingVO); + + int bankDelete(Bank bank); + +} diff --git a/src/main/java/com/bb/service/CommonServiceImpl.java b/src/main/java/com/bb/service/CommonServiceImpl.java new file mode 100644 index 0000000..c0796ca --- /dev/null +++ b/src/main/java/com/bb/service/CommonServiceImpl.java @@ -0,0 +1,918 @@ +package com.bb.service; + +import java.net.InetAddress; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import com.bb.dao.CommonDao; +import com.bb.model.Admin; +import com.bb.model.AdminIp; +import com.bb.model.AdminLogSearch; +import com.bb.model.AdminSearch; +import com.bb.model.Bank; +import com.bb.model.Banner; +import com.bb.model.Block; +import com.bb.model.BlockSearch; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.Code; +import com.bb.model.CodeSearch; +import com.bb.model.CronServerInfo; +import com.bb.model.DomainPartnerVO; +import com.bb.model.GameCodeSearchVO; +import com.bb.model.GameCodeVO; +import com.bb.model.GameSetting; +import com.bb.model.GameSettingItem; +import com.bb.model.LevelBank; +import com.bb.model.LevelBetLimit; +import com.bb.model.LevelDomain; +import com.bb.model.LevelFailPoint; +import com.bb.model.LevelOutPwd; +import com.bb.model.Member; +import com.bb.model.MenuVO; +import com.bb.model.NotiBgmVo; +import com.bb.model.SiteCashBonusSettingVO; +import com.bb.model.SiteCheckReq; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +@EnableScheduling +public class CommonServiceImpl implements CommonService { + + + private final CommonDao commonDao; + + @Override + public List getCodeList(CodeSearch codesSearch) { + + return commonDao.getCodeList(codesSearch); + } + + + + @Override + public HashMap getCode(CodeSearch codesSearch) { + // TODO Auto-generated method stub + return commonDao.getCode(codesSearch); + } + + @Override + @Scheduled(fixedDelay = 300000L) + public void batchReport() { + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("DAY"); + log.info("##- [OMS BATCH_REALTIME_REPORT STATUS] This HostName: " + InetAddress.getLocalHost().getHostName() + ", This HostAddress: " + InetAddress.getLocalHost().getHostAddress()); + log.info("##- [OMS BATCH_REALTIME_REPORT STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonDao.getServerCronStatus(cronStatus); + log.info("##- [OMS BATCH_REALTIME_REPORT STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + int dupDayCheck = commonDao.getDupRepotCheck(); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled Report dupDayCheck: " + dupDayCheck); + + if(dupDayCheck > 0 ) { + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled getDailyList(UPDATE) Start"); + List dailyList = commonDao.getDailyList("UPDATE"); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled getDailyList(UPDATE) End, Size: " + dailyList.size()); + + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled Report Update Start"); + for(HashMap report : dailyList) { +// log.info("##-[BATCH_REALTIME_REPORT]-## UPDATE report : " + report.toString()); + int result = commonDao.updateReport(report); +// log.info("##-[BATCH_REALTIME_REPORT]-## UPDATE result["+report.get("days").toString()+":"+report.get("siteId").toString()+":"+report.get("memId").toString()+"] : " + result); + } + int result = commonDao.updateReport2(); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled updateReport2, Size: " + result); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled Report Update End"); + } else { + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled getDailyList(INSERT) Start"); + int result1 = commonDao.insertReport2(); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled getDailyList(INSERT) End, result1: " + result1); + + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled getDailyList(UPDATE) Start"); + List dailyList = commonDao.getDailyList("UPDATE"); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled getDailyList(UPDATE) End, Size: " + dailyList.size()); + + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled Report Update Start"); + for(HashMap report : dailyList) { +// log.info("##-[BATCH_REALTIME_REPORT]-## UPDATE report : " + report.toString()); + int result2 = commonDao.updateReport(report); +// log.info("##-[BATCH_REALTIME_REPORT]-## UPDATE result["+report.get("days").toString()+":"+report.get("siteId").toString()+":"+report.get("memId").toString()+"] : " + result); + } + int result3 = commonDao.updateReport2(); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled updateReport3, Size: " + result3); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled Report Update End"); + + /* + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled getDailyList(INSERT) Start"); + List dailyList = commonDao.getDailyList("INSERT"); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled getDailyList(INSERT) End, Size: " + dailyList.size()); + + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled Report Insert Start"); + for(HashMap report : dailyList) { + log.info("##-[BATCH_REALTIME_REPORT]-## INSERT report : " + report.toString()); + int result = commonDao.insertReport(report); + log.info("##-[BATCH_REALTIME_REPORT]-## INSERT result["+report.get("days").toString()+":"+report.get("siteId").toString()+":"+report.get("memId").toString()+"] : " + result); + } + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled Report Insert End"); + */ + } + + List monthList = commonDao.getMonthList(); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled getMonthList() End, Size: " + monthList.size()); + for(HashMap report : monthList) { + //log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled INSERT month report : " + report.toString()); + int result = commonDao.insertMonthReport(report); + //log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled INSERT month result["+report.get("monthDate").toString()+":"+report.get("siteId").toString()+"] : " + result); + } + + List rollingList = commonDao.getRollingList("0Day"); + log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled rollingList() End, Size: " + rollingList.size()); + for(HashMap report : rollingList) { + //log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled INSERT rolling report : " + report.toString()); + int result = commonDao.insertRollingReport(report); + //log.info("##-[BATCH_REALTIME_REPORT]-## Daily Scheduled INSERT rolling result : " + result); + } + } + } catch(Exception e) { + log.error(e.toString()); + log.error("##- [OMS BATCH_REALTIME_REPORT STATUS] Exception: " + e.toString()); + e.printStackTrace(); + } + } + + /** + * 첫 번째 * 부터 + * 초(0-59) + * 분(0-59) + * 시간(0-23) + * 일(1-31) + * 월(1-12) + * 요일(0-6) (0: 일, 1: 월, 2:화, 3:수, 4:목, 5:금, 6:토) + * + * Cron 표현식 + * '*' : 모든 조건(매시, 매일, 매주처럼 사용)을 의미 + * '?' : 설정 값 없음 (날짜와 요일에서만 사용 가능) + * '-' : 범위를 지정할 때 + * ',' : 여러 값을 지정할 때 + * '/' : 증분값, 즉 초기값과 증가치 설정에 사용 + * 'L' : 마지막 - 지정할 수 있는 범위의 마지막 값 설정 시 사용 (날짜와 요일에서만 사용 가능) + * 'W' : 가장 가까운 평일(weekday)을 설정할 때 + * 예) 10W - 10일이 평일 일 때 : 10일에 실행 + * - 10일이 토요일 일 때 : 가장 가까운 평일인 금요일(9일)에 실행 + * - 10일이 일요일 일 때 : 가장 가까운 평일인 월요일(11일)에 실행 + * '#' : N번째 주 특정 요일을 설정할 때 (-요일에서만 사용 가능) + * 예) 4#2 - 목요일#2째주에 실행 + * + * zone : cron 표현식을 사용했을 때 사용할 time zone으로 따로 설정하지 않으면 기본적으로 Local의 time zone이다. + * + * @Scheduled(cron = "* * * * * *", zone = "Asia/Seoul") + */ + // 매일 밤 11시00분에 실행 + @Override + @Scheduled(cron = "0 0 23 * * *") + public void batchAutoLevelUp() { + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("AUTO_LVUP"); + log.info("##- [OMS BATCH_AUTO_LEVEL_UP STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonDao.getServerCronStatus(cronStatus); + log.info("##- [OMS BATCH_AUTO_LEVEL_UP STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + + log.info("##-[BATCH_AUTO_LEVEL_UP]-## Daily Scheduled getDailyAutoLevelUpList() Start"); + List autoList = commonDao.getDailyAutoLevelUpList(); + log.info("##-[BATCH_AUTO_LEVEL_UP]-## Daily Scheduled getDailyAutoLevelUpList() End, Size: " + autoList.size()); + + log.info("##-[BATCH_AUTO_LEVEL_UP]-## Daily Scheduled Report Update Start"); + int cnt = 0; + for(HashMap user : autoList) { + int result1 = commonDao.updateAutoLevelUp(user); + log.debug("##-[BATCH_AUTO_LEVEL_UP]-## UPDATE result1 : " + result1); + cnt++; + } + log.info("##-[BATCH_AUTO_LEVEL_UP]-## UPDATE result1 cnt: " + cnt); + + } + } catch(Exception e) { + log.error("##- [OMS BATCH_AUTO_LEVEL_UP STATUS] Exception: " + e.toString()); + e.printStackTrace(); + } + } + + // 매일 오전 12시30분에 실행 + @Override + @Scheduled(cron = "0 30 0 * * *") + public void batchReportYday1() { + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("DAY"); + log.info("##- [OMS BATCH_REPORT_YDAY_1 STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonDao.getServerCronStatus(cronStatus); + log.info("##- [OMS BATCH_REPORT_YDAY_1 STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + + log.info("##-[BATCH_REPORT_YDAY_1]-## Daily Scheduled getDailyListYday() Start"); + List dailyList = commonDao.getDailyListYday(); + log.info("##-[BATCH_REPORT_YDAY_1]-## Daily Scheduled getDailyListYday() End, Size: " + dailyList.size()); + + log.info("##-[BATCH_REPORT_YDAY_1]-## Daily Scheduled Report Update Start"); + int cnt = 0; + for(HashMap report : dailyList) { + int result1 = commonDao.updateReportYday1(report); + log.debug("##-[BATCH_REPORT_YDAY_1]-## UPDATE result1 : " + result1); + cnt++; + } + log.info("##-[BATCH_REPORT_YDAY_1]-## UPDATE result1 cnt: " + cnt); + + int result2 = commonDao.updateReportYday2(); + log.info("##-[BATCH_REPORT_YDAY_1]-## UPDATE result2: " + result2); + log.info("##-[BATCH_REPORT_YDAY_1]-## Daily Scheduled Report Update End"); + + List rollingList = commonDao.getRollingList("-1Day"); + log.info("##-[BATCH_REPORT_YDAY_1]-## Daily Scheduled rollingList() End, Size: " + rollingList.size()); + for(HashMap report : rollingList) { + //log.info("##-[BATCH_REPORT_YDAY_1]-## Daily Scheduled INSERT rolling report : " + report.toString()); + int result = commonDao.insertRollingReport(report); + //log.info("##-[BATCH_REPORT_YDAY_1]-## Daily Scheduled INSERT rolling result : " + result); + } + + + } + } catch(Exception e) { + log.error("##- [OMS BATCH_REPORT_YDAY_1 STATUS] Exception: " + e.toString()); + e.printStackTrace(); + } + } + + // 매일 오전 6시에 실행 + @Override + @Scheduled(cron = "0 0 6 * * *") + public void batchReportYday2() { + try { + CronServerInfo cronStatus = new CronServerInfo(); + cronStatus.setHostName(InetAddress.getLocalHost().getHostName()); + cronStatus.setIpAddress(InetAddress.getLocalHost().getHostAddress()); + cronStatus.setCronType("DAY"); + log.info("##- [OMS BATCH_REPORT_YDAY_2 STATUS] HostName: " + cronStatus.getHostName() + ", HostAddress: " + cronStatus.getIpAddress()); + cronStatus = commonDao.getServerCronStatus(cronStatus); + log.info("##- [OMS BATCH_REPORT_YDAY_2 STATUS] cronStatus: " + cronStatus); + + if(cronStatus != null && cronStatus.getRunYn().equals("Y")) { + + log.info("##-[BATCH_REPORT_YDAY_2]-## Daily Scheduled getDailyListYday() Start"); + List dailyList = commonDao.getDailyListYday(); + log.info("##-[BATCH_REPORT_YDAY_2]-## Daily Scheduled getDailyListYday() End, Size: " + dailyList.size()); + + log.info("##-[BATCH_REPORT_YDAY_2]-## Daily Scheduled Report Update Start"); + int cnt = 0; + for(HashMap report : dailyList) { + int result1 = commonDao.updateReportYday1(report); + log.debug("##-[BATCH_REPORT_YDAY_2]-## UPDATE result1 : " + result1); + cnt++; + } + log.info("##-[BATCH_REPORT_YDAY_2]-## UPDATE result1 cnt: " + cnt); + + int result3 = commonDao.updateReportYday3(); + log.info("##-[BATCH_REPORT_YDAY_2]-## UPDATE result3: " + result3); + log.info("##-[BATCH_REPORT_YDAY_2]-## Daily Scheduled Report Update End"); + + List rollingList = commonDao.getRollingList("-1Day"); + log.info("##-[BATCH_REPORT_YDAY_2]-## Daily Scheduled rollingList() End, Size: " + rollingList.size()); + for(HashMap report : rollingList) { + //log.info("##-[BATCH_REPORT_YDAY_2]-## Daily Scheduled INSERT rolling report : " + report.toString()); + int result = commonDao.insertRollingReport(report); + //log.info("##-[BATCH_REPORT_YDAY_2]-## Daily Scheduled INSERT rolling result : " + result); + } + } + } catch(Exception e) { + log.error("##- [OMS BATCH_REPORT_YDAY_2 STATUS] Exception: " + e.toString()); + e.printStackTrace(); + } + } + + + @Override + public HashMap getSiteOption(String siteId) { + // TODO Auto-generated method stub + return commonDao.getSiteOption(siteId); + } + + @Override + public void insertlog(Map logParam) { + commonDao.insertlog(logParam); + } + + @Override + public List getlastLoginToken() { + // TODO Auto-generated method stub + return commonDao.getlastLoginToken(); + } + + @Override + public void updatelog(Map logParam) { + // TODO Auto-generated method stub + commonDao.updatelog(logParam); + } + + @Override + public int optionSave(SiteOption option) { + // TODO Auto-generated method stub + return commonDao.optionSave(option); + } + + @Override + public SiteOption getSiteSetting(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getSiteSetting(search); + } + + @Override + public HashMap getSiteAccoucnt(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getSiteAccoucnt(search); + } + + @Override + public void bankSave(Bank bank) { + // TODO Auto-generated method stub + commonDao.bankSave(bank); + } + + @Override + public List getAdminBankList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getAdminBankList(search); + } + + @Override + public List getBankList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getBankList(search); + } + + @Override + public void bannerSave(Banner banner) { + // TODO Auto-generated method stub + commonDao.bannerSave(banner); + } + + @Override + public List getBannerList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getBannerList(search); + } + + @Override + public void insertCode(@Valid Code code) { + // TODO Auto-generated method stub + commonDao.insertCode(code); + } + + @Override + public List getLbList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getLbList(search); + } + + @Override + public void accountSave(LevelBank levelBank) { + // TODO Auto-generated method stub + commonDao.accountSave(levelBank); + } + + @Override + public List getLbetLimitList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getLbetLimitList(search); + } + + @Override + public void setLbetLimitList(LevelBetLimit betLimit) { + // TODO Auto-generated method stub + commonDao.setLbetLimitList(betLimit); + } + + @Override + public List getFailPointList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getFailPointList(search); + } + + @Override + public void failPointSave(LevelFailPoint failPoint) { + // TODO Auto-generated method stub + commonDao.failPointSave(failPoint); + } + + @Override + public List getDomainList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getDomainList(search); + } + + + @Override + public void domainSave(LevelDomain domain) { + // TODO Auto-generated method stub + commonDao.domainSave(domain); + } + + @Override + public List getOutPwdList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getOutPwdList(search); + } + + @Override + public void outPwdSave(LevelOutPwd outPwd) { + // TODO Auto-generated method stub + commonDao.outPwdSave(outPwd); + } + + @Override + public int getAdminLogListCnt(@Valid AdminLogSearch search) { + // TODO Auto-generated method stub + return commonDao.getAdminLogListCnt(search); + } + + @Override + public List getAdminLogList(@Valid AdminLogSearch search) { + // TODO Auto-generated method stub + return commonDao.getAdminLogList(search); + } + + @Override + public void insertAdminlog(Map logParam) { + // TODO Auto-generated method stub + commonDao.insertAdminlog(logParam); + } + + @Override + public int getSiteBlockListCnt(@Valid BlockSearch search) { + // TODO Auto-generated method stub + return commonDao.getSiteBlockListCnt(search); + } + + @Override + public List getSiteBlockList(@Valid BlockSearch search) { + // TODO Auto-generated method stub + return commonDao.getSiteBlockList(search); + } + + @Override + public void blockSave(@Valid Block block) { + // TODO Auto-generated method stub + commonDao.blockSave(block); + } + + @Override + public int getSiteAdminListCnt(@Valid AdminSearch search) { + // TODO Auto-generated method stub + return commonDao.getSiteAdminListCnt(search); + } + + @Override + public List getSiteAdminList(@Valid AdminSearch search) { + // TODO Auto-generated method stub + return commonDao.getSiteAdminList(search); + } + + @Override + public void adminSave(Admin admin) { + // TODO Auto-generated method stub + commonDao.adminSave(admin); + } + + @Override + public void adminDelete(Admin admin) { + // TODO Auto-generated method stub + commonDao.adminDelete(admin); + } + + @Override + public int getSiteAdminIpListCnt(@Valid AdminSearch search) { + // TODO Auto-generated method stub + return commonDao.getSiteAdminIpListCnt(search); + } + + @Override + public List getSiteAdminIpList(@Valid AdminSearch search) { + // TODO Auto-generated method stub + return commonDao.getSiteAdminIpList(search); + } + + @Override + public void adminIpSave(AdminIp adminIp) { + // TODO Auto-generated method stub + commonDao.adminIpSave(adminIp); + } + + @Override + public void adminIpDelete(AdminIp adminIp) { + // TODO Auto-generated method stub + commonDao.adminIpDelete(adminIp); + } + + @Override + public void updateIpInfo(Map ipParam) { + // TODO Auto-generated method stub + commonDao.updateIpInfo(ipParam); + } + + @Override + public List getLoginSite() { + // TODO Auto-generated method stub + return commonDao.getLoginSite(); + } + + @Override + public int gameSettingSave(List settingList) { + // TODO Auto-generated method stub + return commonDao.gameSettingSave(settingList); + } + + @Override + public List gameSettingList(GameSetting searchSetting) { + // TODO Auto-generated method stub + return commonDao.gameSettingList(searchSetting); + } + + @Override + public int siteCheckSave(SiteCheckReq param) { + // TODO Auto-generated method stub + int result = commonDao.siteCheckSave(param); + + return result; + } + + @Override + public List isSiteCheck() { + // TODO Auto-generated method stub + return commonDao.isSiteCheck(); + } + + @Override + public void changeSiteCheckOff(SiteCheckReq param) { + // TODO Auto-generated method stub + commonDao.changeSiteCheckOff(param); + } + + @Override + public void changeSiteSettingCheckYn(SiteCheckReq param) { + // TODO Auto-generated method stub + commonDao.changeSiteSettingCheckYn(param); + } + + @Override + public List siteCheckList(SiteCheckReq param) { + // TODO Auto-generated method stub + return commonDao.siteCheckList(param); + } + + @Override + public HashMap siteCheckDetail(SiteCheckReq param) { + // TODO Auto-generated method stub + return commonDao.siteCheckDetail(param); + } + + @Override + public HashMap siteCheckInfo(SiteCheckReq param) { + // TODO Auto-generated method stub + return commonDao.siteCheckInfo(param); + } + + @Override + public List> getGameCodeTabList(GameCodeSearchVO searchVO) { + // TODO Auto-generated method stub + return commonDao.getGameCodeTabList(searchVO); + } + + @Override + public List> getGameCodeColList(GameCodeSearchVO searchVO) { + // TODO Auto-generated method stub + return commonDao.getGameCodeColList(searchVO); + } + + @Override + public List> getGameCodeList(GameCodeSearchVO searchVO) { + // TODO Auto-generated method stub + return commonDao.getGameCodeList(searchVO); + } + + @Override + public int gameCodeRegist(GameCodeVO gameCodeVO) { + // TODO Auto-generated method stub + int result = 0; + int codeResult = commonDao.gameCodeRegist(gameCodeVO); + if(codeResult > 0) { + int result1 = commonDao.gameCodeAddMemRate(gameCodeVO); + int result2 = commonDao.gameCodeAddSiteGameSetting(gameCodeVO); + if(result1 > 0 && result2 > 0) { + result = 1; + } + } + + return result; + } + + @Override + public int gameCodeUpdate(GameCodeVO gameCodeVO) { + // TODO Auto-generated method stub + return commonDao.gameCodeUpdate(gameCodeVO); + } + + @Override + public List getPopupList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getPopupList(search); + } + + @Override + public List getBannerInfoList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getBannerInfoList(search); + } + + @Override + public List getLoginPopupList(SiteSearch paramSite) { + // TODO Auto-generated method stub + return commonDao.getLoginPopupList(paramSite); + } + + @Override + public List getGameCodes(CodeSearch codesSearch) { + // TODO Auto-generated method stub + return commonDao.getGameCodes(codesSearch); + } + + @Override + public List getGameGroupCodes(String siteId) { + // TODO Auto-generated method stub + return commonDao.getGameGroupCodes(siteId); + } + + @Override + public String getApiVendor(CodeSearch codeSearch) { + // TODO Auto-generated method stub + return commonDao.getApiVendor(codeSearch); + } + + @Override + public List getMenuList(HashMap param) { + // TODO Auto-generated method stub + return commonDao.getMenuList(param); + } + + @Override + public List getVendorList() { + // TODO Auto-generated method stub + return commonDao.getVendorList(); + } + + @Override + public List getGameCodesForSuper(CodeSearch codesSearch) { + // TODO Auto-generated method stub + return commonDao.getGameCodesForSuper(codesSearch); + } + + @Override + public List getGameGroupCodesForSuper(String siteId) { + // TODO Auto-generated method stub + return commonDao.getGameGroupCodesForSuper(siteId); + } + + + + @Override + public CronServerInfo getServerCronStatus(CronServerInfo cronStatus) { + // TODO Auto-generated method stub + return commonDao.getServerCronStatus(cronStatus); + } + + + + @Override + public List> getDomainPartnerList(DomainPartnerVO domainPartnerVO) { + // TODO Auto-generated method stub + return commonDao.getDomainPartnerList(domainPartnerVO); + } + + + + @Override + public int domainPartnerSave(DomainPartnerVO domainPartnerVO) { + // TODO Auto-generated method stub + return commonDao.domainPartnerSave(domainPartnerVO); + } + + + + @Override + public int domainPartnerDelete(DomainPartnerVO domainPartnerVO) { + // TODO Auto-generated method stub + return commonDao.domainPartnerDelete(domainPartnerVO); + } + + + + @Override + public String getJoinRecommanderId(SiteSearch paramSite) { + // TODO Auto-generated method stub + return commonDao.getJoinRecommanderId(paramSite); + } + + + + @Override + public HashMap getSessionTransactionIsolation() { + // TODO Auto-generated method stub + return commonDao.getSessionTransactionIsolation(); + } + + + + @Override + public List getChargingPointSettingList(int siteIdx) { + // TODO Auto-generated method stub + return commonDao.getChargingPointSettingList(siteIdx); + } + + + @Override + public ChargingPointSettingVO getChargingPointSetting(ChargingPointSettingVO param) { + // TODO Auto-generated method stub + return commonDao.getChargingPointSetting(param); + } + + + @Override + public int setChargingPointSettingSave(ChargingPointSettingVO settingVO) { + // TODO Auto-generated method stub + int result1 = commonDao.memChargingPointSettingSave(settingVO); + int result2 = commonDao.siteChargingPointSettingSave(settingVO); + return result1+result2; + } + + @Override + public String getJackpot(HashMap param) { + String jackpot = commonDao.getJackpot(param); + return jackpot; + } + + + + @Override + public HashMap getCodeBySite(CodeSearch codeSrch) { + // TODO Auto-generated method stub + return commonDao.getCodeBySite(codeSrch); + } + + + + @Override + public int getSiteLogoutTimeLimit(String siteId) { + // TODO Auto-generated method stub + return commonDao.getSiteLogoutTimeLimit(siteId); + } + + + + @Override + public List getRateCategory(String siteId) { + // TODO Auto-generated method stub + return commonDao.getRateCategory(siteId); + } + + + + @Override + public HashMap getUserInfoByToken(String token) { + // TODO Auto-generated method stub + return commonDao.getUserInfoByToken(token); + } + + + + @Override + public HashMap getAdminInfoByToken(String token) { + // TODO Auto-generated method stub + return commonDao.getAdminInfoByToken(token); + } + + + + @Override + public List getMenuBookmarkList(HashMap param) { + // TODO Auto-generated method stub + return commonDao.getMenuBookmarkList(param); + } + + @Override + public int updateBookmarkMenu(MenuVO param) { + // TODO Auto-generated method stub + return commonDao.updateBookmarkMenu(param); + } + + @Override + public HashMap getSiteMemo(String siteId) { + // TODO Auto-generated method stub + return commonDao.getSiteMemo(siteId); + } + + @Override + public int updateSiteMemo(HashMap param) { + // TODO Auto-generated method stub + return commonDao.updateSiteMemo(param); + } + + @Override + public int getSiteCheckCount(SiteCheckReq siteCheckReq) { + // TODO Auto-generated method stub + return commonDao.getSiteCheckCount(siteCheckReq); + } + + @Override + public void updateMemLogin(Map logParam) { + // TODO Auto-generated method stub + commonDao.updateMemLogin(logParam); + } + + @Override + public void updateDayCashInDate(HashMap dailyParam) { + // TODO Auto-generated method stub + commonDao.updateDayCashInDate(dailyParam); + } + + @Override + public void updateAcctionLog(Map logParam) { + // TODO Auto-generated method stub + commonDao.updateAcctionLog(logParam); + } + + + @Override + public HashMap getVassApiInfo(Member search) { + // TODO Auto-generated method stub + return commonDao.getVassApiInfo(search); + } + + + @Override + public List getNotiBgmList(SiteSearch search) { + // TODO Auto-generated method stub + return commonDao.getNotiBgmList(search); + } + + + @Override + public int setNotiBgmSave(NotiBgmVo notiBgmVo) { + // TODO Auto-generated method stub + return commonDao.setNotiBgmSave(notiBgmVo); + } + + + + @Override + public List getSiteCashBonusSettingList(Integer siteIdx) { + // TODO Auto-generated method stub + return commonDao.getSiteCashBonusSettingList(siteIdx); + } + + + + @Override + public int setSiteCashBonusSettingSave(SiteCashBonusSettingVO settingVO) { + // TODO Auto-generated method stub + return commonDao.setSiteCashBonusSettingSave(settingVO); + } + + + + @Override + public int bankDelete(Bank bank) { + // TODO Auto-generated method stub + return commonDao.bankDelete(bank); + } + +} diff --git a/src/main/java/com/bb/service/CompService.java b/src/main/java/com/bb/service/CompService.java new file mode 100644 index 0000000..a74c53e --- /dev/null +++ b/src/main/java/com/bb/service/CompService.java @@ -0,0 +1,115 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.CompDetail; +import com.bb.model.CompResetInfo; +import com.bb.model.CompSearch; +import com.bb.model.Member; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberRate; +import com.bb.model.MenuVO; +import com.bb.model.OTPInfo; +import com.bb.model.PartnerCompInfo; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.TripleGameRate; + +public interface CompService { + + int getPartnerCompListCnt(@Valid MemberListSearch search); + + List getPartnerCompList(@Valid MemberListSearch search); + + CompDetail getPartnerComp(Site search); + + HashMap getPartnerCompDetail(Member search); + + int modifySiteGameSetting(PartnerCompInfo compInfo); + + int modifyCreditSettings(PartnerCompInfo compInfo); + + int modifyCreditRates(Member search, @Valid MemberRate memberRate); + + int modifyCompCreditRates(PartnerCompInfo compInfo); + + int modifySiteSettings(PartnerCompInfo compInfo); + + int getCheckTopComp(PartnerCompInfo compInfo); + + int modifyCompInfo(PartnerCompInfo compInfo); + + HashMap getCompInfoForDetail(SiteSearch search); + + HashMap getSettingInfoForDetail(SiteSearch search); + + HashMap getCompStatsForDetail(SiteSearch search); + + List getTopCompListForDetail(SiteSearch search); + + List getBotCompListForDetail(SiteSearch search); + + int modifySiteGameSettingForSuper(PartnerCompInfo compInfo); + + int modifyMenuSettings(PartnerCompInfo compInfo); + + List getCompanyRate(Member search); + + List> getGameRateCompList(TripleGameRate gameRateVO); + + int updateCompGameRate(HashMap compGameRateInfo); + + HashMap getTripleParam(CompSearch search); + + List> getTripleGameRate(HashMap tripleParam); + + int insertTripleRateList(CompSearch search, List> tripleRateList); + + List> getOmsRateListByTripleGame(CompSearch search); + + int updateOmsRateList(CompSearch search); + + int resetComp(CompResetInfo compResetInfo); + + int updateApiSetting(PartnerCompInfo compInfo); + + List> getCompIdList(SiteSearch search); + + List getSiteGameInfo(SiteSearch search); + + List getSiteMenuInfo(SiteSearch search); + + int updateCompVictoryPassYn(SiteOption option); + + + String getAdminOtpUseYN(String adminId); + int registAdminOtp(OTPInfo otpParam); + int registSuperOtp(OTPInfo otpParam); + OTPInfo getOtpInfo(String adminId); + int updateAdminOtpUseYN(OTPInfo otpParam); + int updateSuperOtpUseYN(OTPInfo otpParam); + String getAdminType(String adminId); + + List> getAdminOtpInfoList(String siteId); + + HashMap getTripleCreditInfo(String siteId); + + void updateTripleSiteCredit(HashMap tripleCreditInfo); + + int updateVendoMinMax(HashMap param); + + String getLastMaxWinAmt(HashMap param); + + String getLastMaxWinAmtCnt(HashMap param); + + HashMap getTripleTargetSiteInfo(HashMap tripleCreditInfo); + + int insertTripleCreditInfo(String LOG_PREFIX, HashMap creditParam); + + String getSiteIdByAdminId(String adminId); + +} diff --git a/src/main/java/com/bb/service/CompServiceImpl.java b/src/main/java/com/bb/service/CompServiceImpl.java new file mode 100644 index 0000000..ef58784 --- /dev/null +++ b/src/main/java/com/bb/service/CompServiceImpl.java @@ -0,0 +1,482 @@ +package com.bb.service; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.stereotype.Service; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.DefaultTransactionDefinition; + +import com.bb.dao.CashDao; +import com.bb.dao.CompDao; +import com.bb.dao.UserDao; +import com.bb.model.BiSubPointRateVo; +import com.bb.model.CompDetail; +import com.bb.model.CompResetInfo; +import com.bb.model.CompSearch; +import com.bb.model.GameSettingInfo; +import com.bb.model.Member; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberRate; +import com.bb.model.MemberRateVo; +import com.bb.model.MenuVO; +import com.bb.model.OTPInfo; +import com.bb.model.PartnerCompInfo; +import com.bb.model.Site; +import com.bb.model.SiteOption; +import com.bb.model.SiteSearch; +import com.bb.model.TripleGameRate; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class CompServiceImpl implements CompService { + + private final CompDao compDao; + + @Override + public int getPartnerCompListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return compDao.getPartnerCompListCnt(search); + } + + @Override + public List getPartnerCompList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return compDao.getPartnerCompList(search); + } + + @Override + public CompDetail getPartnerComp(Site search) { + // TODO Auto-generated method stub + return compDao.getPartnerComp(search); + } + + @Override + public HashMap getPartnerCompDetail(Member search) { + // TODO Auto-generated method stub + return compDao.getPartnerCompDetail(search); + } + + @Override + public int modifySiteGameSetting(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + int resultCnt = 0; + int result = 0; + List biRateList = compInfo.getBiRateList(); + for(BiSubPointRateVo item : biRateList) { + item.setSiteId(compInfo.getSiteId()); + item.setTopCompId(compInfo.getTopCompId()); + resultCnt += compDao.modifySiteGameSetting(item); + } + log.info("resultCnt:" + resultCnt); + if(resultCnt > 0) { + result = 1; + } + return result; + } + + @Override + public int modifyCreditSettings(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + return compDao.modifyCreditSettings(compInfo); + } + + @Override + public int modifyCreditRates(Member search, @Valid MemberRate memberRate) { + // TODO Auto-generated method stub + int result = 0; + int resultCnt = 0; + for(MemberRateVo item : memberRate.getRateList()) { + HashMap param = new HashMap(); + param.put("siteId", search.getSiteId()); + param.put("memId", search.getSiteId()); + param.put("gameType", item.getGameType()); + param.put("pointRate", item.getPointRate()); + resultCnt += compDao.modifyCreditRates(param); + } + log.info("resultCnt:" + resultCnt); + if(resultCnt == memberRate.getRateList().size()) { + result = 1; + } + return result; + } + + @Override + public int modifyCompCreditRates(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + int result = 0; + int resultCnt = 0; + + for(GameSettingInfo item : compInfo.getGameSettingInfoList()) { + HashMap param = new HashMap(); + param.put("siteId", compInfo.getSiteId()); + param.put("memId", compInfo.getSiteId()); + param.put("gameType", item.getCode()); + param.put("pointRate", item.getPointRate()); + resultCnt += compDao.modifyCreditRates(param); + } + if(resultCnt == compInfo.getGameSettingInfoList().size()) { + result = 1; + } + log.info("### gameSettingList Count: " + compInfo.getGameSettingInfoList().size()); + log.info("### gameSettingList Result: " + resultCnt); + return result; + } + + @Override + public int modifySiteSettings(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + SiteOption siteOption = compInfo.getSiteOption(); + siteOption.setSiteId(compInfo.getSiteId()); + return compDao.modifySiteSettings(siteOption); + } + + @Override + public int getCheckTopComp(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + return compDao.getCheckTopComp(compInfo); + } + + @Override + public int modifyCompInfo(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + String siteDomains = compInfo.getSiteDomain(); + String[] siteDomainsArr = siteDomains.split(","); + compInfo.setSiteDomain(siteDomainsArr[0]); + compInfo.setSiteDomains(siteDomains); + + int modiResult = compDao.modifyCompInfo(compInfo); + return modiResult; + } + + @Override + public HashMap getCompInfoForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return compDao.getCompInfoForDetail(search); + } + + @Override + public HashMap getSettingInfoForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return compDao.getSettingInfoForDetail(search); + } + + @Override + public HashMap getCompStatsForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return compDao.getCompStatsForDetail(search); + } + + @Override + public List getTopCompListForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return compDao.getTopCompListForDetail(search); + } + + @Override + public List getBotCompListForDetail(SiteSearch search) { + // TODO Auto-generated method stub + return compDao.getBotCompListForDetail(search); + } + + @Override + public int modifySiteGameSettingForSuper(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + int result = 0; + List gameSettingList = compInfo.getGameSettingInfoList(); + for(GameSettingInfo item : gameSettingList) { + item.setSiteId(compInfo.getSiteId()); + item.setTopCompId(compInfo.getTopCompId()); + result += compDao.modifySiteGameSettingForSuper(item); + } + log.info("### gameSettingList Count: " + gameSettingList.size()); + log.info("### gameSettingList Result: " + result); + return result; + } + + @Override + public int modifyMenuSettings(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + int result = 0; + List menuSettingList = compInfo.getMenuSettingList(); + for(MenuVO item : menuSettingList) { + item.setSiteId(compInfo.getSiteId()); + String menuCode = item.getMenuCode(); + String menuCodePrefix = ""; + + /* + if(item.getMenuGroupCode().equals("level_01")) { + menuCodePrefix = menuCode.replace("0000", ""); + } else if(item.getMenuGroupCode().equals("level_02")) { + menuCodePrefix = menuCode.replace("00", ""); + } else { + menuCodePrefix = menuCode; + } + item.setMenuCodePrefix(menuCodePrefix); + */ + result += compDao.modifyMenuSettings(item); + } + log.info("### gameSettingList Count: " + menuSettingList.size()); + log.info("### gameSettingList Result: " + result); + return result; + } + + @Override + public List getCompanyRate(Member search) { + // TODO Auto-generated method stub + return compDao.getCompanyRate(search); + } + + @Override + public List> getGameRateCompList(TripleGameRate gameRateVO) { + // TODO Auto-generated method stub + return compDao.getGameRateCompList(gameRateVO); + } + + @Override + public int updateCompGameRate(HashMap compGameRateInfo) { + // TODO Auto-generated method stub + return compDao.updateCompGameRate(compGameRateInfo); + } + + @Override + public HashMap getTripleParam(CompSearch search) { + // TODO Auto-generated method stub + return compDao.getTripleParam(search); + } + + @Override + public List> getTripleGameRate(HashMap tripleParam) { + // TODO Auto-generated method stub + return compDao.getTripleGameRate(tripleParam); + } + + @Override + public int insertTripleRateList(CompSearch search, List> tripleRateList) { + // TODO Auto-generated method stub + int result = 0; + compDao.deleteTripleRate(search); + + for(HashMap tripleRate : tripleRateList) { + result += compDao.insertTripleRate(tripleRate); + } + return result; + } + + @Override + public List> getOmsRateListByTripleGame(CompSearch search) { + // TODO Auto-generated method stub + return compDao.getOmsRateListByTripleGame(search); + } + + @Override + public int updateOmsRateList(CompSearch search) { + // TODO Auto-generated method stub + return compDao.updateOmsRateList(search); + } + + @Override + public int resetComp(CompResetInfo compResetInfo) { + // TODO Auto-generated method stub + int res = 0; + String siteId = compResetInfo.getSiteId(); + try { + List memIdList = Arrays.asList(compResetInfo.getMemIds().split(",")); + compResetInfo.setMemIdList(memIdList); + if(memIdList.size() > 0) { + int cnt = compDao.getResetMemIdCount(compResetInfo); + log.info("[SUPER_ADMIN reset("+siteId+")] memIdList.size(): " + memIdList.size()); + log.info("[SUPER_ADMIN reset("+siteId+")] cnt: " + cnt); + if(cnt != memIdList.size()) { + log.error("[SUPER_ADMIN reset("+siteId+")] memIdList ERROR: " + compResetInfo); + return -1; + } + } + + log.info("[SUPER_ADMIN reset("+siteId+")] " + compResetInfo); + int delRes = compDao.resetDelete(compResetInfo); + log.info("[SUPER_ADMIN reset("+siteId+")] delRes: " + delRes); + int updRes = compDao.resetUpdate(compResetInfo); + log.info("[SUPER_ADMIN reset("+siteId+")] updRes: " + updRes); + } catch(Exception e) { + log.error("[SUPER_ADMIN reset("+siteId+")] ERROR: " + compResetInfo); + log.error(e.toString()); + e.printStackTrace(); + res = -1; + } + + return res; + } + + @Override + public int updateApiSetting(PartnerCompInfo compInfo) { + // TODO Auto-generated method stub + return compDao.updateApiSetting(compInfo); + } + + @Override + public List> getCompIdList(SiteSearch search) { + // TODO Auto-generated method stub + return compDao.getCompIdList(search); + } + + @Override + public List getSiteGameInfo(SiteSearch search) { + // TODO Auto-generated method stub + return compDao.getSiteGameInfo(search); + } + + @Override + public List getSiteMenuInfo(SiteSearch search) { + // TODO Auto-generated method stub + return compDao.getSiteMenuInfo(search); + } + + @Override + public int updateCompVictoryPassYn(SiteOption option) { + // TODO Auto-generated method stub + return compDao.updateCompVictoryPassYn(option); + } + + @Override + public String getAdminOtpUseYN(String adminId) { + // TODO Auto-generated method stub + return compDao.getAdminOtpUseYN(adminId); + } + + @Override + public int registAdminOtp(OTPInfo otpParam) { + // TODO Auto-generated method stub + int result = 0; + int reg = compDao.registOtpInfo(otpParam); + if(reg > 0) { + if(otpParam.getUseYn().equals("Y")) { + int upd = compDao.updateAdminOtpUseYN(otpParam); + if(upd > 0) { + result = 1; + } + } else { + result = 1; + } + + } + return result; + } + + @Override + public int registSuperOtp(OTPInfo otpParam) { + // TODO Auto-generated method stub + int result = 0; + int reg = compDao.registOtpInfo(otpParam); + if(reg > 0) { + if(otpParam.getUseYn().equals("Y")) { + int upd = compDao.updateSuperOtpUseYN(otpParam); + if(upd > 0) { + result = 1; + } + } else { + result = 1; + } + + } + return result; + } + + @Override + public OTPInfo getOtpInfo(String adminId) { + // TODO Auto-generated method stub + return compDao.getOtpInfo(adminId); + } + + @Override + public int updateAdminOtpUseYN(OTPInfo otpParam) { + // TODO Auto-generated method stub + return compDao.updateAdminOtpUseYN(otpParam); + } + + @Override + public int updateSuperOtpUseYN(OTPInfo otpParam) { + // TODO Auto-generated method stub + return compDao.updateSuperOtpUseYN(otpParam); + } + + @Override + public String getAdminType(String adminId) { + // TODO Auto-generated method stub + return compDao.getAdminType(adminId); + } + + @Override + public List> getAdminOtpInfoList(String siteId) { + // TODO Auto-generated method stub + return compDao.getAdminOtpInfoList(siteId); + } + + @Override + public HashMap getTripleCreditInfo(String siteId) { + // TODO Auto-generated method stub + return compDao.getTripleCreditInfo(siteId); + } + + @Override + public void updateTripleSiteCredit(HashMap tripleCreditInfo) { + // TODO Auto-generated method stub + compDao.updateTripleSiteCredit(tripleCreditInfo); + } + + @Override + public int updateVendoMinMax(HashMap param) { + // TODO Auto-generated method stub + return compDao.updateVendoMinMax(param); + } + + @Override + public String getLastMaxWinAmt(HashMap param) { + // TODO Auto-generated method stub + return compDao.getLastMaxWinAmt(param); + } + + @Override + public String getLastMaxWinAmtCnt(HashMap param) { + // TODO Auto-generated method stub + return compDao.getLastMaxWinAmtCnt(param); + } + + @Override + public HashMap getTripleTargetSiteInfo(HashMap tripleCreditInfo) { + // TODO Auto-generated method stub + return compDao.getTripleTargetSiteInfo(tripleCreditInfo); + } + + @Override + public int insertTripleCreditInfo(String LOG_PREFIX, HashMap creditParam) { + int res = 0; + + try { + compDao.insertTripleCredit(creditParam); + compDao.insertTripleCreditAiAo(creditParam); + res = 0; + } catch(Exception e) { + log.error(LOG_PREFIX + "Exception::"+e.getMessage()); + log.error(LOG_PREFIX + "Exception::"+e.toString()); + res =-1; + } finally { + return res; + } + } + + @Override + public String getSiteIdByAdminId(String adminId) { + // TODO Auto-generated method stub + return compDao.getSiteIdByAdminId(adminId); + } +} diff --git a/src/main/java/com/bb/service/MainService.java b/src/main/java/com/bb/service/MainService.java new file mode 100644 index 0000000..ebdcba6 --- /dev/null +++ b/src/main/java/com/bb/service/MainService.java @@ -0,0 +1,17 @@ +package com.bb.service; + +import java.util.HashMap; + +public interface MainService { + + HashMap getMainTopInfo(HashMap param); + + HashMap getMainStatistics(HashMap param); + + HashMap getMainCashReport(HashMap param); + + HashMap getMyCashReport(HashMap param); + + HashMap getMainNewPayLog(HashMap param); + +} diff --git a/src/main/java/com/bb/service/MainServiceImpl.java b/src/main/java/com/bb/service/MainServiceImpl.java new file mode 100644 index 0000000..2a8d30f --- /dev/null +++ b/src/main/java/com/bb/service/MainServiceImpl.java @@ -0,0 +1,61 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.bb.dao.CashDao; +import com.bb.dao.MainDao; +import com.bb.dao.UserDao; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class MainServiceImpl implements MainService { + + private final MainDao mainDao; + + @Override + public HashMap getMainTopInfo(HashMap param) { + // TODO Auto-generated method stub + return mainDao.getMainTopInfo(param); + } + + @Override + public HashMap getMainStatistics(HashMap param) { + // TODO Auto-generated method stub + return mainDao.getMainStatistics(param); + } + + @Override + public HashMap getMainCashReport(HashMap param) { + // TODO Auto-generated method stub + return mainDao.getMainCashReport(param); + } + + @Override + public HashMap getMyCashReport(HashMap param) { + // TODO Auto-generated method stub + return mainDao.getMyCashReport(param); + } + + @Override + public HashMap getMainNewPayLog(HashMap param) { + HashMap mainNewPayLog = new HashMap<>(); + + param.put("payType", "-3"); + List> newPaymentList = mainDao.getMainNewPayLog(param); + mainNewPayLog.put("newPaymentList", newPaymentList); + + param.put("payType", "3"); + List> newPaybackList = mainDao.getMainNewPayLog(param); + mainNewPayLog.put("newPaybackList", newPaybackList); + + return mainNewPayLog; + } +} diff --git a/src/main/java/com/bb/service/MinigameService.java b/src/main/java/com/bb/service/MinigameService.java new file mode 100644 index 0000000..8f31baf --- /dev/null +++ b/src/main/java/com/bb/service/MinigameService.java @@ -0,0 +1,23 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.MiniGameSearch; +import com.bb.model.MinigameBetRate; +import com.bb.model.MinigameSet; + +public interface MinigameService { + + void setSave(@Valid MinigameSet mgs); + + void betRateSave(@Valid MinigameBetRate mbr); + + List getSetList(MiniGameSearch search); + + List getBetRateList(MiniGameSearch search); + + +} diff --git a/src/main/java/com/bb/service/MinigameServiceImpl.java b/src/main/java/com/bb/service/MinigameServiceImpl.java new file mode 100644 index 0000000..a2bb18d --- /dev/null +++ b/src/main/java/com/bb/service/MinigameServiceImpl.java @@ -0,0 +1,49 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.bb.dao.CashDao; +import com.bb.dao.MinigameDao; +import com.bb.dao.ReportDao; +import com.bb.dao.UserDao; +import com.bb.model.MiniGameSearch; +import com.bb.model.MinigameBetRate; +import com.bb.model.MinigameSet; +@RequiredArgsConstructor +@Service +public class MinigameServiceImpl implements MinigameService { + + + private final MinigameDao minigameDao; + + @Override + public void setSave(@Valid MinigameSet mgs) { + // TODO Auto-generated method stub + minigameDao.setSave(mgs); + } + + @Override + public void betRateSave(@Valid MinigameBetRate mbr) { + // TODO Auto-generated method stub + minigameDao.betRateSave(mbr); + } + + @Override + public List getSetList(MiniGameSearch search) { + // TODO Auto-generated method stub + return minigameDao.getSetList(search); + } + + @Override + public List getBetRateList(MiniGameSearch search) { + // TODO Auto-generated method stub + return minigameDao.getBetRateList(search); + } +} diff --git a/src/main/java/com/bb/service/PassimService.java b/src/main/java/com/bb/service/PassimService.java new file mode 100644 index 0000000..98930bb --- /dev/null +++ b/src/main/java/com/bb/service/PassimService.java @@ -0,0 +1,10 @@ +package com.bb.service; + +import com.bb.model.PassimAddrReq; +import com.bb.model.PassimAddrRes; + +public interface PassimService { + + PassimAddrRes createAddress(String LOG_PREFIX, PassimAddrReq req); + +} diff --git a/src/main/java/com/bb/service/PassimServiceImpl.java b/src/main/java/com/bb/service/PassimServiceImpl.java new file mode 100644 index 0000000..5b91633 --- /dev/null +++ b/src/main/java/com/bb/service/PassimServiceImpl.java @@ -0,0 +1,107 @@ +package com.bb.service; + +import java.nio.charset.Charset; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.Collections; +import java.util.UUID; + +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; + +import com.bb.dao.PassimDao; +import com.bb.model.PassimAddrReq; +import com.bb.model.PassimAddrRes; +import com.bb.util.PassimpaySignatureUtil; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import reactor.core.publisher.Mono; + +@Slf4j +@RequiredArgsConstructor +@Service +public class PassimServiceImpl implements PassimService { + + @Autowired + private WebClient webClient; + + private final String API_BASE_URL = "https://api.passimpay.io"; + private final String API_KEY = ""; + private final int PLATFORM_ID = 0; + + private final PassimDao passimDao; + + @Override + public PassimAddrRes createAddress(String LOG_PREFIX, PassimAddrReq req) { + PassimAddrRes res = null; + + try { + String orderId = createOrderId(req.getMemIdx(), req.getPaymentId()); + + JSONObject params = new JSONObject(); + params.put("platformId", PLATFORM_ID); + params.put("paymentId", req.getPaymentId().intValue()); + params.put("orderId", orderId); + + String signature = PassimpaySignatureUtil.generateSignature(Integer.toString(PLATFORM_ID), params.toString(), API_KEY); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(org.springframework.http.MediaType.APPLICATION_JSON)); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + headers.set("x-signature", signature); + + String apiUrl = API_BASE_URL + "/v2/address"; + Mono responseMono = webClient.post() + .uri(apiUrl) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params.toString()) + .retrieve() + .bodyToMono(String.class); + + String responseBody = responseMono.block(); + log.info(LOG_PREFIX+ "response : " + responseBody); + JSONObject resObj = new JSONObject(responseBody); + int result = resObj.getInt("result"); + if(result == 1) { + res = new PassimAddrRes(); + res.setAddress(resObj.getString("")); + if(resObj.has("destinationTag")) { + res.setTag(resObj.getInt("destinationTag")); + } + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception: " + e.toString()); + } + + return res; + } + + private static String createOrderId(Long userPk, Integer paymentId) { + if (paymentId == null) { + throw new IllegalArgumentException("paymentId must not be null"); + } + + String timestamp = LocalDateTime.now() + .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + + String random = UUID.randomUUID() + .toString() + .substring(0, 8) + .toUpperCase(); + + return String.format( + "PP-%s-%d-%d-%s", + timestamp, + userPk, + paymentId, + random + ); + } +} diff --git a/src/main/java/com/bb/service/PointService.java b/src/main/java/com/bb/service/PointService.java new file mode 100644 index 0000000..1d9896a --- /dev/null +++ b/src/main/java/com/bb/service/PointService.java @@ -0,0 +1,25 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import com.bb.model.Point; +import com.bb.model.PointSearchAdm; + +public interface PointService { + + int getAdminPointListCnt(PointSearchAdm search); + + List> getAdminPointList(PointSearchAdm search); + + int getAdminPointListNewCnt(PointSearchAdm search); + + List> getAdminPointListNew(PointSearchAdm search); + + List> getPointBotRateList(PointSearchAdm search); + + List> getPointBotMultiRateList(PointSearchAdm search); + + long pointInsert(Point point); + +} diff --git a/src/main/java/com/bb/service/PointServiceImpl.java b/src/main/java/com/bb/service/PointServiceImpl.java new file mode 100644 index 0000000..8e76b15 --- /dev/null +++ b/src/main/java/com/bb/service/PointServiceImpl.java @@ -0,0 +1,64 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.bb.dao.PointDao; +import com.bb.model.Point; +import com.bb.model.PointSearchAdm; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class PointServiceImpl implements PointService { + + private final PointDao pointDao; + + @Override + public int getAdminPointListCnt(PointSearchAdm search) { + // TODO Auto-generated method stub + return pointDao.getAdminPointListCnt(search); + } + + @Override + public List> getAdminPointList(PointSearchAdm search) { + // TODO Auto-generated method stub + return pointDao.getAdminPointList(search); + } + + @Override + public int getAdminPointListNewCnt(PointSearchAdm search) { + // TODO Auto-generated method stub + return pointDao.getAdminPointListNewCnt(search); + } + + @Override + public List> getAdminPointListNew(PointSearchAdm search) { + // TODO Auto-generated method stub + return pointDao.getAdminPointListNew(search); + } + + @Override + public List> getPointBotRateList(PointSearchAdm search) { + // TODO Auto-generated method stub + return pointDao.getPointBotRateList(search); + } + + @Override + public List> getPointBotMultiRateList(PointSearchAdm search) { + // TODO Auto-generated method stub + return pointDao.getPointBotMultiRateList(search); + } + + @Override + public long pointInsert(Point point) { + // TODO Auto-generated method stub + return pointDao.pointInsert(point); + } + +} diff --git a/src/main/java/com/bb/service/RateService.java b/src/main/java/com/bb/service/RateService.java new file mode 100644 index 0000000..18b619b --- /dev/null +++ b/src/main/java/com/bb/service/RateService.java @@ -0,0 +1,24 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import com.bb.model.Member; +import com.bb.model.MemberSearch; +import com.bb.model.RateInfo; +import com.bb.model.RateVO; + +public interface RateService { + + List> getMemRollingInfo(Member search); + + void rateInfoUpdate(RateInfo rateInfo); + + List getTopRate(MemberSearch search); + + int myRateInfoUpdate(RateVO rateVO); + + int topMinRateInfoUpdate(RateVO rateVO); + + int botMaxRateInfoUpdate(RateVO rateVO); +} diff --git a/src/main/java/com/bb/service/RateServiceImpl.java b/src/main/java/com/bb/service/RateServiceImpl.java new file mode 100644 index 0000000..936449b --- /dev/null +++ b/src/main/java/com/bb/service/RateServiceImpl.java @@ -0,0 +1,72 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.bb.dao.CashDao; +import com.bb.dao.RateDao; +import com.bb.dao.UserDao; +import com.bb.model.Member; +import com.bb.model.MemberSearch; +import com.bb.model.RateInfo; +import com.bb.model.RateVO; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class RateServiceImpl implements RateService { + + private final RateDao rateDao; + + @Override + public List> getMemRollingInfo(Member search) { + return rateDao.getMemRollingInfo(search); + } + + @Override + public void rateInfoUpdate(RateInfo rateInfo) { + for(RateVO rateVO : rateInfo.getRateList()) { + log.info("#-rateInfoUpdate::myRateInfoUpdate::"+rateInfo.getSiteId()+"::"+rateInfo.getMemId()+"::rateVO::"+rateVO.toString()); + int myUpdateResult = rateDao.myRateInfoUpdate(rateVO); + log.info("#-rateInfoUpdate::myRateInfoUpdate::"+rateInfo.getSiteId()+"::"+rateInfo.getMemId()+"::myUpdateResult::"+myUpdateResult); + + log.info("#-rateInfoUpdate::topMinRateInfoUpdate::"+rateInfo.getSiteId()+"::"+rateInfo.getMemId()+"::rateVO::"+rateVO.toString()); + int topMinUpdateResult = rateDao.topMinRateInfoUpdate(rateVO); + log.info("#-rateInfoUpdate::topMinRateInfoUpdate::"+rateInfo.getSiteId()+"::"+rateInfo.getMemId()+"::topMinUpdateResult::"+topMinUpdateResult); + + log.info("#-rateInfoUpdate::botMaxRateInfoUpdate::"+rateInfo.getSiteId()+"::"+rateInfo.getMemId()+"::rateVO::"+rateVO.toString()); + int botMaxUpdateResult = rateDao.botMaxRateInfoUpdate(rateVO); + log.info("#-rateInfoUpdate::botMaxRateInfoUpdate::"+rateInfo.getSiteId()+"::"+rateInfo.getMemId()+"::botMaxUpdateResult::"+botMaxUpdateResult); + } + } + + @Override + public List getTopRate(MemberSearch search) { + // TODO Auto-generated method stub + return rateDao.getTopRate(search); + } + + @Override + public int myRateInfoUpdate(RateVO rateVO) { + // TODO Auto-generated method stub + return rateDao.myRateInfoUpdate(rateVO); + } + + @Override + public int topMinRateInfoUpdate(RateVO rateVO) { + // TODO Auto-generated method stub + return rateDao.topMinRateInfoUpdate(rateVO); + } + + @Override + public int botMaxRateInfoUpdate(RateVO rateVO) { + // TODO Auto-generated method stub + return rateDao.botMaxRateInfoUpdate(rateVO); + } +} diff --git a/src/main/java/com/bb/service/ReportService.java b/src/main/java/com/bb/service/ReportService.java new file mode 100644 index 0000000..dd6c985 --- /dev/null +++ b/src/main/java/com/bb/service/ReportService.java @@ -0,0 +1,51 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.As; +import com.bb.model.DailyReportSearch; +import com.bb.model.DayilPartnerReport; +import com.bb.model.DayilPeriodicReports; +import com.bb.model.ReportSearch; + +public interface ReportService { + + int getReportMemwlListCnt(@Valid ReportSearch search); + List getReportMemwlList(@Valid ReportSearch search); + HashMap getPeriodCash(@Valid ReportSearch search); + List getPeriodRollPoint(@Valid ReportSearch search); + List getPeriodWlAmt(@Valid ReportSearch search); + List getGameTypeList(@Valid ReportSearch search); + List> getDayList(ReportSearch search); + HashMap getDayTotal(ReportSearch search); + int getReportTradeListCnt(@Valid ReportSearch search); + List getReportTradeList(@Valid ReportSearch search); + int getReportPartnerListCnt(@Valid ReportSearch search); + List getReportPartnerList(@Valid ReportSearch search); + int getReportPayListCnt(@Valid ReportSearch search); + List getReportPayList(@Valid ReportSearch search); + + int getReportsListCntForAdmin(DailyReportSearch search); + List getReportsListForAdmin(DailyReportSearch search); + DayilPeriodicReports getReportsTotalForAdmin(DailyReportSearch search); + + int getReportsByUserListCntForAdmin(DailyReportSearch search); + List getReportsByUserListForAdmin(DailyReportSearch search); + DayilPeriodicReports getReportsByUserTotalForAdmin(DailyReportSearch search); + + + List getReportsListForPartner(DailyReportSearch search); + DayilPeriodicReports getReportsTotalForPartner(DailyReportSearch search); + + int getReportsByUserListCntForPartner(DailyReportSearch search); + List getReportsByUserListForPartner(DailyReportSearch search); + DayilPeriodicReports getReportsByUserTotalForPartner(DailyReportSearch search); + + HashMap getPartnerInfo(DailyReportSearch search); + List getDayilPartnerReport(DailyReportSearch search); + + List> getReportCateInfo(String siteId); +} diff --git a/src/main/java/com/bb/service/ReportServiceImpl.java b/src/main/java/com/bb/service/ReportServiceImpl.java new file mode 100644 index 0000000..4b35373 --- /dev/null +++ b/src/main/java/com/bb/service/ReportServiceImpl.java @@ -0,0 +1,237 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.bb.dao.CashDao; +import com.bb.dao.ReportDao; +import com.bb.dao.UserDao; +import com.bb.model.As; +import com.bb.model.DailyReportSearch; +import com.bb.model.DayilPartnerReport; +import com.bb.model.DayilPeriodicReports; +import com.bb.model.ReportSearch; +@RequiredArgsConstructor +@Service +public class ReportServiceImpl implements ReportService{ + + @Autowired + private ReportDao reportDao; + + @Override + public int getReportMemwlListCnt(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportMemwlListCnt(search); + } + + @Override + public List getReportMemwlList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportMemwlList(search); + } + + @Override + public HashMap getPeriodCash(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getPeriodCash(search); + } + + @Override + public List getPeriodRollPoint(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getPeriodRollPoint(search); + } + + @Override + public List getPeriodWlAmt(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getPeriodWlAmt(search); + } + + @Override + public List getGameTypeList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getGameTypeList(search); + } + + @Override + public List> getDayList(ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getDayList(search); + } + + @Override + public HashMap getDayTotal(ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getDayTotal(search); + } + + @Override + public int getReportTradeListCnt(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportTradeListCnt(search); + } + + @Override + public List getReportTradeList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportTradeList(search); + } + + @Override + public int getReportPartnerListCnt(@Valid ReportSearch search) { + return reportDao.getReportPartnerListCnt(search); + } + + @Override + public List getReportPartnerList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + List reportPartnerList = reportDao.getReportPartnerList(search); + for(HashMap partner :reportPartnerList) { + List reportPartnerGroupBet = reportDao.getReportPartnerGroupBet(partner); + partner.put("betList", reportPartnerGroupBet); + } + + return reportPartnerList; + } + + @Override + public int getReportPayListCnt(@Valid ReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportPayListCnt(search); + } + + @Override + public List getReportPayList(@Valid ReportSearch search) { + // TODO Auto-generated method stub + List reportPayList = reportDao.getReportPayList(search); + for(HashMap pay :reportPayList) { + + List reportPartnerGroupBet = reportDao.getReportPayGroupGameType(pay); + pay.put("payList", reportPartnerGroupBet); + } + + return reportPayList; + } + + + + @Override + public int getReportsListCntForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + int cnt = reportDao.getReportsListCntForAdmin(search); + + return cnt; + } + + @Override + public List getReportsListForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + List list = reportDao.getReportsListForAdmin(search); + + return list; + } + + @Override + public DayilPeriodicReports getReportsTotalForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + DayilPeriodicReports total = total = reportDao.getReportsTotalForAdmin(search); + if(search.getSearchType().equals("OUTER")) { + String cnt = reportDao.getReportsTotalCntForAdmin(search); + total.setCntBottom(cnt); + } + + return total; + } + + + + @Override + public int getReportsByUserListCntForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportsByUserListCntForAdmin(search); + } + + @Override + public List getReportsByUserListForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportsByUserListForAdmin(search); + } + + @Override + public DayilPeriodicReports getReportsByUserTotalForAdmin(DailyReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportsByUserTotalForAdmin(search); + } + + + + + @Override + public List getReportsListForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + List list = reportDao.getReportsListForPartner(search); + + return list; + } + + @Override + public DayilPeriodicReports getReportsTotalForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + DayilPeriodicReports total = total = reportDao.getReportsTotalForPartner(search); + if(search.getSearchType().equals("OUTER")) { + String cnt = reportDao.getReportsTotalCntForPartner(search); + total.setCntBottom(cnt); + } + return total; + } + + + + @Override + public int getReportsByUserListCntForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportsByUserListCntForPartner(search); + } + + @Override + public List getReportsByUserListForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportsByUserListForPartner(search); + } + + @Override + public DayilPeriodicReports getReportsByUserTotalForPartner(DailyReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getReportsByUserTotalForPartner(search); + } + + + + @Override + public HashMap getPartnerInfo(DailyReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getPartnerInfo(search); + } + + @Override + public List getDayilPartnerReport(DailyReportSearch search) { + // TODO Auto-generated method stub + return reportDao.getDayilPartnerReport(search); + } + + + + @Override + public List> getReportCateInfo(String siteId) { + // TODO Auto-generated method stub + return reportDao.getReportCateInfo(siteId); + } + +} diff --git a/src/main/java/com/bb/service/RetailService.java b/src/main/java/com/bb/service/RetailService.java new file mode 100644 index 0000000..7e062fe --- /dev/null +++ b/src/main/java/com/bb/service/RetailService.java @@ -0,0 +1,169 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.BotMemRateVo; +import com.bb.model.CategoryRateVo; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.LoginUserVO; +import com.bb.model.Member; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberSearch; +import com.bb.model.NewMemRateItem; +import com.bb.model.PartnerListVO; +import com.bb.model.RetailListSearch; +import com.bb.model.RetailLowerSearch; +import com.bb.model.RetailPointSearch; +import com.bb.model.RetailSearch; +import com.bb.model.RetailSet; +import com.bb.model.UserDetailInfo; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; + +public interface RetailService { + + int getRetailListCnt(@Valid RetailSearch search); + + List getRetailList(@Valid RetailSearch search); + + int getRetailListCnt2(@Valid RetailSearch search); + + List getRetailList2(@Valid RetailSearch search); + + void settingSave(@Valid RetailSet retailSet); + + int getRetailSettingListCnt(@Valid RetailSearch search); + + List getRetailSettingList(@Valid RetailSearch search); + + List getRetailBalanceList(@Valid RetailSearch search); + + int getRetailBalanceListCnt(@Valid RetailSearch search); + + + + int retailDetailListCnt(@Valid RetailSearch search); + + List retailDetailList(@Valid RetailSearch search); + + int retailSummryListCnt(@Valid RetailSearch search); + + List retailSummryList(@Valid RetailSearch search); + + List retailBalanceDetail(@Valid RetailSearch search); + + + List getMyBetPointInfo(@Valid RetailSearch search); + + HashMap getMySummary(RetailSearch search); + + HashMap getMySummaryNew(RetailSearch search); + + HashMap getMyCashInfo(@Valid RetailSearch search); + + List getMyLoginMem(@Valid RetailSearch search); + + void setPoint(@Valid RetailSearch search); + + List myMemIds(Member search); + + List getMyCategoryRateList(MemberSearch search); + + List getBotCategoryRateList(List myCategoryRateList, MemberSearch search); + + void updateRate(List rateVo); + + void updateRate(BotMemRateVo rateVo); + + void updateRateAdmin(BotMemRateVo rateVo); + + List getMyUnderPartnerLevels(Member search); + + int getMyMemListCnt(RetailSearch search); + + List getMyMemList(RetailSearch search); + + int getMyMemDirectListCnt(RetailSearch search); + + List getMyMemDirectList(RetailSearch search); + + int getMyPartnerListCnt(RetailSearch search); + + List getMyPartnerList(RetailSearch search); + + List getMyPartnerList2(RetailSearch search); + + List getMyPartnerDirectList(RetailSearch search); + + int partnerBonusSettingSave(ChargingPointSettingVO settingVO); + + int getRetailPointListCnt(RetailPointSearch search); + + List getRetailPointList(RetailPointSearch search); + + List getPartnerHierarchy(RetailSearch search); + + List> getBottomRateList(Member search); + + int userLockWithBottom(HashMap param); + + HashMap getBotCashInfo(RetailSearch search); + + List getListRateInfo(RetailSearch search); + + int getMyLoginMemListCnt(MemberListSearch search); + + List getMyLoginMemList(MemberListSearch search); + + HashMap getPartnerInfo(RetailSearch search); + + String getNextTargetLevel(RetailLowerSearch param); + + int getLowerPartnerListCnt(RetailLowerSearch search); + + List> getLowerPartnerList(RetailLowerSearch search); + + UserDetailInfo getUserDetailInfo(UserSearch search); + + int setUserDetailInfo(UserDetailInfo info); + + List> getDetailLoginLog(UserSearch search); + + int getDetailMsgLogCnt(UserListSearch search); + + List> getDetailMsgLog(UserListSearch search); + + int getDetailCashLogCnt(UserListSearch search); + + List> getDetailCashLog(UserListSearch search); + + int getDetailRollingLogCnt(UserListSearch search); + + List> getDetailRollingLog(UserListSearch search); + + List> getDetailRollingLogNew(UserListSearch search); + + List getPartnerHierarchy2(RetailSearch search); + + HashMap getMyBetStatData(UserSearch search); + + List> getBottomBetStatList(UserSearch search); + + HashMap getBottomBetStatSum(UserSearch search); + + List> getDailyBetList(UserSearch search); + + HashMap getDailyBetSum(UserSearch search); + + List> getDailyUserList(UserSearch search); + + HashMap getDailyUserSum(UserSearch search); + + List> getDailyPartnerList(UserSearch search); + + int getBotCnt(Member searchBot); + +} diff --git a/src/main/java/com/bb/service/RetailServiceImpl.java b/src/main/java/com/bb/service/RetailServiceImpl.java new file mode 100644 index 0000000..d9a0019 --- /dev/null +++ b/src/main/java/com/bb/service/RetailServiceImpl.java @@ -0,0 +1,910 @@ +package com.bb.service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.bb.dao.CashDao; +import com.bb.dao.RateDao; +import com.bb.dao.RetailDao; +import com.bb.dao.UserDao; +import com.bb.model.BotMemRateVo; +import com.bb.model.CategoryRateVo; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.LoginUserVO; +import com.bb.model.Member; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberSearch; +import com.bb.model.MultipleRate; +import com.bb.model.MultipleRateInfo; +import com.bb.model.NewMemRateItem; +import com.bb.model.PartnerListVO; +import com.bb.model.RetailLowerSearch; +import com.bb.model.RetailPointSearch; +import com.bb.model.RetailSearch; +import com.bb.model.RetailSet; +import com.bb.model.UserDetailInfo; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class RetailServiceImpl implements RetailService { + + + private final RetailDao retailDao; + + private final UserDao userDao; + + private final CashDao cashDao; + + private final RateDao rateDao; + + @Override + public int getRetailListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getRetailListCnt(search); + } + + @Override + public List getRetailList(@Valid RetailSearch search) { + + List retailList = retailDao.getRetailList(search); + for(HashMap user : retailList) { + Member param = new Member(); + param.setSiteId(user.get("siteId").toString()); + param.setMemId(user.get("memId").toString()); + System.out.println(user.get("memId")); + List> memRollingInfo = rateDao.getMemRollingInfo(param); + for(HashMap rateItem : memRollingInfo) { + MultipleRateInfo multipleRateInfo = null; + if(rateItem.get("detailSetYn").toString().equals("Y")) { + // 요율 세부설정 값 + multipleRateInfo = new MultipleRateInfo(); + multipleRateInfo.setSiteId(rateItem.get("siteId").toString()); + multipleRateInfo.setMemId(rateItem.get("memId").toString()); + multipleRateInfo.setVendorCode(rateItem.get("cateCode").toString()); + List multipleRate = userDao.getMultipleRateList(multipleRateInfo); + multipleRateInfo.setRateList(multipleRate); + rateItem.put("multipleRateInfo", multipleRateInfo); + } else { + rateItem.put("multipleRateInfo", multipleRateInfo); + } + } + + user.put("memRollingInfo", memRollingInfo); + } + + return retailList; + } + + @Override + public int getRetailListCnt2(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getRetailListCnt2(search); + } + + @Override + public List getRetailList2(@Valid RetailSearch search) { + + List retailList = retailDao.getRetailList2(search); + for(PartnerListVO user : retailList) { + Member param = new Member(); + param.setSiteId(user.getSiteId()); + param.setMemId(user.getMemId()); + user.setTopUserList(userDao.getTopUserList2(param)); + user.setTotalInfo(userDao.getTotalInfo(param)); + } + + return retailList; + } + + @Override + public void settingSave(@Valid RetailSet retailSet) { + // TODO Auto-generated method stub + retailDao.settingSave(retailSet); + } + + @Override + public int getRetailSettingListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getRetailSettingListCnt(search); + } + + + @Override + public List getRetailSettingList(@Valid RetailSearch search) { + + List retailSettingList = retailDao.getRetailSettingList(search); + + for(HashMap retail:retailSettingList) { + Member re = new Member(); + re.setMemId(retail.get("memId").toString()); + re.setSiteId(retail.get("siteId").toString()); + //MemberDetail loginMember= userService.getMember(search); + retail.put("rateList", userDao.getMemberRate(re)); + } + + return retailSettingList; + } + + @Override + public List getRetailBalanceList(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getRetailBalanceList(search); + } + + @Override + public int getRetailBalanceListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getRetailBalanceListCnt(search); + } + + @Override + public int retailDetailListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.retailDetailListCnt(search); + } + + @Override + public List retailDetailList(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.retailDetailList(search); + + + } + + @Override + public int retailSummryListCnt(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.retailSummryListCnt(search); + } + + @Override + public List retailSummryList(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.retailSummryList(search); + } + + @Override + public List retailBalanceDetail(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.retailBalanceDetail(search); + } + + @Override + public List getMyBetPointInfo(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyBetPointInfo(search); + } + + @Override + public HashMap getMySummary(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMySummary(search); + } + + @Override + public HashMap getMySummaryNew(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMySummaryNew(search); + } + + @Override + public HashMap getMyCashInfo(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyCashInfo(search); + } + + @Override + public List getMyLoginMem(@Valid RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyLoginMem(search); + } + + @Override + public void setPoint(@Valid RetailSearch search) { + // TODO Auto-generated method stub + + long pointSum = retailDao.getRetailBalcePoint(search); + + System.out.println(pointSum); + + retailDao.updateRetailPointStatus(search); + + + Map param = new HashMap(); + param.put("siteId", search.getSiteId()); + param.put("memId", search.getMemId()); + param.put("pointAmt", pointSum); + cashDao.updateMemPoint(param); + } + + @Override + public List myMemIds(Member search) { + // TODO Auto-generated method stub + return retailDao.myMemIds(search); + } + + @Override + public List getMyCategoryRateList(MemberSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyCategoryRateList(search); + } + + @Override + public List getBotCategoryRateList(List myCategoryRateList, MemberSearch search) { + // TODO Auto-generated method stub + List botCategoryRateList = retailDao.getBotCategoryRateList(search); + for(CategoryRateVo bot : botCategoryRateList) { + for(CategoryRateVo my : myCategoryRateList) { + if(my.getCategory().equals(bot.getCategory())) { + bot.setMaxPointRate(my.getPointRate()); + bot.setMaxLoseRate(my.getLoseRate()); + } + } + } + + return botCategoryRateList; + } + + @Override + public void updateRate(List rateVo) { + // TODO Auto-generated method stub + for(BotMemRateVo item : rateVo) { + if((item.getCasinoPR() != null && !item.getCasinoPR().equals("")) + || (item.getCasinoLR() != null && !item.getCasinoLR().equals(""))) { + int casinoResult = retailDao.updateCasinoRate(item); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", item.getSiteId()); + updParam.put("memId", item.getMemId()); + updParam.put("gameCategory", "casino"); + updParam.put("gameCategoryEn", "CASINO"); + updParam.put("pointRate", item.getCasinoPR()); + updParam.put("loseRate", item.getCasinoLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::list::updateRate::"+item.getSiteId()+"::"+item.getMemId()+"::CASINO::pointRate::"+item.getCasinoPR()+"::loseRate::"+item.getCasinoLR()+"::result::"+casinoResult); + } + + if((item.getHcasinoPR() != null && !item.getHcasinoPR().equals("")) + || (item.getHcasinoLR() != null && !item.getHcasinoLR().equals(""))) { + int hcasinoResult = retailDao.updateHcasinoRate(item); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", item.getSiteId()); + updParam.put("memId", item.getMemId()); + updParam.put("gameCategory", "casino"); + updParam.put("gameCategoryEn", "HC-CASINO"); + updParam.put("pointRate", item.getHcasinoPR()); + updParam.put("loseRate", item.getHcasinoLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::list::updateRate::"+item.getSiteId()+"::"+item.getMemId()+"::HCASINO::pointRate::"+item.getHcasinoPR()+"::loseRate::"+item.getHcasinoLR()+"::result::"+hcasinoResult); + } + + if((item.getSlotPR() != null && !item.getSlotPR().equals("")) + || (item.getSlotLR() != null && !item.getSlotLR().equals(""))) { + int slotResult = retailDao.updateSlotRate(item); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", item.getSiteId()); + updParam.put("memId", item.getMemId()); + updParam.put("gameCategory", "slot"); + updParam.put("gameCategoryEn", "SLOT"); + updParam.put("pointRate", item.getSlotPR()); + updParam.put("loseRate", item.getSlotLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::list::updateRate::"+item.getSiteId()+"::"+item.getMemId()+"::SLOT::pointRate::"+item.getSlotPR()+"::loseRate::"+item.getSlotLR()+"::result::"+slotResult); + } + + if((item.getMiniPR() != null && !item.getMiniPR().equals("")) + || (item.getMiniLR() != null && !item.getMiniLR().equals(""))) { + int miniResult = retailDao.updateMiniRate(item); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", item.getSiteId()); + updParam.put("memId", item.getMemId()); + updParam.put("gameCategory", "minigame"); + updParam.put("gameCategoryEn", "MINI-GAME"); + updParam.put("pointRate", item.getMiniPR()); + updParam.put("loseRate", item.getMiniLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::list::updateRate::"+item.getSiteId()+"::"+item.getMemId()+"::MINIGAME::pointRate::"+item.getMiniPR()+"::loseRate::"+item.getMiniLR()+"::result::"+miniResult); + } + + if((item.getSportPR() != null && !item.getSportPR().equals("")) + || (item.getSportLR() != null && !item.getSportLR().equals(""))) { + int sportResult = retailDao.updateSportRate(item); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", item.getSiteId()); + updParam.put("memId", item.getMemId()); + updParam.put("gameCategory", "sport"); + updParam.put("gameCategoryEn", "SPORTS"); + updParam.put("pointRate", item.getSportPR()); + updParam.put("loseRate", item.getSportLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::list::updateRate::"+item.getSiteId()+"::"+item.getMemId()+"::SPORT::pointRate::"+item.getMiniPR()+"::loseRate::"+item.getMiniLR()+"::result::"+sportResult); + } + } + } + + @Override + public void updateRate(BotMemRateVo rateVo) { + // TODO Auto-generated method stub + if((rateVo.getCasinoPR() != null && !rateVo.getCasinoPR().equals("")) + || (rateVo.getCasinoLR() != null && !rateVo.getCasinoLR().equals(""))) { + int casinoResult = retailDao.updateCasinoRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "casino"); + updParam.put("gameCategoryEn", "CASINO"); + updParam.put("pointRate", rateVo.getCasinoPR()); + updParam.put("loseRate", rateVo.getCasinoLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRate::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::CASINO::pointRate::"+rateVo.getCasinoPR()+"::loseRate::"+rateVo.getCasinoLR()+"::result::"+casinoResult); + } + + if((rateVo.getHcasinoPR() != null && !rateVo.getHcasinoPR().equals("")) + || (rateVo.getHcasinoLR() != null && !rateVo.getHcasinoLR().equals(""))) { + int hcasinoResult = retailDao.updateHcasinoRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "casino"); + updParam.put("gameCategoryEn", "HC-CASINO"); + updParam.put("pointRate", rateVo.getHcasinoPR()); + updParam.put("loseRate", rateVo.getHcasinoLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRate::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::HCASINO::pointRate::"+rateVo.getHcasinoPR()+"::loseRate::"+rateVo.getHcasinoLR()+"::result::"+hcasinoResult); + } + + if((rateVo.getSlotPR() != null && !rateVo.getSlotPR().equals("")) + || (rateVo.getSlotLR() != null && !rateVo.getSlotLR().equals(""))) { + int slotResult = retailDao.updateSlotRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "slot"); + updParam.put("gameCategoryEn", "SLOT"); + updParam.put("pointRate", rateVo.getSlotPR()); + updParam.put("loseRate", rateVo.getSlotLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRate::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::SLOT::pointRate::"+rateVo.getSlotPR()+"::loseRate::"+rateVo.getSlotLR()+"::result::"+slotResult); + } + + if((rateVo.getMiniPR() != null && !rateVo.getMiniPR().equals("")) + || (rateVo.getMiniLR() != null && !rateVo.getMiniLR().equals(""))) { + int miniResult = retailDao.updateMiniRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "minigame"); + updParam.put("gameCategoryEn", "MINI-GAME"); + updParam.put("pointRate", rateVo.getMiniPR()); + updParam.put("loseRate", rateVo.getMiniLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRate::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::MINIGAME::pointRate::"+rateVo.getMiniPR()+"::loseRate::"+rateVo.getMiniLR()+"::result::"+miniResult); + } + + if((rateVo.getSportPR() != null && !rateVo.getSportPR().equals("")) + || (rateVo.getSportLR() != null && !rateVo.getSportLR().equals(""))) { + int sportResult = retailDao.updateSportRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "sport"); + updParam.put("gameCategoryEn", "SPORTS"); + updParam.put("pointRate", rateVo.getSportPR()); + updParam.put("loseRate", rateVo.getSportLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRate::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::SPORT::pointRate::"+rateVo.getMiniPR()+"::loseRate::"+rateVo.getMiniLR()+"::result::"+sportResult); + } + } + + @Override + public void updateRateAdmin(BotMemRateVo rateVo) { + // TODO Auto-generated method stub + if((rateVo.getCasinoPR() != null && !rateVo.getCasinoPR().equals("")) + || (rateVo.getCasinoLR() != null && !rateVo.getCasinoLR().equals(""))) { + int casinoResult = retailDao.updateCasinoRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "casino"); + updParam.put("gameCategoryEn", "CASINO"); + updParam.put("pointRate", rateVo.getCasinoPR()); + updParam.put("loseRate", rateVo.getCasinoLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRateAdmin::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::CASINO::pointRate::"+rateVo.getCasinoPR()+"::loseRate::"+rateVo.getCasinoLR()+"::result::"+casinoResult); + } + + if((rateVo.getHcasinoPR() != null && !rateVo.getHcasinoPR().equals("")) + || (rateVo.getHcasinoLR() != null && !rateVo.getHcasinoLR().equals(""))) { + int hcasinoResult = retailDao.updateHcasinoRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "casino"); + updParam.put("gameCategoryEn", "HC-CASINO"); + updParam.put("pointRate", rateVo.getHcasinoPR()); + updParam.put("loseRate", rateVo.getHcasinoLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRateAdmin::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::HCASINO::pointRate::"+rateVo.getHcasinoPR()+"::loseRate::"+rateVo.getHcasinoLR()+"::result::"+hcasinoResult); + } + + if((rateVo.getSlotPR() != null && !rateVo.getSlotPR().equals("")) + || (rateVo.getSlotLR() != null && !rateVo.getSlotLR().equals(""))) { + int slotResult = retailDao.updateSlotRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "slot"); + updParam.put("gameCategoryEn", "SLOT"); + updParam.put("pointRate", rateVo.getSlotPR()); + updParam.put("loseRate", rateVo.getSlotLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRateAdmin::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::SLOT::pointRate::"+rateVo.getSlotPR()+"::loseRate::"+rateVo.getSlotLR()+"::result::"+slotResult); + } + + if((rateVo.getMiniPR() != null && !rateVo.getMiniPR().equals("")) + || (rateVo.getMiniLR() != null && !rateVo.getMiniLR().equals(""))) { + int miniResult = retailDao.updateMiniRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "minigame"); + updParam.put("gameCategoryEn", "MINI-GAME"); + updParam.put("pointRate", rateVo.getMiniPR()); + updParam.put("loseRate", rateVo.getMiniLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRateAdmin::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::MINIGAME::pointRate::"+rateVo.getMiniPR()+"::loseRate::"+rateVo.getMiniLR()+"::result::"+miniResult); + } + + if((rateVo.getSportPR() != null && !rateVo.getSportPR().equals("")) + || (rateVo.getSportLR() != null && !rateVo.getSportLR().equals(""))) { + int sportResult = retailDao.updateSportRate(rateVo); + + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateVo.getSiteId()); + updParam.put("memId", rateVo.getMemId()); + updParam.put("gameCategory", "sport"); + updParam.put("gameCategoryEn", "SPORTS"); + updParam.put("pointRate", rateVo.getSportPR()); + updParam.put("loseRate", rateVo.getSportLR()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + log.info("#-retail::updateRateAdmin::"+rateVo.getSiteId()+"::"+rateVo.getMemId()+"::SPORT::pointRate::"+rateVo.getMiniPR()+"::loseRate::"+rateVo.getMiniLR()+"::result::"+sportResult); + } + } + + @Override + public List getMyUnderPartnerLevels(Member search) { + // TODO Auto-generated method stub + return retailDao.getMyUnderPartnerLevels(search); + } + + @Override + public int getMyMemListCnt(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyMemListCnt(search); + } + + @Override + public List getMyMemList(RetailSearch search) { + List memList = retailDao.getMyMemList(search); + + for(HashMap memDetail : memList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(memDetail.get("memId").toString()); + memDetail.put("topUserList", userDao.getTopUserList2(search2)); + } + + return memList; + } + + @Override + public int getMyMemDirectListCnt(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyMemDirectListCnt(search); + } + + @Override + public List getMyMemDirectList(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyMemDirectList(search); + } + + @Override + public int getMyPartnerListCnt(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyPartnerListCnt(search); + } + + @Override + public List getMyPartnerList(RetailSearch search) { + List memList = retailDao.getMyPartnerList(search); + + for(HashMap memDetail : memList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(memDetail.get("memId").toString()); + memDetail.put("topUserList", userDao.getTopUserList2(search2)); + } + + return memList; + } + + @Override + public List getMyPartnerList2(RetailSearch search) { + List memList = retailDao.getMyPartnerList2(search); + + for(HashMap memDetail : memList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(memDetail.get("memId").toString()); + memDetail.put("topUserList", userDao.getTopUserList2(search2)); + } + + return memList; + } + + @Override + public List getMyPartnerDirectList(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyPartnerDirectList(search); + } + + @Override + public int partnerBonusSettingSave(ChargingPointSettingVO settingVO) { + // TODO Auto-generated method stub + return retailDao.partnerBonusSettingSave(settingVO); + } + + @Override + public int getRetailPointListCnt(RetailPointSearch search) { + // TODO Auto-generated method stub + return retailDao.getRetailPointListCnt(search); + } + + @Override + public List getRetailPointList(RetailPointSearch search) { + // TODO Auto-generated method stub + return retailDao.getRetailPointList(search); + } + + @Override + public List getPartnerHierarchy(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getPartnerHierarchy(search); + } + + @Override + public List> getBottomRateList(Member search) { + List> retailList = retailDao.getBottomRateList(search); + for(HashMap user : retailList) { + Member param = new Member(); + param.setSiteId(user.get("siteId").toString()); + param.setMemId(user.get("memId").toString()); + List> memRollingInfo = rateDao.getMemRollingInfo(param); + for(HashMap rateItem : memRollingInfo) { + MultipleRateInfo multipleRateInfo = null; + if(rateItem.get("detailSetYn").toString().equals("Y")) { + // 요율 세부설정 값 + multipleRateInfo = new MultipleRateInfo(); + multipleRateInfo.setSiteId(rateItem.get("siteId").toString()); + multipleRateInfo.setMemId(rateItem.get("memId").toString()); + multipleRateInfo.setVendorCode(rateItem.get("cateCode").toString()); + List multipleRate = userDao.getMultipleRateList(multipleRateInfo); + multipleRateInfo.setRateList(multipleRate); + rateItem.put("multipleRateInfo", multipleRateInfo); + } + } + + user.put("botRateInfo", memRollingInfo); + } + + return retailList; + } + + @Override + public int userLockWithBottom(HashMap param) { + // TODO Auto-generated method stub + return retailDao.userLockWithBottom(param); + } + + @Override + public HashMap getBotCashInfo(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getBotCashInfo(search); + } + + @Override + public List getListRateInfo(RetailSearch search) { + List rateInfoList = new ArrayList<>(); + + Member param = new Member(); + param.setSiteId(search.getSiteId()); + param.setMemId(search.getMemId()); + List> memRollingInfo = rateDao.getMemRollingInfo(param); + for(HashMap rateItem : memRollingInfo) { + NewMemRateItem rateInfo = null; + + if(rateItem.get("detailSetYn").toString().equals("Y")) { + // 요율 세부설정 값 + MultipleRateInfo multipleRateInfo = new MultipleRateInfo(); + multipleRateInfo.setSiteId(rateItem.get("siteId").toString()); + multipleRateInfo.setMemId(rateItem.get("memId").toString()); + multipleRateInfo.setVendorCode(rateItem.get("cateCode").toString()); + List multipleRate = userDao.getMultipleRateList(multipleRateInfo); + for(MultipleRate item : multipleRate) { + rateInfo = new NewMemRateItem(); + rateInfo.setSiteId(multipleRateInfo.getSiteId()); + rateInfo.setMemId(multipleRateInfo.getMemId()); + rateInfo.setGameCategory(""); + rateInfo.setGameCategoryEn(""); + rateInfo.setGameCategoryName(rateItem.get("cateCodeName").toString()+"["+item.getRateTypeName()+"]"); + rateInfo.setVendorCode(multipleRateInfo.getVendorCode()); + rateInfo.setRateTypeCode(item.getRateType()); + rateInfo.setMaxPointRate(item.getMaxPointRate()); + rateInfo.setPointRate(item.getPointRate()); + rateInfo.setMinPointRate(item.getMinPointRate()); + rateInfo.setMaxLoseRate(item.getMaxLoseRate()); + rateInfo.setLoseRate(item.getLoseRate()); + rateInfo.setMinLoseRate(item.getMinLoseRate()); + + rateInfoList.add(rateInfo); + } + + } else { + rateInfo = new NewMemRateItem(); + rateInfo.setSiteId(rateItem.get("siteId").toString()); + rateInfo.setMemId(rateItem.get("memId").toString()); + rateInfo.setGameCategory(rateItem.get("category").toString()); + rateInfo.setGameCategoryEn(rateItem.get("cateCode").toString()); + rateInfo.setGameCategoryName(rateItem.get("cateCodeName").toString()); + rateInfo.setVendorCode(""); + rateInfo.setRateTypeCode(""); + rateInfo.setMaxPointRate(Double.parseDouble(rateItem.get("maxPointRate").toString())); + rateInfo.setPointRate(Double.parseDouble(rateItem.get("pointRate").toString())); + rateInfo.setMinPointRate(Double.parseDouble(rateItem.get("minPointRate").toString())); + rateInfo.setMaxLoseRate(Double.parseDouble(rateItem.get("maxLoseRate").toString())); + rateInfo.setLoseRate(Double.parseDouble(rateItem.get("loseRate").toString())); + rateInfo.setMinLoseRate(Double.parseDouble(rateItem.get("minLoseRate").toString())); + + rateInfoList.add(rateInfo); + } + } + + return rateInfoList; + } + + @Override + public int getMyLoginMemListCnt(MemberListSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyLoginMemListCnt(search); + } + + @Override + public List getMyLoginMemList(MemberListSearch search) { + List userList = retailDao.getMyLoginMemList(search); + + for(LoginUserVO user : userList) { + search.setMemId(user.getMemId()); + if(user.getPartnerLevel().equals("NORMAL")) { + String betData = userDao.getLoginUserBetData(search); + if(betData != null) { + user.setBetData(betData); + } + } else { + user.setBetData(""); + } + + LoginUserVO data = userDao.getLoginUserReportData(search); + if(data != null) { + user.setCashIn(data.getCashIn()); + user.setCashOut(data.getCashOut()); + user.setBetAmt(data.getBetAmt()); + user.setWinAmt(data.getWinAmt()); + } + + Member search2 = new Member(); + search2.setSiteId(user.getSiteId()); + search2.setMemId(user.getMemId()); + List> topUserList = userDao.getTopUserList2(search2); + user.setTopUserList(topUserList); + } + + return userList; + } + + @Override + public HashMap getPartnerInfo(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getPartnerInfo(search); + } + + @Override + public String getNextTargetLevel(RetailLowerSearch param) { + // TODO Auto-generated method stub + return retailDao.getNextTargetLevel(param); + } + + @Override + public int getLowerPartnerListCnt(RetailLowerSearch search) { + // TODO Auto-generated method stub + return retailDao.getLowerPartnerListCnt(search); + } + + @Override + public List> getLowerPartnerList(RetailLowerSearch search) { + List> list = retailDao.getLowerPartnerList(search); + + for(HashMap memDetail : list) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(memDetail.get("memId").toString()); + memDetail.put("topUserList", userDao.getTopUserList2(search2)); + memDetail.put("totalBalance", userDao.getTotalBalance(search2)); + memDetail.put("countInfo", userDao.getCountInfo(search2)); + } + + return list; + } + + @Override + public UserDetailInfo getUserDetailInfo(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getUserDetailInfo(search); + } + + @Override + public int setUserDetailInfo(UserDetailInfo info) { + // TODO Auto-generated method stub + return retailDao.setUserDetailInfo(info); + } + + @Override + public List> getDetailLoginLog(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getDetailLoginLog(search); + } + + @Override + public int getDetailMsgLogCnt(UserListSearch search) { + // TODO Auto-generated method stub + return retailDao.getDetailMsgLogCnt(search); + } + + @Override + public List> getDetailMsgLog(UserListSearch search) { + // TODO Auto-generated method stub + return retailDao.getDetailMsgLog(search); + } + + @Override + public int getDetailCashLogCnt(UserListSearch search) { + // TODO Auto-generated method stub + return retailDao.getDetailCashLogCnt(search); + } + + @Override + public List> getDetailCashLog(UserListSearch search) { + // TODO Auto-generated method stub + return retailDao.getDetailCashLog(search); + } + + @Override + public int getDetailRollingLogCnt(UserListSearch search) { + // TODO Auto-generated method stub + return retailDao.getDetailRollingLogCnt(search); + } + + @Override + public List> getDetailRollingLog(UserListSearch search) { + // TODO Auto-generated method stub + return retailDao.getDetailRollingLog(search); + } + + @Override + public List> getDetailRollingLogNew(UserListSearch search) { + // TODO Auto-generated method stub + return retailDao.getDetailRollingLogNew(search); + } + + @Override + public List getPartnerHierarchy2(RetailSearch search) { + // TODO Auto-generated method stub + return retailDao.getPartnerHierarchy2(search); + } + + @Override + public HashMap getMyBetStatData(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getMyBetStatData(search); + } + + @Override + public List> getBottomBetStatList(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getBottomBetStatList(search); + } + + @Override + public HashMap getBottomBetStatSum(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getBottomBetStatSum(search); + } + + @Override + public List> getDailyBetList(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getDailyBetList(search); + } + + @Override + public HashMap getDailyBetSum(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getDailyBetSum(search); + } + + @Override + public List> getDailyUserList(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getDailyUserList(search); + } + + @Override + public HashMap getDailyUserSum(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getDailyUserSum(search); + } + + @Override + public List> getDailyPartnerList(UserSearch search) { + // TODO Auto-generated method stub + return retailDao.getDailyPartnerList(search); + } + + @Override + public int getBotCnt(Member searchBot) { + // TODO Auto-generated method stub + return retailDao.getBotCnt(searchBot); + } + +} diff --git a/src/main/java/com/bb/service/RvHoldemService.java b/src/main/java/com/bb/service/RvHoldemService.java new file mode 100644 index 0000000..4cee11e --- /dev/null +++ b/src/main/java/com/bb/service/RvHoldemService.java @@ -0,0 +1,15 @@ +package com.bb.service; + +import org.codehaus.jettison.json.JSONObject; + +import com.bb.model.ApiVendorCompInfo; + +public interface RvHoldemService { + + int createUser(String LOG_PREFIX, ApiVendorCompInfo apiVendor, JSONObject params); + + String gameLink(String LOG_PREFIX, ApiVendorCompInfo apiVendor, JSONObject params); + + long getAgentAgg(String LOG_PREFIX, ApiVendorCompInfo apiVendor, JSONObject params); + +} diff --git a/src/main/java/com/bb/service/RvHoldemServiceImpl.java b/src/main/java/com/bb/service/RvHoldemServiceImpl.java new file mode 100644 index 0000000..4226cdf --- /dev/null +++ b/src/main/java/com/bb/service/RvHoldemServiceImpl.java @@ -0,0 +1,177 @@ +package com.bb.service; + +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Collections; + +import org.codehaus.jettison.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; + +import com.bb.model.ApiVendorCompInfo; + +import lombok.extern.slf4j.Slf4j; +import reactor.core.publisher.Mono; + +@Slf4j +@Service +public class RvHoldemServiceImpl implements RvHoldemService { + + @Autowired + private WebClient webClient; + //@Qualifier("secureTls12WebClient") + //@Qualifier("webClientOpenSslFull") + //@Qualifier("insecureTrustAllWebClient") + //@Qualifier("insecureJdkTlsWebClient") + + private HttpHeaders getHeader(String LOG_PREFIX, String apikey) { + LOG_PREFIX = LOG_PREFIX + "::getHeader::"; + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(org.springframework.http.MediaType.APPLICATION_JSON)); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("apikey", apikey); + log.info(LOG_PREFIX+ "HttpHeaders::"+headers.toString()); + + return headers; + } + + @Override + public int createUser(String LOG_PREFIX, ApiVendorCompInfo apiVendor, JSONObject params) { + LOG_PREFIX = LOG_PREFIX + "createUser:::"; + HttpHeaders headers = getHeader(LOG_PREFIX, apiVendor.getClientSecretKey()); + String apiUrl = apiVendor.getApiUrl() + "/user/create"; + log.info(LOG_PREFIX+ "Url: " + apiUrl); + log.info(LOG_PREFIX+ "Params: " + params.toString()); + int userId = 0; + + try { + Mono responseMono = webClient.post() + .uri(apiUrl) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params.toString()) + .retrieve() + .bodyToMono(String.class); + + String responseBody = responseMono.block(); + log.info(LOG_PREFIX+ "response : " + responseBody); + JSONObject resObj = new JSONObject(responseBody); + int code = resObj.getInt("code"); + if(code == 1) { + JSONObject payloadObj = resObj.getJSONObject("payload"); + userId = payloadObj.getInt("userId"); + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception: " + e.toString()); + } + + return userId; + } + + @Override + public String gameLink(String LOG_PREFIX, ApiVendorCompInfo apiVendor, JSONObject params) { + LOG_PREFIX = LOG_PREFIX + "gameLink:::"; + HttpHeaders headers = getHeader(LOG_PREFIX, apiVendor.getClientSecretKey()); + String apiUrl = apiVendor.getApiUrl() + "/game/link"; + log.info(LOG_PREFIX+ "Url: " + apiUrl); + log.info(LOG_PREFIX+ "Params: " + params.toString()); + String gameLink = null; + /* + OkHttpClient client; + try { + client = UnsafeOkHttpClient.getTls12Client(); + //RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json"), params.toString()); + // JSON 요청 예제 + MediaType JSON = MediaType.parse("application/json; charset=utf-8"); + String jsonParams = params.toString(); + + Request request = new Request.Builder() + .url(apiUrl) + .addHeader("Content-Type", "application/json") + .addHeader("Accept", "application/json") + .addHeader("apikey", apiVendor.getClientSecretKey()) + .post(RequestBody.create(jsonParams, JSON)) + .build(); + + try (Response response = client.newCall(request).execute()) { + if (response.isSuccessful() && response.body() != null) { + String responseBody = response.body().string(); + log.info(LOG_PREFIX+ "response : " + responseBody); + JSONObject resObj = new JSONObject(responseBody); + int code = resObj.getInt("code"); + if(code == 1) { + gameLink = resObj.getString("payload"); + } + } else { + log.error(LOG_PREFIX+ "Request failed: " + response.code() + " - " + response.message()); + } + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception: " + e.toString()); + e.printStackTrace(); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + */ + + try { + Mono responseMono = webClient.post() + .uri(apiUrl) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params.toString()) + .retrieve() + .bodyToMono(String.class); + + String responseBody = responseMono.block(); + log.info(LOG_PREFIX+ "response : " + responseBody); + JSONObject resObj = new JSONObject(responseBody); + int code = resObj.getInt("code"); + if(code == 1) { + gameLink = resObj.getString("payload"); + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception: " + e.toString()); + } + + + return gameLink; + } + + @Override + public long getAgentAgg(String LOG_PREFIX, ApiVendorCompInfo apiVendor, JSONObject params) { + LOG_PREFIX = LOG_PREFIX + "getAgentAgg:::"; + HttpHeaders headers = getHeader(LOG_PREFIX, apiVendor.getClientSecretKey()); + String apiUrl = apiVendor.getApiUrl() + "/agency/egg"; + log.info(LOG_PREFIX+ "Url: " + apiUrl); + log.info(LOG_PREFIX+ "Params: " + params.toString()); + long agentAgg = 0; + + try { + Mono responseMono = webClient.post() + .uri(apiUrl) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params.toString()) + .retrieve() + .bodyToMono(String.class); + + String responseBody = responseMono.block(); + log.info(LOG_PREFIX+ "response : " + responseBody); + JSONObject resObj = new JSONObject(responseBody); + int code = resObj.getInt("code"); + if(code == 1) { + agentAgg = resObj.getLong("payload"); + } + + } catch (Exception e) { + log.error(LOG_PREFIX+ "Exception: " + e.toString()); + } + + return agentAgg; + } +} diff --git a/src/main/java/com/bb/service/SportDService.java b/src/main/java/com/bb/service/SportDService.java new file mode 100644 index 0000000..ed37131 --- /dev/null +++ b/src/main/java/com/bb/service/SportDService.java @@ -0,0 +1,12 @@ +package com.bb.service; + +import com.bb.model.Member; +import com.bb.model.TripleDVO; + +import net.sf.json.JSONObject; + +public interface SportDService { + + JSONObject betProc(Member search, TripleDVO tripleVO); + +} diff --git a/src/main/java/com/bb/service/SportDServiceImpl.java b/src/main/java/com/bb/service/SportDServiceImpl.java new file mode 100644 index 0000000..09440f7 --- /dev/null +++ b/src/main/java/com/bb/service/SportDServiceImpl.java @@ -0,0 +1,417 @@ +package com.bb.service; + +import java.math.BigDecimal; +import java.util.HashMap; + +import org.springframework.stereotype.Service; + +import com.bb.dao.BetDao; +import com.bb.dao.UserDao; +import com.bb.model.Member; +import com.bb.model.TripleDVO; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONObject; + +@Slf4j +@RequiredArgsConstructor +@Service +public class SportDServiceImpl implements SportDService { + + private final UserDao userDao; + + private final BetDao betDao; + + private final AsyncTripleDService asyncService; + + @Override + public JSONObject betProc(Member search, TripleDVO tripleVO) { + JSONObject responseObj = new JSONObject(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::betProc::::"; + + try { + HashMap memberVo = userDao.getMemberMap(search); + + double bfCash = Double.parseDouble(memberVo.get("cashAmtD").toString()); + int siteIdx = (int) memberVo.get("siteIdx"); + int memIdx = (int) memberVo.get("memIdx"); + tripleVO.setSiteIdx(siteIdx); + tripleVO.setMemIdx(memIdx); + tripleVO.setMemLevel(memberVo.get("memLevel").toString()); + tripleVO.setSiteId(memberVo.get("siteId").toString()); + tripleVO.setMemId(memberVo.get("memId").toString()); + tripleVO.setBetYn(memberVo.get("betYn").toString()); + tripleVO.setMemLockYn(memberVo.get("memLockYn").toString()); + tripleVO.setSymLock(memberVo.get("symLock").toString()); + tripleVO.setIsBiPushYn(memberVo.get("isBiPushYn").toString()); + + log.info(LOG_PREFIX+ "::status::" + tripleVO.getStatus()); + if(tripleVO.getTranType().equals("debit") && tripleVO.getStatus().equals("bet")) { + responseObj = callBet(bfCash, tripleVO); + } + + else if(tripleVO.getTranType().equals("debit") && tripleVO.getStatus().equals("debitCustomer")) { + log.error(LOG_PREFIX+ "::debitCustomer::" + tripleVO); + responseObj = callBetIssue(bfCash, tripleVO); + } + + else if(tripleVO.getTranType().equals("credit") && tripleVO.getStatus().equals("betCancel")) { + responseObj = callCancel(bfCash, tripleVO); + } + + else if(tripleVO.getTranType().equals("credit") && tripleVO.getStatus().equals("commitReserve")) { + responseObj = callReserve(bfCash, tripleVO); + } + + else if(tripleVO.getTranType().equals("credit") && tripleVO.getStatus().equals("end")) { + responseObj = callWin(bfCash, tripleVO); + } + + else { + responseObj.put("result_code", 2222); + responseObj.put("error_msg","NOT_FOUND_CASE"); + log.error(LOG_PREFIX+ "::NOT_FOUND_CASE"); + } + + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("error_msg","UNKNOWN_ERROR"); + log.error(LOG_PREFIX+ "::UNKNOWN_ERROR"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + return responseObj; + } + + private JSONObject callBet(double bfCash, TripleDVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callBet::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== DEBIT_START =========="); + + if(tripleVO.getBetYn().equals("N") || tripleVO.getMemLockYn().equals("Y") || tripleVO.getSymLock().equals("Y")) { + if(tripleVO.getSymLock().equals("Y")) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tripleVO.getSiteId()); + lockParam.put("memId", tripleVO.getMemId()); + int lockResult = userDao.setUserLock(lockParam); + log.error(LOG_PREFIX+ "::setUserLock::result::" + lockResult); + } + + responseObj.put("balance", bfCash); + responseObj.put("result_code", 1005); + responseObj.put("error_msg","THIS_USER_BETTING_LOCK"); + log.error(LOG_PREFIX+ "::THIS_USER_BETTING_LOCK"); + log.error(LOG_PREFIX+ "::========== DEBIT_END =========="); + return responseObj; + } + + int debitCnt = betDao.getTripleDebitCheckByTranId(tripleVO.getTranId()); + double amount = Math.abs(tripleVO.getDebit()); + if(debitCnt > 0) { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","BET_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::BET_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::========== DEBIT_END =========="); + return responseObj; + } + + if(tripleVO.getMinusBalanceYn() == null || tripleVO.getMinusBalanceYn().equals("N")) { + if(bfCash == 0 || bfCash < amount) { + // 유저머니가 없는경우 code 80 msg : INSUFFICIENT_FUNDS + responseObj.put("balance", bfCash); + responseObj.put("result_code", 80); + responseObj.put("error_msg","INSUFFICIENT_FUNDS"); + log.error(LOG_PREFIX+ "::INSUFFICIENT_FUNDS"); + log.error(LOG_PREFIX+ "::========== DEBIT_END =========="); + return responseObj; + } + } + + // Bet Proc + BigDecimal bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.doubleValue()); + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = bfCashB.subtract(amountB); + tripleVO.setAfterCash(afCashB.doubleValue()); + + + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + double cashAmt = amount * -1; + memCashUpdParam.put("cashAmt", Double.toString(cashAmt)); + memCashUpdParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betDao.updateUserCashByAmountD(memCashUpdParam); + + Long betIdx = betDao.getBetIdxByGameIdx(tripleVO.getBetId()); + if(betIdx != null) { + //이미 베팅한거에 추가 배팅 건 + asyncService.updateDBetDebit(tripleVO, betIdx); + + } else { + asyncService.insertDSportBetDebit(tripleVO); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash()); + log.info(LOG_PREFIX+ "::========== DEBIT_END =========="); + + return responseObj; + } + + private JSONObject callBetIssue(double bfCash, TripleDVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callBetIssue::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== ISSUE_START =========="); + + int debitCnt = betDao.getTripleDebitCheckByTranId(tripleVO.getTranId()); + double amount = Math.abs(tripleVO.getDebit()); + if(debitCnt > 0) { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","BET_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::BET_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::========== ISSUE_END =========="); + return responseObj; + } + + // Bet Proc + BigDecimal bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.doubleValue()); + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = bfCashB.subtract(amountB); + tripleVO.setAfterCash(afCashB.doubleValue()); + + log.info(LOG_PREFIX+ "::BF_BALANCE::" + bfCashB.doubleValue()); + log.info(LOG_PREFIX+ "::ISSUE_AMOUNT::" + amount); + log.info(LOG_PREFIX+ "::AF_BALANCE::" + afCashB.doubleValue()); + + tripleVO.setIsBonus(-1); + + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + double cashAmt = amount * -1; + memCashUpdParam.put("cashAmt", Double.toString(cashAmt)); + memCashUpdParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betDao.updateUserCashByAmountD(memCashUpdParam); + + Long betIdx = betDao.getBetIdxByGameIdx(tripleVO.getBetId()); + if(betIdx != null) { + //이미 베팅한거에 추가 배팅 건 + asyncService.updateDBetIssue(tripleVO, betIdx); + } else { + asyncService.insertDSportBetIssue(tripleVO); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash()); + log.info(LOG_PREFIX+ "::========== ISSUE_END =========="); + + return responseObj; + } + + private JSONObject callReserve(double bfCash, TripleDVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callReserve::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== RESERVE_START =========="); + + int debitCnt = betDao.getBetinfoCheckByBetId(tripleVO.getBetId()); + + if(debitCnt >= 1) { + double amount = Math.abs(tripleVO.getCredit()); + + BigDecimal bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.doubleValue()); + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.doubleValue()); + + log.info(LOG_PREFIX+ "::BF_BALANCE::" + bfCashB.doubleValue()); + log.info(LOG_PREFIX+ "::RESERVE_AMOUNT::" + amount); + log.info(LOG_PREFIX+ "::AF_BALANCE::" + afCashB.doubleValue()); + + //asyncService.depositBalanceAsync(tripleVO); + //log.info(LOG_PREFIX+ "::depositBalanceAsync::Call"); + + if(amount != 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Double.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmountD(memCashUpdParam); + } + + Long betIdx = betDao.getBetIdxByBetId(tripleVO.getBetId()); + if(betIdx != null) { + if(amount != 0) { + asyncService.updateDSportBetReserve(tripleVO, betIdx); + } + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash()); + log.info(LOG_PREFIX+ "::========== RESERVE_END =========="); + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::========== RESERVE_END =========="); + } + + return responseObj; + } + + private JSONObject callWin(double bfCash, TripleDVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callWin::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== CREDIT_START =========="); + + int debitCnt = betDao.getBetinfoCheckByBetId(tripleVO.getBetId()); + int creditCnt = betDao.getTripleCreditCheckByTranId(tripleVO.getTranId()); + + double amount = Math.abs(tripleVO.getCredit()); + + if(creditCnt != 0) { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","WIN_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::WIN_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::========== CREDIT_END =========="); + return responseObj; + } + + if(debitCnt >= 1) { + BigDecimal bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.doubleValue()); + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.doubleValue()); + + // BetEnd Proc + double betWinAmt = tripleVO.getCredit(); + + if(betWinAmt > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Double.toString(betWinAmt)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmountD(memCashUpdParam); + } + + Long betIdx = betDao.getBetIdxByBetId(tripleVO.getBetId()); + if(betIdx != null) { + asyncService.updateDSportBetCredit(tripleVO, betIdx); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash()); + log.info(LOG_PREFIX+ "::========== CREDIT_END =========="); + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::========== CREDIT_END =========="); + } + + return responseObj; + } + + private JSONObject callCancel(double bfCash, TripleDVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callCancel::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== CANCEL_START =========="); + + int isCancleCnt = betDao.getTripleIsCancelCheck(tripleVO.getBetId()); + if(isCancleCnt != 0) { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","CANCEL_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::CANCEL_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::========== CANCEL_END =========="); + return responseObj; + } + + double amount = Math.abs(tripleVO.getCredit()); + + int debitCnt = betDao.getBetinfoCheckByBetId(tripleVO.getBetId()); + + if(debitCnt != 0) { + BigDecimal bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.doubleValue()); + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.doubleValue()); + + log.info(LOG_PREFIX+ "::BF_BALANCE::" + bfCashB.doubleValue()); + log.info(LOG_PREFIX+ "::RESERVE_AMOUNT::" + amount); + log.info(LOG_PREFIX+ "::AF_BALANCE::" + afCashB.doubleValue()); + + tripleVO.setIsCancel(1); + + Long betIdx = betDao.getBetIdxByBetId(tripleVO.getBetId()); + + if(betIdx != null) { + HashMap param = new HashMap(); + param.put("betIdx", betIdx); + param.put("betStatus", "CANCEL"); + param.put("betWinAmt", Double.toString(amount)); + int resultBet = betDao.betCancelTriple(param); + log.info(LOG_PREFIX+ "::betCancelTriple::result::" + resultBet); + + int resultBetOld = betDao.betCancelOldTriple(param); + log.info(LOG_PREFIX+ "::betCancelOldTriple::result::" + resultBetOld); + + if(resultBet > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Double.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmountD(memCashUpdParam); + + asyncService.updateDSportBetCancel(tripleVO, betIdx); + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash()); + log.info(LOG_PREFIX+ "::========== CANCEL_END =========="); + } + } + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::========== CANCEL_END =========="); + } + + return responseObj; + } + +} diff --git a/src/main/java/com/bb/service/SportService.java b/src/main/java/com/bb/service/SportService.java new file mode 100644 index 0000000..081e20e --- /dev/null +++ b/src/main/java/com/bb/service/SportService.java @@ -0,0 +1,15 @@ +package com.bb.service; + +import com.bb.model.Member; +import com.bb.model.TriplePurchaseId; +import com.bb.model.TripleVO; + +import net.sf.json.JSONObject; + +public interface SportService { + + JSONObject betProc(Member search, TripleVO tripleVO); + + int updatePurchaseId(TriplePurchaseId tripleVO); + +} diff --git a/src/main/java/com/bb/service/SportServiceImpl.java b/src/main/java/com/bb/service/SportServiceImpl.java new file mode 100644 index 0000000..baab69c --- /dev/null +++ b/src/main/java/com/bb/service/SportServiceImpl.java @@ -0,0 +1,547 @@ +package com.bb.service; + +import java.math.BigDecimal; +import java.util.HashMap; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.bb.dao.BetDao; +import com.bb.dao.CashDao; +import com.bb.dao.CommonDao; +import com.bb.dao.UserDao; +import com.bb.model.Member; +import com.bb.model.TriplePurchaseId; +import com.bb.model.TripleVO; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONObject; + +@Slf4j +@RequiredArgsConstructor +@Service +public class SportServiceImpl implements SportService { + + private final UserDao userDao; + + private final BetDao betDao; + + private final CashDao cashDao; + + private final CommonDao commonDao; + + private final AsyncTripleService asyncService; + + @Override + public JSONObject betProc(Member search, TripleVO tripleVO) { + JSONObject responseObj = new JSONObject(); + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::betProc::::"; + + try { + HashMap memberVo = userDao.getMemberMap(search); + int bfCash = Integer.parseInt(memberVo.get("cashAmt").toString()); + int siteIdx = (int) memberVo.get("siteIdx"); + int memIdx = (int) memberVo.get("memIdx"); + tripleVO.setSiteIdx(siteIdx); + tripleVO.setMemIdx(memIdx); + tripleVO.setMemLevel(memberVo.get("memLevel").toString()); + tripleVO.setSiteId(memberVo.get("siteId").toString()); + tripleVO.setMemId(memberVo.get("memId").toString()); + tripleVO.setBetYn(memberVo.get("betYn").toString()); + tripleVO.setMemLockYn(memberVo.get("memLockYn").toString()); + tripleVO.setSymLock(memberVo.get("symLock").toString()); + tripleVO.setIsBiPushYn(memberVo.get("isBiPushYn").toString()); + + log.info(LOG_PREFIX+ "::status::" + tripleVO.getStatus()); + if(tripleVO.getTranType().equals("debit") && tripleVO.getStatus().equals("bet")) { + responseObj = callBet(bfCash, tripleVO); + } + + else if(tripleVO.getTranType().equals("debit") && tripleVO.getStatus().equals("debitCustomer")) { + log.error(LOG_PREFIX+ "::debitCustomer::" + tripleVO); + responseObj = callBetIssue(bfCash, tripleVO); + } + + else if(tripleVO.getTranType().equals("credit") && tripleVO.getStatus().equals("betCancel")) { + responseObj = callCancel(bfCash, tripleVO); + } + + else if(tripleVO.getTranType().equals("credit") && tripleVO.getStatus().equals("commitReserve")) { + responseObj = callReserve(bfCash, tripleVO); + } + + else if(tripleVO.getTranType().equals("credit") && tripleVO.getStatus().equals("end")) { + responseObj = callWin(bfCash, tripleVO); + } + + else { + responseObj.put("result_code", 2222); + responseObj.put("error_msg","NOT_FOUND_CASE"); + log.error(LOG_PREFIX+ "::NOT_FOUND_CASE"); + } + + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("error_msg","UNKNOWN_ERROR"); + log.error(LOG_PREFIX+ "::UNKNOWN_ERROR"); + log.error(LOG_PREFIX+ "::ERROR::" + e.getMessage()); + } + + return responseObj; + } + + private JSONObject callBet(int bfCash, TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callBet::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== DEBIT_START =========="); + + if(tripleVO.getBetYn().equals("N") || tripleVO.getMemLockYn().equals("Y") || tripleVO.getSymLock().equals("Y")) { + if(tripleVO.getSymLock().equals("Y")) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tripleVO.getSiteId()); + lockParam.put("memId", tripleVO.getMemId()); + int lockResult = userDao.setUserLock(lockParam); + log.error(LOG_PREFIX+ "::setUserLock::result::" + lockResult); + } + + responseObj.put("balance", bfCash); + responseObj.put("result_code", 1005); + responseObj.put("error_msg","THIS_USER_BETTING_LOCK"); + log.error(LOG_PREFIX+ "::THIS_USER_BETTING_LOCK"); + log.error(LOG_PREFIX+ "::========== DEBIT_END =========="); + return responseObj; + } + + int debitCnt = betDao.getTripleDebitCheckByTranId(tripleVO.getTranId()); + int amount = Math.abs(tripleVO.getDebit()); + if(debitCnt > 0) { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","BET_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::BET_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::========== DEBIT_END =========="); + return responseObj; + } + + if(tripleVO.getMinusBalanceYn() == null || tripleVO.getMinusBalanceYn().equals("N")) { + if(bfCash == 0 || bfCash < amount) { + // 유저머니가 없는경우 code 80 msg : INSUFFICIENT_FUNDS + responseObj.put("balance", bfCash); + responseObj.put("result_code", 80); + responseObj.put("error_msg","INSUFFICIENT_FUNDS"); + log.error(LOG_PREFIX+ "::INSUFFICIENT_FUNDS"); + log.error(LOG_PREFIX+ "::========== DEBIT_END =========="); + return responseObj; + } + } + + HashMap betLimitInfo = betDao.getSiteBetLimitInfo(tripleVO); + int maxBetAmt = Integer.parseInt(betLimitInfo.get("betAmtMax").toString()); + if(amount > maxBetAmt) { + // 최대 배팅금액 초과시 에러 리턴 + responseObj.put("balance", bfCash); + responseObj.put("result_code", 3333); + responseObj.put("error_msg","MAX_BET_OVER"); + log.error(LOG_PREFIX+ "::MAX_BET_OVER"); + log.error(LOG_PREFIX+ "::========== DEBIT_END =========="); + return responseObj; + } + + // Bet Proc + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.subtract(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + //asyncService.withdrawBalanceAsync(tripleVO); + int result = betDao.insertTripleTxnData(tripleVO); + log.info(LOG_PREFIX+ "::insertTripleTxnData::result::" + result); + + if(result > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + int cashAmt = amount * -1; + memCashUpdParam.put("cashAmt", Integer.toString(cashAmt)); + memCashUpdParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + + Long betIdx = betDao.getBetIdxByGameIdx(tripleVO.getBetId()); + if(betIdx != null) { + //이미 베팅한거에 추가 배팅 건 + asyncService.updateBetDebit(tripleVO, betIdx); + + } else { + asyncService.insertSportBetDebit(tripleVO); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + log.info(LOG_PREFIX+ "::========== DEBIT_END =========="); + } else { + responseObj.put("result_code", 3333); + responseObj.put("error_msg","DEBIT_INSERT_ERROR"); + log.error(LOG_PREFIX+ "::DEBIT_INSERT_ERROR"); + log.error(LOG_PREFIX+ "::========== DEBIT_END =========="); + } + + return responseObj; + } + + private JSONObject callBetIssue(int bfCash, TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callBetIssue::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== ISSUE_START =========="); + + int debitCnt = betDao.getTripleDebitCheckByTranId(tripleVO.getTranId()); + int amount = Math.abs(tripleVO.getDebit()); + if(debitCnt > 0) { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","BET_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::BET_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::========== ISSUE_END =========="); + return responseObj; + } + + // Bet Proc + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.subtract(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + log.info(LOG_PREFIX+ "::BF_BALANCE::" + bfCashB.longValue()); + log.info(LOG_PREFIX+ "::ISSUE_AMOUNT::" + amount); + log.info(LOG_PREFIX+ "::AF_BALANCE::" + afCashB.longValue()); + + tripleVO.setIsBonus(-1); + int result = betDao.insertTripleTxnData(tripleVO); + log.info(LOG_PREFIX+ "::insertTripleTxnData::result::" + result); + + if(result > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + int cashAmt = amount * -1; + memCashUpdParam.put("cashAmt", Integer.toString(cashAmt)); + memCashUpdParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + + Long betIdx = betDao.getBetIdxByGameIdx(tripleVO.getBetId()); + if(betIdx != null) { + //이미 베팅한거에 추가 배팅 건 + asyncService.updateBetIssue(tripleVO, betIdx); + } else { + asyncService.insertSportBetIssue(tripleVO); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + log.info(LOG_PREFIX+ "::========== ISSUE_END =========="); + } else { + responseObj.put("result_code", 3333); + responseObj.put("error_msg","DEBIT_INSERT_ERROR"); + log.error(LOG_PREFIX+ "::DEBIT_INSERT_ERROR"); + log.error(LOG_PREFIX+ "::========== ISSUE_END =========="); + } + + return responseObj; + } + + private JSONObject callReserve(int bfCash, TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callReserve::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== RESERVE_START =========="); + + int debitCnt = betDao.getBetinfoCheckByBetId(tripleVO.getBetId()); + + if(debitCnt >= 1) { + int amount = Math.abs(tripleVO.getCredit()); + + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + log.info(LOG_PREFIX+ "::BF_BALANCE::" + bfCashB.longValue()); + log.info(LOG_PREFIX+ "::RESERVE_AMOUNT::" + amount); + log.info(LOG_PREFIX+ "::AF_BALANCE::" + afCashB.longValue()); + + //asyncService.depositBalanceAsync(tripleVO); + //log.info(LOG_PREFIX+ "::depositBalanceAsync::Call"); + + if(amount != 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + } + + Long betIdx = betDao.getBetIdxByBetId(tripleVO.getBetId()); + if(betIdx != null) { + if(amount != 0) { + asyncService.updateSportBetReserve(tripleVO, betIdx); + } + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + log.info(LOG_PREFIX+ "::========== RESERVE_END =========="); + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::========== RESERVE_END =========="); + } + + return responseObj; + } + + private JSONObject callWin(int bfCash, TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callWin::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== CREDIT_START =========="); + + int debitCnt = betDao.getBetinfoCheckByBetId(tripleVO.getBetId()); + int creditCnt = betDao.getTripleCreditCheckByTranId(tripleVO.getTranId()); + + int amount = Math.abs(tripleVO.getCredit()); + + if(creditCnt != 0) { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","WIN_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::WIN_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::========== CREDIT_END =========="); + return responseObj; + } + + if(debitCnt >= 1) { + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + //asyncService.depositBalanceAsync(tripleVO); + //log.info(LOG_PREFIX+ "::depositBalanceAsync::Call"); + int result = betDao.insertTripleTxnData(tripleVO); + log.info(LOG_PREFIX+ "::insertTripleTxnData::result::" + result); + + // BetEnd Proc + if(result > 0) { + int betWinAmt = (int) tripleVO.getCredit(); + + if(betWinAmt > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(betWinAmt)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + } + + Long betIdx = betDao.getBetIdxByBetId(tripleVO.getBetId()); + if(betIdx != null) { + asyncService.updateSportBetCredit(tripleVO, betIdx); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + log.info(LOG_PREFIX+ "::========== CREDIT_END =========="); + + } else { + responseObj.put("result_code", 4444); + responseObj.put("error_msg","CREDIT_INSERT_ERROR"); + log.error(LOG_PREFIX+ "::CREDIT_INSERT_ERROR"); + log.error(LOG_PREFIX+ "::========== CREDIT_END =========="); + } + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::========== CREDIT_END =========="); + } + + return responseObj; + } + + private JSONObject callCancel(int bfCash, TripleVO tripleVO) { + final String LOG_PREFIX = "#-SPORT::callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::callCancel::::"; + + JSONObject responseObj = new JSONObject(); + log.info(LOG_PREFIX+ "::========== CANCEL_START =========="); + + int isCancleCnt = betDao.getTripleIsCancelCheck(tripleVO.getBetId()); + if(isCancleCnt != 0) { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","CANCEL_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::CANCEL_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "::========== CANCEL_END =========="); + return responseObj; + } + + int amount = Math.abs(tripleVO.getCredit()); + + int debitCnt = betDao.getBetinfoCheckByBetId(tripleVO.getBetId()); + + if(debitCnt != 0) { + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + log.info(LOG_PREFIX+ "::BF_BALANCE::" + bfCashB.longValue()); + log.info(LOG_PREFIX+ "::RESERVE_AMOUNT::" + amount); + log.info(LOG_PREFIX+ "::AF_BALANCE::" + afCashB.longValue()); + + tripleVO.setIsCancel(1); + //asyncService.depositBalanceAsync(tripleVO); + //log.info(LOG_PREFIX+ "::depositBalanceAsync::Call"); + int result = betDao.insertTripleTxnData(tripleVO); + log.info(LOG_PREFIX+ "::insertTripleTxnData::result::" + result); + + if(result > 0) { + Long betIdx = betDao.getBetIdxByBetId(tripleVO.getBetId()); + + if(betIdx != null) { + HashMap param = new HashMap(); + param.put("betIdx", betIdx); + param.put("betStatus", "CANCEL"); + param.put("betWinAmt", Integer.toString(amount)); + int resultBet = betDao.betCancelTriple(param); + log.info(LOG_PREFIX+ "::betCancelTriple::result::" + resultBet); + + int resultBetOld = betDao.betCancelOldTriple(param); + log.info(LOG_PREFIX+ "::betCancelOldTriple::result::" + resultBetOld); + + if(resultBet > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + + asyncService.updateSportBetCancel(tripleVO, betIdx); + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + log.info(LOG_PREFIX+ "::========== CANCEL_END =========="); + } + } + + } else { + responseObj.put("result_code", 5555); + responseObj.put("error_msg","CANCEL_INSERT_ERROR"); + log.error(LOG_PREFIX+ "::CANCEL_INSERT_ERROR"); + log.error(LOG_PREFIX+ "::========== CANCEL_END =========="); + } + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::BET_DOES_NOT_EXIST"); + log.error(LOG_PREFIX+ "::========== CANCEL_END =========="); + } + + return responseObj; + } + + @Override + public int updatePurchaseId(TriplePurchaseId tripleVO) { + int result = 0; + final String LOG_PREFIX = "#-SPORT::callPurchaseId::"+tripleVO.getBetId()+"::"+tripleVO.getPurchaseId()+"::"; + + try { + result = betDao.updatePurchaseId(tripleVO); + log.info(LOG_PREFIX+ "updatePurchaseId::result::"+result); + } catch(Exception e) { + result = -1; + log.error(LOG_PREFIX+ "UNKNOWN_ERROR"); + log.error(LOG_PREFIX+ "ERROR::" + e.getMessage()); + } + + return result; + } + +} diff --git a/src/main/java/com/bb/service/SuperService.java b/src/main/java/com/bb/service/SuperService.java new file mode 100644 index 0000000..e7e2390 --- /dev/null +++ b/src/main/java/com/bb/service/SuperService.java @@ -0,0 +1,18 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; + +import com.bb.model.MemberDetail; +import com.bb.model.MemberListSearch; +import com.bb.model.SiteSearch; + +public interface SuperService { + + int getCompanyListCnt(@Valid MemberListSearch search); + + List getCompanyList(@Valid MemberListSearch search); + +} diff --git a/src/main/java/com/bb/service/SuperServiceImpl.java b/src/main/java/com/bb/service/SuperServiceImpl.java new file mode 100644 index 0000000..91532ad --- /dev/null +++ b/src/main/java/com/bb/service/SuperServiceImpl.java @@ -0,0 +1,36 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.bb.dao.CashDao; +import com.bb.dao.SuperDao; +import com.bb.dao.UserDao; +import com.bb.model.MemberDetail; +import com.bb.model.MemberListSearch; +import com.bb.model.SiteSearch; +@RequiredArgsConstructor +@Service +public class SuperServiceImpl implements SuperService { + + private final SuperDao superDao; + + @Override + public int getCompanyListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return superDao.getCompanyListCnt(search); + } + + @Override + public List getCompanyList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return superDao.getCompanyList(search); + } + +} diff --git a/src/main/java/com/bb/service/TripleService.java b/src/main/java/com/bb/service/TripleService.java new file mode 100644 index 0000000..1ab18d1 --- /dev/null +++ b/src/main/java/com/bb/service/TripleService.java @@ -0,0 +1,33 @@ +package com.bb.service; + +import org.springframework.web.client.ResourceAccessException; + +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.Member; +import com.bb.model.TripleAuthInfo; +import com.bb.model.TripleSbVO; +import com.bb.model.TripleVO; + +import net.sf.json.JSONObject; + +public interface TripleService { + + JSONObject betProc(Member search, TripleVO tripleVO); + + String getBetDetail(ApiVendorCompInfo tripleVendor, String betId) throws ResourceAccessException, Exception; + + String getBetDetailTest(ApiVendorCompInfo tripleVendor, String betId) throws ResourceAccessException, Exception; + + org.codehaus.jettison.json.JSONObject getBetDetail2(ApiVendorCompInfo tripleVendor, String betId) throws ResourceAccessException, Exception; + + org.codehaus.jettison.json.JSONObject getUserBalance(ApiVendorCompInfo apiVendor, String vendorKey, String tripleUsername) throws ResourceAccessException, Exception; + + org.codehaus.jettison.json.JSONObject depositBalance(ApiVendorCompInfo apiVendor, String vendor, TripleAuthInfo tripleMember, int amount) throws ResourceAccessException, Exception; + + org.codehaus.jettison.json.JSONObject withdrawBalance(ApiVendorCompInfo apiVendor, String vendor, TripleAuthInfo tripleMember) throws ResourceAccessException, Exception; + + JSONObject betProcSlot(final String LOG_PREFIX, Member search, TripleVO tripleVO); + + org.codehaus.jettison.json.JSONObject getTripleCreditInfo(ApiVendorCompInfo apiVendor) throws ResourceAccessException, Exception; + +} diff --git a/src/main/java/com/bb/service/TripleServiceImpl.java b/src/main/java/com/bb/service/TripleServiceImpl.java new file mode 100644 index 0000000..885520e --- /dev/null +++ b/src/main/java/com/bb/service/TripleServiceImpl.java @@ -0,0 +1,1762 @@ +package com.bb.service; + +import java.math.BigDecimal; +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.util.UriComponentsBuilder; + +import com.bb.dao.BetDao; +import com.bb.dao.CashDao; +import com.bb.dao.CommonDao; +import com.bb.dao.UserDao; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.BetAutoLoseVO; +import com.bb.model.CodeSearch; +import com.bb.model.Member; +import com.bb.model.MemberSearch; +import com.bb.model.TripleAuthInfo; +import com.bb.model.TripleSbVO; +import com.bb.model.TripleVO; +import com.bb.util.RandomRolling; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import reactor.core.publisher.Mono; + +@Slf4j +@RequiredArgsConstructor +@Service +public class TripleServiceImpl implements TripleService { + + private final UserDao userDao; + + private final BetDao betDao; + + private final CashDao cashDao; + + private final CommonDao commonDao; + + private final AsyncTripleService asyncService; + + //@Autowired + //RestTemplate restTemplate; + + @Autowired + WebClient webClient; + + + @Override + public JSONObject betProc(Member search, TripleVO tripleVO) { + JSONObject responseObj = new JSONObject(); + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::"+tripleVO.getTranType()+"::betProc::::"; + + try { + long chs = System.currentTimeMillis(); + HashMap memberVo = userDao.getMemberMap(search); + long che = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff = (chs - che)/1000.0; //두 시간에 차 계산 + if(diff < -1.3) { + log.error(LOG_PREFIX+ "[### userDao.getMemberMap() : " + String.format("%.3f", diff) + " ###]"); + responseObj.put("result_code", 44); + responseObj.put("error_msg","TIMEOUT_ERROR"); + log.error(LOG_PREFIX+ "[### userDao.getMemberMap() TIMEOUT_ERROR ] "); + return responseObj; + } + int bfCash = Integer.parseInt(memberVo.get("cashAmt").toString()); + + int siteIdx = (int) memberVo.get("siteIdx"); + int memIdx = (int) memberVo.get("memIdx"); + tripleVO.setSiteIdx(siteIdx); + tripleVO.setMemIdx(memIdx); + + tripleVO.setSiteId(memberVo.get("siteId").toString()); + tripleVO.setMemId(memberVo.get("memId").toString()); + tripleVO.setMemLevel(memberVo.get("memLevel").toString()); + tripleVO.setBetYn(memberVo.get("betYn").toString()); + tripleVO.setMemLockYn(memberVo.get("memLockYn").toString()); + tripleVO.setSymLock(memberVo.get("symLock").toString()); + tripleVO.setIsBiPushYn(memberVo.get("isBiPushYn").toString()); + + if(tripleVO.getTranType().equals("debit") && tripleVO.getIsCancel() == 0) { + // Debit OK + long startTime = System.currentTimeMillis(); + + responseObj = callBet(bfCash, tripleVO); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[### callBet diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + } else if(tripleVO.getTranType().equals("debit") && tripleVO.getIsCancel() == 1) { + // Debit Cancel + long startTime = System.currentTimeMillis(); + + if(tripleVO.getVendorIdx() == 4) { + responseObj = callAutoCancel(bfCash, tripleVO); + } else if(tripleVO.getVendor().equals("cncp") || tripleVO.getVendor().equals("vinus")) { + responseObj = callCancelMega(bfCash, tripleVO); + } else { + responseObj = callCancel(bfCash, tripleVO); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[### callCancel[Debit] diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + } else if(tripleVO.getTranType().equals("credit") && tripleVO.getIsCancel() == 0 && tripleVO.getIsBonus() == 0) { + // Credit OK + long startTime = System.currentTimeMillis(); + + responseObj = callWin(bfCash, tripleVO); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[### callWin diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + } else if(tripleVO.getTranType().equals("credit") && tripleVO.getIsCancel() == 1 && tripleVO.getIsBonus() == 0) { + // Credit Cancel + long startTime = System.currentTimeMillis(); + + if(tripleVO.getVendor().equals("cncp") || tripleVO.getVendor().equals("vinus")) { + responseObj = callCancelMega(bfCash, tripleVO); + } else { + responseObj = callCancel(bfCash, tripleVO); + } + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[### callCancel[Credit] diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + } else if(tripleVO.getTranType().equals("adjust")) { + // Adjust OK + long startTime = System.currentTimeMillis(); + + responseObj = callWin(bfCash, tripleVO); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[### callWin diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + } else if(tripleVO.getTranType().equals("tip")) { + // Tip OK + long startTime = System.currentTimeMillis(); + + responseObj = callTip(bfCash, tripleVO); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[### callWin diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + } else if(tripleVO.getTranType().equals("credit_wait")) { + // credit_wait + long startTime = System.currentTimeMillis(); + + responseObj.put("result_code", 0); + responseObj.put("balance", bfCash); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[### credit_wait diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + } else if(tripleVO.getTranType().equals("other")) { + // Other + long startTime = System.currentTimeMillis(); + + responseObj = callOther(bfCash, tripleVO); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[### callBonus diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + } else { + // Bonus + long startTime = System.currentTimeMillis(); + + responseObj = callBonus(bfCash, tripleVO); + + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + if(diffTime < -1.5) { + log.error(LOG_PREFIX+ "[### callBonus diffTime : " + String.format("%.3f", diffTime) + " ###]"); + } + } + + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("error_msg","UNKNOWN_ERROR"); + log.error("#-betProc::" + e.getMessage()); + } + + return responseObj; + } + + + private JSONObject callBet(int bfCash, TripleVO tripleVO) throws Exception { + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::callBet::::"; + log.info(LOG_PREFIX+ "START"); + + JSONObject responseObj = new JSONObject(); + + if(tripleVO.getBetYn().equals("N") || tripleVO.getMemLockYn().equals("Y") || tripleVO.getSymLock().equals("Y")) { + if(tripleVO.getSymLock().equals("Y")) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tripleVO.getSiteId()); + lockParam.put("memId", tripleVO.getMemId()); + int lockResult = userDao.setUserLock(lockParam); + log.error(LOG_PREFIX+ "setUserLock::result::" + lockResult); + } + + responseObj.put("result_code", 1005); + responseObj.put("balance", bfCash); + responseObj.put("error_msg","THIS_USER_BETTING_LOCK"); + log.error(LOG_PREFIX+ "[THIS_USER_BETTING_LOCK ERROR]"); + return responseObj; + } + + long chs1 = System.currentTimeMillis(); + int debitCnt = betDao.getTripleDebitCheckByTranId(tripleVO.getTranId()); + long che1 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff1 = (chs1 - che1)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "[### betDao.getTripleDebitCheckByTranId() : " + String.format("%.3f", diff1) + " ###]"); + if(diff1 < -1.0){ + log.error(LOG_PREFIX+ "[### betDao.getTripleDebitCheckByTranId() : " + String.format("%.3f", diff1) + " ###]"); + responseObj.put("result_code", 44); + responseObj.put("balance", bfCash); + responseObj.put("error_msg","TIMEOUT_ERROR"); + log.error(LOG_PREFIX+ "[### betDao.getTripleDebitCheckByTranId() TIMEOUT_ERROR ]"); + return responseObj; + + } + int amount = Math.abs(tripleVO.getDebit()); + + if(debitCnt > 0) { + responseObj.put("result_code", 98); + responseObj.put("balance", bfCash); + responseObj.put("error_msg","BET_ALREADY_SETTLED"); + log.error(LOG_PREFIX+ "[BET_ALREADY_SETTLED ERROR]"); + return responseObj; + } + + /* + MemberSearch search = new MemberSearch(); + search.setSiteId(tripleVO.getSiteId()); + search.setMemId(tripleVO.getMemId()); + long startTime = System.currentTimeMillis(); + bfCash = cashDao.getMemCashForUpdate(search); + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("getMemCashForUpdate::["+tripleVO.getBetId()+"]::diffTime:" + String.format("%.3f", diffTime)); + */ + + if(bfCash == 0 || bfCash < amount) { + // 유저머니가 없는경우 code 80 msg : INSUFFICIENT_FUNDS + responseObj.put("result_code", 80); + responseObj.put("balance", bfCash); + responseObj.put("error_msg","INSUFFICIENT_FUNDS"); + log.error(LOG_PREFIX+ "[INSUFFICIENT_FUNDS ERROR]"); + return responseObj; + } + + + HashMap betLimitInfo = betDao.getSiteBetLimitInfo(tripleVO); + int maxBetAmt = Integer.parseInt(betLimitInfo.get("betAmtMax").toString()); + if(amount > maxBetAmt) { + // 최대 배팅금액 초과시 에러 리턴 + responseObj.put("result_code", 81); + responseObj.put("balance", bfCash); + responseObj.put("error_msg","MAX_BET_OVER"); + log.error(LOG_PREFIX+ "[MAX_BET_OVER ERROR]"); + return responseObj; + } + + + // Bet Proc + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.subtract(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + //asyncService.withdrawBalanceAsync(tripleVO); + + long chs2 = System.currentTimeMillis(); + int result = betDao.insertTripleTxnData(tripleVO); + long che2 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff2 = (chs2 - che2)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "[### betDao.insertTripleTxnData() : " + String.format("%.3f", diff2) + " ###]"); + if(diff2 < -1.0){ + log.error(LOG_PREFIX+ "[### betDao.insertTripleTxnData() : " + String.format("%.3f", diff2) + " ###]"); + responseObj.put("result_code", 44); + responseObj.put("error_msg","TIMEOUT_ERROR"); + log.error(LOG_PREFIX+ "[### betDao.insertTripleTxnData() TIMEOUT_ERROR ]"); + return responseObj; + } + + if(result > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + int betAmt = tripleVO.getDebit(); + int cashAmt = betAmt * -1; + memCashUpdParam.put("cashAmt", Integer.toString(cashAmt)); + memCashUpdParam.put("changeFlag", "N"); + long chs4 = System.currentTimeMillis(); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "[### betDao.updateUserCashTriple() : " + String.format("%.3f", diff4) + " ###]"); + if(diff4 < -1.0) log.error(LOG_PREFIX+ "[### betDao.updateUserCashTriple() : " + String.format("%.3f", diff4) + " ###]"); + + long chs3 = System.currentTimeMillis(); + Long betIdx = betDao.getBetIdxByGameIdx(tripleVO.getBetId()); + long che3 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff3 = (chs3 - che3)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "[### betDao.getBetIdxByGameIdx() : " + String.format("%.3f", diff3) + " ###]"); + + if(betIdx != null) { + //이미 베팅한거에 추가 배팅 건 + asyncService.updateBetDebit(tripleVO, betIdx); + + } else { + asyncService.insertBetDebit(tripleVO); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + log.info(LOG_PREFIX+ "SUCC!!!!"); + + } else { + responseObj.put("result_code", 3333); + responseObj.put("error_msg","DEBIT_ERROR"); + } + + return responseObj; + } + + + private JSONObject callWin(int bfCash, TripleVO tripleVO) throws Exception { + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::callWin::::"; + log.info(LOG_PREFIX+ "START"); + JSONObject responseObj = new JSONObject(); + + long chs1 = System.currentTimeMillis(); + int debitCnt = betDao.getTripleDebitCheckByBetId(tripleVO.getBetId()); + long che1 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff1 = (chs1 - che1)/1000.0; //두 시간에 차 계산 + if(diff1 < -1.0) log.error(LOG_PREFIX+ "[### betDao.getTripleDebitCheckByBetId() : " + String.format("%.3f", diff1) + " ###]"); + + long chs2 = System.currentTimeMillis(); + int creditCnt = betDao.getTripleCreditCheckByTranId(tripleVO.getTranId()); + long che2 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff2 = (chs2 - che2)/1000.0; //두 시간에 차 계산 + if(diff2 < -1.0) log.error(LOG_PREFIX+ "[### betDao.getTripleCreditCheckByTranId() : " + String.format("%.3f", diff2) + " ###]"); + + long chs3 = System.currentTimeMillis(); + int creditCntByBetId = betDao.getTripleCreditCheckByBetId(tripleVO.getBetId()); + long che3 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff3 = (chs3 - che3)/1000.0; //두 시간에 차 계산 + if(diff3 < -1.0) log.error(LOG_PREFIX+ "[### betDao.getTripleCreditCheckByBetId() : " + String.format("%.3f", diff3) + " ###]"); + + + int amount = tripleVO.getCredit(); + + if(debitCnt >= 1) { + if(creditCnt != 0) { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","WIN_ALREADY_SETTLED"); + return responseObj; + } + + /* + MemberSearch search = new MemberSearch(); + search.setSiteId(tripleVO.getSiteId()); + search.setMemId(tripleVO.getMemId()); + long startTime = System.currentTimeMillis(); + bfCash = cashDao.getMemCashForUpdate(search); + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("getMemCashForUpdate::["+tripleVO.getBetId()+"]::diffTime:" + String.format("%.3f", diffTime)); + */ + + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + long chs4 = System.currentTimeMillis(); + int result = betDao.insertTripleTxnData(tripleVO); + long che4 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff4 = (chs4 - che4)/1000.0; //두 시간에 차 계산 + if(diff4 < -1.0) log.error(LOG_PREFIX+ "[### betDao.insertTripleTxnData() : " + String.format("%.3f", diff4) + " ###]"); + + // BetEnd Proc + if(result > 0) { + int betWinAmt = (int) tripleVO.getCredit(); + + if(betWinAmt != 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(betWinAmt)); + memCashUpdParam.put("changeFlag", "N"); + long chs6 = System.currentTimeMillis(); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + long che6 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff6 = (chs6 - che6)/1000.0; //두 시간에 차 계산 + if(diff6 < -1.0) log.error(LOG_PREFIX+ "[### betDao.updateUserCashTriple() : " + String.format("%.3f", diff6) + " ###]"); + } + + long chs5 = System.currentTimeMillis(); + Long betIdx = betDao.getBetIdxByGameIdx(tripleVO.getBetId()); + long che5 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff5 = (chs5 - che5)/1000.0; //두 시간에 차 계산 + if(diff5 < -1.0) log.error(LOG_PREFIX+ "[### betDao.getBetIdxByGameIdx() : " + String.format("%.3f", diff5) + " ###]"); + + if(betIdx != null) { + if(creditCntByBetId == 0 || betWinAmt != 0) { + // 배팅결과가 있는데 #AUTOLOSE가 들어온 경우 거르기 + asyncService.updateBetCredit(tripleVO, betIdx); + } + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + log.info(LOG_PREFIX+ "SUCC!!!!"); + + } else { + responseObj.put("result_code", 4444); + responseObj.put("error_msg","CREDIT_ERROR"); + } + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + /* + if(creditCnt == 0) { + tripleVO.setBeforeCash((long) bfCash); + int result = betDao.insertTripleTxnData(tripleVO); + + int betWinAmt = (int) tripleVO.getCredit(); + if(betWinAmt != 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(betWinAmt)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + log.info("### Triple API Controller ### - callWin() imsi Credit SUCC!!!!"); + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + } + */ + } + + return responseObj; + } + + + private JSONObject callCancel(int bfCash, TripleVO tripleVO) throws Exception { + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::callCancel::::"; + log.info(LOG_PREFIX+ "START"); + JSONObject responseObj = new JSONObject(); + + int debitCnt = 0; + // 배팅 취소 처리 + debitCnt = betDao.getTripleDebitCheckByBetId(tripleVO.getBetId()); + if(debitCnt != 0) { + int isCancleCnt = betDao.getTripleIsCancelCheck(tripleVO.getBetId()); + if(isCancleCnt == 0) { + int amount = 0; + if(tripleVO.getTranType().equals("debit")) { + amount = Math.abs(tripleVO.getDebit()); + } else { + amount = Math.abs(tripleVO.getCredit()); + } + /* + MemberSearch search = new MemberSearch(); + search.setSiteId(tripleVO.getSiteId()); + search.setMemId(tripleVO.getMemId()); + long startTime = System.currentTimeMillis(); + bfCash = cashDao.getMemCashForUpdate(search); + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("getMemCashForUpdate::["+tripleVO.getBetId()+"]::diffTime:" + String.format("%.3f", diffTime)); + */ + + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + log.info(LOG_PREFIX+ "CANCEL bfCashB: " + bfCashB.intValue()); + log.info(LOG_PREFIX+ "CANCEL afCashB: " + afCashB.intValue()); + + int result = betDao.insertTripleTxnData(tripleVO); + if(result > 0) { + Long betIdx = betDao.getBetIdxByGameIdx(tripleVO.getBetId()); + if(tripleVO.getDetail() != null) { + tripleVO.setDetailStr(tripleVO.getDetail().toString()); + } + + if(betIdx != null) { + HashMap param = new HashMap(); + param.put("betIdx", betIdx); + param.put("betStatus", "CANCEL"); + param.put("betWinAmt", Integer.toString(amount)); + param.put("data", tripleVO.getDetailStr()); + + int resultBet = betDao.betCancelTriple(param); +// int resultBetMap = betDao.betMapCancelTriple(param); + if(resultBet > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + + log.info(LOG_PREFIX+ "updateUserCashTriple() : " + memCashResult); + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + } else { + responseObj.put("result_code", 5555); + responseObj.put("error_msg","CANCEL_ERROR"); + } + } else { + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + } + + } else { + responseObj.put("result_code", 5555); + responseObj.put("error_msg","CANCEL_ERROR"); + } + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","CANCEL_ALREADY_SETTLED"); + } + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + /* + int isCancleCnt = betDao.getTripleIsCancelCheck(tripleVO.getBetId()); + if(isCancleCnt == 0) { + int amount = 0; + if(tripleVO.getTranType().equals("debit")) { + amount = Math.abs(tripleVO.getDebit()); + } else { + amount = Math.abs(tripleVO.getCredit()); + } + + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + log.info(LOG_PREFIX+ "CANCEL bfCashB: " + bfCashB.intValue()); + log.info(LOG_PREFIX+ "CANCEL afCashB: " + afCashB.intValue()); + + int result = betDao.insertTripleTxnData(tripleVO); + + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + } + */ + } + + return responseObj; + } + + + private JSONObject callCancelMega(int bfCash, TripleVO tripleVO) { + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::callCancelMega::::"; + log.info(LOG_PREFIX+ "START"); + JSONObject responseObj = new JSONObject(); + + int debitCnt = 0; + // 배팅 취소 처리 + debitCnt = betDao.getTripleDebitCheckByBetId(tripleVO.getBetId()); + if(debitCnt != 0) { + int isCancleCnt = betDao.getTripleCreditCheckByTranId(tripleVO.getTranId()); + if(isCancleCnt == 0) { + int amount = 0; + BigDecimal bfCashB = null; + BigDecimal afCashB = null; + if(tripleVO.getTranType().equals("credit")) { + // 배팅 취소 > 유저 잔액 증가 + amount = Math.abs(tripleVO.getCredit()); + + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + BigDecimal amountB = new BigDecimal(""+amount); + + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + // 당첨 취소 > 유저 잔액 감소 + amount = Math.abs(tripleVO.getDebit()); + + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + BigDecimal amountB = new BigDecimal(""+amount); + + afCashB = bfCashB.subtract(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } + + log.info(LOG_PREFIX+ "CANCEL bfCashB: " + bfCashB.intValue()); + log.info(LOG_PREFIX+ "CANCEL afCashB: " + afCashB.intValue()); + + int result = betDao.insertTripleTxnData(tripleVO); + if(result > 0) { + Long betIdx = betDao.getBetIdxByGameIdx(tripleVO.getBetId()); + + if(betIdx != null) { + if(tripleVO.getTranType().equals("credit")) { + // 배팅 취소 + HashMap param = new HashMap(); + param.put("betIdx", betIdx); + param.put("betStatus", "CANCEL"); + int cancelBetAmt = amount * -1; + param.put("betAmt", Integer.toString(cancelBetAmt)); + param.put("betWinAmt", "0"); + param.put("afMoney", Long.toString(tripleVO.getAfterCash().longValue())); + + int resultBet = betDao.betCancelMega(param); + if(resultBet > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + + log.info(LOG_PREFIX+ "updateUserCashTriple() : " + memCashResult); + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + } else { + responseObj.put("result_code", 5555); + responseObj.put("error_msg","CANCEL_ERROR"); + } + } else { + // 당첨 취소 + HashMap param = new HashMap(); + param.put("betIdx", betIdx); + param.put("betStatus", "CANCEL"); + param.put("betAmt", "0"); + int cancelWinAmt = amount * -1; + param.put("betWinAmt", Integer.toString(cancelWinAmt)); + param.put("afMoney", Long.toString(tripleVO.getAfterCash().longValue())); + + int resultBet = betDao.betCancelMega(param); + if(resultBet > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + amount = amount * -1; + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + + log.info(LOG_PREFIX+ "updateUserCashTriple() : " + memCashResult); + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + } else { + responseObj.put("result_code", 5555); + responseObj.put("error_msg","CANCEL_ERROR"); + } + } + + } else { + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + } + + } else { + responseObj.put("result_code", 5555); + responseObj.put("error_msg","CANCEL_ERROR"); + } + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","CANCEL_ALREADY_SETTLED"); + } + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + /* + int isCancleCnt = betDao.getTripleIsCancelCheck(tripleVO.getBetId()); + if(isCancleCnt == 0) { + int amount = 0; + BigDecimal bfCashB = null; + BigDecimal afCashB = null; + if(tripleVO.getTranType().equals("debit")) { + amount = Math.abs(tripleVO.getDebit()); + + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + BigDecimal amountB = new BigDecimal(""+amount); + + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + amount = Math.abs(tripleVO.getCredit()); + + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + BigDecimal amountB = new BigDecimal(""+amount); + + afCashB = bfCashB.subtract(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } + + log.info(LOG_PREFIX+ "CANCEL bfCashB: " + bfCashB.intValue()); + log.info(LOG_PREFIX+ "CANCEL afCashB: " + afCashB.intValue()); + + int result = betDao.insertTripleTxnData(tripleVO); + + if(tripleVO.getTranType().equals("debit")) { + // 배팅 취소 + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + } else { + // 당첨 취소 + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + amount = amount * -1; + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + } + */ + } + + return responseObj; + } + + + private JSONObject callAutoCancel(int bfCash, TripleVO tripleVO) throws Exception { + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::callAutoCancel::::"; + log.info(LOG_PREFIX+ "START"); + JSONObject responseObj = new JSONObject(); + + int debitCnt = 0; + // 배팅 취소 처리 + debitCnt = betDao.getTripleDebitCheckByTranId(tripleVO.getTranId()); + if(debitCnt != 0) { + int isCancleCnt = betDao.getTripleAutoCancelCheck(tripleVO.getTranId()); + if(isCancleCnt == 0) { + int amount = Math.abs(tripleVO.getCredit()); + /* + MemberSearch search = new MemberSearch(); + search.setSiteId(tripleVO.getSiteId()); + search.setMemId(tripleVO.getMemId()); + long startTime = System.currentTimeMillis(); + bfCash = cashDao.getMemCashForUpdate(search); + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("getMemCashForUpdate::["+tripleVO.getBetId()+"]::diffTime:" + String.format("%.3f", diffTime)); + */ + + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + + BigDecimal amountB = new BigDecimal(""+amount); + + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + + log.info(LOG_PREFIX+ "AUTO_CANCEL bfCashB: " + bfCashB.intValue()); + log.info(LOG_PREFIX+ "AUTO_CANCEL afCashB: " + afCashB.intValue()); + + int result = betDao.updateTripleTxnData(tripleVO); + if(result > 0) { + Long betIdx = betDao.getBetIdxByGameIdx(tripleVO.getBetId()); + if(betIdx != null) { + HashMap param = new HashMap(); + param.put("betIdx", betIdx); + param.put("betAmt", amount); + + int resultBet = betDao.betAutoCancelTriple(param); + if(resultBet > 0) { + log.info("## Triple API ## callAutoCancel() ["+tripleVO.getBetId()+"]["+betIdx+"] - betAutoCancelTriple : " + resultBet); + + HashMap cashUpdParam = new HashMap(); + cashUpdParam.put("betIdx", betIdx); + cashUpdParam.put("cashType", "-9"); + cashUpdParam.put("memId", tripleVO.getMemId()); + cashUpdParam.put("siteid", tripleVO.getSiteId()); + int cashAmt = amount; + cashUpdParam.put("cashAmt", Integer.toString(cashAmt)); + int cashResult = betDao.updateCashInfo(cashUpdParam); + log.info("## Triple API ## callAutoCancel() ["+tripleVO.getBetId()+"]["+betIdx+"] - updateCashInfo : " + cashResult); + + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + log.info(LOG_PREFIX+ "updateUserCashTriple() : " + memCashResult); + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + } else { + responseObj.put("result_code", 5555); + responseObj.put("error_msg","CANCEL_ERROR"); + } + } else { + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + } + + } else { + responseObj.put("result_code", 5555); + responseObj.put("error_msg","CANCEL_ERROR"); + } + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","CANCEL_ALREADY_SETTLED"); + } + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 99); + responseObj.put("error_msg","BET_DOES_NOT_EXIST"); + } + + return responseObj; + } + + + private JSONObject callOther(int bfCash, TripleVO tripleVO) throws Exception { + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::callOther::::"; + log.info(LOG_PREFIX+ "START"); + + JSONObject responseObj = new JSONObject(); + int isBonusCnt = betDao.getTripleDebitCheckByTranId(tripleVO.getTranId()); + if(isBonusCnt == 0) { + int amountD = tripleVO.getDebit(); + int amountC = tripleVO.getCredit(); + + int amount = 0; + if(amountD != 0) { + amount = amountD; + } else { + amount = amountC; + } + + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + BigDecimal amountB = new BigDecimal(""+amount); + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + log.info(LOG_PREFIX+ "BONUS bfCashB: " + bfCashB.intValue()); + log.info(LOG_PREFIX+ "BONUS afCashB: " + afCashB.intValue()); + + int result = betDao.insertTripleTxnData(tripleVO); + if(result > 0) { + HashMap param = new HashMap(); + param.put("betIdx", 0); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("betType", "triple"); + + String category = ""; + String vendorCode = ""; + CodeSearch codeSrch = new CodeSearch(); + codeSrch.setMasterCode("kplay"); + codeSrch.setTripleCode(tripleVO.getVendorIdx()); + HashMap code = commonDao.getCode(codeSrch); + if(code != null) { + category = code.get("groupCode").toString(); + param.put("gameCategory", category); + + vendorCode = code.get("code").toString(); + param.put("vendorCode", vendorCode); + } else { + category = "undefind"; + param.put("gameCategory", category); + + vendorCode = "undefind"; + param.put("vendorCode", vendorCode); + } + param.put("betId", tripleVO.getBetId()); + param.put("gameName", tripleVO.getGameKey()); + param.put("betAmt", Integer.toString(Math.abs(amountD))); + param.put("betRate", "1"); + param.put("betWinAmt", Integer.toString(Math.abs(amountC))); + param.put("betBonus", "1"); + param.put("betCnt", "1"); + param.put("betResults", "PASS"); + param.put("betStatus", "BONUSEND"); + param.put("bfMoney", Long.toString(tripleVO.getBeforeCash())); + param.put("afMoney", Long.toString(tripleVO.getAfterCash())); + param.put("regId", tripleVO.getMemId()); + param.put("updId", tripleVO.getMemId()); + param.put("updDate", ""); + param.put("regDate", ""); + param.put("vendor", tripleVO.getVendor()); + String biPushYn = "N"; + param.put("biPushYn", biPushYn); + + log.info(LOG_PREFIX+ "Proc betinfo, betmap start"); + try { + betDao.insertBetBonus(param); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate betId: " + tripleVO.getTranId()); + } + log.info(LOG_PREFIX+ "Proc betinfo end betIdx: " + param.get("betIdx")); + + if(amount > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + log.info(LOG_PREFIX+ "updateUserCashTriple : " + memCashResult); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + + } else { + responseObj.put("result_code", 6666); + responseObj.put("error_msg","OTHER_ERROR"); + } + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 70); + responseObj.put("error_msg","OTHER_ALREADY_SETTLED"); + } + + return responseObj; + } + + + private JSONObject callBonus(int bfCash, TripleVO tripleVO) throws Exception { + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::callBonus::::"; + log.info(LOG_PREFIX+ "START"); + + JSONObject responseObj = new JSONObject(); + int isBonusCnt = betDao.getTripleIsBonusCheck(tripleVO.getBetId()); + if(isBonusCnt == 0) { + int amount = 0; + if(tripleVO.getTranType().equals("debit")) { + amount = Math.abs(tripleVO.getDebit()); + } else { + amount = Math.abs(tripleVO.getCredit()); + } + /* + MemberSearch search = new MemberSearch(); + search.setSiteId(tripleVO.getSiteId()); + search.setMemId(tripleVO.getMemId()); + long startTime = System.currentTimeMillis(); + bfCash = cashDao.getMemCashForUpdate(search); + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.error("getMemCashForUpdate::["+tripleVO.getBetId()+"]::diffTime:" + String.format("%.3f", diffTime)); + */ + + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + BigDecimal amountB = new BigDecimal(""+amount); + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.add(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + log.info(LOG_PREFIX+ "BONUS bfCashB: " + bfCashB.intValue()); + log.info(LOG_PREFIX+ "BONUS afCashB: " + afCashB.intValue()); + + int result = betDao.insertTripleTxnData(tripleVO); + if(result > 0) { + HashMap param = new HashMap(); + param.put("betIdx", 0); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("betType", "triple"); + + String category = ""; + String vendorCode = ""; + CodeSearch codeSrch = new CodeSearch(); + codeSrch.setMasterCode("kplay"); + codeSrch.setTripleCode(tripleVO.getVendorIdx()); + HashMap code = commonDao.getCode(codeSrch); + if(code != null) { + category = code.get("groupCode").toString(); + param.put("gameCategory", category); + + vendorCode = code.get("code").toString(); + param.put("vendorCode", vendorCode); + } else { + category = "undefind"; + param.put("gameCategory", category); + + vendorCode = "undefind"; + param.put("vendorCode", vendorCode); + } + param.put("betId", tripleVO.getBetId()); + param.put("gameName", tripleVO.getGameKey()); + param.put("betAmt", "0"); + param.put("betRate", "1"); + param.put("betWinAmt", Integer.toString(amount)); + param.put("betBonus", "1"); + param.put("betCnt", "1"); + param.put("betResults", "PASS"); + param.put("betStatus", "BONUSEND"); + param.put("bfMoney", Long.toString(tripleVO.getBeforeCash())); + param.put("afMoney", Long.toString(tripleVO.getAfterCash())); + param.put("regId", tripleVO.getMemId()); + param.put("updId", tripleVO.getMemId()); + param.put("updDate", ""); + param.put("regDate", ""); + param.put("vendor", tripleVO.getVendor()); + String biPushYn = "N"; + param.put("biPushYn", biPushYn); + + log.info(LOG_PREFIX+ "Proc betinfo, betmap start"); + try { + betDao.insertBetBonus(param); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate betId: " + tripleVO.getTranId()); + } + log.info(LOG_PREFIX+ "Proc betinfo end betIdx: " + param.get("betIdx")); + + if(amount > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + memCashUpdParam.put("cashAmt", Integer.toString(amount)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + log.info(LOG_PREFIX+ "updateUserCashTriple : " + memCashResult); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + + } else { + responseObj.put("result_code", 6666); + responseObj.put("error_msg","BONUS_ERROR"); + } + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 70); + responseObj.put("error_msg","PROMO_ALREADY_SETTLED"); + } + + return responseObj; + } + + + private JSONObject callTip(int bfCash, TripleVO tripleVO) throws Exception { + final String LOG_PREFIX = "#-callback::"+tripleVO.getUserId()+"::"+tripleVO.getBetId()+"::callTip::::"; + log.info(LOG_PREFIX+ "START"); + + JSONObject responseObj = new JSONObject(); + int isBonusCnt = betDao.getTripleIsBonusCheck(tripleVO.getBetId()); + if(isBonusCnt == 0) { + int amount = Math.abs(tripleVO.getDebit()); + + BigDecimal bfCashB = null; + if(tripleVO.getBeforeCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + } else { + bfCashB = new BigDecimal(""+tripleVO.getBeforeCash()); + } + BigDecimal amountB = new BigDecimal(""+amount); + BigDecimal afCashB = null; + if(tripleVO.getAfterCash() == null || tripleVO.getBeforeCash().intValue() == 0) { + afCashB = bfCashB.subtract(amountB); + tripleVO.setAfterCash(afCashB.longValue()); + } else { + afCashB = new BigDecimal(""+tripleVO.getAfterCash()); + } + log.info(LOG_PREFIX+ "TIP bfCashB: " + bfCashB.intValue()); + log.info(LOG_PREFIX+ "TIP afCashB: " + afCashB.intValue()); + + int result = betDao.insertTripleTxnData(tripleVO); + if(result > 0) { + HashMap param = new HashMap(); + param.put("betIdx", 0); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("betType", "triple"); + + String category = ""; + String vendorCode = ""; + CodeSearch codeSrch = new CodeSearch(); + codeSrch.setMasterCode("kplay"); + codeSrch.setTripleCode(tripleVO.getVendorIdx()); + HashMap code = commonDao.getCode(codeSrch); + if(code != null) { + category = code.get("groupCode").toString(); + param.put("gameCategory", category); + + vendorCode = code.get("code").toString(); + param.put("vendorCode", vendorCode); + } else { + category = "undefind"; + param.put("gameCategory", category); + + vendorCode = "undefind"; + param.put("vendorCode", vendorCode); + } + param.put("betId", tripleVO.getBetId()); + param.put("gameName", tripleVO.getGameKey()); + param.put("betAmt", Integer.toString(amount)); + param.put("betRate", "0"); + param.put("betWinAmt", "0"); + param.put("betBonus", "-2"); + param.put("betCnt", "1"); + param.put("betResults", "PASS"); + param.put("betStatus", "TIPEND"); + param.put("bfMoney", Long.toString(tripleVO.getBeforeCash())); + param.put("afMoney", Long.toString(tripleVO.getAfterCash())); + param.put("regId", tripleVO.getMemId()); + param.put("updId", tripleVO.getMemId()); + param.put("updDate", ""); + param.put("regDate", ""); + param.put("vendor", tripleVO.getVendor()); + param.put("biPushYn", "N"); + + log.info(LOG_PREFIX+ "Proc betinfo, betmap start"); + try { + betDao.insertBetBonus(param); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "Duplicate betId: " + tripleVO.getTranId()); + } + log.info(LOG_PREFIX+ "Proc betinfo end betIdx: " + param.get("betIdx")); + + if(amount > 0) { + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + int cashAmt = amount * -1; + memCashUpdParam.put("cashAmt", Integer.toString(cashAmt)); + memCashUpdParam.put("changeFlag", "N"); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + log.info(LOG_PREFIX+ "updateUserCashTriple : " + memCashResult); + } + + responseObj.put("result_code", 0); + responseObj.put("balance", tripleVO.getAfterCash().intValue()); + + } else { + responseObj.put("result_code", 6666); + responseObj.put("error_msg","TIP_ERROR"); + } + + } else { + responseObj.put("balance", bfCash); + responseObj.put("result_code", 98); + responseObj.put("error_msg","TIP_ALREADY_SETTLED"); + } + + return responseObj; + } + + + @Override + public String getBetDetail(ApiVendorCompInfo tripleVendor, String betId) throws ResourceAccessException, Exception { + String detailJson = ""; + + log.info("### Triple API getBetDetail() 배팅상세 확인 Start -###"); + + // 헤더에 토큰 세팅 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", tripleVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + // 배팅상세 API http://localhost/api/betInfo + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(tripleVendor.getApiUrl() + "/betInfo"); +// UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/api/betInfo"); + HashMap params = new HashMap(); + params.put("betId", betId); + //HttpEntity> entity = new HttpEntity<>(params, headers); + + Mono detailResMono = webClient.post() + .uri(builder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params) + .retrieve() + .bodyToMono(String.class); + + String detailRes = detailResMono.block(); // Blocking to get the response synchronously + + log.info("###- TRIPLE API getBetDetail() Request " + tripleVendor.getApiUrl() + "/betInfo" + " res : " + detailRes); + org.codehaus.jettison.json.JSONObject detailResult = new org.codehaus.jettison.json.JSONObject(detailRes); + String resultCode = detailResult.getString("resultCode"); + log.info("###- TRIPLE API getBetDetail() resultCode: " + resultCode); + if("0".equals(resultCode)) { + org.codehaus.jettison.json.JSONObject data = detailResult.getJSONObject("data"); + if(data.getString("detail").equals("betId is not exist")) { + detailJson = ""; + } else { + Object detail = data.get("detail"); + //Object detail = data; + detailJson = detail.toString(); + } + } + + return detailJson; + } + + + @Override + public String getBetDetailTest(ApiVendorCompInfo tripleVendor, String betId) throws ResourceAccessException, Exception { + String detailJson = ""; + + log.info("### Triple API getBetDetailTest() 배팅상세 확인 Start -###"); + + // 헤더에 토큰 세팅 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", tripleVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + // 배팅상세 API http://localhost/api/betInfo + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(tripleVendor.getApiUrl() + "/betInfo"); +// UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/api/betInfo"); + HashMap params = new HashMap(); + params.put("betId", betId); + //HttpEntity> entity = new HttpEntity<>(params, headers); + + Mono detailResMono = webClient.post() + .uri(builder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params) + .retrieve() + .bodyToMono(String.class); + + String detailRes = detailResMono.block(); // Blocking to get the response synchronously + + log.info("###- TRIPLE API getBetDetailTest() Request " + tripleVendor.getApiUrl() + "/betInfo" + " res : " + detailRes); + org.codehaus.jettison.json.JSONObject detailResult = new org.codehaus.jettison.json.JSONObject(detailRes); + String resultCode = detailResult.getString("resultCode"); + log.info("###- TRIPLE API getBetDetailTest() resultCode: " + resultCode); + if("0".equals(resultCode)) { + org.codehaus.jettison.json.JSONObject data = detailResult.getJSONObject("data"); + if(data.getString("detail").equals("betId is not exist")) { + detailJson = ""; + } else { + //Object detail = data.get("detail"); + Object detail = data; + detailJson = detail.toString(); + } + } + + return detailJson; + } + + + @Override + public org.codehaus.jettison.json.JSONObject getBetDetail2(ApiVendorCompInfo tripleVendor, String betId) throws ResourceAccessException, Exception { + log.info("### Triple API getBetDetail2() 배팅상세 확인 Start -###"); + org.codehaus.jettison.json.JSONObject data = null; + + // 헤더에 토큰 세팅 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", tripleVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + // 배팅상세 API http://localhost/api/betInfo + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(tripleVendor.getApiUrl() + "/betInfo"); +// UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/api/betInfo"); + HashMap params = new HashMap(); + params.put("betId", betId); + //HttpEntity> entity = new HttpEntity<>(params, headers); + + Mono detailResMono = webClient.post() + .uri(tripleVendor.getApiUrl() + "/betInfo") + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(params) + .retrieve() + .bodyToMono(String.class); + + String detailRes = detailResMono.block(); // Blocking to get the response synchronously + log.info("###- TRIPLE API getBetDetail2() Request " + tripleVendor.getApiUrl() + "/betInfo" + " res : " + detailRes); + org.codehaus.jettison.json.JSONObject detailResult = new org.codehaus.jettison.json.JSONObject(detailRes); + + String resultCode = detailResult.getString("resultCode"); + log.info("###- TRIPLE API getBetDetail2() resultCode: " + resultCode); + if("0".equals(resultCode)) { + data = detailResult.getJSONObject("data"); + } else { + data = new org.codehaus.jettison.json.JSONObject(""); + } + + return data; + } + + + @Override + public org.codehaus.jettison.json.JSONObject getUserBalance(ApiVendorCompInfo apiVendor, String vendorKey, String tripleUsername) throws ResourceAccessException, Exception { + org.codehaus.jettison.json.JSONObject balanceJson = null; + final String LOG_PREFIX = "#-TRIPLE_API::"+tripleUsername+"::getUserBalance::::"; + + log.info(LOG_PREFIX+ "### 회원 잔액조회 Start -###"); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", apiVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + UriComponentsBuilder balanceBuilder = UriComponentsBuilder.fromHttpUrl(apiVendor.getApiUrl() + "/balance"); +// UriComponentsBuilder balanceBuilder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/api" + "/balance"); + HashMap balanceParams = new HashMap(); + balanceParams.put("username", tripleUsername); + balanceParams.put("vendorKey", vendorKey); + balanceParams.put("requestKey", String.valueOf(System.currentTimeMillis())); + Mono balanceResMono = webClient.post() + .uri(balanceBuilder.toUriString()) + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(balanceParams) + .retrieve() + .bodyToMono(String.class); + + String balanceRes = balanceResMono.block(); // Blocking to get the response synchronously + balanceJson = new org.codehaus.jettison.json.JSONObject(balanceRes); + log.info(LOG_PREFIX+ "### balanceJson: " + balanceJson.toString()); + + return balanceJson; + } + + + @Override + public org.codehaus.jettison.json.JSONObject depositBalance(ApiVendorCompInfo apiVendor, String vendor, TripleAuthInfo tripleMember, int amount) throws ResourceAccessException, Exception { + org.codehaus.jettison.json.JSONObject depositJson = null; + final String LOG_PREFIX = "#-TRIPLE_API::"+tripleMember.getUsername()+"::depositBalance::::"; + + log.info(LOG_PREFIX+ "### 회원 머니충전 Start -###"); + /* + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", apiVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + UriComponentsBuilder depositBuilder = UriComponentsBuilder.fromHttpUrl(apiVendor.getApiUrl() + "/deposit"); + HashMap depositParams = new HashMap(); + depositParams.put("username", tripleMember.getUsername()); + depositParams.put("vendor", vendor); + depositParams.put("amount", Integer.toString(amount)); + depositParams.put("requestKey", String.valueOf(System.currentTimeMillis())); + HttpEntity> depositEntity = new HttpEntity<>(depositParams, headers); + + ResponseEntity depositRes = restTemplate.postForEntity(depositBuilder.toUriString(), depositEntity, String.class); + depositJson = new org.codehaus.jettison.json.JSONObject(depositRes.getBody()); + log.info(LOG_PREFIX+ "### depositJson: " + depositJson.toString()); + */ + depositJson = new org.codehaus.jettison.json.JSONObject(); + depositJson.put("resultCode", "0"); + + return depositJson; + } + + + @Override + public org.codehaus.jettison.json.JSONObject withdrawBalance(ApiVendorCompInfo apiVendor, String vendor, TripleAuthInfo tripleMember) throws ResourceAccessException, Exception { + org.codehaus.jettison.json.JSONObject withdrawJson = null; + final String LOG_PREFIX = "#-TRIPLE_API::"+tripleMember.getUsername()+"::withdrawBalance::::"; + + log.info(LOG_PREFIX+ "### 회원 머니환전 Start -###"); + /* + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", apiVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + UriComponentsBuilder withdrawBuilder = UriComponentsBuilder.fromHttpUrl(apiVendor.getApiUrl() + "/withdraw"); + HashMap withdrawParams = new HashMap(); + withdrawParams.put("username", tripleMember.getUsername()); + withdrawParams.put("vendor", vendor); + withdrawParams.put("requestKey", String.valueOf(System.currentTimeMillis())); + HttpEntity> withdrawEntity = new HttpEntity<>(withdrawParams, headers); + + ResponseEntity withdrawRes = restTemplate.postForEntity(withdrawBuilder.toUriString(), withdrawEntity, String.class); + withdrawJson = new org.codehaus.jettison.json.JSONObject(withdrawRes.getBody()); + log.info(LOG_PREFIX+ "### withdrawJson: " + withdrawJson.toString()); + */ + withdrawJson = new org.codehaus.jettison.json.JSONObject(); + withdrawJson.put("resultCode", "0"); + + return withdrawJson; + } + + + @Override + public JSONObject betProcSlot(final String LOG_PREFIX, Member search, TripleVO tripleVO) { + JSONObject responseObj = new JSONObject(); + + try { + long chs1 = System.currentTimeMillis(); + HashMap memberVo = userDao.getMemberMap(search); + long che1 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff1 = (chs1 - che1)/1000.0; //두 시간에 차 계산 + if(diff1 < -0.5) log.error(LOG_PREFIX+ "betProcSlot::[### userDao.getMemberMap() : " + String.format("%.3f", diff1) + " ###]"); + + int amount = 0; + if(tripleVO.getTranType().equals("debit")) { + amount = Math.abs(tripleVO.getDebit()); + } else { + // 당첨금 조정 또는 제한이 걸린경우 마이너스(-) 금액이 들어올 수 있음. + // Nexus 계열 혹은 EXTR(구 아너링크, 신 익스트림) 계열 + amount = tripleVO.getCredit(); + } + int bfCash = Integer.parseInt(memberVo.get("cashAmt").toString()); + int siteIdx = (int) memberVo.get("siteIdx"); + int memIdx = (int) memberVo.get("memIdx"); + tripleVO.setSiteIdx(siteIdx); + tripleVO.setMemIdx(memIdx); + tripleVO.setSiteId(memberVo.get("siteId").toString()); + tripleVO.setMemId(memberVo.get("memId").toString()); + tripleVO.setBetYn(memberVo.get("betYn").toString()); + tripleVO.setMemLockYn(memberVo.get("memLockYn").toString()); + tripleVO.setSymLock(memberVo.get("symLock").toString()); + + if(tripleVO.getTranType().equals("debit")) { + if(bfCash == 0 || bfCash < amount) { + // 유저머니가 없는경우 code 80 msg : INSUFFICIENT_FUNDS + responseObj.put("balance", bfCash); + responseObj.put("result_code", 80); + responseObj.put("error_msg","INSUFFICIENT_FUNDS"); + log.error(LOG_PREFIX+ "betProcSlot::[INSUFFICIENT_FUNDS ERROR]"); + return responseObj; + } + long chs2 = System.currentTimeMillis(); + HashMap betLimitInfo = betDao.getSiteBetLimitInfo(tripleVO); + long che2 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff2 = (chs2 - che2)/1000.0; //두 시간에 차 계산 + if(diff2 < -0.5) log.error(LOG_PREFIX+ "betProcSlot::[### betDao.getSiteBetLimitInfo() : " + String.format("%.3f", diff2) + " ###]"); + int maxBetAmt = Integer.parseInt(betLimitInfo.get("betAmtMaxSlot").toString()); + if(amount > maxBetAmt) { + // 최대 배팅금액 초과시 에러 리턴 + responseObj.put("balance", bfCash); + responseObj.put("result_code", 81); + responseObj.put("error_msg","MAX_BET_OVER"); + log.error(LOG_PREFIX+ "betProcSlot::[MAX_BET_OVER ERROR]"); + return responseObj; + } + + if(tripleVO.getBetYn().equals("N") || tripleVO.getMemLockYn().equals("Y") || tripleVO.getSymLock().equals("Y")) { + if(tripleVO.getSymLock().equals("Y")) { + HashMap lockParam = new HashMap<>(); + lockParam.put("siteId", tripleVO.getSiteId()); + lockParam.put("memId", tripleVO.getMemId()); + int lockResult = userDao.setUserLock(lockParam); + log.error(LOG_PREFIX+ "betProcSlot::setUserLock::result::" + lockResult); + } + + responseObj.put("balance", bfCash); + responseObj.put("result_code", 1005); + responseObj.put("error_msg","THIS_USER_BETTING_LOCK"); + log.error(LOG_PREFIX+ "betProcSlot::[THIS_USER_BETTING_LOCK ERROR]"); + return responseObj; + } + } + + // Bet Proc + BigDecimal bfCashB = new BigDecimal(""+bfCash); + tripleVO.setBeforeCash(bfCashB.longValue()); + BigDecimal amountB = new BigDecimal(""+amount); + BigDecimal afCashB = null; + if(tripleVO.getTranType().equals("debit")) { + afCashB = bfCashB.subtract(amountB); + } else { + afCashB = bfCashB.add(amountB); + } + tripleVO.setAfterCash(afCashB.longValue()); + + /** + * insertSlotTranInfo Start + */ + long startTime = System.currentTimeMillis(); + HashMap param = new HashMap(); + param.put("betId", tripleVO.getBetId()); + param.put("tranId", tripleVO.getTranId()); + param.put("siteId", tripleVO.getSiteId()); + param.put("memId", tripleVO.getMemId()); + param.put("apiType", "triple"); + String tranType = ""; + if(tripleVO.getTranType().equals("debit") && tripleVO.getIsCancel() == 0) { + tranType = "BET"; + } else if(tripleVO.getTranType().equals("debit") && tripleVO.getIsCancel() == 1) { + // 슬롯 당첨 취소 처리 + tranType = "EXCEEDWIN"; + amount = amount * -1; + } else if(tripleVO.getTranType().equals("credit") && tripleVO.getIsCancel() == 0 && tripleVO.getIsBonus() == 0) { + // Credit OK + if(amount > 0) { + tranType = "WIN"; + } else if (amount < 0) { + tranType = "EXCEEDWIN"; + } else { + tranType = "LOSE"; + } + } else if(tripleVO.getTranType().equals("credit") && tripleVO.getIsCancel() == 1 && tripleVO.getIsBonus() == 0) { + tranType = "CANCEL"; + } else if(tripleVO.getTranType().equals("adjust")) { + tranType = "ADJUST"; + } else { + tranType = "BONUS"; + } + param.put("tranType", tranType); + param.put("bfBalance", tripleVO.getBeforeCash().intValue()); + param.put("amount", amount); + param.put("afBalance", tripleVO.getAfterCash().intValue()); + param.put("vendor", tripleVO.getVendor()); + param.put("vendorIdx", tripleVO.getVendorIdx()); + param.put("vendorKey", tripleVO.getVendorKey()); + param.put("gameName", tripleVO.getGameKey()); + param.put("betDateTime", tripleVO.getRequestAt()); + try { + int betResult = betDao.insertSlotTranInfo(param); + log.info(LOG_PREFIX+ "::insertSlotTranInfo::" + betResult); + + HashMap logParam = new HashMap(); + logParam.put("siteId", tripleVO.getSiteId()); + logParam.put("memId", tripleVO.getMemId()); + logParam.put("actionType", 3); + commonDao.updateAcctionLog(logParam); + } catch(DataIntegrityViolationException de) { + log.error(LOG_PREFIX+ "insertSlotTranInfo::Duplicate tranId: " + tripleVO.getTranId()); + responseObj.put("result_code", 0); + responseObj.put("balance", bfCash); + responseObj.put("error_msg", "Duplicate tranId"); + return responseObj; + } catch (Exception e) { + log.error(LOG_PREFIX+ "insertSlotTranInfo::Exception {}", e); + } + long endTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diffTime = (startTime - endTime)/1000.0; //두 시간에 차 계산 + log.info(LOG_PREFIX+ "insertSlotTranInfo::[diffTime : " + String.format("%.3f", diffTime) + "]"); + /** + * insertSlotTranInfo End + */ + + HashMap memCashUpdParam = new HashMap(); + memCashUpdParam.put("siteId", tripleVO.getSiteId()); + memCashUpdParam.put("memId", tripleVO.getMemId()); + int cashAmt = amount; + if(tripleVO.getTranType().equals("debit") && tripleVO.getIsCancel() == 0) { + cashAmt = cashAmt * -1; + } + memCashUpdParam.put("cashAmt", Integer.toString(cashAmt)); + memCashUpdParam.put("changeFlag", "N"); + long chs3 = System.currentTimeMillis(); + int memCashResult = betDao.updateUserCashByAmount(memCashUpdParam); + long che3 = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기 + double diff3 = (chs3 - che3)/1000.0; //두 시간에 차 계산 + if(diff3 < -0.5) log.error(LOG_PREFIX+ "betProcSlot::[### betDao.updateUserCashByAmount() : " + String.format("%.3f", diff3) + " ###]"); + + // Async slot_tran_info insert + // asyncService.insertSlotTranInfo(LOG_PREFIX, tripleVO); + // asyncService.withdrawBalanceAsync(tripleVO); + + responseObj.put("result_code", 0); + responseObj.put("balance", afCashB.intValue()); + log.info(LOG_PREFIX+ "betProcSlot::SUCC!!!!"); + + } catch(Exception e) { + responseObj.put("result_code", 1111); + responseObj.put("error_msg","UNKNOWN_ERROR"); + log.error(LOG_PREFIX+ "betProcSlot::Exception::"+e.getMessage()); + } + + return responseObj; + } + + + @Override + public org.codehaus.jettison.json.JSONObject getTripleCreditInfo(ApiVendorCompInfo apiVendor) throws ResourceAccessException, Exception { + org.codehaus.jettison.json.JSONObject balanceJson = null; + final String LOG_PREFIX = "#-TRIPLE_API::"+apiVendor.getSiteId()+"::getTripleCreditInfo::::"; + + log.info(LOG_PREFIX+ "### 알 잔액조회 Start -###"); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.set("User-Agent", "PostmanRuntime/7.28.4"); + headers.set("Authorization", apiVendor.getClientSecretKey()); + headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8"))); + + UriComponentsBuilder balanceBuilder = UriComponentsBuilder.fromHttpUrl(apiVendor.getApiUrl() + "/creditInfo"); +// UriComponentsBuilder balanceBuilder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/api" + "/creditInfo"); + HashMap balanceParams = new HashMap(); + Mono balanceResMono = webClient.post() + .uri(apiVendor.getApiUrl() + "/creditInfo") + .headers(httpHeaders -> httpHeaders.addAll(headers)) + .bodyValue(balanceParams) + .retrieve() + .bodyToMono(String.class); + + String balanceRes = balanceResMono.block(); // Blocking to get the response synchronously + balanceJson = new org.codehaus.jettison.json.JSONObject(balanceRes); + log.info(LOG_PREFIX+ "### balanceJson: " + balanceJson); + log.info(LOG_PREFIX+ "### 알 잔액조회 End -###"); + + return balanceJson; + } + +} diff --git a/src/main/java/com/bb/service/UserService.java b/src/main/java/com/bb/service/UserService.java new file mode 100644 index 0000000..9110b24 --- /dev/null +++ b/src/main/java/com/bb/service/UserService.java @@ -0,0 +1,199 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import org.springframework.security.crypto.password.PasswordEncoder; + +import com.bb.model.AdminTokenInfo; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.BlankSpinRate; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.CodeSearch; +import com.bb.model.CompResetInfo; +import com.bb.model.DashInfo; +import com.bb.model.GameUseInfo; +import com.bb.model.GraphInfo; +import com.bb.model.IdListSearch; +import com.bb.model.LoginUserVO; +import com.bb.model.MemListSearchVO; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberHierarchyVo; +import com.bb.model.MemberInsert; +import com.bb.model.MemberInsert2; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberRate; +import com.bb.model.MemberSearch; +import com.bb.model.MemberStatus; +import com.bb.model.MemberTokenInfo; +import com.bb.model.MemberUpdate; +import com.bb.model.Month10Info; +import com.bb.model.MultipleRate; +import com.bb.model.MultipleRateInfo; +import com.bb.model.NewMemRateItem; +import com.bb.model.Site; +import com.bb.model.SiteSearch; +import com.bb.model.Top15Info; +import com.bb.model.TreeListSearch; +import com.bb.model.TripleAuthInfo; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; + + + +public interface UserService { + + Member login(MemberSearch search); + Site swaggerlogin(HashMap param); + Site getSiteInfoByKey(String reqKey); + HashMap adminLogin(SiteSearch search); + int frontSignUp(@Valid Member signupMember); + MemberDetail getMember(Member member); + void updateStatus(@Valid MemberStatus status); + List getMemberRate(Member search); + List getMemberRateByNormal(Member search); + List getMemTreeList(@Valid TreeListSearch search); + HashMap getHeadCashInfo(HashMap param); + void getMemberRateUpdate(Member search, @Valid MemberRate memberRate); + HashMap updateAllBottomRate(Member search, List myRateList, MemberRate bottomRate); + int idCheck(@Valid Member signupMember); + int idCheckByAdmin(@Valid Member signupMember); + int nameCheck(@Valid Member signupMember); + int phoneCheck(@Valid Member signupMember); + int accCheck(@Valid Member signupMember); + Site getSiteInfo(String siteId); + + HashMap getMemberDetail_1(Member search); + HashMap getMemberDetail_2(Member search); + HashMap getMemberDetail_3(Member search); + void updateMember(MemberUpdate signupMember); + void getMemberbetYnUpdate(Member search, MemberRate rateparam); + int adminJoin(@Valid MemberInsert signupMember); + int adminJoin2(MemberInsert2 signupMember); + HashMap getMemberListCnt(@Valid MemberListSearch search); + List getMemberList(@Valid MemberListSearch search); + int getMemStatusListCnt(@Valid MemberListSearch search); + List getMemStatusList(@Valid MemberListSearch search); + int getMemLogListCnt(@Valid MemberListSearch search); + List getMemLogList(@Valid MemberListSearch search); + int getMemLoginListCnt(MemberListSearch search); + List getMemLoginList(MemberListSearch search); + int getIpListCnt(@Valid MemberListSearch search); + List getIpList(@Valid MemberListSearch search); + void recUpdate(@Valid MemberListSearch signupMember); + void updateOutAmtYn(@Valid MemberStatus status); + List getMemInfo(HashMap ti); + void gameUseUpdate(@Valid GameUseInfo gui); + List gameUseList(@Valid GameUseInfo gui); + int adminSignUp(String LOG_PREFIX, @Valid MemberInsert signupMember, PasswordEncoder passwordEncoder); + void updatePwd(@Valid Site site); + int getDeniedIpCheck(HashMap param); + int getDeniedPhoneCheck(@Valid Member signupMember); + int getDeniedAccCheck(@Valid Member signupMember); + void updateAdminPwd(@Valid Site site); + List> getAdminIpList(Map ipParam); + List miniGameInfo(HashMap ti); + HashMap adminSuperLogin(SiteSearch search); + + List getMemberFlowList(HashMap memberDetail); + List getPartnerFlowList(HashMap memberDetail); + HashMap getSuperHeadCashInfo(); + + int getIdListCnt(IdListSearch search); + List getIdList(IdListSearch search); + + List getBISubPointRate(Member search); + MemberDetail getMemByTriple(Member search); + int insertTripleAuthInfo(TripleAuthInfo user); + int updateMemCash(MemberDetail memberVo); + int adminCheck(String adminId); + int updateMemListIcon(@Valid MemberUpdate memberVO); + int resetPassword(Member memberVO, PasswordEncoder passwordEncoder); + int resetPassword2(Member memberVO); + ApiVendorCompInfo getApiVendorCompInfo(HashMap param); + ApiVendorCompInfo getApiVendorCompInfoByCron(HashMap param); + String getBaseRecommenderId(Member search); + Long getUserTimeout(Member searchMem); + int updateUserTimeout(Member searchMem); + int getMemRollingListCnt(MemberListSearch search); + List getMemRollingList(MemberListSearch search); + List getPartnerMemIds(Member searchMem); + HashMap getPartnerMemId(Member searchMem); + List getPartnerLevels(CodeSearch codesSearch); + String getPartnerLevelByRecId(@Valid MemberInsert signupMember); + List getPartnerBotUserList(Member search); + List getPartnerRateList(MemberSearch search); + HashMap getPartnerMemberDetail(Member search); + void updateBlankSpinRate(@Valid BlankSpinRate rate); + void updateAllBlankSpinRate(@Valid BlankSpinRate rate); + Integer getCheckMemberToken(MemberTokenInfo param); + Integer getCheckAdminToken(AdminTokenInfo param); + HashMap getNewMsgInfo(Member member); + HashMap getUserGameInfo(HashMap param); + HashMap getLastGameInfo(Member searchMem); + HashMap getLastGameInfoNew(HashMap logParam); + HashMap getHeadTopInfo(HashMap param); + HashMap getLastGameInfoNoLimit(Member searchMem); + int setUserPartnerLevelUp(MemberDetail targetUser); + HashMap getUserCashAmt(MemberSearch param); + TripleAuthInfo getTripleAuthInfo(Member search); + int getLoginTryCount(MemberSearch search); + void setLoginLock(MemberSearch search); + HashMap getMemChargingPointInfo(HashMap pointParam); + void updateFstChrgByJoinFlag(HashMap param); + HashMap getMemberMap(Member search); + HashMap getMemberMap2(Member search); + HashMap getBonusSettingInfo(HashMap param); + int userChangeFlag(HashMap flagParam); + int bonusSettingSave(ChargingPointSettingVO settingVO); + int getNormalRetailCnt(Member user); + int userChangeSymLock(HashMap lockParam); + double getUserMinPR(HashMap minParam); + List> getUserHierarchyList(MemberHierarchyVo search); + int checkMyBottom(HashMap searchMap); + List getMultipleRateList(MultipleRateInfo param); + void updateMultipleRate(MultipleRateInfo param); + List getMemRateItemList(NewMemRateItem rateItem); + NewMemRateItem getMemRateItem(@Valid NewMemRateItem rateItem); + int updateMemRateItem(@Valid NewMemRateItem rateItem); + int updateCashOutFlag(HashMap flagParam); + List getDashInfoInfo(HashMap param); + List getGraphInfo(HashMap param); + int updLoginFailCnt(Member member); + int getMemberTreeListCnt(MemListSearchVO search); + List getMemberTreeList(MemListSearchVO search); + List getUserTreeHierarchy(MemListSearchVO search); + int settingCashInOut(HashMap param); + List getIpDetailList(MemberListSearch search); + int updateMemCashByAmount(HashMap cashParam); + HashMap getMemBankInfo(HashMap param); + int resetUserLock(HashMap lockParam); + List getTop15Info(HashMap paramMap); + Month10Info getMonth10Info(String siteId); + List> delCheckMemList(CompResetInfo compResetInfo); + int deleteUsers(String LOG_PREFIX, CompResetInfo compResetInfo); + int updMemPhone(HashMap param); + int getLowerUserListCnt(UserListSearch search); + List> getLowerUserList(UserListSearch search); + List> getLoginUserList(UserSearch search); + int getPlayGameListCnt(UserListSearch search); + List> getPlayGameList(UserListSearch search); + int getDetailBetListCnt(UserListSearch search); + List> getDetailBetList(UserListSearch search); + int getDetailBetListNewCnt(UserListSearch search); + List> getDetailBetListNew(UserListSearch search); + int getTotalChangePointAmt(Member search); + TripleAuthInfo getTripleAuthInfo2(Member user); + int getIsMyBottomCnt(Member search); + List> getPassAllResetList(String siteId); + HashMap getSiteCashBonusInfo(HashMap param); + List> getSiteCashBonusList(long siteIdx); + MemberDetail getMemByRvHoldem(Member searchMem); + int insertRvHoldemAuthInfo(HashMap userMap); + HashMap getRvHoldemCheckInfo(String uid); + +} diff --git a/src/main/java/com/bb/service/UserServiceImpl.java b/src/main/java/com/bb/service/UserServiceImpl.java new file mode 100644 index 0000000..b90ab1b --- /dev/null +++ b/src/main/java/com/bb/service/UserServiceImpl.java @@ -0,0 +1,1233 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import com.bb.dao.CashDao; +import com.bb.dao.UserDao; +import com.bb.model.AdminTokenInfo; +import com.bb.model.ApiVendorCompInfo; +import com.bb.model.BlankSpinRate; +import com.bb.model.ChargingPointSettingVO; +import com.bb.model.CodeSearch; +import com.bb.model.CompResetInfo; +import com.bb.model.DashInfo; +import com.bb.model.GameUseInfo; +import com.bb.model.GraphInfo; +import com.bb.model.IdListSearch; +import com.bb.model.LoginUserVO; +import com.bb.model.MemListSearchVO; +import com.bb.model.Member; +import com.bb.model.MemberDetail; +import com.bb.model.MemberHierarchyVo; +import com.bb.model.MemberInsert; +import com.bb.model.MemberInsert2; +import com.bb.model.MemberListSearch; +import com.bb.model.MemberRate; +import com.bb.model.MemberRateVo; +import com.bb.model.MemberSearch; +import com.bb.model.MemberStatus; +import com.bb.model.MemberTokenInfo; +import com.bb.model.MemberUpdate; +import com.bb.model.Month10Info; +import com.bb.model.MultipleRate; +import com.bb.model.MultipleRateInfo; +import com.bb.model.NewMemRateItem; +import com.bb.model.Site; +import com.bb.model.SiteSearch; +import com.bb.model.Top15Info; +import com.bb.model.TreeListSearch; +import com.bb.model.TripleAuthInfo; +import com.bb.model.UserListSearch; +import com.bb.model.UserSearch; +import com.bb.util.StringUtils; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class UserServiceImpl implements UserService { + + + private final UserDao userDao; + + @Override + public Site getSiteInfoByKey(String reqKey) { + // TODO Auto-generated method stub + return userDao.getSiteInfoByKey(reqKey); + } + + @Override + public Member login(MemberSearch search) { + return userDao.login(search); + } + + @Override + public Site swaggerlogin(HashMap param) { + return userDao.swaggerlogin(param); + } + + @Override + public HashMap adminLogin(SiteSearch search) { + return userDao.adminLogin(search); + } + + @Override + public int adminSignUp(String LOG_PREFIX, @Valid MemberInsert signupMember, PasswordEncoder passwordEncoder) { + int result = 0; + + //회원가입 + String password = passwordEncoder.encode(signupMember.getMemPass()); + log.info(LOG_PREFIX+ "[MEMBER PWD:" + password + "]"); + signupMember.setMemPass(password); + String sitePrefix = StringUtils.generateString(3); + + int chkPrefix = userDao.checkSitePrefix(sitePrefix); + log.info(LOG_PREFIX+ "chkPrefix::" + chkPrefix); + if(chkPrefix == 0) { + signupMember.setSitePrefix(sitePrefix); + String apiKey = StringUtils.makeRandomKey(19); + signupMember.setSiteApikey(apiKey); + result = userDao.insertSiteInfo(signupMember); + log.info(LOG_PREFIX+ "insertSiteInfo result::" + result); + Integer siteIdx = signupMember.getSiteIdx(); + log.info(LOG_PREFIX+ "insertSiteInfo siteIdx::" + siteIdx); + result = userDao.insertCompany(signupMember); + log.info(LOG_PREFIX+ "insertCompany result::" + result); + result = userDao.insertAdminHeadInfo(signupMember); + log.info(LOG_PREFIX+ "insertAdminHeadInfo result::" + result); + + if(!(signupMember.getPartnerType() == null || "".equals(signupMember.getPartnerType())) ) { + + if(result > 0) { + MemberInsert baseRcmdUser = new MemberInsert(); + baseRcmdUser.setSiteIdx(siteIdx); + baseRcmdUser.setSiteId(signupMember.getMemId()); + String baseRcmdUserId = apiKey.substring(apiKey.length()-8, apiKey.length()); + baseRcmdUser.setMemId(baseRcmdUserId); + String baseRcmdUserPw = StringUtils.makeRandomKey(10); + baseRcmdUserPw = passwordEncoder.encode(baseRcmdUserPw); + baseRcmdUser.setMemPass(baseRcmdUserPw); + String baseRcmdUserName = signupMember.getMemId() + "추천아이디"; + baseRcmdUser.setMemName(baseRcmdUserName); + baseRcmdUser.setMemNick(baseRcmdUserName); + baseRcmdUser.setRecommenderId(signupMember.getMemId()); + baseRcmdUser.setPartnerLevel("AUTO"); + result = userDao.insertBaseRcmdUser(baseRcmdUser); + log.info(LOG_PREFIX+ "insertBaseRcmdUser result::" + result); + } else { + result = 0; + } + } + } else { + result = 0; + } + + + return result; + } + + @Override + public int frontSignUp(@Valid Member signupMember) { + // TODO Auto-generated method stub + //회원가신청 + return userDao.insertMember(signupMember); + } + + @Override + public MemberDetail getMember(Member member) { + // 회원정보조회 + return userDao.getMember(member); + } + + @Override + public void updateStatus(@Valid MemberStatus status) { + // TODO Auto-generated method stub + userDao.updateStatus(status); + } + + @Override + public List getMemberRate(Member search) { + // TODO Auto-generated method stub + return userDao.getMemberRate(search); + } + + @Override + public List getMemberRateByNormal(Member search) { + // TODO Auto-generated method stub + return userDao.getMemberRateByNormal(search); + } + + @Override + public List getMemTreeList(@Valid TreeListSearch search) { + // TODO Auto-generated method stub + return userDao.getMemTreeList(search); + } + + @Override + public HashMap getHeadCashInfo(HashMap param) { + // TODO Auto-generated method stub + return userDao.getHeadCashInfo(param); + } + + @Override + public void getMemberRateUpdate(Member search, @Valid MemberRate memberRate) { + // TODO Auto-generated method stub + for(MemberRateVo mvo:memberRate.getRateList()) { + HashMap param = new HashMap(); + param.put("siteId", search.getSiteId()); + param.put("memId", search.getMemId()); + param.put("gameType", mvo.getGameType()); + param.put("pointRate", mvo.getPointRate()); + param.put("loseRate", mvo.getLoseRate()); + param.put("useYn", "Y"); + if(search.getPartnerLevel().equals("COMP") || search.getPartnerLevel().equals("AUTO")) { + param.put("betYn", "N"); + } else { + param.put("betYn", mvo.getBetYn()); + } + userDao.memberRateUpdate(param); + + if(!search.getPartnerLevel().equals("COMP")) { + HashMap updParam = new HashMap<>(); + updParam.put("siteId", search.getSiteId()); + updParam.put("memId", search.getMemId()); + updParam.put("gameCategory", ""); + updParam.put("gameCategoryEn", ""); + updParam.put("vendorCode", mvo.getGameType()); + updParam.put("rateType", ""); + updParam.put("pointRate", mvo.getPointRate()); + updParam.put("loseRate", mvo.getLoseRate()); + log.info("#-getMemberRateUpdate::"+search.getSiteId()+"::"+search.getMemId()+"::updParam::"+updParam.toString()); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + } + } + } + + @Override + public HashMap updateAllBottomRate(Member search, List myRateList, MemberRate bottomRate) { + // TODO Auto-generated method stub + HashMap result = new HashMap<>(); + + loopOut: + for(MemberRateVo mvo:bottomRate.getRateList()) { + String botCode = mvo.getGameType(); + Double botPR = Double.valueOf(mvo.getPointRate()); + Double botLR = Double.valueOf(mvo.getLoseRate()); + + for(HashMap myRate : myRateList) { + String myCode = myRate.get("gameType").toString(); + Double myPR = Double.valueOf(myRate.get("pointRate").toString()); + Double myLR = Double.valueOf(myRate.get("loseRate").toString()); + if(botCode.equals(myCode)) { + if(botPR > myPR || botLR > myLR) { + log.info("## updateAllBottomRate ## botCode : " + botCode + ", myCode : " + myCode); + log.info("## updateAllBottomRate ## botPR : " + botPR + ", myPR : " + myPR); + log.info("## updateAllBottomRate ## botLR : " + botLR + ", myLR : " + myLR); + String resultMsg = "["+myRate.get("codeName").toString()+"] 롤링:"+myPR+", 루징:"+myLR+" 보다 작은값을 입력하세요"; + result.put("statusCode", "-1"); + result.put("resultMsg", resultMsg); + log.info("## updateAllBottomRate ## statusCode : " + result.get("statusCode").toString()); + log.info("## updateAllBottomRate ## resultMsg : " + result.get("resultMsg").toString()); + break loopOut; + } else { + result.put("statusCode", "0"); + } + } + } + } + + if("0".equals(result.get("statusCode".toString()))) { + for(MemberRateVo mvo:bottomRate.getRateList()) { + HashMap param = new HashMap(); + param.put("siteId", search.getSiteId()); + param.put("memId", search.getMemId()); + param.put("gameType", mvo.getGameType()); + param.put("pointRate", mvo.getPointRate()); + param.put("loseRate", mvo.getLoseRate()); + userDao.updateAllBottomRate(param); + } + result.put("resultMsg", "요율 변경완료"); + log.info("## updateAllBottomRate ## statusCode : " + result.get("statusCode").toString()); + log.info("## updateAllBottomRate ## resultMsg : " + result.get("resultMsg").toString()); + } + + return result; + } + + @Override + public int idCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return userDao.idCheck(signupMember); + } + + @Override + public int idCheckByAdmin(@Valid Member signupMember) { + // TODO Auto-generated method stub + return userDao.idCheckByAdmin(signupMember); + } + + @Override + public int nameCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return userDao.nameCheck(signupMember); + } + + @Override + public int phoneCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return userDao.phoneCheck(signupMember); + } + + @Override + public int accCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return userDao.accCheck(signupMember); + } + + @Override + public Site getSiteInfo(String siteId) { + // TODO Auto-generated method stub + return userDao.getSiteInfo(siteId); + } + + @Override + public HashMap getMemberDetail_1(Member search) { + // TODO Auto-generated method stub + return userDao.getMemberDetail_1(search); + } + + @Override + public HashMap getMemberDetail_2(Member search) { + // TODO Auto-generated method stub + return userDao.getMemberDetail_2(search); + } + + @Override + public HashMap getMemberDetail_3(Member search) { + // TODO Auto-generated method stub + return userDao.getMemberDetail_3(search); + } + + @Override + public void updateMember(MemberUpdate signupMember) { + userDao.updateMember(signupMember); + } + + + + @Override + public void getMemberbetYnUpdate(Member search, @Valid MemberRate memberRate) { + // TODO Auto-generated method stub + for(MemberRateVo mvo:memberRate.getRateList()) { + HashMap param = new HashMap(); + param.put("siteId", search.getSiteId()); + param.put("memId", search.getMemId()); + param.put("gameType", mvo.getGameType()); + if(search.getPartnerLevel().equals("COMP") || search.getPartnerLevel().equals("AUTO")) { + param.put("betYn", "N"); + } else { + param.put("betYn", mvo.getBetYn()); + } + userDao.memberRateBetYn(param); + } + } + + @Override + public int adminJoin(@Valid MemberInsert signupMember) { + // TODO Auto-generated method stub + return userDao.adminJoin(signupMember); + } + + @Override + public int adminJoin2(MemberInsert2 signupMember) { + // TODO Auto-generated method stub + return userDao.adminJoin2(signupMember); + } + + @Override + public HashMap getMemberListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return userDao.getMemberListCnt(search); + } + + @Override + public List getMemberList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + //return userDao.getMemberList(search); + + List memList = userDao.getMemberList(search); + + for(HashMap mvo:memList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(mvo.get("memId").toString()); + mvo.put("topUserList", userDao.getTopUserList2(search2)); + } + + return memList; + } + + @Override + public int getMemStatusListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return userDao.getMemStatusListCnt(search); + } + + @Override + public List getMemStatusList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + List memList = userDao.getMemStatusList(search); + for(HashMap mvo:memList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(mvo.get("memId").toString()); + mvo.put("topUserList", userDao.getTopUserList2(search2)); + } + + return memList; + } + + @Override + public int getMemLogListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return userDao.getMemLogListCnt(search); + } + + @Override + public List getMemLogList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + List memList = userDao.getMemLogList(search); + for(HashMap mvo:memList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(mvo.get("memId").toString()); + mvo.put("topUserList", userDao.getTopUserList2(search2)); + } + + return memList; + } + + @Override + public int getMemLoginListCnt(MemberListSearch search) { + // TODO Auto-generated method stub + return userDao.getMemLoginListCnt(search); + } + + @Override + public List getMemLoginList(MemberListSearch search) { + // TODO Auto-generated method stub + List userList = userDao.getMemLoginList(search); + + for(LoginUserVO user : userList) { + search.setMemId(user.getMemId()); + if(user.getPartnerLevel().equals("NORMAL")) { + String betData = userDao.getLoginUserBetData(search); + if(betData != null) { + user.setBetData(betData); + } + } else { + user.setBetData(""); + } + + LoginUserVO data = userDao.getLoginUserReportData(search); + if(data != null) { + user.setCashIn(data.getCashIn()); + user.setCashOut(data.getCashOut()); + user.setBetAmt(data.getBetAmt()); + user.setWinAmt(data.getWinAmt()); + user.setWinLose(data.getWinLose()); + } + + Member search2 = new Member(); + search2.setSiteId(user.getSiteId()); + search2.setMemId(user.getMemId()); + List> topUserList = userDao.getTopUserList2(search2); + user.setTopUserList(topUserList); + } + + return userList; + } + + @Override + public int getIpListCnt(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return userDao.getIpListCnt(search); + } + + @Override + public List getIpList(@Valid MemberListSearch search) { + // TODO Auto-generated method stub + return userDao.getIpList(search); + } + + @Override + public void recUpdate(@Valid MemberListSearch signupMember) { + // TODO Auto-generated method stub + userDao.recUpdate(signupMember); + userDao.recUpdateFlow(signupMember); + } + + @Override + public void updateOutAmtYn(@Valid MemberStatus status) { + // TODO Auto-generated method stub + userDao.updateOutAmtYn(status); + } + + @Override + public List getMemInfo(HashMap ti) { + // TODO Auto-generated method stub + return userDao.getMemInfo(ti); + } + + @Override + public void gameUseUpdate(@Valid GameUseInfo gui) { + // TODO Auto-generated method stub + userDao.gameUseUpdate(gui); + } + + @Override + public List gameUseList(@Valid GameUseInfo gui) { + // TODO Auto-generated method stub + return userDao.gameUseList(gui); + } + + @Override + public void updatePwd(@Valid Site site) { + // TODO Auto-generated method stub + userDao.updatePwd(site); + userDao.updateMemPwd(site); + } + + @Override + public int getDeniedIpCheck(HashMap param) { + // TODO Auto-generated method stub + return userDao.getDeniedIpCheck(param); + } + + @Override + public int getDeniedPhoneCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return userDao.getDeniedPhoneCheck(signupMember); + } + + @Override + public int getDeniedAccCheck(@Valid Member signupMember) { + // TODO Auto-generated method stub + return userDao.getDeniedAccCheck(signupMember); + } + + @Override + public void updateAdminPwd(@Valid Site site) { + // TODO Auto-generated method stub + userDao.updateAdminPwd(site); + } + + @Override + public List> getAdminIpList(Map ipParam) { + // TODO Auto-generated method stub + return userDao.getAdminIpList(ipParam); + } + + @Override + public List miniGameInfo(HashMap ti) { + // TODO Auto-generated method stub + return userDao.miniGameInfo(ti); + } + + @Override + public HashMap adminSuperLogin(SiteSearch search) { + // TODO Auto-generated method stub + return userDao.adminSuperLogin(search); + } + + @Override + public List getMemberFlowList(HashMap memberDetail) { + // TODO Auto-generated method stub + return userDao.getMemberFlowList(memberDetail); + } + + @Override + public List getPartnerFlowList(HashMap memberDetail) { + // TODO Auto-generated method stub + return userDao.getPartnerFlowList(memberDetail); + } + + @Override + public HashMap getSuperHeadCashInfo() { + // TODO Auto-generated method stub + return userDao.getSuperHeadCashInfo(); + } + + @Override + public int getIdListCnt(IdListSearch search) { + // TODO Auto-generated method stub + return userDao.getIdListCnt(search); + } + + @Override + public List getIdList(IdListSearch search) { + // TODO Auto-generated method stub + return userDao.getIdList(search); + } + + @Override + public List getBISubPointRate(Member search) { + // TODO Auto-generated method stub + return userDao.getBISubPointRate(search); + } + + @Override + public MemberDetail getMemByTriple(Member search) { + // TODO Auto-generated method stub + return userDao.getMemByTriple(search); + } + + @Override + public int insertTripleAuthInfo(TripleAuthInfo user) { + // TODO Auto-generated method stub + return userDao.insertTripleAuthInfo(user); + } + + @Override + public int updateMemCash(MemberDetail memberVo) { + // TODO Auto-generated method stub + return userDao.updateMemCash(memberVo); + } + + @Override + public int adminCheck(String adminId) { + // TODO Auto-generated method stub + return userDao.adminCheck(adminId); + } + + @Override + public int updateMemListIcon(@Valid MemberUpdate memberVO) { + // TODO Auto-generated method stub + return userDao.updateMemListIcon(memberVO); + } + + @Override + public int resetPassword(Member memberVO, PasswordEncoder passwordEncoder) { + // TODO Auto-generated method stub + + String newMemPass = "0000"; + /* + MemberDetail member = userDao.getMember(memberVO); + String bankAcc = member.getBankacc(); + if(bankAcc == null || "".equals(bankAcc)) { + String today = new SimpleDateFormat("yyyyMMdd").format(new Date(System.currentTimeMillis())); + newMemPass = today + member.getMemId(); + log.info(newMemPass); + } else { + newMemPass = bankAcc + member.getMemId(); + } + */ + String password = passwordEncoder.encode(newMemPass); + memberVO.setMemPass(password); + + return userDao.resetPassword(memberVO); + } + + @Override + public int resetPassword2(Member memberVO) { + return userDao.resetPassword(memberVO); + } + + @Override + public ApiVendorCompInfo getApiVendorCompInfo(HashMap param) { + // TODO Auto-generated method stub + return userDao.getApiVendorCompInfo(param); + } + + @Override + public ApiVendorCompInfo getApiVendorCompInfoByCron(HashMap param) { + // TODO Auto-generated method stub + return userDao.getApiVendorCompInfoByCron(param); + } + + @Override + public String getBaseRecommenderId(Member search) { + // TODO Auto-generated method stub + return userDao.getBaseRecommenderId(search); + } + + @Override + public synchronized Long getUserTimeout(Member searchMem) { + // TODO Auto-generated method stub + return userDao.getUserTimeout(searchMem); + } + + @Override + public int updateUserTimeout(Member searchMem) { + // TODO Auto-generated method stub + return userDao.updateUserTimeout(searchMem); + } + + @Override + public int getMemRollingListCnt(MemberListSearch search) { + // TODO Auto-generated method stub + return userDao.getMemRollingListCnt(search); + } + + @Override + public List getMemRollingList(MemberListSearch search) { + // TODO Auto-generated method stub + return userDao.getMemRollingList(search); + } + + @Override + public List getPartnerMemIds(Member searchMem) { + // TODO Auto-generated method stub + return userDao.getPartnerMemIds(searchMem); + } + + @Override + public HashMap getPartnerMemId(Member searchMem) { + // TODO Auto-generated method stub + return userDao.getPartnerMemId(searchMem); + } + + @Override + public List getPartnerLevels(CodeSearch codesSearch) { + // TODO Auto-generated method stub + return userDao.getPartnerLevels(codesSearch); + } + + @Override + public String getPartnerLevelByRecId(@Valid MemberInsert signupMember) { + // TODO Auto-generated method stub + return userDao.getPartnerLevelByRecId(signupMember); + } + + @Override + public List getPartnerBotUserList(Member search) { + // TODO Auto-generated method stub + return userDao.getPartnerBotUserList(search); + } + + @Override + public List getPartnerRateList(MemberSearch search) { + // TODO Auto-generated method stub + return userDao.getPartnerRateList(search); + } + + @Override + public HashMap getPartnerMemberDetail(Member search) { + // TODO Auto-generated method stub + return userDao.getPartnerMemberDetail(search); + } + + @Override + public void updateBlankSpinRate(@Valid BlankSpinRate rate) { + // TODO Auto-generated method stub + userDao.updateBlankSpinRate(rate); + } + + @Override + public void updateAllBlankSpinRate(@Valid BlankSpinRate rate) { + // TODO Auto-generated method stub + userDao.updateAllBlankSpinRate(rate); + } + + @Override + public Integer getCheckMemberToken(MemberTokenInfo param) { + // TODO Auto-generated method stub + return userDao.getCheckMemberToken(param); + } + + @Override + public Integer getCheckAdminToken(AdminTokenInfo param) { + // TODO Auto-generated method stub + return userDao.getCheckAdminToken(param); + } + + @Override + public HashMap getNewMsgInfo(Member member) { + // TODO Auto-generated method stub + return userDao.getNewMsgInfo(member); + } + + @Override + public HashMap getUserGameInfo(HashMap param) { + // TODO Auto-generated method stub + return userDao.getUserGameInfo(param); + } + + @Override + public synchronized HashMap getLastGameInfo(Member searchMem) { + // TODO Auto-generated method stub + return userDao.getLastGameInfo(searchMem); + } + + @Override + public HashMap getLastGameInfoNew(HashMap logParam) { + // TODO Auto-generated method stub + return userDao.getLastGameInfoNew(logParam); + } + + @Override + public HashMap getHeadTopInfo(HashMap param) { + // TODO Auto-generated method stub + return userDao.getHeadTopInfo(param); + } + + @Override + public synchronized HashMap getLastGameInfoNoLimit(Member searchMem) { + // TODO Auto-generated method stub + return userDao.getLastGameInfoNoLimit(searchMem); + } + + @Override + public int setUserPartnerLevelUp(MemberDetail targetUser) { + // TODO Auto-generated method stub + int result = 0; + HashMap user = userDao.getPartnerLevelUpInfo(targetUser); + if(user.get("topLevel").toString().equals("PTN_7") || user.get("afMyLevel").toString().equals("NORMAL")) { + // 승급 불가능 대상 + result = 0; + } else { + // 승급 가능 대상 + userDao.updatePartnerLevel(user); + result = 1; + } + + return result; + } + + @Override + public HashMap getUserCashAmt(MemberSearch param) { + // TODO Auto-generated method stub + return userDao.getUserCashAmt(param); + } + + @Override + public TripleAuthInfo getTripleAuthInfo(Member search) { + // TODO Auto-generated method stub + return userDao.getTripleAuthInfo(search); + } + + @Override + public int getLoginTryCount(MemberSearch search) { + // TODO Auto-generated method stub + return userDao.getLoginTryCount(search); + } + + @Override + public void setLoginLock(MemberSearch search) { + // TODO Auto-generated method stub + userDao.setLoginLock(search); + } + + @Override + public HashMap getMemChargingPointInfo(HashMap pointParam) { + // TODO Auto-generated method stub + return userDao.getMemChargingPointInfo(pointParam); + } + + @Override + public void updateFstChrgByJoinFlag(HashMap param) { + // TODO Auto-generated method stub + userDao.updateFstChrgByJoinFlag(param); + } + + @Override + public HashMap getMemberMap(Member search) { + // TODO Auto-generated method stub + return userDao.getMemberMap(search); + } + + @Override + public HashMap getMemberMap2(Member search) { + // TODO Auto-generated method stub + return userDao.getMemberMap2(search); + } + + @Override + public HashMap getBonusSettingInfo(HashMap param) { + // TODO Auto-generated method stub + return userDao.getBonusSettingInfo(param); + } + + @Override + public int userChangeFlag(HashMap flagParam) { + // TODO Auto-generated method stub + return userDao.userChangeFlag(flagParam); + } + + @Override + public int bonusSettingSave(ChargingPointSettingVO settingVO) { + // TODO Auto-generated method stub + return userDao.bonusSettingSave(settingVO); + } + + @Override + public int getNormalRetailCnt(Member user) { + // TODO Auto-generated method stub + return userDao.getNormalRetailCnt(user); + } + + @Override + public int userChangeSymLock(HashMap lockParam) { + // TODO Auto-generated method stub + return userDao.userChangeSymLock(lockParam); + } + + @Override + public double getUserMinPR(HashMap minParam) { + // TODO Auto-generated method stub + return userDao.getUserMinPR(minParam); + } + + @Override + public List> getUserHierarchyList(MemberHierarchyVo search) { + // TODO Auto-generated method stub + return userDao.getUserHierarchyList(search); + } + + @Override + public int checkMyBottom(HashMap searchMap) { + // TODO Auto-generated method stub + return userDao.checkMyBottom(searchMap); + } + + @Override + public List getMultipleRateList(MultipleRateInfo param) { + // TODO Auto-generated method stub + return userDao.getMultipleRateList(param); + } + + @Override + public void updateMultipleRate(MultipleRateInfo param) { + // TODO Auto-generated method stub + for(MultipleRate mrv : param.getRateList()) { + HashMap updParam = new HashMap<>(); + updParam.put("siteId", param.getSiteId()); + updParam.put("memId", param.getMemId()); + updParam.put("vendorCode", param.getVendorCode()); + updParam.put("rateType", mrv.getRateType()); + updParam.put("pointRate", mrv.getPointRate()); + updParam.put("loseRate", mrv.getLoseRate()); + log.info("#-updateMultipleRate::"+param.getSiteId()+"::"+param.getMemId()+"::updParam::"+updParam.toString()); + + int result1 = userDao.updateMyMultipleRate(updParam); + int result2 = userDao.updateTopMultipleMinRate(updParam); + int result3 = userDao.updateBottomMultipleMaxRate(updParam); + } + } + + @Override + public List getMemRateItemList(NewMemRateItem rateItem) { + // TODO Auto-generated method stub + return userDao.getMemRateItemList(rateItem); + } + + @Override + public NewMemRateItem getMemRateItem(@Valid NewMemRateItem rateItem) { + // TODO Auto-generated method stub + return userDao.getMemRateItem(rateItem); + } + + @Override + public int updateMemRateItem(@Valid NewMemRateItem rateItem) { + // TODO Auto-generated method stub + int updResult = 0; + + if(rateItem.getRateTypeCode() == null || rateItem.getRateTypeCode().equals("")) { + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateItem.getSiteId()); + updParam.put("memId", rateItem.getMemId()); + updParam.put("gameCategory", rateItem.getGameCategory()); + updParam.put("gameCategoryEn", rateItem.getGameCategoryEn()); + updParam.put("vendorCode", rateItem.getVendorCode()); + updParam.put("rateType", ""); + updParam.put("pointRate", rateItem.getPointRate()); + updParam.put("loseRate", rateItem.getLoseRate()); + log.info("#-updateMemRateItem::"+rateItem.getSiteId()+"::"+rateItem.getMemId()+"::updParam::"+updParam.toString()); + + int result1 = userDao.updateMyRate(updParam); + int result2 = userDao.updateTopMinRate(updParam); + int result3 = userDao.updateBottomMaxRate(updParam); + updResult = result1; + } else { + HashMap updParam = new HashMap<>(); + updParam.put("siteId", rateItem.getSiteId()); + updParam.put("memId", rateItem.getMemId()); + updParam.put("vendorCode", rateItem.getVendorCode()); + updParam.put("rateType", rateItem.getRateTypeCode()); + updParam.put("pointRate", rateItem.getPointRate()); + updParam.put("loseRate", rateItem.getLoseRate()); + log.info("#-updateMemRateItem::"+rateItem.getSiteId()+"::"+rateItem.getMemId()+"::updParam::"+updParam.toString()); + + int result1 = userDao.updateMyMultipleRate(updParam); + int result2 = userDao.updateTopMultipleMinRate(updParam); + int result3 = userDao.updateBottomMultipleMaxRate(updParam); + updResult = result1; + } + + return updResult; + } + + @Override + public int updateCashOutFlag(HashMap flagParam) { + // TODO Auto-generated method stub + return userDao.updateCashOutFlag(flagParam); + } + + @Override + public List getDashInfoInfo(HashMap param) { + // TODO Auto-generated method stub + return userDao.getDashInfoInfo(param); + } + + @Override + public List getGraphInfo(HashMap param) { + // TODO Auto-generated method stub + return userDao.getGraphInfo(param); + } + + @Override + public int updLoginFailCnt(Member member) { + // TODO Auto-generated method stub + return userDao.updLoginFailCnt(member); + } + + @Override + public int getMemberTreeListCnt(MemListSearchVO search) { + // TODO Auto-generated method stub + return userDao.getMemberTreeListCnt(search); + } + + @Override + public List getMemberTreeList(MemListSearchVO search) { + // TODO Auto-generated method stub + return userDao.getMemberTreeList(search); + } + + @Override + public List getUserTreeHierarchy(MemListSearchVO search) { + // TODO Auto-generated method stub + return userDao.getUserTreeHierarchy(search); + } + + @Override + public int settingCashInOut(HashMap param) { + // TODO Auto-generated method stub + return userDao.settingCashInOut(param); + } + + @Override + public List getIpDetailList(MemberListSearch search) { + List memList = userDao.getIpDetailList(search); + + for(HashMap mvo:memList) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(mvo.get("memId").toString()); + mvo.put("topUserList", userDao.getTopUserList2(search2)); + } + + return memList; + } + + @Override + public int updateMemCashByAmount(HashMap cashParam) { + // TODO Auto-generated method stub + return userDao.updateMemCashByAmount(cashParam); + } + + @Override + public HashMap getMemBankInfo(HashMap param) { + // TODO Auto-generated method stub + return userDao.getMemBankInfo(param); + } + + @Override + public int resetUserLock(HashMap lockParam) { + // TODO Auto-generated method stub + return userDao.resetUserLock(lockParam); + } + + @Override + public List getTop15Info(HashMap paramMap) { + // TODO Auto-generated method stub + return userDao.getTop15Info(paramMap); + } + + @Override + public Month10Info getMonth10Info(String siteId) { + // TODO Auto-generated method stub + return userDao.getMonth10Info(siteId); + } + + @Override + public List> delCheckMemList(CompResetInfo compResetInfo) { + // TODO Auto-generated method stub + return userDao.delCheckMemList(compResetInfo); + } + + @Override + public int deleteUsers(String LOG_PREFIX, CompResetInfo compResetInfo) { + // TODO Auto-generated method stub + int res = 0; + log.info(LOG_PREFIX+ "Delete info::" + compResetInfo); + res = userDao.deleteUsers(compResetInfo); + log.info(LOG_PREFIX+ "delRes::" + res); + res = userDao.updateAdminHeadInfo(compResetInfo); + log.info(LOG_PREFIX+ "updRes::" + res); + + return res; + } + + @Override + public int updMemPhone(HashMap param) { + // TODO Auto-generated method stub + return userDao.updMemPhone(param); + } + + @Override + public int getLowerUserListCnt(UserListSearch search) { + // TODO Auto-generated method stub + return userDao.getLowerUserListCnt(search); + } + + @Override + public List> getLowerUserList(UserListSearch search) { + // TODO Auto-generated method stub + List> list = userDao.getLowerUserList(search); + + for(HashMap memDetail : list) { + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(memDetail.get("memId").toString()); + memDetail.put("topUserList", userDao.getTopUserList2(search2)); + } + + return list; + } + + @Override + public List> getLoginUserList(UserSearch search) { + List> userList = userDao.getLoginUserList(search); + + for(HashMap user : userList) { + MemberListSearch search1 = new MemberListSearch(); + search1.setSiteId(search.getSiteId()); + search1.setMemId(user.get("memId").toString()); + String betData = userDao.getLoginUserBetData(search1); + if(betData != null) { + user.put("betData", betData); + } else { + user.put("betData", ""); + } + + Member search2 = new Member(); + search2.setSiteId(search.getSiteId()); + search2.setMemId(user.get("memId").toString()); + user.put("topUserList", userDao.getTopUserList2(search2)); + } + + return userList; + } + + @Override + public int getPlayGameListCnt(UserListSearch search) { + // TODO Auto-generated method stub + return userDao.getPlayGameListCnt(search); + } + + @Override + public List> getPlayGameList(UserListSearch search) { + // TODO Auto-generated method stub + return userDao.getPlayGameList(search); + } + + @Override + public int getDetailBetListCnt(UserListSearch search) { + // TODO Auto-generated method stub + return userDao.getDetailBetListCnt(search); + } + + @Override + public List> getDetailBetList(UserListSearch search) { + // TODO Auto-generated method stub + return userDao.getDetailBetList(search); + } + + @Override + public int getDetailBetListNewCnt(UserListSearch search) { + // TODO Auto-generated method stub + return userDao.getDetailBetListNewCnt(search); + } + + @Override + public List> getDetailBetListNew(UserListSearch search) { + // TODO Auto-generated method stub + return userDao.getDetailBetListNew(search); + } + + @Override + public int getTotalChangePointAmt(Member search) { + // TODO Auto-generated method stub + return userDao.getTotalChangePointAmt(search); + } + + @Override + public TripleAuthInfo getTripleAuthInfo2(Member user) { + // TODO Auto-generated method stub + return userDao.getTripleAuthInfo2(user); + } + + @Override + public int getIsMyBottomCnt(Member search) { + // TODO Auto-generated method stub + return userDao.getIsMyBottomCnt(search); + } + + @Override + public List> getPassAllResetList(String siteId) { + // TODO Auto-generated method stub + return userDao.getPassAllResetList(siteId); + } + + @Override + public HashMap getSiteCashBonusInfo(HashMap param) { + // TODO Auto-generated method stub + return userDao.getSiteCashBonusInfo(param); + } + + @Override + public List> getSiteCashBonusList(long siteIdx) { + // TODO Auto-generated method stub + return userDao.getSiteCashBonusList(siteIdx); + } + + @Override + public MemberDetail getMemByRvHoldem(Member searchMem) { + // TODO Auto-generated method stub + return userDao.getMemByRvHoldem(searchMem); + } + + @Override + public int insertRvHoldemAuthInfo(HashMap userMap) { + // TODO Auto-generated method stub + return userDao.insertRvHoldemAuthInfo(userMap); + } + + @Override + public HashMap getRvHoldemCheckInfo(String uid) { + // TODO Auto-generated method stub + return userDao.getRvHoldemCheckInfo(uid); + } + +} diff --git a/src/main/java/com/bb/service/VendorService.java b/src/main/java/com/bb/service/VendorService.java new file mode 100644 index 0000000..e2c0207 --- /dev/null +++ b/src/main/java/com/bb/service/VendorService.java @@ -0,0 +1,18 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +public interface VendorService { + + List> getNexusSkinInfo(HashMap siteParam); + + List> getNexusSkinList(HashMap vendorInfo); + + HashMap getNexusSkin(HashMap skinInfo); + + int nexusSkinUpdate(HashMap skinInfo); + + List> getTripleVendorList(HashMap tripleSiteInfo); + +} diff --git a/src/main/java/com/bb/service/VendorServiceImpl.java b/src/main/java/com/bb/service/VendorServiceImpl.java new file mode 100644 index 0000000..dce59f5 --- /dev/null +++ b/src/main/java/com/bb/service/VendorServiceImpl.java @@ -0,0 +1,52 @@ +package com.bb.service; + +import java.util.HashMap; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.bb.dao.CashDao; +import com.bb.dao.UserDao; +import com.bb.dao.VendorDao; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RequiredArgsConstructor +@Service +public class VendorServiceImpl implements VendorService { + + private final VendorDao vendorDao; + + @Override + public List> getNexusSkinInfo(HashMap siteParam) { + // TODO Auto-generated method stub + return vendorDao.getNexusSkinInfo(siteParam); + } + + @Override + public List> getNexusSkinList(HashMap vendorInfo) { + // TODO Auto-generated method stub + return vendorDao.getNexusSkinList(vendorInfo); + } + + @Override + public HashMap getNexusSkin(HashMap skinInfo) { + // TODO Auto-generated method stub + return vendorDao.getNexusSkin(skinInfo); + } + + @Override + public int nexusSkinUpdate(HashMap skinInfo) { + // TODO Auto-generated method stub + return vendorDao.nexusSkinUpdate(skinInfo); + } + + @Override + public List> getTripleVendorList(HashMap tripleSiteInfo) { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/com/bb/util/AESUtil.java b/src/main/java/com/bb/util/AESUtil.java new file mode 100644 index 0000000..035d752 --- /dev/null +++ b/src/main/java/com/bb/util/AESUtil.java @@ -0,0 +1,77 @@ +package com.bb.util; + +import java.nio.charset.StandardCharsets; +import java.security.*; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +import org.springframework.util.Base64Utils; + +import com.bb.config.RequestDecryptWrapper; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class AESUtil { + + private final String ALGORITHM = "AES/CBC/PKCS5PADDING"; + private final String KEY = "25354E6B712A2"; + private String iv; + + public String encrypt(String data) { + try { + Cipher cipher = Cipher.getInstance(ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, createKeySpec(), createIvSpec()); + byte[] encryptData = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)); + return iv + Base64Utils.encodeToString(encryptData); + } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { + throw new RuntimeException("encrypt fail : " + e.getMessage()); + } catch(IllegalArgumentException e) { +// log.error("encrypt fail : " + e.getMessage()); + return ""; + } + } + + public String decrypt(String data) { + String ivStr = data.substring(0,16); + String content = data.substring(16); + + try { + byte[] dataBytes = Base64Utils.decodeFromString(content); + Cipher cipher = Cipher.getInstance(ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, createKeySpec(), new IvParameterSpec(ivStr.getBytes(StandardCharsets.UTF_8))); + byte[] original = cipher.doFinal(dataBytes); + return new String(original, StandardCharsets.UTF_8); + } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { + throw new RuntimeException("decrypt fail : " + e.getMessage()); + } catch(IllegalArgumentException e) { +// log.error("encrypt fail : " + e.getMessage()); + return ""; + } + } + + private IvParameterSpec createIvSpec() { + try { + String iv = StringUtils.randomStr(16); + this.iv = iv; + return new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8)); + } catch (Exception e) { + throw new RuntimeException("createIvSpec fail : " + e.getMessage()); + } + } + + private Key createKeySpec() { + try { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hashBytes = digest.digest(KEY.getBytes(StandardCharsets.UTF_8)); + return new SecretKeySpec(hashBytes, "AES"); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("createKeySpec fail : " + e.getMessage()); + } + } +} diff --git a/src/main/java/com/bb/util/DateTimeUtils.java b/src/main/java/com/bb/util/DateTimeUtils.java new file mode 100644 index 0000000..0b9025a --- /dev/null +++ b/src/main/java/com/bb/util/DateTimeUtils.java @@ -0,0 +1,280 @@ +package com.bb.util; + +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Locale; + +public class DateTimeUtils { + private static final long TIMEOUT = 1000 * 20; + @SuppressWarnings("unused") + private static final SimpleDateFormat FORMAT_YYYYMMDDHHMMSS = new SimpleDateFormat("yyyyMMddHHmmss"); + + public static long getValidDateTime() { + return System.currentTimeMillis() + TIMEOUT; + } + + public static long getValidDateTime(long timeout) { + return System.currentTimeMillis() + timeout; + } + + public static Date now(long time) { + return new Date(time); + } + + public static boolean isBefore(Date date){ + return date.before(new Date()); + } + + /** + * 오라클DB의 DATE형식 객체 생성(현재 년월일시간분초) + * @return Timestamp + */ + public static Timestamp getCurrentTimestamp() { + Calendar calendar = Calendar.getInstance(); + + return new Timestamp(calendar.getTime().getTime()); + } + + /** + * 현재 날짜와 시각을 yyyyMMdd 형태로 반환한다. + * @return String + */ + public static String getYyyymmdd() { + Calendar calendar = Calendar.getInstance(); + Locale currentLocale = new Locale("KOREAN", "KOREA"); + String pattern = "yyyyMMdd"; + SimpleDateFormat formatter = new SimpleDateFormat(pattern, currentLocale); + return formatter.format(calendar.getTime()); + } + + public static String getYyyymmdd2() { + Calendar calendar = Calendar.getInstance(); + Locale currentLocale = new Locale("KOREAN", "KOREA"); + String pattern = "yyyy-MM-dd"; + SimpleDateFormat formatter = new SimpleDateFormat(pattern, currentLocale); + return formatter.format(calendar.getTime()); + } + + + /** + * 현재 날짜와 시각을 Yyyymmddhhmmss 형태로 반환한다. + * + * @return + */ + public static String getYyyymmddhhmmss() { + Calendar calendar = Calendar.getInstance(); + Locale currentLocale = new Locale("KOREAN", "KOREA"); + String pattern = "yyyyMMddHHmmss"; + SimpleDateFormat formatter = new SimpleDateFormat(pattern, currentLocale); + return formatter.format(calendar.getTime()); + } + + /** + * 현재 날짜와 시각을 Yyyymmdd 형태로 반환한다. + * + * @param cal + * @return + */ + public static String getYyyymmdd(Calendar cal) { + Locale currentLocale = new Locale("KOREAN", "KOREA"); + String pattern = "yyyy-MM-dd"; + SimpleDateFormat formatter = new SimpleDateFormat(pattern, currentLocale); + return formatter.format(cal.getTime()); + } + + public static String getYyyymmdd(Calendar cal, String pattern) { + Locale currentLocale = new Locale("KOREAN", "KOREA"); + SimpleDateFormat formatter = new SimpleDateFormat(pattern, currentLocale); + return formatter.format(cal.getTime()); + } + + /** + * getGregorianCalendar + * + * @param yyyymmdd + * @return + */ + public static GregorianCalendar getGregorianCalendar(String yyyymmdd) { + + int yyyy = Integer.parseInt(yyyymmdd.substring(0, 4)); + int mm = Integer.parseInt(yyyymmdd.substring(4, 6)); + int dd = Integer.parseInt(yyyymmdd.substring(6)); + + GregorianCalendar calendar = new GregorianCalendar(yyyy, mm - 1, dd, 0, 0, 0); + + return calendar; + + } + + /** + * 지정된 플래그에 따라 연도 , 월 , 일자를 연산한다. + * - 사용 예 + * String date = DateUtil.getOpDate(java.util.Calendar.DATE , 1, "20080101") + * @return String + */ + public static String getOpDate(int field, int amount, String date) { + + GregorianCalendar calDate = getGregorianCalendar(date); + + if (field == Calendar.YEAR) { + calDate.add(GregorianCalendar.YEAR, amount); + } else if (field == Calendar.MONTH) { + calDate.add(GregorianCalendar.MONTH, amount); + } else { + calDate.add(GregorianCalendar.DATE, amount); + } + + return getYyyymmdd(calDate); + + } + + public static String getOpDate2(int field, int amount, String date) { + + GregorianCalendar calDate = getGregorianCalendar(date); + + if (field == Calendar.YEAR) { + calDate.add(GregorianCalendar.YEAR, amount); + } else if (field == Calendar.MONTH) { + calDate.add(GregorianCalendar.MONTH, amount); + } else { + calDate.add(GregorianCalendar.DATE, amount); + } + + return getYyyymmdd(calDate, "yyyyMMdd"); + + + } + + /** + * 2009-03-10 String날짜변수를 2009-03-10 00:00:00 Timestamp 형식으로 반환한다. + * + * @param dateStr + * @return + */ + public static Timestamp replaceTimestamp(String dateStr) { + if(dateStr == null || dateStr.length() != 10) return null; + + String year = dateStr.substring(0, 4); + String month = dateStr.substring(5, 7); + String day = dateStr.substring(8, 10); + + Calendar calendar = Calendar.getInstance(); + + calendar.set( + Integer.parseInt(year), + Integer.parseInt(month)-1, + Integer.parseInt(day), + 0, + 0, + 0 + ); + + return new Timestamp(calendar.getTime().getTime()); + } + + /** + * 두 날짜간의 기간(년,월,일) 계산 메소드 + * 날짜 인자가 하나인 경우 Default today로 처리 + * (나이 계산에 활용) + * + * @param fromDate java.util.String (예) YYYYMMDD + * @return String[3] - 0:Year, 1:Month, 2:Day + */ + public static int getPeriodBetween(String fromDate) + { + return getPeriodBetween(fromDate, getYyyymmdd()); + } + + /** + * 두 날짜간의 기간(년,월,일) 계산 메소드 + * @param fromDate String (예)"20000710" + * @param endDate String (예)"20001111" + * @return String[3] - 0:Year, 1:Month, 2:Day + */ + public static int getPeriodBetween(String fromDate, String endDate) + { + // fromDate가 endDate보다 클 경우 swap + if (fromDate.compareTo(endDate) > 0) + { + String temp; + temp = fromDate; + fromDate = endDate; + endDate = temp; + } + + int fromYYYY= Integer.parseInt(fromDate.substring(0,4)); + int fromMM = Integer.parseInt(fromDate.substring(4,6)); + int fromDD = Integer.parseInt(fromDate.substring(6,8)); + int endYYYY = Integer.parseInt(endDate.substring(0,4)); + int endMM = Integer.parseInt(endDate.substring(4,6)); + int endDD = Integer.parseInt(endDate.substring(6,8)); + + int iYearCount = endYYYY - fromYYYY; + int iMonthCount = 0; + int iDayCount = 0; + + if(fromDate.substring(4,8).compareTo(endDate.substring(4,8)) > 0) + { + iYearCount--; + iMonthCount = (12-fromMM) + endMM; + } + else + { + //iYearCount = iYearCount; + iMonthCount = endMM - fromMM; + } + + int lastDate = 0; + if(fromDD > endDD) + { + iMonthCount--; + lastDate = getDaysOfMonth(fromYYYY, fromMM); + iDayCount = (lastDate-fromDD) + endDD; + } + else + { + iDayCount = endDD - fromDD; + } + return iDayCount + lastDate; + } + + /** + * 입력한 달의 Day count 를 return + * + * @param year as String + * @param month as String + * @return int the count of month + */ + public static int getDaysOfMonth (String year, String month) + { + if(year == null || month == null) return -1; + return getDaysOfMonth (Integer.parseInt(year), Integer.parseInt(month)) ; + } + + /** + * 입력한 달의 Day count 를 return + * + * @param year as int + * @param month as int + * @return int the count of month + */ + public static int getDaysOfMonth (int year, int month) + { + if(month < 1 || month > 12) return -1; + + if(month == 2) + { + if ( ((year%4 == 0) && (year%100 != 0)) || (year%400 == 0) ) + return 29; + else + return 28; + } + else if(month==4||month==6||month==9||month==11) + return 30; + else + return 31; + } +} diff --git a/src/main/java/com/bb/util/IPKit.java b/src/main/java/com/bb/util/IPKit.java new file mode 100644 index 0000000..b5c5962 --- /dev/null +++ b/src/main/java/com/bb/util/IPKit.java @@ -0,0 +1,134 @@ +package com.bb.util; + + + +import java.security.MessageDigest; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; + + +public class IPKit { + + public static String getIpAddressByRequest(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + // 여러 IP가 있을 경우 첫 번째 값만 사용 + if (ip != null && ip.contains(",")) { + ip = ip.split(",")[0].trim(); + } + + // ✅ IP 형식 검증 (IPv4, IPv6만 허용) + if (!ip.matches("^[0-9a-fA-F:\\.]+$")) { + // ip = "0.0.0.0"; // 또는 null / "unknown" 으로 처리 + ip = "unknown"; + } + + return ip; + } + + public static String getIpAddressByRequest1(HttpServletRequest request) { + String ip = request.getHeader("X-Forwarded-For"); + if(!StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){ + int index = ip.indexOf(","); + if(index != -1){ + return ip.substring(0,index); + }else{ + return ip; + } + } + + ip = request.getHeader("X-Real-IP"); + if(!StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){ + return ip; + } + return request.getRemoteAddr(); + } + + public static String viewPage(HttpServletRequest request, String page) { + HttpSession session = request.getSession(true); + + String userAgent = request.getHeader("user-agent"); + String referer = request.getHeader("referer"); + String vt = ""; + if(!(request.getParameter("vt") == null || "".equals(request.getParameter("vt")))) { + vt = request.getParameter("vt"); + + if("M".equals(vt)) { + session.setAttribute("isMobile", "mobile"); + } + + if("W".equals(vt)) { + session.setAttribute("isMobile", "web"); + } + }else { + session.setAttribute("isMobile", ""); + } + + + + + + Boolean isMobile = false; + + String url = request.getRequestURI(); + String domain = request.getRequestURL().toString().replace(request.getRequestURI(),"/"); + + String viewName=page; + isMobile = userAgent.contains("Mobile/") + || userAgent.contains("Android") + || userAgent.contains("iPhone") + || userAgent.contains("iPad"); + + + if(isMobile) { + viewName = "mobile/"+viewName; + } else { + + + if("mobile".equals(session.getAttribute("isMobile").toString())) { + return "mobile/"+viewName; + }else { + return "front/"+viewName; + } + + + } + + return viewName; + +} + + + public static String shaEnc(String base) { + + + try{ + + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(base.getBytes("UTF-8")); + StringBuffer hexString = new StringBuffer(); + + for (int i = 0; i < hash.length; i++) { + String hex = Integer.toHexString(0xff & hash[i]); + if(hex.length() == 1) hexString.append('0'); + hexString.append(hex); + } + + //출력 + return hexString.toString(); + + } catch(Exception ex){ + throw new RuntimeException(ex); + } + } +} diff --git a/src/main/java/com/bb/util/PagingUtil.java b/src/main/java/com/bb/util/PagingUtil.java new file mode 100644 index 0000000..fa3e92d --- /dev/null +++ b/src/main/java/com/bb/util/PagingUtil.java @@ -0,0 +1,90 @@ +package com.bb.util; + +import com.bb.model.PageFormVO; + +/** + * 페이지 네비게이션 정보 설정을 위한 클래스 + */ +public class PagingUtil { + + + + + public static PageFormVO setPageUtil(PageFormVO pageFormVO) { + //System.out.println("currentPage" + pageFormVO.getPage()); + if(pageFormVO.getPage() == 0) { + //System.out.println("currentPagee" + pageFormVO.getPage()); + pageFormVO.setPage(1); + } + //System.out.println("currentPage" + pageFormVO.getPage()); + + String pagination = ""; // 페이징 결과 값 + String functionName = pageFormVO.getFunction_name(); // 페이징 목록을 요청하는 자바스크립트 함수명 + int currentPage = pageFormVO.getPage(); // 현재 페이지 번호 + + //System.out.println("currentPage" + currentPage); + int countPerList = pageFormVO.getCount_per_list(); // 한 화면에 출력될 게시물 수 + int countPerPage = pageFormVO.getCount_per_page(); // 한 화면에 출력될 페이지 수 + int totalListCount = pageFormVO.getTatal_list_count(); // 총 게시물 수 + int totalPageCount = totalListCount / countPerList; // 총 페이지 수 + if (totalListCount % countPerList > 0) { // 총 페이수를 구할 때 int형으로 계산하면 나머지가 있는 경우 게시물이 존재하기 때문에 총 페이지의 수를 수정 + totalPageCount = totalPageCount + 1; + } + + int viewFirstPage = (((currentPage - 1) / countPerPage) * countPerPage) + 1; // 한 화면에 첫 페이지 번호 + int ViewLastPage = viewFirstPage + countPerPage - 1; // 한 화면에 마지막 페이지 번호 + if (ViewLastPage > totalPageCount) { // 마지막 페이지의 수가 총 페이지의 수보다 큰 경우는 게시물이 존재하지 않기 때문에 마지막 페이지의 수를 수정 + ViewLastPage = totalPageCount; + } + + int totalFirstPage = 1; // 전체 페이지 중에 처음 페이지 + int totalLastPage = totalPageCount; // 전체 페이지 중에 마지막 페이지 + int prePerPage = 0; // 이전 화면에 첫번째 번호 + if (viewFirstPage - countPerPage > 0) { + prePerPage = viewFirstPage - countPerPage; + } else { + prePerPage = totalFirstPage; + } + int nextPerPage = 0; // 이후 화면에 첫번째 번호 + if (viewFirstPage + countPerPage < totalPageCount) { + nextPerPage = viewFirstPage + countPerPage; + } else { + nextPerPage = totalPageCount; + } + + // 페이지 네이게이션 설정 + + + pagination += "
"; + // pagination += "
Total Page :" + totalPageCount +"
"; +// pagination += "
"; + //pagination += " "; + + pagination += " "; + + //pagination += " "; + for (int a = viewFirstPage; a <= ViewLastPage; a++) { + if (a == currentPage) { + // pagination += " "+a+""; + // pagination += " "+a+""; + pagination += " "; + } else { + pagination += " "; + } + } + //pagination += " "; + // pagination += " "; + pagination += " "; + //pagination += "
"; + pagination += "
"; + + int offset = ((currentPage - 1) * countPerList) ; // 한 화면의 표출되는 게시물의 시작 번호의 -1 (쿼리 조건절) + + // LIMIT는 가져올 row의 수, OFFSET은 몇 번째 row부터 가져올지를 결정 + pageFormVO.setLimit(countPerList); + pageFormVO.setOffset(offset); + pageFormVO.setPagination(pagination); + + return pageFormVO; + } +} diff --git a/src/main/java/com/bb/util/PassimpaySignatureUtil.java b/src/main/java/com/bb/util/PassimpaySignatureUtil.java new file mode 100644 index 0000000..d8883fb --- /dev/null +++ b/src/main/java/com/bb/util/PassimpaySignatureUtil.java @@ -0,0 +1,38 @@ +package com.bb.util; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +public class PassimpaySignatureUtil { + + private static final String HMAC_SHA256 = "HmacSHA256"; + + /** + * Passimpay API Signature 생성 + * + * @param platformId 플랫폼 ID + * @param bodyJson 요청 본문 JSON 문자열 + * @param secret Passimpay API Secret + * @return 생성된 signature (Base64) + */ + public static String generateSignature(String platformId, String bodyJson, String secret) { + try { + // signatureContract: platformId + ";" + bodyJson + ";" + secret + String signatureContract = platformId + ";" + bodyJson + ";" + secret; + + Mac mac = Mac.getInstance(HMAC_SHA256); + SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), HMAC_SHA256); + mac.init(secretKey); + + byte[] hash = mac.doFinal(signatureContract.getBytes(StandardCharsets.UTF_8)); + + // Base64 인코딩 + return Base64.getEncoder().encodeToString(hash); + + } catch (Exception e) { + throw new RuntimeException("Passimpay Signature 생성 실패", e); + } + } +} diff --git a/src/main/java/com/bb/util/RandomRolling.java b/src/main/java/com/bb/util/RandomRolling.java new file mode 100644 index 0000000..7f08731 --- /dev/null +++ b/src/main/java/com/bb/util/RandomRolling.java @@ -0,0 +1,60 @@ +package com.bb.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +public class RandomRolling { + + /** + * 퍼센트 확률에 당첨여부 반환(1 ~ 100%) + */ + public static boolean isBlankSpin(int percentNum) { + boolean result = false; + + List arrPick = getScopeList(1, 100); + int pickNum = getRandom(1,100); + // 백분율, 1 ~ 100개 숫자중 택1(이 숫자가 확률배열에 포함여부 체크) + + if(0 < percentNum && percentNum < 100) { + Collections.shuffle(arrPick); + + for(int i=1; i<=percentNum; i++) { + if(arrPick.get(i-1) == pickNum) { + result = true; + break; + } + } + } else if (percentNum >= 100) { + result = true; + } + + return result; + } + + /** + * 범위 숫자 리스트 반환 + */ + public static List getScopeList(int pstart, int pend){ + List list = new ArrayList(); + + for(int i=pstart; i<=pend; i++) { + list.add(i); + } + + return list; + } + + + + public static int getRandom(int p_start, int p_end){ + Random rnd = new Random(); + + if(p_start >= p_end){ + return 0; + } else { + return rnd.nextInt(p_end-p_start+1) + p_start; + } + } +} diff --git a/src/main/java/com/bb/util/StringUtils.java b/src/main/java/com/bb/util/StringUtils.java new file mode 100644 index 0000000..a78849a --- /dev/null +++ b/src/main/java/com/bb/util/StringUtils.java @@ -0,0 +1,338 @@ +package com.bb.util; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.xml.bind.DatatypeConverter; + + +public class StringUtils { + + public static boolean isNumberic(String str) { + boolean result = true; + for(char c : str.toCharArray()){ + if(!Character.isDigit(c)) { + result = false; + break; + } + } + return result; + } + + /** + * 문자열이 NULL이거나 빈값인지 검사 + * @param string + * @return + */ + public static boolean isEmpty(String string) { + return string == null || string.trim().isEmpty(); + } + + /** + * null값인 문자열 기본값으로 대체 + * @param string + * @param defaultValue + * @return + */ + public static String nullValue(String string, String defaultValue) { + if(isEmpty(string)) { + return defaultValue; + } else { + return string; + } + } + + /** + * null값인 문자열 기본값으로 대체 + * @param string + * @param defaultValue + * @return + */ + public static String nullValue(String string, int defaultValue) { + if(isEmpty(string)) { + return String.valueOf(defaultValue); + } else { + return string; + } + } + + /** + * null값인 문자열 기본값으로 대체 + * @param string + * @param defaultValue + * @return + */ + public static String nullValue(String string, float defaultValue) { + if(isEmpty(string)) { + return String.valueOf(defaultValue); + } else { + return string; + } + } + + /** + * null값인 문자열 기본값으로 대체 + * @param string + * @return + */ + public static String nullValue(String string) { + return nullValue(string, ""); + } + + + /** + * 문자열 배열을 합친다 + * @param strings + * @param separater + * @return + */ + public static String join(String[] strings, String separater) { + String joinedString = ""; + + for(int i = 0; i < strings.length; i++) { + joinedString += (joinedString.length() > 0 ? separater : "") + strings[i]; + } + + return joinedString; + } + + /** + * Map의 키값을 문자열 배열로 얻는다 + * @param map + * @return + */ + public static String[] getArrayFrom(Map map) { + String[] strings = new String[map.size()]; + + int i = 0; + for(Object key : map.keySet()) { + strings[i++] = key.toString(); + } + + return strings; + } + + + /** + * Map의 키값을 문자열로 얻는다 + * @param map + * @param separater + * @return + */ + public static String getStringFrom(Map map, String separater) { + return join(getArrayFrom(map), separater); + } + + /** + * 닉네임용 문자 난수발생기 + * @param length + * @return + */ + public static String generateString(int length) { + + Random rnd = new Random(); + StringBuffer buf =new StringBuffer(); + String returnStr = ""; + + for(int i=0;i Integer.parseInt(numStr)) { + result = result - Integer.parseInt(plusNumStr); + } + + return String.valueOf(result); + } + + public static String mask(String origin, int length, String mask) { + StringBuilder masked = new StringBuilder(origin.substring(0, length)); + + for(int i = 0; i < origin.length() - length; i++) { + masked.append(mask); + } + + return masked.toString(); + } + + public static String numberFormat(Object number, String pattern) { + DecimalFormat df = new DecimalFormat(pattern); + return df.format(number); + } + + public static String randomCharNum(int wordLength) { + Random r = new Random(); + StringBuilder sb = new StringBuilder(wordLength); + for(int i = 0; i < wordLength; i++) { + if(r.nextBoolean()){ + sb.append((char)((int)(r.nextInt(26))+97)); + }else{ + sb.append((r.nextInt(10))); + } + } + return sb.toString(); + } + + public static String randomStr(int length) { + Random random = new Random(); + StringBuilder str = new StringBuilder(); + for (int i = 0; i < length; i++) { + int choice = random.nextInt(3); + switch(choice) { + case 0: + str.append((char)(random.nextInt(25) + 97)); + break; + case 1: + str.append((char)(random.nextInt(25) + 65)); + break; + case 2: + str.append((char)(random.nextInt(10) + 48)); + break; + default: + break; + } + } + return str.toString(); + } + + public static String md5AndHex(String plainText) throws NoSuchAlgorithmException { + + String MD5 = ""; + + //MessageDigest 인스턴스 생성(MD5) + MessageDigest md = MessageDigest.getInstance("MD5"); + + //해쉬값 업데이트 + md.update(plainText.getBytes()); + byte byteData[] = md.digest(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < byteData.length; i++) { + sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); + } + + MD5 = sb.toString(); + return MD5; + + //Byte To Hex String + //return DatatypeConverter.printHexBinary(md.digest()); + } + + public static String makeRandomKey(int length) { + int leftLimit = 48; // numeral '0' + int rightLimit = 122; // letter 'z' + int targetStringLength = length; + Random random = new Random(); + String generatedString = random.ints(leftLimit, rightLimit + 1) + .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97)) + .limit(targetStringLength) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + System.out.println("### makeRandomKey : " + generatedString); + return generatedString; + } + + public static String[] extractUrlParts(String url) { + String[] urls = null; + Pattern urlPattern = Pattern.compile("^(https?):\\/\\/([^:\\/\\s]+)(:([^\\/]*))?((\\/[^\\s/\\/]+)*)?\\/([^#\\s\\?]*)(\\?([^#\\s]*))?(#(\\w*))?$"); + Matcher mc = urlPattern.matcher(url); + + if(mc.matches()){ + urls = new String[mc.groupCount()]; + for(int i=0;i list = new ArrayList<>(); + for(int i=0; i<(numLength-1); i++) { + int num = random.nextInt(10); + System.out.println("### makeRandomCoupon::num::" + num); + sumNum = sumNum + num; + lastNum = num; + list.add(String.valueOf(num)); + } + + System.out.println("### makeRandomCoupon::sumNum::" + sumNum); + System.out.println("### makeRandomCoupon::lastNum::" + lastNum); + int numEnd = 0; + if(lastNum != 0) { + numEnd = sumNum % lastNum; + } + System.out.println("### makeRandomCoupon::numEnd::" + numEnd); + list.add(String.valueOf(numEnd)); + + StringBuffer sbNum = new StringBuffer(); + for(int i=0; i 0; value >>>= 8) { + data[i] = (byte) value; + } + + SecretKeySpec signKey = new SecretKeySpec(key, "HmacSHA1"); + Mac mac = Mac.getInstance("HmacSHA1"); + mac.init(signKey); + byte[] hash = mac.doFinal(data); + + int offset = hash[20 - 1] & 0xF; + + // We're using a long because Java hasn't got unsigned int. + long truncatedHash = 0; + for (int i = 0; i < 4; ++i) { + truncatedHash <<= 8; + // We are dealing with signed bytes: + // we just keep the first byte. + truncatedHash |= (hash[offset + i] & 0xFF); + } + + truncatedHash &= 0x7FFFFFFF; + truncatedHash %= 1000000; + + return (int) truncatedHash; + } +} diff --git a/src/main/java/com/bb/util/UnsafeOkHttpClient.java b/src/main/java/com/bb/util/UnsafeOkHttpClient.java new file mode 100644 index 0000000..d1c90b9 --- /dev/null +++ b/src/main/java/com/bb/util/UnsafeOkHttpClient.java @@ -0,0 +1,48 @@ +package com.bb.util; + +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.X509TrustManager; + +import okhttp3.CipherSuite; +import okhttp3.ConnectionSpec; +import okhttp3.OkHttpClient; +import okhttp3.TlsVersion; + +public class UnsafeOkHttpClient { + + public static OkHttpClient getTls12Client() throws Exception { + // 기본 TrustManager 사용 (신뢰 가능한 루트 CA) + TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( + TrustManagerFactory.getDefaultAlgorithm()); + trustManagerFactory.init((java.security.KeyStore) null); + TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); + X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; + + // SSLContext TLS 1.2로 초기화 + SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); + sslContext.init(null, new TrustManager[]{trustManager}, null); + SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); + + // 서버 호환 CipherSuite만 사용 + ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) + .tlsVersions(TlsVersion.TLS_1_2) + .cipherSuites( + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + ) + .build(); + + return new OkHttpClient.Builder() + .sslSocketFactory(sslSocketFactory, trustManager) + .connectionSpecs(Arrays.asList(spec)) + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .build(); + } +} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..a28b2fb --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,121 @@ +server: + tomcat: + connection-timeout: 15000 + threads: + max: 4096 + min-spare: 50 + accept-count: 100 + mbeanregistry: + enabled: true + + port: 80 + servlet: + encoding: + force: true + +spring: + devtools: + livereload: + enabled: true + restart: + enabled: true + exclude: static/**,templates/** + # OMS-Master + datasource1: + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://ultracore.cbop3tqawysk.ap-southeast-1.rds.amazonaws.com:6600/omsDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&autoReconnect=true&useEncoding=true&characterEncoding=utf-8&allowMultiQueries=true + username: dev_oms + password: YJsiJRa@oWmCgwH44SZEvPqP9Lkjw + auto-commit: true + connection-test-query: SELECT 1 + transaction-isolation: TRANSACTION_READ_COMMITTED + maximum-pool-size: 32 + minimum-idle: 32 + leak-detection-threshold: 60000 + validation-timeout: 300000 + hikari: + pool-name: hikari-cp + max-lifetime: 300000 #1800000 에서 변경 + connection-timeout: 30000 + # OMS-Slave + datasource2: + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://core-ro.cbop3tqawysk.ap-southeast-1.rds.amazonaws.com:6600/omsDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&autoReconnect=true&useEncoding=true&characterEncoding=utf-8&allowMultiQueries=true + # jdbc-url: jdbc:mysql://ultracore.cbop3tqawysk.ap-southeast-1.rds.amazonaws.com:6600/omsDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&autoReconnect=true&useEncoding=true&characterEncoding=utf-8&allowMultiQueries=true + username: dev_oms + password: YJsiJRa@oWmCgwH44SZEvPqP9Lkjw + auto-commit: true + connection-test-query: SELECT 1 + transaction-isolation: TRANSACTION_READ_COMMITTED + maximum-pool-size: 25 + minimum-idle: 25 + leak-detection-threshold: 60000 + validation-timeout: 300000 + hikari: + pool-name: hikari-cp + max-lifetime: 300000 #1800000 에서 변경 + connection-timeout: 30000 + # Triple + datasource3: + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://ultracore.cbop3tqawysk.ap-southeast-1.rds.amazonaws.com:6600/triple_db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&autoReconnect=true&useEncoding=true&characterEncoding=utf-8 + username: dev_triple + password: 4N!lCDki8GhCfEIHpRogIQebvrCJ0 + auto-commit: true + connection-test-query: SELECT 1 + minimum-idle: 2 + maximum-pool-size: 2 + pool-name: hikari-cp + transaction-isolation: TRANSACTION_READ_COMMITTED + task: + scheduling: + pool: + size: 20 + thread-name-prefix: cr-task-pool- + thymeleaf: + mode: HTML + prefix: classpath:/templates/ + check-template-location: true + suffix: .html + encoding: utf-8 + cache: false + aop: + auto: true + proxy-target-class: true + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + data.redis: + host: 47.245.52.64 + port: 9124 + password: rjsemfwlak#% + +logging: + file: + path: /home/log/oms + level: + org.springframework: INFO + com.bb: INFO + com.zaxxer.hikari.HikariConfig: DEBUG + com.zaxxer.hikari: TRACE + +mybatis: + mapper-locations: classpath:mapper/*/*.xml + type-aliases-package: + configuration: + map-underscore-to-camel-case: true + +jwt: + header: Authorization + secret: c2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQtc2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQK + validity-in-seconds: 36000 + +cron: PROD +#cron: LOCAL + +management: + endpoints: + web: + exposure: + include: "*" \ No newline at end of file diff --git a/src/main/resources/application-real.yml b/src/main/resources/application-real.yml new file mode 100644 index 0000000..81f1b32 --- /dev/null +++ b/src/main/resources/application-real.yml @@ -0,0 +1,138 @@ +server: + tomcat: + connection-timeout: 15000 + threads: + max: 4096 + min-spare: 50 + accept-count: 100 + mbeanregistry: + enabled: true + + # 추가: Access log 설정 + accesslog: + enabled: true # Access log 활성화 + directory: /home/log/oms/access # 로그 저장 경로 (프로젝트 실행 경로 기준) + prefix: access_log # 파일 이름 접두사 + suffix: .log # 확장자 + pattern: "%h %l %u %t \"%r\" %s %b %D ms" # 로그 패턴 + file-date-format: .yyyy-MM-dd # 날짜별로 분리 + rotate: true # 날짜별 로테이션 + rename-on-rotate: true # 파일 이름 변경 + + port: 80 + servlet: + encoding: + force: true + + +spring: + devtools: + livereload: + enabled: true + restart: + enabled: true + exclude: static/**,templates/** + # OMS-Master + datasource1: + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://ultracore.cbop3tqawysk.ap-southeast-1.rds.amazonaws.com:6600/omsDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&autoReconnect=true&useEncoding=true&characterEncoding=utf-8&allowMultiQueries=true + username: dev_oms + password: YJsiJRa@oWmCgwH44SZEvPqP9Lkjw + auto-commit: true + connection-test-query: SELECT 1 + transaction-isolation: TRANSACTION_READ_COMMITTED + maximum-pool-size: 100 + minimum-idle: 30 + leak-detection-threshold: 60000 + validation-timeout: 5000 + hikari: + pool-name: hikari-cp + max-lifetime: 300000 #1800000 에서 변경 + connection-timeout: 30000 + # OMS-Slave + datasource2: + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://core-ro.cbop3tqawysk.ap-southeast-1.rds.amazonaws.com:6600/omsDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&autoReconnect=true&useEncoding=true&characterEncoding=utf-8&allowMultiQueries=true + # jdbc-url: jdbc:mysql://ultracore.cbop3tqawysk.ap-southeast-1.rds.amazonaws.com:6600/omsDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&autoReconnect=true&useEncoding=true&characterEncoding=utf-8&allowMultiQueries=true + username: dev_oms + password: YJsiJRa@oWmCgwH44SZEvPqP9Lkjw + auto-commit: true + connection-test-query: SELECT 1 + transaction-isolation: TRANSACTION_READ_COMMITTED + maximum-pool-size: 120 + minimum-idle: 40 + leak-detection-threshold: 60000 + validation-timeout: 5000 + hikari: + pool-name: hikari-cp + max-lifetime: 300000 #1800000 에서 변경 + connection-timeout: 30000 + # Triple + datasource3: + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://ultracore.cbop3tqawysk.ap-southeast-1.rds.amazonaws.com:6600/triple_db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&autoReconnect=true&useEncoding=true&characterEncoding=utf-8 + username: dev_triple + password: 4N!lCDki8GhCfEIHpRogIQebvrCJ0 + auto-commit: true + connection-test-query: SELECT 1 + minimum-idle: 2 + maximum-pool-size: 2 + pool-name: hikari-cp + transaction-isolation: TRANSACTION_READ_COMMITTED + task: + scheduling: + pool: + size: 5 + thread-name-prefix: cr-task-pool- + thymeleaf: + mode: HTML + prefix: classpath:/templates/ + check-template-location: true + suffix: .html + encoding: utf-8 + cache: false + aop: + auto: true + proxy-target-class: true + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + data.redis: + host: 47.245.52.64 + port: 9124 + password: rjsemfwlak#% + +logging: + file: + path: /home/log/oms + level: + org.springframework: INFO + com.bb: INFO + com.zaxxer.hikari.HikariConfig: DEBUG + com.zaxxer.hikari: TRACE +# reactor.netty: DEBUG # Reactor Netty 디버그 +# reactor.netty.http.client: DEBUG # HTTP client 디버그 +# io.netty: DEBUG # Netty 전체 디버그 +# io.netty.handler.ssl: DEBUG # SSL 핸드셰이크 디버그 핵심 +# javax.net.ssl: DEBUG # SSL 엔진 디버그 (핵심) + +mybatis: + mapper-locations: classpath:mapper/*/*.xml + type-aliases-package: + configuration: + map-underscore-to-camel-case: true + +jwt: + header: Authorization + secret: c2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQtc2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQK + validity-in-seconds: 36000 + +cron: PROD +#cron: LOCAL + +management: + endpoints: + web: + exposure: + include: "*" \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..ac70aa9 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,5 @@ +spring.profiles.active: @env@ + + + + diff --git a/src/main/resources/authentication.properties b/src/main/resources/authentication.properties new file mode 100644 index 0000000..bd4dfd3 --- /dev/null +++ b/src/main/resources/authentication.properties @@ -0,0 +1,5 @@ +AUTH.HEADER_STRING=Authorization +AUTH.TOKEN_PREFIX=Bearer +AUTH.AUTHORITIES_NAME=roles +AUTH.TOKEN_VALIDITY=18000 +AUTH.SIGNING_KEY=bbsskey \ No newline at end of file diff --git a/src/main/resources/db1/BET.xml b/src/main/resources/db1/BET.xml new file mode 100644 index 0000000..26c6fb0 --- /dev/null +++ b/src/main/resources/db1/BET.xml @@ -0,0 +1,2781 @@ + + + + + + INSERT INTO betinfo( + siteId, + memId, + betType, + gameCategory, + vendorCode, + betId, + gameName, + betAmt, + betRate, + betWinAmt, + betBonus, + betCnt, + betResults, + betStatus, + bfMoney, + afMoney, + updDate, + regDate, + regId, + updId, + delYn, + biProcYn, + biPushYn, + vendor + ) VALUES ( + #{siteId}, + #{memId}, + #{betType}, + #{gameCategory}, + #{vendorCode}, + #{betId}, + #{gameName}, + #{betAmt}, + #{betRate}, + TRUNCATE(#{betRate}*#{betAmt}, 0), + #{betBonus}, + #{betCnt}, + null, + 'WAIT', + #{bfMoney}, + #{afMoney}, + + #{updDate}, + + + NOW(), + + + #{regDate}, + + + NOW(), + + #{regId}, + #{updId}, + #{delYn}, + 'Y', + #{biPushYn}, + #{vendor} + ) + + + SELECT LAST_INSERT_ID(); + + + + + + INSERT INTO betinfomap ( + betIdx, + mapId, + rateTypeCode, + betName, + betAmt, + betRate, + betWinAmt, + debitDetailStr, + creditDetailStr + ) VALUES ( + #{betIdx}, + #{mapId}, + #{rateTypeCode}, + #{betName}, + #{betAmt}, + #{betRate}, + #{betWinAmt}, + #{debitDetailStr}, + #{creditDetailStr} + ) + + + + INSERT INTO betinfo( + siteId, + memId, + betType, + gameCategory, + vendorCode, + betId, + gameName, + betAmt, + betRate, + betWinAmt, + betBonus, + betCnt, + betResults, + betStatus, + bfMoney, + afMoney, + updDate, + regDate, + regId, + updId, + delYn, + isBlankSpinYn, + biProcYn, + biPushYn, + pointRegYn, + vendor + ) VALUES ( + #{siteId}, + #{memId}, + #{betType}, + #{gameCategory}, + #{vendorCode}, + #{betId}, + #{gameName}, + #{betAmt}, + #{betRate}, + #{betWinAmt}, + #{betBonus}, + #{betCnt}, + #{betResults}, + #{betStatus}, + #{bfMoney}, + #{afMoney}, + + #{updDate}, + + + NOW(), + + + #{regDate}, + + + NOW(), + + #{regId}, + #{updId}, + 'N', + 'N', + 'Y', + #{biPushYn}, + 'Y', + #{vendor} + ) + + + SELECT LAST_INSERT_ID(); + + + + + + UPDATE + betinfo + SET betRate = IF(betAmt='0' OR betAmt='0.0', 1, TRUNCATE((${betWinAmt} + betWinAmt)/betAmt, 0)), + betWinAmt = betWinAmt + #{betWinAmt}, + betResults = IF((${betWinAmt} + betWinAmt)>0, 'PASS', 'FAIL'), + betStatus = IF((${betWinAmt} + betWinAmt)>0, 'JUNGSANEND', 'RESULTEND'), + afMoney = #{afMoney}, + + pointRegYn = #{pointRegYn}, + + updDate = NOW() + WHERE + betIdx = #{betIdx} + + + + UPDATE + old_betinfo + SET betRate = IF(betAmt='0' OR betAmt='0.0', 1, TRUNCATE((${betWinAmt} + betWinAmt)/betAmt, 0)), + betWinAmt = betWinAmt + #{betWinAmt}, + betResults = IF((${betWinAmt} + betWinAmt)>0, 'PASS', 'FAIL'), + betStatus = IF((${betWinAmt} + betWinAmt)>0, 'JUNGSANEND', 'RESULTEND'), + afMoney = #{afMoney}, + + pointRegYn = #{pointRegYn}, + + updDate = NOW() + WHERE + betIdx = #{betIdx} + + + + UPDATE + betinfomap + SET betRate = IF(betAmt='0' OR betAmt='0.0', 1, TRUNCATE((${betWinAmt} + betWinAmt)/betAmt, 0)), + betWinAmt = betWinAmt + #{betWinAmt}, + creditDetailStr = #{creditDetailStr} + WHERE + betIdx = #{betIdx} AND mapId = #{mapId} + + + + UPDATE + old_betinfomap + SET betRate = IF(betAmt='0' OR betAmt='0.0', 1, TRUNCATE((${betWinAmt} + betWinAmt)/betAmt, 0)), + betWinAmt = betWinAmt + #{betWinAmt}, + creditDetailStr = #{creditDetailStr} + WHERE + betIdx = #{betIdx} AND mapId = #{mapId} + + + + UPDATE + betinfo + SET betRate = IF(betAmt='0' OR betAmt='0.0', 1, TRUNCATE((${betWinAmt} + betWinAmt)/betAmt, 0)), + betWinAmt = betWinAmt + #{betWinAmt}, + betResults = IF((${betWinAmt} + betWinAmt)>0, 'PASS', 'FAIL'), + betStatus = IF((${betWinAmt} + betWinAmt)>0, 'JUNGSANEND', 'RESULTEND'), + afMoney = #{afMoney}, + updDate = NOW() + WHERE + betIdx = #{betIdx} + + + + UPDATE daily_periodic_reports + SET dSportBetAmtWin = dSportBetAmtWin + #{betWinAmt} + WHERE 1=1 + AND days = DATE_FORMAT(NOW(), '%Y-%m-%d') + AND siteId = #{siteId} AND memId = #{memId} + + + + UPDATE ( + SELECT + DATE_FORMAT(b1.regDate, '%Y-%m-%d') AS days, + b1.siteId, + b1.memId + FROM betinfo b1 + WHERE 1=1 + AND b1.betIdx = #{betIdx} + UNION + SELECT + DATE_FORMAT(b2.regDate, '%Y-%m-%d') AS days, + b2.siteId, + b2.memId + FROM old_betinfo b2 + WHERE 1=1 + AND b2.betIdx = #{betIdx} + ) bi LEFT JOIN daily_periodic_reports dr ON dr.days=bi.days AND dr.siteId=bi.siteId AND dr.memId=bi.memId + SET dr.dSportBetAmt = dr.dSportBetAmt + #{betAmt} + WHERE 1=1 + + + + UPDATE ( + SELECT + DATE_FORMAT(b1.regDate, '%Y-%m-%d') AS days, + b1.siteId, + b1.memId + FROM betinfo b1 + WHERE 1=1 + AND b1.betIdx = #{betIdx} + UNION + SELECT + DATE_FORMAT(b2.regDate, '%Y-%m-%d') AS days, + b2.siteId, + b2.memId + FROM old_betinfo b2 + WHERE 1=1 + AND b2.betIdx = #{betIdx} + ) bi LEFT JOIN daily_periodic_reports dr ON dr.days=bi.days AND dr.siteId=bi.siteId AND dr.memId=bi.memId + SET dr.dSportBetAmtWin = dr.dSportBetAmtWin + #{betWinAmt} + WHERE 1=1 + + + + UPDATE ( + SELECT + DATE_FORMAT(b1.regDate, '%Y-%m-%d') AS days, + b1.siteId, + b1.memId + FROM betinfo b1 + WHERE 1=1 + AND b1.betIdx = #{betIdx} + UNION + SELECT + DATE_FORMAT(b2.regDate, '%Y-%m-%d') AS days, + b2.siteId, + b2.memId + FROM old_betinfo b2 + WHERE 1=1 + AND b2.betIdx = #{betIdx} + ) bi LEFT JOIN daily_periodic_reports dr ON dr.days=bi.days AND dr.siteId=bi.siteId AND dr.memId=bi.memId + SET dr.dSportBetAmt = dr.dSportBetAmt - #{betWinAmt} + WHERE 1=1 + + + + UPDATE ( + SELECT + DATE(p1.regDate) AS days, + p1.siteId, + p1.memId, + CAST(p1.pointAmt AS SIGNED) AS pointAmt + FROM point_info p1 + WHERE 1=1 + AND p1.betIdx = #{betIdx} + UNION + SELECT + DATE(p2.regDate) AS days, + p2.siteId, + p2.memId, + CAST(p2.pointAmt AS SIGNED) AS pointAmt + FROM old_point_info p2 + WHERE 1=1 + AND p2.betIdx = #{betIdx} + ) a + LEFT JOIN daily_periodic_reports b ON a.days=b.days AND a.siteId=b.siteId AND a.memId=b.memId + SET b.dSportRollingAmt = dSportRollingAmt + CAST(a.pointAmt AS SIGNED) + WHERE 1=1 + + + + UPDATE ( + SELECT + DATE(p1.regDate) AS days, + p1.siteId, + p1.memId, + CAST(p1.pointAmt AS SIGNED) AS pointAmt + FROM point_info p1 + WHERE 1=1 + AND p1.betIdx = #{betIdx} + UNION + SELECT + DATE(p2.regDate) AS days, + p2.siteId, + p2.memId, + CAST(p2.pointAmt AS SIGNED) AS pointAmt + FROM old_point_info p2 + WHERE 1=1 + AND p2.betIdx = #{betIdx} + ) a + LEFT JOIN daily_periodic_reports b ON a.days=b.days AND a.siteId=b.siteId AND a.memId=b.memId + SET b.dSportRollingAmt = dSportRollingAmt - CAST(a.pointAmt AS SIGNED) + WHERE 1=1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE `betinfomap` mp , ( + + SELECT map.betIdx , IF(resultSum >0, 'N', 'Y') AS betResult + + + FROM( + + SELECT + res.betIdx, + + IF( (res.narea='' OR res.narea = res.resultArea), 0, 1) + + IF( (res.noe='' OR res.noe = res.resultOE), 0, 1) + + IF( (res.nuo='' OR res.nuo = res.resultUO), 0, 1) + + IF( (res.ncarea='' OR res.ncarea = CONCAT(res.resultOE, res.resultArea)), 0, 1) + + IF( (res.ncoe='' OR res.ncoe = CONCAT(res.resultOE, resultUO)), 0, 1) + + IF( (res.parea='' OR res.parea = res.powerArea), 0, 1) + + IF( (res.poe='' OR res.poe = res.powerOE), 0, 1) + + IF( (res.puo='' OR res.puo = res.powerUO), 0, 1) + + IF( (res.pnum='' OR res.pnum = res.powerball), 0, 1) + + IF( (res.pcoeuo='' OR res.pcoeuo = CONCAT(res.powerOE, res.powerUO)), 0, 1) + AS resultSum + + FROM ( + SELECT + b.betIdx, + DATE_FORMAT(b.regDate , '%Y-%m-%d'), map.mineIdx , + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].narea'), '\"', ''), '') AS narea, + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].noe'), '\"', ''), '') AS noe, + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].nuo'), '\"', ''), '') AS nuo, + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].ncarea'), '\"', ''), '') AS ncarea, + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].ncoe'), '\"', ''), '') AS ncoe, + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].parea'), '\"', ''), '') AS parea, + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].poe'), '\"', ''), '') AS poe, + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].puo'), '\"', ''), '') AS puo, + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].pnum'), '\"', ''), '') AS pnum, + IFNULL(REPLACE(JSON_EXTRACT(map.data, '$.betGameInfo[0].pcoeuo'), '\"', ''), '') AS pcoeuo, + + result.* + + FROM `betinfo` b + LEFT JOIN betinfomap map ON b.betIdx = map.betIdx + LEFT JOIN powerresult result ON map.mineIdx = result.gameRound AND DATE_FORMAT(b.regDate , '%Y-%m-%d') = DATE_FORMAT(result.gameTime , '%Y-%m-%d') + + + WHERE + betType = 'minigame' AND b.betStatus ='WAIT' AND (betResult IS NULL OR betResult ='') + )res + )map + )rm + SET mp.betResult = rm.betResult + WHERE rm.betIdx = mp.betIdx AND mp.betIdx = #{betIdx} + + + + UPDATE betinfo, betinfomap SET + betinfo.betResults = IF(betinfomap.betResult ='Y', 'PASS', 'FAIL'), + betinfo.betStatus = 'RESULTEND', + betinfo.updDate = NOW() + WHERE betinfo.betIdx = betinfomap.betIdx AND betinfo.betIdx= #{betIdx} AND betinfo.betStatus = 'WAIT' AND gameCategory = 'minigame' + AND betinfomap.betResult IN ('Y', 'N') + + + + INSERT INTO cash_info (`siteId`,`memId`,`cashType`,`cashDesc`,`cashAmt`,`betIdx`,`cashStatus`,`updDate`,`regDate`,`preCashAmt`) + SELECT betinfo.siteId , betinfo.memId, '3', '베팅성공' , betWinAmt , betIdx, '1' , NOW(), NOW() , + 0 + FROM `betinfo` WHERE betinfo.betIdx= #{betIdx} AND betinfo.betStatus = 'RESULTEND' AND gameCategory = 'minigame' AND betResults = 'PASS' + + + + UPDATE betinfo SET betStatus = 'JUNGSANEND' WHERE betIdx= #{betIdx} AND betResults = 'PASS' + + + + INSERT INTO point_info (siteId, `memId`,`pointType`,`pointAmt`,`pointDesc`,`betIdx`,`delYn`,`regId`,`pointStatus`,`updDate`,`regDate`, adminId, memo, prePointAmt) + SELECT d.*, mm.retailType, NOW(), NOW(), '' AS adminId, '' AS memo, 0 FROM ( + SELECT FB1.siteId, FB1.recommenderId , '3' AS pointType , + + CASE WHEN FB1.order =0 THEN TRUNCATE(FB1.betAmt*FB1.pointRate*0.01, 0) + ELSE TRUNCATE( FB1.betAmt*(FB1.pointRate - IFNULL(FB2.pointRate, 0))*0.01, 0) + END AS getPoint , FB1.rateType AS pointDesc, + FB1.betIdx, 'N' AS delYn, + FB1.regId AS regId + + + + FROM ( + + SELECT FB.*, r.idleStartRate, r.idleEndRate, r.rateType, r.pointRate, r.useYn + + FROM ( + SELECT B.siteId, B.betIdx, f.recommenderId, B.betAmt, B.betRate, f.order, B.gameType , f.memId AS regid FROM ( + SELECT b.*, map.gameType FROM betinfo b LEFT JOIN betinfomap map ON b.betIdx = map.betIdx + + WHERE gameCategory='minigame' + + AND betStatus IN ('JUNGSANEND', 'RESULTEND') + AND b.pointRegYn ='N' + AND b.betIdx= #{betIdx} + )B JOIN memberflow f + WHERE B.memId = f.memId + + )FB LEFT JOIN memrateinfo r ON FB.recommenderId = r.memId AND FB.gameType = r.gameType AND r.rateType ='R' AND FB.betRate*1 > r.idleStartRate*1 AND FB.betRate*1 <= r.idleEndRate*1 AND r.useYn='Y' + + WHERE r.memId IS NOT NULL + )FB1 LEFT JOIN ( + + SELECT `order`, pointRate + + FROM ( + SELECT B.siteId, f.recommenderId, B.betAmt, B.betRate, f.order, B.gameType FROM ( + SELECT b.*, map.gameType FROM betinfo b LEFT JOIN betinfomap map ON b.betIdx = map.betIdx + + WHERE gameCategory='minigame' + + AND betStatus IN ('JUNGSANEND', 'RESULTEND') + AND b.pointRegYn ='N' + AND b.betIdx= #{betIdx} + )B JOIN memberflow f + WHERE B.memId = f.memId + + )FB LEFT JOIN memrateinfo r ON FB.recommenderId = r.memId AND FB.gameType = r.gameType AND r.rateType ='R' AND FB.betRate*1 > r.idleStartRate*1 AND FB.betRate*1 <= r.idleEndRate*1 AND r.useYn='Y' + + WHERE r.memId IS NOT NULL + )FB2 ON FB1.order = FB2.order +1 + )d LEFT JOIN member_tb mm ON d.siteId = mm.siteId AND d.recommenderId = mm.memId + + UNION + + SELECT b.siteId, b.memId, '3', ABS(b.betWinAmt - b.betAmt) * IF(sl.useYn ='Y' , sl.pointRate*0.01 , 0) AS pointAmt ,'F', b.betIdx, 'N', b.memId, '1', NOW(), NOW(), '', '' ,0 FROM betinfo b + LEFT JOIN member_tb m ON b.siteId = m.siteId AND m.memId = b.memId + LEFT JOIN site_level_fail_point sl ON m.siteId = sl.siteId AND m.memLevel = sl.level AND b.vendorCode = sl.gameCode + WHERE b.betIdx= #{betIdx} AND b.pointRegYn ='N' + AND b.siteId = #{siteId} AND sl.useYn ='Y' + AND betStatus IN ('JUNGSANEND', 'RESULTEND') + + AND b.betWinAmt - b.betAmt <0 + + + + UPDATE betinfo SET pointRegYn = 'Y' WHERE betIdx= #{betIdx} + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO triple_tran_info + (siteId, memId, betId, tranId, vendorIdx, vendorKey, gameIdx, gameKey, userId, + tranType, debit, credit, beforeCash, afterCash, isCancel, isBonus, detailStr) + VALUES + (#{siteId}, #{memId}, #{betId}, #{tranId}, #{vendorIdx}, #{vendorKey}, #{gameIdx}, #{gameKey}, #{userId}, + #{tranType}, #{debit}, #{credit}, #{beforeCash}, #{afterCash}, #{isCancel}, #{isBonus}, #{detailStr}) + + + + UPDATE triple_tran_info + SET credit = #{credit}, + isAutoCancel = 1, + afterCash = afterCash + #{credit} + WHERE betId = #{betId} AND tranId = #{tranId} + + + + + + UPDATE + betinfo + SET + betRate = '0', + betWinAmt = #{betWinAmt}, + betResults = 'FAIL', + afMoney = bfMoney, + betStatus = #{betStatus}, + biProcYn = 'Y' + WHERE + betIdx = #{betIdx} + + + + UPDATE + old_betinfo + SET + betRate = '0', + betWinAmt = #{betWinAmt}, + betResults = 'FAIL', + afMoney = bfMoney, + betStatus = #{betStatus}, + biProcYn = 'Y' + WHERE + betIdx = #{betIdx} + + + + UPDATE + betinfo + SET + betAmt = betAmt - #{betAmt}, + afMoney = afMoney + #{betAmt}, + updDate = NOW() + WHERE + betIdx = #{betIdx} + + + + UPDATE + betinfo + SET + betRate = '0', + + betAmt = betAmt + #{betAmt}, + + + betWinAmt = betWinAmt + #{betWinAmt}, + + betResults = 'FAIL', + afMoney = #{afMoney}, + betStatus = #{betStatus}, + biProcYn = 'Y' + WHERE + betIdx = #{betIdx} + + + + UPDATE betinfo + SET + betAmt = CAST( CAST(betAmt AS DECIMAL(20, 2)) + CAST(#{betAmt} AS DECIMAL(20, 2)) AS CHAR), + afMoney = CAST( CAST(afMoney AS DECIMAL(20, 2)) - CAST(#{betAmt} AS DECIMAL(20, 2)) AS CHAR), + updDate = NOW() + WHERE betIdx = #{betIdx} + + + + UPDATE old_betinfo + SET + betAmt = CAST( CAST(betAmt AS DECIMAL(20, 2)) + CAST(#{betAmt} AS DECIMAL(20, 2)) AS CHAR), + afMoney = CAST( CAST(afMoney AS DECIMAL(20, 2)) - CAST(#{betAmt} AS DECIMAL(20, 2)) AS CHAR), + updDate = NOW() + WHERE betIdx = #{betIdx} + + + + UPDATE betinfomap + SET + betAmt = CAST( CAST(betAmt AS DECIMAL(20, 2)) + CAST(#{betAmt} AS DECIMAL(20, 2)) AS CHAR), + updDate = NOW() + WHERE betIdx = #{betIdx} + + + + UPDATE old_betinfomap + SET + betAmt = CAST( CAST(betAmt AS DECIMAL(20, 2)) + CAST(#{betAmt} AS DECIMAL(20, 2)) AS CHAR), + updDate = NOW() + WHERE betIdx = #{betIdx} + + + + INSERT INTO cash_info (siteId, memId, cashType, cashDesc, cashAmt, betIdx, cashStatus, regId, updDate, regDate, adminId, memo, preCashAmt) + VALUES (#{siteId}, #{memId}, #{cashType}, #{cashDesc}, #{cashAmt}, #{betIdx}, '1', #{regId}, NOW(), NOW(), #{adminId}, #{memo}, #{preCashAmt}) + + + + + + UPDATE cash_info + SET cashAmt = cashAmt + #{cashAmt}, updDate = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + AND betIdx = #{betIdx} AND cashType = #{cashType} + + + + UPDATE mem_cash + SET cashAmt = (cashAmt + #{cashAmt}), + cashAmtD = CAST(cashAmtD AS DECIMAL(20,2)) + CAST(#{cashAmt} AS DECIMAL(20,2)) + + , changeFlag = #{changeFlag} + + , updDt = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + + + + UPDATE mem_cash + SET cashAmt = CAST(TRUNCATE((CAST(cashAmtD AS DECIMAL(20,2)) + CAST(#{cashAmt} AS DECIMAL(20,2))), 0) AS CHAR), + cashAmtD = CAST(cashAmtD AS DECIMAL(20,2)) + CAST(#{cashAmt} AS DECIMAL(20,2)) + + , changeFlag = #{changeFlag} + + , updDt = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + + + + UPDATE mem_cash + SET cashAmt = (cashAmt + #{cashAmt}), + cashAmtD = CAST(cashAmtD AS DECIMAL(20,2)) + CAST(#{cashAmt} AS DECIMAL(20,2)) + + , changeFlag = #{changeFlag} + + , updDt = NOW() + WHERE siteIdx = #{siteIdx} AND memId = #{memId} + + + + + UPDATE mem_cash + SET cashAmt = #{cashAmt}, + cashAmtD = CAST(#{cashAmt} AS DECIMAL(20,2)) + + , changeFlag = #{changeFlag} + + , updDt = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO bet_splus_info + ( + betIdx, BetIdFK, tranType, customerID, reserveID, purchaseID, amount, odds, gain, lineTypeID, lineTypeName, newLineID, lineOdds, + eventTypeID, eventTypeName, newMasterEventID, newEventID, eventName, eventDate, betTypeID, betTypeName, creationDate, + isFreeBet, isLive, `status`, branchID, branchName, newLeagueID, leagueName, homeTeam, awayTeam, leagueNameKO, homeTeamKO, awayTeamKO, yourBet, score + ) + VALUES + ( + #{betIdx}, #{BetIdFK}, #{tranType}, #{customerID}, #{reserveID}, #{purchaseID}, #{amount}, #{odds}, #{gain}, #{lineTypeID}, #{lineTypeName}, #{newLineID}, #{lineOdds}, + #{eventTypeID}, #{eventTypeName}, #{newMasterEventID}, #{newEventID}, #{eventName}, #{eventDate}, #{betTypeID}, #{betTypeName}, #{creationDate}, + #{isFreeBet}, #{isLive}, #{status}, #{branchID}, #{branchName}, #{newLeagueID}, #{leagueName}, #{homeTeam}, #{awayTeam}, #{leagueNameKO}, #{homeTeamKO}, #{awayTeamKO}, #{yourBet}, #{score} + ) + + + + UPDATE bet_splus_info + SET purchaseID = #{purchaseID}, + odds = #{odds}, + `status` = #{status}, + score = #{score} + WHERE betIdx = #{betIdx} + AND newLineID = #{newLineID} + + + + UPDATE bet_splus_info + SET `status` = 'Cancel' + WHERE betIdx = #{betIdx} + + + + UPDATE bet_splus_info + SET purchaseID = #{purchaseId} + WHERE BetIdFK = #{betId} + + + + + + + + + + + + + + + + + + + + INSERT INTO slot_tran_info + (betId, tranId, siteId, memId, apiType, tranType, bfBalance, amount, afBalance, + vendor, vendorIdx, vendorKey, gameName, betDateTime) + VALUES + (#{betId}, #{tranId}, #{siteId}, #{memId}, #{apiType}, #{tranType}, #{bfBalance}, #{amount}, #{afBalance}, + #{vendor}, #{vendorIdx}, #{vendorKey}, #{gameName}, #{betDateTime}) + + + + + + + + + + + + INSERT INTO point_info + (siteId, memId, pointType, pointAmt, pointDesc, pointRate, betIdx, regId, pointStatus, updDate, regDate, adminId, memo, prePointAmt) + SELECT + result.* + FROM ( + SELECT + bi.siteId AS siteId, + baseF.recommenderId AS memId, + '3' AS pointType, + CAST( + CAST((bi.betAmt*(((baseR.pointRate*100) - IFNULL(underR.pointRate, '0.00')*100)/100)*0.01) AS DECIMAL(20,1)) + AS CHAR + ) AS pointAmt, + baseR.rateType AS pointDesc, + CAST(CAST(baseR.pointRate AS DECIMAL(20,2)) AS CHAR) AS pointRate, + bi.betIdx AS betIdx, + bi.memId AS regId, + '1' AS pointStatus, + bi.regDate AS updDate, + bi.regDate AS regDate, + '' AS adminId, + '' AS memo, + 0 AS prePointAmt + FROM new_bet_info bi LEFT JOIN memberflow baseF ON bi.siteId=baseF.siteId AND bi.memId=baseF.memId + LEFT JOIN member_tb mb ON baseF.siteId = mb.siteId AND baseF.recommenderId=mb.memId + LEFT JOIN memrateinfo baseR ON bi.siteId=baseR.siteId AND baseF.recommenderId=baseR.memId + AND bi.vendorCode=baseR.gameType AND baseR.rateType='R' + LEFT JOIN memberflow underF ON bi.siteId=underF.siteId AND bi.memId=underF.memId AND baseF.`order`=(underF.`order`+1) + LEFT JOIN memrateinfo underR ON bi.siteId=underR.siteId AND underF.recommenderId=underR.memId + AND bi.vendorCode=underR.gameType AND underR.rateType='R' + WHERE 1=1 + AND bi.tranId = #{tranId} + AND bi.pointRegYn = 'N' + AND mb.partnerLevel NOT IN ('COMP', 'AUTO') + ) result + WHERE result.pointAmt > 0 + + + + INSERT INTO losing_info + (siteId,memId,betIdx,amount,loseRate,realRate,losingAmt,playerId,regDate,updDate) + SELECT + result.* + FROM ( + SELECT + bi.siteId AS siteId, + baseF.recommenderId AS memId, + bi.betIdx AS betIdx, + (bi.betAmtN-bi.betWinAmtN) AS amount, + CAST(CAST(baseR.loseRate AS DECIMAL(20,2)) AS CHAR) AS loseRate, + CAST((((baseR.loseRate*100) - IFNULL(underR.loseRate, '0.00')*100)/100) AS DECIMAL(20,1)) AS realRate, + CAST( + CAST(((bi.betAmtN-bi.betWinAmtN)*(((baseR.loseRate*100) - IFNULL(underR.loseRate, '0.00')*100)/100)*0.01) AS DECIMAL(20,1)) + AS CHAR + ) AS losingAmt, + bi.memId AS playerId, + bi.regDate AS regDate, + bi.regDate AS updDate + FROM new_bet_info bi LEFT JOIN memberflow baseF ON bi.siteId=baseF.siteId AND bi.memId=baseF.memId + LEFT JOIN member_tb mb ON baseF.siteId = mb.siteId AND baseF.recommenderId=mb.memId + LEFT JOIN memrateinfo baseR ON bi.siteId=baseR.siteId AND baseF.recommenderId=baseR.memId + AND bi.vendorCode=baseR.gameType AND baseR.rateType='R' + LEFT JOIN memberflow underF ON bi.siteId=underF.siteId AND bi.memId=underF.memId AND baseF.`order`=(underF.`order`+1) + LEFT JOIN memrateinfo underR ON bi.siteId=underR.siteId AND underF.recommenderId=underR.memId + AND bi.vendorCode=underR.gameType AND underR.rateType='R' + WHERE 1=1 + AND bi.tranId = #{tranId} + AND mb.partnerLevel NOT IN ('COMP', 'AUTO') + ) result + WHERE result.losingAmt != '0.0' + + + + INSERT INTO losing_info + (siteId,memId,betIdx,amount,loseRate,realRate,losingAmt,playerId,regDate,updDate) + SELECT + result.* + FROM ( + SELECT + bi.siteId AS siteId, + baseF.recommenderId AS memId, + bi.betIdx AS betIdx, + (CAST(bi.betAmtN AS DECIMAL(20,1)) - CAST((bi.betAmt*(((baseR.pointRate*100) - IFNULL(underR.pointRate, '0.00')*100)/100)*0.01) AS DECIMAL(20,1))) AS amount, + CAST(CAST(baseR.loseRate AS DECIMAL(20,2)) AS CHAR) AS loseRate, + CAST((((baseR.loseRate*100) - IFNULL(underR.loseRate, '0.00')*100)/100) AS DECIMAL(20,1)) AS realRate, + CAST( + CAST( ( + (CAST(bi.betAmtN AS DECIMAL(20,1)) - CAST((bi.betAmt*(((baseR.pointRate*100) - IFNULL(underR.pointRate, '0.00')*100)/100)*0.01) AS DECIMAL(20,1))) * + (((baseR.loseRate*100) - IFNULL(underR.loseRate, '0.00')*100)/100) * + 0.01 ) + AS DECIMAL(20,1)) + AS CHAR) AS losingAmt, + bi.memId AS playerId, + bi.regDate AS regDate, + bi.regDate AS updDate + FROM new_bet_info bi LEFT JOIN memberflow baseF ON bi.siteId=baseF.siteId AND bi.memId=baseF.memId + LEFT JOIN member_tb mb ON baseF.siteId = mb.siteId AND baseF.recommenderId=mb.memId + LEFT JOIN memrateinfo baseR ON bi.siteId=baseR.siteId AND baseF.recommenderId=baseR.memId + AND bi.vendorCode=baseR.gameType AND baseR.rateType='R' + LEFT JOIN memberflow underF ON bi.siteId=underF.siteId AND bi.memId=underF.memId AND baseF.`order`=(underF.`order`+1) + LEFT JOIN memrateinfo underR ON bi.siteId=underR.siteId AND underF.recommenderId=underR.memId + AND bi.vendorCode=underR.gameType AND underR.rateType='R' + WHERE 1=1 + AND bi.tranId = #{tranId} + AND mb.partnerLevel NOT IN ('COMP', 'AUTO') + ) result + WHERE result.losingAmt != '0.0' + + + + INSERT INTO losing_info + (siteId,memId,betIdx,amount,loseRate,realRate,losingAmt,playerId,regDate,updDate) + SELECT + result.* + FROM ( + SELECT + bi.siteId AS siteId, + baseF.recommenderId AS memId, + bi.betIdx AS betIdx, + (-1 * bi.betWinAmtN) AS amount, + CAST(CAST(baseR.loseRate AS DECIMAL(20,2)) AS CHAR) AS loseRate, + CAST((((baseR.loseRate*100) - IFNULL(underR.loseRate, '0.00')*100)/100) AS DECIMAL(20,1)) AS realRate, + CAST( + CAST(((-1 * bi.betWinAmtN)*(((baseR.loseRate*100) - IFNULL(underR.loseRate, '0.00')*100)/100)*0.01) AS DECIMAL(20,1)) + AS CHAR + ) AS losingAmt, + bi.memId AS playerId, + bi.regDate AS regDate, + bi.regDate AS updDate + FROM new_bet_info bi LEFT JOIN memberflow baseF ON bi.siteId=baseF.siteId AND bi.memId=baseF.memId + LEFT JOIN member_tb mb ON baseF.siteId = mb.siteId AND baseF.recommenderId=mb.memId + LEFT JOIN memrateinfo baseR ON bi.siteId=baseR.siteId AND baseF.recommenderId=baseR.memId + AND bi.vendorCode=baseR.gameType AND baseR.rateType='R' + LEFT JOIN memberflow underF ON bi.siteId=underF.siteId AND bi.memId=underF.memId AND baseF.`order`=(underF.`order`+1) + LEFT JOIN memrateinfo underR ON bi.siteId=underR.siteId AND underF.recommenderId=underR.memId + AND bi.vendorCode=underR.gameType AND underR.rateType='R' + WHERE 1=1 + AND bi.tranId = #{tranId} + AND mb.partnerLevel NOT IN ('COMP', 'AUTO') + ) result + WHERE result.losingAmt != '0.0' + + + + INSERT INTO point_info + (siteId, memId, pointType, pointAmt, pointDesc, pointRate, betIdx, delYn, regId, pointStatus, updDate, regDate, adminId, memo, prePointAmt) + SELECT + result.* + FROM ( + SELECT + bi.siteId AS siteId, + baseF.recommenderId AS memId, + '3' AS pointType, + CAST( + CAST((bi.betAmt*(((baseR.pointRate*100) - IFNULL(underR.pointRate, '0.00')*100)/100)*0.01) AS DECIMAL(20,1)) + AS CHAR + ) AS pointAmt, + baseR.rateType AS pointDesc, + CAST(CAST(baseR.pointRate AS DECIMAL(20,1)) AS CHAR) AS pointRate, + bi.betIdx AS betIdx, + 'N' AS delYn, + bi.memId AS regId, + '1' AS pointStatus, + bi.regDate AS updDate, + bi.regDate AS regDate, + '' AS adminId, + '' AS memo, + 0 AS prePointAmt + FROM betinfo bi LEFT JOIN memberflow baseF ON bi.siteId=baseF.siteId AND bi.memId=baseF.memId + LEFT JOIN member_tb mb ON baseF.siteId = mb.siteId AND baseF.recommenderId=mb.memId + LEFT JOIN memrateinfo baseR ON bi.siteId=baseR.siteId AND baseF.recommenderId=baseR.memId + AND bi.vendorCode=baseR.gameType AND baseR.rateType='R' + LEFT JOIN memberflow underF ON bi.siteId=underF.siteId AND bi.memId=underF.memId AND baseF.`order`=(underF.`order`+1) + LEFT JOIN memrateinfo underR ON bi.siteId=underR.siteId AND underF.recommenderId=underR.memId + AND bi.vendorCode=underR.gameType AND underR.rateType='R' + WHERE 1=1 + AND bi.betIdx = CAST(#{betIdx} AS UNSIGNED) + AND ( + (bi.gameCategory='casino' AND bi.betAmt != bi.betWinAmt) + OR + (bi.gameCategory='slot') + OR + (bi.gameCategory='sport') + ) + AND bi.pointRegYn = 'N' + AND mb.partnerLevel NOT IN ('COMP', 'AUTO') + ) result + WHERE result.pointAmt > 0 + + + + UPDATE new_bet_info + SET pointRegYn = #{pointRegYn}, + isBlankSpinYn = #{isBlankSpinYn} + WHERE tranId = #{tranId} + + + + UPDATE betinfo + SET pointRegYn ='Y' + WHERE betIdx = #{betIdx} + + + + + + + + DELETE b, c FROM new_bet_info a LEFT JOIN point_info b ON a.betIdx=b.betIdx + LEFT JOIN mem_pre_point c ON b.pointIdx=c.pointIdx + WHERE a.betId = #{betId} + AND a.tranType = 'DEBIT' + AND a.isBlankSpinYn = 'N' + AND b.pointIdx IS NOT NULL + + + + DELETE a, b FROM point_info a LEFT JOIN mem_pre_point b ON a.pointIdx=b.pointIdx + WHERE a.betIdx = #{betIdx} + + + + DELETE b FROM new_bet_info a LEFT JOIN losing_info b ON a.betIdx=b.betIdx + WHERE a.betId = #{betId} + AND a.tranType = 'DEBIT' + AND a.isBlankSpinYn = 'N' + AND b.losingIdx IS NOT NULL + + + + DELETE FROM losing_info + WHERE betIdx = #{betIdx} + + + + DELETE b, c FROM betinfo a LEFT JOIN point_info b ON a.betIdx=b.betIdx + LEFT JOIN mem_pre_point c ON b.pointIdx=c.pointIdx + WHERE a.betIdx = #{betIdx} + AND a.isBlankSpinYn = 'N' + AND b.pointIdx IS NOT NULL + + + + + + + + + + INSERT INTO new_bet_info ( + tranId, betId, siteId, memId, apiCompCode, apiVendor, gameCategory, vendorCode, gameName, + tranType, betAmt, betAmtN, betWinAmt, betWinAmtN, balance, + + isCancel, + + isBlankSpinYn, pointRegYn, regDate, updDate + ) VALUES ( + #{tranId}, #{betId}, #{siteId}, #{memId}, #{apiCompCode}, #{apiVendor}, #{gameCategory}, #{vendorCode}, #{gameName}, + #{tranType}, #{betAmt}, #{betAmt}, #{betWinAmt}, #{betWinAmt}, #{balance}, + + #{isCancel}, + + #{isBlankSpinYn}, #{pointRegYn}, #{regDate}, #{updDate} + ) + + + + UPDATE new_bet_info + SET isCancel = 'Y' + WHERE betId = #{betId} + + + + UPDATE new_bet_info + SET isCancel = 'Y' + WHERE betIdx = #{betIdx} + + + + UPDATE new_bet_info + SET isBonus = 'Y' + WHERE betId = #{betId} + + + + + + + + UPDATE mem_point + SET pointAmt = pointAmt - #{pointAmt} + WHERE siteId = #{siteId} + AND memId = #{memId} + + + + + + INSERT INTO rvholdem_callback_log ( + siteId, + memId, + callbackType, + userId, + uid, + logId, + bfBalance, + amount, + chipAmount, + afBalance, + groupId, + roomtype, + addedAt, + addedAtKST, + penaltyAmount, + penaltyChipAmount, + cb_uid, + uniqueKey + ) VALUES ( + #{siteId}, + #{memId}, + #{callbackType}, + #{userId}, + #{uid}, + #{logId,jdbcType=INTEGER}, + #{bfBalance,jdbcType=INTEGER}, + #{amount,jdbcType=INTEGER}, + #{chipAmount,jdbcType=INTEGER}, + #{afBalance,jdbcType=INTEGER}, + #{groupId,jdbcType=INTEGER}, + #{roomtype,jdbcType=INTEGER}, + #{addedAt, jdbcType=TIMESTAMP}, + #{addedAtKST, jdbcType=TIMESTAMP}, + #{penaltyAmount}, + #{penaltyChipAmount}, + #{cb_uid}, + #{uniqueKey} + ) + + + diff --git a/src/main/resources/db1/BOARD.xml b/src/main/resources/db1/BOARD.xml new file mode 100644 index 0000000..3dda0f5 --- /dev/null +++ b/src/main/resources/db1/BOARD.xml @@ -0,0 +1,697 @@ + + + + + WHERE 1=1 + AND bod.siteId = #{siteId} + AND bod.boardType = #{boardType} + + AND bod.title LIKE CONCAT('%', #{searchValue}, '%') + + + AND bod.content LIKE CONCAT('%', #{searchValue}, '%') + + + AND (bod.title LIKE CONCAT('%', #{searchValue}, '%') OR bod.content LIKE CONCAT('%', #{searchValue}, '%')) + + + AND bod.category = #{category} + + + AND bod.category = #{faqType} + + + AND bod.regId = #{memId} + + + AND DATE_FORMAT(bod.regDate, '%Y%m%d') >= DATE_FORMAT(#{startDate}, '%Y%m%d') + + + AND DATE_FORMAT(bod.regDate, '%Y%m%d') <= DATE_FORMAT(#{endDate}, '%Y%m%d') + + AND (bod.delYn !='Y' OR bod.delYn IS NULL) + + AND bod.viewYn = 'Y' + + + + + + + + + + + + + + + INSERT INTO board_info ( + + boardIdx, + + siteId, + boardType, + category, + title, + content, + viewCnt, + status, + faqType, + isReadAdmin, + regId, + regDate, + updDate, + delYn, + bettinginfo, + isTop + ) VALUES ( + + #{boardIdx}, + + #{siteId}, + #{boardType}, + #{category}, + #{title}, + #{content}, + #{viewCnt}, + + 'WAIT', + #{faqType}, + + + null, + null, + + #{isReadAdmin}, + #{regId}, + now(), + now(), + #{delYn}, + #{bettinginfo}, + #{isTop} + ) ON DUPLICATE KEY UPDATE + updDate = now() + + , title = #{title} + + + , content = #{content} + + + , category = #{category} + + + , delYn = #{delYn} + + + , isTop = #{isTop} + + + , bettinginfo = #{bettinginfo} + + + SELECT LAST_INSERT_ID(); + + + + + + + update board_info set viewCnt = ifnull(viewCnt, 0) + 1 where boardIdx = #{boardIdx} + + + + + update board_info set isReadAdmin = 'Y' where boardIdx = #{boardIdx} and ( isReadAdmin ='N' OR isReadAdmin is null) + + + + + + + INSERT INTO msginfo ( + + msgIdx, + + siteId, + msgType, + recieveId, + msgTitle, + msgDesc, + msgDescEng, + sendDate, + updDate, + regId, + delYn, + targetLevel, + targetType, + hiddenYn, + rMemId + ) VALUES ( + + #{msgIdx}, + + #{siteId}, + #{msgType}, + #{recieveId}, + #{msgTitle}, + #{msgDesc}, + #{msgDescEng}, + NOW(), + NOW(), + #{regId}, + 'N', + #{targetLevel}, + #{targetType}, + #{hiddenYn}, + #{rMemIdList} + ) ON DUPLICATE KEY UPDATE + updDate = now() + + ,hiddenYn =#{hiddenYn} + + + ,delYn = #{delYn} + + + + + + INSERT INTO msginfo + (siteId, msgType, recieveId, msgTitle, msgDesc, regId, hiddenYn) + SELECT + siteId, + 'msg' AS msgType, + memId AS recieveId, + #{msgTitle} AS msgTitle, + #{msgDesc} AS msgDesc, + siteId AS regId, + #{hiddenYn} AS hiddenYn + FROM member_tb + WHERE 1=1 + AND siteId = #{siteId} + AND ( + memId = #{recieveId} + OR + recommenderId = #{recieveId} + ) + + + + + INSERT INTO msginfo + (siteId, msgType, recieveId, msgTitle, msgDesc, regId, hiddenYn) + SELECT + siteId, + 'msg' AS msgType, + memId AS recieveId, + #{msgTitle} AS msgTitle, + #{msgDesc} AS msgDesc, + siteId AS regId, + #{hiddenYn} AS hiddenYn + FROM member_tb + WHERE 1=1 + AND siteId = #{siteId} + AND partnerLevel NOT IN ('COMP','AUTO') + + AND memId = #{recieveId} + + AND memLevel = #{targetLevel} + + + + + + + + + + + + + + INSERT INTO msginfo_read_status + (msgIdx, siteId, memId, status, updDate) + VALUES + (#{msgIdx}, #{siteId}, #{recieveId}, 'R', NOW()) + ON DUPLICATE KEY UPDATE updDate = NOW(), status ='R' + + + + + INSERT INTO `msginfo_read_status` + SELECT + msg.msgIdx AS msgIdx, + msg.siteId AS siteId, + #{recieveId} AS memId, + 'R' AS msgStatus, + NOW() + FROM + `msginfo` msg + LEFT JOIN member_tb m ON msg.recieveId = m.memId + LEFT JOIN site s ON s.siteId = msg.siteId + LEFT JOIN `msginfo_read_status` mrs ON msg.msgIdx = mrs.msgIdx AND mrs.memId=#{recieveId} + WHERE + msg.siteId = #{siteId} AND delYn= 'N' + AND msg.hiddenYn = 'N' + AND (mrs.status != 'N' OR mrs.status IS NULL) + AND (msg.recieveId = #{recieveId} OR recieveId = '') + AND msg.sendDate > (SELECT redDt FROM `member_tb` WHERE siteId = #{siteId} AND memId = #{recieveId}) + ON DUPLICATE KEY UPDATE `updDate` = NOW(), msginfo_read_status.status ='R' + + + + + UPDATE msginfo_read_status + SET status = #{status}, updDate = NOW() + WHERE msgIdx = #{msgIdx} + AND memId = #{recieveId} + + + + + INSERT INTO `msginfo_read_status` + SELECT + msg.msgIdx, + #{recieveId}, + 'N' AS msgStatus, + NOW() + FROM + `msginfo` msg + LEFT JOIN member_tb m ON msg.recieveId = m.memId + LEFT JOIN site s ON s.siteId = msg.siteId + LEFT JOIN `msginfo_read_status` mrs ON msg.msgIdx = mrs.msgIdx AND mrs.memId=#{recieveId} + WHERE + msg.siteId = #{siteId} AND delYn= 'N' + AND msg.hiddenYn = 'N' + AND (mrs.status != 'N' OR mrs.status IS NULL) + AND (msg.recieveId = #{recieveId} OR recieveId = '') + AND msg.sendDate > (SELECT redDt FROM `member_tb` WHERE siteId = #{siteId} AND memId = #{recieveId}) + AND msg.msgIdx = #{msgIdx} + ON DUPLICATE KEY UPDATE `updDate` = NOW(), msginfo_read_status.status ='N' + + + + + UPDATE msginfo_read_status + SET status = 'N', updDate = NOW() + WHERE memId = #{recieveId} + AND msgIdx IN + + #{item} + + + + + + UPDATE board_info + SET status = 'ANSWER' + WHERE boardIdx = #{boardIdx} AND boardType = 'faq' + + + + + + INSERT INTO site_answer_info + (siteId, answerType, title, answer) + VALUES + (#{siteId}, #{answerType}, #{title}, #{answer}) + + + + UPDATE site_answer_info + SET title = #{title}, answer = #{answer} + WHERE idx = #{idx} + + + + UPDATE site_answer_info + SET useYn = 'N' + WHERE idx=#{idx} + + + + + + + + UPDATE board_info + SET isReadUser = 'Y' + WHERE boardIdx = #{boardIdx} + AND (isReadUser ='N' OR isReadUser IS NULL) + + + + + + + + DELETE FROM board_info WHERE boardIdx = #{boardIdx} + + + + UPDATE board_info + SET viewYn = #{viewYn} + WHERE boardIdx = #{boardIdx} + + + + UPDATE board_info + SET delYn = 'Y' + WHERE boardIdx = #{boardIdx} + + + diff --git a/src/main/resources/db1/CASH.xml b/src/main/resources/db1/CASH.xml new file mode 100644 index 0000000..76e7f04 --- /dev/null +++ b/src/main/resources/db1/CASH.xml @@ -0,0 +1,2538 @@ + + + + + + + INSERT INTO cash_info ( + siteId, + memId, + cashType, + cashDesc, + cashAmt, + betIdx, + delYn, + cashStatus, + regId, + updDate, + regDate, + adminId, + memo, + preCashAmt + + , refIdx + + + , symbol + + + , exchangeRate + + + , amount + + ) VALUES ( + #{siteId}, + #{memId}, + #{cashType}, + #{cashDesc}, + #{cashAmt}, + #{betIdx}, + #{delYn}, + #{cashStatus}, + #{regId}, + now(), + now(), + #{adminId}, + #{memo}, + #{preCashAmt} + + , #{refIdx} + + + , #{symbol} + + + , #{exchangeRate} + + + , #{amount} + + ) + + SELECT LAST_INSERT_ID(); + + + + + UPDATE mem_cash + SET cashAmt = cashAmt + #{cashAmt}, + cashAmtD = CAST(cashAmtD AS DECIMAL(20,2)) + CAST(#{cashAmt} AS DECIMAL(20,2)) + , updDt = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + + + + + + update cash_info set cashStatus = #{cashStatus} , updDate = now() + + , memo = #{memo} + + + where siteId = #{siteId} and cashIdx = #{cashIdx} + + + + + INSERT INTO point_info + (siteId, memId, pointType, pointAmt, pointDesc, pointRate, betIdx, delYn, regId, pointStatus, updDate, regDate, adminId, memo, prePointAmt) + SELECT + result.* + FROM ( + SELECT + bi.siteId AS siteId, + baseF.recommenderId AS memId, + '3' AS pointType, + CAST( + CAST((bi.betAmt*(((baseR.pointRate*100) - IFNULL(underR.pointRate, '0.00')*100)/100)*0.01) AS DECIMAL(20,1)) + AS CHAR + ) AS pointAmt, + baseR.rateType AS pointDesc, + CAST(CAST(baseR.pointRate AS DECIMAL(20,1)) AS CHAR) AS pointRate, + bi.betIdx AS betIdx, + 'N' AS delYn, + bi.memId AS regId, + '1' AS pointStatus, + bi.regDate AS updDate, + bi.regDate AS regDate, + '' AS adminId, + '' AS memo, + 0 AS prePointAmt + FROM betinfo bi LEFT JOIN memberflow baseF ON bi.siteId=baseF.siteId AND bi.memId=baseF.memId + LEFT JOIN member_tb mb ON baseF.siteId = mb.siteId AND baseF.recommenderId=mb.memId + LEFT JOIN memrateinfo baseR ON bi.siteId=baseR.siteId AND baseF.recommenderId=baseR.memId + AND bi.vendorCode=baseR.gameType AND baseR.rateType='R' + LEFT JOIN memberflow underF ON bi.siteId=underF.siteId AND bi.memId=underF.memId AND baseF.`order`=(underF.`order`+1) + LEFT JOIN memrateinfo underR ON bi.siteId=underR.siteId AND underF.recommenderId=underR.memId + AND bi.vendorCode=underR.gameType AND underR.rateType='R' + WHERE 1=1 + AND bi.betIdx = CAST(#{betIdx} AS UNSIGNED) + AND ( + (bi.gameCategory='casino' AND bi.betAmt != bi.betWinAmt) + OR + (bi.gameCategory='slot') + OR + (bi.gameCategory='sport') + ) + AND bi.pointRegYn = 'N' + AND mb.partnerLevel NOT IN ('COMP', 'AUTO') + ) result + WHERE result.pointAmt > 0 + + + + INSERT INTO point_info + (siteId, memId, pointType, pointAmt, pointDesc, pointRate, betIdx, delYn, regId, pointStatus, updDate, regDate, adminId, memo, prePointAmt) + SELECT + result.* + FROM ( + SELECT + bi.siteId AS siteId, + baseF.recommenderId AS memId, + '3' AS pointType, + CAST( + CAST((bm.betAmt*(((baseR.pointRate*100) - IFNULL(underR.pointRate, '0.00')*100)/100)*0.01) AS DECIMAL(20,1)) + AS CHAR + ) AS pointAmt, + baseR.rateType AS pointDesc, + CAST(CAST(baseR.pointRate AS DECIMAL(20,1)) AS CHAR) AS pointRate, + bi.betIdx AS betIdx, + 'N' AS delYn, + bi.memId AS regId, + '1' AS pointStatus, + bi.updDate AS updDate, + bi.updDate AS regDate, + '' AS adminId, + bm.mapId AS memo, + 0 AS prePointAmt + FROM betinfo bi LEFT JOIN betinfomap bm ON bi.betIdx=bm.betIdx + LEFT JOIN memberflow baseF ON bi.siteId=baseF.siteId AND bi.memId=baseF.memId + LEFT JOIN member_tb mb ON baseF.siteId = mb.siteId AND baseF.recommenderId=mb.memId + LEFT JOIN mem_multiple_rate baseR ON bi.siteId=baseR.siteId AND baseF.recommenderId=baseR.memId + AND bi.vendorCode=baseR.vendorCode AND baseR.rateType=bm.rateTypeCode + LEFT JOIN memberflow underF ON bi.siteId=underF.siteId AND bi.memId=underF.memId AND baseF.`order`=(underF.`order`+1) + LEFT JOIN mem_multiple_rate underR ON bi.siteId=underR.siteId AND underF.recommenderId=underR.memId + AND bi.vendorCode=underR.vendorCode AND underR.rateType=bm.rateTypeCode + WHERE 1=1 + AND bm.betIdx IS NOT NULL + AND bi.betIdx = CAST(#{betIdx} AS UNSIGNED) + AND bi.pointRegYn = 'N' + AND mb.partnerLevel NOT IN ('COMP', 'AUTO') + ) result + WHERE 1=1 + AND result.pointAmt > 0 + + + + UPDATE betinfo + SET pointRegYn ='Y', + isBlankSpinYn = #{isBlankSpinYn} + WHERE betIdx = #{betIdx} + + + + + + update member_tb set totalCashInAmt = ifnull(totalCashInAmt, 0) + #{amt} where siteId = #{siteId} and memId = #{memId} + + + + update member_tb set totalCashOutAmt = ifnull(totalCashOutAmt, 0) + #{amt} where siteId = #{siteId} and memId = #{memId} + + + + update member_tb + set + gameMoney = #{gameMoney} + where + siteId = #{siteId} and memId = #{memId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO point_info + (siteId, `memId`,`pointType`,`pointAmt`,`pointDesc`,`betIdx`,`delYn`,`regId`,`pointStatus`,`updDate`,`regDate`, adminId, memo, prePointAmt) + VALUES + (#{siteId}, #{memId}, #{pointType}, #{pointAmt}, #{pointDesc}, #{betIdx}, 'N', #{regId}, #{pointStatus}, now(), now(), #{adminId}, #{memo}, #{prePointAmt}) + + SELECT LAST_INSERT_ID(); + + + + + update cash_info set delYn='Y' where siteId = #{siteId} AND memId = #{memId} and cashIdx = #{cashIdx} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO cash_info( + siteId, + memId, + cashType, + cashDesc, + cashAmt, + betIdx, + delYn, + cashStatus, + regId, + updDate, + regDate, + adminId, + memo, + preCashAmt + ) VALUES ( + #{siteId}, + #{memId}, + #{cashType}, + #{cashDesc}, + #{cashAmt}, + #{betIdx}, + #{delYn}, + #{cashStatus}, + #{regId}, + NOW(), + NOW(), + #{adminId}, + #{memo}, + #{preCashAmt} + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE cash_info + SET cashStatus = #{cashStatus}, + memo = #{memo}, + updDate = NOW() + WHERE 1=1 + + AND cashIdx = #{cashIdx} + + + AND refIdx = #{refIdx} + + + + + INSERT INTO cash_info + (siteId, `memId`,`cashType`,`cashDesc`,`cashAmt`,`delYn`,`cashStatus`,`regId`,`updDate`,`regDate`, adminId, memo, preCashAmt) + VALUES + (#{siteId}, #{memId}, #{cashType}, #{cashDesc}, #{cashAmt}, 'N', #{cashStatus}, #{regId}, #{regDate}, #{regDate}, #{adminId}, #{memo}, #{preCashAmt}) + + SELECT LAST_INSERT_ID(); + + + + + INSERT INTO coupon_info + (siteId, memId, couponNumber, cashAmt, couponDesc, createAdmin, endAt) + VALUES + (#{siteId}, #{memId}, #{couponNumber}, #{cashAmt}, #{couponDesc}, #{createAdmin}, #{endAt}) + + + + UPDATE coupon_info + SET couponStatus = #{couponStatus} + + , cashIdx = #{cashIdx} + + + , usedAt = #{usedAt} + + + , apprAdmin = #{apprAdmin} + + + , apprAt = #{apprAt} + + WHERE couponNumber = #{couponNumber} + + + + + + + + + + + + + + + + + + + + INSERT INTO cash_bonus_rel_log + (siteId, memId, bonusType, bonusCode, cashIdx, pointIdx, rate) + VALUES + (#{siteId}, #{memId}, #{bonusType}, #{bonusCode}, #{cashIdx}, #{pointIdx}, #{rate}) + + + + + + UPDATE cash_bonus_rel_log + SET pointIdx = #{pointIdx}, + rate = #{rate} + WHERE idx = #{idx} + + + diff --git a/src/main/resources/db1/CODE.xml b/src/main/resources/db1/CODE.xml new file mode 100644 index 0000000..8ecc666 --- /dev/null +++ b/src/main/resources/db1/CODE.xml @@ -0,0 +1,2882 @@ + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE daily_periodic_reports d + SET d.dBetAmt = #{dBetAmt}, + d.dBetAmtBS = #{dBetAmtBS}, + d.dBetAmtWin = #{dBetAmtWin}, + d.dBetAmtWinBS = #{dBetAmtWinBS}, + d.dRollingAmt = #{dRollingAmt}, + d.dLosingAmt = #{dLosingAmt}, + d.dCasinoBetAmt = #{dCasinoBetAmt}, + d.dCasinoBetAmtBS = #{dCasinoBetAmtBS}, + d.dCasinoBetAmtWin = #{dCasinoBetAmtWin}, + d.dCasinoBetAmtWinBS = #{dCasinoBetAmtWinBS}, + d.dCasinoRollingAmt = #{dCasinoRollingAmt}, + d.dCasinoLosingAmt = #{dCasinoLosingAmt}, + d.dSlotBetAmt = #{dSlotBetAmt}, + d.dSlotBetAmtBS = #{dSlotBetAmtBS}, + d.dSlotBetAmtWin = #{dSlotBetAmtWin}, + d.dSlotBetAmtWinBS = #{dSlotBetAmtWinBS}, + d.dSlotRollingAmt = #{dSlotRollingAmt}, + d.dSlotLosingAmt = #{dSlotLosingAmt}, + d.dMiniBetAmt = #{dMiniBetAmt}, + d.dMiniBetAmtWin = #{dMiniBetAmtWin}, + d.dMiniRollingAmt = #{dMiniRollingAmt}, + d.dMiniLosingAmt = #{dMiniLosingAmt}, + d.dSportBetAmt = #{dSportBetAmt}, + d.dSportBetAmtWin = #{dSportBetAmtWin}, + d.dSportRollingAmt = #{dSportRollingAmt}, + d.dSportLosingAmt = #{dSportLosingAmt}, + d.dUserPayment = #{dUserPayment}, + d.dUserPayback = #{dUserPayback}, + d.dUpperPayment = #{dUpperPayment}, + d.dUpperPayback = #{dUpperPayback}, + d.dUserCashIn = #{dUserCashIn}, + d.dUserCashOut = #{dUserCashOut}, + d.dAdminPayment = #{dAdminPayment}, + d.dAdminPayback = #{dAdminPayback}, + d.dCouponCash = #{dCouponCash}, + d.dChangePoint = #{dChangePoint}, + d.dAdminPointIn = #{dAdminPointIn}, + d.dAdminPointOut = #{dAdminPointOut}, + d.dCouponPoint = #{dCouponPoint}, + d.dCashAmt = #{dCashAmt}, + d.dPointAmt = #{dPointAmt} + WHERE d.days = #{days} + AND d.siteId = #{siteId} + AND d.memId = #{memId} + + + + UPDATE daily_periodic_reports a + LEFT JOIN mem_cash b ON a.siteId=b.siteId AND a.memId=b.memId + LEFT JOIN mem_point c ON a.siteId=c.siteId AND a.memId=c.memId + SET a.dCashAmt = CAST(CAST(b.cashAmt AS SIGNED) AS CHAR), + a.dPointAmt = CAST(CAST(c.pointAmt AS DECIMAL(20,0)) AS CHAR) + WHERE 1=1 + AND a.days = DATE_FORMAT(NOW(), '%Y-%m-%d') + AND ( + a.dCashAmt != CAST(b.cashAmt AS SIGNED) + OR + a.dPointAmt != CAST(c.pointAmt AS DECIMAL(20,0)) + ) + + + + INSERT INTO daily_periodic_reports (days, siteId, memId) + SELECT + DATE_FORMAT(NOW(), '%Y-%m-%d') AS days, + a.siteId AS siteId, + a.memId AS memId + FROM member_tb a LEFT JOIN daily_periodic_reports b ON b.days = DATE_FORMAT(NOW(), '%Y-%m-%d') AND a.siteId=b.siteId AND a.memId=b.memId + WHERE a.partnerLevel NOT IN ('COMP', 'AUTO') + AND b.memId IS NULL + + + + INSERT INTO daily_periodic_reports + (days,siteId,memId, + dBetAmt,dBetAmtBS,dBetAmtWin,dBetAmtWinBS,dRollingAmt,dLosingAmt, + dCasinoBetAmt,dCasinoBetAmtBS,dCasinoBetAmtWin,dCasinoBetAmtWinBS,dCasinoRollingAmt,dCasinoLosingAmt, + dSlotBetAmt,dSlotBetAmtBS,dSlotBetAmtWin,dSlotBetAmtWinBS,dSlotRollingAmt,dSlotLosingAmt, + dMiniBetAmt,dMiniBetAmtWin,dMiniRollingAmt,dMiniLosingAmt, + dSportBetAmt,dSportBetAmtWin,dSportRollingAmt,dSportLosingAmt, + dUserPayment,dUserPayback,dUpperPayment,dUpperPayback,dUserCashIn,dUserCashOut, + dAdminPayment,dAdminPayback,dChangePoint,dAdminPointIn,dAdminPointOut,dCouponPoint,dCashAmt,dPointAmt) + VALUES + (#{days},#{siteId},#{memId}, + #{dBetAmt},#{dBetAmtBS},#{dBetAmtWin},#{dBetAmtWinBS},#{dRollingAmt},#{dLosingAmt}, + #{dCasinoBetAmt},#{dCasinoBetAmtBS},#{dCasinoBetAmtWin},#{dCasinoBetAmtWinBS},#{dCasinoRollingAmt},#{dCasinoLosingAmt}, + #{dSlotBetAmt},#{dSlotBetAmtBS},#{dSlotBetAmtWin},#{dSlotBetAmtWinBS},#{dSlotRollingAmt},#{dSlotLosingAmt}, + #{dMiniBetAmt},#{dMiniBetAmtWin},#{dMiniRollingAmt},#{dMiniLosingAmt}, + #{dSportBetAmt},#{dSportBetAmtWin},#{dSportRollingAmt},#{dSportLosingAmt}, + #{dUserPayment},#{dUserPayback},#{dUpperPayment},#{dUpperPayback},#{dUserCashIn},#{dUserCashOut}, + #{dAdminPayment},#{dAdminPayback},#{dChangePoint},#{dAdminPointIn},#{dAdminPointOut},#{dCouponPoint},#{dCashAmt},#{dPointAmt}) + ON DUPLICATE KEY UPDATE dCashAmt = #{dCashAmt}, dPointAmt = #{dPointAmt} + + + + + + UPDATE daily_periodic_reports d + SET d.dBetAmt = #{dBetAmt}, + d.dBetAmtBS = #{dBetAmtBS}, + d.dBetAmtWin = #{dBetAmtWin}, + d.dBetAmtWinBS = #{dBetAmtWinBS}, + d.dRollingAmt = #{dRollingAmt}, + d.dLosingAmt = #{dLosingAmt}, + d.dCasinoBetAmt = #{dCasinoBetAmt}, + d.dCasinoBetAmtBS = #{dCasinoBetAmtBS}, + d.dCasinoBetAmtWin = #{dCasinoBetAmtWin}, + d.dCasinoBetAmtWinBS = #{dCasinoBetAmtWinBS}, + d.dCasinoRollingAmt = #{dCasinoRollingAmt}, + d.dCasinoLosingAmt = #{dCasinoLosingAmt}, + d.dSlotBetAmt = #{dSlotBetAmt}, + d.dSlotBetAmtBS = #{dSlotBetAmtBS}, + d.dSlotBetAmtWin = #{dSlotBetAmtWin}, + d.dSlotBetAmtWinBS = #{dSlotBetAmtWinBS}, + d.dSlotRollingAmt = #{dSlotRollingAmt}, + d.dSlotLosingAmt = #{dSlotLosingAmt}, + d.dMiniBetAmt = #{dMiniBetAmt}, + d.dMiniBetAmtWin = #{dMiniBetAmtWin}, + d.dMiniRollingAmt = #{dMiniRollingAmt}, + d.dMiniLosingAmt = #{dMiniLosingAmt}, + d.dSportBetAmt = #{dSportBetAmt}, + d.dSportBetAmtWin = #{dSportBetAmtWin}, + d.dSportRollingAmt = #{dSportRollingAmt}, + d.dSportLosingAmt = #{dSportLosingAmt}, + d.dUserPayment = #{dUserPayment}, + d.dUserPayback = #{dUserPayback}, + d.dUpperPayment = #{dUpperPayment}, + d.dUpperPayback = #{dUpperPayback}, + d.dUserCashIn = #{dUserCashIn}, + d.dUserCashOut = #{dUserCashOut}, + d.dAdminPayment = #{dAdminPayment}, + d.dAdminPayback = #{dAdminPayback}, + d.dCouponCash = #{dCouponCash}, + d.dChangePoint = #{dChangePoint}, + d.dAdminPointIn = #{dAdminPointIn}, + d.dAdminPointOut = #{dAdminPointOut}, + d.dCouponPoint = #{dCouponPoint} + WHERE d.days = #{days} + AND d.siteId = #{siteId} + AND d.memId = #{memId} + + + + UPDATE daily_periodic_reports d LEFT JOIN ( + SELECT + days, + siteId, + memId, + dCashAmt, + dPointAmt + FROM daily_periodic_reports + WHERE days = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), '%Y-%m-%d') + AND (dCashAmt !=0 OR dPointAmt != 0) + ) rp ON d.days = DATE_FORMAT(DATE_ADD(rp.days, INTERVAL +1 DAY), '%Y-%m-%d') AND d.siteId = rp.siteId AND d.memId=rp.memId + SET + d.dCashAmtY = IFNULL(rp.dCashAmt, 0), + d.dPointAmtY = IFNULL(rp.dPointAmt, 0) + WHERE d.days = DATE_FORMAT(NOW(), '%Y-%m-%d') + + + + UPDATE member_tb mb LEFT JOIN ( + SELECT + siteId, + memId, + SUM(dBetAmt) AS betSum, + SUM(dBetAmtWin) AS betWinSum, + SUM(dBetAmtWin) - SUM(IFNULL(dBetAmt, 0)) AS winLoseSum + FROM daily_periodic_reports + WHERE 1=1 + AND days = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), '%Y-%m-%d') + GROUP BY siteId, memId + HAVING SUM(dBetAmt) != 0 OR SUM(dBetAmtWin) != 0 + ) dr ON mb.siteId=dr.siteId AND mb.memId=dr.memId + SET mb.totalBetAmt = mb.totalBetAmt + IFNULL(dr.betSum, 0), + mb.totalBetWinAmt = mb.totalBetWinAmt + IFNULL(dr.betWinSum, 0), + mb.totalWlAmt = mb.totalWlAmt + IFNULL(dr.winLoseSum, 0) + WHERE 1=1 + AND dr.memId IS NOT NULL + + + + UPDATE `daily_reports_last_time` + SET startDate = #{startDate}, + endDate = #{endDate} + WHERE idx = 1 + + + + + + + + INSERT INTO `mem_log` + ( + `siteId`, + `memId`, + `logType`, + `logoutYn`, + `logName`, + `logDesc`, + + `vendorName`, + + + `gameName`, + + `regDate`, + `regId`, + `regIp`, + `token` + ) + VALUES + ( + #{siteId}, + #{memId}, + #{logType}, + #{logoutYn}, + #{logName}, + #{logDesc}, + + #{vendorName}, + + + #{gameName}, + + now(), + #{regId}, + #{regIp}, + #{token} + ) + + + + UPDATE member_tb + SET lastIp = #{regIp}, + totalLoginCount = IFNULL(totalLoginCount, 0) + 1, + lastLoginDt = NOW() + WHERE siteId = #{siteId} + AND memId = #{memId} + + + + UPDATE mem_cash + SET lastCashInDate = DATE_FORMAT(NOW(), '%Y-%m-%d') + WHERE siteId = #{siteId} + AND memId = #{memId} + + + + + + UPDATE mem_log + SET + logoutYn =#{logoutYn}, + regIp = #{regIp}, + token = #{token} + WHERE + siteId = #{siteId} + AND memId = #{memId} + AND logType = #{logType} + + + + + INSERT INTO site_setting ( + siteId, + signupYn, + loginYn, + betYn, + memLockYn, + partnerLevelChgYn, + userRecommenderChgYn, + recommendYn, + recommendLimit, + companyRecommender, + accInfoRequestYn, + accInfoRequestType, + siteStatusYn, + multiLoginYn, + liveStreamYn, + boardYn, + qnaYn, + callYn, + userLoginAlarmYn, + liveSprotsMsgYn, + specialBetMonoYn, + smsAuthPass, + maxBetRateYn, + maxBetRate, + logoutTimeLimit, + adminAutoLogoutYn, + casinoRollChangeYn, + betCancelTimeLimitBeforeGame, + betCancelTimeLimitAfterBet, + alarmSounds, + alarmRepeatYn, + alarmQnaYn, + strangeBetAlarm, + maxWinAmt, + cashInYn, + cashInAmtLimit, + cashInAmtMin, + cashInAmtUnit, + cashInWaitTime, + cashOutYn, + cashOutRollMsgYn, + cashOutAmtLimit, + cashOutAmtMin, + cashOutAmtUnit, + cashOutWaitTime, + pointChangeAmtLimit, + pointChangeAmtUnit, + pointChangeType, + pointStatusYn, + sns1, + sns1Link, + sns1Id, + sns2, + sns2Link, + sns2Id, + sns3, + sns3Link, + sns3Id, + insuredUpYn, + victoryPassYn, + siteCheckYn, + vendorComp, + payGCurrency, + payVCurrency, + cashDecimal, + rollingType, + blankSpinSetType, + vaccCode, + secuType + ) VALUES ( + #{siteId}, + #{signupYn}, + #{loginYn}, + #{betYn}, + #{memLockYn}, + #{partnerLevelChgYn}, + #{userRecommenderChgYn}, + #{recommendYn}, + #{recommendLimit}, + #{companyRecommender}, + #{accInfoRequestYn}, + #{accInfoRequestType}, + #{siteStatusYn}, + #{multiLoginYn}, + #{liveStreamYn}, + #{boardYn}, + #{qnaYn}, + #{callYn}, + #{userLoginAlarmYn}, + #{liveSprotsMsgYn}, + #{specialBetMonoYn}, + #{smsAuthPass}, + #{maxBetRateYn}, + #{maxBetRate}, + #{logoutTimeLimit}, + #{adminAutoLogoutYn}, + #{casinoRollChangeYn}, + #{betCancelTimeLimitBeforeGame}, + #{betCancelTimeLimitAfterBet}, + #{alarmSounds}, + #{alarmRepeatYn}, + #{alarmQnaYn}, + #{strangeBetAlarm}, + #{maxWinAmt}, + #{cashInYn}, + #{cashInAmtLimit}, + #{cashInAmtMin}, + #{cashInAmtUnit}, + #{cashInWaitTime}, + #{cashOutYn}, + #{cashOutRollMsgYn}, + #{cashOutAmtLimit}, + #{cashOutAmtMin}, + #{cashOutAmtUnit}, + #{cashOutWaitTime}, + #{pointChangeAmtLimit}, + #{pointChangeAmtUnit}, + #{pointChangeType}, + #{pointStatusYn}, + #{sns1}, + #{sns1Link}, + #{sns1Id}, + #{sns2}, + #{sns2Link}, + #{sns2Id}, + #{sns3}, + #{sns3Link}, + #{sns3Id}, + #{insuredUpYn}, + #{victoryPassYn}, + #{siteCheckYn}, + #{vendorComp}, + #{payGCurrency}, + #{payVCurrency}, + #{cashDecimal}, + #{rollingType}, + #{blankSpinSetType}, + #{vaccCode}, + #{secuType} + ) ON DUPLICATE KEY UPDATE siteId = siteId + + , signupYn = #{signupYn} + + + , loginYn = #{loginYn} + + + , betYn = #{betYn} + + + , memLockYn = #{memLockYn} + + + , partnerLevelChgYn = #{partnerLevelChgYn} + + + , userRecommenderChgYn = #{userRecommenderChgYn} + + + , recommendYn = #{recommendYn} + + + ,recommendLimit = #{recommendLimit} + + + ,accInfoRequestYn = #{accInfoRequestYn} + + + ,siteStatusYn = #{siteStatusYn} + + + ,multiLoginYn = #{multiLoginYn} + + + ,liveStreamYn = #{liveStreamYn} + + + ,boardYn = #{boardYn} + + + ,userLoginAlarmYn = #{userLoginAlarmYn} + + + ,maxBetRateYn = #{maxBetRateYn} + + + ,liveSprotsMsgYn = #{liveSprotsMsgYn} + + + ,specialBetMonoYn = #{specialBetMonoYn} + + + ,specialBetMonoYn = #{specialBetMonoYn} + + + ,companyRecommender = #{companyRecommender} + + + ,smsAuthPass = #{smsAuthPass} + + + + , cashInYn = #{cashInYn} + + + , cashInAmtLimit = #{cashInAmtLimit} + + + , cashInAmtMin = #{cashInAmtMin} + + + , cashInAmtUnit = #{cashInAmtUnit} + + + , cashInWaitTime = #{cashInWaitTime} + + + , cashOutYn = #{cashOutYn} + + + , cashOutRollMsgYn = #{cashOutRollMsgYn} + + + , cashOutAmtLimit = #{cashOutAmtLimit} + + + , cashOutAmtMin = #{cashOutAmtMin} + + + , cashOutAmtUnit = #{cashOutAmtUnit} + + + , cashOutWaitTime = #{cashOutWaitTime} + + + , pointChangeAmtLimit = #{pointChangeAmtLimit} + + + , pointChangeAmtUnit = #{pointChangeAmtUnit} + + + , pointChangeType = #{pointChangeType} + + + , pointStatusYn = #{pointStatusYn} + + + + ,accInfoRequestType = #{accInfoRequestType} + + + ,logoutTimeLimit = #{logoutTimeLimit} + + + ,adminAutoLogoutYn = #{adminAutoLogoutYn} + + + ,casinoRollChangeYn = #{casinoRollChangeYn} + + + ,betCancelTimeLimitBeforeGame = #{betCancelTimeLimitBeforeGame} + + + ,betCancelTimeLimitAfterBet = #{betCancelTimeLimitAfterBet} + + + ,alarmSounds = #{alarmSounds} + + + ,alarmRepeatYn = #{alarmRepeatYn} + + + ,alarmQnaYn = #{alarmQnaYn} + + + ,qnaYn = #{qnaYn} + + + ,callYn = #{callYn} + + + ,strangeBetAlarm = #{strangeBetAlarm} + + + ,maxWinAmt = #{maxWinAmt} + + + ,sns1 = #{sns1} + + + ,sns1Id = #{sns1Id} + + + ,sns1Link = #{sns1Link} + + + ,sns2 = #{sns2} + + + ,sns2Id = #{sns2Id} + + + ,sns2Link = #{sns2Link} + + + ,sns3 = #{sns3} + + + ,sns3Id = #{sns3Id} + + + ,sns3Link = #{sns3Link} + + + ,insuredUpYn = #{insuredUpYn} + + + ,victoryPassYn = #{victoryPassYn} + + + ,cashDecimal = #{cashDecimal} + + + ,rollingType = #{rollingType} + + + ,blankSpinSetType = #{blankSpinSetType} + + + ,vaccCode = #{vaccCode} + + + ,secuType = #{secuType} + + + + + INSERT INTO bank_info + ( + siteId, + bankCode, + bankNameKr, + bankNameEn, + bankDomain, + bankImg, + useYn, + inspectTimeStart, + inspectTimeEnd, + delYn + ) + VALUES + ( + #{siteId}, + #{bankCode}, + #{bankNameKr}, + #{bankNameEn}, + #{bankDomain}, + #{bankImg}, + 'Y', + #{inspectTimeStart}, + #{inspectTimeEnd}, + 'N' + )ON DUPLICATE KEY UPDATE + + bankNameKr = #{bankNameKr}, + bankNameEn = #{bankNameEn}, + bankDomain = #{bankDomain}, + bankImg = #{bankImg}, + useYn = #{useYn}, + inspectTimeStart = #{inspectTimeStart}, + inspectTimeEnd = #{inspectTimeEnd}, + delYn = #{delYn} + + + + DELETE FROM bank_info + WHERE siteId = #{siteId} + AND bankCode = #{bankCode} + + + + + + + + INSERT INTO banner_info ( + + bannerIdx, + + siteId, + bannerType, + bannerTitle, + bannerImg, + domain, + bannerPosition, + bannerContent, + delYn, + loginYn, + regDate, + updDate + ) + VALUES ( + + #{bannerIdx}, + + #{siteId}, + #{bannerType}, + #{bannerTitle}, + #{bannerImg}, + #{domain}, + #{bannerPosition}, + #{bannerContent}, + 'N', + #{loginYn}, + NOW(), + NOW() + ) ON DUPLICATE KEY UPDATE + updDate = now() + + , bannerImg = #{bannerImg} + + + , bannerTitle = #{bannerTitle} + + + , domain = #{domain} + + + , bannerPosition = #{bannerPosition} + + + , bannerContent = #{bannerContent} + + + , delYn = #{delYn} + + + , loginYn = #{loginYn} + + + + + + + + + + + + + + + + INSERT INTO `code` + ( + masterCode, + groupCode, + groupCodeName, + `code`, + codeName, + `ord`, + useYn + ) + VALUES + ( + #{masterCode}, + #{groupCode}, + 'category', + #{code}, + #{codeName}, + #{ord}, + + #{useYn} + + + 'Y' + + ) + ON DUPLICATE KEY UPDATE masterCode =masterCode + + ,codeName = #{codeName} + + + ,ord = #{ord} + + + ,useYn = #{useYn} + + + + + + + + + insert into site_level_bank ( + siteId, + level, + bankCode, + bankAcc, + useYn, + msg + )VALUES( + #{siteId}, + #{level}, + #{bankCode}, + #{bankAcc}, + #{useYn}, + #{msg} + )ON DUPLICATE KEY UPDATE + + bankCode = #{bankCode}, + bankAcc = #{bankAcc}, + useYn = #{useYn}, + msg = #{msg} + + + + + + + UPDATE site_level_betlimit + SET regDate = NOW() + + , betAmtMax = #{betAmtMax} + + + , betAmtMin = #{betAmtMin} + + + , betWinAmtMax = #{betWinAmtMax} + + + , betAmtMaxSlot = #{betAmtMaxSlot} + + + , betAmtMinSlot = #{betAmtMinSlot} + + + , betWinAmtMaxSlot = #{betWinAmtMaxSlot} + + WHERE 1=1 + AND siteId = #{siteId} + AND memLevel = #{memLevel} + + + + + + insert into site_level_fail_point ( + siteId, + level, + gameCode, + folder, + pointRate, + useYn + )VALUES( + #{siteId}, + #{level}, + #{gameCode}, + #{folder}, + #{pointRate}, + #{useYn} + )ON DUPLICATE KEY UPDATE + + folder = #{folder}, + pointRate = #{pointRate}, + useYn = #{useYn} + + + + + + + + + + insert into site_level_domain ( + siteId, + level, + domain, + useYn + )VALUES( + #{siteId}, + #{level}, + #{domain}, + #{useYn} + )ON DUPLICATE KEY UPDATE siteId=siteId + + + ,domain = #{domain} + + + ,useYn = #{useYn} + + + + + + + + + + insert into site_level_outpwd ( + siteId, + level, + cashOutPass, + useYn + )VALUES( + #{siteId}, + #{level}, + #{cashOutPass}, + #{useYn} + )ON DUPLICATE KEY UPDATE siteId = siteId + + + ,cashOutPass = #{cashOutPass} + + + ,useYn = #{useYn} + + + + + + + + + + + + + INSERT INTO `admin_log` + ( + `siteId`, + `memId`, + `logType`, + `logoutYn`, + `logEndPoint`, + `logName`, + `logDesc`, + `regDate`, + `regId`, + `regIp`, + `token` + ) + VALUES + ( + #{siteId}, + #{memId}, + #{logType}, + #{logoutYn}, + #{logEndPoint}, + #{logName}, + #{logDesc}, + now(), + #{regId}, + #{regIp}, + #{token} + ) + + + + + + + + INSERT INTO `site_denied_info` + ( + + `blockIdx`, + + `siteId`, + `blockType`, + `blockTarget`, + `blockTerm`, + `delYn`, + `regDate`, + `regId` + ) + VALUES + ( + + #{blockIdx}, + + #{siteId}, + #{blockType}, + #{blockTarget}, + #{blockTerm}, + 'N', + now(), + #{regId} + )ON DUPLICATE KEY UPDATE siteId = siteId + + + ,delYn = #{delYn} + + + + + INSERT INTO site_admin ( + siteIdx, + siteId, + adminId, + adminName, + adminPass, + loginYn, + regDate, + regId + ) VALUES ( + #{siteIdx}, + #{siteId}, + #{adminId}, + #{adminName}, + #{adminPass}, + 'Y', + NOW(), + #{regId} + ) ON DUPLICATE KEY UPDATE siteId = siteId + + , adminName = #{adminName} + + + , loginYn = #{loginYn} + + + , adminPass = #{adminPass} + + + + + DELETE FROM site_admin + WHERE siteId = #{siteId} + AND adminId = #{adminId} + + + + + + + + INSERT INTO admin_ip ( + siteId, + adminId, + ip, + regId + ) VALUES ( + #{siteId}, + #{adminId}, + #{ip}, + #{regId} + ) + + + + DELETE FROM admin_ip + WHERE siteId = #{siteId} + AND adminId = #{adminId} + AND ip = #{ip} + + + + + + + + update admin_ip set lastLoginDate = now() where siteId = #{siteId} and adminId=#{adminId} and ip = #{ip} + + + + + + + INSERT INTO site_game_setting + (siteId, gameType, vendorCode, minBetAmt, maxBetAmt, compBetYn, topCompId, rollingRateOption) + VALUES + + (#{item.siteId}, #{item.gameType}, #{item.vendorCode}, #{item.minBetAmt}, #{item.maxBetAmt}, #{item.compBetYn}, #{item.topCompId}, #{item.rollingRateOption}) + + ON DUPLICATE KEY UPDATE + minBetAmt = values(minBetAmt), + maxBetAmt = values(maxBetAmt), + compBetYn = values(compBetYn), + rollingRateOption = values(rollingRateOption) + + + + + + INSERT INTO site_check_info ( + + siteCheckIdx, + + siteId, + checkType, + startDate, + endDate, + contents, + regId, + updId, + regDate, + updDate + ) VALUES ( + + #{siteCheckIdx}, + + #{siteId}, + #{checkType}, + + + DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'), + DATE_FORMAT(DATE_ADD(NOW(), INTERVAL +1 YEAR), '%Y-%m-%d %H:%i:%s'), + + + + #{startDate}, + + + #{endDate}, + + + + #{contents}, + #{regId}, + #{regId}, + NOW(), + NOW() + ) ON DUPLICATE KEY UPDATE + updId = #{regId}, updDate = NOW() + + + , startDate = DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') + , endDate = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL +1 YEAR), '%Y-%m-%d %H:%i:%s') + + + + , startDate = #{startDate} + + + , endDate = #{endDate} + + + + + , checkType = #{checkType} + + + , contents = #{contents} + + + + + + + + + + + + + + + UPDATE site_check_info + SET isCheckOff = #{isCheckOff} + WHERE 1=1 + AND siteId = #{siteId} + + AND siteCheckIdx = #{siteCheckIdx} + + + + + UPDATE site_setting + SET siteCheckYn = #{siteCheckYn} + WHERE + siteId = #{siteId} + + + + + + + + + + INSERT INTO code + (masterCode, groupCode, groupCodeName, groupCodeNameEN, code, codeName, codeNameEN, + ord, useYn, kgonVendor, kgonLobby, kgonCode, tripleVendor, tripleLobby, tripleCode, sdApiVendor, sdApiLobby, sdApiCode) + VALUES + ('kplay', #{groupCode}, #{groupCodeName}, #{groupCodeNameEN}, #{code}, #{codeName}, #{codeNameEN}, + #{ord}, #{useYn}, #{kgonVendor}, #{kgonLobby}, #{kgonCode}, #{tripleVendor}, #{tripleLobby}, #{tripleCode}, #{sdApiVendor}, #{sdApiLobby}, #{sdApiCode}) + + + + UPDATE `code` c + SET + groupCodeName = #{groupCodeName}, groupCodeNameEN = #{groupCodeNameEN}, + codeName = #{codeName}, codeNameEN = #{codeNameEN}, ord = #{ord}, useYn = #{useYn}, + kgonVendor = #{kgonVendor}, kgonLobby = #{kgonLobby}, kgonCode = #{kgonCode}, + tripleVendor = #{tripleVendor}, tripleLobby = #{tripleLobby}, tripleCode = #{tripleCode}, + sdApiVendor = #{sdApiVendor}, sdApiLobby = #{sdApiLobby}, sdApiCode = #{sdApiCode} + WHERE + c.masterCode = 'kplay' + AND c.groupCode = #{groupCode} + AND c.code = #{code} + + + + INSERT INTO `memrateinfo` + (siteId, memId, category1, category2, gameType) + SELECT + m.siteId AS siteId, m.memId AS memId, #{groupCode} AS category1, #{groupCodeNameEN} AS category2, #{code} AS gameType + FROM + `member_tb` m + + + + INSERT INTO `site_game_setting` + (siteId, gameType, vendorCode, topCompId) + SELECT + m.siteId, #{groupCode}, #{code}, IFNULL(m.recommenderId, '') + FROM + `member_tb` m + WHERE + m.partnerType IS NOT NULL + AND + m.partnerType != '' + + + + + + + + + + + + + + + INSERT INTO site_domain_partner_setting + (siteIdx, domain, siteId, memId) + VALUES + (#{siteIdx}, #{domain}, #{siteId}, #{memId}) + ON DUPLICATE KEY UPDATE updDate = NOW() + + , memId = #{memId} + + + , useYn = #{useYn} + + + + + DELETE FROM site_domain_partner_setting + WHERE siteIdx = #{siteIdx} AND domain = #{domain} + + + + + + + + + + + + + UPDATE member_charging_point_setting mcp + LEFT JOIN member_tb mb ON mcp.siteIdx=mb.siteIdx AND mcp.memIdx=mb.memIdx + SET mcp.updDate = NOW() + , mcp.memLevel = mb.memLevel + + , mcp.memLevelName = #{memLevelName} + + + , mcp.fstChrgByJoinRate = #{fstChrgByJoinRate} + + + , mcp.fstChrgByDailyRate = #{fstChrgByDailyRate} + + + , mcp.fstChrgByEveryTimeRate = #{fstChrgByEveryTimeRate} + + + , mcp.bonusLimit = #{bonusLimit} + + + , mcp.folderCountLimit = #{folderCountLimit} + + WHERE mcp.siteIdx = #{siteIdx} + AND mb.memLevel = #{memLevel} + + + + UPDATE site_charging_point_setting + SET updDate = NOW() + + , memLevelName = #{memLevelName} + + + , fstChrgByJoinRate = #{fstChrgByJoinRate} + + + , fstChrgByDailyRate = #{fstChrgByDailyRate} + + + , fstChrgByEveryTimeRate = #{fstChrgByEveryTimeRate} + + + , bonusLimit = #{bonusLimit} + + + , folderCountLimit = #{folderCountLimit} + + + , useAutoLevelUp = #{useAutoLevelUp} + + + , autoLvBetAmt = #{autoLvBetAmt} + + + , autoLvCashIn = #{autoLvCashIn} + + WHERE siteIdx = #{siteIdx} + AND memLevel = #{memLevel} + + + + + + + + + + + + + + + + + + UPDATE site_menu_setting + SET bookmarkYn = #{bookmarkYn} + WHERE 1=1 + AND siteId = #{siteId} + AND menuCode = #{menuCode} + + + + + + UPDATE site + SET lastUpdAdmin = #{lastUpdAdmin}, siteMemo = #{siteMemo} + WHERE 1=1 + AND siteId = #{siteId} + + + + + + INSERT INTO daily_month_reports + (monthDate,siteId,mofAccessCnt,mofJoinCnt,mBetAMT,mWinAMT,mBetBEP,mRollingAMT,mofCashInUserCnt,mUserCashIN,mUserCashOUT,mUserCashBEP, + mAdminCashPYM,mAdminCashPYB,mAdminPointIN,mAdminPointOUT,mCreditPayAMT,mCreditAMT,mCreditPointAMT,mInsuredAMT,mInsuredPointAMT) + VALUES + (#{monthDate},#{siteId},#{mofAccessCnt},#{mofJoinCnt},#{mBetAMT},#{mWinAMT},#{mBetBEP},#{mRollingAMT},#{mofCashInUserCnt},#{mUserCashIN},#{mUserCashOUT},#{mUserCashBEP}, + #{mAdminCashPYM},#{mAdminCashPYB},#{mAdminPointIN},#{mAdminPointOUT},#{mCreditPayAMT},#{mCreditAMT},#{mCreditPointAMT},#{mInsuredAMT},#{mInsuredPointAMT}) + ON DUPLICATE KEY UPDATE updDate = NOW(), + mofAccessCnt = #{mofAccessCnt}, + mofJoinCnt = #{mofJoinCnt}, + mBetAMT = #{mBetAMT}, + mWinAMT = #{mWinAMT}, + mBetBEP = #{mBetBEP}, + mRollingAMT = #{mRollingAMT}, + mofCashInUserCnt = #{mofCashInUserCnt}, + mUserCashIN = #{mUserCashIN}, + mUserCashOUT = #{mUserCashOUT}, + mUserCashBEP = #{mUserCashBEP}, + mAdminCashPYM = #{mAdminCashPYM}, + mAdminCashPYB = #{mAdminCashPYB}, + mAdminPointIN = #{mAdminPointIN}, + mAdminPointOUT = #{mAdminPointOUT}, + mCreditPayAMT = #{mCreditPayAMT}, + mCreditAMT = #{mCreditAMT}, + mCreditPointAMT = #{mCreditPointAMT}, + mInsuredAMT = #{mInsuredAMT}, + mInsuredPointAMT = #{mInsuredPointAMT} + + + + UPDATE mem_action_log + SET actionType = #{actionType}, + lastActionDt = NOW(3) + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + INSERT INTO daily_rolling_reports + (days, siteId, ptnMemId, usrMemId, pointAmt, casinoAmt, slotAmt, miniAmt, sportsAmt, regDate, updDate) + VALUES + (#{days}, #{siteId}, #{ptnMemId}, #{usrMemId}, #{pointAmt}, #{casinoAmt}, #{slotAmt}, #{miniAmt}, #{sportsAmt}, NOW(), NOW()) + ON DUPLICATE KEY UPDATE updDate = NOW(), + pointAmt = #{pointAmt}, + casinoAmt = #{casinoAmt}, + slotAmt = #{slotAmt}, + miniAmt = #{miniAmt}, + sportsAmt = #{sportsAmt} + + + + + + + + INSERT INTO bgm_noti_info + (siteId, notiType, notiBgmFile, useYN, regDate, updDate) + VALUES + (#{siteId}, #{notiType}, #{notiBgmFile}, #{useYN}, NOW(), NOW()) + ON DUPLICATE KEY UPDATE updDate = NOW() + + , notiBgmFile = #{notiBgmFile} + + + , useYN = #{useYN} + + + + + + + UPDATE member_tb + SET memLevel = #{matchedLevel} + WHERE siteIdx = #{siteIdx} + AND memIdx = #{memIdx} + ; + + UPDATE member_charging_point_setting + SET memLevel = #{matchedLevel}, + memLevelName = #{memLevelName}, + fstChrgByJoinRate = #{fstChrgByJoinRate}, + fstChrgByDailyRate = #{fstChrgByDailyRate}, + fstChrgByEveryTimeRate = #{fstChrgByEveryTimeRate}, + bonusLimit = #{bonusLimit} + WHERE siteIdx = #{siteIdx} + AND memIdx = #{memIdx} + ; + + + + + + + UPDATE site_cash_bonus_setting + SET bonusTitle = #{bonusTitle} + , bonusDesc = #{bonusDesc} + , fstChrgByJoinRate = #{fstChrgByJoinRate} + , fstChrgByDailyRate = #{fstChrgByDailyRate} + , fstChrgByEveryTimeRate = #{fstChrgByEveryTimeRate} + , bonusLimit = #{bonusLimit} + , useYn = #{useYn} + WHERE siteIdx = #{siteIdx} + AND bonusCode = #{bonusCode} + + + diff --git a/src/main/resources/db1/COMP.xml b/src/main/resources/db1/COMP.xml new file mode 100644 index 0000000..e8534b3 --- /dev/null +++ b/src/main/resources/db1/COMP.xml @@ -0,0 +1,1176 @@ + + + + + + + + + + + + + + INSERT INTO site_game_setting ( + siteId, + topCompId, + gameType, + vendorCode + + , compBetYn + + + , biSubPointRate + + ) + VALUES ( + #{siteId}, + #{topCompId}, + #{gameType}, + #{vendorCode} + + , #{compBetYn} + + + , #{biSubPointRate} + + ) + ON DUPLICATE KEY UPDATE + updDate = NOW() + + , compBetYn = #{compBetYn} + + + , biSubPointRate = #{biSubPointRate} + + + + + UPDATE + member_tb + SET + maxCredit = #{maxCredit}, creditRate = #{creditRate} + WHERE + siteId = #{siteId} + AND memId = #{siteId} + AND recommenderId = #{topCompId} + + + + UPDATE memrateinfo + SET + pointRate = #{pointRate}, + + loseRate = #{loseRate}, + + useYn = 'Y', + betYn = 'Y' + WHERE siteId = #{siteId} AND memId = #{memId} AND gameType = #{gameType} + + + + UPDATE site_setting + SET + cashInYn = #{cashInYn} + , cashOutYn = #{cashOutYn} + , betYn = #{betYn} + , siteStatusYn = #{siteStatusYn} + + , signupYn = #{signupYn} + + + , insuredUpYn = #{insuredUpYn} + + + , payGCurrency = #{payGCurrency} + + + , payVCurrency = #{payVCurrency} + + WHERE siteId = #{siteId} + + + + + + UPDATE member_tb LEFT JOIN site ON member_tb.siteId=site.siteId AND member_tb.memId=site.adminId + SET + member_tb.updDt = NOW(), + site.updDate = NOW() + + , member_tb.memPass = #{password} + , site.sitePass = #{password} + + + , member_tb.memName = #{siteName} + , site.siteName = #{siteName} + + + , site.userCountLimit = #{userCountLimit} + + + , site.compCountLimit = #{compCountLimit} + + + , site.siteDomain = #{siteDomain} + + + , site.siteDomains = #{siteDomains} + + WHERE + member_tb.siteId = #{siteId} + AND member_tb.memId = #{siteId} + AND member_tb.recommenderId = #{topCompId} + AND (member_tb.partnerType IS NOT NULL AND member_tb.partnerType != '') + + + + + + + + + + + + + + INSERT INTO site_game_setting ( + siteId, + topCompId, + gameType, + vendorCode + + , compBetYn + + + , apiVendor + + + , superUseYn + + ) + VALUES ( + #{siteId}, + #{topCompId}, + #{groupCode}, + #{code} + + , #{compBetYn} + + + , #{apiVendor} + + + , #{superUseYn} + + ) + ON DUPLICATE KEY UPDATE + updDate = NOW() + + , compBetYn = #{compBetYn} + + + , apiVendor = #{apiVendor} + + + , superUseYn = #{superUseYn} + + + + + + + UPDATE site_menu_setting + SET useYn = #{useYn} + WHERE + siteId = #{siteId} + AND menuCode = #{menuCode} + + + + + + + + UPDATE site_game_setting sg LEFT JOIN memrateinfo sr + ON sr.siteId = sg.siteId AND sr.memId = sg.siteId AND sr.gameType = sg.vendorCode + SET sg.vendor = #{vendor}, + sr.pointRate = CAST(#{gameRate} AS DECIMAL(10,2)) + WHERE 1=1 + AND sg.siteId = #{siteId} + AND sg.vendorCode = #{vendorCode} + + + + + + DELETE FROM site_game_triple_rate_setting + WHERE siteId = #{siteId} + + + + INSERT INTO site_game_triple_rate_setting + (siteId, vendorCode, vendor, baseRate, gameRate, useYn) + SELECT + vi.siteId AS siteId, + c.code AS vendorCode, + #{vendor} AS vendor, + CAST(s.creditRate AS DECIMAL(10,2)) AS baseRate, + CAST(#{gameRate} AS DECIMAL(10,2)) AS gameRate, + #{setVendor} AS useYn + FROM vendor_comp_info vi LEFT JOIN member_tb s ON vi.siteId=s.siteId AND vi.siteId=s.memId + , `code` c + WHERE 1=1 + AND vi.clientId = #{clientId} + AND vi.clientSecretKey = #{clientSecretKey} + AND c.masterCode = 'kplay' + AND c.tripleVendor != '' + AND c.tripleVendor IS NOT NULL + AND c.tripleCode = #{vendorIdx} + ON DUPLICATE KEY UPDATE + baseRate = CAST(s.creditRate AS DECIMAL(10,2)), + gameRate = CAST(#{gameRate} AS DECIMAL(10,2)), + useYn = #{setVendor} + + + + + + UPDATE site_game_setting og LEFT JOIN site_game_triple_rate_setting tg ON tg.siteId=og.siteId AND tg.vendorCode = og.vendorCode + AND tg.siteId = #{siteId} AND tg.useYn = 'Y' + LEFT JOIN memrateinfo sr ON sr.siteId=og.siteId AND sr.memId=og.siteId AND sr.gameType=og.vendorCode + SET og.vendor = IFNULL(tg.vendor, 'nexus'), + og.superUseYn = IFNULL(tg.useYn, 'N'), + sr.pointRate = IFNULL(CAST(tg.gameRate AS CHAR), sr.pointRate) + WHERE 1=1 + AND og.siteId = #{siteId} + AND og.apiVendor = 'triple' + + + + DELETE FROM admin_ip WHERE siteId = #{siteId}; + + DELETE FROM old_admin_log WHERE siteId = #{siteId}; + + DELETE FROM admin_log WHERE siteId = #{siteId}; + + DELETE FROM banner_info WHERE siteId = #{siteId}; + + DELETE a FROM old_betinfomap a LEFT JOIN old_betinfo b ON a.betIdx=b.betIdx WHERE b.siteId = #{siteId}; + + DELETE a FROM betinfomap a LEFT JOIN betinfo b ON a.betIdx=b.betIdx WHERE b.siteId = #{siteId}; + + DELETE a FROM bet_splus_info a LEFT JOIN betinfo b ON a.betIdx=b.betIdx WHERE b.siteId = #{siteId}; + + DELETE a FROM bet_splus_info a LEFT JOIN old_betinfo b ON a.betIdx=b.betIdx WHERE b.siteId = #{siteId}; + + DELETE FROM old_betinfo WHERE siteId = #{siteId}; + + DELETE FROM betinfo WHERE siteId = #{siteId}; + + DELETE FROM old_new_bet_info WHERE siteId = #{siteId}; + + DELETE FROM new_bet_info WHERE siteId = #{siteId}; + + DELETE a FROM cmt_info a LEFT JOIN board_info b ON a.boardIdx=b.boardIdx WHERE b.siteId = #{siteId}; + + DELETE FROM board_info WHERE siteId = #{siteId}; + + DELETE FROM old_daily_periodic_reports WHERE siteId = #{siteId}; + + DELETE FROM daily_periodic_reports WHERE siteId = #{siteId}; + + DELETE FROM daily_month_reports WHERE siteId = #{siteId}; + + DELETE a FROM old_mem_pre_point a LEFT JOIN old_point_info b ON a.pointIdx=b.pointIdx WHERE b.siteId = #{siteId}; + + DELETE FROM old_point_info WHERE siteId = #{siteId}; + + DELETE a FROM mem_pre_point a LEFT JOIN point_info b ON a.pointIdx=b.pointIdx WHERE b.siteId = #{siteId}; + + DELETE FROM point_info WHERE siteId = #{siteId}; + + DELETE FROM old_cash_info WHERE siteId = #{siteId}; + + DELETE FROM cash_info WHERE siteId = #{siteId}; + + DELETE FROM cash_bonus_rel_log WHERE siteId = #{siteId}; + + DELETE FROM mem_log WHERE siteId = #{siteId}; + + DELETE FROM old_mem_log WHERE siteId = #{siteId}; + + DELETE FROM triple_tran_info WHERE siteId = #{siteId}; + + DELETE a FROM msginfo_read_status a LEFT JOIN msginfo b ON a.msgIdx=b.msgIdx WHERE b.siteId = #{siteId}; + + DELETE FROM msginfo WHERE siteId = #{siteId}; + + DELETE FROM site_check_info WHERE siteId = #{siteId}; + + DELETE FROM old_daily_rolling_reports WHERE siteId = #{siteId}; + + DELETE FROM daily_rolling_reports WHERE siteId = #{siteId}; + + DELETE FROM slot_tran_info WHERE siteId = #{siteId}; + + DELETE a FROM mem_action_log a LEFT JOIN member_tb b ON a.siteId=b.siteId AND a.memId=b.memId + WHERE b.siteId = #{siteId} + AND b.partnerLevel NOT IN ('COMP', 'AUTO') + + AND b.memId NOT IN + + #{item} + + + ; + + DELETE a FROM member_charging_point_setting a LEFT JOIN member_tb b ON a.siteIdx=b.siteIdx AND a.memIdx=b.memIdx + WHERE b.siteId = #{siteId} + AND b.partnerLevel NOT IN ('COMP', 'AUTO') + + AND b.memId NOT IN + + #{item} + + + ; + + DELETE a FROM mem_point a LEFT JOIN member_tb b ON a.siteId=b.siteId AND a.memId=b.memId + WHERE b.siteId = #{siteId} + AND b.partnerLevel NOT IN ('COMP', 'AUTO') + + AND b.memId NOT IN + + #{item} + + + ; + + DELETE a FROM mem_cash a LEFT JOIN member_tb b ON a.siteId=b.siteId AND a.memId=b.memId + WHERE b.siteId = #{siteId} + AND b.partnerLevel NOT IN ('COMP', 'AUTO') + + AND b.memId NOT IN + + #{item} + + + ; + + DELETE a FROM memberflow a LEFT JOIN member_tb b ON a.siteId=b.siteId AND a.memId=b.memId + WHERE b.siteId = #{siteId} + AND b.partnerLevel NOT IN ('COMP', 'AUTO') + + AND b.memId NOT IN + + #{item} + + + ; + + DELETE a FROM memrateinfo a LEFT JOIN member_tb b ON a.siteId=b.siteId AND a.memId=b.memId + WHERE b.siteId = #{siteId} + AND b.partnerLevel NOT IN ('COMP', 'AUTO') + + AND b.memId NOT IN + + #{item} + + + ; + + DELETE a FROM mem_multiple_rate a LEFT JOIN member_tb b ON a.siteId=b.siteId AND a.memId=b.memId + WHERE b.siteId = #{siteId} + AND b.partnerLevel NOT IN ('COMP', 'AUTO') + + AND b.memId NOT IN + + #{item} + + + ; + + DELETE FROM member_tb + WHERE siteId = #{siteId} + AND partnerLevel NOT IN ('COMP', 'AUTO') + + AND memId NOT IN + + #{item} + + + ; + + + + UPDATE partner_credit + SET creditAmt='0', creditSubPoint='0', calculateIdx=UNIX_TIMESTAMP(NOW()), creditAmtHoldem='0', creditAmtHholdem='0', creditAmtInplay='0' + WHERE siteId = #{siteId} + ; + + UPDATE partner_insured + SET insuredAmt='0', insuredSubPoint='0' + WHERE siteId = #{siteId} + ; + + UPDATE mem_point + SET pointAmt='0' + WHERE siteId = #{siteId} AND memId IN ( + SELECT + memId + FROM member_tb + WHERE siteId = #{siteId} + AND ( + partnerLevel IN ('COMP', 'AUTO') + + OR memId IN + + #{item} + + + ) + ); + + UPDATE mem_cash + SET cashAmt='0', + cashAmtD='0.0' + WHERE siteId = #{siteId} AND memId IN ( + SELECT + memId + FROM member_tb + WHERE siteId = #{siteId} + AND ( + partnerLevel IN ('COMP', 'AUTO') + + OR memId IN + + #{item} + + + ) + ); + + UPDATE adminheadinfo a + SET a.memWaitCnt = 0, + a.memJoinCnt = 0, + a.memCnt = (SELECT COUNT(memIdx) FROM member_tb WHERE siteId=#{siteId} AND partnerLevel NOT IN ('COMP', 'AUTO')) + WHERE a.siteId = #{siteId} + ; + + UPDATE site_charging_point_setting a LEFT JOIN site b ON a.siteIdx=b.siteIdx + SET a.memLevelName = '', + a.fstChrgByJoinRate = 0, + a.fstChrgByJoinLimit = 0, + a.fstChrgByDailyRate = 0, + a.fstChrgByDailyLimit = 0, + a.fstChrgByEveryTimeRate = 0, + a.fstChrgByEveryTimeLimit = 0, + a.bonusLimit = 0, + a.folderCountLimit = 0, + a.useAutoLevelUp = 'N', + a.autoLvBetAmt = 0, + a.autoLvCashIn = 0 + WHERE b.siteId = #{siteId} + ; + + UPDATE site_cash_bonus_setting a LEFT JOIN site b ON a.siteIdx=b.siteIdx + SET a.bonusTitle = '', + a.bonusDesc = '', + a.fstChrgByJoinRate = 0, + a.fstChrgByDailyRate = 0, + a.fstChrgByEveryTimeRate = 0, + a.bonusLimit = 0, + a.useYn = 'N' + WHERE b.siteId = #{siteId} + ; + + UPDATE site_level_betlimit + SET betAmtMax = '1000000', + betAmtMin = '1000', + betWinAmtMax = '5000000', + betAmtMaxSlot = '1000000', + betAmtMinSlot = '100', + betWinAmtMaxSlot = '5000000' + WHERE siteId = #{siteId} + ; + + + + + + UPDATE vendor_comp_info + SET clientId = #{clientId}, clientSecretKey = #{clientSecretKey} + WHERE apiVendorCode='triple' + AND siteId = #{siteId} + + + + + + + + + + UPDATE member_tb + SET victoryPassYn = #{victoryPassYn} + WHERE siteId = #{siteId} AND memId = #{siteId} + + + + + + + + INSERT INTO totp_info + (account, issuer, secretKey, url, regDate, updDate) + VALUES + (#{account}, #{issuer}, #{secretKey}, #{url}, NOW(), NOW()) + ON DUPLICATE KEY UPDATE + secretKey = #{secretKey}, + url = #{url}, + updDate = NOW() + + + + UPDATE admininfo + SET adminOtp = #{useYn} + WHERE adminId = #{account} + + + + + UPDATE site + + + UPDATE site_admin + + SET adminOtp = #{useYn} + WHERE adminId = #{account} + + + + + + + + + + + + UPDATE site_game_setting a LEFT JOIN `code` b ON b.masterCode='kplay' AND a.vendorCode=b.code + SET a.minBetAmt = CAST(#{minBetAmt} AS CHAR), + a.maxBetAmt = CAST(#{maxBetAmt} AS CHAR) + WHERE 1=1 + AND a.siteId = #{siteId} + AND b.tripleCode = #{vendorIdx} + + + + + + + diff --git a/src/main/resources/db1/MAIN.xml b/src/main/resources/db1/MAIN.xml new file mode 100644 index 0000000..e667aeb --- /dev/null +++ b/src/main/resources/db1/MAIN.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db1/MINIGAME.xml b/src/main/resources/db1/MINIGAME.xml new file mode 100644 index 0000000..7c888a8 --- /dev/null +++ b/src/main/resources/db1/MINIGAME.xml @@ -0,0 +1,55 @@ + + + + + + + INSERT INTO `site_minigame_set` VALUES + ( + #{siteId}, #{gameType}, #{useYn}, #{betLimitSec} + ) ON DUPLICATE KEY UPDATE siteId =siteId + + ,useYn=#{useYn} + + + + ,betLimitSec=#{betLimitSec} + + + + + + + INSERT INTO `minigamesetting` + (SELECT #{siteId} , `gameType`, `optionGroup`, `optionGroupTitle`, `optionSubGroup`, `optionSubGroupTitle`, `option`, `optionTitle`, `betIdle`, #{betRate}, #{useYn}, 'Y' , #{updId}, NOW() + FROM minigamesetting_code + WHERE gameType = #{gameType} AND optionGroup = #{optionGroup} AND optionSubGroup =#{optionSubGroup} ) + ON DUPLICATE KEY UPDATE siteId = siteId + + ,`betRate` = #{betRate} + + + , useYn=#{useYn} + + + + + + + + diff --git a/src/main/resources/db1/PASSIM.xml b/src/main/resources/db1/PASSIM.xml new file mode 100644 index 0000000..4c314bc --- /dev/null +++ b/src/main/resources/db1/PASSIM.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/db1/POINT.xml b/src/main/resources/db1/POINT.xml new file mode 100644 index 0000000..e246a09 --- /dev/null +++ b/src/main/resources/db1/POINT.xml @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + + + INSERT INTO point_info + (siteId, `memId`,`pointType`,`pointAmt`,`pointDesc`,`betIdx`,`delYn`,`regId`,`pointStatus`,`updDate`,`regDate`, adminId, memo, prePointAmt) + VALUES + (#{siteId}, #{memId}, #{pointType}, #{pointAmt}, #{pointDesc}, #{betIdx}, 'N', #{regId}, #{pointStatus}, now(), now(), #{adminId}, #{memo}, #{prePointAmt}) + + SELECT LAST_INSERT_ID(); + + + + diff --git a/src/main/resources/db1/RATE.xml b/src/main/resources/db1/RATE.xml new file mode 100644 index 0000000..0b382c9 --- /dev/null +++ b/src/main/resources/db1/RATE.xml @@ -0,0 +1,236 @@ + + + + + + + + UPDATE memrateinfo mr + SET mr.pointRate = #{pointRate}, + mr.loseRate = #{loseRate} + WHERE 1=1 + AND mr.siteId = #{siteId} + AND mr.memId = #{memId} + + AND mr.category1 = #{category} + + AND mr.category2 = #{cateCode} + + + AND mr.gameType = #{cateCode} + + + + + + UPDATE memrateinfo mr LEFT JOIN member_tb mb ON mr.siteId=mb.siteId AND mr.memId=mb.recommenderId + LEFT JOIN ( + SELECT + bmr.siteId, + bmr.category1, + bmr.category2, + bmr.gameType, + MAX(CAST(bmr.pointRate AS DECIMAL(10,2))) AS bMaxPointRate, + MAX(CAST(bmr.loseRate AS DECIMAL(10,2))) AS bMaxLoseRate + FROM memrateinfo bmr LEFT JOIN memberflow mf ON bmr.siteId=mf.siteId AND bmr.memId=mf.memId + WHERE 1=1 + AND mf.siteId = #{siteId} + AND mf.`order` = 1 + AND mf.recommenderId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}) + + AND bmr.category1 = #{category} + + AND bmr.category2 = #{cateCode} + + + AND bmr.gameType = #{cateCode} + + + GROUP BY bmr.siteId, bmr.category1, bmr.category2 + ) botMr ON mr.siteId=botMr.siteId + SET mr.minPointRate = IF( CAST(#{pointRate} AS DECIMAL(4,2)) > botMr.bMaxPointRate, #{pointRate}, CAST(botMr.bMaxPointRate AS CHAR) ), + mr.minLoseRate = IF( CAST(#{loseRate} AS DECIMAL(4,2)) > botMr.bMaxLoseRate, #{loseRate}, CAST(botMr.bMaxLoseRate AS CHAR) ) + WHERE 1=1 + AND mb.siteId = #{siteId} + AND mb.memId = #{memId} + + AND mr.category1 = #{category} + + AND mr.category2 = #{cateCode} + + + AND mr.gameType = #{cateCode} + + + + + + UPDATE memrateinfo mr LEFT JOIN member_tb mb ON mr.siteId=mb.siteId AND mr.memId=mb.memId + SET mr.maxPointRate = #{pointRate}, + mr.maxLoseRate = #{loseRate} + WHERE 1=1 + AND mb.siteId = #{siteId} + AND mb.recommenderId = #{memId} + + AND mr.category1 = #{category} + + AND mr.category2 = #{cateCode} + + + AND mr.gameType = #{cateCode} + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db1/REPORT.xml b/src/main/resources/db1/REPORT.xml new file mode 100644 index 0000000..bab27e0 --- /dev/null +++ b/src/main/resources/db1/REPORT.xml @@ -0,0 +1,2251 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db1/RETAIL.xml b/src/main/resources/db1/RETAIL.xml new file mode 100644 index 0000000..e7f17a6 --- /dev/null +++ b/src/main/resources/db1/RETAIL.xml @@ -0,0 +1,2872 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update member_tb set retailPeriod = #{retailPeriod}, retailType=#{retailType} where memId =#{memId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update point_info set pointStatus ='1' where siteId = #{siteId} AND memId = #{memId} AND pointStatus =0 + + + AND YEARWEEK(updDate) = #{dateIdx} + + + AND DATE_FORMAT(updDate, '%Y%m') = REPLACE(#{dateIdx}, '-', '') + + + + + update mem_point set pointAmt = pointAmt + #{pointAmt} where siteId = #{siteId} AND memId = #{memId} + + + + + + + + + + + + UPDATE memrateinfo mr LEFT JOIN code cd ON cd.masterCode='kplay' AND mr.gameType=cd.code + SET + mr.regDate = NOW() + + , mr.pointRate = #{casinoPR} + + + , mr.loseRate = #{casinoLR} + + WHERE 1=1 + AND mr.siteId = #{siteId} + AND mr.memId = #{memId} + AND cd.groupCode = 'casino' + AND cd.groupCodeNameEN = 'CASINO' + + + + UPDATE memrateinfo mr LEFT JOIN code cd ON cd.masterCode='kplay' AND mr.gameType=cd.code + SET + mr.regDate = NOW() + + , mr.pointRate = #{hcasinoPR} + + + , mr.loseRate = #{hcasinoLR} + + WHERE 1=1 + AND mr.siteId = #{siteId} + AND mr.memId = #{memId} + AND cd.groupCode = 'casino' + AND cd.groupCodeNameEN = 'HC-CASINO' + + + + UPDATE memrateinfo mr LEFT JOIN code cd ON cd.masterCode='kplay' AND mr.gameType=cd.code + SET + mr.regDate = NOW() + + , mr.pointRate = #{slotPR} + + + , mr.loseRate = #{slotLR} + + WHERE 1=1 + AND mr.siteId = #{siteId} + AND mr.memId = #{memId} + AND cd.groupCode = 'slot' + + + + UPDATE memrateinfo mr LEFT JOIN code cd ON cd.masterCode='kplay' AND mr.gameType=cd.code + SET + mr.regDate = NOW() + + , mr.pointRate = #{miniPR} + + + , mr.loseRate = #{miniLR} + + WHERE 1=1 + AND mr.siteId = #{siteId} + AND mr.memId = #{memId} + AND cd.groupCode = 'minigame' + + + + UPDATE memrateinfo mr LEFT JOIN code cd ON cd.masterCode='kplay' AND mr.gameType=cd.code + SET + mr.regDate = NOW() + + , mr.pointRate = #{sportPR} + + + , mr.loseRate = #{slotLR} + + WHERE 1=1 + AND mr.siteId = #{siteId} + AND mr.memId = #{memId} + AND cd.groupCode = 'sport' + + + + UPDATE member_charging_point_setting mcp LEFT JOIN member_tb mb + ON mcp.siteIdx=mb.siteIdx AND mcp.memIdx=mb.memIdx + SET mcp.updDate = NOW() + + , mcp.fstChrgByJoinRate = #{fstChrgByJoinRate} + + + , mcp.fstChrgByDailyRate = #{fstChrgByDailyRate} + + + , mcp.fstChrgByEveryTimeRate = #{fstChrgByEveryTimeRate} + + + , mcp.bonusLimit = #{bonusLimit} + + + , mcp.folderCountLimit = #{folderCountLimit} + + WHERE 1=1 + AND mb.siteId = #{siteId} + AND ( + mb.memid = #{memId} + OR + (mb.recommenderId = #{memId} AND mb.partnerLevel='NORMAL') + ) + + + + + + + + + + + + UPDATE member_tb a LEFT JOIN memberflow b ON a.siteId=b.siteId AND a.memId=b.memId + SET a.memLockYn = #{memLockYn}, + a.updId = #{updId}, + a.updDt = NOW() + WHERE 1=1 + AND b.siteId = #{siteId} + AND b.recommenderId = #{memId} + + + + + + + + + + + + + + + + + + + + + UPDATE member_tb SET + + memNick = #{memNick}, + + + memPhone = #{memPhone}, + + + loginYn = #{loginYn}, + + + betYn = #{betYn}, + + updDt = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db1/SUPER.xml b/src/main/resources/db1/SUPER.xml new file mode 100644 index 0000000..1521414 --- /dev/null +++ b/src/main/resources/db1/SUPER.xml @@ -0,0 +1,61 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db1/USER.xml b/src/main/resources/db1/USER.xml new file mode 100644 index 0000000..f83d663 --- /dev/null +++ b/src/main/resources/db1/USER.xml @@ -0,0 +1,4795 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO member_tb + ( + memId, + siteIdx, + siteId, + memPass, + memNick, + memName, + memPhone, + memLevel, + partnerLevel, + partnerType, + nationCode, + partSendYn, + maxCredit, + creditRate, + creditStatus, + recommenderId, + + loginYn, + + + recommendYn, + + + betYn, + + + pointExchangeYn, + + + rollingYn, + + adminId, + regId, + updId, + regIp, + redDt, + updDt, + memStatus, + memBlackYn, + + cashSendYn, + + + cashReceiveYn, + + + memLockYn, + + lastIp, + memo, + bank, + bankacc, + cashOutPass, + joinDomain + ) + VALUES + ( + #{memId}, + #{siteIdx}, + #{siteId}, + #{memPass}, + #{memNick}, + #{memName}, + #{memPhone}, + #{memLevel}, + #{partnerLevel}, + #{partnerType}, + #{nationCode}, + #{partSendYn}, + #{maxCredit}, + #{creditRate}, + #{creditStatus}, + #{recommenderId}, + + #{loginYn}, + + + #{recommendYn}, + + + #{betYn}, + + + #{pointExchangeYn}, + + + #{rollingYn}, + + '', + '', + '', + #{regIp}, + now(), + now(), + #{memStatus}, + 'N', + + #{memLockYn}, + + + #{cashSendYn}, + + + #{cashReceiveYn}, + + #{lastIp}, + #{memo}, + #{bank}, + #{bankacc}, + #{cashOutPass}, + #{joinDomain} + ) + + + + + UPDATE member_tb SET + + memPass = #{memPass}, + + + memNick = #{memNick}, + + + cashOutPass = #{cashOutPass}, + + + memName = #{memName}, + + + memPhone = #{memPhone}, + + + memStatus = #{memStatus}, + + + loginYn = #{loginYn}, + + + betYn = #{betYn}, + + + recommendYn = #{recommendYn}, + + + memBlackYn = #{memBlackYn}, + + + memLockYn = #{memLockYn}, + + + subMemBetLockYn = #{subMemBetLockYn}, + + + subMemRateModifyYn = #{subMemRateModifyYn}, + + + accInfoRequestYn = #{accInfoRequestYn}, + + + memLevel = #{memLevel}, + + + sportsLevel = #{sportsLevel}, + + + casinoLevel = #{casinoLevel}, + + + slotLevel = #{slotLevel}, + + + mgLevel = #{mgLevel}, + + + pointExchangeYn = #{pointExchangeYn}, + + + memDelYn = #{memDelYn}, + + + memo = #{memo}, + + + betLevel = #{betLevel}, + + + pointLevel = #{pointLevel}, + + + bankLevel = #{bankLevel}, + + + bank = #{bank}, + + + bankacc = #{bankacc}, + + + cashSendYn = #{cashSendYn}, + + + cashReceiveYn = #{cashReceiveYn}, + + + victoryPassYn = #{victoryPassYn}, + + + updId = #{updId}, + + updDt = NOW() + WHERE + siteId = #{siteId} AND memId = #{memId} + + + + + + + + + + + + + + + + + + + + UPDATE member_tb + SET + memStatus = #{memStatus}, + + joinMemo = #{memo}, + + updDt = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + + + + insert into memrateinfo ( + memId, + gameType, + idleStartRate, + idleEndRate, + rateType, + pointRate, + regDate, + useYn + ) values ( + #{memId}, + #{gameType}, + #{idleStartRate}, + #{idleEndRate}, + #{rateType}, + #{pointRate}, + now(), + #{useYn} + ) + ON DUPLICATE KEY UPDATE + pointRate = IF( #{pointRate}*100 > (SELECT m.maxPointRate*100 FROM memrateinfo m WHERE + m.memId=#{memId} AND + m.gameType=#{gameType} AND + m.idleStartRate=#{idleStartRate} AND + m.idleEndRate=#{idleEndRate} AND + m.rateType=#{rateType}) , + (SELECT b.maxPointRate FROM memrateinfo b WHERE + b.memId=#{memId} AND + b.gameType=#{gameType} AND + b.idleStartRate=#{idleStartRate} AND + b.idleEndRate=#{idleEndRate} AND + b.rateType=#{rateType}) , + #{pointRate} + ) + + ,useYn = #{useYn} + + + + INSERT INTO `site`(siteId, adminId, sitePrefix, upperSite, sitePass, siteType, siteName, ip, apiKey, memberRegYn) + VALUES (#{memId}, #{adminId}, #{sitePrefix}, #{recommenderId}, #{memPass}, #{partnerType}, #{memName}, '0.0.0.0', #{siteApikey}, 'Y') + + SELECT LAST_INSERT_ID(); + + + + + + + + + + + update memrateinfo + set + pointRate = #{pointRate} + + , loseRate = #{loseRate} + + + , useYn = #{useYn} + + + , betYn = #{betYn} + + where siteId = #{siteId} and memId = #{memId} and gameType = #{gameType} + + + + UPDATE member_tb mb LEFT JOIN memrateinfo mr + ON mb.siteId=mr.siteId AND mb.memId=mr.memId + SET mr.pointRate = #{pointRate}, mr.loseRate = #{loseRate} + WHERE 1=1 + AND mb.siteId = #{siteId} + AND mb.recommenderId = #{memId} + AND mb.partnerLevel = 'NORMAL' + AND mr.gameType = #{gameType} + + + + update memrateinfo set betYn = #{betYn} + where siteId =#{siteId} and memId =#{memId} and gameType = #{gameType} + + + + + + + + + + + + + + + + + + update member_tb + set outAmtYn = #{outAmtYn} + where siteId = #{siteId} and memId = #{memId} + + + + INSERT INTO member_tb + ( + memId, + siteIdx, + siteId, + memPass, + memName, + memNick, + memPhone, + memLevel, + partnerLevel, + partnerType, + nationCode, + partSendYn, + maxCredit, + creditStatus, + recommenderId, + adminId, + regId, + updId, + regIp, + redDt, + updDt, + memStatus, + memBlackYn, + lastIp, + memo, + bank, + bankAcc, + cashOutPass, + sportsLevel, + casinoLevel, + slotLevel, + mgLevel, + loginYn, + betYn, + recommendYn, + pointExchangeYn, + rollingYn, + cashSendYn, + cashReceiveYn, + memLockYn, + joinDomain + ) + VALUES + ( + #{memId}, + #{siteIdx}, + #{siteId}, + #{memPass}, + #{memName}, + #{memNick}, + #{memPhone}, + #{memLevel}, + #{partnerLevel}, + #{partnerType}, + #{nationCode}, + #{partSendYn}, + #{maxCredit}, + #{creditStatus}, + #{recommenderId}, + '', + #{regId}, + #{regId}, + '', + now(), + now(), + #{memStatus}, + #{memBlackYn}, + '', + #{memo}, + #{bank}, + #{bankAcc}, + #{cashOutPass}, + #{sportsLevel}, + #{casinoLevel}, + #{slotLevel}, + #{mgLevel}, + #{loginYn}, + #{betYn}, + #{recommendYn}, + #{pointExchangeYn}, + #{rollingYn}, + #{cashSendYn}, + #{cashReceiveYn}, + #{memLockYn}, + #{joinDomain} + ) + + + + INSERT INTO member_tb + ( + siteIdx, + siteId, + memId, + memPass, + memName, + memNick, + memPhone, + memLevel, + bank, + bankAcc, + cashOutPass, + partnerLevel, + recommenderId, + recommendYn, + loginYn, + betYn, + memLockYn, + memStatus, + casinoLevel, + slotLevel, + cashSendYn, + cashReceiveYn, + memo, + regId, + updId, + regIp, + redDt, + updDt, + joinDomain + ) + VALUES + ( + #{siteIdx}, + #{siteId}, + #{memId}, + #{memPass}, + #{memName}, + #{memNick}, + #{memPhone}, + #{memLevel}, + #{bank}, + #{bankAcc}, + #{cashOutPass}, + #{partnerLevel}, + #{recommenderId}, + #{recommendYn}, + #{loginYn}, + #{betYn}, + #{memLockYn}, + #{memStatus}, + #{casinoLevel}, + #{slotLevel}, + #{cashSendYn}, + #{cashReceiveYn}, + #{memo}, + #{regId}, + #{regId}, + '', + NOW(), + NOW(), + #{joinDomain} + ) + + + + INSERT INTO member_tb + ( + memId, + siteIdx, + siteId, + memPass, + memName, + memNick, + memPhone, + memLevel, + partnerLevel, + partnerType, + nationCode, + partSendYn, + insuredYn, + maxCredit, + creditRate, + creditStatus, + recommenderId, + adminId, + regId, + updId, + regIp, + redDt, + updDt, + memStatus, + memBlackYn, + lastIp, + memo, + bank, + bankAcc, + cashOutPass, + sportsLevel, + casinoLevel, + slotLevel, + mgLevel, + loginYn, + betYn, + recommendYn, + memLockYn + ) + VALUES + ( + #{memId}, + #{siteIdx}, + #{siteId}, + #{memPass}, + #{memName}, + #{memNick}, + #{memPhone}, + #{memLevel}, + #{partnerLevel}, + #{partnerType}, + #{nationCode}, + #{partSendYn}, + #{insuredYn}, + #{maxCredit}, + #{creditRate}, + #{creditStatus}, + #{recommenderId}, + '', + #{regId}, + #{regId}, + '', + now(), + now(), + #{memStatus}, + #{memBlackYn}, + '', + #{memo}, + #{bank}, + #{bankAcc}, + #{cashOutPass}, + #{sportsLevel}, + #{casinoLevel}, + #{slotLevel}, + #{mgLevel}, + #{loginYn}, + #{betYn}, + #{recommendYn}, + #{memLockYn} + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE member_tb + SET recommenderId = #{recommenderId} + WHERE siteId = #{siteId} AND memId = #{memId} + + + + DELETE FROM memberflow WHERE siteId = #{siteId} AND memId = #{memId} + + + + INSERT INTO `memberflow` + SELECT * FROM ( + SELECT siteId, 0 AS `order`, memId AS recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId} + UNION + SELECT siteId, 1 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId} AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 2 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 3 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId})) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 4 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 5 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId})))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 6 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 7 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId})))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 8 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}))))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 9 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId})))))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 10 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}))))))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 11 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId})))))))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 12 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}))))))))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 13 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId})))))))))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 14 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}))))))))))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + UNION + SELECT siteId, 15 AS `order`, recommenderId, #{memId} AS memId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId})))))))))))))) AND partnerLevel NOT IN ('COMP', 'AUTO') + ) f + WHERE f.recommenderId IS NOT NULL + + + + + + + + + + + UPDATE site_game_setting + SET compBetYn = #{useYn} + WHERE siteId = #{siteId} AND vendorCode = #{gameCode} + + + + + + update site set sitePass = #{newSitePass} where siteId = #{siteId} + + + update site_admin set adminPass = #{newSitePass} where siteId =#{siteId} and adminId = #{adminId} + + + update member_tb set memPass = #{newSitePass} where siteId = #{siteId} AND memId = #{siteId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO triple_auth_info + (siteId, memId, id, username, nickname) + VALUES + (#{siteId}, #{memId}, #{id}, #{username}, #{nickname}) + ON DUPLICATE KEY UPDATE + id = #{id} + + + + UPDATE mem_cash + SET cashAmt = #{cashAmt}, + cashAmtD = CAST(#{cashAmt} AS DECIMAL(20,2)) + , updDt = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + + + + UPDATE mem_cash + SET cashAmt = (cashAmt + #{cashAmt}), + cashAmtD = CAST(cashAmtD AS DECIMAL(20,2)) + CAST(#{cashAmt} AS DECIMAL(20,2)) + , updDt = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + UPDATE member_tb + SET + + memBlackYn = #{memBlackYn}, + + + memLockYn = #{memLockYn}, + + + loginYn = #{loginYn}, + + + loginYn = #{loginYn}, + + + memo = #{memo}, + + updDt = NOW() + WHERE siteId = #{siteId} AND memId = #{memId} + + + + UPDATE member_tb SET + memPass = #{memPass}, + updDt = NOW() + WHERE + siteId = #{siteId} AND memId = #{memId} + + + + + + + + + + + + + + + + INSERT INTO member_tb + (siteIdx, siteId, memId, partnerType, memPass, memName, memNick, memPhone, memLevel, partnerLevel, recommenderId, memStatus, recommendYn, cashOutPass, loginYn, betYn, pointExchangeYn, outAmtYn, rollingYn) + VALUES + (#{siteIdx}, #{siteId}, #{memId}, '', #{memPass}, #{memName}, #{memNick}, '', '0', 'AUTO', #{recommenderId}, '1', 'Y', '', 'N', 'N', 'N', 'N', 'N') + + + + + + + + UPDATE member_tb + SET gameUrlTimeout = #{gameUrlTimeout} + WHERE siteId = #{siteId} + AND memId = #{memId} + + + + + + + + + + UPDATE `member_tb` mb + SET + mb.blankSpinCasinoRate = #{blankSpinCasinoRate}, + mb.blankSpinSlotRate = #{blankSpinSlotRate} + WHERE 1=1 + AND mb.siteId = #{siteId} + AND ( + mb.memId = #{memId} + OR ( + mb.recommenderId = #{memId} + AND + mb.partnerLevel = 'NORMAL' + ) + ) + + + + UPDATE memberflow mf LEFT JOIN member_tb mb ON mf.siteId=mb.siteId AND mf.memId=mb.memId + SET mb.blankSpinCasinoRate = #{blankSpinCasinoRate}, + mb.blankSpinSlotRate = #{blankSpinSlotRate} + WHERE 1=1 + AND mf.siteId = #{siteId} + AND mf.recommenderId = #{memId} + + + + INSERT INTO adminheadinfo (siteId) + VALUES (#{siteId}) + + + + + + + + + + UPDATE member_tb + SET partnerLevel = #{afMyLevel}, + recommendYn = 'Y', + cashSendYn = 'Y', + cashReceiveYn = 'Y' + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + + + UPDATE member_tb + SET loginYn = 'N' + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + UPDATE member_charging_point_setting + SET fstChrgByJoinFlag = 1 + WHERE siteIdx = #{siteIdx} AND memIdx = #{memIdx} + + + + + + UPDATE mem_cash + SET changeFlag = #{changeFlag} + WHERE 1=1 + AND siteId = #{siteId} + AND memId = #{memId} + + + + UPDATE member_charging_point_setting mcp + SET mcp.updDate = NOW() + + , mcp.memLevel = #{memLevel} + + + , mcp.memLevelName = #{memLevelName} + + + , mcp.fstChrgByJoinRate = #{fstChrgByJoinRate} + + + , mcp.fstChrgByDailyRate = #{fstChrgByDailyRate} + + + , mcp.fstChrgByEveryTimeRate = #{fstChrgByEveryTimeRate} + + + , mcp.bonusLimit = #{bonusLimit} + + + , mcp.folderCountLimit = #{folderCountLimit} + + WHERE mcp.siteIdx = #{siteIdx} + AND mcp.memIdx = #{memIdx} + + + + + + + + UPDATE member_tb + SET symLock = #{symLock} + WHERE siteId = #{siteId} and memId = #{memId} + + + + UPDATE member_tb + SET betYn = 'N', + abuseLock = DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'), + abuseLockCnt = (abuseLockCnt+1) + WHERE siteId = #{siteId} AND memId = #{memId} + + + + UPDATE member_tb + SET betYn = 'Y', + + abuseLockCnt = 0, + + abuseLock = '' + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + + + + + + + UPDATE mem_multiple_rate mmr + SET mmr.pointRate = #{pointRate}, + mmr.loseRate = #{loseRate} + WHERE 1=1 + AND mmr.siteId = #{siteId} + AND mmr.memId = #{memId} + AND mmr.vendorCode = #{vendorCode} + AND mmr.rateType = #{rateType} + + + + UPDATE mem_multiple_rate mmr LEFT JOIN member_tb mb ON mmr.siteId=mb.siteId AND mmr.memId=mb.recommenderId + LEFT JOIN ( + SELECT + bmmr.siteId, + bmmr.vendorCode, + bmmr.rateType, + MAX(bmmr.pointRate) AS bMaxPointRate, + MAX(bmmr.loseRate) AS bMaxLoseRate + FROM mem_multiple_rate bmmr LEFT JOIN memberflow mf ON bmmr.siteId=mf.siteId AND bmmr.memId=mf.memId + WHERE 1=1 + AND mf.siteId = #{siteId} + AND mf.`order` = 1 + AND mf.recommenderId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}) + AND bmmr.vendorCode = #{vendorCode} + AND bmmr.rateType = #{rateType} + GROUP BY bmmr.siteId, bmmr.vendorCode, bmmr.rateType + ) botMr ON mmr.siteId=botMr.siteId AND mmr.vendorCode=botMr.vendorCode AND mmr.rateType=botMr.rateType + SET mmr.minPointRate = IF( CAST(#{pointRate} AS DECIMAL(4,2)) > CAST(botMr.bMaxPointRate AS DECIMAL(4,2)), #{pointRate}, botMr.bMaxPointRate ), + mmr.minLoseRate = IF( CAST(#{loseRate} AS DECIMAL(4,2)) > CAST(botMr.bMaxLoseRate AS DECIMAL(4,2)), #{loseRate}, botMr.bMaxLoseRate ) + WHERE 1=1 + AND mb.siteId = #{siteId} + AND mb.memId = #{memId} + AND mmr.vendorCode = #{vendorCode} + AND mmr.rateType = #{rateType} + + + + UPDATE mem_multiple_rate mmr LEFT JOIN member_tb mb ON mmr.siteId=mb.siteId AND mmr.memId=mb.memId + SET mmr.maxPointRate = #{pointRate}, + mmr.maxLoseRate = #{loseRate} + WHERE 1=1 + AND mb.siteId = #{siteId} + AND mb.recommenderId = #{memId} + AND mmr.vendorCode = #{vendorCode} + AND mmr.rateType = #{rateType} + + + + + + + + UPDATE memrateinfo mr LEFT JOIN code c ON c.masterCode='kplay' AND c.code=mr.gameType + SET mr.pointRate = #{pointRate}, + mr.loseRate = #{loseRate} + WHERE 1=1 + AND mr.siteId = #{siteId} + AND mr.memId = #{memId} + + AND c.groupCode = #{gameCategory} + + + AND c.groupCodeNameEN = #{gameCategoryEn} + + + AND mr.gameType = #{vendorCode} + + + + + UPDATE memrateinfo mr LEFT JOIN member_tb mb ON mr.siteId=mb.siteId AND mr.memId=mb.recommenderId + LEFT JOIN code c ON c.masterCode='kplay' AND c.code=mr.gameType + LEFT JOIN ( + SELECT + bmr.siteId, + bmr.memId, + cc.groupCode, + cc.groupCodeNameEN, + bmr.gameType, + MAX(bmr.pointRate) AS bMaxPointRate, + MAX(bmr.loseRate) AS bMaxLoseRate + FROM memrateinfo bmr LEFT JOIN memberflow mf ON bmr.siteId=mf.siteId AND bmr.memId=mf.memId + LEFT JOIN code cc ON cc.masterCode='kplay' AND cc.code=bmr.gameType + WHERE 1=1 + AND mf.siteId = #{siteId} + AND mf.`order` = 1 + AND mf.recommenderId = (SELECT recommenderId FROM member_tb WHERE siteId = #{siteId} AND memId = #{memId}) + + AND cc.groupCode = #{gameCategory} + + + AND cc.groupCodeNameEN = #{gameCategoryEn} + + + AND bmr.gameType = #{vendorCode} + + GROUP BY bmr.siteId, cc.groupCode, cc.groupCodeNameEN + ) botMr ON mr.siteId=botMr.siteId + SET mr.minPointRate = IF( CAST(#{pointRate} AS DECIMAL(4,2)) > CAST(botMr.bMaxPointRate AS DECIMAL(4,2)), #{pointRate}, botMr.bMaxPointRate ), + mr.minLoseRate = IF( CAST(#{loseRate} AS DECIMAL(4,2)) > CAST(botMr.bMaxLoseRate AS DECIMAL(4,2)), #{loseRate}, botMr.bMaxLoseRate ) + WHERE 1=1 + AND mb.siteId = #{siteId} + AND mb.memId = #{memId} + + AND c.groupCode = #{gameCategory} + + + AND c.groupCodeNameEN = #{gameCategoryEn} + + + AND mr.gameType = #{vendorCode} + + + + + UPDATE memrateinfo mr LEFT JOIN member_tb mb ON mr.siteId=mb.siteId AND mr.memId=mb.memId + LEFT JOIN code c ON c.masterCode='kplay' AND c.code=mr.gameType + SET mr.maxPointRate = #{pointRate}, + mr.maxLoseRate = #{loseRate} + WHERE 1=1 + AND mb.siteId = #{siteId} + AND mb.recommenderId = #{memId} + + AND c.groupCode = #{gameCategory} + + + AND c.groupCodeNameEN = #{gameCategoryEn} + + + AND mr.gameType = #{vendorCode} + + + + + UPDATE mem_cash + SET cashOutFlag = #{cashOutFlag} + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + + + UPDATE member_tb + SET loginFailCnt = #{loginFailCnt} + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + + + + + + + + + UPDATE member_tb + SET updDt = NOW() + + , cashSendYn = #{setYn} + + + , cashReceiveYn = #{setYn} + + WHERE 1=1 + AND siteId = #{siteId} + AND memId = #{memId} + + + + + + + + + + + + + + + DELETE a FROM betinfomap a + LEFT JOIN betinfo b ON a.betIdx=b.betIdx + WHERE b.siteId = #{siteId} + + AND b.memId IN + + #{item} + + + ; + + DELETE a FROM old_betinfomap a + LEFT JOIN old_betinfo b ON a.betIdx=b.betIdx + WHERE b.siteId = #{siteId} + + AND b.memId IN + + #{item} + + + ; + + DELETE a FROM bet_splus_info a + LEFT JOIN betinfo b ON a.betIdx=b.betIdx + WHERE b.siteId = #{siteId} + + AND b.memId IN + + #{item} + + + ; + + DELETE a FROM betinfo a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM old_betinfo a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM new_bet_info a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM old_new_bet_info a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM bet_mem_play_status a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM board_info a + WHERE a.siteId = #{siteId} + + AND a.regId IN + + #{item} + + + ; + + DELETE a FROM cash_info a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM old_cash_info a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM memberflow a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM member_charging_point_setting a + LEFT JOIN member_tb mb ON a.siteIdx=mb.siteIdx AND a.memIdx=mb.memIdx + WHERE mb.siteId = #{siteId} + + AND mb.memId IN + + #{item} + + + ; + + DELETE a FROM memrateinfo a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM mem_cash a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM mem_log a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM mem_multiple_rate a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM mem_point a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM msginfo a + WHERE a.siteId = #{siteId} + + AND a.recieveId IN + + #{item} + + + ; + + DELETE a FROM msginfo_read_status a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM mem_pre_point a + LEFT JOIN point_info b ON a.pointIdx=b.pointIdx + WHERE b.siteId = #{siteId} + + AND b.memId IN + + #{item} + + + ; + + DELETE a FROM old_mem_pre_point a + LEFT JOIN old_point_info b ON a.pointIdx=b.pointIdx + WHERE b.siteId = #{siteId} + + AND b.memId IN + + #{item} + + + ; + + DELETE a FROM point_info a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM old_point_info a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM cash_bonus_rel_log a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM slot_tran_info a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM triple_tran_info a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM daily_periodic_reports a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM old_daily_periodic_reports a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE a FROM mem_action_log a + WHERE a.siteId = #{siteId} + + AND a.memId IN + + #{item} + + + ; + + DELETE FROM member_tb + WHERE siteId = #{siteId} + + AND memId IN + + #{item} + + + ; + + + + UPDATE adminheadinfo a + SET a.memCnt = (SELECT COUNT(memIdx) FROM member_tb WHERE siteId=#{siteId} AND partnerLevel NOT IN ('COMP', 'AUTO')) + WHERE a.siteId = #{siteId} + + + + UPDATE member_tb + SET memPhone = #{memPhone} + WHERE siteId = #{siteId} AND memId = #{memId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO rvholdem_auth_info + (siteId, memId, userId, uid, nickname) + VALUES + (#{siteId}, #{memId}, #{userId}, #{uid}, #{nickname}) + ON DUPLICATE KEY UPDATE + userId = #{userId}, + updDate = NOW(); + + + + + \ No newline at end of file diff --git a/src/main/resources/db2/COMP.xml b/src/main/resources/db2/COMP.xml new file mode 100644 index 0000000..a1f2254 --- /dev/null +++ b/src/main/resources/db2/COMP.xml @@ -0,0 +1,128 @@ + + + + + + + + UPDATE site_credit_info a LEFT JOIN site_info b ON a.siteId=b.siteId + SET a.credit = a.credit + #{creditAmt} + WHERE 1=1 + AND b.siteId = #{tripleSiteId} + AND b.siteKey = #{tripleSiteKey} + + + + + + + + + + INSERT INTO credit_info ( + siteIdx, + siteId, + targetSiteIdx, + targetSiteId, + creditType, + `inOut`, + creditAmt, + preCreditAmt, + creditStatus, + regDate, + updDate, + pointAmt + ) + + VALUES ( + #{siteIdx}, + #{siteId}, + #{targetSiteIdx}, + #{targetSiteId}, + #{creditType}, + #{inOut}, + #{creditAmt}, + #{preCreditAmt}, + #{creditStatus}, + NOW(), + NOW(), + #{pointAmt} + ) + + + SELECT LAST_INSERT_ID(); + + + + + + INSERT INTO credit_info_aiao ( + creditIdx, + siteIdx, + siteId, + targetSiteIdx, + targetSiteId, + creditType, + preCreditAmt, + creditAmt, + regDate + ) + + VALUES ( + #{creditIdx}, + #{siteIdx}, + #{siteId}, + #{targetSiteIdx}, + #{targetSiteId}, + #{creditType}, + #{preCreditAmt}, + #{creditAmt}, + NOW() + ) + + + \ No newline at end of file diff --git a/src/main/resources/db2/PARSE_DB2.xml b/src/main/resources/db2/PARSE_DB2.xml new file mode 100644 index 0000000..8d0030c --- /dev/null +++ b/src/main/resources/db2/PARSE_DB2.xml @@ -0,0 +1,36 @@ + + + + + + + + + + INSERT INTO `powerresult` + SELECT #{seq} AS gameSeq, + #{round} AS gameRound, + (SELECT CONCAT( #{gameDate}, ' ' , (SELECT gameTime FROM `minigametimeinfo` WHERE game='powerball' AND gameRound =#{round}))), + + #{pb} AS powerball, + '' AS powerArea, + IF( MOD(#{pb}, '2') = 0, 'even', 'odd') AS powerOE, + IF( #{pb} > '4.5', 'over', 'under') AS powerUO, + CONCAT( LPAD(#{num1}, 2, '0'), ',' , LPAD(#{num2}, 2, '0'), ',' , LPAD(#{num3}, 2, '0'), ',' , LPAD(#{num4}, 2, '0'), ',' , LPAD(#{num5}, 2, '0') ) AS results, + (0+ ${num1}+${num2}+${num3}+${num4}+${num5}+ 0) AS resultSum, + '' AS resultArea, + '' AS resultSize, + IF( MOD((0+ ${num1}+${num2}+${num3}+${num4}+${num5}+ 0) , '2') = 0, 'even', 'odd') AS resultOE, + IF( (0+ ${num1}+${num2}+${num3}+${num4}+${num5}+ 0) > '72.5', 'over', 'under') AS resultUO, + NOW(), NOW() + + FROM DUAL + ON DUPLICATE KEY UPDATE updDate = now() + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db2/VENDOR.xml b/src/main/resources/db2/VENDOR.xml new file mode 100644 index 0000000..4b81dc0 --- /dev/null +++ b/src/main/resources/db2/VENDOR.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + UPDATE site_vendors_map + SET nexusSkinType = #{nexusSkinType} + WHERE 1=1 + AND siteIdx = #{siteIdx} + AND vendorIdx = #{vendorIdx} + + + + UPDATE site_credit_info + SET credit = CAST(#{credit} AS SIGNED) + WHERE siteId = #{siteId} + + + + UPDATE site_point_info + SET point = CAST(#{point} AS SIGNED) + WHERE siteId = #{siteId} + + + \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..00eff14 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,49 @@ + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + ${filePath}/app.log + + ${filePath}/app.%d{yyyy-MM-dd}.%i.gz + + 1GB + + 10 + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + ${filePath}/error.log + + ERROR + ACCEPT + DENY + + + ${filePath}/error-%d{yyyy-MM-dd}.%i.gz + + 100MB + + 30 + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/html/health.html b/src/main/resources/static/html/health.html new file mode 100644 index 0000000..080655f --- /dev/null +++ b/src/main/resources/static/html/health.html @@ -0,0 +1 @@ +alive \ No newline at end of file diff --git a/src/main/resources/static/html/jquery-2.2.4.min.js b/src/main/resources/static/html/jquery-2.2.4.min.js new file mode 100644 index 0000000..4024b66 --- /dev/null +++ b/src/main/resources/static/html/jquery-2.2.4.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; +}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("