지대한
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