지대한
1 year ago
commit
0a212301a4
303 changed files with 42509 additions and 0 deletions
@ -0,0 +1,37 @@ |
|||||||
|
HELP.md |
||||||
|
.gradle |
||||||
|
build/ |
||||||
|
!gradle/wrapper/gradle-wrapper.jar |
||||||
|
!**/src/main/**/build/ |
||||||
|
!**/src/test/**/build/ |
||||||
|
|
||||||
|
### STS ### |
||||||
|
.apt_generated |
||||||
|
.classpath |
||||||
|
.factorypath |
||||||
|
.project |
||||||
|
.settings |
||||||
|
.springBeans |
||||||
|
.sts4-cache |
||||||
|
bin/ |
||||||
|
!**/src/main/**/bin/ |
||||||
|
!**/src/test/**/bin/ |
||||||
|
|
||||||
|
### IntelliJ IDEA ### |
||||||
|
.idea |
||||||
|
*.iws |
||||||
|
*.iml |
||||||
|
*.ipr |
||||||
|
out/ |
||||||
|
!**/src/main/**/out/ |
||||||
|
!**/src/test/**/out/ |
||||||
|
|
||||||
|
### NetBeans ### |
||||||
|
/nbproject/private/ |
||||||
|
/nbbuild/ |
||||||
|
/dist/ |
||||||
|
/nbdist/ |
||||||
|
/.nb-gradle/ |
||||||
|
|
||||||
|
### VS Code ### |
||||||
|
.vscode/ |
Binary file not shown.
@ -0,0 +1,7 @@ |
|||||||
|
distributionBase=GRADLE_USER_HOME |
||||||
|
distributionPath=wrapper/dists |
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip |
||||||
|
networkTimeout=10000 |
||||||
|
validateDistributionUrl=true |
||||||
|
zipStoreBase=GRADLE_USER_HOME |
||||||
|
zipStorePath=wrapper/dists |
@ -0,0 +1,248 @@ |
|||||||
|
#!/bin/sh |
||||||
|
|
||||||
|
# |
||||||
|
# Copyright © 2015-2021 the original 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. |
||||||
|
# |
||||||
|
|
||||||
|
############################################################################## |
||||||
|
# |
||||||
|
# Gradle start up script for POSIX generated by Gradle. |
||||||
|
# |
||||||
|
# Important for running: |
||||||
|
# |
||||||
|
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is |
||||||
|
# noncompliant, but you have some other compliant shell such as ksh or |
||||||
|
# bash, then to run this script, type that shell name before the whole |
||||||
|
# command line, like: |
||||||
|
# |
||||||
|
# ksh Gradle |
||||||
|
# |
||||||
|
# Busybox and similar reduced shells will NOT work, because this script |
||||||
|
# requires all of these POSIX shell features: |
||||||
|
# * functions; |
||||||
|
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», |
||||||
|
# «${var#prefix}», «${var%suffix}», and «$( cmd )»; |
||||||
|
# * compound commands having a testable exit status, especially «case»; |
||||||
|
# * various built-in commands including «command», «set», and «ulimit». |
||||||
|
# |
||||||
|
# Important for patching: |
||||||
|
# |
||||||
|
# (2) This script targets any POSIX shell, so it avoids extensions provided |
||||||
|
# by Bash, Ksh, etc; in particular arrays are avoided. |
||||||
|
# |
||||||
|
# The "traditional" practice of packing multiple parameters into a |
||||||
|
# space-separated string is a well documented source of bugs and security |
||||||
|
# problems, so this is (mostly) avoided, by progressively accumulating |
||||||
|
# options in "$@", and eventually passing that to Java. |
||||||
|
# |
||||||
|
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, |
||||||
|
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; |
||||||
|
# see the in-line comments for details. |
||||||
|
# |
||||||
|
# There are tweaks for specific operating systems such as AIX, CygWin, |
||||||
|
# Darwin, MinGW, and NonStop. |
||||||
|
# |
||||||
|
# (3) This script is generated from the Groovy template |
||||||
|
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt |
||||||
|
# within the Gradle project. |
||||||
|
# |
||||||
|
# You can find Gradle at https://github.com/gradle/gradle/. |
||||||
|
# |
||||||
|
############################################################################## |
||||||
|
|
||||||
|
# Attempt to set APP_HOME |
||||||
|
|
||||||
|
# Resolve links: $0 may be a link |
||||||
|
app_path=$0 |
||||||
|
|
||||||
|
# Need this for daisy-chained symlinks. |
||||||
|
while |
||||||
|
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path |
||||||
|
[ -h "$app_path" ] |
||||||
|
do |
||||||
|
ls=$( ls -ld "$app_path" ) |
||||||
|
link=${ls#*' -> '} |
||||||
|
case $link in #( |
||||||
|
/*) app_path=$link ;; #( |
||||||
|
*) app_path=$APP_HOME$link ;; |
||||||
|
esac |
||||||
|
done |
||||||
|
|
||||||
|
# This is normally unused |
||||||
|
# shellcheck disable=SC2034 |
||||||
|
APP_BASE_NAME=${0##*/} |
||||||
|
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit |
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value. |
||||||
|
MAX_FD=maximum |
||||||
|
|
||||||
|
warn () { |
||||||
|
echo "$*" |
||||||
|
} >&2 |
||||||
|
|
||||||
|
die () { |
||||||
|
echo |
||||||
|
echo "$*" |
||||||
|
echo |
||||||
|
exit 1 |
||||||
|
} >&2 |
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false'). |
||||||
|
cygwin=false |
||||||
|
msys=false |
||||||
|
darwin=false |
||||||
|
nonstop=false |
||||||
|
case "$( uname )" in #( |
||||||
|
CYGWIN* ) cygwin=true ;; #( |
||||||
|
Darwin* ) darwin=true ;; #( |
||||||
|
MSYS* | MINGW* ) msys=true ;; #( |
||||||
|
NONSTOP* ) nonstop=true ;; |
||||||
|
esac |
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar |
||||||
|
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM. |
||||||
|
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 |
||||||
|
if [ ! -x "$JAVACMD" ] ; then |
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME |
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the |
||||||
|
location of your Java installation." |
||||||
|
fi |
||||||
|
else |
||||||
|
JAVACMD=java |
||||||
|
if ! command -v java >/dev/null 2>&1 |
||||||
|
then |
||||||
|
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the |
||||||
|
location of your Java installation." |
||||||
|
fi |
||||||
|
fi |
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can. |
||||||
|
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then |
||||||
|
case $MAX_FD in #( |
||||||
|
max*) |
||||||
|
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. |
||||||
|
# shellcheck disable=SC3045 |
||||||
|
MAX_FD=$( ulimit -H -n ) || |
||||||
|
warn "Could not query maximum file descriptor limit" |
||||||
|
esac |
||||||
|
case $MAX_FD in #( |
||||||
|
'' | soft) :;; #( |
||||||
|
*) |
||||||
|
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. |
||||||
|
# shellcheck disable=SC3045 |
||||||
|
ulimit -n "$MAX_FD" || |
||||||
|
warn "Could not set maximum file descriptor limit to $MAX_FD" |
||||||
|
esac |
||||||
|
fi |
||||||
|
|
||||||
|
# Collect all arguments for the java command, stacking in reverse order: |
||||||
|
# * args from the command line |
||||||
|
# * the main class name |
||||||
|
# * -classpath |
||||||
|
# * -D...appname settings |
||||||
|
# * --module-path (only if needed) |
||||||
|
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. |
||||||
|
|
||||||
|
# For Cygwin or MSYS, switch paths to Windows format before running java |
||||||
|
if "$cygwin" || "$msys" ; then |
||||||
|
APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) |
||||||
|
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) |
||||||
|
|
||||||
|
JAVACMD=$( cygpath --unix "$JAVACMD" ) |
||||||
|
|
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh |
||||||
|
for arg do |
||||||
|
if |
||||||
|
case $arg in #( |
||||||
|
-*) false ;; # don't mess with options #( |
||||||
|
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath |
||||||
|
[ -e "$t" ] ;; #( |
||||||
|
*) false ;; |
||||||
|
esac |
||||||
|
then |
||||||
|
arg=$( cygpath --path --ignore --mixed "$arg" ) |
||||||
|
fi |
||||||
|
# Roll the args list around exactly as many times as the number of |
||||||
|
# args, so each arg winds up back in the position where it started, but |
||||||
|
# possibly modified. |
||||||
|
# |
||||||
|
# NB: a `for` loop captures its iteration list before it begins, so |
||||||
|
# changing the positional parameters here affects neither the number of |
||||||
|
# iterations, nor the values presented in `arg`. |
||||||
|
shift # remove old arg |
||||||
|
set -- "$@" "$arg" # push replacement arg |
||||||
|
done |
||||||
|
fi |
||||||
|
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
||||||
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' |
||||||
|
|
||||||
|
# Collect all arguments for the java command; |
||||||
|
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of |
||||||
|
# shell script including quotes and variable substitutions, so put them in |
||||||
|
# double quotes to make sure that they get re-expanded; and |
||||||
|
# * put everything else in single quotes, so that it's not re-expanded. |
||||||
|
|
||||||
|
set -- \ |
||||||
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \ |
||||||
|
-classpath "$CLASSPATH" \ |
||||||
|
org.gradle.wrapper.GradleWrapperMain \ |
||||||
|
"$@" |
||||||
|
|
||||||
|
# Stop when "xargs" is not available. |
||||||
|
if ! command -v xargs >/dev/null 2>&1 |
||||||
|
then |
||||||
|
die "xargs is not available" |
||||||
|
fi |
||||||
|
|
||||||
|
# Use "xargs" to parse quoted args. |
||||||
|
# |
||||||
|
# With -n1 it outputs one arg per line, with the quotes and backslashes removed. |
||||||
|
# |
||||||
|
# In Bash we could simply go: |
||||||
|
# |
||||||
|
# readarray ARGS < <( xargs -n1 <<<"$var" ) && |
||||||
|
# set -- "${ARGS[@]}" "$@" |
||||||
|
# |
||||||
|
# but POSIX shell has neither arrays nor command substitution, so instead we |
||||||
|
# post-process each arg (as a line of input to sed) to backslash-escape any |
||||||
|
# character that might be a shell metacharacter, then use eval to reverse |
||||||
|
# that process (while maintaining the separation between arguments), and wrap |
||||||
|
# the whole thing up as a single "set" statement. |
||||||
|
# |
||||||
|
# This will of course break if any of these variables contains a newline or |
||||||
|
# an unmatched quote. |
||||||
|
# |
||||||
|
|
||||||
|
eval "set -- $( |
||||||
|
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | |
||||||
|
xargs -n1 | |
||||||
|
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | |
||||||
|
tr '\n' ' ' |
||||||
|
)" '"$@"' |
||||||
|
|
||||||
|
exec "$JAVACMD" "$@" |
@ -0,0 +1,92 @@ |
|||||||
|
@rem |
||||||
|
@rem Copyright 2015 the original author or authors. |
||||||
|
@rem |
||||||
|
@rem Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
@rem you may not use this file except in compliance with the License. |
||||||
|
@rem 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, software |
||||||
|
@rem distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
@rem See the License for the specific language governing permissions and |
||||||
|
@rem limitations under the License. |
||||||
|
@rem |
||||||
|
|
||||||
|
@if "%DEBUG%"=="" @echo off |
||||||
|
@rem ########################################################################## |
||||||
|
@rem |
||||||
|
@rem Gradle startup script for Windows |
||||||
|
@rem |
||||||
|
@rem ########################################################################## |
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell |
||||||
|
if "%OS%"=="Windows_NT" setlocal |
||||||
|
|
||||||
|
set DIRNAME=%~dp0 |
||||||
|
if "%DIRNAME%"=="" set DIRNAME=. |
||||||
|
@rem This is normally unused |
||||||
|
set APP_BASE_NAME=%~n0 |
||||||
|
set APP_HOME=%DIRNAME% |
||||||
|
|
||||||
|
@rem Resolve any "." and ".." in APP_HOME to make it shorter. |
||||||
|
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi |
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
||||||
|
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" |
||||||
|
|
||||||
|
@rem Find java.exe |
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome |
||||||
|
|
||||||
|
set JAVA_EXE=java.exe |
||||||
|
%JAVA_EXE% -version >NUL 2>&1 |
||||||
|
if %ERRORLEVEL% equ 0 goto execute |
||||||
|
|
||||||
|
echo. |
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
||||||
|
echo. |
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the |
||||||
|
echo location of your Java installation. |
||||||
|
|
||||||
|
goto fail |
||||||
|
|
||||||
|
:findJavaFromJavaHome |
||||||
|
set JAVA_HOME=%JAVA_HOME:"=% |
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe |
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto execute |
||||||
|
|
||||||
|
echo. |
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% |
||||||
|
echo. |
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the |
||||||
|
echo location of your Java installation. |
||||||
|
|
||||||
|
goto fail |
||||||
|
|
||||||
|
:execute |
||||||
|
@rem Setup the command line |
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar |
||||||
|
|
||||||
|
|
||||||
|
@rem Execute Gradle |
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* |
||||||
|
|
||||||
|
:end |
||||||
|
@rem End local scope for the variables with windows NT shell |
||||||
|
if %ERRORLEVEL% equ 0 goto mainEnd |
||||||
|
|
||||||
|
:fail |
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of |
||||||
|
rem the _cmd.exe /c_ return code! |
||||||
|
set EXIT_CODE=%ERRORLEVEL% |
||||||
|
if %EXIT_CODE% equ 0 set EXIT_CODE=1 |
||||||
|
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% |
||||||
|
exit /b %EXIT_CODE% |
||||||
|
|
||||||
|
:mainEnd |
||||||
|
if "%OS%"=="Windows_NT" endlocal |
||||||
|
|
||||||
|
:omega |
@ -0,0 +1,95 @@ |
|||||||
|
plugins { |
||||||
|
id 'java' |
||||||
|
id 'org.springframework.boot' version '2.5.1' |
||||||
|
id 'io.spring.dependency-management' version '1.0.15.RELEASE' |
||||||
|
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' |
||||||
|
} |
||||||
|
|
||||||
|
group = 'com.palnet' |
||||||
|
version = '0.0.1-SNAPSHOT' |
||||||
|
|
||||||
|
java { |
||||||
|
sourceCompatibility = '11' |
||||||
|
} |
||||||
|
|
||||||
|
compileJava { |
||||||
|
options.compilerArgs += [ |
||||||
|
'-Amapstruct.unmappedTargetPolicy=IGNORE', |
||||||
|
'-Amapstruct.unmappedSourcePolicy=IGNORE' |
||||||
|
] |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
repositories { |
||||||
|
mavenCentral() |
||||||
|
} |
||||||
|
|
||||||
|
dependencies { |
||||||
|
// spring |
||||||
|
implementation 'org.springframework.boot:spring-boot-starter' |
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-web' |
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-security' |
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-cache' |
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' |
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-jdbc' |
||||||
|
// db |
||||||
|
runtimeOnly 'mysql:mysql-connector-java' |
||||||
|
|
||||||
|
// log |
||||||
|
implementation 'ch.qos.logback:logback-classic' |
||||||
|
// aws |
||||||
|
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.0.1.RELEASE' |
||||||
|
implementation 'org.springframework.cloud:spring-cloud-aws-context:1.2.1.RELEASE' |
||||||
|
implementation 'org.springframework.cloud:spring-cloud-aws-autoconfigure:2.0.1.RELEASE' |
||||||
|
|
||||||
|
// lombok, mapstruct |
||||||
|
implementation 'org.mapstruct:mapstruct:1.5.5.Final' |
||||||
|
implementation 'org.projectlombok:lombok:1.18.28' |
||||||
|
|
||||||
|
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' |
||||||
|
annotationProcessor 'org.projectlombok:lombok:1.18.28' |
||||||
|
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0' |
||||||
|
|
||||||
|
// querydsl - jpa |
||||||
|
implementation 'com.querydsl:querydsl-core:5.0.0' |
||||||
|
implementation 'com.querydsl:querydsl-jpa:5.0.0' |
||||||
|
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0' |
||||||
|
|
||||||
|
// other |
||||||
|
implementation 'io.jsonwebtoken:jjwt:0.9.1' |
||||||
|
implementation 'io.netty:netty-all:4.1.9.Final' |
||||||
|
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16' |
||||||
|
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr353' |
||||||
|
implementation 'org.apache.httpcomponents:httpclient' |
||||||
|
implementation 'org.apache.commons:commons-lang3' |
||||||
|
implementation 'commons-httpclient:commons-httpclient:3.1' |
||||||
|
implementation 'com.googlecode.json-simple:json-simple:1.1.1' |
||||||
|
implementation 'io.springfox:springfox-boot-starter:3.0.0' |
||||||
|
implementation 'com.esri.geometry:esri-geometry-api:2.2.4' |
||||||
|
implementation 'org.locationtech.proj4j:proj4j:1.1.5' |
||||||
|
implementation 'org.locationtech.jts:jts-core:1.18.0' |
||||||
|
implementation 'org.json:json:20220320' |
||||||
|
|
||||||
|
testImplementation 'org.springframework.boot:spring-boot-starter-test' |
||||||
|
testAnnotationProcessor "org.mapstruct:mapstruct-processor:1.5.5.Final" |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
tasks.named('test') { |
||||||
|
useJUnitPlatform() |
||||||
|
} |
||||||
|
|
||||||
|
def querydslDir = "$buildDir/generated/querydsl" |
||||||
|
querydsl { |
||||||
|
jpa = true |
||||||
|
querydslSourcesDir = querydslDir |
||||||
|
} |
||||||
|
sourceSets { |
||||||
|
main.java.srcDir querydslDir |
||||||
|
} |
||||||
|
configurations { |
||||||
|
querydsl.extendsFrom compileClasspath |
||||||
|
} |
||||||
|
compileQuerydsl { |
||||||
|
options.annotationProcessorPath = configurations.querydsl |
||||||
|
} |
Binary file not shown.
@ -0,0 +1,19 @@ |
|||||||
|
package com.palnet; |
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication; |
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||||
|
import org.springframework.cache.annotation.EnableCaching; |
||||||
|
import org.springframework.scheduling.annotation.EnableAsync; |
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling; |
||||||
|
|
||||||
|
@SpringBootApplication |
||||||
|
@EnableScheduling |
||||||
|
@EnableAsync |
||||||
|
@EnableCaching |
||||||
|
public class PavApplication { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
SpringApplication.run(PavApplication.class, args); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,254 @@ |
|||||||
|
package com.palnet.biz.api.acnt.crtfyhp.controller; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiImplicitParams; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.Parameter; |
||||||
|
import io.swagger.v3.oas.annotations.Parameters; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.crtfyhp.model.AcntCrtfyhpRsModel; |
||||||
|
import com.palnet.biz.api.acnt.crtfyhp.service.AcntCrtfyhpService; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository; |
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
import com.palnet.comn.utils.EncryptUtils; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/acnt/crtfyhp", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "휴대폰 인증 관리", description = "회원 휴대폰 인증 관련 API") |
||||||
|
public class AcntCrtfyhpController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final AcntCrtfyhpService service; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrQueryRepository ptyCstmrQueryRepository; |
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(value = "/register/send") |
||||||
|
@Tag(name = "휴대폰 인증 관리", description = "회원 휴대폰 인증 관련 API") |
||||||
|
@ApiImplicitParam(name = "hnpo",value = "휴대폰번호", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> send(String hpno) { |
||||||
|
|
||||||
|
|
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
|
||||||
|
if(hpno == null) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
//회원정보에 동일한 휴대폰 번호가 있는지 확인 , 암호화 해서 검색
|
||||||
|
String encHpno = EncryptUtils.encrypt(hpno); |
||||||
|
boolean isHpno = ptyCstmrQueryRepository.findCstmrByHpno(encHpno); |
||||||
|
|
||||||
|
if(isHpno) { |
||||||
|
resultMap.put("result" , false); |
||||||
|
resultMap.put("code" , -1); // 동일한 휴대폰 번호 존재
|
||||||
|
|
||||||
|
|
||||||
|
}else { |
||||||
|
boolean result = service.registerSend(hpno); |
||||||
|
resultMap.put("result" , result); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(value = "/register/confirm") |
||||||
|
@Tag(name = "휴대폰 인증 관리", description = "회원 휴대폰 인증 관련 API") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "hpno",value = "휴대폰번호", dataTypeClass = String.class), |
||||||
|
@ApiImplicitParam(name = "crtfyNo",value = "인증일련번호", dataTypeClass = String.class) |
||||||
|
}) |
||||||
|
public ResponseEntity<? extends BasicResponse> confirm(String hpno , String crtfyNo) { |
||||||
|
|
||||||
|
|
||||||
|
Map<String , Boolean> resultMap = new HashMap<String,Boolean>(); |
||||||
|
|
||||||
|
if(hpno == null || crtfyNo == null) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
try { |
||||||
|
|
||||||
|
boolean result = service.registerConfirm(hpno, crtfyNo); |
||||||
|
resultMap.put("result" , result); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
//아이디 찾기 시 인증번호 발송 로직
|
||||||
|
@GetMapping(value = "/find/sendForId") |
||||||
|
@ApiOperation(value = "아이디 찾기 시 인증번호 발송") |
||||||
|
@Tag(name = "휴대폰 인증 관리", description = "회원 휴대폰 인증 관련 API") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "memberName", value = "회원 이름", dataTypeClass = String.class), |
||||||
|
@ApiImplicitParam(name = "hpno", value = "휴대폰 번호", dataTypeClass = String.class) |
||||||
|
}) |
||||||
|
public ResponseEntity<? extends BasicResponse> sendForId(String memberName, String hpno) { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
|
||||||
|
if(memberName == null || hpno == null) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.certifNum(memberName, hpno); |
||||||
|
resultMap.put("result" , result); |
||||||
|
if(!result) { |
||||||
|
resultMap.put("code", -1); //일치하는 회원 없음
|
||||||
|
} else { |
||||||
|
resultMap.put("code", 0); //일치하는 회원 존재
|
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
//아이디 찾기
|
||||||
|
@GetMapping(value = "/find/findUserId") |
||||||
|
@ApiOperation(value = "회원 아이디 찾기") |
||||||
|
@Tag(name = "휴대폰 인증 관리", description = "회원 휴대폰 인증 관련 API") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "memberName",value = "회원이름", dataTypeClass = String.class), |
||||||
|
@ApiImplicitParam(name = "hpno",value = "휴대폰번호", dataTypeClass = String.class) |
||||||
|
}) |
||||||
|
public ResponseEntity<? extends BasicResponse> findUserId(String memberName, String hpno) { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
|
||||||
|
if(memberName == null || hpno == null) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
String userId = service.findUserId(memberName, hpno); |
||||||
|
if(!userId.equals("")) { |
||||||
|
resultMap.put("userId", userId); |
||||||
|
resultMap.put("code", 0); |
||||||
|
} else { |
||||||
|
resultMap.put("userId", ""); |
||||||
|
resultMap.put("code", -1); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body( new SuccessResponse<Map>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
//비밀번호 찾기 시 인증번호 발송 로직
|
||||||
|
@GetMapping(value = "/find/sendForPw") |
||||||
|
@ApiOperation(value = "비밀번호 찾기 시 인증번호 발송") |
||||||
|
@Tag(name = "휴대폰 인증 관리", description = "회원 휴대폰 인증 관련 API") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "userId",value = "사용자ID", dataTypeClass = String.class), |
||||||
|
@ApiImplicitParam(name = "hpno",value = "휴대폰번호", dataTypeClass = String.class) |
||||||
|
}) |
||||||
|
public ResponseEntity<? extends BasicResponse> sendForPw(String userId, String hpno) { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
|
||||||
|
if(userId == null || hpno == null) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.certifPw(userId, hpno); |
||||||
|
resultMap.put("result", result); |
||||||
|
if(!result) { |
||||||
|
resultMap.put("code", -1); //일치하는 회원 없음
|
||||||
|
} else { |
||||||
|
resultMap.put("code", 0); //일치하는 회원 존재
|
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body( new SuccessResponse<Map>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(value = "/find/updatePw") |
||||||
|
@ApiOperation(value = "비밀번호 찾기 및 업데이트") |
||||||
|
@Tag(name = "휴대폰 인증 관리", description = "회원 휴대폰 인증 관련 API") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "userID",value = "사용자ID", dataTypeClass = String.class), |
||||||
|
@ApiImplicitParam(name = "hpno",value = "휴대폰번호", dataTypeClass = String.class), |
||||||
|
@ApiImplicitParam(name = "newPw",value = "새로운 비밀번호", dataTypeClass = String.class) |
||||||
|
}) |
||||||
|
public ResponseEntity<? extends BasicResponse> updatePw(String userId, String hpno, String newPw) throws Exception { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
|
||||||
|
if(hpno == null || newPw == null) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.updatePw(userId, hpno, newPw); |
||||||
|
resultMap.put("result", result); |
||||||
|
if(!result) { |
||||||
|
resultMap.put("code", -1); |
||||||
|
} else { |
||||||
|
resultMap.put("code", 0); |
||||||
|
} |
||||||
|
} catch(Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body( new SuccessResponse<Map>(resultMap)); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package com.palnet.biz.api.acnt.crtfyhp.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AcntCrtfyhpRsModel { |
||||||
|
// private int errCode;
|
||||||
|
private String userId; |
||||||
|
} |
@ -0,0 +1,252 @@ |
|||||||
|
package com.palnet.biz.api.acnt.crtfyhp.service; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Random; |
||||||
|
|
||||||
|
import javax.persistence.EntityManager; |
||||||
|
import javax.persistence.EntityManagerFactory; |
||||||
|
import javax.persistence.EntityTransaction; |
||||||
|
import javax.persistence.Persistence; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.beans.factory.annotation.Value; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.crtfyhp.model.AcntCrtfyhpRsModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrRqModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrRsModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrTermsModel; |
||||||
|
import com.palnet.biz.api.acnt.terms.model.AcntTermsRqModel; |
||||||
|
import com.palnet.biz.api.acnt.terms.model.AcntTermsRsModel; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCrtfyhpBas; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrBas; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrDtl; |
||||||
|
import com.palnet.biz.jpa.entity.PtyTermsAgreeTxn; |
||||||
|
import com.palnet.biz.jpa.entity.SuredataEntity; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCrtfyhpBasQueryRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCrtfyhpBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrDtlRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyTermsAgreeTxnRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyTermsQueryRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.SuredataRepository; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
import com.palnet.comn.utils.EncryptUtils; |
||||||
|
import com.palnet.comn.utils.HttpUtils; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class AcntCrtfyhpService { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||||
|
|
||||||
|
@Value("${sms.usercode}") |
||||||
|
private String USER_CODE; |
||||||
|
|
||||||
|
|
||||||
|
@Value("${sms.deptcode}") |
||||||
|
private String DEPT_CODE; |
||||||
|
|
||||||
|
|
||||||
|
@Value("${sms.reqname}") |
||||||
|
private String REQ_NAME; |
||||||
|
|
||||||
|
|
||||||
|
@Value("${sms.reqphone}") |
||||||
|
private String REQ_PHONE; |
||||||
|
|
||||||
|
|
||||||
|
@Value("${sms.result}") |
||||||
|
private String RESULT; |
||||||
|
|
||||||
|
|
||||||
|
@Value("${sms.reqtime}") |
||||||
|
private String REQ_TIME; |
||||||
|
|
||||||
|
|
||||||
|
@Value("${sms.kind}") |
||||||
|
private String KIND; |
||||||
|
|
||||||
|
|
||||||
|
@Value("${sms.subject.certify}") |
||||||
|
private String SUBJECT_CETIFY; |
||||||
|
|
||||||
|
|
||||||
|
@Value("${sms.callname.certify}") |
||||||
|
private String CALLNAME_CERTIFY; |
||||||
|
|
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCrtfyhpBasQueryRepository query; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrQueryRepository cstmrQuery; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCrtfyhpBasRepository ptyCrtfyhpBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrBasRepository ptyCstmrBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private SuredataRepository sureDataRepository; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
// public boolean certifySend(String hpno) throws Exception {
|
||||||
|
//
|
||||||
|
// //인증번호 만들기 ( 6자리)
|
||||||
|
// String certifyNo = numberGen(6, 2);
|
||||||
|
//
|
||||||
|
// //메시지 만들기
|
||||||
|
// String msg = "인증번호 [" + certifyNo + "] 를 입력해 주세요.";
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// //기존 인증 내역 삭제
|
||||||
|
// String encHpno = EncryptUtils.encrypt(hpno);
|
||||||
|
// ptyCrtfyhpBasRepository.prevCrtfyhpYnBlock(hpno);
|
||||||
|
//
|
||||||
|
// //인증 테이블 입력
|
||||||
|
// PtyCrtfyhpBas ptyEntity = new PtyCrtfyhpBas();
|
||||||
|
// ptyEntity.setHpno(hpno);
|
||||||
|
// ptyEntity.setCrtfyhpNo(certifyNo);
|
||||||
|
// ptyEntity.setCrtfyhpYn("N");
|
||||||
|
// ptyCrtfyhpBasRepository.save(ptyEntity);
|
||||||
|
//
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
public boolean registerSend(String hpno) throws Exception{ |
||||||
|
|
||||||
|
//인증번호 만들기 ( 6자리)
|
||||||
|
String certifyNo = numberGen(6, 2); |
||||||
|
|
||||||
|
//메시지 만들기
|
||||||
|
String msg = "인증번호 [" + certifyNo + "] 를 입력해 주세요."; |
||||||
|
|
||||||
|
|
||||||
|
//기존 인증 내역 삭제
|
||||||
|
// String encHpno = EncryptUtils.encrypt(hpno);
|
||||||
|
ptyCrtfyhpBasRepository.prevCrtfyhpYnBlock(hpno); |
||||||
|
|
||||||
|
//인증 테이블 입력
|
||||||
|
PtyCrtfyhpBas ptyEntity = new PtyCrtfyhpBas(); |
||||||
|
ptyEntity.setHpno(hpno); |
||||||
|
ptyEntity.setCrtfyhpNo(certifyNo); |
||||||
|
ptyEntity.setCrtfyhpYn("N"); |
||||||
|
ptyCrtfyhpBasRepository.save(ptyEntity); |
||||||
|
|
||||||
|
logger.info("certifyNo :: " + certifyNo); |
||||||
|
|
||||||
|
|
||||||
|
//발송 테이블 입력
|
||||||
|
SuredataEntity entity = new SuredataEntity(); |
||||||
|
entity.setCallphone(hpno); |
||||||
|
entity.setMsg(msg); |
||||||
|
entity.setSubject(SUBJECT_CETIFY); |
||||||
|
entity.setCallname(CALLNAME_CERTIFY); |
||||||
|
entity.setUsercode(USER_CODE); |
||||||
|
entity.setDeptcode(DEPT_CODE); |
||||||
|
entity.setReqphone(REQ_PHONE); |
||||||
|
entity.setReqname(REQ_NAME); |
||||||
|
entity.setReqtime(REQ_TIME); |
||||||
|
entity.setResult(RESULT); |
||||||
|
entity.setKind(KIND); |
||||||
|
|
||||||
|
|
||||||
|
SuredataEntity result = sureDataRepository.save(entity); |
||||||
|
|
||||||
|
if(result == null) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
return true; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public boolean registerConfirm(String hpno , String crtfyNo ) throws Exception{ |
||||||
|
hpno = EncryptUtils.encrypt(hpno); //암호화 해서 검색
|
||||||
|
List<PtyCrtfyhpBas> entity = query.confirmSms(hpno , crtfyNo); |
||||||
|
|
||||||
|
return entity.size() == 0 ? false : true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static String numberGen(int len, int dupCd){ |
||||||
|
Random rand = new Random(); |
||||||
|
String numStr = ""; //난수가 저장될 변수
|
||||||
|
for(int i = 0; i < len; i++){ |
||||||
|
//0~9 까지 난수 생성
|
||||||
|
|
||||||
|
String ran = Integer.toString(rand.nextInt(10)); |
||||||
|
if(dupCd == 1){ |
||||||
|
//중복 허용시 numStr에 append
|
||||||
|
numStr += ran; |
||||||
|
}else if(dupCd == 2){ |
||||||
|
//중복을 허용하지 않을시 중복된 값이 있는지 검사한다
|
||||||
|
if(!numStr.contains(ran)){ |
||||||
|
//중복된 값이 없으면 numStr에 append
|
||||||
|
numStr += ran; |
||||||
|
}else{ |
||||||
|
//생성된 난수가 중복되면 루틴을 다시 실행한다
|
||||||
|
i -= 1; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return numStr; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean certifNum(String memberName, String hpno) throws Exception{ |
||||||
|
String name = EncryptUtils.encrypt(memberName); |
||||||
|
String phone = EncryptUtils.encrypt(hpno); |
||||||
|
boolean certifNum = cstmrQuery.certifNum(name , phone); |
||||||
|
if(certifNum) { |
||||||
|
registerSend(hpno); |
||||||
|
} |
||||||
|
return certifNum; |
||||||
|
} |
||||||
|
|
||||||
|
public String findUserId(String memberName, String hpno) throws Exception{ |
||||||
|
String name = EncryptUtils.encrypt(memberName); |
||||||
|
String phone = EncryptUtils.encrypt(hpno); |
||||||
|
String resultFindId = cstmrQuery.findUserId(name,phone); |
||||||
|
|
||||||
|
return resultFindId; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean certifPw(String userId, String hpno) throws Exception{ |
||||||
|
String phone = EncryptUtils.encrypt(hpno); |
||||||
|
PtyCstmrBas certifNum = cstmrQuery.findUserPw(userId , phone); |
||||||
|
boolean result = false; |
||||||
|
if(certifNum != null) { |
||||||
|
registerSend(hpno); |
||||||
|
result = true; |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean updatePw(String userId, String hpno, String newPw) throws Exception{ |
||||||
|
String phone = EncryptUtils.encrypt(hpno); |
||||||
|
PtyCstmrBas certifNum = cstmrQuery.findUserPw(userId , phone); |
||||||
|
boolean result = false; |
||||||
|
if(certifNum != null) { |
||||||
|
String encryptPw = EncryptUtils.sha256Encrypt(newPw); |
||||||
|
certifNum.setUserPswd(encryptPw); |
||||||
|
certifNum.setPswdUpdtDt(DateUtils.nowDate()); |
||||||
|
ptyCstmrBasRepository.save(certifNum); |
||||||
|
result = true; |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,198 @@ |
|||||||
|
package com.palnet.biz.api.acnt.cstmr.controller; |
||||||
|
|
||||||
|
import java.security.Principal; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Optional; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrEmModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrGroupModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrPwModel; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.Parameter; |
||||||
|
import io.swagger.v3.oas.annotations.enums.ParameterIn; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.security.core.Authentication; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrRqModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrRsModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmerRlModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.service.AcntCstmrService; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.service.AnlsHstryService; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.biz.api.ctr.cntrl.service.CtrCntrlService; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrBas; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrDtl; |
||||||
|
import com.palnet.biz.sample.entity.SampleEntity; |
||||||
|
import com.palnet.biz.sample.service.SampleService; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.model.GPHistoryModel; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/acnt/cstmr", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "회원관리", description = "회원 관련 API") |
||||||
|
public class AcntCstmrController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final AcntCstmrService service; |
||||||
|
|
||||||
|
@PostMapping(value = "/register") |
||||||
|
@ApiOperation(value = "회원 가입") |
||||||
|
@Tag(name = "회원관리", description = "회원 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> register(@RequestBody AcntCstmrRqModel rq) { |
||||||
|
|
||||||
|
AcntCstmrRsModel result; |
||||||
|
// log.debug("RQ>>>>>>>>" , rq.toString());
|
||||||
|
|
||||||
|
try { |
||||||
|
// result = service.list(rq);
|
||||||
|
|
||||||
|
result = service.register(rq); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<AcntCstmrRsModel>(result)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping(value = "/profile/{cstmrSno}") |
||||||
|
@ApiOperation(value = "회원 정보") |
||||||
|
@Tag(name = "회원관리", description = "회원 관련 API") |
||||||
|
@ApiImplicitParam(name = "cstmrSno",value = "고객일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> mypage(@PathVariable Integer cstmrSno){ |
||||||
|
List<AnctCstmerRlModel> result = null; |
||||||
|
|
||||||
|
try { |
||||||
|
|
||||||
|
result = service.list(cstmrSno); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping(value = "/profile/pswdupdate") |
||||||
|
@ApiOperation(value = "회원 패스워드 변경") |
||||||
|
@Tag(name = "회원관리", description = "회원 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> passwordupdate(@RequestBody AcntCstmrPwModel rq){ |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
try { |
||||||
|
PtyCstmrBas result = service.updatepas(rq); |
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNOE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
resultMap.put("errorMessage", e.getMessage()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGONE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping(value = "/profile/pwcheck") |
||||||
|
@ApiOperation(value = "회원 기존 패스워드 확인") |
||||||
|
@Tag(name = "회원관리", description = "회원 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> extendpsw(@RequestBody Map<String,String> userPswdMap){ |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
try { |
||||||
|
boolean result = service.extendpsw(userPswdMap.get("userPswd")); |
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNOE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
resultMap.put("errorMessage", e.getMessage()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGONE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
@PutMapping(value = "/profile/update") |
||||||
|
@ApiOperation(value = "회원 정보 변경 (이메일,핸드폰)") |
||||||
|
@Tag(name = "회원관리", description = "회원 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> updateEmail(@RequestBody AcntCstmrEmModel rq){ |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
try { |
||||||
|
|
||||||
|
PtyCstmrDtl result = service.updateEmail(rq); |
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNOE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
resultMap.put("errorMessage", e.getMessage()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGONE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping(value = "/profile/delete/{cstmrSno}") |
||||||
|
@ApiOperation(value = "회원 탈퇴") |
||||||
|
@Tag(name = "회원관리", description = "회원 관련 API") |
||||||
|
@ApiImplicitParam(name = "cstmrSno",value = "고객일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> userDelete(@PathVariable Integer cstmrSno){ |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
try { |
||||||
|
|
||||||
|
boolean result = service.userDelete(cstmrSno); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNOE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
resultMap.put("errorMessage", e.getMessage()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
@ -0,0 +1,21 @@ |
|||||||
|
package com.palnet.biz.api.acnt.cstmr.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AcntCstmrEmModel { |
||||||
|
|
||||||
|
private String email; |
||||||
|
|
||||||
|
private Date updateDt; |
||||||
|
|
||||||
|
private String updateUserId; |
||||||
|
|
||||||
|
private int cstmrSno; |
||||||
|
|
||||||
|
private String hpno; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.palnet.biz.api.acnt.cstmr.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AcntCstmrGroupModel { |
||||||
|
|
||||||
|
private Integer cstmrSno; |
||||||
|
private String userId; |
||||||
|
private String groupId; |
||||||
|
private String groupNm; |
||||||
|
private String groupAuthCd; |
||||||
|
private Integer arcrftSno; |
||||||
|
private String idntfNum; |
||||||
|
private String createUserId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.palnet.biz.api.acnt.cstmr.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AcntCstmrPwModel { |
||||||
|
|
||||||
|
private Date pswdupdtDt; |
||||||
|
|
||||||
|
private String userPswd; |
||||||
|
|
||||||
|
private String newPswd; |
||||||
|
|
||||||
|
private String newPswdConfirm; |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.palnet.biz.api.acnt.cstmr.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AcntCstmrRqModel{ |
||||||
|
|
||||||
|
private String cstrmDivCd; |
||||||
|
|
||||||
|
private String cstrmStatusCd; |
||||||
|
|
||||||
|
private String userId; |
||||||
|
|
||||||
|
private String authId; |
||||||
|
|
||||||
|
private String siteCode; |
||||||
|
|
||||||
|
private String memberDivCd; |
||||||
|
|
||||||
|
private String userPswd; |
||||||
|
|
||||||
|
private String ipinDi; |
||||||
|
|
||||||
|
private String ipinCi; |
||||||
|
|
||||||
|
private String joinCrtfyCd; |
||||||
|
|
||||||
|
private String cntryCd; |
||||||
|
|
||||||
|
private String genderCd; |
||||||
|
|
||||||
|
private String memberName; |
||||||
|
|
||||||
|
private String brthdyDate; |
||||||
|
|
||||||
|
private String email; |
||||||
|
|
||||||
|
private String hpno; |
||||||
|
|
||||||
|
private String clncd; |
||||||
|
|
||||||
|
private AnctCstmrTermsModel[] terms; |
||||||
|
|
||||||
|
private String trmnlId; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package com.palnet.biz.api.acnt.cstmr.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AcntCstmrRsModel{ |
||||||
|
|
||||||
|
private int errCode; // 1 : 성공 , -1 : 가입된 ID 존재 , -2 : 동일한 이메일 존재 , -3 동일한 휴대폰번호 존재
|
||||||
|
|
||||||
|
private String loginId; // 가입 성공된 ID 전달
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package com.palnet.biz.api.acnt.cstmr.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AnctCstmerRlModel { |
||||||
|
|
||||||
|
private String memberName; |
||||||
|
|
||||||
|
private Date brthdyDate; |
||||||
|
|
||||||
|
private String genderCd; |
||||||
|
|
||||||
|
private String cntryCd; |
||||||
|
|
||||||
|
private String email; |
||||||
|
|
||||||
|
private String hpno; |
||||||
|
|
||||||
|
private String userId; |
||||||
|
|
||||||
|
private Date updateDt; |
||||||
|
|
||||||
|
private String updateuserId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package com.palnet.biz.api.acnt.cstmr.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AnctCstmrTermsModel { |
||||||
|
private int termsSno; |
||||||
|
private String agreeYn; |
||||||
|
} |
@ -0,0 +1,321 @@ |
|||||||
|
package com.palnet.biz.api.acnt.cstmr.service; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.persistence.EntityManagerFactory; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrEmModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrPwModel; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrRqModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AcntCstmrRsModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmerRlModel; |
||||||
|
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrTermsModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrBas; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrDtl; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrGroup; |
||||||
|
import com.palnet.biz.jpa.entity.PtyGroupBas; |
||||||
|
import com.palnet.biz.jpa.entity.PtyTermsAgreeTxn; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrDtlRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrGroupRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyGroupBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyTermsAgreeTxnRepository; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
import com.palnet.comn.utils.EncryptUtils; |
||||||
|
import com.palnet.comn.utils.HttpUtils; |
||||||
|
|
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Service |
||||||
|
@Log4j2 |
||||||
|
public class AcntCstmrService { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||||
|
|
||||||
|
// @Autowired
|
||||||
|
// private CtrCntrlBasRepository ctrCntrlBasRepository;
|
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrQueryRepository query; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrBasRepository ptyCstmrBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrDtlRepository ptyCstmrDtlRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrGroupRepository ptyCstmrGroupRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyGroupBasRepository ptyGroupBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyTermsAgreeTxnRepository ptyTermsAgreeTxnRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private EntityManagerFactory emf; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtTokenUtil jwtTokenUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@Transactional |
||||||
|
public AcntCstmrRsModel register(AcntCstmrRqModel rq) throws Exception{ |
||||||
|
|
||||||
|
// logger.debug("ddddddd>>>>" + JsonUtils.toJson(rq));
|
||||||
|
// logger.debug("ddddddd>>>>" + rq.getBrthdyDate());
|
||||||
|
AcntCstmrRsModel rs = new AcntCstmrRsModel(); |
||||||
|
boolean isUserIdFind = false; |
||||||
|
try { |
||||||
|
|
||||||
|
//사전 체크. 동일한 ID 존재 여부 확인
|
||||||
|
isUserIdFind = query.findCstmrByUserId(rq.getUserId()); |
||||||
|
if(isUserIdFind) { |
||||||
|
rs.setErrCode(-1); |
||||||
|
return rs; |
||||||
|
} |
||||||
|
|
||||||
|
rq.setHpno(rq.getHpno().replaceAll("-", "")); |
||||||
|
//처리 1. 민감정보 암호화 처리(비밀번호 , 이름 , 휴대폰번호 , 이메일)
|
||||||
|
rq.setUserPswd(EncryptUtils.sha256Encrypt(rq.getUserPswd())); |
||||||
|
// rq.setMemberName(EncryptUtils.encrypt(rq.getMemberName()));
|
||||||
|
rq.setHpno(EncryptUtils.encrypt(rq.getHpno())); |
||||||
|
rq.setEmail(EncryptUtils.encrypt(rq.getEmail())); |
||||||
|
rq.setBrthdyDate(rq.getBrthdyDate().replaceAll("-", "")); |
||||||
|
|
||||||
|
|
||||||
|
//처리 2. 마스터 정보 저장
|
||||||
|
PtyCstmrBas basEntity = this.savePtyCstmrBas(rq); |
||||||
|
if(basEntity == null) { |
||||||
|
throw new CustomException(ErrorCode.INTERNAL_SERVER_ERROR); |
||||||
|
} |
||||||
|
|
||||||
|
//처리 3. 상세 정보 저장
|
||||||
|
this.savePtyCstmrDtl(rq ,basEntity ); |
||||||
|
|
||||||
|
//처리 4. 약관 동의 정보 저장
|
||||||
|
if(rq.getTerms() != null && rq.getTerms().length > 0) { |
||||||
|
for(AnctCstmrTermsModel agree : rq.getTerms()) { |
||||||
|
this.savePtyTermsAgreeTxn(agree , basEntity); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//성공 파람 담기
|
||||||
|
if(basEntity != null) { |
||||||
|
rs.setErrCode(1); |
||||||
|
rs.setLoginId(basEntity.getUserId()); |
||||||
|
} |
||||||
|
|
||||||
|
}catch(Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
rs.setErrCode(-2); |
||||||
|
return rs; |
||||||
|
} |
||||||
|
|
||||||
|
return rs; |
||||||
|
} |
||||||
|
|
||||||
|
public PtyCstmrBas savePtyCstmrBas(AcntCstmrRqModel rq) throws Exception{ |
||||||
|
|
||||||
|
|
||||||
|
PtyCstmrBas basEntity = new PtyCstmrBas(); |
||||||
|
basEntity.setCstmrDivCd(rq.getCstrmDivCd()); |
||||||
|
basEntity.setCstmrStatusCd(rq.getCstrmStatusCd()); |
||||||
|
basEntity.setUserId(rq.getUserId()); |
||||||
|
basEntity.setAuthId(rq.getAuthId()); |
||||||
|
basEntity.setSiteCode(rq.getSiteCode()); |
||||||
|
basEntity.setMemberDivCd(rq.getMemberDivCd()); |
||||||
|
basEntity.setUserPswd(rq.getUserPswd()); |
||||||
|
basEntity.setJoinDt(DateUtils.nowDate()); |
||||||
|
basEntity.setJoinIp(HttpUtils.getRequestIp()); |
||||||
|
basEntity.setTrmnlId(rq.getTrmnlId()); |
||||||
|
|
||||||
|
return ptyCstmrBasRepository.save(basEntity); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public PtyCstmrDtl savePtyCstmrDtl(AcntCstmrRqModel rq , PtyCstmrBas basEntity) throws Exception{ |
||||||
|
PtyCstmrDtl dtlEntity = new PtyCstmrDtl(); |
||||||
|
dtlEntity.setCstmrSno(basEntity.getCstmrSno()); |
||||||
|
dtlEntity.setIpinCi(rq.getIpinCi()); |
||||||
|
dtlEntity.setIpinDi(rq.getIpinDi()); |
||||||
|
dtlEntity.setJoinCrtfyCd(rq.getJoinCrtfyCd()); |
||||||
|
dtlEntity.setCntryCd(rq.getCntryCd()); |
||||||
|
dtlEntity.setGenderCd(rq.getGenderCd()); |
||||||
|
dtlEntity.setMemberName(rq.getMemberName()); |
||||||
|
dtlEntity.setBrthdyDate(DateUtils.stringToDate(rq.getBrthdyDate())); |
||||||
|
dtlEntity.setEmail(rq.getEmail()); |
||||||
|
dtlEntity.setHpno(rq.getHpno()); |
||||||
|
dtlEntity.setClncd(rq.getClncd()); |
||||||
|
dtlEntity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
dtlEntity.setUpdateUserId(rq.getUserId()); |
||||||
|
|
||||||
|
return ptyCstmrDtlRepository.save(dtlEntity); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public PtyTermsAgreeTxn savePtyTermsAgreeTxn(AnctCstmrTermsModel agree , PtyCstmrBas basEntity) throws Exception{ |
||||||
|
PtyTermsAgreeTxn agreeEntity = new PtyTermsAgreeTxn(); |
||||||
|
agreeEntity.setCstmrSno(basEntity.getCstmrSno()); |
||||||
|
agreeEntity.setProcIp(HttpUtils.getRequestIp()); |
||||||
|
agreeEntity.setTermsSno(agree.getTermsSno()); |
||||||
|
agreeEntity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
agreeEntity.setUpdateUserId(basEntity.getUserId()); |
||||||
|
agreeEntity.setAgreeYn(agree.getAgreeYn()); |
||||||
|
if(agree.getAgreeYn().equals("Y")) { |
||||||
|
agreeEntity.setAgreeDt(DateUtils.nowDate()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
return ptyTermsAgreeTxnRepository.save(agreeEntity); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public List<AnctCstmerRlModel> list(int cstmrSno) { |
||||||
|
|
||||||
|
List<AnctCstmerRlModel> resultList = query.list(cstmrSno); |
||||||
|
|
||||||
|
for(AnctCstmerRlModel model : resultList) { |
||||||
|
model.setEmail(EncryptUtils.decrypt(model.getEmail())); |
||||||
|
// model.setMemberName(EncryptUtils.decrypt(model.getMemberName()));
|
||||||
|
model.setHpno(EncryptUtils.decrypt(model.getHpno())); |
||||||
|
} |
||||||
|
|
||||||
|
return resultList; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public PtyCstmrBas updatepas(AcntCstmrPwModel rq) { |
||||||
|
// 1. 토큰 유저 정보 불러오기
|
||||||
|
Integer userId = jwtTokenUtil.getCstmrSnoByToken(); |
||||||
|
|
||||||
|
// 2. DB의 유저정보 조회
|
||||||
|
PtyCstmrBas userEntity = ptyCstmrBasRepository.findById(userId).orElse(null); |
||||||
|
|
||||||
|
// 5. 새로운 비밀번호 검증
|
||||||
|
if(!rq.getNewPswd().equals(rq.getNewPswdConfirm())) { |
||||||
|
// 5.e 새로운 비밀번호 일치하지 않으면 예외처리
|
||||||
|
throw new CustomException(ErrorCode.FAIL); //임시...수정필요
|
||||||
|
} |
||||||
|
|
||||||
|
// 6. 새로운 패스워드 암호화
|
||||||
|
String encryptNewPwd = EncryptUtils.sha256Encrypt(rq.getNewPswd()); |
||||||
|
|
||||||
|
// 7. 유저 정보 저장
|
||||||
|
userEntity.setUserPswd(encryptNewPwd); |
||||||
|
userEntity.setPswdUpdtDt(DateUtils.nowDate()); |
||||||
|
|
||||||
|
PtyCstmrBas updateUserEntity = ptyCstmrBasRepository.save(userEntity); |
||||||
|
|
||||||
|
return updateUserEntity; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean extendpsw(String userPswd){ |
||||||
|
boolean result = false; |
||||||
|
// 1. 토큰 유저 정보 불러오기
|
||||||
|
Integer userId = jwtTokenUtil.getCstmrSnoByToken(); |
||||||
|
|
||||||
|
// 2. DB의 유저정보 조회
|
||||||
|
// AcntCstmrRqModel result = query.findpassword(userId);
|
||||||
|
PtyCstmrBas userEntity = ptyCstmrBasRepository.findById(userId).orElse(null); |
||||||
|
|
||||||
|
// 3. RQ의 유저 패스워드를 암호화 처리
|
||||||
|
if(userPswd != null && !userPswd.isEmpty()){ |
||||||
|
userPswd = EncryptUtils.sha256Encrypt(userPswd); |
||||||
|
} |
||||||
|
|
||||||
|
// 4. RQ의 암호화한 패스워드와 DB에서 조회한 유저의 패스워드랑 비교
|
||||||
|
if(!userPswd.equals(userEntity.getUserPswd())) { |
||||||
|
log.info("USERPSWD 비밀번호 : {}, DB 비밀번호 : {}", userPswd, userEntity.getUserPswd()); |
||||||
|
// 4.e 일치하지 않으면 예외처리 (패스워드 불일치)
|
||||||
|
|
||||||
|
throw new CustomException(ErrorCode.FAIL); // 임시,, 수정해야함
|
||||||
|
} |
||||||
|
userEntity.setUserPswd(userPswd); |
||||||
|
|
||||||
|
|
||||||
|
PtyCstmrBas extendsPwd = ptyCstmrBasRepository.save(userEntity); |
||||||
|
result=true; |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
public PtyCstmrDtl updateEmail(AcntCstmrEmModel rq) { |
||||||
|
Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken(); |
||||||
|
String userId = jwtTokenUtil.getUserIdByToken(); |
||||||
|
String newEmail = EncryptUtils.encrypt(rq.getEmail()); |
||||||
|
String newHpno = EncryptUtils.encrypt(rq.getHpno()); |
||||||
|
|
||||||
|
PtyCstmrDtl userEntity = ptyCstmrDtlRepository.findById(cstmrSno).orElse(null); |
||||||
|
|
||||||
|
userEntity.setEmail(newEmail); |
||||||
|
userEntity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
userEntity.setUpdateUserId(userId); |
||||||
|
userEntity.setHpno(newHpno); |
||||||
|
|
||||||
|
PtyCstmrDtl updateEmailEntity = ptyCstmrDtlRepository.save(userEntity); |
||||||
|
|
||||||
|
return updateEmailEntity; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean userDelete(int cstmrSno) { |
||||||
|
|
||||||
|
List<JwtGroupModel> groupInfo = jwtTokenUtil.getGroupAuthByToken(); |
||||||
|
for(JwtGroupModel group : groupInfo) { |
||||||
|
// if(group.getGroupAuthCd().equals("CREATER")) {
|
||||||
|
if(group.getGroupAuthCd().equals("MASTER")) { |
||||||
|
PtyGroupBas groupEntity = ptyGroupBasRepository.findByGroupId(group.getGroupId()); |
||||||
|
if(!(groupEntity == null)) { |
||||||
|
groupEntity.setUseYn("N"); |
||||||
|
ptyGroupBasRepository.save(groupEntity); |
||||||
|
} |
||||||
|
List<PtyCstmrGroup> cstmrEntity = ptyCstmrGroupRepository.changeGroupJoinYn(group.getGroupId()); |
||||||
|
if(!(cstmrEntity == null)) { |
||||||
|
for(PtyCstmrGroup cstmr : cstmrEntity) { |
||||||
|
cstmr.setJoinYn("N"); |
||||||
|
ptyCstmrGroupRepository.save(cstmr); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
List<PtyCstmrGroup> AprvlEntity = ptyCstmrGroupRepository.changeGroupAprvlYn(cstmrSno); |
||||||
|
if(!(AprvlEntity == null)) { |
||||||
|
for(PtyCstmrGroup Aprvl : AprvlEntity) { |
||||||
|
Aprvl.setAprvlYn("N"); |
||||||
|
Aprvl.setAprvlDt(null); |
||||||
|
ptyCstmrGroupRepository.save(Aprvl); |
||||||
|
} |
||||||
|
PtyCstmrGroup cstmrEntity = ptyCstmrGroupRepository.findGroupId(group.getGroupId(), cstmrSno); |
||||||
|
if(!(cstmrEntity == null)) { |
||||||
|
cstmrEntity.setJoinYn("N"); |
||||||
|
ptyCstmrGroupRepository.save(cstmrEntity); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
PtyCstmrBas userEntity = ptyCstmrBasRepository.findByUserGroupId(cstmrSno); |
||||||
|
userEntity.setCstmrStatusCd("W"); |
||||||
|
userEntity.setCstmrStatusCngDt(DateUtils.nowDate()); |
||||||
|
ptyCstmrBasRepository.save(userEntity); |
||||||
|
|
||||||
|
boolean result = true; |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,151 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.controller; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiImplicitParams; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.security.core.userdetails.UserDetails; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestAttribute; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtRqModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtRsModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.service.JwtService; |
||||||
|
import com.palnet.biz.api.acnt.jwt.service.JwtUserDetailsService; |
||||||
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrBas; |
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
import com.palnet.comn.utils.EncryptUtils; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@Log4j2 |
||||||
|
@RequestMapping(value = "/api/acnt/jwt", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "JWT 토큰 이용", description = "JWT 토큰 관련 API") |
||||||
|
public class JwtAuthenticationController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtTokenUtil jwtTokenUtil; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtUserDetailsService userDetailsService; |
||||||
|
|
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtService service; |
||||||
|
|
||||||
|
@PostMapping(value = "/login") |
||||||
|
@ApiOperation(value = "로그인") |
||||||
|
@Tag(name = "JWT 토큰 이용", description = "JWT 토큰 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> createAuthenticationToken(@RequestBody JwtRqModel authenticationRequest) throws Exception { |
||||||
|
|
||||||
|
Map<String , Object> resultMap = service.loginProcess(authenticationRequest); |
||||||
|
|
||||||
|
int loginError = (int) resultMap.get("loginError"); |
||||||
|
|
||||||
|
if(loginError < 0) { |
||||||
|
|
||||||
|
String errorMessage = (String) resultMap.get("errorMessage"); |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
|
||||||
|
.body(new ErrorResponse(errorMessage, loginError + "")); // 계정 사용하지 못함
|
||||||
|
}else { |
||||||
|
|
||||||
|
JwtRsModel result = (JwtRsModel) resultMap.get("result"); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<JwtRsModel>(result)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping(value = "/profile/{cstmrSno}") |
||||||
|
@ApiOperation(value = "로그인한 회원의 정보") |
||||||
|
@Tag(name = "JWT 토큰 이용", description = "JWT 토큰 관련 API") |
||||||
|
@ApiImplicitParam(name = "cstmrSno",value = "고객일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> proflie(@PathVariable Integer cstmrSno) throws Exception{ |
||||||
|
|
||||||
|
JwtProfileRsModel result = service.profile(cstmrSno); |
||||||
|
if(result == null) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.DATA_NOTFOUNT)); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<JwtProfileRsModel>(result)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@PostMapping(value = "/refresh") |
||||||
|
@Tag(name = "JWT 토큰 이용", description = "JWT 토큰 관련 API") |
||||||
|
// public ResponseEntity<? extends BasicResponse> refresh(@RequestParam("cstmrSno") int cstmrSno , @RequestParam("refreshToken") String refreshToken) throws Exception{
|
||||||
|
public ResponseEntity<? extends BasicResponse> refresh(@RequestBody Map body) throws Exception{ |
||||||
|
|
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(body.get("cstmrSno") == null || body.get("refreshToken") == null || !(body.get("cstmrSno") instanceof Integer)) { |
||||||
|
|
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
int cstmrSno = (int)body.get("cstmrSno"); |
||||||
|
String refreshToken = (String)body.get("refreshToken"); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
JwtRsModel result = service.findRefreshtoken(cstmrSno, refreshToken); |
||||||
|
// JwtRsModel result = null;
|
||||||
|
|
||||||
|
if(result ==null) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.DATA_NOTFOUNT)); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<JwtRsModel>(result)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping(value = "/logout/{cstmrSno}") |
||||||
|
@ApiOperation(value = "로그아웃 한 회원의 정보") |
||||||
|
@Tag(name = "JWT 토큰 이용", description = "JWT 토큰 관련 API") |
||||||
|
@ApiImplicitParam(name = "cstmrSno",value = "고객일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> logout(@PathVariable Integer cstmrSno) throws Exception{ |
||||||
|
|
||||||
|
// if(cstmrSno == null || !(body.get("cstmrSno") instanceof Integer)) {
|
||||||
|
// return ResponseEntity.status(HttpStatus.OK)
|
||||||
|
// .body(new ErrorResponse(RSErrorCode.ER_PARAM));
|
||||||
|
// }
|
||||||
|
// int cstmrSno = (int)body.get("cstmrSno");
|
||||||
|
|
||||||
|
|
||||||
|
PtyCstmrBas bas = service.logoutProcess(cstmrSno); |
||||||
|
|
||||||
|
if(bas == null) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.DATA_NOTFOUNT)); |
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<RSErrorCode>(RSErrorCode.SUCCESS)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.filter; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
import org.springframework.security.core.AuthenticationException; |
||||||
|
import org.springframework.security.web.AuthenticationEntryPoint; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
|
||||||
|
//허가되지 않은 사용자라면, 접근 불가 메세지를 띄워 리소스 정보획득을 못하게 막아줍니다.
|
||||||
|
@Component |
||||||
|
public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint, Serializable { |
||||||
|
|
||||||
|
private static final long serialVersionUID = -7858869558953243875L; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void commence(HttpServletRequest request, HttpServletResponse response, |
||||||
|
AuthenticationException authException) throws IOException { |
||||||
|
|
||||||
|
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,96 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.filter; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.ServletException; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.beans.factory.annotation.Value; |
||||||
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; |
||||||
|
import org.springframework.security.core.context.SecurityContextHolder; |
||||||
|
import org.springframework.security.core.userdetails.UserDetails; |
||||||
|
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
import org.springframework.web.filter.OncePerRequestFilter; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.jwt.service.JwtUserDetailsService; |
||||||
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||||
|
|
||||||
|
import io.jsonwebtoken.ExpiredJwtException; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
//프론트엔드에서 매순간 request를 요청 할 때마다 이 필터를 먼저 거침
|
||||||
|
@Component |
||||||
|
@Log4j2 |
||||||
|
public class JwtRequestFilter extends OncePerRequestFilter { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtUserDetailsService jwtUserDetailsService; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtTokenUtil jwtTokenUtil; |
||||||
|
|
||||||
|
@Value("${spring.jwt.prefix}") |
||||||
|
private String JWT_PREFIX; |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) |
||||||
|
throws ServletException, IOException { |
||||||
|
|
||||||
|
// logger.info("access request uri :: " + request.getRequestURI());
|
||||||
|
// logger.info("access remote host :: " + request.getRemoteHost());
|
||||||
|
|
||||||
|
final String requestTokenHeader = request.getHeader("Authorization"); |
||||||
|
|
||||||
|
String username = null; |
||||||
|
String jwtToken = null; |
||||||
|
// JWT Token is in the form "Bearer token". Remove Bearer word and get
|
||||||
|
// only the Token
|
||||||
|
// log.debug("==============================================================================");
|
||||||
|
// log.debug(requestTokenHeader);
|
||||||
|
// log.debug("==============================================================================");
|
||||||
|
|
||||||
|
if (requestTokenHeader != null && requestTokenHeader.startsWith(JWT_PREFIX)) { |
||||||
|
jwtToken = requestTokenHeader.substring(7); |
||||||
|
try { |
||||||
|
username = jwtTokenUtil.getUsernameFromToken(jwtToken); |
||||||
|
} catch (IllegalArgumentException e) { |
||||||
|
log.warn("Unable to get JWT Token"); |
||||||
|
} catch (ExpiredJwtException e) { |
||||||
|
log.warn("JWT Token has expired"); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// logger.debug(">>>" + requestTokenHeader);
|
||||||
|
// logger.warn("JWT Token is Error ");
|
||||||
|
// logger.warn("Request URI : "+ request.getRequestURI());
|
||||||
|
} |
||||||
|
// log.debug(">>>>>>>>>>" + username);
|
||||||
|
|
||||||
|
// Once we get the token validate it.
|
||||||
|
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { |
||||||
|
|
||||||
|
|
||||||
|
UserDetails userDetails = this.jwtUserDetailsService.loadUserByUsername(username); |
||||||
|
|
||||||
|
// if token is valid configure Spring Security to manually set
|
||||||
|
// authentication
|
||||||
|
if (jwtTokenUtil.validateToken(jwtToken, userDetails)) { |
||||||
|
|
||||||
|
UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken( |
||||||
|
userDetails, null, userDetails.getAuthorities()); |
||||||
|
usernamePasswordAuthenticationToken |
||||||
|
.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); |
||||||
|
// After setting the Authentication in the context, we specify
|
||||||
|
// that the current user is authenticated. So it passes the
|
||||||
|
// Spring Security Configurations successfully.
|
||||||
|
SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken); |
||||||
|
} |
||||||
|
} |
||||||
|
chain.doFilter(request, response); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class JwtGroupModel { |
||||||
|
private String groupId; |
||||||
|
private String groupAuthCd; |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class JwtProfileRsModel { |
||||||
|
private int cstmrSno; |
||||||
|
|
||||||
|
private String authId; |
||||||
|
|
||||||
|
private String siteCode; |
||||||
|
|
||||||
|
private String userId; |
||||||
|
|
||||||
|
private String memberName; |
||||||
|
|
||||||
|
private String trmnlId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.model; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.Getter; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
import lombok.Setter; |
||||||
|
|
||||||
|
|
||||||
|
@NoArgsConstructor |
||||||
|
@AllArgsConstructor |
||||||
|
@Data |
||||||
|
public class JwtRqModel implements Serializable { |
||||||
|
|
||||||
|
private static final long serialVersionUID = 5926468583005150707L; |
||||||
|
|
||||||
|
private String userId; |
||||||
|
private String userPswd; |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.model; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class JwtRsModel implements Serializable { |
||||||
|
|
||||||
|
private String accessToken ; |
||||||
|
|
||||||
|
private String refreshToken; |
||||||
|
|
||||||
|
private String userId; |
||||||
|
|
||||||
|
private Integer cstmrSno; |
||||||
|
|
||||||
|
private String auth; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,98 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.model; |
||||||
|
|
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
import org.springframework.security.core.GrantedAuthority; |
||||||
|
import org.springframework.security.core.authority.SimpleGrantedAuthority; |
||||||
|
import org.springframework.security.core.userdetails.UserDetails; |
||||||
|
|
||||||
|
import javax.persistence.*; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Data |
||||||
|
@NoArgsConstructor |
||||||
|
@AllArgsConstructor |
||||||
|
public class JwtUserModel implements UserDetails { |
||||||
|
|
||||||
|
@Id |
||||||
|
@GeneratedValue(strategy= GenerationType.IDENTITY) |
||||||
|
@Column(name = "CSTMR_SNO", unique = true) |
||||||
|
private Integer cstmrSno; |
||||||
|
|
||||||
|
@Column(name = "USER_ID", unique = true) |
||||||
|
private String userId; |
||||||
|
|
||||||
|
@Column(name = "USER_PSWD") |
||||||
|
private String userPswd; |
||||||
|
|
||||||
|
@Column(name = "SITE_CODE") |
||||||
|
private String siteCode; |
||||||
|
|
||||||
|
@Column(name = "AUTH_ID") |
||||||
|
private String auth; |
||||||
|
|
||||||
|
@Column(name = "CSTMR_STATUS_CD") |
||||||
|
private String cstmrStatusCd; |
||||||
|
|
||||||
|
@Transient |
||||||
|
private List<JwtGroupModel> group; |
||||||
|
|
||||||
|
|
||||||
|
// 사용자의 권한을 콜렉션 형태로 반환
|
||||||
|
// 단, 클래스 자료형은 GrantedAuthority를 구현해야함
|
||||||
|
@Override |
||||||
|
public Collection<? extends GrantedAuthority> getAuthorities() { |
||||||
|
Set<GrantedAuthority> roles = new HashSet<>(); |
||||||
|
for (String role : auth.split(",")) { |
||||||
|
roles.add(new SimpleGrantedAuthority(role)); |
||||||
|
} |
||||||
|
return roles; |
||||||
|
} |
||||||
|
|
||||||
|
// 사용자의 id를 반환 (unique한 값)
|
||||||
|
@Override |
||||||
|
public String getUsername() { |
||||||
|
return userId; |
||||||
|
} |
||||||
|
|
||||||
|
// 사용자의 password를 반환
|
||||||
|
@Override |
||||||
|
public String getPassword() { |
||||||
|
return userPswd; |
||||||
|
} |
||||||
|
|
||||||
|
// 계정 만료 여부 반환
|
||||||
|
@Override |
||||||
|
public boolean isAccountNonExpired() { |
||||||
|
// 만료되었는지 확인하는 로직
|
||||||
|
return true; // true -> 만료되지 않았음
|
||||||
|
} |
||||||
|
|
||||||
|
// 계정 잠금 여부 반환
|
||||||
|
@Override |
||||||
|
public boolean isAccountNonLocked() { |
||||||
|
// 계정 잠금되었는지 확인하는 로직
|
||||||
|
if(cstmrStatusCd.equals("A")) |
||||||
|
return true; |
||||||
|
else |
||||||
|
return false; |
||||||
|
// return true; // true -> 잠금되지 않았음
|
||||||
|
} |
||||||
|
|
||||||
|
// 패스워드의 만료 여부 반환
|
||||||
|
@Override |
||||||
|
public boolean isCredentialsNonExpired() { |
||||||
|
// 패스워드가 만료되었는지 확인하는 로직
|
||||||
|
return true; // true -> 만료되지 않았음
|
||||||
|
} |
||||||
|
|
||||||
|
// 계정 사용 가능 여부 반환
|
||||||
|
@Override |
||||||
|
public boolean isEnabled() { |
||||||
|
// 계정이 사용 가능한지 확인하는 로직
|
||||||
|
return true; // true -> 사용 가능
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,237 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.service; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Optional; |
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.cstmr.service.AcntCstmrService; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtRqModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtRsModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.biz.jpa.entity.CtrCntrlBas; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrBas; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrConectHist; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrConectHistRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
import com.palnet.comn.utils.EncryptUtils; |
||||||
|
import com.palnet.comn.utils.HttpUtils; |
||||||
|
|
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Service |
||||||
|
@Log4j2 |
||||||
|
public class JwtService { |
||||||
|
@Autowired |
||||||
|
private PtyCstmrBasRepository ptyCstmrBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrConectHistRepository ptyCstmrConectHistRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtUserDetailsService userDetailsService; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrQueryRepository query ; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtTokenUtil jwtTokenUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* 로그인 처리 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public Map<String , Object> loginProcess(JwtRqModel rq) throws Exception{ |
||||||
|
|
||||||
|
int loginError = 1; // -100 : 아이디/비밀번호가 없습니다 , -101 : 계정정보를 찾을수 없습니다 , -102 : 비밀번호가 잘못 되었습니다 , -103 : 계정을 사용할수 없습니다.
|
||||||
|
|
||||||
|
Map<String , Object> resultMap = new HashMap<String , Object>(); |
||||||
|
|
||||||
|
//입력값 검증 처리
|
||||||
|
if(StringUtils.isEmpty(rq.getUserId()) || StringUtils.isEmpty(rq.getUserPswd())) { |
||||||
|
loginError = -100; |
||||||
|
} |
||||||
|
|
||||||
|
JwtUserModel userDetails = (JwtUserModel)userDetailsService |
||||||
|
.loadUserByUsername(rq.getUserId()); |
||||||
|
|
||||||
|
|
||||||
|
//계정이 없는경우
|
||||||
|
if(userDetails == null) { |
||||||
|
loginError = -101; |
||||||
|
}else{ |
||||||
|
String password = EncryptUtils.sha256Encrypt(rq.getUserPswd()); |
||||||
|
|
||||||
|
//비밀번호 검증 처리
|
||||||
|
if (!userDetails.getPassword().equals(password)) { |
||||||
|
loginError = -102; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
//계정 검증로직
|
||||||
|
if(!userDetails.isAccountNonLocked() || !userDetails.isAccountNonExpired() || !userDetails.isEnabled() || !userDetails.isCredentialsNonExpired()) { |
||||||
|
loginError = -103; |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
if(loginError < 0) { |
||||||
|
|
||||||
|
String errorMessage = ""; |
||||||
|
if(loginError == -100) { |
||||||
|
errorMessage = "Please parameter Check"; |
||||||
|
}else if(loginError == -101) { |
||||||
|
errorMessage = "Account not found"; |
||||||
|
|
||||||
|
}else if(loginError == -102) { |
||||||
|
errorMessage = "Password does not match"; |
||||||
|
}else if(loginError == -103) { |
||||||
|
errorMessage = "Account is unavailable"; |
||||||
|
} |
||||||
|
//실패 이력 저장
|
||||||
|
//cstmrSno , String loginYn , String errorCode
|
||||||
|
if(userDetails != null) { |
||||||
|
this.historySave(userDetails.getCstmrSno(), "N", loginError+""); |
||||||
|
} |
||||||
|
|
||||||
|
resultMap.put("loginError", loginError); |
||||||
|
resultMap.put("errorMessage", errorMessage); |
||||||
|
|
||||||
|
return resultMap; |
||||||
|
|
||||||
|
}else { |
||||||
|
|
||||||
|
String accessToken = jwtTokenUtil.generateToken(userDetails); |
||||||
|
String refreshToken = jwtTokenUtil.generateRefreshToken(userDetails); |
||||||
|
|
||||||
|
JwtRsModel result = new JwtRsModel(); |
||||||
|
result.setAccessToken(accessToken); |
||||||
|
result.setRefreshToken(refreshToken); |
||||||
|
result.setAuth(userDetails.getAuth()); |
||||||
|
result.setUserId(userDetails.getUserId()); |
||||||
|
result.setCstmrSno(userDetails.getCstmrSno()); |
||||||
|
//토큰 저장 처리
|
||||||
|
log.debug("========= refresh>>>>" + refreshToken); |
||||||
|
this.refreshTokenSave(userDetails.getCstmrSno(), refreshToken); |
||||||
|
|
||||||
|
//성공이력 저장
|
||||||
|
this.historySave(userDetails.getCstmrSno(), "Y", loginError+""); |
||||||
|
|
||||||
|
resultMap.put("loginError", loginError); |
||||||
|
resultMap.put("errorMessage", ""); |
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
return resultMap; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public PtyCstmrBas logoutProcess(int cstmrSno) throws Exception{ |
||||||
|
|
||||||
|
Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno); |
||||||
|
if (optional.isPresent()) { |
||||||
|
PtyCstmrBas entity = optional.get(); |
||||||
|
entity.setRfrshToken(""); |
||||||
|
return ptyCstmrBasRepository.save(entity); |
||||||
|
}else { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 로그인 이력 저장 |
||||||
|
* @param cstmrSno |
||||||
|
* @param loginYn |
||||||
|
* @param errorCode |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public PtyCstmrConectHist historySave(int cstmrSno , String loginYn , String errorCode) throws Exception{ |
||||||
|
String conectIp = HttpUtils.getRequestIp(); |
||||||
|
|
||||||
|
PtyCstmrConectHist entity = new PtyCstmrConectHist(); |
||||||
|
entity.setCstmrSno(cstmrSno); |
||||||
|
entity.setConectSucesYn(loginYn); |
||||||
|
entity.setConectErrorCd(errorCode); |
||||||
|
entity.setConectIp(conectIp); |
||||||
|
entity.setConectDt(DateUtils.nowDate()); |
||||||
|
return ptyCstmrConectHistRepository.save(entity); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* refresh Token 저장 처리 |
||||||
|
* @param cstmrSno |
||||||
|
* @param refreshToken |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public PtyCstmrBas refreshTokenSave(int cstmrSno , String refreshToken) throws Exception{ |
||||||
|
|
||||||
|
Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
PtyCstmrBas entity = optional.get(); |
||||||
|
entity.setRfrshToken(refreshToken); |
||||||
|
|
||||||
|
return ptyCstmrBasRepository.save(entity); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 프로필 조회 |
||||||
|
* @param cstmrSno |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public JwtProfileRsModel profile(int cstmrSno) throws Exception{ |
||||||
|
JwtProfileRsModel model = query.findUserProfile(cstmrSno); |
||||||
|
// model.setMemberName(EncryptUtils.decrypt(model.getMemberName()));
|
||||||
|
|
||||||
|
return model; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* token 만료시 refresh 토큰으로 재검색 |
||||||
|
* @param cstmrSno |
||||||
|
* @param refreshToken |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public JwtRsModel findRefreshtoken(int cstmrSno , String refreshToken) { |
||||||
|
JwtUserModel userDetails = query.findRefreshtoken(cstmrSno, refreshToken); |
||||||
|
|
||||||
|
if(userDetails == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
String accessToken = jwtTokenUtil.generateToken(userDetails); |
||||||
|
|
||||||
|
JwtRsModel result = new JwtRsModel(); |
||||||
|
result.setAccessToken(accessToken); |
||||||
|
result.setRefreshToken(refreshToken); |
||||||
|
result.setAuth(userDetails.getAuth()); |
||||||
|
result.setUserId(userDetails.getUserId()); |
||||||
|
result.setCstmrSno(userDetails.getCstmrSno()); |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.service; |
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.security.core.userdetails.UserDetailsService; |
||||||
|
import org.springframework.security.core.userdetails.UsernameNotFoundException; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository; |
||||||
|
import com.palnet.comn.utils.JsonUtils; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Service |
||||||
|
@RequiredArgsConstructor |
||||||
|
@Log4j2 |
||||||
|
public class JwtUserDetailsService implements UserDetailsService{ |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrQueryRepository query ; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrBasRepository repository; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public JwtUserModel loadUserByUsername(String username){ |
||||||
|
|
||||||
|
JwtUserModel model = query.findUserPassword(username); |
||||||
|
// log.debug("jwtUser>>>>" + JsonUtils.toJson(model));
|
||||||
|
if(model == null) { |
||||||
|
return null; |
||||||
|
}else { |
||||||
|
return model; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,166 @@ |
|||||||
|
package com.palnet.biz.api.acnt.jwt.utils; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; |
||||||
|
import io.jsonwebtoken.Claims; |
||||||
|
import io.jsonwebtoken.Jwts; |
||||||
|
import io.jsonwebtoken.SignatureAlgorithm; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
import org.springframework.beans.factory.annotation.Value; |
||||||
|
import org.springframework.security.core.userdetails.UserDetails; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
import org.springframework.web.context.request.RequestContextHolder; |
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import java.io.Serializable; |
||||||
|
import java.util.*; |
||||||
|
import java.util.function.Function; |
||||||
|
|
||||||
|
@Component |
||||||
|
@Log4j2 |
||||||
|
public class JwtTokenUtil implements Serializable { |
||||||
|
|
||||||
|
private static final long serialVersionUID = -2550185165626007488L; |
||||||
|
|
||||||
|
public static final long JWT_TOKEN_VALIDITY = 5 * 60 * 60; // 5시간
|
||||||
|
// public static final long JWT_TOKEN_VALIDITY = 10; // 10초
|
||||||
|
public static final long JWT_REFRESH_TOKEN_VALIDTY = 21* 24 * 60 * 60; //21일
|
||||||
|
|
||||||
|
|
||||||
|
@Value("${spring.jwt.secret}") |
||||||
|
private String secret; |
||||||
|
@Value("${spring.jwt.prefix}") |
||||||
|
private String JWT_PREFIX; |
||||||
|
|
||||||
|
//retrieve username from jwt token
|
||||||
|
// jwt token으로부터 username을 획득한다.
|
||||||
|
public String getUsernameFromToken(String token) { |
||||||
|
return getClaimFromToken(token, Claims::getSubject); |
||||||
|
} |
||||||
|
|
||||||
|
//retrieve expiration date from jwt token
|
||||||
|
// jwt token으로부터 만료일자를 알려준다.
|
||||||
|
public Date getExpirationDateFromToken(String token) { |
||||||
|
return getClaimFromToken(token, Claims::getExpiration); |
||||||
|
} |
||||||
|
|
||||||
|
public <T> T getClaimFromToken(String token, Function<Claims, T> claimsResolver) { |
||||||
|
final Claims claims = getAllClaimsFromToken(token); |
||||||
|
return claimsResolver.apply(claims); |
||||||
|
} |
||||||
|
//for retrieveing any information from token we will need the secret key
|
||||||
|
private Claims getAllClaimsFromToken(String token) { |
||||||
|
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); |
||||||
|
} |
||||||
|
|
||||||
|
//check if the token has expired
|
||||||
|
// 토큰이 만료되었는지 확인한다.
|
||||||
|
private Boolean isTokenExpired(String token) { |
||||||
|
final Date expiration = getExpirationDateFromToken(token); |
||||||
|
// log.debug(">>>" + expiration);
|
||||||
|
return expiration.before(new Date()); |
||||||
|
} |
||||||
|
|
||||||
|
//generate token for user
|
||||||
|
// 유저를 위한 토큰을 발급해준다.
|
||||||
|
public String generateToken(JwtUserModel userDetails) { |
||||||
|
Map<String, Object> claims = new HashMap<>(); |
||||||
|
claims.put("userId", userDetails.getUserId()); |
||||||
|
claims.put("cstmrSno", userDetails.getCstmrSno()); |
||||||
|
claims.put("auth", userDetails.getAuth()); |
||||||
|
claims.put("group", userDetails.getGroup()); |
||||||
|
return doGenerateToken(claims, userDetails.getUsername()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public String generateRefreshToken(JwtUserModel userDetails) { |
||||||
|
Map<String, Object> claims = new HashMap<>(); |
||||||
|
claims.put("userId", userDetails.getUserId()); |
||||||
|
claims.put("cstmrSno", userDetails.getCstmrSno()); |
||||||
|
return doGenerateRefreshToken(claims, userDetails.getUsername()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//while creating the token -
|
||||||
|
//1. Define claims of the token, like Issuer, Expiration, Subject, and the ID
|
||||||
|
//2. Sign the JWT using the HS512 algorithm and secret key.
|
||||||
|
//3. According to JWS Compact Serialization(https://tools.ietf.org/html/draft-ietf-jose-json-web-signature-41#section-3.1)
|
||||||
|
// compaction of the JWT to a URL-safe string
|
||||||
|
private String doGenerateToken(Map<String, Object> claims, String subject) { |
||||||
|
|
||||||
|
return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis())) |
||||||
|
.setExpiration(new Date(System.currentTimeMillis() + JWT_TOKEN_VALIDITY * 1000)) |
||||||
|
.signWith(SignatureAlgorithm.HS512, secret).compact(); |
||||||
|
} |
||||||
|
|
||||||
|
private String doGenerateRefreshToken(Map<String , Object> claims , String subject) { |
||||||
|
return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis())) |
||||||
|
.setExpiration(new Date(System.currentTimeMillis() + JWT_REFRESH_TOKEN_VALIDTY * 1000)) |
||||||
|
.signWith(SignatureAlgorithm.HS512, secret).compact(); |
||||||
|
} |
||||||
|
|
||||||
|
//validate token
|
||||||
|
public Boolean validateToken(String token, UserDetails userDetails) { |
||||||
|
final String username = getUsernameFromToken(token); |
||||||
|
return (username.equals(userDetails.getUsername()) && !isTokenExpired(token)); |
||||||
|
} |
||||||
|
|
||||||
|
public String getUserIdByToken() { |
||||||
|
HttpServletRequest rq = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
||||||
|
String token = rq.getHeader("Authorization"); |
||||||
|
|
||||||
|
if(token == null || "".equals(token)) return null; |
||||||
|
|
||||||
|
token = token.substring(JWT_PREFIX.length()).trim(); |
||||||
|
String userId = getUsernameFromToken(token); |
||||||
|
|
||||||
|
return userId; |
||||||
|
} |
||||||
|
public Integer getCstmrSnoByToken() { |
||||||
|
HttpServletRequest rq = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
||||||
|
String token = rq.getHeader("Authorization"); |
||||||
|
|
||||||
|
if(token == null || "".equals(token)) return null; |
||||||
|
|
||||||
|
token = token.substring(JWT_PREFIX.length()).trim(); |
||||||
|
Claims payload = getAllClaimsFromToken(token); |
||||||
|
Integer cstmrSno = payload.get("cstmrSno",Integer.class); |
||||||
|
|
||||||
|
return cstmrSno; |
||||||
|
} |
||||||
|
|
||||||
|
public List<JwtGroupModel> getGroupAuthByToken() { |
||||||
|
HttpServletRequest rq = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
||||||
|
String token = rq.getHeader("Authorization"); |
||||||
|
|
||||||
|
if(token == null || "".equals(token)) return null; |
||||||
|
|
||||||
|
token = token.substring(JWT_PREFIX.length()).trim(); |
||||||
|
Claims payload = getAllClaimsFromToken(token); |
||||||
|
List<LinkedHashMap> groupList = payload.get("group", ArrayList.class); |
||||||
|
List<JwtGroupModel> r = new ArrayList<>(); |
||||||
|
|
||||||
|
if(groupList!=null) { |
||||||
|
for(LinkedHashMap<String, String> map : groupList){ |
||||||
|
JwtGroupModel model = new JwtGroupModel(); |
||||||
|
model.setGroupId(map.get("groupId")); |
||||||
|
model.setGroupAuthCd(map.get("groupAuthCd")); |
||||||
|
r.add(model); |
||||||
|
} |
||||||
|
} |
||||||
|
return r; |
||||||
|
} |
||||||
|
|
||||||
|
public String getUserAuthByToken() { |
||||||
|
HttpServletRequest rq = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
||||||
|
String token = rq.getHeader("Authorization"); |
||||||
|
|
||||||
|
if(token == null || "".equals(token)) return null; |
||||||
|
|
||||||
|
token = token.substring(JWT_PREFIX.length()).trim(); |
||||||
|
Claims payload = getAllClaimsFromToken(token); |
||||||
|
|
||||||
|
return payload.get("auth", String.class); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,74 @@ |
|||||||
|
package com.palnet.biz.api.acnt.terms.controller; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
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.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.terms.model.AcntTermsRqModel; |
||||||
|
import com.palnet.biz.api.acnt.terms.model.AcntTermsRsModel; |
||||||
|
import com.palnet.biz.api.acnt.terms.service.AcntTermsService; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.service.AnlsHstryService; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.biz.api.ctr.cntrl.service.CtrCntrlService; |
||||||
|
import com.palnet.biz.sample.entity.SampleEntity; |
||||||
|
import com.palnet.biz.sample.service.SampleService; |
||||||
|
import com.palnet.comn.model.GPHistoryModel; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/acnt/terms", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "약관 기본", description = "약관 관련 API") |
||||||
|
public class AcntTermsController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final AcntTermsService service; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(value = "/list") |
||||||
|
@Tag(name = "약관 기본", description = "약관 관련 API") |
||||||
|
@ApiOperation(value = "약관 기본 정보") |
||||||
|
public ResponseEntity<? extends BasicResponse> list(AcntTermsRqModel rq) { |
||||||
|
List<AcntTermsRsModel> result = null; |
||||||
|
|
||||||
|
log.debug("RQ>>>>>>>>" , rq.toString()); |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.list(rq); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
package com.palnet.biz.api.acnt.terms.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AcntTermsRqModel{ |
||||||
|
|
||||||
|
private String siteCd; |
||||||
|
|
||||||
|
private String langDivCd; |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.palnet.biz.api.acnt.terms.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AcntTermsRsModel{ |
||||||
|
|
||||||
|
private int termsSno ; |
||||||
|
|
||||||
|
private String siteCd; |
||||||
|
|
||||||
|
private Date estbshDate; |
||||||
|
|
||||||
|
private String termsCtgryCd; |
||||||
|
|
||||||
|
private String langDivCd; |
||||||
|
|
||||||
|
private String termsTitleNm; |
||||||
|
|
||||||
|
private String termsCn; |
||||||
|
|
||||||
|
private String simpleCn; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.palnet.biz.api.acnt.terms.service; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.terms.model.AcntTermsRqModel; |
||||||
|
import com.palnet.biz.api.acnt.terms.model.AcntTermsRsModel; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyTermsQueryRepository; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class AcntTermsService { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||||
|
|
||||||
|
// @Autowired
|
||||||
|
// private CtrCntrlBasRepository ctrCntrlBasRepository;
|
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyTermsQueryRepository query; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public List<AcntTermsRsModel> list(AcntTermsRqModel rq){ |
||||||
|
|
||||||
|
List<AcntTermsRsModel> resultList = query.list(rq); |
||||||
|
|
||||||
|
return resultList; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,112 @@ |
|||||||
|
package com.palnet.biz.api.anls.hstry.controller; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryGroupModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRsModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.service.AnlsHstryService; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
import com.palnet.comn.utils.JsonUtils; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/anls/hstry", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "비행 이력 현황", description = "비행 이력 현황 관련 API") |
||||||
|
public class AnlsHstryController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final AnlsHstryService service; |
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(value = "/list") |
||||||
|
@ApiOperation(value = "비행 현황 목록 출력") |
||||||
|
@Tag(name = "비행 이력 현황", description = "비행 이력 현황 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> list(AnlsHstryGroupModel rq) { |
||||||
|
List<AnlsHstryModel> rs = null; |
||||||
|
ComnPagingRs<AnlsHstryModel> response; |
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(rq.getStDate() == null || !(rq.getStDate().length() == 10) || rq.getEndDate() ==null || !(rq.getEndDate().length() == 10) ) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
response = service.list(rq); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(response)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping(value = "/detail/{id}") |
||||||
|
@ApiOperation(value = "비행 현황 상세") |
||||||
|
@Tag(name = "비행 이력 현황", description = "비행 이력 현황 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> detail(@PathVariable String id) { |
||||||
|
AnlsHstryModel result = null; |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.detail(id); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<AnlsHstryModel>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(value = "/log/{id}") |
||||||
|
@ApiOperation(value = "비행 이력 데이터") |
||||||
|
@Tag(name = "비행 이력 현황", description = "비행 이력 현황 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> log(@PathVariable String id) { |
||||||
|
List<AnlsHstryDetailModel> result = null; |
||||||
|
try { |
||||||
|
result = service.hstryList(id); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package com.palnet.biz.api.anls.hstry.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AnlsHstryDetailModel{ |
||||||
|
|
||||||
|
private int hstrySno; |
||||||
|
|
||||||
|
private String cntrlId; |
||||||
|
|
||||||
|
private String idntfNum; |
||||||
|
|
||||||
|
private String trmnlId; |
||||||
|
|
||||||
|
private String mssgTypeCd; |
||||||
|
|
||||||
|
private String statusCd; |
||||||
|
|
||||||
|
private Double lat; |
||||||
|
|
||||||
|
private Double lon; |
||||||
|
|
||||||
|
private Double speed; |
||||||
|
|
||||||
|
private String speedType; |
||||||
|
|
||||||
|
private Double heading; |
||||||
|
|
||||||
|
private Double elev; |
||||||
|
|
||||||
|
private String elevType; |
||||||
|
|
||||||
|
private Double mvDstnc; |
||||||
|
|
||||||
|
private Double bttrLvl; |
||||||
|
|
||||||
|
private Double bttrVltg; |
||||||
|
|
||||||
|
private Date trmnlRcvDt; |
||||||
|
|
||||||
|
private Date srvrRcvDt; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package com.palnet.biz.api.anls.hstry.model; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingModel; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class AnlsHstryGroupModel extends ComnPagingModel { |
||||||
|
|
||||||
|
private String stDate; |
||||||
|
|
||||||
|
private String endDate; |
||||||
|
|
||||||
|
private String search1; |
||||||
|
|
||||||
|
private String searchType1; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,79 @@ |
|||||||
|
package com.palnet.biz.api.anls.hstry.model; |
||||||
|
|
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Comparator; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import javax.persistence.Column; |
||||||
|
import javax.persistence.Id; |
||||||
|
|
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
|
||||||
|
import io.netty.util.internal.StringUtil; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AnlsHstryModel{ |
||||||
|
|
||||||
|
private String cntrlId; |
||||||
|
|
||||||
|
private String idntfNum; |
||||||
|
|
||||||
|
private String statusCd; |
||||||
|
|
||||||
|
private String objectTypeCd; |
||||||
|
|
||||||
|
private Date flghtStDt; |
||||||
|
|
||||||
|
private Date flghtEndDt; |
||||||
|
|
||||||
|
private Date cntrlStDt; |
||||||
|
|
||||||
|
private Date cntrlEndDt; |
||||||
|
|
||||||
|
private Double ttlTime= 0.0; |
||||||
|
|
||||||
|
private String ttlTimeType; |
||||||
|
|
||||||
|
private Double ttlDstnc= 0.0; |
||||||
|
|
||||||
|
private String ttlDstncType; |
||||||
|
|
||||||
|
private Double avrgSpeed = 0.0; |
||||||
|
|
||||||
|
private String avrgSpeedType; |
||||||
|
|
||||||
|
private Double bttrCnsmptn= 0.0; |
||||||
|
|
||||||
|
private String endTypeCd; |
||||||
|
|
||||||
|
private String actnType; |
||||||
|
|
||||||
|
private String area1 = ""; |
||||||
|
|
||||||
|
private String area2 = ""; |
||||||
|
|
||||||
|
private String area3 = ""; |
||||||
|
|
||||||
|
private String zipCd = ""; |
||||||
|
|
||||||
|
private String landNm = ""; |
||||||
|
|
||||||
|
private String landNum = ""; |
||||||
|
|
||||||
|
private String areaType = ""; |
||||||
|
|
||||||
|
private String areaNm = ""; |
||||||
|
|
||||||
|
private String stArea = ""; |
||||||
|
|
||||||
|
private String endArea = ""; |
||||||
|
|
||||||
|
private Date createDt; |
||||||
|
|
||||||
|
private Date updateDt; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package com.palnet.biz.api.anls.hstry.model; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnRqModel; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class AnlsHstryRqModel extends ComnRqModel{ |
||||||
|
private String cntrlId; |
||||||
|
} |
@ -0,0 +1,83 @@ |
|||||||
|
package com.palnet.biz.api.anls.hstry.model; |
||||||
|
|
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Comparator; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import javax.persistence.Column; |
||||||
|
import javax.persistence.Id; |
||||||
|
|
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
|
||||||
|
import io.netty.util.internal.StringUtil; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AnlsHstryRsModel{ |
||||||
|
|
||||||
|
private String cntrlId; |
||||||
|
|
||||||
|
private String idntfNum; |
||||||
|
|
||||||
|
private String statusCd; |
||||||
|
|
||||||
|
private String objectTypeCd; |
||||||
|
|
||||||
|
private Date flghtStDt; |
||||||
|
|
||||||
|
private Date flghtEndDt; |
||||||
|
|
||||||
|
private Date cntrlStDt; |
||||||
|
|
||||||
|
private Date cntrlEndDt; |
||||||
|
|
||||||
|
private Double ttlTime= 0.0; |
||||||
|
|
||||||
|
private String ttlTimeType; |
||||||
|
|
||||||
|
private Double ttlDstnc= 0.0; |
||||||
|
|
||||||
|
private String ttlDstncType; |
||||||
|
|
||||||
|
private Double avrgSpeed = 0.0; |
||||||
|
|
||||||
|
private String avrgSpeedType; |
||||||
|
|
||||||
|
private Double bttrCnsmptn= 0.0; |
||||||
|
|
||||||
|
private String endTypeCd; |
||||||
|
|
||||||
|
private String actnType; |
||||||
|
|
||||||
|
private String area1 = ""; |
||||||
|
|
||||||
|
private String area2 = ""; |
||||||
|
|
||||||
|
private String area3 = ""; |
||||||
|
|
||||||
|
private String zipCd = ""; |
||||||
|
|
||||||
|
private String landNm = ""; |
||||||
|
|
||||||
|
private String landNum = ""; |
||||||
|
|
||||||
|
private String areaType = ""; |
||||||
|
|
||||||
|
private String areaNm = ""; |
||||||
|
|
||||||
|
private String stArea = ""; |
||||||
|
|
||||||
|
private String endArea = ""; |
||||||
|
|
||||||
|
private String groupId = ""; |
||||||
|
|
||||||
|
private int cstmrSno; |
||||||
|
|
||||||
|
private Date createDt; |
||||||
|
|
||||||
|
private Date updateDt; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,154 @@ |
|||||||
|
package com.palnet.biz.api.anls.hstry.service; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Optional; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.BeanUtils; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.data.domain.PageImpl; |
||||||
|
import org.springframework.data.domain.PageRequest; |
||||||
|
import org.springframework.data.domain.Pageable; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryGroupModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel; |
||||||
|
import com.palnet.biz.jpa.entity.ComIdntfBas; |
||||||
|
import com.palnet.biz.jpa.entity.CtrCntrlBas; |
||||||
|
import com.palnet.biz.jpa.entity.FltPlanBas; |
||||||
|
import com.palnet.biz.jpa.entity.FltPlanPilot; |
||||||
|
import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.com.ComIdntBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.ctr.CtrCntrlHstryAreaRepository; |
||||||
|
import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanPilotRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrGroupRepository; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class AnlsHstryService { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private CtrCntrlBasRepository ctrCntrlBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrGroupRepository ptyCstmrGroupRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private ComArcrftBasRepository comArcrftBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private ComIdntBasRepository comIdntBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private CtrCntrlHstryAreaRepository ctrCntrlHstryAreaRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private FltPlanBasRepository fltPlanBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private FltPlanPilotRepository fltPlanPilotRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private CtrCntrlQueryRepository query; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtTokenUtil jwtTokenUtil; |
||||||
|
|
||||||
|
//비행이력현황 list
|
||||||
|
public ComnPagingRs<AnlsHstryModel> list(AnlsHstryGroupModel rq){ |
||||||
|
Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken(); |
||||||
|
List<JwtGroupModel> groupAuthList = jwtTokenUtil.getGroupAuthByToken(); |
||||||
|
List<JwtGroupModel> adminAuth = new ArrayList<>(); |
||||||
|
String groupAuth = null; |
||||||
|
String appAuth = jwtTokenUtil.getUserAuthByToken(); |
||||||
|
PageImpl<AnlsHstryModel>resultList; |
||||||
|
|
||||||
|
ComnPagingRs<AnlsHstryModel> response = new ComnPagingRs<>(); |
||||||
|
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord()); |
||||||
|
|
||||||
|
if("USER".equals(appAuth) || "ROLE_USER".equals(appAuth)) { |
||||||
|
for(JwtGroupModel list : groupAuthList) { |
||||||
|
if(list.getGroupId().equals(rq.getGroupId())) { |
||||||
|
groupAuth = list.getGroupAuthCd(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
if("NORMAL".equals(groupAuth)) { |
||||||
|
for (JwtGroupModel list : groupAuthList) { |
||||||
|
if("MASTER".equals(list.getGroupAuthCd()) || "LEADER".equals(list.getGroupAuthCd())) { |
||||||
|
adminAuth.add(list); |
||||||
|
} |
||||||
|
} |
||||||
|
List<ComIdntfBas> idntfList = comIdntBasRepository.findIdntfNumber(cstmrSno); |
||||||
|
List<FltPlanBas> basResult = fltPlanBasRepository.findByPlanSno(cstmrSno); |
||||||
|
List<FltPlanPilot> pilotList = fltPlanPilotRepository.findByPlanSno(cstmrSno); |
||||||
|
|
||||||
|
List<FltPlanBas> pilotResult = new ArrayList<>(); |
||||||
|
|
||||||
|
for(FltPlanPilot list : pilotList) { |
||||||
|
pilotResult = fltPlanBasRepository.findBasList(list.getPlanSno()); |
||||||
|
} |
||||||
|
resultList = query.cntrlBasNormalHstryList(rq, pageable, idntfList, basResult, pilotResult); |
||||||
|
|
||||||
|
long total = query.cntrlBasNormalHstryCount(rq, idntfList, basResult, pilotResult); |
||||||
|
|
||||||
|
long totalPage = total % rq.getRecord() > 0 ? total/rq.getRecord() + 1 : total/rq.getRecord(); |
||||||
|
response.setItems(resultList.getContent()); |
||||||
|
response.setTotal(total); |
||||||
|
response.setTotalPage(totalPage); |
||||||
|
response.setPage(rq.getPage()); |
||||||
|
|
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
PageImpl<AnlsHstryModel> result = query.listCntrlBasRs(rq, pageable); |
||||||
|
|
||||||
|
long total = query.countCntrlBasRs(rq, cstmrSno); |
||||||
|
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord(); |
||||||
|
response.setItems(result.getContent()); |
||||||
|
response.setTotal(total); |
||||||
|
response.setTotalPage(totalPage); |
||||||
|
response.setPage(rq.getPage()); |
||||||
|
|
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
public AnlsHstryModel detail(String cntrlId) throws Exception{ |
||||||
|
|
||||||
|
AnlsHstryModel model = new AnlsHstryModel(); |
||||||
|
|
||||||
|
Optional<CtrCntrlBas> optional = ctrCntrlBasRepository.findById(cntrlId); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
CtrCntrlBas entity = optional.get(); |
||||||
|
|
||||||
|
BeanUtils.copyProperties(entity , model); |
||||||
|
|
||||||
|
|
||||||
|
return model; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public List<AnlsHstryDetailModel> hstryList(@PathVariable String id) { |
||||||
|
|
||||||
|
List<AnlsHstryDetailModel> result = query.listCntrlHstryPage(id); |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,160 @@ |
|||||||
|
package com.palnet.biz.api.anls.smlt.controller; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiImplicitParams; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel; |
||||||
|
import com.palnet.biz.api.anls.smlt.model.AnlsSmltDetailModel; |
||||||
|
import com.palnet.biz.api.anls.smlt.model.AnlsSmltStcsModel; |
||||||
|
import com.palnet.biz.api.anls.smlt.service.AnlsSmltService; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
import com.palnet.comn.utils.JsonUtils; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/anls/smlt", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "비행 시뮬레이션", description = "비행 이력 시뮬레이션 관련 API") |
||||||
|
public class AnlsSmltController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final AnlsSmltService service; |
||||||
|
|
||||||
|
/** |
||||||
|
* 비행 현황 목록 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/list") |
||||||
|
@ApiOperation(value = "비행 현황 목록") |
||||||
|
@Tag(name = "비행 시뮬레이션", description = "비행 이력 시뮬레이션 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> list(AnlsHstryRqModel rq) { |
||||||
|
ComnPagingRs<AnlsHstryModel> result = null; |
||||||
|
|
||||||
|
log.debug("JSON>>>>>>>>" , JsonUtils.toJson(rq)); |
||||||
|
log.debug("Param" + rq.getStDate() + "::" + rq.getEndDate()); |
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(rq.getStDate() == null || !(rq.getStDate().length() == 10) || rq.getEndDate() ==null || !(rq.getEndDate().length() == 10) ) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.list(rq); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 비행 이력 데이터 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/hist/{id}") |
||||||
|
@ApiOperation(value = "비행 이력 데이터 조회") |
||||||
|
@Tag(name = "비행 시뮬레이션", description = "비행 이력 시뮬레이션 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> histList(@PathVariable String id) { |
||||||
|
List<AnlsHstryDetailModel> result = null; |
||||||
|
|
||||||
|
try { |
||||||
|
// result = service.list(rq);
|
||||||
|
result = service.histList(id); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 통계 데이터 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/stcs/{id}") |
||||||
|
@ApiOperation(value = "통계 데이터 조회") |
||||||
|
@Tag(name = "비행 시뮬레이션", description = "비행 이력 시뮬레이션 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> stcsList(@PathVariable String id) { |
||||||
|
List<AnlsSmltStcsModel> result = null; |
||||||
|
|
||||||
|
|
||||||
|
try { |
||||||
|
result = service.stcsList(id); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 비행 상세정보 조회 |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/detail/{id}") |
||||||
|
@ApiOperation(value = "비행 상세정보 조회") |
||||||
|
@Tag(name = "비행 시뮬레이션", description = "비행 이력 시뮬레이션 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> detail(@PathVariable String id) { |
||||||
|
AnlsSmltDetailModel result = null; |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.detail(id); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<AnlsSmltDetailModel>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,60 @@ |
|||||||
|
package com.palnet.biz.api.anls.smlt.model; |
||||||
|
|
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Comparator; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import javax.persistence.Column; |
||||||
|
import javax.persistence.Id; |
||||||
|
|
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
|
||||||
|
import io.netty.util.internal.StringUtil; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AnlsSmltDetailModel{ |
||||||
|
|
||||||
|
private String cntrlId; |
||||||
|
|
||||||
|
private String idntfNum; |
||||||
|
|
||||||
|
private Date flghtStDt; |
||||||
|
|
||||||
|
private Date flghtEndDt; |
||||||
|
|
||||||
|
private Date cntrlStDt; |
||||||
|
|
||||||
|
private Date cntrlEndDt; |
||||||
|
|
||||||
|
private Double ttlTime= 0.0; |
||||||
|
|
||||||
|
private String ttlTimeType; |
||||||
|
|
||||||
|
private Double ttlDstnc= 0.0; |
||||||
|
|
||||||
|
private String ttlDstncType; |
||||||
|
|
||||||
|
private Double avrgSpeed = 0.0; |
||||||
|
|
||||||
|
private String avrgSpeedType; |
||||||
|
|
||||||
|
private Double bttrCnsmptn= 0.0; |
||||||
|
|
||||||
|
private String stArea = ""; |
||||||
|
|
||||||
|
private String endArea = ""; |
||||||
|
|
||||||
|
private String arcrftTypeCd = ""; |
||||||
|
|
||||||
|
private String prdctNum = ""; |
||||||
|
|
||||||
|
private String arcrftModelNm = ""; |
||||||
|
|
||||||
|
private String imageUrl = ""; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package com.palnet.biz.api.anls.smlt.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AnlsSmltHistModel{ |
||||||
|
|
||||||
|
private int hstrySno; |
||||||
|
|
||||||
|
private String cntrlId; |
||||||
|
|
||||||
|
private String trmnlId; |
||||||
|
|
||||||
|
private String mssgTypeCd; |
||||||
|
|
||||||
|
private String statusCd; |
||||||
|
|
||||||
|
private double lat; |
||||||
|
|
||||||
|
private double lon; |
||||||
|
|
||||||
|
private double speed; |
||||||
|
|
||||||
|
private String speedType; |
||||||
|
|
||||||
|
private double heading; |
||||||
|
|
||||||
|
private double elev; |
||||||
|
|
||||||
|
private String elevType; |
||||||
|
|
||||||
|
private double mvDstnc; |
||||||
|
|
||||||
|
private String mvDstncType; |
||||||
|
|
||||||
|
private double bttrLvl; |
||||||
|
|
||||||
|
private double bttrVltg; |
||||||
|
|
||||||
|
private Date trmnlRcvDt; |
||||||
|
|
||||||
|
private Date srvrRcvDt; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package com.palnet.biz.api.anls.smlt.model; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnRqModel; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class AnlsSmltRqModel extends ComnRqModel{ |
||||||
|
|
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package com.palnet.biz.api.anls.smlt.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class AnlsSmltStcsModel{ |
||||||
|
|
||||||
|
private String dateCd; |
||||||
|
|
||||||
|
private String timeCd; |
||||||
|
|
||||||
|
private Double avrgSpeed; |
||||||
|
|
||||||
|
private String speedType; |
||||||
|
|
||||||
|
private Double avrgElev; |
||||||
|
|
||||||
|
private String elevType; |
||||||
|
|
||||||
|
private Double avrgMvDstnc; |
||||||
|
|
||||||
|
private String mvDstncType; |
||||||
|
|
||||||
|
private Double minBttrLvl; |
||||||
|
|
||||||
|
private Double maxBttrLvl; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,227 @@ |
|||||||
|
package com.palnet.biz.api.anls.smlt.service; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.Comparator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.data.domain.PageImpl; |
||||||
|
import org.springframework.data.domain.PageRequest; |
||||||
|
import org.springframework.data.domain.Pageable; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryDetailModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRqModel; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRsModel; |
||||||
|
import com.palnet.biz.api.anls.smlt.model.AnlsSmltDetailModel; |
||||||
|
import com.palnet.biz.api.anls.smlt.model.AnlsSmltStcsModel; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.jpa.entity.ComIdntfBas; |
||||||
|
import com.palnet.biz.jpa.entity.CtrCntrlHstryArea; |
||||||
|
import com.palnet.biz.jpa.entity.FltPlanBas; |
||||||
|
import com.palnet.biz.jpa.entity.FltPlanPilot; |
||||||
|
import com.palnet.biz.jpa.repository.com.ComIdntBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanPilotRepository; |
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
import com.palnet.comn.utils.NumberUtils; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class AnlsSmltService { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private CtrCntrlBasRepository ctrCntrlBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private CtrCntrlQueryRepository query; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private ComIdntBasRepository comIdntBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private FltPlanBasRepository fltPlanBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private FltPlanPilotRepository fltPlanPilotRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtTokenUtil jwtTokenUtil; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 비행 현황 목록 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public ComnPagingRs<AnlsHstryModel> list(AnlsHstryRqModel rq){ |
||||||
|
String appAuth = jwtTokenUtil.getUserAuthByToken(); |
||||||
|
List<JwtGroupModel> groupAuth = jwtTokenUtil.getGroupAuthByToken(); |
||||||
|
List<JwtGroupModel> adminAuth = new ArrayList<>(); |
||||||
|
Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken(); |
||||||
|
ComnPagingRs<AnlsHstryModel> response = new ComnPagingRs<>(); |
||||||
|
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord()); |
||||||
|
|
||||||
|
PageImpl<AnlsHstryModel> result; |
||||||
|
List<AnlsHstryModel>resultList = new ArrayList<>(); |
||||||
|
|
||||||
|
if("SUPER".equals(appAuth)||"ADMIN".equals(appAuth)) {// App 권한이 수퍼 / 어드민일 경우 목록 전부 표출
|
||||||
|
long total = resultList.size(); |
||||||
|
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord(); |
||||||
|
|
||||||
|
result = query.listCntrlBas(rq, pageable); |
||||||
|
|
||||||
|
response.setItems(result.getContent()); |
||||||
|
response.setTotal(total); |
||||||
|
response.setTotalPage(totalPage); |
||||||
|
response.setPage(rq.getPage()); |
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
if("USER".equals(appAuth) || "ROLE_USER".equals(appAuth)) { |
||||||
|
for (JwtGroupModel list : groupAuth) { |
||||||
|
if("MASTER".equals(list.getGroupAuthCd()) || "LEADER".equals(list.getGroupAuthCd())) { |
||||||
|
adminAuth.add(list); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
List<ComIdntfBas> idntfList = comIdntBasRepository.findIdntfNumber(cstmrSno); |
||||||
|
List<FltPlanBas> basResult = fltPlanBasRepository.findByPlanSno(cstmrSno); |
||||||
|
List<FltPlanPilot> pilotList = fltPlanPilotRepository.findByPlanSno(cstmrSno); |
||||||
|
|
||||||
|
List<FltPlanBas> pilotResult = new ArrayList<>(); |
||||||
|
|
||||||
|
for(FltPlanPilot list : pilotList) { |
||||||
|
pilotResult = fltPlanBasRepository.findBasList(list.getPlanSno()); |
||||||
|
} |
||||||
|
result = query.cntrlBasNormalSmltList(rq, pageable, adminAuth, idntfList, basResult, pilotResult); // App 권한은 user이지만 group 권한이 LEADER / MASTER인 그룹이 있는 경우 해당 비행 이력 목록 표출
|
||||||
|
// group 권한이 Normal인 경우 본인이 작성한 비행계획서의 이력 / 본인이 조종사인 기체 이력/ 본인이 등록한 기체 이력 표출
|
||||||
|
|
||||||
|
long total = query.cntrlBasNormalSmltCount(rq, adminAuth, idntfList, basResult, pilotResult); |
||||||
|
|
||||||
|
long totalPage = total % rq.getRecord() > 0 ? total/rq.getRecord() + 1 : total/rq.getRecord(); |
||||||
|
response.setItems(result.getContent()); |
||||||
|
response.setTotal(total); |
||||||
|
response.setTotalPage(totalPage); |
||||||
|
response.setPage(rq.getPage()); |
||||||
|
|
||||||
|
return response; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @param rq비행 이력 데이터 조회 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<AnlsHstryDetailModel> histList(String id){ |
||||||
|
|
||||||
|
List<AnlsHstryDetailModel> resultList = query.listCntrlHstry(id); |
||||||
|
|
||||||
|
//정렬 순서 뒤집기 처리
|
||||||
|
Collections.reverse(resultList); |
||||||
|
|
||||||
|
return resultList; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 통계 데이터 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<AnlsSmltStcsModel> stcsList(String id){ |
||||||
|
|
||||||
|
List<AnlsSmltStcsModel> result = query.anlsSmltStcs(id); |
||||||
|
|
||||||
|
|
||||||
|
//통계 데이터 가공 처리
|
||||||
|
//소수점 자리 1자리로 컷트
|
||||||
|
for(AnlsSmltStcsModel model : result) { |
||||||
|
|
||||||
|
model.setAvrgElev(NumberUtils.formatZero2(model.getAvrgElev())); |
||||||
|
model.setAvrgMvDstnc(NumberUtils.formatZero2(model.getAvrgMvDstnc())); |
||||||
|
model.setAvrgSpeed(NumberUtils.formatZero2(model.getAvrgSpeed())); |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 비행 상세정보 조회 |
||||||
|
* @param cntrlId |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public AnlsSmltDetailModel detail(String cntrlId) throws Exception{ |
||||||
|
|
||||||
|
AnlsSmltDetailModel result = new AnlsSmltDetailModel(); |
||||||
|
|
||||||
|
|
||||||
|
result = query.anlsSmltDetail(cntrlId); |
||||||
|
|
||||||
|
// Optional<CtrCntrlBas> optional = ctrCntrlBasRepository.findById(cntrlId);
|
||||||
|
//
|
||||||
|
// if (!optional.isPresent()) {
|
||||||
|
// throw new CustomException(ErrorCode.DATA_NOTFIND);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// CtrCntrlBas entity = optional.get();
|
||||||
|
//
|
||||||
|
// BeanUtils.copyProperties(entity , result);
|
||||||
|
|
||||||
|
|
||||||
|
List<CtrCntrlHstryArea> areaList = query.detailArea(cntrlId); |
||||||
|
|
||||||
|
|
||||||
|
for(CtrCntrlHstryArea area : areaList) { |
||||||
|
if(area != null) { |
||||||
|
String areaNm = ""; |
||||||
|
if(!StringUtils.isEmpty(area.getArea1())) { |
||||||
|
areaNm = areaNm + " " + area.getArea1(); |
||||||
|
} |
||||||
|
|
||||||
|
if(!StringUtils.isEmpty(area.getArea2())) { |
||||||
|
areaNm = areaNm + " " + area.getArea2(); |
||||||
|
} |
||||||
|
|
||||||
|
if(!StringUtils.isEmpty(area.getArea3())) { |
||||||
|
areaNm = areaNm + " " + area.getArea3(); |
||||||
|
} |
||||||
|
|
||||||
|
if(!StringUtils.isEmpty(area.getLandNm())) { |
||||||
|
areaNm = areaNm + " " + area.getLandNm(); |
||||||
|
} |
||||||
|
|
||||||
|
if(!StringUtils.isEmpty(area.getLandNum())) { |
||||||
|
areaNm = areaNm + " " + area.getLandNum(); |
||||||
|
} |
||||||
|
|
||||||
|
if(area.getActnType().equals("01")) { |
||||||
|
result.setStArea(areaNm); |
||||||
|
}else if(area.getActnType().equals("99")) { |
||||||
|
result.setEndArea(areaNm); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
return result; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,311 @@ |
|||||||
|
package com.palnet.biz.api.bas.dron.controller; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.util.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.dron.model.BasDronModel; |
||||||
|
import com.palnet.biz.api.bas.dron.model.BasDronRqModel; |
||||||
|
import com.palnet.biz.api.bas.dron.model.BasIdntfModel; |
||||||
|
import com.palnet.biz.api.bas.dron.model.BasIdntfRqModel; |
||||||
|
import com.palnet.biz.api.bas.dron.service.BasDronService; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/bas/dron", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "드론 컨트롤러", description = "드론 관련 API") |
||||||
|
public class BasDronController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final BasDronService service; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 목록 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/list") |
||||||
|
@ApiOperation(value = "드론 목록 조회") |
||||||
|
@Tag(name = "드론 컨트롤러", description = "드론 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> list(BasDronRqModel rq) { |
||||||
|
ComnPagingRs<BasDronModel> result = null; |
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(StringUtils.isEmpty(rq.getGroupId())) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.list(rq); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 식별정보 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/idntf/list/{id}") |
||||||
|
@ApiOperation(value = "식별정보 조회") |
||||||
|
@Tag(name = "드론 컨트롤러", description = "드론 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "기체일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> mylist(@PathVariable Integer id) { |
||||||
|
List<BasIdntfModel> result = null; |
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(StringUtils.isEmpty(id)) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.listIdntf(id); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 상세 조회 |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/detail/{id}") |
||||||
|
@ApiOperation(value = "드론 상세 조회") |
||||||
|
@Tag(name = "드론 컨트롤러", description = "드론 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "기체일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> detail(@PathVariable Integer id) { |
||||||
|
BasDronModel result = null; |
||||||
|
|
||||||
|
try { |
||||||
|
//입력값 검증
|
||||||
|
if(StringUtils.isEmpty(id)) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
result = service.detail(id); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<BasDronModel>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 생성 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@PostMapping(value = "/create") |
||||||
|
@ApiOperation(value = "드론정보 생성") |
||||||
|
@Tag(name = "드론 컨트롤러", description = "드론 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> create(@RequestBody BasDronModel rq) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.create(rq); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
}catch(CustomException e2) { |
||||||
|
log.error("IGNORE : {}", e2); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e2.getErrorCode()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
}catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 생성 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@PostMapping(value = "/idntf/create") |
||||||
|
@ApiOperation(value = "식별장치 생성") |
||||||
|
@Tag(name = "드론 컨트롤러", description = "드론 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> createIdntf(@RequestBody BasIdntfRqModel rq) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
// boolean result = service.create(rq);
|
||||||
|
boolean result = service.createIdntf(rq); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
}catch(CustomException e2) { |
||||||
|
log.error("IGNORE : {}", e2); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e2.getErrorCode()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} |
||||||
|
catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 수정 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@PutMapping(value = "/update") |
||||||
|
@ApiOperation(value = "드론정보 수정") |
||||||
|
@Tag(name = "드론 컨트롤러", description = "드론 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> update(@RequestBody BasDronModel rq) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.update(rq); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} |
||||||
|
catch(CustomException e2) { |
||||||
|
log.error("IGNORE : {}", e2); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e2.getErrorCode()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
}catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 삭제 |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@DeleteMapping(value = "/delete/{id}") |
||||||
|
@ApiOperation(value = "드론정보 삭제") |
||||||
|
@Tag(name = "드론 컨트롤러", description = "드론 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "기체일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> delete(@PathVariable Integer id) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(StringUtils.isEmpty(id)) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
boolean result = service.delete(id); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 식별장치 삭제 |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@DeleteMapping(value = "/idntf/delete/{id}") |
||||||
|
@ApiOperation(value = "식별장치 삭제") |
||||||
|
@Tag(name = "드론 컨트롤러", description = "드론 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "식별번호", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> deleteIdntf(@PathVariable String id) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(StringUtils.isEmpty(id)) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
boolean result = service.deleteIdntf(id); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
package com.palnet.biz.api.bas.dron.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasDronModel { |
||||||
|
|
||||||
|
private String groupNm; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
private int arcrftSno; |
||||||
|
|
||||||
|
private double arcrftHght; |
||||||
|
|
||||||
|
private double arcrftLngth; |
||||||
|
|
||||||
|
private String arcrftModelNm; |
||||||
|
|
||||||
|
private String arcrftTypeCd; |
||||||
|
|
||||||
|
private double arcrftWdth; |
||||||
|
|
||||||
|
private double arcrftWght; |
||||||
|
|
||||||
|
private String cameraYn; |
||||||
|
|
||||||
|
private Date createDt; |
||||||
|
|
||||||
|
private String createUserId; |
||||||
|
|
||||||
|
private String insrncYn; |
||||||
|
|
||||||
|
private String prdctCmpnNm; |
||||||
|
|
||||||
|
private Date prdctDate; |
||||||
|
|
||||||
|
private String prdctNum; |
||||||
|
|
||||||
|
private double takeoffWght; |
||||||
|
|
||||||
|
private Date updateDt; |
||||||
|
|
||||||
|
private String updateUserId; |
||||||
|
|
||||||
|
private String imageUrl; |
||||||
|
|
||||||
|
private String wghtTypeCd; |
||||||
|
|
||||||
|
//식별 번호 정보
|
||||||
|
private String idntfNum; |
||||||
|
|
||||||
|
private String newIdntfNum; //변경된 식별 정보
|
||||||
|
|
||||||
|
private String idntfTypeCd; |
||||||
|
|
||||||
|
private String ownerNm; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package com.palnet.biz.api.bas.dron.model; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingModel; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class BasDronRqModel extends ComnPagingModel { |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
private String arcrftModelNm; |
||||||
|
|
||||||
|
private String arcrftTypeCd; |
||||||
|
|
||||||
|
private String idntfNum; |
||||||
|
|
||||||
|
private String ownerNm; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package com.palnet.biz.api.bas.dron.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasIdntfModel { |
||||||
|
|
||||||
|
//식별 번호 정보
|
||||||
|
private String id; |
||||||
|
private String idntfNum; |
||||||
|
private String isSave; |
||||||
|
|
||||||
|
private int arcrftSno; |
||||||
|
|
||||||
|
private String idntfTypeCd; |
||||||
|
|
||||||
|
private String ownerNm; |
||||||
|
|
||||||
|
private String hpno; |
||||||
|
|
||||||
|
private Date updateDt; |
||||||
|
|
||||||
|
private Date createDt; |
||||||
|
|
||||||
|
private int cstmrSno; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.palnet.biz.api.bas.dron.model; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasIdntfRqModel { |
||||||
|
|
||||||
|
private List<BasIdntfModel> data; |
||||||
|
|
||||||
|
private int arcrftSno; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package com.palnet.biz.api.bas.dron.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasOwnerModel { |
||||||
|
|
||||||
|
private int ownerSno; |
||||||
|
|
||||||
|
private int arcrftSno; |
||||||
|
|
||||||
|
private String ownerNm; |
||||||
|
|
||||||
|
private String hpno; |
||||||
|
|
||||||
|
private String telno; |
||||||
|
|
||||||
|
private String useYn; |
||||||
|
|
||||||
|
private Date createDt; |
||||||
|
|
||||||
|
private String createUserId; |
||||||
|
|
||||||
|
private Date updateDt; |
||||||
|
|
||||||
|
private String updateUserId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,428 @@ |
|||||||
|
package com.palnet.biz.api.bas.dron.service; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Optional; |
||||||
|
|
||||||
|
import org.springframework.beans.BeanUtils; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.data.domain.PageImpl; |
||||||
|
import org.springframework.data.domain.PageRequest; |
||||||
|
import org.springframework.data.domain.Pageable; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRsModel; |
||||||
|
import com.palnet.biz.api.bas.dron.model.BasDronModel; |
||||||
|
import com.palnet.biz.api.bas.dron.model.BasDronRqModel; |
||||||
|
import com.palnet.biz.api.bas.dron.model.BasIdntfModel; |
||||||
|
import com.palnet.biz.api.bas.dron.model.BasIdntfRqModel; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.jpa.entity.ComArcrftBas; |
||||||
|
import com.palnet.biz.jpa.entity.ComIdntfBas; |
||||||
|
import com.palnet.biz.jpa.repository.com.ComArcrftBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.com.ComIdntBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyDronQueryRepository; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
import com.palnet.comn.utils.EncryptUtils; |
||||||
|
|
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Service |
||||||
|
@Log4j2 |
||||||
|
public class BasDronService { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyDronQueryRepository query; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private ComArcrftBasRepository comArcrftBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private ComIdntBasRepository comIdntBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtTokenUtil jwtTokenUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* 드론 목록 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public ComnPagingRs<BasDronModel> list(BasDronRqModel rq){ |
||||||
|
|
||||||
|
ComnPagingRs<BasDronModel> response = new ComnPagingRs<>(); |
||||||
|
|
||||||
|
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord()); |
||||||
|
|
||||||
|
PageImpl<BasDronModel> result = query.list(rq, pageable); |
||||||
|
|
||||||
|
long total = query.listCount(rq); |
||||||
|
|
||||||
|
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord(); |
||||||
|
|
||||||
|
response.setItems(result.getContent()); |
||||||
|
response.setTotal(total); |
||||||
|
response.setPage(rq.getPage()); |
||||||
|
response.setTotalPage(totalPage); |
||||||
|
|
||||||
|
return response; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 식별장치 목록 |
||||||
|
* @param arcrftSno |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<BasIdntfModel> listIdntf(int arcrftSno){ |
||||||
|
|
||||||
|
List<BasIdntfModel> resultList = query.idntfList(arcrftSno); |
||||||
|
|
||||||
|
for(BasIdntfModel model : resultList){ |
||||||
|
if(model.getHpno() != null && !model.getHpno().isEmpty()){ |
||||||
|
model.setHpno(EncryptUtils.decrypt(model.getHpno())); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return resultList; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 상세 조회 |
||||||
|
* @param cntrlId |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public BasDronModel detail(int arcrftSno) throws Exception{ |
||||||
|
|
||||||
|
BasDronModel model = query.detail(arcrftSno); |
||||||
|
|
||||||
|
if (model == null ) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
return model; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 생성 |
||||||
|
* @param |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
@Transactional |
||||||
|
public boolean create(BasDronModel rq) throws Exception{ |
||||||
|
|
||||||
|
// 사전 체크 , 동일한 ID 존재 여부 확인
|
||||||
|
if(!query.isNotPrdctNum(rq.getPrdctNum() , 0)) { |
||||||
|
throw new CustomException(ErrorCode.DATA_DUPLICATE); |
||||||
|
} |
||||||
|
|
||||||
|
// 민감정보 암호화 처리
|
||||||
|
// if(!StringUtils.isEmpty(rq.getHpno())) {
|
||||||
|
// rq.setHpno(EncryptUtils.encrypt(rq.getHpno()));
|
||||||
|
// }
|
||||||
|
// if(!StringUtils.isEmpty(rq.getOwnerNm())) {
|
||||||
|
// rq.setOwnerNm(EncryptUtils.encrypt(rq.getOwnerNm()));
|
||||||
|
// }
|
||||||
|
// if(!StringUtils.isEmpty(rq.getTelno())) {
|
||||||
|
// rq.setTelno(EncryptUtils.encrypt(rq.getTelno()));
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//1. 드론 기본 정보 등록
|
||||||
|
ComArcrftBas comArcrftBas = this.insertComArcrftBas(rq); |
||||||
|
if(comArcrftBas == null) { |
||||||
|
throw new CustomException(ErrorCode.DB_ERROR); |
||||||
|
} |
||||||
|
|
||||||
|
log.debug("===========================>" + comArcrftBas.getArcrftSno()); |
||||||
|
rq.setArcrftSno(comArcrftBas.getArcrftSno()); // KEY 넣기
|
||||||
|
|
||||||
|
//2. 드론 운영자 정보 등록
|
||||||
|
// ComArcrftOwner comArcrftOwner = this.insertComArcrftOwner(rq);
|
||||||
|
// if(comArcrftOwner == null) {
|
||||||
|
// throw new CustomException(ErrorCode.DB_ERROR);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //3. 드론 식별 정보 등록
|
||||||
|
// ComIdntfBas comIdntfBas = this.insertComIdntfBas(rq);
|
||||||
|
// if(comIdntfBas == null) {
|
||||||
|
// throw new CustomException(ErrorCode.DB_ERROR);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//4. 드론 그룹에 연결 등록
|
||||||
|
// PtyGroupArcrft ptyGroupArcrft = this.insertPtyGroupArcrft(rq);
|
||||||
|
// if(ptyGroupArcrft == null) {
|
||||||
|
// throw new CustomException(ErrorCode.DB_ERROR);
|
||||||
|
// }
|
||||||
|
|
||||||
|
return true; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 식밸장치 생성 |
||||||
|
* @param |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
@Transactional |
||||||
|
public boolean createIdntf(BasIdntfRqModel rq) throws Exception{ |
||||||
|
|
||||||
|
if( rq == null && rq.getData().size() == 0) |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
|
||||||
|
|
||||||
|
for(BasIdntfModel model : rq.getData() ) { |
||||||
|
Optional<ComIdntfBas> optional = comIdntBasRepository.findById(model.getIdntfNum()); |
||||||
|
String hpno = EncryptUtils.encrypt(model.getHpno()); |
||||||
|
if (optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_DUPLICATE); |
||||||
|
} |
||||||
|
|
||||||
|
int cstmrSno = jwtTokenUtil.getCstmrSnoByToken(); |
||||||
|
ComIdntfBas entity = new ComIdntfBas(); |
||||||
|
|
||||||
|
BeanUtils.copyProperties(model , entity); |
||||||
|
|
||||||
|
entity.setHpno(hpno); |
||||||
|
entity.setArcrftSno(rq.getArcrftSno()); |
||||||
|
entity.setCreateDt(DateUtils.nowDate()); |
||||||
|
entity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
entity.setCstmrSno(cstmrSno); |
||||||
|
log.debug(entity.toString()); |
||||||
|
|
||||||
|
if( comIdntBasRepository.save(entity) == null ) return false; |
||||||
|
|
||||||
|
} |
||||||
|
return true; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public boolean deleteIdntf(String idntfNum) { |
||||||
|
Optional<ComIdntfBas> optional = comIdntBasRepository.findById(idntfNum); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
ComIdntfBas entity = optional.get(); |
||||||
|
comIdntBasRepository.delete(entity); |
||||||
|
return true; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public ComArcrftBas insertComArcrftBas(BasDronModel model) throws Exception{ |
||||||
|
|
||||||
|
|
||||||
|
ComArcrftBas basEntity = new ComArcrftBas(); |
||||||
|
|
||||||
|
BeanUtils.copyProperties(model , basEntity); |
||||||
|
|
||||||
|
basEntity.setCreateDt(DateUtils.nowDate()); |
||||||
|
basEntity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
basEntity.setUseYn("Y"); |
||||||
|
|
||||||
|
log.debug(basEntity.toString()); |
||||||
|
|
||||||
|
return comArcrftBasRepository.save(basEntity); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public ComIdntfBas insertComIdntfBas(BasDronModel model) throws Exception{ |
||||||
|
ComIdntfBas entity = new ComIdntfBas(); |
||||||
|
|
||||||
|
BeanUtils.copyProperties(model , entity); |
||||||
|
entity.setCreateDt(DateUtils.nowDate()); |
||||||
|
entity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
log.debug(entity.toString()); |
||||||
|
|
||||||
|
return comIdntBasRepository.save(entity); |
||||||
|
} |
||||||
|
|
||||||
|
// public PtyGroupArcrft insertPtyGroupArcrft(BasDronModel model) throws Exception{
|
||||||
|
// PtyGroupArcrft entity = new PtyGroupArcrft();
|
||||||
|
// BeanUtils.copyProperties(model , entity);
|
||||||
|
// entity.setCreateDt(DateUtils.nowDate());
|
||||||
|
// entity.setUpdateDt(DateUtils.nowDate());
|
||||||
|
// entity.setUseYn("Y");
|
||||||
|
// log.debug(entity.toString());
|
||||||
|
//
|
||||||
|
// return ptyGroupArcrftRepository.save(entity);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 수정 |
||||||
|
* @param |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
@Transactional |
||||||
|
public boolean update(BasDronModel rq) throws Exception{ |
||||||
|
|
||||||
|
// 사전 체크 , 동일한 ID 존재 여부 확인
|
||||||
|
if(!query.isNotPrdctNum(rq.getPrdctNum() , rq.getArcrftSno())) { |
||||||
|
throw new CustomException(ErrorCode.DATA_DUPLICATE); |
||||||
|
} |
||||||
|
|
||||||
|
//1. 기체 정보 수정
|
||||||
|
ComArcrftBas comArcrftBas = this.updateComArcrftBas(rq); |
||||||
|
if(comArcrftBas == null) { |
||||||
|
throw new CustomException(ErrorCode.DB_ERROR); |
||||||
|
} |
||||||
|
|
||||||
|
//2-1. 식별장치 수정 필요 여부 체크 newIdnfnum -> idnftNum 비교후 다르면
|
||||||
|
// if(!rq.getNewIdntfNum().equals(rq.getIdntfNum())) {
|
||||||
|
// //2-2 식별번호 중복 체크
|
||||||
|
// if(!query.isNotIdntNum(rq.getNewIdntfNum())) {
|
||||||
|
// throw new CustomException(ErrorCode.DATA_DUPLICATE);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// //2-3식별정보 수정
|
||||||
|
// ComIdntfBas comIdntfBas = this.updateComIdntfBas(rq);
|
||||||
|
//
|
||||||
|
// if(comIdntfBas == null) {
|
||||||
|
// throw new CustomException(ErrorCode.DB_ERROR);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
//민감 정보 암호화 처리
|
||||||
|
// 민감정보 암호화 처리
|
||||||
|
// if(!StringUtils.isEmpty(rq.getHpno())) {
|
||||||
|
// rq.setHpno(EncryptUtils.encrypt(rq.getHpno()));
|
||||||
|
// }
|
||||||
|
// if(!StringUtils.isEmpty(rq.getOwnerNm())) {
|
||||||
|
// rq.setOwnerNm(EncryptUtils.encrypt(rq.getOwnerNm()));
|
||||||
|
// }
|
||||||
|
// if(!StringUtils.isEmpty(rq.getTelno())) {
|
||||||
|
// rq.setTelno(EncryptUtils.encrypt(rq.getTelno()));
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
//3. 운영자 정보 수정
|
||||||
|
// ComArcrftOwner comArcrftOwner = this.updateComArcrftOwner(rq);
|
||||||
|
|
||||||
|
// if(comArcrftOwner == null) {
|
||||||
|
// throw new CustomException(ErrorCode.DB_ERROR);
|
||||||
|
// }
|
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public ComArcrftBas updateComArcrftBas(BasDronModel model) throws Exception{ |
||||||
|
|
||||||
|
|
||||||
|
Optional<ComArcrftBas> optional = comArcrftBasRepository.findById(model.getArcrftSno()); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
ComArcrftBas entity = optional.get(); |
||||||
|
|
||||||
|
entity.setArcrftHght(model.getArcrftHght()); |
||||||
|
entity.setArcrftLngth(model.getArcrftLngth()); |
||||||
|
entity.setArcrftModelNm(model.getArcrftModelNm()); |
||||||
|
entity.setArcrftTypeCd(model.getArcrftTypeCd()); |
||||||
|
entity.setArcrftWdth(model.getArcrftWdth()); |
||||||
|
entity.setArcrftWght(model.getArcrftWght()); |
||||||
|
entity.setCameraYn(model.getCameraYn()); |
||||||
|
entity.setImageUrl(model.getImageUrl()); |
||||||
|
entity.setInsrncYn(model.getInsrncYn()); |
||||||
|
entity.setPrdctCmpnNm(model.getPrdctCmpnNm()); |
||||||
|
entity.setPrdctDate(model.getPrdctDate()); |
||||||
|
entity.setPrdctNum(model.getPrdctNum()); |
||||||
|
entity.setTakeoffWght(model.getTakeoffWght()); |
||||||
|
entity.setUpdateUserId(model.getUpdateUserId()); |
||||||
|
entity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
|
||||||
|
return comArcrftBasRepository.save(entity); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// public ComArcrftOwner updateComArcrftOwner(BasDronModel model) throws Exception{
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Optional<ComArcrftOwner> optional = comArcrftOwnerRepository.findById(model.getOwnerSno());
|
||||||
|
// if (!optional.isPresent()) {
|
||||||
|
// throw new CustomException(ErrorCode.DATA_NOTFIND);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// ComArcrftOwner entity = optional.get();
|
||||||
|
// entity.setUpdateDt(DateUtils.nowDate());
|
||||||
|
// entity.setUpdateUserId(model.getUpdateUserId());
|
||||||
|
//// entity.setOwnerNm(model.getOwnerNm());
|
||||||
|
//// entity.setHpno(model.getHpno());
|
||||||
|
// entity.setTelno(model.getTelno());
|
||||||
|
//
|
||||||
|
// log.debug(entity.toString());
|
||||||
|
//
|
||||||
|
// return comArcrftOwnerRepository.save(entity);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
public ComIdntfBas updateComIdntfBas(BasDronModel model) throws Exception{ |
||||||
|
|
||||||
|
Optional<ComIdntfBas> optional = comIdntBasRepository.findById(model.getIdntfNum()); |
||||||
|
|
||||||
|
if (optional.isPresent()) { |
||||||
|
ComIdntfBas entity = optional.get(); |
||||||
|
comIdntBasRepository.delete(entity); |
||||||
|
} |
||||||
|
|
||||||
|
model.setIdntfNum(model.getNewIdntfNum()); |
||||||
|
|
||||||
|
return this.insertComIdntfBas(model); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 삭제 |
||||||
|
* @param |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
@Transactional |
||||||
|
public boolean delete(int arcrftSno) throws Exception{ |
||||||
|
|
||||||
|
try { |
||||||
|
//1. 기체 정보 사용여부 N 으로 체크
|
||||||
|
Optional<ComArcrftBas> optional = comArcrftBasRepository.findById(arcrftSno); |
||||||
|
if (optional.isPresent()) { |
||||||
|
ComArcrftBas comArcrftBas = optional.get(); |
||||||
|
comArcrftBas.setUseYn("N"); |
||||||
|
comArcrftBasRepository.save(comArcrftBas); |
||||||
|
} |
||||||
|
|
||||||
|
//2. 식별 정보 삭제 처리
|
||||||
|
comIdntBasRepository.deleteByArcrftSno(arcrftSno); |
||||||
|
|
||||||
|
//3. 기체 소유자정보 사용여부 N 처리
|
||||||
|
// comArcrftOwnerRepository.deleteByArcrftSno(arcrftSno);
|
||||||
|
|
||||||
|
//4. 그룹기체 정보 사용여부 N 처리
|
||||||
|
// ptyGroupArcrftRepository.deleteByArcrftSno(arcrftSno);
|
||||||
|
|
||||||
|
return true; |
||||||
|
}catch(Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
throw new CustomException(ErrorCode.DB_ERROR); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,400 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.controller; |
||||||
|
|
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.io.InputStreamReader; |
||||||
|
import java.io.UnsupportedEncodingException; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import org.json.simple.JSONObject; |
||||||
|
import org.json.simple.parser.JSONParser; |
||||||
|
import org.json.simple.parser.ParseException; |
||||||
|
import org.locationtech.jts.geom.Coordinate; |
||||||
|
import org.locationtech.proj4j.CRSFactory; |
||||||
|
import org.locationtech.proj4j.CoordinateReferenceSystem; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.core.env.Environment; |
||||||
|
import org.springframework.core.io.ClassPathResource; |
||||||
|
import org.springframework.core.io.Resource; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightAprovRq; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightScheduleRs; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightWeatherModel; |
||||||
|
import com.palnet.biz.api.bas.flight.service.BasFlightService; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.utils.AreaUtils; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
@RestController |
||||||
|
@RequestMapping(value = "/api/bas/flight", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public class BasFlightController { |
||||||
|
|
||||||
|
private final BasFlightService basFlightService; |
||||||
|
private final Environment env; |
||||||
|
private final CtrTrnsLctnService ctrTrnsLctnService; |
||||||
|
private final AreaUtils utils; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
public BasFlightController(BasFlightService basFlightService, Environment env, CtrTrnsLctnService ctrTrnsLctnService, AreaUtils AreaUtils) { |
||||||
|
this.basFlightService = basFlightService; |
||||||
|
this.env = env; |
||||||
|
this.ctrTrnsLctnService = ctrTrnsLctnService; |
||||||
|
this.utils = AreaUtils; |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/area") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<Object> findAirSpace() throws IOException, ParseException { |
||||||
|
// 1. file read
|
||||||
|
Resource resource = new ClassPathResource("air/airgeo.json"); |
||||||
|
InputStream jsonInputStream = resource.getInputStream(); |
||||||
|
InputStreamReader inputStreamReader = new InputStreamReader(jsonInputStream, "UTF-8"); |
||||||
|
BufferedReader reader = new BufferedReader(inputStreamReader); |
||||||
|
|
||||||
|
// 2. json parsing
|
||||||
|
JSONParser jsonParser = new JSONParser(); |
||||||
|
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader); |
||||||
|
|
||||||
|
// 3. body return
|
||||||
|
String type = (String) jsonObject.get("type"); |
||||||
|
Object airArea = jsonObject; |
||||||
|
List<Object> features = (List<Object>) jsonObject.get("features"); |
||||||
|
|
||||||
|
log.info("type is name : {}", type); |
||||||
|
log.info("features size : {}", features.size()); |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(airArea); |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 조회
|
||||||
|
@GetMapping(value = "/plan/list") |
||||||
|
@ApiOperation(value = "비행계획서 조회") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> findPlanList(BasFlightPlanListRq rq) { |
||||||
|
ComnPagingRs<BasFlightPlanModel> result = null; |
||||||
|
// System.out.println(rq);
|
||||||
|
try { |
||||||
|
result = basFlightService.listPlan(rq); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 상세 조회
|
||||||
|
@GetMapping(value = "/plan/detail/{planSno}") |
||||||
|
@ApiOperation(value = "비행계획서 상세 조회") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
@ApiImplicitParam(name = "planSno",value = "비행계획서일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> detailPlan(@PathVariable("planSno") Integer planSno) { |
||||||
|
BasFlightPlanModel result = null; |
||||||
|
try { |
||||||
|
result = basFlightService.detailPlan(planSno); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 등록
|
||||||
|
@PostMapping(value = "/plan/create") |
||||||
|
@ApiOperation(value = "비행계획서 등록") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> createPlan(@RequestBody BasFlightPlanModel rq) { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
try { |
||||||
|
log.info(">>> rq : {}", rq); |
||||||
|
boolean result = basFlightService.createPlan(rq); |
||||||
|
resultMap.put("result", result); |
||||||
|
log.info(">>> resultMap : " , resultMap); |
||||||
|
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
resultMap.put("errorMessage", e.getMessage()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 수정
|
||||||
|
@PutMapping(value = "/plan/update") |
||||||
|
@ApiOperation(value = "비행계획서 수정") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> updatePlan(@RequestBody BasFlightPlanModel rq) { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
try { |
||||||
|
boolean result = basFlightService.updatePlan(rq); |
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
resultMap.put("errorMessage", e.getMessage()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 삭제
|
||||||
|
@DeleteMapping(value = "/plan/delete/{planSno}") |
||||||
|
@ApiOperation(value = "비행계획서 삭제") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
@ApiImplicitParam(name = "planSno",value = "비행계획서일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> deletePlan(@PathVariable("planSno") Integer planSno) { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
try { |
||||||
|
boolean result = basFlightService.deletePlan(planSno); |
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
// 그룹 조종사 조회
|
||||||
|
@GetMapping(value = "/plan/pilot/{groupId}") |
||||||
|
@ApiOperation(value = "그룹의 조종사 조회") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
@ApiImplicitParam(name = "groupId",value = "그룹ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> findPilot(@PathVariable("groupId") String groupId) { |
||||||
|
List<BasFlightPlanPilotModel> result = null; |
||||||
|
try { |
||||||
|
result = basFlightService.listPilotByGroup(groupId); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
// 그룹 기체 조회
|
||||||
|
@GetMapping(value = "/plan/arcrft/{groupId}") |
||||||
|
@ApiOperation(value = "그룹의 기체 조회") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
@ApiImplicitParam(name = "groupId",value = "그룹ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> findArcrft(@PathVariable("groupId") String groupId) { |
||||||
|
List<BasFlightPlanArcrftModel> result = null; |
||||||
|
try { |
||||||
|
result = basFlightService.listArcrftByGroup(groupId); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// 비행 구역 버퍼 존 생성
|
||||||
|
@PostMapping("/plan/area/buffer") |
||||||
|
@ApiOperation(value = "비행 구역 버퍼 존 생성") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> findBuffer(@RequestBody List<BasFlightPlanAreaModel> rq) { |
||||||
|
List<BasFlightPlanAreaModel> rs = null; |
||||||
|
try { |
||||||
|
rs = basFlightService.getBuffer(rq); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(rs)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/plan/api/weather") |
||||||
|
@ApiOperation(value = "비행계획서 날씨") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> restApiGetWeather(BasFlightWeatherModel rq){ |
||||||
|
JSONObject jsonObject = null; |
||||||
|
|
||||||
|
try { |
||||||
|
jsonObject = basFlightService.getWeather(rq); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(jsonObject)); |
||||||
|
} |
||||||
|
// 비행계획서 리스트(승인)
|
||||||
|
@GetMapping(value = "/aprv/list") |
||||||
|
@ApiOperation(value = "비행계획서 리스트(승인)") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> findAprvList(BasFlightPlanListRq rq) { |
||||||
|
ComnPagingRs<BasFlightPlanModel> result = null; |
||||||
|
try { |
||||||
|
result = basFlightService.aprvList(rq); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
} |
||||||
|
// 비행계획서 승인/미승인
|
||||||
|
@PutMapping(value = "/aprv/proc") |
||||||
|
@ApiOperation(value = "비행 계획서 승인/미승인") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> updateAprvProc(@RequestBody BasFlightAprovRq rq) { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
try { |
||||||
|
int result = basFlightService.aprovePlan(rq); |
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/airspace/contains") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> checkAirspaceContains(@RequestBody List<BasFlightPlanAreaModel> rq) { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
try { |
||||||
|
boolean result = basFlightService.checkAirspaceContains(rq); |
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
//지역 검색
|
||||||
|
@GetMapping("/plan/area/search") |
||||||
|
@ApiOperation(value = "지역 검색") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> searchArea(String query) throws ParseException { |
||||||
|
String text = null; |
||||||
|
try { |
||||||
|
text = URLEncoder.encode(query, "UTF-8"); |
||||||
|
} catch (UnsupportedEncodingException e) { |
||||||
|
throw new RuntimeException("검색어 인코딩 실패", e); |
||||||
|
} |
||||||
|
|
||||||
|
String apiURL = env.getProperty("api.naver.search-url") + "?query=" + text + "&display=5"; |
||||||
|
Map<String, String> requestHeaders = new HashMap<>(); |
||||||
|
requestHeaders.put("X-Naver-Client-Id", env.getProperty("api.naver.client-id")); |
||||||
|
requestHeaders.put("X-Naver-Client-Secret", env.getProperty("api.naver.client-secret-key")); |
||||||
|
String responseBody = basFlightService.searchArea(apiURL, requestHeaders); |
||||||
|
|
||||||
|
JSONParser parser = new JSONParser(); |
||||||
|
Object obj = parser.parse(responseBody); |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(obj)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/schedule") |
||||||
|
@Tag(name = "비행계획서", description = "비행계획서 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> findSchedule(@RequestParam("searchDate") String searchDate) { |
||||||
|
List<BasFlightScheduleRs> response; |
||||||
|
|
||||||
|
try { |
||||||
|
|
||||||
|
response = basFlightService.findSchecdule(searchDate); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(response)); |
||||||
|
} |
||||||
|
|
||||||
|
//test
|
||||||
|
@GetMapping("/test") |
||||||
|
public void createCircleTest(@RequestParam double getX, @RequestParam double getY, @RequestParam double buffer) { |
||||||
|
|
||||||
|
|
||||||
|
Coordinate circleCoord = new Coordinate(getY, getX); |
||||||
|
|
||||||
|
List<Coordinate> coordList = utils.createCircle(circleCoord, buffer); |
||||||
|
for(Coordinate a : coordList) { |
||||||
|
System.out.println("["+a.getX() + ", " + a.getY()+"],"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightAprovRq { |
||||||
|
private List<Integer> planSnoList; |
||||||
|
private String aprvlYn; |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightPlanArcrftModel { |
||||||
|
private Integer planArcrftSno; |
||||||
|
private Integer planSno; |
||||||
|
private Integer arcrftSno; |
||||||
|
private String idntfNum; |
||||||
|
private String groupNm; |
||||||
|
private String prdctNum; |
||||||
|
private String arcrftTypeCd; |
||||||
|
private String arcrftModelNm; |
||||||
|
private String prdctCmpnNm; |
||||||
|
private Date prdctDate; |
||||||
|
private double arcrftLngth; |
||||||
|
private double arcrftWdth; |
||||||
|
private double arcrftHght; |
||||||
|
private double arcrftWght; |
||||||
|
private String wghtTypeCd; |
||||||
|
private String imageUrl; |
||||||
|
private double takeoffWght; |
||||||
|
private String useYn; |
||||||
|
private String cameraYn; |
||||||
|
private String insrncYn; |
||||||
|
private String ownerNm; |
||||||
|
private String createUserId; |
||||||
|
private Date createDt; |
||||||
|
private String updateUserId; |
||||||
|
private Date updateDt; |
||||||
|
private String docState = "R"; |
||||||
|
private String idntfTypeCd; |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightPlanAreaBufferModel { |
||||||
|
|
||||||
|
|
||||||
|
private Integer bufferZone; // 반경
|
||||||
|
private List<BasFlightPlanAreaCoordModel> coordList; // 기초 좌표
|
||||||
|
private List<BasFlightPlanAreaCoordModel> bufferCoordList; // 버퍼 좌표
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightPlanAreaCoordModel { |
||||||
|
private Integer planAreaCoordSno; |
||||||
|
private Integer planAreaSno; |
||||||
|
private double lat; |
||||||
|
private double lon; |
||||||
|
private String createUserId; |
||||||
|
private Date createDt; |
||||||
|
private String docState = "R"; |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.locationtech.jts.geom.Coordinate; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightPlanAreaCoordQueryList { |
||||||
|
|
||||||
|
private Integer planAreaCoordSno; |
||||||
|
private Integer planAreaSno; |
||||||
|
private List<Coordinate> queryCoordList; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightPlanAreaCoordRq { |
||||||
|
private Integer planAreaSno; |
||||||
|
private Integer bufferZone; |
||||||
|
private String areaType; |
||||||
|
private String idntfNum; |
||||||
|
private Integer cnt; |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightPlanAreaModel { |
||||||
|
private Integer planAreaSno; |
||||||
|
private Integer planSno; |
||||||
|
private String areaType; |
||||||
|
private String fltMethod; |
||||||
|
private Integer bufferZone; |
||||||
|
private String fltElev; |
||||||
|
private String createUserId; |
||||||
|
private Date createDt; |
||||||
|
private String updateUserId; |
||||||
|
private Date updateDt; |
||||||
|
private String docState = "R"; |
||||||
|
private List<BasFlightPlanAreaCoordModel> coordList; |
||||||
|
private List<BasFlightPlanAreaCoordModel> bufferCoordList; |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingModel; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class BasFlightPlanListRq extends ComnPagingModel { |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
private Integer cstmrSno; |
||||||
|
private Date schFltStDt; |
||||||
|
private Date schFltEndDt; |
||||||
|
private String aprvlYn; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightPlanModel { |
||||||
|
private Integer planSno; |
||||||
|
private String groupId; |
||||||
|
private Integer cstmrSno; |
||||||
|
private String idntfNum; |
||||||
|
private String memberName; |
||||||
|
private String email; |
||||||
|
private String hpno; |
||||||
|
private String clncd; |
||||||
|
private String addr; |
||||||
|
private String addrDtlCn; |
||||||
|
private String zip; |
||||||
|
private Date schFltStDt; |
||||||
|
private Date schFltEndDt; |
||||||
|
private String fltPurpose; |
||||||
|
private String aprvlYn; |
||||||
|
private String delYn; |
||||||
|
private String createUserId; |
||||||
|
private Date createDt; |
||||||
|
private String updateUserId; |
||||||
|
private Date updateDt; |
||||||
|
private String docState = "R"; |
||||||
|
private List<BasFlightPlanAreaModel> areaList; |
||||||
|
private List<BasFlightPlanPilotModel> pilotList; |
||||||
|
private List<BasFlightPlanArcrftModel> arcrftList; |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightPlanPilotModel { |
||||||
|
private Integer planPilotSno; |
||||||
|
private Integer planSno; |
||||||
|
private Integer cstmrSno; |
||||||
|
private String groupNm; |
||||||
|
private String memberName; |
||||||
|
private String email; |
||||||
|
private String hpno; |
||||||
|
private String clncd; |
||||||
|
private String addr; |
||||||
|
private String addrDtlCn; |
||||||
|
private String zip; |
||||||
|
private String qlfcNo; |
||||||
|
private String carrer; |
||||||
|
private String createUserId; |
||||||
|
private Date createDt; |
||||||
|
private String updateUserId; |
||||||
|
private Date updateDt; |
||||||
|
private String docState = "R"; |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightScheduleRs { |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
private String groupNm; |
||||||
|
private String ownerNm; |
||||||
|
private String idntfNum; |
||||||
|
private String startAddress; |
||||||
|
private String endAddress; |
||||||
|
private Date schFltStDt; |
||||||
|
private Date schFltEndDt; |
||||||
|
private String cntrlId; |
||||||
|
private Date cntrlStDt; |
||||||
|
private Date cntrlEndDt; |
||||||
|
|
||||||
|
// BEFORE (B) : 비행 전, FLYING (F) : 비행 중, SUCCESS (S) : 비행 완료
|
||||||
|
private String statusCd; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasFlightWeatherModel { |
||||||
|
private String serviceKey; |
||||||
|
private String numOfRows; |
||||||
|
private String pageNo; |
||||||
|
private String dataType; |
||||||
|
private String base_date; |
||||||
|
private String base_time; |
||||||
|
private String nx; |
||||||
|
private String ny; |
||||||
|
private double nx2; |
||||||
|
private double ny2; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,102 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.service; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.flight.model.*; |
||||||
|
import com.palnet.biz.jpa.entity.*; |
||||||
|
import org.mapstruct.*; |
||||||
|
import org.mapstruct.factory.Mappers; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
@Mapper |
||||||
|
public interface BasFlightMapper { |
||||||
|
BasFlightMapper mapper = Mappers.getMapper(BasFlightMapper.class); |
||||||
|
|
||||||
|
// to entity
|
||||||
|
@Named("toPlanEntity") |
||||||
|
FltPlanBas modelToEntity(BasFlightPlanModel model); |
||||||
|
|
||||||
|
@Named("toAreaEntity") |
||||||
|
FltPlanArea modelToEntity(BasFlightPlanAreaModel model); |
||||||
|
|
||||||
|
@Named("toCoordEntity") |
||||||
|
FltPlanAreaCoord modelToEntity(BasFlightPlanAreaCoordModel model); |
||||||
|
|
||||||
|
@Named("toPilotEntity") |
||||||
|
FltPlanPilot modelToEntity(BasFlightPlanPilotModel model); |
||||||
|
|
||||||
|
@Named("toArcrftEntity") |
||||||
|
FltPlanArcrft modelToEntity(BasFlightPlanArcrftModel model); |
||||||
|
|
||||||
|
// to entity merge
|
||||||
|
@Named("toPlanEntityForMergeModel") |
||||||
|
void updateEntityByModel(@MappingTarget FltPlanBas entity, BasFlightPlanModel model); |
||||||
|
@Named("toAreaEntityForMergeModel") |
||||||
|
void updateEntityByModel(@MappingTarget FltPlanArea entity, BasFlightPlanAreaModel model); |
||||||
|
@Named("toCoordEntityForMergeModel") |
||||||
|
void updateEntityByModel(@MappingTarget FltPlanAreaCoord entity, BasFlightPlanAreaCoordModel model); |
||||||
|
@Named("toPilotEntityForMergeModel") |
||||||
|
void updateEntityByModel(@MappingTarget FltPlanPilot entity, BasFlightPlanPilotModel model); |
||||||
|
@Named("toArcrftEntityForMergeModel") |
||||||
|
void updateEntityByModel(@MappingTarget FltPlanArcrft entity, BasFlightPlanArcrftModel model); |
||||||
|
|
||||||
|
|
||||||
|
// to model
|
||||||
|
@Named("toPlanModel") |
||||||
|
BasFlightPlanModel entityToModel(FltPlanBas entity); |
||||||
|
|
||||||
|
@Named("toAreaModel") |
||||||
|
BasFlightPlanAreaModel entityToModel(FltPlanArea entity); |
||||||
|
|
||||||
|
|
||||||
|
@Named("toCoordModel") |
||||||
|
BasFlightPlanAreaCoordModel entityToModel(FltPlanAreaCoord entity); |
||||||
|
|
||||||
|
@Named("toPilotModel") |
||||||
|
BasFlightPlanPilotModel entityToModel(FltPlanPilot entity); |
||||||
|
|
||||||
|
@Named("toArcrftModel") |
||||||
|
BasFlightPlanArcrftModel entityToModel(FltPlanArcrft entity); |
||||||
|
|
||||||
|
@Named("comArcrftBasToArcrftModel") |
||||||
|
BasFlightPlanArcrftModel entityToModel(ComArcrftBas entity); |
||||||
|
|
||||||
|
|
||||||
|
// to entity - list
|
||||||
|
@Named("toPlanEntity") |
||||||
|
List<FltPlanBas> modelToEntityPlanList(List<BasFlightPlanModel> model); |
||||||
|
|
||||||
|
@Named("toAreaEntity") |
||||||
|
List<FltPlanArea> modelToEntityAreaList(List<BasFlightPlanAreaModel> model); |
||||||
|
|
||||||
|
@Named("toCoordEntity") |
||||||
|
List<FltPlanAreaCoord> modelToEntityCoordList(List<BasFlightPlanAreaCoordModel> model); |
||||||
|
|
||||||
|
@Named("toPilotEntity") |
||||||
|
List<FltPlanPilot> modelToEntityPilotList(List<BasFlightPlanPilotModel> model); |
||||||
|
|
||||||
|
@Named("toArcrftEntity") |
||||||
|
List<FltPlanArcrft> modelToEntityArcrftList(List<BasFlightPlanArcrftModel> model); |
||||||
|
|
||||||
|
|
||||||
|
// to model - list
|
||||||
|
@Named("toPlanModel") |
||||||
|
List<BasFlightPlanModel> entityToModelPlanList(List<FltPlanBas> entity); |
||||||
|
|
||||||
|
@Named("toAreaModel") |
||||||
|
List<BasFlightPlanAreaModel> entityToModeArealList(List<FltPlanArea> entity); |
||||||
|
|
||||||
|
@Named("toCoordModel") |
||||||
|
List<BasFlightPlanAreaCoordModel> entityToModelCoordList(List<FltPlanAreaCoord> entity); |
||||||
|
|
||||||
|
@Named("toPilotModel") |
||||||
|
List<BasFlightPlanPilotModel> entityToModelPilotList(List<FltPlanPilot> entity); |
||||||
|
|
||||||
|
@Named("toArcrftModel") |
||||||
|
List<BasFlightPlanArcrftModel> entityToModelArcrftList(List<FltPlanArcrft> entity); |
||||||
|
|
||||||
|
@Named("comArcrftBasToArcrftModel") |
||||||
|
List<BasFlightPlanArcrftModel> comArcrftEntityToModelArcrftList(List<ComArcrftBas> entity); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,725 @@ |
|||||||
|
package com.palnet.biz.api.bas.flight.service; |
||||||
|
|
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.io.InputStreamReader; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.net.MalformedURLException; |
||||||
|
import java.net.URL; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.json.simple.JSONObject; |
||||||
|
import org.json.simple.parser.JSONParser; |
||||||
|
import org.json.simple.parser.ParseException; |
||||||
|
import org.locationtech.jts.geom.Coordinate; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.data.domain.PageImpl; |
||||||
|
import org.springframework.data.domain.PageRequest; |
||||||
|
import org.springframework.data.domain.Pageable; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; |
||||||
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightAprovRq; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordModel; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordRq; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightScheduleRs; |
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightWeatherModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupJoinModel; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.jpa.entity.FltPlanArcrft; |
||||||
|
import com.palnet.biz.jpa.entity.FltPlanArea; |
||||||
|
import com.palnet.biz.jpa.entity.FltPlanAreaCoord; |
||||||
|
import com.palnet.biz.jpa.entity.FltPlanBas; |
||||||
|
import com.palnet.biz.jpa.entity.FltPlanPilot; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanAreaCoordRepository; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanAreaRepository; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanPilotRepository; |
||||||
|
import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyGroupQueryRepository; |
||||||
|
import com.palnet.biz.scheduler.ctr.model.CtrTrnsLctnModel; |
||||||
|
import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.utils.AreaUtils; |
||||||
|
import com.palnet.comn.utils.EncryptUtils; |
||||||
|
|
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@Service |
||||||
|
@Transactional(readOnly = true) |
||||||
|
public class BasFlightService { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private CtrTrnsLctnService ctrTrnsLctnService; |
||||||
|
|
||||||
|
private final FltPlanBasRepository fltPlanBasRepository; |
||||||
|
private final FltPlanArcrftRepository fltPlanArcrftRepository; |
||||||
|
private final FltPlanAreaRepository fltPlanAreaRepository; |
||||||
|
private final FltPlanAreaCoordRepository fltPlanAreaCoordRepository; |
||||||
|
private final FltPlanPilotRepository fltPlanPilotRepository; |
||||||
|
private final FltPlanQueryRepository fltPlanQueryRepository; |
||||||
|
private final PtyGroupQueryRepository ptyPlanQueryRepository; |
||||||
|
private final JwtTokenUtil jwtTokenUtil; |
||||||
|
private final AreaUtils areaUtils; |
||||||
|
|
||||||
|
public BasFlightService(FltPlanBasRepository fltPlanBasRepository, |
||||||
|
FltPlanArcrftRepository fltPlanArcrftRepository, |
||||||
|
FltPlanAreaRepository fltPlanAreaRepository, |
||||||
|
FltPlanAreaCoordRepository fltPlanAreaCoordRepository, |
||||||
|
FltPlanPilotRepository fltPlanPilotRepository, |
||||||
|
FltPlanQueryRepository fltPlanQueryRepository, |
||||||
|
PtyGroupQueryRepository ptyPlanQueryRepository, |
||||||
|
JwtTokenUtil jwtTokenUtil, |
||||||
|
AreaUtils areaUtils) { |
||||||
|
this.fltPlanBasRepository = fltPlanBasRepository; |
||||||
|
this.fltPlanArcrftRepository = fltPlanArcrftRepository; |
||||||
|
this.fltPlanAreaRepository = fltPlanAreaRepository; |
||||||
|
this.fltPlanAreaCoordRepository = fltPlanAreaCoordRepository; |
||||||
|
this.fltPlanPilotRepository = fltPlanPilotRepository; |
||||||
|
this.fltPlanQueryRepository = fltPlanQueryRepository; |
||||||
|
this.ptyPlanQueryRepository = ptyPlanQueryRepository; |
||||||
|
this.jwtTokenUtil = jwtTokenUtil; |
||||||
|
this.areaUtils = areaUtils; |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 조회
|
||||||
|
public ComnPagingRs<BasFlightPlanModel> listPlan(BasFlightPlanListRq rq) { |
||||||
|
List<BasGroupJoinModel> groupList = ptyPlanQueryRepository.joinList(rq.getCstmrSno()); |
||||||
|
String userAccount = null; |
||||||
|
String masterAccount = null; |
||||||
|
String appAuth = jwtTokenUtil.getUserAuthByToken(); |
||||||
|
|
||||||
|
ComnPagingRs<BasFlightPlanModel> response = new ComnPagingRs<>(); |
||||||
|
|
||||||
|
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord()); |
||||||
|
if(groupList.size() > 0) { |
||||||
|
for (BasGroupJoinModel list : groupList) { |
||||||
|
if (list.getGroupId().equals(rq.getGroupId())) { |
||||||
|
userAccount = list.getGroupAuthCd(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
if (appAuth.equals("SUPER") || appAuth.equals("ADMIN")) { |
||||||
|
masterAccount = "ADMIN"; |
||||||
|
} else if (userAccount.equals("MASTER") || userAccount.equals("LEADER")) { |
||||||
|
masterAccount = "ADMIN"; |
||||||
|
} else { |
||||||
|
masterAccount = "NORMAL"; |
||||||
|
} |
||||||
|
PageImpl<BasFlightPlanModel> result = fltPlanQueryRepository.listPlan(rq, masterAccount, pageable); |
||||||
|
|
||||||
|
long total = fltPlanQueryRepository.listPlanCount(rq, masterAccount); |
||||||
|
|
||||||
|
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord(); |
||||||
|
|
||||||
|
response.setItems(result.getContent()); |
||||||
|
response.setTotal(total); |
||||||
|
response.setPage(rq.getPage()); |
||||||
|
response.setTotalPage(totalPage); |
||||||
|
|
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 상세 조회
|
||||||
|
public BasFlightPlanModel detailPlan(Integer planSno) { |
||||||
|
BasFlightPlanModel rs = new BasFlightPlanModel(); |
||||||
|
// 비행계획서
|
||||||
|
FltPlanBas planEntity = fltPlanBasRepository.findByPlanSnoAndDelYnNot(planSno, "Y").orElse(null); |
||||||
|
if(planEntity != null){ |
||||||
|
rs = BasFlightMapper.mapper.entityToModel(planEntity); |
||||||
|
// 버퍼영역
|
||||||
|
List<FltPlanArea> areaEntityList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(planSno); |
||||||
|
if (areaEntityList != null && !areaEntityList.isEmpty()) { |
||||||
|
List<BasFlightPlanAreaModel> area = new ArrayList<>(); |
||||||
|
for (FltPlanArea areaEntity : areaEntityList) { |
||||||
|
BasFlightPlanAreaModel areaModel = BasFlightMapper.mapper.entityToModel(areaEntity); |
||||||
|
List<FltPlanAreaCoord> coordEntityList = fltPlanAreaCoordRepository.findByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(areaEntity.getPlanAreaSno()); |
||||||
|
if (coordEntityList != null && !coordEntityList.isEmpty()) { |
||||||
|
areaModel.setCoordList(BasFlightMapper.mapper.entityToModelCoordList(coordEntityList)); |
||||||
|
|
||||||
|
// Line인 경우 BufferList 생성
|
||||||
|
if("LINE".equals(areaEntity.getAreaType())) { |
||||||
|
List<Coordinate> convertCoordinates = areaUtils.convertCoordinates(areaModel.getCoordList()); |
||||||
|
List<Coordinate> bufferList = areaUtils.buffer(convertCoordinates, areaModel.getBufferZone()); |
||||||
|
List<BasFlightPlanAreaCoordModel> bufferCoordList = areaUtils.convertModel(bufferList); |
||||||
|
|
||||||
|
areaModel.setBufferCoordList(bufferCoordList); |
||||||
|
} |
||||||
|
} |
||||||
|
area.add(areaModel); |
||||||
|
} |
||||||
|
rs.setAreaList(area); |
||||||
|
} |
||||||
|
// 조종사
|
||||||
|
List<FltPlanPilot> pilotList = fltPlanPilotRepository.findByPlanSnoOrderByPlanPilotSnoAsc(planSno); |
||||||
|
if (pilotList != null && !pilotList.isEmpty()) { |
||||||
|
rs.setPilotList(BasFlightMapper.mapper.entityToModelPilotList(pilotList)); |
||||||
|
} |
||||||
|
// 기체
|
||||||
|
List<FltPlanArcrft> arcrft = fltPlanArcrftRepository.findByPlanSnoOrderByPlanArcrftSnoAsc(planSno); |
||||||
|
if (arcrft != null && !arcrft.isEmpty()) { |
||||||
|
rs.setArcrftList(BasFlightMapper.mapper.entityToModelArcrftList(arcrft)); |
||||||
|
} |
||||||
|
} |
||||||
|
return rs; |
||||||
|
} |
||||||
|
|
||||||
|
public void planValid(BasFlightPlanModel rq) { |
||||||
|
boolean isEqualsFltElev = false; |
||||||
|
List<BasFlightPlanAreaModel> rqAreaList = rq.getAreaList(); |
||||||
|
String rqFltElev = rqAreaList.get(0).getFltElev(); |
||||||
|
|
||||||
|
List<BasFlightPlanModel> effectivePlanList = fltPlanQueryRepository.CoordCheck(rq); |
||||||
|
|
||||||
|
List<BasFlightPlanAreaModel> effectivePlanArea = new ArrayList<>(); |
||||||
|
for(BasFlightPlanModel plan : effectivePlanList) { |
||||||
|
effectivePlanArea.addAll(plan.getAreaList()); |
||||||
|
} |
||||||
|
for(BasFlightPlanAreaModel area : effectivePlanArea) { |
||||||
|
if(rqFltElev.equals(area.getFltElev())) isEqualsFltElev = true; |
||||||
|
} |
||||||
|
List<BasFlightPlanAreaCoordRq> effectivePlanCount = fltPlanQueryRepository.CoordCount(rq); |
||||||
|
for(BasFlightPlanModel i : effectivePlanList) { |
||||||
|
if(rq.getPlanSno().equals(i.getPlanSno()))return; |
||||||
|
} |
||||||
|
if(effectivePlanList != null && !effectivePlanList.isEmpty()) { |
||||||
|
for(BasFlightPlanModel plan : effectivePlanList) { |
||||||
|
// 1. 구역 조회
|
||||||
|
List<FltPlanArea> areaList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(plan.getPlanSno()); |
||||||
|
|
||||||
|
// 2. 좌표 조회 -> 영역 포함 여부 확인
|
||||||
|
for(FltPlanArea area : areaList) { |
||||||
|
List<FltPlanAreaCoord> coordList = fltPlanAreaCoordRepository.findByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(area.getPlanAreaSno()); |
||||||
|
|
||||||
|
if(coordList != null && !coordList.isEmpty()) { |
||||||
|
List<BasFlightPlanAreaCoordModel> coordListMapping = BasFlightMapper.mapper.entityToModelCoordList(coordList); |
||||||
|
|
||||||
|
// 2-1 영역 좌표 -> jts model로 mapping
|
||||||
|
List<Coordinate> effectiveCoordList = areaUtils.convertCoordinates(coordListMapping); |
||||||
|
List<Coordinate> effectiveCoordBufferList = new ArrayList<>(); |
||||||
|
|
||||||
|
// Query에서 조회한 좌표로 버퍼좌표 생성
|
||||||
|
if("LINE".equals(area.getAreaType())){ |
||||||
|
List<Coordinate> trans = areaUtils.transform(effectiveCoordList, "EPSG:4326", "EPSG:5181"); |
||||||
|
List<Coordinate> bufferList = areaUtils.buffer(trans, area.getBufferZone()); |
||||||
|
effectiveCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); |
||||||
|
} |
||||||
|
if("POLYGON".equals(area.getAreaType())) { |
||||||
|
effectiveCoordBufferList.addAll(effectiveCoordList); |
||||||
|
} |
||||||
|
if("CIRCLE".equals(area.getAreaType())) { |
||||||
|
effectiveCoordBufferList = areaUtils.createCircle(effectiveCoordList.get(0), area.getBufferZone()); |
||||||
|
} |
||||||
|
|
||||||
|
// 유효한 비행구역 검증하기.
|
||||||
|
for(BasFlightPlanAreaModel rqArea : rq.getAreaList()) { |
||||||
|
boolean overlapCheck = false; |
||||||
|
boolean overlapCheck2 = false; |
||||||
|
boolean containCheck = false; |
||||||
|
boolean containCheck2 = false; |
||||||
|
List<Coordinate> rqCoord = new ArrayList<>(); |
||||||
|
List<Coordinate> rqCoordBufferList = new ArrayList<>(); |
||||||
|
|
||||||
|
//rq로 들어온 좌표로 버퍼좌표 생성
|
||||||
|
for(BasFlightPlanAreaCoordModel coord : rqArea.getCoordList()) { |
||||||
|
Coordinate coords = new Coordinate(coord.getLon(), coord.getLat()); |
||||||
|
rqCoord.add(coords); |
||||||
|
} |
||||||
|
if("LINE".equals(rqArea.getAreaType())){ |
||||||
|
List<Coordinate> trans = areaUtils.transform(rqCoord, "EPSG:4326", "EPSG:5181"); |
||||||
|
List<Coordinate> bufferList = areaUtils.buffer(trans, rqArea.getBufferZone()); |
||||||
|
rqCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); |
||||||
|
}else if( "POLYGON".equals(rqArea.getAreaType())) { |
||||||
|
rqCoordBufferList.addAll(rqCoord); |
||||||
|
}else if("CIRCLE".equals(rqArea.getAreaType())) { |
||||||
|
rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), rqArea.getBufferZone()); |
||||||
|
} |
||||||
|
//검증
|
||||||
|
|
||||||
|
overlapCheck = areaUtils.overlaps(rqCoordBufferList, effectiveCoordBufferList); |
||||||
|
overlapCheck2 = areaUtils.overlaps(effectiveCoordBufferList, rqCoordBufferList); |
||||||
|
if((overlapCheck || overlapCheck2) && isEqualsFltElev) { |
||||||
|
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
||||||
|
} |
||||||
|
for(Coordinate coord : effectiveCoordBufferList) { |
||||||
|
containCheck = areaUtils.contains(rqCoordBufferList, coord); |
||||||
|
if(containCheck && isEqualsFltElev) { |
||||||
|
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
||||||
|
} |
||||||
|
} |
||||||
|
for(Coordinate coord : rqCoordBufferList) { |
||||||
|
containCheck2 = areaUtils.contains(effectiveCoordBufferList , coord); |
||||||
|
if(containCheck2 && isEqualsFltElev) { |
||||||
|
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 3. 중복 기체 확인
|
||||||
|
for(BasFlightPlanAreaCoordRq idntfNum : effectivePlanCount) { |
||||||
|
for(BasFlightPlanArcrftModel rqArcrft : rq.getArcrftList()) { |
||||||
|
if(rqArcrft.getIdntfNum().equals(idntfNum.getIdntfNum())) { |
||||||
|
throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 등록
|
||||||
|
@Transactional |
||||||
|
public boolean createPlan(BasFlightPlanModel rq) { |
||||||
|
|
||||||
|
// 비행계획서 유효성 검사.
|
||||||
|
this.planValid(rq); |
||||||
|
|
||||||
|
// 비행계획서
|
||||||
|
String userId = jwtTokenUtil.getUserIdByToken(); |
||||||
|
FltPlanBas basEntity = BasFlightMapper.mapper.modelToEntity(rq); |
||||||
|
basEntity.setDelYn("N"); |
||||||
|
basEntity.setAprvlYn("N"); |
||||||
|
basEntity.setCreateUserId(userId); |
||||||
|
basEntity.setUpdateUserId(userId); |
||||||
|
FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity); |
||||||
|
Integer planSno = rBasEntity.getPlanSno(); |
||||||
|
// 비행구역
|
||||||
|
List<BasFlightPlanAreaModel> areaModelList = rq.getAreaList(); |
||||||
|
if (areaModelList != null && !areaModelList.isEmpty()) { |
||||||
|
for (BasFlightPlanAreaModel areaModel : areaModelList) { |
||||||
|
FltPlanArea areaEntity = BasFlightMapper.mapper.modelToEntity(areaModel); |
||||||
|
areaEntity.setPlanSno(planSno); |
||||||
|
areaEntity.setCreateUserId(userId); |
||||||
|
areaEntity.setUpdateUserId(userId); |
||||||
|
FltPlanArea rAreaEntity = fltPlanAreaRepository.save(areaEntity); |
||||||
|
Integer planAreaSno = rAreaEntity.getPlanAreaSno(); |
||||||
|
List<BasFlightPlanAreaCoordModel> coordModelList = areaModel.getCoordList(); |
||||||
|
if (coordModelList != null && !coordModelList.isEmpty()) { |
||||||
|
for (BasFlightPlanAreaCoordModel coordModel : coordModelList) { |
||||||
|
FltPlanAreaCoord coordEntity = BasFlightMapper.mapper.modelToEntity(coordModel); |
||||||
|
coordEntity.setPlanAreaSno(planAreaSno); |
||||||
|
coordEntity.setCreateUserId(userId); |
||||||
|
fltPlanAreaCoordRepository.save(coordEntity); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 조종사
|
||||||
|
List<BasFlightPlanPilotModel> pilotModelList = rq.getPilotList(); |
||||||
|
if (pilotModelList != null && !pilotModelList.isEmpty()) { |
||||||
|
for (BasFlightPlanPilotModel pilotModel : pilotModelList) { |
||||||
|
FltPlanPilot pilotEntity = BasFlightMapper.mapper.modelToEntity(pilotModel); |
||||||
|
pilotEntity.setPlanSno(planSno); |
||||||
|
pilotEntity.setCreateUserId(userId); |
||||||
|
pilotEntity.setUpdateUserId(userId); |
||||||
|
fltPlanPilotRepository.save(pilotEntity); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// 기체
|
||||||
|
List<BasFlightPlanArcrftModel> arcrftModelList = rq.getArcrftList(); |
||||||
|
if (arcrftModelList != null && !arcrftModelList.isEmpty()) { |
||||||
|
for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) { |
||||||
|
FltPlanArcrft arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel); |
||||||
|
arcrftEntity.setPlanSno(planSno); |
||||||
|
arcrftEntity.setCreateUserId(userId); |
||||||
|
arcrftEntity.setUpdateUserId(userId); |
||||||
|
fltPlanArcrftRepository.save(arcrftEntity); |
||||||
|
} |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 수정
|
||||||
|
@Transactional |
||||||
|
public boolean updatePlan(BasFlightPlanModel rq) { |
||||||
|
|
||||||
|
// 비행계획서 유효성 검사.
|
||||||
|
this.planValid(rq); |
||||||
|
|
||||||
|
if (rq != null && rq.getPlanSno() != null) { |
||||||
|
String userId = jwtTokenUtil.getUserIdByToken(); |
||||||
|
Integer planSno = rq.getPlanSno(); |
||||||
|
// 비행계획서
|
||||||
|
FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow(); |
||||||
|
BasFlightMapper.mapper.updateEntityByModel(planEntity, rq); |
||||||
|
planEntity.setUpdateUserId(userId); |
||||||
|
fltPlanBasRepository.save(planEntity); |
||||||
|
|
||||||
|
// 비행구역
|
||||||
|
List<BasFlightPlanAreaModel> areaModelList = rq.getAreaList(); |
||||||
|
if (areaModelList != null && !areaModelList.isEmpty()) { |
||||||
|
List<FltPlanArea> areaEntityList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(planSno); |
||||||
|
for (BasFlightPlanAreaModel areaModel : areaModelList) { |
||||||
|
//FltPlanArea areaEntity = fltPlanAreaRepository.findById(areaModel.getPlanAreaSno()).orElse(null);
|
||||||
|
FltPlanArea areaEntity = areaEntityList.stream().filter(fltPlanArea -> fltPlanArea.getPlanAreaSno().equals(areaModel.getPlanAreaSno())).findFirst().orElse(null); |
||||||
|
if (areaEntity == null) { |
||||||
|
areaEntity = BasFlightMapper.mapper.modelToEntity(areaModel); |
||||||
|
areaEntity.setCreateUserId(userId); |
||||||
|
} else { |
||||||
|
BasFlightMapper.mapper.updateEntityByModel(areaEntity, areaModel); |
||||||
|
} |
||||||
|
areaEntity.setUpdateUserId(userId); |
||||||
|
fltPlanAreaRepository.save(areaEntity); |
||||||
|
|
||||||
|
|
||||||
|
List<BasFlightPlanAreaCoordModel> coordsModelList = areaModel.getCoordList(); |
||||||
|
if (coordsModelList != null && !coordsModelList.isEmpty()) { |
||||||
|
Integer areaSno = areaModel.getPlanAreaSno(); |
||||||
|
List<FltPlanAreaCoord> coordEntityList = fltPlanAreaCoordRepository.findByPlanAreaSnoOrderByPlanAreaCoordSnoAsc(areaSno); |
||||||
|
for (BasFlightPlanAreaCoordModel coordModel : coordsModelList) { |
||||||
|
FltPlanAreaCoord coordEntity = coordEntityList.stream().filter(fltPlanAreaCoord -> fltPlanAreaCoord.getPlanAreaCoordSno().equals(coordModel.getPlanAreaCoordSno())).findFirst().orElse(null); |
||||||
|
if (coordEntity == null) { |
||||||
|
coordEntity = BasFlightMapper.mapper.modelToEntity(coordModel); |
||||||
|
coordEntity.setCreateUserId(userId); |
||||||
|
} else { |
||||||
|
BasFlightMapper.mapper.updateEntityByModel(coordEntity, coordModel); |
||||||
|
} |
||||||
|
fltPlanAreaCoordRepository.save(coordEntity); |
||||||
|
} |
||||||
|
List<FltPlanAreaCoord> deleteCoordEntity = coordEntityList.stream().filter(fltPlanAreaCoord -> { |
||||||
|
for (BasFlightPlanAreaCoordModel coordModel : coordsModelList) { |
||||||
|
if (coordModel.getPlanAreaCoordSno() == fltPlanAreaCoord.getPlanAreaCoordSno()) |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
}).collect(Collectors.toList()); |
||||||
|
fltPlanAreaCoordRepository.deleteAll(deleteCoordEntity); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
List<FltPlanArea> deleteAreaEntity = areaEntityList.stream().filter(fltPlanArea -> { |
||||||
|
for (BasFlightPlanAreaModel areaModel : areaModelList) { |
||||||
|
if (areaModel.getPlanAreaSno() == fltPlanArea.getPlanAreaSno()) |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
}).collect(Collectors.toList()); |
||||||
|
fltPlanAreaRepository.deleteAll(deleteAreaEntity); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// 조종사
|
||||||
|
List<BasFlightPlanPilotModel> pilotModelList = rq.getPilotList(); |
||||||
|
if(pilotModelList != null && !pilotModelList.isEmpty()){ |
||||||
|
List<FltPlanPilot> pilotEntityList = fltPlanPilotRepository.findByPlanSnoOrderByPlanPilotSnoAsc(planSno); |
||||||
|
for(BasFlightPlanPilotModel pilotModel : pilotModelList){ |
||||||
|
FltPlanPilot pilotEntity = pilotEntityList.stream().filter(fltPlanPilot -> fltPlanPilot.getPlanPilotSno().equals(pilotModel.getPlanPilotSno())).findFirst().orElse(null); |
||||||
|
if(pilotEntity == null){ |
||||||
|
pilotEntity = BasFlightMapper.mapper.modelToEntity(pilotModel); |
||||||
|
pilotEntity.setUpdateUserId(userId); |
||||||
|
pilotEntity.setCreateUserId(userId); |
||||||
|
|
||||||
|
}else { |
||||||
|
BasFlightMapper.mapper.updateEntityByModel(pilotEntity, pilotModel); |
||||||
|
} |
||||||
|
fltPlanPilotRepository.save(pilotEntity); |
||||||
|
} |
||||||
|
List<FltPlanPilot> deletePilotEntity = pilotEntityList.stream().filter(fltPlanPilot -> { |
||||||
|
for (BasFlightPlanPilotModel pilotModel : pilotModelList) { |
||||||
|
if (pilotModel.getPlanPilotSno() == fltPlanPilot.getPlanPilotSno()) |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
}).collect(Collectors.toList()); |
||||||
|
fltPlanPilotRepository.deleteAll(deletePilotEntity); |
||||||
|
} |
||||||
|
|
||||||
|
// 기체
|
||||||
|
List<BasFlightPlanArcrftModel> arcrftModelList = rq.getArcrftList(); |
||||||
|
if(arcrftModelList != null && !arcrftModelList.isEmpty()){ |
||||||
|
List<FltPlanArcrft> arcrftEntityList = fltPlanArcrftRepository.findByPlanSnoOrderByPlanArcrftSnoAsc(planSno); |
||||||
|
for(BasFlightPlanArcrftModel arcrftModel : arcrftModelList){ |
||||||
|
FltPlanArcrft arcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> fltPlanArcrft.getPlanArcrftSno().equals(arcrftModel.getPlanArcrftSno())).findFirst().orElse(null); |
||||||
|
if(arcrftEntity == null){ |
||||||
|
arcrftEntity = BasFlightMapper.mapper.modelToEntity(arcrftModel); |
||||||
|
arcrftEntity.setUpdateUserId(userId); |
||||||
|
arcrftEntity.setCreateUserId(userId); |
||||||
|
}else { |
||||||
|
BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, arcrftModel); |
||||||
|
} |
||||||
|
fltPlanArcrftRepository.save(arcrftEntity); |
||||||
|
} |
||||||
|
List<FltPlanArcrft> deleteArcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> { |
||||||
|
for (BasFlightPlanArcrftModel arcrftModel : arcrftModelList) { |
||||||
|
if (arcrftModel.getPlanArcrftSno() == fltPlanArcrft.getPlanArcrftSno()) |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
}).collect(Collectors.toList()); |
||||||
|
fltPlanArcrftRepository.deleteAll(deleteArcrftEntity); |
||||||
|
} |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 삭제
|
||||||
|
@Transactional |
||||||
|
public boolean deletePlan(Integer planSno) { |
||||||
|
FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow(); |
||||||
|
planEntity.setDelYn("Y"); |
||||||
|
fltPlanBasRepository.save(planEntity); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 그룹 조종사 조회
|
||||||
|
public List<BasFlightPlanPilotModel> listPilotByGroup(String groupId) { |
||||||
|
List<BasFlightPlanPilotModel> pilotList = fltPlanQueryRepository.listPilot(groupId); |
||||||
|
|
||||||
|
/* 개인정보 복호화 처리 */ |
||||||
|
for(BasFlightPlanPilotModel model : pilotList) { |
||||||
|
if(!StringUtils.isEmpty(model.getHpno())) { |
||||||
|
model.setHpno(EncryptUtils.decrypt(model.getHpno())); |
||||||
|
} |
||||||
|
|
||||||
|
if(!StringUtils.isEmpty(model.getMemberName())) { |
||||||
|
// model.setMemberName(EncryptUtils.decrypt(model.getMemberName()));
|
||||||
|
} |
||||||
|
|
||||||
|
if(!StringUtils.isEmpty(model.getEmail())) { |
||||||
|
model.setEmail(EncryptUtils.decrypt(model.getEmail())); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return pilotList; |
||||||
|
} |
||||||
|
|
||||||
|
// 그룹 기체 조회
|
||||||
|
public List<BasFlightPlanArcrftModel> listArcrftByGroup(String groupId) { |
||||||
|
List<BasFlightPlanArcrftModel> arcrftModels = fltPlanQueryRepository.listArcrft(groupId); |
||||||
|
|
||||||
|
// List<ComArcrftBas> arcrftEntityList = comArcrftBasRepository.findByGroupIdOrderByArcrftSnoAsc(groupId);
|
||||||
|
// List<BasFlightPlanArcrftModel> arcrftModelList = BasFlightMapper.mapper.comArcrftEntityToModelArcrftList(arcrftEntityList);
|
||||||
|
return arcrftModels; |
||||||
|
} |
||||||
|
|
||||||
|
// 비행 구역 buffer zone
|
||||||
|
public List<BasFlightPlanAreaModel> getBuffer(List<BasFlightPlanAreaModel> rq) { |
||||||
|
|
||||||
|
for(BasFlightPlanAreaModel area : rq) { |
||||||
|
|
||||||
|
if("LINE".equals(area.getAreaType())) { |
||||||
|
List<Coordinate> convertCoordinates = areaUtils.convertCoordinates(area.getCoordList()); // 객체 타입 변환
|
||||||
|
List<Coordinate> transCoordList = areaUtils.transform(convertCoordinates, "EPSG:4326", "EPSG:5181"); |
||||||
|
|
||||||
|
List<Coordinate> bufferList = areaUtils.buffer(transCoordList, area.getBufferZone()); // buffer 영역 생성
|
||||||
|
|
||||||
|
List<Coordinate> transBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); // buffer 영역 좌표계 변환
|
||||||
|
List<BasFlightPlanAreaCoordModel> bufferCoordList = areaUtils.convertModel(transBufferList); |
||||||
|
|
||||||
|
area.setBufferCoordList(bufferCoordList); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return rq; |
||||||
|
} |
||||||
|
|
||||||
|
// 비행계획서 리스트(승인)
|
||||||
|
public ComnPagingRs<BasFlightPlanModel> aprvList(BasFlightPlanListRq rq) { |
||||||
|
String appAuth = jwtTokenUtil.getUserAuthByToken(); |
||||||
|
|
||||||
|
ComnPagingRs<BasFlightPlanModel> response = new ComnPagingRs<>(); |
||||||
|
|
||||||
|
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord()); |
||||||
|
|
||||||
|
List<JwtGroupModel> groupAuthList = jwtTokenUtil.getGroupAuthByToken(); |
||||||
|
|
||||||
|
List<String> groupIdList = new ArrayList<>(); |
||||||
|
|
||||||
|
String userAccount = null; |
||||||
|
String masterAccount = null; |
||||||
|
if(groupAuthList.size() > 0) { |
||||||
|
for (JwtGroupModel list : groupAuthList) { |
||||||
|
if (list.getGroupId().equals(rq.getGroupId())) { |
||||||
|
userAccount = list.getGroupAuthCd(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
if (appAuth.equals("SUPER") || appAuth.equals("ADMIN")) { |
||||||
|
masterAccount = "ADMIN"; |
||||||
|
} else if (userAccount.equals("MASTER") || userAccount.equals("LEADER")) { |
||||||
|
masterAccount = "ADMIN"; |
||||||
|
} else { |
||||||
|
masterAccount = "NORMAL"; |
||||||
|
} |
||||||
|
PageImpl<BasFlightPlanModel> result = fltPlanQueryRepository.aprvList(rq, masterAccount, pageable); |
||||||
|
|
||||||
|
long total = fltPlanQueryRepository.aprvCount(rq, masterAccount); |
||||||
|
|
||||||
|
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord(); |
||||||
|
|
||||||
|
response.setItems(result.getContent()); |
||||||
|
response.setTotal(total); |
||||||
|
response.setPage(rq.getPage()); |
||||||
|
response.setTotalPage(totalPage); |
||||||
|
|
||||||
|
return response; |
||||||
|
} |
||||||
|
// 비행계획서 승인/미승인
|
||||||
|
@Transactional |
||||||
|
public int aprovePlan(BasFlightAprovRq rq) { |
||||||
|
int cnt = fltPlanBasRepository.updateAprvlYnByPlanSnoIn(rq.getPlanSnoList(), rq.getAprvlYn()); |
||||||
|
return cnt; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean checkAirspaceContains(List<BasFlightPlanAreaModel> rq) { |
||||||
|
boolean result = false; |
||||||
|
|
||||||
|
for(BasFlightPlanAreaModel area : rq) { |
||||||
|
List<Coordinate> coordinates = areaUtils.convertCoordinates(area.getCoordList()); |
||||||
|
if("LINE".equals(area.getAreaType())) { |
||||||
|
List<Coordinate> transCoordList = areaUtils.transform(coordinates, "EPSG:4326", "EPSG:5181"); |
||||||
|
List<Coordinate> buffer = areaUtils.buffer(transCoordList, area.getBufferZone()); |
||||||
|
List<Coordinate> transBufferList = areaUtils.transform(buffer, "EPSG:5181", "EPSG:4326"); |
||||||
|
result = areaUtils.overlaps(transBufferList); |
||||||
|
} |
||||||
|
|
||||||
|
if("POLYGON".equals(area.getAreaType())) { |
||||||
|
result = areaUtils.overlaps(coordinates); |
||||||
|
} |
||||||
|
|
||||||
|
if("CIRCLE".equals(area.getAreaType())) { |
||||||
|
List<Coordinate> circle = areaUtils.createCircle(coordinates.get(0), area.getBufferZone()); |
||||||
|
result = areaUtils.overlaps(circle); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//지역 검색
|
||||||
|
public String searchArea(String apiUrl, Map<String, String> requestHeaders) { |
||||||
|
HttpURLConnection con = connect(apiUrl); |
||||||
|
try { |
||||||
|
con.setRequestMethod("GET"); |
||||||
|
for(Map.Entry<String, String> header :requestHeaders.entrySet()) { |
||||||
|
con.setRequestProperty(header.getKey(), header.getValue()); |
||||||
|
} |
||||||
|
|
||||||
|
int responseCode = con.getResponseCode(); |
||||||
|
if(responseCode == HttpURLConnection.HTTP_OK) { |
||||||
|
return readBody(con.getInputStream()); |
||||||
|
} else { |
||||||
|
return readBody(con.getErrorStream()); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
throw new RuntimeException("API 요청과 응답 실패", e); |
||||||
|
} finally { |
||||||
|
con.disconnect(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public HttpURLConnection connect(String apiUrl) { |
||||||
|
try { |
||||||
|
URL url = new URL(apiUrl); |
||||||
|
return (HttpURLConnection)url.openConnection(); |
||||||
|
} catch (MalformedURLException e) { |
||||||
|
throw new RuntimeException("API URL이 잘못되었습니다. : " + apiUrl, e); |
||||||
|
} catch (IOException e) { |
||||||
|
throw new RuntimeException("연결이 실패했습니다. : " + apiUrl, e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public String readBody(InputStream body) { |
||||||
|
InputStreamReader streamReader = new InputStreamReader(body); |
||||||
|
|
||||||
|
try(BufferedReader lineReader = new BufferedReader(streamReader)) { |
||||||
|
StringBuilder responseBody = new StringBuilder(); |
||||||
|
|
||||||
|
String line; |
||||||
|
while ((line = lineReader.readLine()) != null) { |
||||||
|
responseBody.append(line); |
||||||
|
} |
||||||
|
|
||||||
|
return responseBody.toString(); |
||||||
|
} catch (IOException e) { |
||||||
|
throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public List<BasFlightScheduleRs> findSchecdule(String searchDate) { |
||||||
|
|
||||||
|
List<BasFlightScheduleRs> schedule = fltPlanQueryRepository.findSchedule(searchDate); |
||||||
|
|
||||||
|
return schedule; |
||||||
|
} |
||||||
|
public JSONObject getWeather(BasFlightWeatherModel rq) throws IOException, ParseException { |
||||||
|
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst"); |
||||||
|
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D"); |
||||||
|
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode(rq.getPageNo(),"UTF-8")); |
||||||
|
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode(rq.getNumOfRows(), "UTF-8")); /*한 페이지 결과 수*/ |
||||||
|
urlBuilder.append("&" + URLEncoder.encode("dataType","UTF-8") + "=" + URLEncoder.encode("JSON", "UTF-8")); /*요청자료형식(XML/JSON) Default: XML*/ |
||||||
|
urlBuilder.append("&" + URLEncoder.encode("base_date","UTF-8") + "=" + URLEncoder.encode(rq.getBase_date(), "UTF-8")); /*'21년 6월 28일 발표*/ |
||||||
|
urlBuilder.append("&" + URLEncoder.encode("base_time","UTF-8") + "=" + URLEncoder.encode(rq.getBase_time(), "UTF-8")); /*06시 발표(정시단위) */ |
||||||
|
urlBuilder.append("&" + URLEncoder.encode("nx","UTF-8") + "=" + URLEncoder.encode(rq.getNx(), "UTF-8")); /*예보지점의 X 좌표값*/ |
||||||
|
urlBuilder.append("&" + URLEncoder.encode("ny","UTF-8") + "=" + URLEncoder.encode(rq.getNy(), "UTF-8")); /*예보지점의 Y 좌표값*/ |
||||||
|
URL url = new URL(urlBuilder.toString()); |
||||||
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
||||||
|
conn.setRequestMethod("GET"); |
||||||
|
conn.setRequestProperty("Content-type", "application/json"); |
||||||
|
log.info("Response code: " + conn.getResponseCode()); |
||||||
|
BufferedReader rd; |
||||||
|
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) { |
||||||
|
rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); |
||||||
|
} else { |
||||||
|
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream())); |
||||||
|
} |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
String line; |
||||||
|
|
||||||
|
while ((line = rd.readLine()) != null) { |
||||||
|
sb.append(line); |
||||||
|
|
||||||
|
} |
||||||
|
CtrTrnsLctnModel weatherResult = ctrTrnsLctnService.convertLatlonToAddress(rq.getNx2(),rq.getNy2()); |
||||||
|
log.info("weatherResult >>>> : {}", weatherResult); |
||||||
|
|
||||||
|
|
||||||
|
String str = sb.toString(); |
||||||
|
JSONParser parser = new JSONParser(); |
||||||
|
JSONObject jsonObject = (JSONObject) parser.parse(str); |
||||||
|
if(weatherResult != null) { |
||||||
|
jsonObject.put("area1",weatherResult.getArea1()); |
||||||
|
jsonObject.put("area2",weatherResult.getArea2()); |
||||||
|
jsonObject.put("area3",weatherResult.getArea3()); |
||||||
|
jsonObject.put("landNm",weatherResult.getLandNm()); |
||||||
|
jsonObject.put("landNum",weatherResult.getLandNum()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
rd.close(); |
||||||
|
conn.disconnect(); |
||||||
|
log.info(sb.toString()); |
||||||
|
|
||||||
|
return jsonObject; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,105 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.controller; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.util.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupAprvModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupAprvRqModel; |
||||||
|
import com.palnet.biz.api.bas.group.service.BasGroupAprvService; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/bas/group/aprv", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "그룹 승인 컨트롤러", description = "그룹 가입 승인 관련 API") |
||||||
|
public class BasGroupAprvController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final BasGroupAprvService service; |
||||||
|
|
||||||
|
/** |
||||||
|
* 승인요청 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/list") |
||||||
|
@ApiOperation(value = "승인요청 조회") |
||||||
|
@Tag(name = "그룹 승인 컨트롤러", description = "그룹 가입 승인 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> list(BasGroupAprvRqModel rq) { |
||||||
|
ComnPagingRs<BasGroupAprvModel> result = null; |
||||||
|
// log.debug(">>>>" + rq.toString());
|
||||||
|
|
||||||
|
if(StringUtils.isEmpty(rq.getCstmrSno())) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.mylist(rq); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 승인처리 / 승인취소 처리 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@PutMapping(value = "/update") |
||||||
|
@ApiOperation(value = "승인처리 / 승인취소 처리") |
||||||
|
@Tag(name = "그룹 승인 컨트롤러", description = "그룹 가입 승인 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> update(@RequestBody BasGroupAprvModel rq) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
if(StringUtils.isEmpty(rq.getCstmrGroupSno())) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.update(rq); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,308 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.controller; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.util.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupJoinModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupRqModel; |
||||||
|
import com.palnet.biz.api.bas.group.service.BasGroupService; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/bas/group", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
public class BasGroupController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final BasGroupService service; |
||||||
|
|
||||||
|
@GetMapping(value = "/createid") |
||||||
|
@ApiOperation(value = "그룹코드 생성") |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> createid() { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
String result = service.createid(); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 나의 그룹 목록 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/mylist") |
||||||
|
@ApiOperation(value = "나의 그룹 목록 조회") |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
@ApiImplicitParam(name = "cstmrSno",value = "고객일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> mylist(Integer cstmrSno) { |
||||||
|
List<BasGroupModel> result = null; |
||||||
|
|
||||||
|
log.debug("Param : " + cstmrSno); |
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(StringUtils.isEmpty(cstmrSno)) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.mylist(cstmrSno); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 나의 그룹 - 참여 그룹 목록 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/joinlist") |
||||||
|
@ApiOperation(value = "나의 그룹 - 참여 그룹 목록 조회") |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
@ApiImplicitParam(name = "cstmrSno",value = "고객일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> joinList(Integer cstmrSno) { |
||||||
|
List<BasGroupJoinModel> result = null; |
||||||
|
|
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(StringUtils.isEmpty(cstmrSno)) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.joinList(cstmrSno); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 목록 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/grouplist") |
||||||
|
@ApiOperation(value = "그룹 목록 조회") |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
@ApiImplicitParam(name = "cstmrSno",value = "고객일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> grouplist(Integer cstmrSno) { |
||||||
|
List<BasGroupJoinModel> result = null; |
||||||
|
|
||||||
|
|
||||||
|
//입력값 검증
|
||||||
|
if(StringUtils.isEmpty(cstmrSno)) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.groupList(cstmrSno); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 전체 그룹 목록 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/list") |
||||||
|
@ApiOperation(value = "전체 그룹 목록 조회") |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> list(BasGroupRqModel rq) { |
||||||
|
List<BasGroupModel> result = null; |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.list(rq); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 상세 조회 |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/detail/{id}") |
||||||
|
@ApiOperation(value = "그룹 상세 조회") |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "그룹ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> detail(@PathVariable String id) { |
||||||
|
BasGroupModel result = null; |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.detail(id); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<BasGroupModel>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 생성 |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
@PostMapping(value = "/create") |
||||||
|
@ApiOperation(value = "그룹 생성") |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> create(@RequestBody BasGroupModel rq) throws Exception { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.create(rq); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
resultMap.put("errorMessage", e.getMessage()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 수정 |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
@PutMapping(value = "/update") |
||||||
|
@ApiOperation(value = "그룹 수정") |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> update(@RequestBody BasGroupModel rq) throws Exception { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.update(rq); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// log.error("IGNORE : {}", e);
|
||||||
|
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
||||||
|
// .body(new ErrorResponse("Server Error", "-1"));
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
} catch (CustomException e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
resultMap.put("result", false); |
||||||
|
resultMap.put("errorCode", e.getErrorCode()); |
||||||
|
resultMap.put("errorMessage", e.getMessage()); |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 삭제 |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@DeleteMapping(value = "/delete/{id}") |
||||||
|
@ApiOperation(value = "그룹 삭제") |
||||||
|
@Tag(name = "그룹 컨트롤러", description = "그룹 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "그룹ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> delete(@PathVariable String id) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.delete(id); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,117 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.controller; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.util.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupJoinModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupJoinRqModel; |
||||||
|
import com.palnet.biz.api.bas.group.service.BasGroupJoinService; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/bas/group/join", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "그룹 참여 컨트롤러", description = "그룹 참여 관련 API") |
||||||
|
public class BasGroupJoinController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final BasGroupJoinService service; |
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(value = "/list") |
||||||
|
@ApiOperation(value = "참여한 그룹 목록 조회") |
||||||
|
@Tag(name = "그룹 참여 컨트롤러", description = "그룹 참여 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> list(BasGroupJoinRqModel rq) { |
||||||
|
List<BasGroupJoinModel> result = null; |
||||||
|
|
||||||
|
if(StringUtils.isEmpty(rq.getCstmrSno())) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.joinFullList(rq); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@PostMapping(value = "/create") |
||||||
|
@ApiOperation(value = "그룹 가입 요청") |
||||||
|
@Tag(name = "그룹 참여 컨트롤러", description = "그룹 참여 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> create(@RequestBody BasGroupJoinModel rq) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.create(rq); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@PutMapping(value = "/update") |
||||||
|
@ApiOperation(value = "그룹 가입 승인/미승인") |
||||||
|
@Tag(name = "그룹 참여 컨트롤러", description = "그룹 참여 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> update(@RequestBody BasGroupJoinModel rq) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
if(StringUtils.isEmpty(rq.getCstmrGroupSno())) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.update(rq); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,113 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.controller; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.util.StringUtils; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupUserListModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupUserModel; |
||||||
|
import com.palnet.biz.api.bas.group.service.BasGroupUserService; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RequestMapping(value = "/api/bas/group/user", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "그룹 사용자 컨트롤러", description = "그룹 사용자 관련 API") |
||||||
|
public class BasGroupUserController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private final BasGroupUserService service; |
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(value = "/list") |
||||||
|
@ApiOperation(value = "그룹 사용자 조회") |
||||||
|
@Tag(name = "그룹 사용자 컨트롤러", description = "그룹 사용자 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> list(BasGroupUserListModel rq) { |
||||||
|
ComnPagingRs<BasGroupUserModel> result = null; |
||||||
|
|
||||||
|
if(StringUtils.isEmpty(rq.getCstmrSno())) { |
||||||
|
return ResponseEntity.status(HttpStatus.OK) |
||||||
|
.body(new ErrorResponse(RSErrorCode.ER_PARAM)); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.list(rq); |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(result)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@PutMapping(value = "/update") |
||||||
|
@ApiOperation(value = "그룹 사용자 권한 수정") |
||||||
|
@Tag(name = "그룹 사용자 컨트롤러", description = "그룹 사용자 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> update(@RequestBody BasGroupUserModel rq) { |
||||||
|
Map<String , Object> resultMap = new HashMap<String,Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.update(rq); |
||||||
|
|
||||||
|
resultMap.put("result", result); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@PutMapping(value = "/delegate") |
||||||
|
@ApiOperation(value = "MASTER 권한 위임") |
||||||
|
@Tag(name = "그룹 사용자 컨트롤러", description = "그룹 사용자 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> delegate(@RequestBody List<BasGroupUserModel> rq) { |
||||||
|
Map<String, Object> resultMap = new HashMap<String, Object>(); |
||||||
|
|
||||||
|
try { |
||||||
|
boolean result = service.delegate(rq); |
||||||
|
resultMap.put("result", result); |
||||||
|
} catch (CustomException e) { |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse(e.getMessage(), e.getErrorCode())); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<Map>(resultMap)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasGroupAprvModel { |
||||||
|
|
||||||
|
private Integer cstmrGroupSno; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
private String groupNm; |
||||||
|
|
||||||
|
private String groupTypeCd; |
||||||
|
|
||||||
|
private Integer cstmrSno; |
||||||
|
|
||||||
|
private String aprvlYn; |
||||||
|
|
||||||
|
private String joinYn; |
||||||
|
|
||||||
|
private String memberName; |
||||||
|
|
||||||
|
private String userId; |
||||||
|
|
||||||
|
private Date aprvlDt; |
||||||
|
|
||||||
|
private Date joinDt; |
||||||
|
|
||||||
|
private String groupAuthCd; |
||||||
|
|
||||||
|
private String aprvlUserId; |
||||||
|
|
||||||
|
private String trmnlId; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.model; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnRqModel; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class BasGroupAprvRqModel extends ComnRqModel { |
||||||
|
|
||||||
|
private String groupNm; |
||||||
|
|
||||||
|
private String memberName; |
||||||
|
|
||||||
|
private String aprvYn; |
||||||
|
|
||||||
|
private Integer cstmrSno; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasGroupJoinModel { |
||||||
|
|
||||||
|
private Integer cstmrGroupSno; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
private String groupNm; |
||||||
|
|
||||||
|
private String groupTypeCd; |
||||||
|
|
||||||
|
private Integer cstmrSno; |
||||||
|
|
||||||
|
private String aprvlYn = "N"; |
||||||
|
|
||||||
|
private String joinYn = "N"; |
||||||
|
|
||||||
|
private Date joinDt; |
||||||
|
|
||||||
|
private Date aprvlDt; |
||||||
|
|
||||||
|
private String groupAuthCd; |
||||||
|
|
||||||
|
private Date createDt; |
||||||
|
|
||||||
|
private Date updateDt; |
||||||
|
|
||||||
|
private String myGroupAuthCd; |
||||||
|
|
||||||
|
private String trmnlId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.model; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnRqModel; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class BasGroupJoinRqModel extends ComnRqModel{ |
||||||
|
|
||||||
|
private String groupNm; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
private Integer cstmrSno; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasGroupModel { |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
private String groupNm; |
||||||
|
|
||||||
|
private String groupTypeCd; |
||||||
|
|
||||||
|
private int cstmrSno; |
||||||
|
|
||||||
|
private Date createDt; |
||||||
|
|
||||||
|
private Date updateDt; |
||||||
|
|
||||||
|
private String trmnlId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.model; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnRqModel; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class BasGroupRqModel extends ComnRqModel{ |
||||||
|
|
||||||
|
private String groupNm; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.model; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingModel; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class BasGroupUserListModel extends ComnPagingModel{ |
||||||
|
|
||||||
|
private String memberName; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
private int cstmrSno; |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.model; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class BasGroupUserModel { |
||||||
|
|
||||||
|
private Integer cstmrGroupSno; |
||||||
|
|
||||||
|
private String groupId; |
||||||
|
|
||||||
|
private String groupNm; |
||||||
|
|
||||||
|
private String groupTypeCd; |
||||||
|
|
||||||
|
private Integer cstmrSno; |
||||||
|
|
||||||
|
private String memberName; |
||||||
|
|
||||||
|
private String userId; |
||||||
|
|
||||||
|
private Date aprvlDt; |
||||||
|
|
||||||
|
private Date joinDt; |
||||||
|
|
||||||
|
private String joinYn; |
||||||
|
|
||||||
|
private String groupAuthCd; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.model; |
||||||
|
|
||||||
|
import com.palnet.biz.api.comn.model.ComnRqModel; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class BasGroupUserRqModel extends ComnRqModel{ |
||||||
|
|
||||||
|
private String groupNm; |
||||||
|
|
||||||
|
private String memberName; |
||||||
|
|
||||||
|
private String groupAuthCd; |
||||||
|
|
||||||
|
private Integer cstmrSno; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,97 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.service; |
||||||
|
|
||||||
|
import java.util.Optional; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.data.domain.PageImpl; |
||||||
|
import org.springframework.data.domain.PageRequest; |
||||||
|
import org.springframework.data.domain.Pageable; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupAprvModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupAprvRqModel; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrGroup; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrGroupRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyGroupQueryRepository; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class BasGroupAprvService { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyGroupQueryRepository query; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrGroupRepository ptyCstmrGroupRepository; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 승인요청 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public ComnPagingRs<BasGroupAprvModel> mylist(BasGroupAprvRqModel rq){ |
||||||
|
|
||||||
|
ComnPagingRs<BasGroupAprvModel> response = new ComnPagingRs<>(); |
||||||
|
|
||||||
|
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord()); |
||||||
|
|
||||||
|
PageImpl<BasGroupAprvModel> result = query.aprvList(rq, pageable); |
||||||
|
|
||||||
|
long total = query.aprvCount(rq, pageable); |
||||||
|
|
||||||
|
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord(); |
||||||
|
|
||||||
|
response.setItems(result.getContent()); |
||||||
|
response.setTotal(total); |
||||||
|
response.setPage(rq.getPage()); |
||||||
|
response.setTotalPage(totalPage); |
||||||
|
|
||||||
|
return response; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Y : 가입 , N : 탈퇴 , B : 블럭처리 , A: 가입신청 , C : 가입신청 취소 |
||||||
|
* 승인처리 / 승인취소 처리 |
||||||
|
* @param |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public boolean update(BasGroupAprvModel rq) throws Exception{ |
||||||
|
|
||||||
|
Optional<PtyCstmrGroup> optional = ptyCstmrGroupRepository.findById(rq.getCstmrGroupSno()); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
PtyCstmrGroup entity = optional.get(); |
||||||
|
if(rq.getAprvlYn().equals("Y")){ |
||||||
|
entity.setAprvlDt(DateUtils.nowDate()); |
||||||
|
entity.setAprvlUserId(rq.getAprvlUserId()); |
||||||
|
|
||||||
|
entity.setGroupAuthCd(rq.getGroupAuthCd()); |
||||||
|
entity.setTrmnlId(rq.getTrmnlId()); |
||||||
|
} else { |
||||||
|
entity.setGroupAuthCd(""); |
||||||
|
entity.setTrmnlId(""); |
||||||
|
} |
||||||
|
entity.setAprvlYn(rq.getAprvlYn()); |
||||||
|
|
||||||
|
if(ptyCstmrGroupRepository.save(entity) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,122 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.service; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Optional; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupJoinModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupJoinRqModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupModel; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrGroup; |
||||||
|
import com.palnet.biz.jpa.entity.PtyGroupBas; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrGroupRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyGroupBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyGroupQueryRepository; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class BasGroupJoinService { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyGroupQueryRepository query; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyGroupBasRepository ptyGroupBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrGroupRepository ptyCstmrGroupRepository; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 참여할 목록 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<BasGroupJoinModel> joinFullList(BasGroupJoinRqModel rq){ |
||||||
|
|
||||||
|
List<BasGroupJoinModel> resultList = query.joinFullList(rq); |
||||||
|
|
||||||
|
return resultList; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 가입요청 처리 |
||||||
|
* @param |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public boolean create(BasGroupJoinModel rq) throws Exception{ |
||||||
|
|
||||||
|
boolean isNotJoin = query.isNotJoin(rq.getCstmrSno(), rq.getGroupId()); |
||||||
|
|
||||||
|
if(!isNotJoin) { |
||||||
|
throw new CustomException(ErrorCode.DATA_DUPLICATE); |
||||||
|
} |
||||||
|
|
||||||
|
boolean isReJoin = query.isReJoin(rq.getCstmrSno(), rq.getGroupId()); |
||||||
|
//참여 정보 입력 하기
|
||||||
|
if(!isReJoin) { |
||||||
|
PtyCstmrGroup entity2 = new PtyCstmrGroup(); |
||||||
|
entity2.setGroupId(rq.getGroupId()); |
||||||
|
entity2.setGroupAuthCd(rq.getGroupAuthCd()); //생성한 사람은 최고 권한 부여 (MASTER , LEADER, NORMAL) 로 구분 하여 사용
|
||||||
|
entity2.setCstmrSno(rq.getCstmrSno()); |
||||||
|
entity2.setJoinYn("Y"); |
||||||
|
entity2.setJoinDt(DateUtils.nowDate()); |
||||||
|
entity2.setAprvlYn("N"); |
||||||
|
if(ptyCstmrGroupRepository.save(entity2) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
}else { |
||||||
|
PtyCstmrGroup entity = ptyCstmrGroupRepository.findRejoinUser(rq.getGroupId(), rq.getCstmrSno()); |
||||||
|
entity.setJoinYn("Y"); |
||||||
|
entity.setJoinDt(DateUtils.nowDate()); |
||||||
|
ptyCstmrGroupRepository.updateWithdrwDt(rq.getGroupId(), rq.getCstmrSno()); |
||||||
|
if(ptyCstmrGroupRepository.save(entity) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
} |
||||||
|
return true; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Y : 가입 , N : 탈퇴 , B : 블럭처리 , A: 가입신청 , C : 가입신청 취소 |
||||||
|
* 가입취소 / 탈퇴 처리 |
||||||
|
* @param |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public boolean update(BasGroupJoinModel rq) throws Exception{ |
||||||
|
|
||||||
|
Optional<PtyCstmrGroup> optional = ptyCstmrGroupRepository.findById(rq.getCstmrGroupSno()); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
PtyCstmrGroup entity = optional.get(); |
||||||
|
|
||||||
|
if(rq.getJoinYn().equals("N")) { |
||||||
|
entity.setAprvlYn("N"); |
||||||
|
entity.setAprvlUserId(""); |
||||||
|
entity.setGroupAuthCd(""); |
||||||
|
entity.setWthdrwDt(DateUtils.nowDate()); |
||||||
|
} |
||||||
|
|
||||||
|
entity.setJoinYn(rq.getJoinYn()); |
||||||
|
|
||||||
|
if(ptyCstmrGroupRepository.save(entity) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,248 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.service; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Optional; |
||||||
|
import java.util.UUID; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.BeanUtils; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupJoinModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupRqModel; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrGroup; |
||||||
|
import com.palnet.biz.jpa.entity.PtyGroupBas; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrGroupRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyGroupBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyGroupQueryRepository; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
import com.palnet.comn.utils.DateUtils; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class BasGroupService { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyGroupQueryRepository query; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyGroupBasRepository ptyGroupBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrGroupRepository ptyCstmrGroupRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private JwtTokenUtil jwtTokenUtil; |
||||||
|
|
||||||
|
|
||||||
|
public String createid() { |
||||||
|
|
||||||
|
String groupId = ""; |
||||||
|
|
||||||
|
while(true) { |
||||||
|
groupId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase().substring(0, 6); |
||||||
|
Optional<PtyGroupBas> optional = ptyGroupBasRepository.findById(groupId); |
||||||
|
if(!optional.isPresent()) { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return groupId; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 나의 그룹 목록 |
||||||
|
* @param cstmrSno |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<BasGroupModel> mylist(int cstmrSno){ |
||||||
|
|
||||||
|
|
||||||
|
List<BasGroupModel> resultList = query.mylist(cstmrSno); |
||||||
|
|
||||||
|
return resultList; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 목록 |
||||||
|
* @param cstmrSno |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<BasGroupJoinModel> groupList(int cstmrSno){ |
||||||
|
|
||||||
|
String appAuth = jwtTokenUtil.getUserAuthByToken(); |
||||||
|
List<BasGroupJoinModel> resultList = new ArrayList<>(); |
||||||
|
if("SUPER".equals(appAuth)||"ADMIN".equals(appAuth)) { |
||||||
|
resultList = query.groupAdminList(cstmrSno); |
||||||
|
} else { |
||||||
|
resultList = query.groupUserList(cstmrSno); |
||||||
|
} |
||||||
|
|
||||||
|
return resultList; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 나의 그룹 - 참여 그룹 목록 |
||||||
|
* @param cstmrSno |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<BasGroupJoinModel> joinList(int cstmrSno){ |
||||||
|
|
||||||
|
List<BasGroupJoinModel> resultList = query.joinList(cstmrSno); |
||||||
|
|
||||||
|
return resultList; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 전체 그룹 목록 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<BasGroupModel> list(BasGroupRqModel rq){ |
||||||
|
|
||||||
|
|
||||||
|
List<BasGroupModel> resultList = query.list(rq); |
||||||
|
|
||||||
|
return resultList; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 상세 조회 |
||||||
|
* @param groupId |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public BasGroupModel detail(String groupId) throws Exception{ |
||||||
|
|
||||||
|
BasGroupModel model = new BasGroupModel(); |
||||||
|
|
||||||
|
Optional<PtyGroupBas> optional = ptyGroupBasRepository.findById(groupId); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
PtyGroupBas entity = optional.get(); |
||||||
|
|
||||||
|
BeanUtils.copyProperties(entity , model); |
||||||
|
|
||||||
|
|
||||||
|
return model; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 생성 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public boolean create(BasGroupModel rq) throws Exception{ |
||||||
|
|
||||||
|
Optional<PtyGroupBas> optional = ptyGroupBasRepository.findById(rq.getGroupId()); |
||||||
|
List<PtyGroupBas> groupNm = ptyGroupBasRepository.findByGroupNm(rq.getGroupNm()); |
||||||
|
for(PtyGroupBas name : groupNm) { |
||||||
|
if(rq.getGroupNm().equals(name.getGroupNm())) { |
||||||
|
throw new CustomException(ErrorCode.DATA_DUPLICATE); |
||||||
|
} |
||||||
|
} |
||||||
|
if (optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_DUPLICATE); |
||||||
|
} |
||||||
|
|
||||||
|
PtyGroupBas entity = new PtyGroupBas(); |
||||||
|
BeanUtils.copyProperties(rq , entity); |
||||||
|
entity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
entity.setUseYn("Y"); |
||||||
|
entity.setCreateDt(DateUtils.nowDate()); |
||||||
|
entity.setTrmnlId(rq.getTrmnlId()); |
||||||
|
|
||||||
|
//참여 정보 입력 하기
|
||||||
|
PtyCstmrGroup entity2 = new PtyCstmrGroup(); |
||||||
|
entity2.setGroupId(rq.getGroupId()); |
||||||
|
// entity2.setGroupAuthCd("CREATER"); //생성한 사람은 최고 권한 부여 (CREATER , ADMIN , USER) 로 구분 하여 사용
|
||||||
|
entity2.setGroupAuthCd("MASTER"); //생성한 사람은 최고 권한 부여 (MASTER , LEADER, NORMAL) 로 구분 하여 사용
|
||||||
|
entity2.setAprvlYn("Y"); //자동 승인 처리 함
|
||||||
|
entity2.setAprvlDt(DateUtils.nowDate()); |
||||||
|
entity2.setCstmrSno(rq.getCstmrSno()); |
||||||
|
entity2.setJoinYn("Y"); |
||||||
|
entity2.setJoinDt(DateUtils.nowDate()); |
||||||
|
entity2.setTrmnlId(rq.getTrmnlId()); |
||||||
|
|
||||||
|
if( ptyGroupBasRepository.save(entity) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
|
||||||
|
if(ptyCstmrGroupRepository.save(entity2) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
|
||||||
|
return true; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 수정 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public boolean update(BasGroupModel rq) throws Exception{ |
||||||
|
|
||||||
|
Optional<PtyGroupBas> optional = ptyGroupBasRepository.findById(rq.getGroupId()); |
||||||
|
List<PtyGroupBas> groupNm = ptyGroupBasRepository.findByGroupNm(rq.getGroupNm()); |
||||||
|
for(PtyGroupBas name : groupNm) { |
||||||
|
if(rq.getGroupNm().equals(name.getGroupNm())) { |
||||||
|
throw new CustomException(ErrorCode.DATA_DUPLICATE); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
PtyGroupBas entity = optional.get(); |
||||||
|
entity.setGroupNm(rq.getGroupNm()); |
||||||
|
entity.setGroupTypeCd(rq.getGroupTypeCd()); |
||||||
|
entity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
|
||||||
|
if(ptyGroupBasRepository.save(entity) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
|
||||||
|
return true; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 삭제 |
||||||
|
* @param groupId |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public boolean delete(String groupId) throws Exception{ |
||||||
|
|
||||||
|
Optional<PtyGroupBas> optional = ptyGroupBasRepository.findById(groupId); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
PtyGroupBas entity = optional.get(); |
||||||
|
entity.setUseYn("N"); |
||||||
|
entity.setUpdateDt(DateUtils.nowDate()); |
||||||
|
|
||||||
|
if(ptyGroupBasRepository.save(entity) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
|
||||||
|
return true; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,120 @@ |
|||||||
|
package com.palnet.biz.api.bas.group.service; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Optional; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.data.domain.PageImpl; |
||||||
|
import org.springframework.data.domain.PageRequest; |
||||||
|
import org.springframework.data.domain.Pageable; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import com.palnet.biz.api.anls.hstry.model.AnlsHstryRsModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupUserListModel; |
||||||
|
import com.palnet.biz.api.bas.group.model.BasGroupUserModel; |
||||||
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
||||||
|
import com.palnet.biz.jpa.entity.PtyCstmrGroup; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrGroupRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyGroupBasRepository; |
||||||
|
import com.palnet.biz.jpa.repository.pty.PtyGroupQueryRepository; |
||||||
|
import com.palnet.comn.code.ErrorCode; |
||||||
|
import com.palnet.comn.exception.CustomException; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class BasGroupUserService { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyGroupQueryRepository query; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyGroupBasRepository ptyGroupBasRepository; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private PtyCstmrGroupRepository ptyCstmrGroupRepository; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹 사용자 조회 |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public ComnPagingRs<BasGroupUserModel> list(BasGroupUserListModel rq){ |
||||||
|
|
||||||
|
ComnPagingRs<BasGroupUserModel> response = new ComnPagingRs<>(); |
||||||
|
|
||||||
|
Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord()); |
||||||
|
|
||||||
|
PageImpl<BasGroupUserModel> result = query.userList(rq, pageable); |
||||||
|
|
||||||
|
long total = query.userCount(rq, pageable); |
||||||
|
|
||||||
|
long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord(); |
||||||
|
|
||||||
|
response.setItems(result.getContent()); |
||||||
|
response.setTotal(total); |
||||||
|
response.setPage(rq.getPage()); |
||||||
|
response.setTotalPage(totalPage); |
||||||
|
|
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 그룹사용자 권한수정 / 블럭 처리 |
||||||
|
* @param |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public boolean update(BasGroupUserModel rq) throws Exception{ |
||||||
|
|
||||||
|
Optional<PtyCstmrGroup> optional = ptyCstmrGroupRepository.findById(rq.getCstmrGroupSno()); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
|
||||||
|
PtyCstmrGroup entity = optional.get(); |
||||||
|
|
||||||
|
entity.setGroupAuthCd(rq.getGroupAuthCd()); |
||||||
|
entity.setJoinYn(rq.getJoinYn()); |
||||||
|
|
||||||
|
if(ptyCstmrGroupRepository.save(entity) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
return true; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public boolean delegate(List<BasGroupUserModel> rq) throws Exception{ |
||||||
|
|
||||||
|
for(BasGroupUserModel model : rq) { |
||||||
|
BasGroupUserModel userInfo = new BasGroupUserModel(); |
||||||
|
|
||||||
|
userInfo.setCstmrGroupSno(model.getCstmrGroupSno()); |
||||||
|
userInfo.setGroupAuthCd(model.getGroupAuthCd()); |
||||||
|
userInfo.setJoinYn(model.getJoinYn()); |
||||||
|
|
||||||
|
Optional<PtyCstmrGroup> optional = ptyCstmrGroupRepository.findById(userInfo.getCstmrGroupSno()); |
||||||
|
|
||||||
|
if (!optional.isPresent()) { |
||||||
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
||||||
|
} |
||||||
|
PtyCstmrGroup entity = optional.get(); |
||||||
|
|
||||||
|
entity.setGroupAuthCd(model.getGroupAuthCd()); |
||||||
|
entity.setJoinYn(model.getJoinYn()); |
||||||
|
|
||||||
|
if(ptyCstmrGroupRepository.save(entity) == null) |
||||||
|
throw new CustomException(ErrorCode.FAIL); |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package com.palnet.biz.api.comn.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class ComnPagingModel { |
||||||
|
|
||||||
|
private int record = 10; // 데이터 표출 수
|
||||||
|
private int page = 0; // 현재 페이지
|
||||||
|
private int stIdx = 0; // 시작 위치
|
||||||
|
private int endIdx = 0; // 끝 위치
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.palnet.biz.api.comn.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class ComnPagingRs<T> { |
||||||
|
|
||||||
|
private long total; // 전체 리스트 수
|
||||||
|
private long totalPage; // 전체 페이지 수
|
||||||
|
private long page; // 현재 페이지
|
||||||
|
|
||||||
|
private List<T> items; // 현재 페이지 데이터
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.palnet.biz.api.comn.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class ComnRqModel extends ComnPagingModel { |
||||||
|
private String stDate; |
||||||
|
|
||||||
|
private String endDate; |
||||||
|
|
||||||
|
private String search1; |
||||||
|
|
||||||
|
private String searchType1; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
package com.palnet.biz.api.comn.model; |
||||||
|
|
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
|
||||||
|
import java.util.Map; |
||||||
|
import java.util.concurrent.ConcurrentHashMap; |
||||||
|
|
||||||
|
@Component |
||||||
|
public class ControlGpsDataContext { |
||||||
|
|
||||||
|
private Map<String, String> idntfKey; |
||||||
|
|
||||||
|
public ControlGpsDataContext() { |
||||||
|
this.idntfKey = new ConcurrentHashMap<>(); |
||||||
|
} |
||||||
|
|
||||||
|
public void putIdntfKey(String key, String value) { |
||||||
|
idntfKey.put(key, value); |
||||||
|
} |
||||||
|
|
||||||
|
public void removeIdntfKey(String key) { |
||||||
|
idntfKey.remove(key); |
||||||
|
} |
||||||
|
|
||||||
|
public String getIndtfKey(String key) { |
||||||
|
return idntfKey.get(key); |
||||||
|
} |
||||||
|
|
||||||
|
public Map<String, String> getAllKeys() { |
||||||
|
return idntfKey; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package com.palnet.biz.api.comn.response; |
||||||
|
|
||||||
|
public abstract class BasicResponse { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.palnet.biz.api.comn.response; |
||||||
|
|
||||||
|
import com.palnet.comn.code.RSErrorCode; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class ErrorResponse extends BasicResponse{ |
||||||
|
|
||||||
|
private String errorMessage; |
||||||
|
private String errorCode; |
||||||
|
|
||||||
|
public ErrorResponse(String errorMessage) { |
||||||
|
this.errorMessage = errorMessage; |
||||||
|
this.errorCode = "404"; |
||||||
|
} |
||||||
|
|
||||||
|
public ErrorResponse(RSErrorCode code) { |
||||||
|
this.errorMessage = code.message(); |
||||||
|
this.errorCode = code.code(); |
||||||
|
} |
||||||
|
public ErrorResponse(String errorMessage, String errorCode) { |
||||||
|
this.errorMessage = errorMessage; |
||||||
|
this.errorCode = errorCode; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
package com.palnet.biz.api.comn.response; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper=false) |
||||||
|
public class SuccessResponse<T> extends BasicResponse { |
||||||
|
|
||||||
|
private int count; |
||||||
|
private T data; |
||||||
|
|
||||||
|
public SuccessResponse(T data) { |
||||||
|
this.data = data; |
||||||
|
if(data instanceof List) { |
||||||
|
this.count = ((List<?>)data).size(); |
||||||
|
} else { |
||||||
|
this.count = 1; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,299 @@ |
|||||||
|
package com.palnet.biz.api.ctr.cntrl.controller; |
||||||
|
|
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStreamReader; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.net.URL; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.time.LocalTime; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
import com.palnet.biz.api.ctr.cntrl.model.*; |
||||||
|
import com.palnet.biz.scheduler.ctr.model.CtrTrnsLctnModel; |
||||||
|
import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService; |
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||||
|
import org.json.simple.JSONObject; |
||||||
|
import org.json.simple.parser.JSONParser; |
||||||
|
import org.json.simple.parser.ParseException; |
||||||
|
import org.locationtech.jts.geom.Coordinate; |
||||||
|
import org.springframework.http.HttpStatus; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; |
||||||
|
import com.palnet.biz.api.comn.response.BasicResponse; |
||||||
|
import com.palnet.biz.api.comn.response.ErrorResponse; |
||||||
|
import com.palnet.biz.api.comn.response.SuccessResponse; |
||||||
|
import com.palnet.biz.api.ctr.cntrl.service.CtrCntrlService; |
||||||
|
import com.palnet.comn.model.GPHistoryModel; |
||||||
|
|
||||||
|
import lombok.extern.log4j.Log4j2; |
||||||
|
|
||||||
|
@Log4j2 |
||||||
|
@RestController |
||||||
|
@RequestMapping(value = "/api/ctr/cntrl", produces = {MediaType.APPLICATION_JSON_VALUE}) |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
public class CtrCntrlController { |
||||||
|
|
||||||
|
private final CtrCntrlService service; |
||||||
|
|
||||||
|
public CtrCntrlController(CtrCntrlService service) { |
||||||
|
this.service = service; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO 드론 관제 이력 목록 (Socket 분리 전) |
||||||
|
* |
||||||
|
* @param id - 관제 ID |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/history/{id}") |
||||||
|
@ApiOperation(value = "TODO 드론 관제 이력 목록 (Socket 분리 전)") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> historyList(@PathVariable String id) { |
||||||
|
List<GPHistoryModel> result = null; |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.getListHistory(id); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(result)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO 드론 관제 상세 정보 |
||||||
|
* |
||||||
|
* @param id - 관제 ID |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/detail/{id}") |
||||||
|
@ApiOperation(value = "TODO 드론 관제 상세 정보") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> detail(@PathVariable String id) { |
||||||
|
CtrCntrlDtlModel result = null; |
||||||
|
|
||||||
|
try { |
||||||
|
result = service.getDetail(id); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
|
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<CtrCntrlDtlModel>(result)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO 드론 관제 '실시간' 이력 목록 |
||||||
|
* |
||||||
|
* @param id - 관제 ID |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/history/list/{id}") |
||||||
|
@ApiOperation(value = "TODO 드론 관제 '실시간' 이력 목록") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> history(@PathVariable String id) { |
||||||
|
List<GPHistoryModel> history; |
||||||
|
|
||||||
|
try { |
||||||
|
history = service.getHistory(id); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(history)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/api/weather") |
||||||
|
@ApiOperation(value = "드론 관제 날씨") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> restApiGetWeather(CtrCntrlWeatherModel rq) throws IOException, ParseException { |
||||||
|
JSONObject jsonObject = null; |
||||||
|
try { |
||||||
|
jsonObject = service.getWeather(rq); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<>(jsonObject)); |
||||||
|
} |
||||||
|
/** |
||||||
|
* TODO 비행 관제 사용자 권한 정보 |
||||||
|
* |
||||||
|
* @param cstmrSno |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping("/group") |
||||||
|
@ApiOperation(value = "TODO 비행 관제 사용자 권한 정보") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
@ApiImplicitParam(name = "cstmrSno",value = "고객일련번호", dataTypeClass = Integer.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> findGroupAuthInfo(int cstmrSno) { |
||||||
|
List<CtrCntrlGroupArcrftModel> list; |
||||||
|
|
||||||
|
try { |
||||||
|
list = service.getGroupAuthInfo(); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(list)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO 비행 관제 사용자 비행 계획서 정보 |
||||||
|
* |
||||||
|
* @param idntfNum |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping("/flight_plan/{idntfNum}") |
||||||
|
@ApiOperation(value = "TODO 비행 관제 사용자 비행 계획서 정보") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
@ApiImplicitParam(name = "idtfNum",value = "식별번호", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> findFlightPlan(@PathVariable("idntfNum") String idntfNum) { |
||||||
|
List<BasFlightPlanModel> list; |
||||||
|
|
||||||
|
try { |
||||||
|
list = service.getFlightPlan(idntfNum); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(list)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO 드론 운행 시작 후 알람 목록 |
||||||
|
* |
||||||
|
* @param id - 관제 ID |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping(value = "/warn/detail/{id}") |
||||||
|
@ApiOperation(value = "TODO 드론 운행 시작 후 알람 목록") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
@ApiImplicitParam(name = "id",value = "관제ID", dataTypeClass = String.class) |
||||||
|
public ResponseEntity<? extends BasicResponse> warnDetail(@PathVariable String id){ |
||||||
|
List<CtrCntrlWarnLogModel> warnLog; |
||||||
|
|
||||||
|
try { |
||||||
|
warnLog = service.getWarnLog(id); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(warnLog)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO 기체 별 최신 비정상 로그 및 비정상 로그 전체 개수 |
||||||
|
* |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@PostMapping(value = "/arcrft/warn/list") |
||||||
|
@ApiOperation(value = "TODO 기체 별 최신 비정상 로그 및 비정상 로그 전체 개수") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> arcrftWarnList(@RequestBody CtrCntrlArcrftWarnRqModel rq){ |
||||||
|
// public ResponseEntity<? extends BasicResponse> arcrftWarnList(@RequestParam("id") String id){
|
||||||
|
List<CtrCntrlArcrftWarnModel> arcrftWarnList; |
||||||
|
Map<String, CtrCntrlArcrftWarnModel> result = new HashMap<>(); |
||||||
|
|
||||||
|
try { |
||||||
|
arcrftWarnList = service.getArcrftWarnList(rq.getCntrlId()); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse<List>(arcrftWarnList)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO 비행 관제 구역 비정상 상황 체크 |
||||||
|
* |
||||||
|
* @param rq |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@PostMapping("/contains") |
||||||
|
@ApiOperation(value = "TODO 비행 관제 구역 비정상 상황 체크") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> checkPlanContains(@RequestBody CtrCntrlPlanContainsRq rq) { |
||||||
|
CtrCntrlPlanContainsRs rs; |
||||||
|
|
||||||
|
try { |
||||||
|
rs = service.checkPlanContains(rq); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
|
||||||
|
return ResponseEntity.ok().body(new SuccessResponse(rs)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO 실시간 Control ID 발급 |
||||||
|
* |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping("/id/{id}") |
||||||
|
@ApiOperation(value = "TODO 실시간 Control ID 발급") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> getId(@PathVariable String id) { |
||||||
|
Map<String, String> result; |
||||||
|
try { |
||||||
|
result = service.getId(id); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse(result)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO 비행 관제 기체의 비정상 상황 확인 |
||||||
|
* |
||||||
|
* @param id |
||||||
|
* @param lat |
||||||
|
* @param lon |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GetMapping("/warn/{id}/{lat}/{lon}") |
||||||
|
@ApiOperation(value = "TODO 비행 관제 기체의 비정상 상황 확인") |
||||||
|
@Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") |
||||||
|
public ResponseEntity<? extends BasicResponse> checkWarring(@PathVariable String id, |
||||||
|
@PathVariable Double lat, |
||||||
|
@PathVariable Double lon) { |
||||||
|
Map<String, String> result; |
||||||
|
try { |
||||||
|
result = service.checkWarring(id, lat, lon); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("IGNORE : {}", e); |
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
||||||
|
.body(new ErrorResponse("Server Error", "-1")); |
||||||
|
} |
||||||
|
return ResponseEntity.ok().body(new SuccessResponse(result)); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package com.palnet.biz.api.ctr.cntrl.controller; |
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
@RestController |
||||||
|
public class PingController { |
||||||
|
|
||||||
|
@GetMapping("/ping") |
||||||
|
public String ping(){ |
||||||
|
return "SUCCESS"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
package com.palnet.biz.api.ctr.cntrl.controller; |
||||||
|
|
||||||
|
import com.palnet.biz.api.ctr.cntrl.service.SocketReceiverService; |
||||||
|
import com.palnet.comn.model.GPModel; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
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 java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.concurrent.Callable; |
||||||
|
|
||||||
|
/** |
||||||
|
* packageName : com.palnet.biz.api.ctr.cntrl.controller |
||||||
|
* fileName : SocketReciverController |
||||||
|
* author : dhji |
||||||
|
* date : 2023-08-29(029) |
||||||
|
* description : |
||||||
|
* =========================================================== |
||||||
|
* DATE AUTHOR NOTE |
||||||
|
* ----------------------------------------------------------- |
||||||
|
* 2023-08-29(029) dhji 최초 생성 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
@RequiredArgsConstructor |
||||||
|
@RestController |
||||||
|
@RequestMapping("/api/server") |
||||||
|
public class SocketReceiverController { |
||||||
|
|
||||||
|
private final SocketReceiverService socketReceiverService; |
||||||
|
@PostMapping("/receiver") |
||||||
|
public ResponseEntity<?> receiver(@RequestBody GPModel model) { |
||||||
|
System.out.println("socket message : " + model); |
||||||
|
socketReceiverService.insert(model); |
||||||
|
return ResponseEntity.ok().build(); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/receiver/async") |
||||||
|
public Callable<String> asyncReceiver(@RequestBody GPModel model) { |
||||||
|
return () -> { |
||||||
|
log.info("websocket message : {}", model); |
||||||
|
socketReceiverService.insert(model); |
||||||
|
return "OK"; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/receiver/all") |
||||||
|
public ResponseEntity<?> receiver(@RequestBody Map<String, List<GPModel>> models) { |
||||||
|
// System.out.println("socket message : " + models);
|
||||||
|
socketReceiverService.insertAll(models); |
||||||
|
return ResponseEntity.ok().build(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package com.palnet.biz.api.ctr.cntrl.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class CtrCntrlArcrftWarnModel { |
||||||
|
|
||||||
|
private String cntrlId; |
||||||
|
private String warnType; |
||||||
|
private String idntfNum; |
||||||
|
private Date occurDt; |
||||||
|
private Date createDt; |
||||||
|
private String createUserId; |
||||||
|
|
||||||
|
private Integer warnCount; |
||||||
|
|
||||||
|
private boolean controlWarnCd = false; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
package com.palnet.biz.api.ctr.cntrl.model; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class CtrCntrlArcrftWarnRqModel { |
||||||
|
private String cntrlId; |
||||||
|
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue