commit d4a18aef89becb5b32b81faf38edb9dc8a95ecd1 Author: mjkhan21 Date: Fri Nov 22 10:39:22 2024 +0900 최초 커밋 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2974683 --- /dev/null +++ b/.gitignore @@ -0,0 +1,69 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### 로그 ### +logs/ + +### 프로젝트 내 생성되는 파일 ### +files/ + +### 시군구별 설정파일 ### +src/main/resources/application.yml + +src/main/resources/xit-crypto.conf +src/main/resources/xit-syslog.conf + +src/main/resources/intf-conf +src/main/resources/intf-conf/disabled-parking.conf +src/main/resources/intf-conf/file-job.conf +src/main/resources/intf-conf/gpki.conf +src/main/resources/intf-conf/lntris.conf +src/main/resources/intf-conf/xit-lvis.properties + +src/main/resources/template +src/main/resources/template/disabled-parking-request.xml + +src/main/resources/spring +src/main/resources/spring/context-scheduler.xml + +src/main/resources/ssl +src/main/resources/ssl/fims.cer +src/main/resources/ssl/fimskeystore.pkcs12 +src/main/resources/ssl/fimstrust.pkcs12 +src/main/resources/.keystore + +src/main/resources/log4jdbc.log4j2.properties +src/main/resources/logback-spring.xml + +src/main/resources/sgg.txt \ No newline at end of file diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..bf82ff0 Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..ca5ab4b --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar diff --git a/.pmd b/.pmd new file mode 100644 index 0000000..34efc17 --- /dev/null +++ b/.pmd @@ -0,0 +1,1840 @@ + + + false + .ruleset + + + + + AbstractClassWithoutAbstractMethod + Best Practices + + + AccessorClassGeneration + Best Practices + + + AccessorMethodGeneration + Best Practices + + + AmbiguousResolution + Best Practices + + + ApexAssertionsShouldIncludeMessage + Best Practices + + + ApexUnitTestClassShouldHaveAsserts + Best Practices + + + ApexUnitTestClassShouldHaveRunAs + Best Practices + + + ApexUnitTestMethodShouldHaveIsTestAnnotation + Best Practices + + + ApexUnitTestShouldNotUseSeeAllDataTrue + Best Practices + + + ArrayIsStoredDirectly + Best Practices + + + AvoidGlobalModifier + Best Practices + + + AvoidInlineStyles + Best Practices + + + AvoidLogicInTrigger + Best Practices + + + AvoidMessageDigestField + Best Practices + + + AvoidPrintStackTrace + Best Practices + + + AvoidReassigningCatchVariables + Best Practices + + + AvoidReassigningLoopVariables + Best Practices + + + AvoidReassigningParameters + Best Practices + + + AvoidReassigningParameters + Best Practices + + + AvoidStringBufferField + Best Practices + + + AvoidUsingHardCodedIP + Best Practices + + + AvoidWithStatement + Best Practices + + + CheckResultSet + Best Practices + + + ClassStartNameEqualsEndName + Best Practices + + + ConnectUsingNonConnector + Best Practices + + + ConsistentReturn + Best Practices + + + ConstantsInInterface + Best Practices + + + DebugsShouldUseLoggingLevel + Best Practices + + + DefaultLabelNotLastInSwitchStmt + Best Practices + + + DontNestJsfInJstlIteration + Best Practices + + + DoubleBraceInitialization + Best Practices + + + ForLoopCanBeForeach + Best Practices + + + ForLoopVariableCount + Best Practices + + + GlobalVariable + Best Practices + + + GuardLogStatement + Best Practices + + + JUnit4SuitesShouldUseSuiteAnnotation + Best Practices + + + JUnit4TestShouldUseAfterAnnotation + Best Practices + + + JUnit4TestShouldUseBeforeAnnotation + Best Practices + + + JUnit4TestShouldUseTestAnnotation + Best Practices + + + JUnit5TestShouldBePackagePrivate + Best Practices + + + JUnitAssertionsShouldIncludeMessage + Best Practices + + + JUnitTestContainsTooManyAsserts + Best Practices + + + JUnitTestsShouldIncludeAssert + Best Practices + + + JUnitUseExpected + Best Practices + + + LiteralsFirstInComparisons + Best Practices + + + LooseCoupling + Best Practices + + + MethodReturnsInternalArray + Best Practices + + + MissingOverride + Best Practices + + + NoClassAttribute + Best Practices + + + NoHtmlComments + Best Practices + + + NoJspForward + Best Practices + + + OneDeclarationPerLine + Best Practices + + + PositionLiteralsFirstInCaseInsensitiveComparisons + Best Practices + + + PositionLiteralsFirstInComparisons + Best Practices + + + PreserveStackTrace + Best Practices + + + PrimitiveWrapperInstantiation + Best Practices + + + ReplaceEnumerationWithIterator + Best Practices + + + ReplaceHashtableWithMap + Best Practices + + + ReplaceVectorWithList + Best Practices + + + ScopeForInVariable + Best Practices + + + SimplifiableTestAssertion + Best Practices + + + SwitchStmtsShouldHaveDefault + Best Practices + + + SystemPrintln + Best Practices + + + TomKytesDespair + Best Practices + + + UnnecessaryTypeAttribute + Best Practices + + + UnusedAssignment + Best Practices + + + UnusedFormalParameter + Best Practices + + + UnusedImports + Best Practices + + + UnusedLocalVariable + Best Practices + + + UnusedLocalVariable + Best Practices + + + UnusedMacroParameter + Best Practices + + + UnusedPrivateField + Best Practices + + + UnusedPrivateMethod + Best Practices + + + UseAltAttributeForImages + Best Practices + + + UseAssertEqualsInsteadOfAssertTrue + Best Practices + + + UseAssertNullInsteadOfAssertTrue + Best Practices + + + UseAssertSameInsteadOfAssertTrue + Best Practices + + + UseAssertTrueInsteadOfAssertEquals + Best Practices + + + UseBaseWithParseInt + Best Practices + + + UseCollectionIsEmpty + Best Practices + + + UseStandardCharsets + Best Practices + + + UseTryWithResources + Best Practices + + + UseVarargs + Best Practices + + + WhileLoopWithLiteralBoolean + Best Practices + + + AbstractNaming + Code Style + + + AssignmentInOperand + Code Style + + + AtLeastOneConstructor + Code Style + + + AvoidDollarSigns + Code Style + + + AvoidFinalLocalVariable + Code Style + + + AvoidPrefixingMethodParameters + Code Style + + + AvoidProtectedFieldInFinalClass + Code Style + + + AvoidProtectedMethodInFinalClassNotExtending + Code Style + + + AvoidTabCharacter + Code Style + + + AvoidUsingNativeCode + Code Style + + + BooleanGetMethodName + Code Style + + + CallSuperInConstructor + Code Style + + + ClassNamingConventions + Code Style + + + ClassNamingConventions + Code Style + + + CodeFormat + Code Style + + + CommentDefaultAccessModifier + Code Style + + + ConfusingTernary + Code Style + + + ControlStatementBraces + Code Style + + + DefaultPackage + Code Style + + + DontImportJavaLang + Code Style + + + DuplicateImports + Code Style + + + DuplicateJspImports + Code Style + + + EmptyControlStatement + Code Style + + + EmptyMethodInAbstractClassShouldBeAbstract + Code Style + + + ExtendsObject + Code Style + + + FieldDeclarationsShouldBeAtStart + Code Style + + + FieldDeclarationsShouldBeAtStartOfClass + Code Style + + + FieldNamingConventions + Code Style + + + FieldNamingConventions + Code Style + + + FinalParameterInAbstractMethod + Code Style + + + ForLoopNaming + Code Style + + + ForLoopShouldBeWhileLoop + Code Style + + + ForLoopsMustUseBraces + Code Style + + + ForLoopsMustUseBraces + Code Style + + + ForLoopsMustUseBraces + Code Style + + + FormalParameterNamingConventions + Code Style + + + FormalParameterNamingConventions + Code Style + + + GenericsNaming + Code Style + + + IdenticalCatchBranches + Code Style + + + IfElseStmtsMustUseBraces + Code Style + + + IfElseStmtsMustUseBraces + Code Style + + + IfElseStmtsMustUseBraces + Code Style + + + IfStmtsMustUseBraces + Code Style + + + IfStmtsMustUseBraces + Code Style + + + IfStmtsMustUseBraces + Code Style + + + LineLength + Code Style + + + LinguisticNaming + Code Style + + + LocalHomeNamingConvention + Code Style + + + LocalInterfaceSessionNamingConvention + Code Style + + + LocalVariableCouldBeFinal + Code Style + + + LocalVariableNamingConventions + Code Style + + + LocalVariableNamingConventions + Code Style + + + LongVariable + Code Style + + + MDBAndSessionBeanNamingConvention + Code Style + + + MethodArgumentCouldBeFinal + Code Style + + + MethodNamingConventions + Code Style + + + MethodNamingConventions + Code Style + + + MIsLeadingVariableName + Code Style + + + MisplacedPragma + Code Style + + + NoElseReturn + Code Style + + + NoPackage + Code Style + + + OneDeclarationPerLine + Code Style + + + OnlyOneReturn + Code Style + + + PackageCase + Code Style + + + PrematureDeclaration + Code Style + + + PropertyNamingConventions + Code Style + + + RemoteInterfaceNamingConvention + Code Style + + + RemoteSessionInterfaceNamingConvention + Code Style + + + ShortClassName + Code Style + + + ShortMethodName + Code Style + + + ShortVariable + Code Style + + + SuspiciousConstantFieldName + Code Style + + + TooManyStaticImports + Code Style + + + UnnecessaryAnnotationValueElement + Code Style + + + UnnecessaryBlock + Code Style + + + UnnecessaryCast + Code Style + + + UnnecessaryConstructor + Code Style + + + UnnecessaryFullyQualifiedName + Code Style + + + UnnecessaryImport + Code Style + + + UnnecessaryLocalBeforeReturn + Code Style + + + UnnecessaryModifier + Code Style + + + UnnecessaryParentheses + Code Style + + + UnnecessaryReturn + Code Style + + + UnnecessarySemicolon + Code Style + + + UnreachableCode + Code Style + + + UseConcatOnce + Code Style + + + UseDiamondOperator + Code Style + + + UselessParentheses + Code Style + + + UselessQualifiedThis + Code Style + + + UseShortArrayInitializer + Code Style + + + UseUnderscoresInNumericLiterals + Code Style + + + VariableNamingConventions + Code Style + + + VariableNamingConventions + Code Style + + + WhileLoopsMustUseBraces + Code Style + + + WhileLoopsMustUseBraces + Code Style + + + WhileLoopsMustUseBraces + Code Style + + + AbstractClassWithoutAnyMethod + Design + + + AvoidCatchingGenericException + Design + + + AvoidDeeplyNestedIfStmts + Design + + + AvoidDeeplyNestedIfStmts + Design + + + AvoidDeeplyNestedIfStmts + Design + + + AvoidRethrowingException + Design + + + AvoidThrowingNewInstanceOfSameException + Design + + + AvoidThrowingNullPointerException + Design + + + AvoidThrowingRawExceptionTypes + Design + + + AvoidUncheckedExceptionsInSignatures + Design + + + ClassWithOnlyPrivateConstructorsShouldBeFinal + Design + + + CognitiveComplexity + Design + + + CognitiveComplexity + Design + + + CollapsibleIfStatements + Design + + + CollapsibleIfStatements + Design + + + CouplingBetweenObjects + Design + + + CyclomaticComplexity + Design + + + CyclomaticComplexity + Design + + + CyclomaticComplexity + Design + + + DataClass + Design + + + DoNotExtendJavaLangError + Design + + + ExceptionAsFlowControl + Design + + + ExcessiveClassLength + Design + + + ExcessiveClassLength + Design + + + ExcessiveImports + Design + + + ExcessiveMethodLength + Design + + + ExcessiveMethodLength + Design + + + ExcessiveObjectLength + Design + + + ExcessivePackageBodyLength + Design + + + ExcessivePackageSpecificationLength + Design + + + ExcessiveParameterList + Design + + + ExcessiveParameterList + Design + + + ExcessiveParameterList + Design + + + ExcessivePublicCount + Design + + + ExcessivePublicCount + Design + + + ExcessiveTemplateLength + Design + + + ExcessiveTypeLength + Design + + + FinalFieldCouldBeStatic + Design + + + GodClass + Design + + + ImmutableField + Design + + + LawOfDemeter + Design + + + LogicInversion + Design + + + LoosePackageCoupling + Design + + + ModifiedCyclomaticComplexity + Design + + + MutableStaticState + Design + + + NcssConstructorCount + Design + + + NcssConstructorCount + Design + + + NcssCount + Design + + + NcssMethodCount + Design + + + NcssMethodCount + Design + + + NcssMethodCount + Design + + + NcssObjectCount + Design + + + NcssTypeCount + Design + + + NcssTypeCount + Design + + + NoInlineJavaScript + Design + + + NoInlineScript + Design + + + NoInlineStyleInformation + Design + + + NoInlineStyles + Design + + + NoLongScripts + Design + + + NoScriptlets + Design + + + NPathComplexity + Design + + + NPathComplexity + Design + + + SignatureDeclareThrowsException + Design + + + SimplifiedTernary + Design + + + SimplifyBooleanAssertion + Design + + + SimplifyBooleanExpressions + Design + + + SimplifyBooleanReturns + Design + + + SimplifyConditional + Design + + + SingularField + Design + + + StdCyclomaticComplexity + Design + + + StdCyclomaticComplexity + Design + + + SwitchDensity + Design + + + TooManyFields + Design + + + TooManyFields + Design + + + TooManyFields + Design + + + TooManyMethods + Design + + + TooManyMethods + Design + + + UselessOverridingMethod + Design + + + UseObjectForClearerAPI + Design + + + UseUtilityClass + Design + + + ApexDoc + Documentation + + + CommentContent + Documentation + + + CommentRequired + Documentation + + + CommentSize + Documentation + + + UncommentedEmptyConstructor + Documentation + + + UncommentedEmptyMethodBody + Documentation + + + ApexCSRF + Error Prone + + + AssignmentInOperand + Error Prone + + + AssignmentToNonFinalStatic + Error Prone + + + AvoidAccessibilityAlteration + Error Prone + + + AvoidAssertAsIdentifier + Error Prone + + + AvoidBranchingStatementAsLastInLoop + Error Prone + + + AvoidCallingFinalize + Error Prone + + + AvoidCatchingNPE + Error Prone + + + AvoidCatchingThrowable + Error Prone + + + AvoidDecimalLiteralsInBigDecimalConstructor + Error Prone + + + AvoidDirectAccessTriggerMap + Error Prone + + + AvoidDuplicateLiterals + Error Prone + + + AvoidEnumAsIdentifier + Error Prone + + + AvoidFieldNameMatchingMethodName + Error Prone + + + AvoidFieldNameMatchingTypeName + Error Prone + + + AvoidHardcodingId + Error Prone + + + AvoidInstanceofChecksInCatchClause + Error Prone + + + AvoidLiteralsInIfCondition + Error Prone + + + AvoidLosingExceptionInformation + Error Prone + + + AvoidMultipleUnaryOperators + Error Prone + + + AvoidNonExistentAnnotations + Error Prone + + + AvoidTrailingComma + Error Prone + + + AvoidUsingOctalValues + Error Prone + + + BeanMembersShouldSerialize + Error Prone + + + BrokenNullCheck + Error Prone + + + CallSuperFirst + Error Prone + + + CallSuperLast + Error Prone + + + CheckSkipResult + Error Prone + + + ClassCastExceptionWithToArray + Error Prone + + + CloneMethodMustBePublic + Error Prone + + + CloneMethodMustImplementCloneable + Error Prone + + + CloneMethodReturnTypeMustMatchClassName + Error Prone + + + CloneThrowsCloneNotSupportedException + Error Prone + + + CloseResource + Error Prone + + + CompareObjectsWithEquals + Error Prone + + + ComparisonWithNaN + Error Prone + + + ConstructorCallsOverridableMethod + Error Prone + + + DataflowAnomalyAnalysis + Error Prone + + + DetachedTestCase + Error Prone + + + DoNotCallGarbageCollectionExplicitly + Error Prone + + + DoNotExtendJavaLangThrowable + Error Prone + + + DoNotHardCodeSDCard + Error Prone + + + DoNotTerminateVM + Error Prone + + + DoNotThrowExceptionInFinally + Error Prone + + + DontImportSun + Error Prone + + + DontUseFloatTypeForLoopIndices + Error Prone + + + EmptyCatchBlock + Error Prone + + + EmptyCatchBlock + Error Prone + + + EmptyFinalizer + Error Prone + + + EmptyFinallyBlock + Error Prone + + + EmptyForeachStmt + Error Prone + + + EmptyIfStmt + Error Prone + + + EmptyIfStmt + Error Prone + + + EmptyIfStmt + Error Prone + + + EmptyInitializer + Error Prone + + + EmptyStatementBlock + Error Prone + + + EmptyStatementBlock + Error Prone + + + EmptyStatementNotInLoop + Error Prone + + + EmptySwitchStatements + Error Prone + + + EmptySynchronizedBlock + Error Prone + + + EmptyTryBlock + Error Prone + + + EmptyTryOrFinallyBlock + Error Prone + + + EmptyWhileStmt + Error Prone + + + EmptyWhileStmt + Error Prone + + + EqualComparison + Error Prone + + + EqualsNull + Error Prone + + + FinalizeDoesNotCallSuperFinalize + Error Prone + + + FinalizeOnlyCallsSuperFinalize + Error Prone + + + FinalizeOverloaded + Error Prone + + + FinalizeShouldBeProtected + Error Prone + + + IdempotentOperations + Error Prone + + + ImplicitSwitchFallThrough + Error Prone + + + ImportFromSamePackage + Error Prone + + + InaccessibleAuraEnabledGetter + Error Prone + + + InnaccurateNumericLiteral + Error Prone + + + InstantiationToGetClass + Error Prone + + + InvalidDependencyTypes + Error Prone + + + InvalidLogMessageFormat + Error Prone + + + JspEncoding + Error Prone + + + JumbledIncrementer + Error Prone + + + JUnitSpelling + Error Prone + + + JUnitStaticSuite + Error Prone + + + LoggerIsNotStaticFinal + Error Prone + + + MethodWithSameNameAsEnclosingClass + Error Prone + + + MethodWithSameNameAsEnclosingClass + Error Prone + + + MisplacedNullCheck + Error Prone + + + MissingSerialVersionUID + Error Prone + + + MissingStaticMethodInNonInstantiatableClass + Error Prone + + + MistypedCDATASection + Error Prone + + + MoreThanOneLogger + Error Prone + + + NonCaseLabelInSwitchStatement + Error Prone + + + NonStaticInitializer + Error Prone + + + NullAssignment + Error Prone + + + OverrideBothEqualsAndHashcode + Error Prone + + + OverrideBothEqualsAndHashcode + Error Prone + + + ProjectVersionAsDependencyVersion + Error Prone + + + ProperCloneImplementation + Error Prone + + + ProperLogger + Error Prone + + + ReturnEmptyArrayRatherThanNull + Error Prone + + + ReturnEmptyCollectionRatherThanNull + Error Prone + + + ReturnFromFinallyBlock + Error Prone + + + SimpleDateFormatNeedsLocale + Error Prone + + + SingleMethodSingleton + Error Prone + + + SingletonClassReturningNewInstance + Error Prone + + + StaticEJBFieldShouldBeFinal + Error Prone + + + StringBufferInstantiationWithChar + Error Prone + + + SuspiciousEqualsMethodName + Error Prone + + + SuspiciousHashcodeMethodName + Error Prone + + + SuspiciousOctalEscape + Error Prone + + + TestClassWithoutTestCases + Error Prone + + + TestMethodsMustBeInTestClasses + Error Prone + + + TO_DATEWithoutDateFormat + Error Prone + + + TO_DATE_TO_CHAR + Error Prone + + + TO_TIMESTAMPWithoutDateFormat + Error Prone + + + UnconditionalIfStatement + Error Prone + + + UnnecessaryBooleanAssertion + Error Prone + + + UnnecessaryCaseChange + Error Prone + + + UnnecessaryConversionTemporary + Error Prone + + + UnusedNullCheckInEquals + Error Prone + + + UseCorrectExceptionLogging + Error Prone + + + UseEqualsToCompareStrings + Error Prone + + + UselessOperationOnImmutable + Error Prone + + + UseLocaleWithCaseConversions + Error Prone + + + UseProperClassLoader + Error Prone + + + AvoidSynchronizedAtMethodLevel + Multithreading + + + AvoidThreadGroup + Multithreading + + + AvoidUsingVolatile + Multithreading + + + DoNotUseThreads + Multithreading + + + DontCallThreadRun + Multithreading + + + DoubleCheckedLocking + Multithreading + + + NonThreadSafeSingleton + Multithreading + + + UnsynchronizedStaticDateFormatter + Multithreading + + + UnsynchronizedStaticFormatter + Multithreading + + + UseConcurrentHashMap + Multithreading + + + UseNotifyAllInsteadOfNotify + Multithreading + + + AddEmptyString + Performance + + + AppendCharacterWithChar + Performance + + + AvoidArrayLoops + Performance + + + AvoidAxisNavigation + Performance + + + AvoidCalendarDateCreation + Performance + + + AvoidDebugStatements + Performance + + + AvoidDmlStatementsInLoops + Performance + + + AvoidFileStream + Performance + + + AvoidInstantiatingObjectsInLoops + Performance + + + AvoidSoqlInLoops + Performance + + + AvoidSoslInLoops + Performance + + + AvoidUsingShortType + Performance + + + BigIntegerInstantiation + Performance + + + BooleanInstantiation + Performance + + + ByteInstantiation + Performance + + + ConsecutiveAppendsShouldReuse + Performance + + + ConsecutiveLiteralAppends + Performance + + + EagerlyLoadedDescribeSObjectResult + Performance + + + InefficientEmptyStringCheck + Performance + + + InefficientStringBuffering + Performance + + + InsufficientStringBufferDeclaration + Performance + + + IntegerInstantiation + Performance + + + LongInstantiation + Performance + + + OperationWithLimitsInLoop + Performance + + + OptimizableToArrayCall + Performance + + + RedundantFieldInitializer + Performance + + + ShortInstantiation + Performance + + + SimplifyStartsWith + Performance + + + StringInstantiation + Performance + + + StringToString + Performance + + + TooFewBranchesForASwitchStatement + Performance + + + UnnecessaryWrapperObjectCreation + Performance + + + UseArrayListInsteadOfVector + Performance + + + UseArraysAsList + Performance + + + UseIndexOfChar + Performance + + + UseIOStreamsWithApacheCommonsFileItem + Performance + + + UselessStringValueOf + Performance + + + UseStringBufferForStringAppends + Performance + + + UseStringBufferLength + Performance + + + ApexBadCrypto + Security + + + ApexCRUDViolation + Security + + + ApexDangerousMethods + Security + + + ApexInsecureEndpoint + Security + + + ApexOpenRedirect + Security + + + ApexSharingViolations + Security + + + ApexSOQLInjection + Security + + + ApexSuggestUsingNamedCred + Security + + + ApexXSSFromEscapeFalse + Security + + + ApexXSSFromURLParam + Security + + + HardCodedCryptoKey + Security + + + IframeMissingSrcAttribute + Security + + + InsecureCryptoIv + Security + + + NoUnsanitizedJSPExpression + Security + + + VfCsrf + Security + + + VfHtmlStyleTagXss + Security + + + VfUnescapeEl + Security + + + false + true + true + diff --git a/README.md b/README.md new file mode 100644 index 0000000..0e63dea --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# 과태료 통합 관리 시스템 + +### 시군구별 설정 파일 + +```text +로컬에서 서버 기동시 +https://nas.xit.co.kr:5001(211.119.124.120)의 네트워크 드라이브에서 +"/03. 연구개발실/fims설정파일"에 시군구별 폴더가 있고 해당 시군구 폴더의 파일들을 +src/main/resources폴더로 복사 후 기동한다. + +``` diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..8a8fb22 --- /dev/null +++ b/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..1d8ab01 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..37bdb7f --- /dev/null +++ b/pom.xml @@ -0,0 +1,78 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.7.18 + + + + xit-app + fims-chongno + 1.0.0-SNAPSHOT + fims-chongno + 특별관리지역 통행제한 과태료 시스템 + war + + + UTF-8 + 17 + + + + + maven-public + https://nas.xit.co.kr:8888/repository/maven-public/ + + + + + + maven-public + https://nas.xit.co.kr:8888/repository/maven-public/ + + true + + + false + + + + + + + + cokr.xit.app + fims-java-all + 1.0.0-SNAPSHOT + + + + cokr.xit.app + fims-web-all + 1.0.0-SNAPSHOT + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/chongno/MainApplication.java b/src/main/java/cokr/xit/fims/chongno/MainApplication.java new file mode 100644 index 0000000..76ca87e --- /dev/null +++ b/src/main/java/cokr/xit/fims/chongno/MainApplication.java @@ -0,0 +1,57 @@ +package cokr.xit.fims.chongno; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.List; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.core.io.ClassPathResource; + +import cokr.xit.base.ServletCustomizer; +import cokr.xit.fims.SpringBootApplicationBridge; +import cokr.xit.fims.task.TaskMvcConfig; + +@ImportAutoConfiguration({ServletCustomizer.class,TaskMvcConfig.class}) +@ComponentScan(basePackageClasses = cokr.xit.applib.HttpStatusCodeExceptionControllerAdvice.class) +public class MainApplication extends SpringBootApplicationBridge { + + public static void main(String[] args) { + + allowRestrictedHeaders(); + + try { + BufferedReader in = new BufferedReader(new InputStreamReader(new ClassPathResource("sgg.txt").getInputStream())); + String sgg = in.readLine(); + System.setProperty("sgg", sgg); + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + SpringApplication.run(MainApplication.class, args); + } + + public static void allowRestrictedHeaders() { + String allowRestrictedHeaders = System.getProperty("jdk.httpclient.allowRestrictedHeaders"); + if(allowRestrictedHeaders == null) { + allowRestrictedHeaders = ""; + } + List allowRestrictedHeadersArr = Arrays.asList(allowRestrictedHeaders.split(",")); + + String[] items = {"connection","host","content-length","expect","upgrade"}; + + for(String item : items) { + if(!allowRestrictedHeadersArr.contains(item)) { + if(!allowRestrictedHeaders.equals("")) { + allowRestrictedHeaders += ","; + } + allowRestrictedHeaders += item; + } + } + System.setProperty("jdk.httpclient.allowRestrictedHeaders", allowRestrictedHeaders); + } +} diff --git a/src/main/webapp/WEB-INF/jsp/dashboard.jsp b/src/main/webapp/WEB-INF/jsp/dashboard.jsp new file mode 100644 index 0000000..47a80f3 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/dashboard.jsp @@ -0,0 +1,838 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%> +<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%> + +
+
+
+
+

+ ?/? +

+ +
+
+

+ ?/? +

+ +
+
+

+ ?/? +

+ +
+
+

+ ?/? +

+ +
+
+ +
+ +
+
+
+

+ ?/? +

+ +
+
+

+ ?/? +

+ +
+
+ +
+ +
+
+
+

+ ?/? +

+ +
+
+

+ ?/? +

+ +
+
+

+ ?/? +

+ +
+
+ +
+ +
+
+
+

+ ?/? +

+ +
+
+

+ ?/? +

+ +
+
+

+ ?/? +

+ +
+
+ +
+
+
+
+
+
단속 자료 통계(유형별)
+
건수(최근 15일)
+
+
+ +
+ +
+ +
+
+
단속통계
+
처리유형별(일별)
+
+
+ +
+ +
+ +
+
+
발송통계
+
발송유형별(일별)
+
+
+ +
+ +
+ +
+
+
의견진술통계
+
처리유형별(일별)
+
+
+ +
+ +
+
+ + + +LoadScript("chartScript",wctx.url("/webjars/3rd-party/sneat/libs/chartjs/chartjs.js")); + + +var falseLineChart = ` + + +`; + +var falseDoughnutChart = ` + + +`; + +var statReqArr = []; + +fnMakeSkeleton(); +AppSupport.sleep(3000).then(() => fnMakeStatReq($("#layout-navbar input[name='taskSeCd']:checked").val())); + + +//데이터 로딩 전 이미지 표시 +function fnMakeSkeleton(){ + + $("#lineChart").hide(); + $("#doughnutChart1").hide(); + $("#doughnutChart2").hide(); + $("#doughnutChart3").hide(); + + $("#lineChartCardBody").append(falseLineChart); + $("#doughnutChart1CardBody").append(falseDoughnutChart); + $("#doughnutChart2CardBody").append(falseDoughnutChart); + $("#doughnutChart3CardBody").append(falseDoughnutChart); +} + + +//통계 요청 데이터 생성(여러 건) +function fnMakeStatReq(taskSeCd){ + var lastDay = TODAY().replaceAll("-",""); + var firstDay = DateSupport.getAddDay(-14).replaceAll("-",""); + + var defaultQuery = {}; + + + //단속구분별 전체/완료 건수 + defaultQuery = { + structureType : "dummy", + statDomain : "crdn", + groupInfoList : [ + { + refCol : "CRDN_SE_CD", + ctgrType : "code", + dtlCtgr : "FIM002" + } + ], + codeSubsetInfoList : [ + { + sourceGroup : "FIM002", + sourceCodes : ["08","09","10","11"], + targetCode : "minwon", + targetCodeVal : "민원" + }, + { + sourceGroup : "FIM002", + sourceCodes : ["06","13"], + targetCode : "dobo", + targetCodeVal : "도보" + } + ], + fixedItemId : ["01","02","minwon","dobo"], + namedNumberValueSeperator : "completeAndTotal", + globalAggregate : "count", + taskSeCd : taskSeCd, + dayColumn : "REG_DT", + firstDay : firstDay, + lastDay : lastDay + }; + + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList"); + + statReqArr.push({ + query : defaultQuery, + cursor : "card1", + statType : "progressAndTotal" + }); + + //초기자료처리별 전체/완료건수 + defaultQuery = { + structureType : "dummy", + statDomain : "crdn", + groupInfoList : [ + { + refCol : "등록대상이첩대상구분", + ctgrType : "code", + dtlCtgr : "FIM999" + } + ], + fixedItemId : ["등록대상","이첩대상"], + namedNumberValueSeperator : "completeAndTotal", + globalAggregate : "count", + taskSeCd : taskSeCd, + dayColumn : "REG_DT", + firstDay : firstDay, + lastDay : lastDay + }; + + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList"); + + statReqArr.push({ + query : defaultQuery, + cursor : "card2", + statType : "progressAndTotal" + }); + + //발송문서별 전체/완료 건수 + defaultQuery = { + structureType : "dummy", + statDomain : "sndb", + groupInfoList : [ + { + refCol : "SNDNG_SE_CD", + ctgrType : "code", + dtlCtgr : "FIM047" + } + ], + codeSubsetInfoList : [ + { + sourceGroup : "FIM047", + sourceCodes : ["01","02"], + targetCode : "satong", + targetCodeVal : "사전통지서" + } + ], + fixedItemId : ["satong", "03", "11"], + namedNumberValueSeperator : "completeAndTotal", + globalAggregate : "count", + taskSeCd : taskSeCd, + dayColumn : "REG_DT", + firstDay : firstDay, + lastDay : lastDay + }; + + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList"); + + statReqArr.push({ + query : defaultQuery, + cursor : "card3", + statType : "progressAndTotal" + }); + + //의견진술자료상태 + defaultQuery = { + structureType : "dummy", + statDomain : "excl", + groupInfoList : [ + { + refCol : "OPNN_SBMSN_STTS_CD", + ctgrType : "code", + dtlCtgr : "FIM031" + } + ], + codeSubsetInfoList : [ + { + sourceGroup : "FIM031", + sourceCodes : ["01","02"], + targetCode : "acceptOrNonAccept", + targetCodeVal : "수용/미수용" + } + ], + fixedItemId : ["00", "acceptOrNonAccept", "03"], + namedNumberValueSeperator : "completeAndTotal", + globalAggregate : "count", + taskSeCd : taskSeCd, + dayColumn : "REG_DT", + firstDay : firstDay, + lastDay : lastDay + }; + + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList"); + + statReqArr.push({ + query : defaultQuery, + cursor : "card4", + statType : "progressAndTotal" + }); + + //단속구분별 최근n일 건수 + defaultQuery = { + structureType : "aggregate", + statDomain : "crdn", + groupInfoList : [ + { + refCol : "CRDN_SE_CD", + ctgrType : "code", + dtlCtgr : "FIM002" + } + ], + codeSubsetInfoList : [ + { + sourceGroup : "FIM002", + sourceCodes : ["08","09","10","11"], + targetCode : "minwon", + targetCodeVal : "민원" + }, + { + sourceGroup : "FIM002", + sourceCodes : ["06","13"], + targetCode : "dobo", + targetCodeVal : "도보" + } + ], + fixedItemId : ["01","02","dobo","minwon"], + namedNumberValueSeperator : "lastFewDays", + globalAggregate : "count", + taskSeCd : taskSeCd, + dayColumn : "CRDN_YMD", + dayRange : 15 + }; + + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList"); + + statReqArr.push({ + query : defaultQuery, + cursor : "lineChart", + statType : "line" + }); + + //초기자료처리별 건수 차트 + defaultQuery = { + structureType : "aggregate", + statDomain : "crdnSttsHstry", + groupInfoList : [ + { + refCol : "CRDN_STTS_CD", + ctgrType : "code", + dtlCtgr : "FIM010" + } + ], + numberValueInfoList : [ + { + aggregateType : "count" + } + ], + codeSubsetInfoList : [ + { + sourceGroup : "FIM010", + sourceCodes : ["21"], + targetCode : "dansokProcess", + targetCodeVal : "단속" + } + ], + fixedItemId : ["dansokProcess","81","83"], + taskSeCd : taskSeCd, + dayColumn : "REG_DT", + firstDay : firstDay, + lastDay : firstDay + }; + + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList"); + + statReqArr.push({ + query : defaultQuery, + cursor : "doughnutChart1", + statType : "doughnut" + }); + + //발송문서종류별 건수 차트 + defaultQuery = { + structureType : "aggregate", + statDomain : "sndb", + groupInfoList : [ + { + refCol : "SNDNG_SE_CD", + ctgrType : "code", + dtlCtgr : "FIM047" + } + ], + numberValueInfoList : [ + { + aggregateType : "count" + } + ], + codeSubsetInfoList : [ + { + sourceGroup : "FIM047", + sourceCodes : ["01","02"], + targetCode : "satong", + targetCodeVal : "사전통지서" + } + ], + fixedItemId : ["satong", "03", "11"], + taskSeCd : taskSeCd, + dayColumn : "SNDNG_YMD", + firstDay : firstDay, + lastDay : firstDay + }; + + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList"); + + statReqArr.push({ + query : defaultQuery, + cursor : "doughnutChart2", + statType : "doughnut" + }); + + //의견진술결과별 건수 차트 + defaultQuery = { + structureType : "aggregate", + statDomain : "excl", + groupInfoList : [ + { + refCol : "OPNN_SBMSN_STTS_CD", + ctgrType : "code", + dtlCtgr : "FIM031" + } + ], + numberValueInfoList : [ + { + aggregateType : "count" + } + ], + fixedItemId : ["01", "02", "03"], + taskSeCd : taskSeCd, + dayColumn : "REG_DT", + firstDay : firstDay, + lastDay : firstDay + }; + + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList"); + defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList"); + + statReqArr.push({ + query : defaultQuery, + cursor : "doughnutChart3", + statType : "doughnut" + }); + + fnLoadStatisticsData(); +} + +//통계 데이터 조회 +function fnLoadStatisticsData(){ + var statArr = statReqArr.pop(); + + ajax.get({ + url : wctx.url("/stat/stat01/010/info.do"), + data : statArr.query, + success : (resp) => { + var statData = resp.stat; + + if(statData != null && statData.statItems != null){ + fnRenderDashboardContents(statData, statArr.cursor , statArr.statType); + } + + if(statReqArr.length != 0){ + fnLoadStatisticsData(); + } + } + }); + +} + +//대시보드 콘텐츠 표시 +function fnRenderDashboardContents(returnData, cursor, statType){ + + if(statType == "progressAndTotal"){ + fnRenderProgressAndTotal(returnData, cursor); + return; + } + + if(statType == "line"){ + fnRenderLine(returnData, cursor); + return; + } + + if(statType == "doughnut"){ + fnRenderDoughnut(returnData, cursor); + return; + } + +} + +//진행건수,전체건수 표시 +function fnRenderProgressAndTotal(returnData, cursor){ + + for(var i=0; i < returnData.statItems.length; i++){ + var icon = $("#"+cursor).find("i[title='" + returnData.statItems[i].itemName[0] + "']"); + var p = icon.prev("p"); + p.html(returnData.statItems[i].numberValue[0] + "/" + returnData.statItems[i].numberValue[1]); + } + + if(cursor == "card1"){ + FimsSupport.mappingButtonAndMenu("btnGoToCrdn","단속 관리"); + return; + } + + if(cursor == "card2"){ + FimsSupport.mappingButtonAndMenu("btnGoToOpnn","의견제출 관리"); + return; + } +} + +//라인차트 표시 +function fnRenderLine(returnData, cursor){ + var yellowColor = '#ffe800'; + var cyanColor = '#28dac6'; + var orangeLightColor = '#FDAC34'; + var redColor = '#FF3E1D'; + var indigoColor = '#696CFF'; + + var ctgrColorSet = [yellowColor,cyanColor,orangeLightColor,redColor,indigoColor]; + + var borderColor = '#f0f0f0'; + var gridColor = '#f0f0f0'; + var tickColor = 'rgba(0, 0, 0, 0.75)'; // x & y axis tick color + + $("#"+cursor).siblings("svg").remove(); + + $("#"+cursor).show(); + + var maxOfStat = 0; + var minOfStat = 0; + + var datasets = []; + for(var i=0; i < returnData.statItems.length; i++){ + var defaultObject = { + tension: 0.5, + pointStyle: 'circle', + fill: false, + pointRadius: 1, + pointHoverRadius: 5, + pointHoverBorderWidth: 5, + pointBorderColor: 'transparent', + pointHoverBorderColor: config.colors.cardColor + }; + + defaultObject.label = returnData.statItems[i].itemName[0]; + + defaultObject.data = returnData.statItems[i].numberValue; + + var maxOfStatItem = Math.max(defaultObject.data); + var minOfStatItem = Math.min(defaultObject.data); + + if(maxOfStatItem > maxOfStat){ + maxOfStat = maxOfStatItem; + } + if(minOfStatItem < minOfStat){ + minOfStat = minOfStatItem; + } + + defaultObject.backgroundColor = ctgrColorSet[i % ctgrColorSet.length]; + defaultObject.pointHoverBackgroundColor = ctgrColorSet[i % ctgrColorSet.length]; + defaultObject.borderColor = ctgrColorSet[i % ctgrColorSet.length]; + + datasets.push(defaultObject); + } + + var xAxisLabels = returnData.numberValueLabel; + + var yAxisConf = initYAxis(maxOfStat, minOfStat); + + var lineChart = document.getElementById(cursor); + if (lineChart) { + var lineChartVar = new Chart(lineChart, { + type: 'line', + data: { + labels: xAxisLabels, + datasets: datasets + }, + options: { + lineTension : 0, + responsive: true, + maintainAspectRatio: false, + scales: { + x: { + grid: { + color: borderColor, + drawBorder: false, + borderColor: borderColor + }, + ticks: { + color: "black" + } + }, + y: { + scaleLabel: { + display: true + }, + min: yAxisConf.yAxisMin, + max: yAxisConf.yAxisMax, + ticks: { + color: "black", + stepSize: yAxisConf.yAxisStep + }, + grid: { + color: borderColor, + drawBorder: false, + borderColor: borderColor + } + } + }, + plugins: { + tooltip: { + rtl: true, + backgroundColor: config.colors.cardColor, + titleColor: config.colors.headingColor, + bodyColor: config.colors.bodyColor, + borderWidth: 1, + borderColor: borderColor + }, + legend: { + position: 'left', + align: 'stretch', + rtl: true, + labels: { + usePointStyle: true, + padding: 6, + boxWidth: 12, + boxHeight: 30, + color: "black" + } + } + } + } + }); + } + return; + +} + +//도넛차트 표시 +function fnRenderDoughnut(returnData, cursor){ + var yellowColor = '#ffe800'; + var cyanColor = '#28dac6'; + var orangeLightColor = '#FDAC34'; + var redColor = '#FF3E1D'; + var indigoColor = '#696CFF'; + + var ctgrColorSet = [yellowColor,cyanColor,orangeLightColor,redColor,indigoColor]; + + var borderColor = '#f0f0f0'; + var gridColor = '#f0f0f0'; + var tickColor = 'rgba(0, 0, 0, 0.75)'; // x & y axis tick color + + var cardColor = config.colors.cardColor; + var headingColor = config.colors.headingColor; + var labelColor = config.colors.textMuted; + var legendColor = config.colors.bodyColor; + + $("#"+cursor).siblings("svg").remove(); + $("#"+cursor).show(); + + + var lebels = []; + var datas = []; + var colors = []; + for(var i=0; i < returnData.statItems.length; i++){ + lebels.push(returnData.statItems[i].itemName[0]); + datas.push(returnData.statItems[i].numberValue[0]); + + colors.push(ctgrColorSet[i % ctgrColorSet.length]); + } + + + var doughnutChart = document.getElementById(cursor); + if (doughnutChart) { + var doughnutChartVar = new Chart(doughnutChart, { + type: 'doughnut', + data: { + labels: lebels, + datasets: [ + { + data: datas, + backgroundColor: colors, + borderWidth: 1, + pointStyle: 'rectRounded' + } + ] + }, + options: { + responsive: true, + animation: { + duration: 500 + }, + cutout: '68%', + plugins: { + legend: { + display: true, + position : 'left' + }, + tooltip: { + callbacks: { + label: function (context) { + const label = context.label || ''; + const value = context.parsed; + const output = ' ' + label + ' : ' + value + ' 건'; + return output; + } + }, + // Updated default tooltip UI + rtl: true, + backgroundColor: cardColor, + titleColor: headingColor, + bodyColor: legendColor, + borderWidth: 1, + borderColor: borderColor + } + } + } + }); + } + return; + + +} + +//차트y축 표시최대값,표시최소값,간격 설정 +function initYAxis(max, min){ + + if(max <= 10){ + var yAxisConf = { + yAxisMax : 10, + yAxisMin : 0, + yAxisStep : 2 + }; + + return yAxisConf; + } + + if(max <= 100){ + var yAxisConf = { + yAxisMax : 100, + yAxisMin : 0, + yAxisStep : 20 + }; + + return yAxisConf; + } + + var yAxisMax = Math.ceil(max / 100) * 100 + var yAxisMin = Math.floor(min / 100) * 100; + + if(yAxisMax - yAxisMin <= 100){ + yAxisMin = yAxisMax - 100; + } + + var yAxisStep = (yAxisMax - yAxisMin)/5; + + var yAxisConf = { + yAxisMax : yAxisMax, + yAxisMin : yAxisMin, + yAxisStep : yAxisStep + }; + return yAxisConf; + +} + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/include/bottom.jsp b/src/main/webapp/WEB-INF/jsp/include/bottom.jsp new file mode 100644 index 0000000..691d599 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/include/bottom.jsp @@ -0,0 +1,22 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%> +<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%> + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/include/head.jsp b/src/main/webapp/WEB-INF/jsp/include/head.jsp new file mode 100644 index 0000000..30b3a60 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/include/head.jsp @@ -0,0 +1,43 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%> +<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%> +과태료통합관리시스템 +" + data-template="vertical-menu-template-starter"> + + + ${appName} + + + " /> + + " /> + + " /> + " /> + " /> + " /> + " /> + + + " class="template-customizer-core-css" /> + " class="template-customizer-theme-css" /> + " /> + + " /> + " /> + " /> + + + " /> + " /> + " /> + " /> + " /> + " /> + + diff --git a/src/main/webapp/WEB-INF/jsp/include/tail.jsp b/src/main/webapp/WEB-INF/jsp/include/tail.jsp new file mode 100644 index 0000000..9f9cf83 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/include/tail.jsp @@ -0,0 +1,102 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%> +<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +wctx.path = "${pageContext.request.contextPath}"; +wctx.version = "${ver}"; +wctx.trace = ${!production}; +wctx.csrf = { + header:"${_csrf.headerName}", + token:"${_csrf.token}" +}; +dialog.title = "과태료통합관리시스템"; +dialog.timeout = 0; + + +function logout() { + dialog.alert({ + content:"로그아웃 하시겠습니까?", + onOK:function(){ + var form = $("
\", method=\"POST\">"); + $("").appendTo(form); + form.appendTo("body").submit(); + } + }); +} + + +async function selectURL(multiple) { + return new Promise(function(resolve, reject) { + ajax.get({ + url:wctx.url("/urls.do"), + data:{multiple:multiple}, + success: resp => { + dialog.open({ + title:"URL 선택", + content:resp, + getData:() => getSelectedURL(), + onOK:selected => { + resolve(selected); + } + }); + } + }); + }); +} + + + diff --git a/src/main/webapp/WEB-INF/jsp/include/top.jsp b/src/main/webapp/WEB-INF/jsp/include/top.jsp new file mode 100644 index 0000000..c787b65 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/include/top.jsp @@ -0,0 +1,578 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%> +<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%> + + + + + + +async function fnOpenTempFileUploadWindow(){ + + var resp = await fetch(wctx.url("/webjars/html/fileUpload.html")); + var template = await resp.text(); + + dialog.open({ + id : "fileUploadDialog", + title: "파일 업로드", + size : "lg", + content: template, + init : () => { + AppSupport.setDialogZindex(); + } + }); + +} + +/*--------------------- 설정 선택 다이얼로그 표시 ---------------------*/ +function fnOpenSelectStngDialog(){ + dialog.open({ + id : "selectStngDialog", + title : "설정 선택", + content : document.getElementById("selectStngButtonsTemplate").innerHTML, + size : "md", + init : () => {}, + onClose : () => {} + }); +} + +/*--------------------- 장비단속레이아웃 설정 메인 화면 표시 ---------------------*/ +function fnOpenEqmCrdnLayoutStngDialog(){ + dialog.close("selectStngDialog"); + + var url = wctx.url("/crdn/crdn01/010/main.do"); + + ajax.post({ + url : url, + data : {}, + success : (resp) => { + let dialogName = "eqmCrdnLayoutStngDialog"; + let dialogId = dialogName+"-"+uuid(); + + dialog.open({ + id : dialogId, + title : "장비단속 레이아웃 설정", + size : "xxl", + content : resp, + init : () => { + $("#"+dialogId).attr("name", dialogName); + $("#"+dialogId).attr("data-ref-doctx","top"); + let refDlgId = pageObject["top"].refDlgId(dialogName); + + $("#"+refDlgId).find("form[name='frmSearch']").find("[name='sggCd']").val(MY_INFO.info.sggCd); + + }, + onClose : () => { } + }); + } + }); +} + +/*--------------------- 출력물 설정 메인 화면 표시 ---------------------*/ +function fnOpenOtptStngDialog(){ + + dialog.close("selectStngDialog"); + + var url = wctx.url("/stng/stng01/010/main.do"); + + ajax.post({ + url : url, + data : {}, + success : (resp) => { + + let dialogName = "otptStngDialog"; + let dialogId = dialogName+"-"+uuid(); + + dialog.open({ + id : dialogId, + title : "출력설정", + size : "xxl", + content : resp, + init : () => { + $("#"+dialogId).attr("name", dialogName); + $("#"+dialogId).attr("data-ref-doctx","top"); + let refDlgId = pageObject["top"].refDlgId(dialogName); + + $("#"+refDlgId).find("form[name='frmSearch']").find("[name='sggCd']").val(MY_INFO.info.sggCd); + + }, + onClose : () => { } + }); + } + }); + +} + +/*--------------------- 고지서 외주요청파일 서식 설정 ---------------------*/ +function fnOpenOutsourcingStngDialog(){ + + dialog.close("selectStngDialog"); + + var url = wctx.url("/stng/stng01/030/main.do"); + + + ajax.post({ + url : url, + data : {}, + success : (resp) => { + + let dialogName = "outsourcingStngDialog"; + let dialogId = dialogName+"-"+uuid(); + + dialog.open({ + id : dialogId, + title : "외주요청파일 서식 설정", + size : "xxl", + content : resp, + init : () => { + + $("#"+dialogId).attr("name", dialogName); + $("#"+dialogId).attr("data-ref-doctx","top"); + let refDlgId = pageObject["top"].refDlgId(dialogName); + + $("#"+refDlgId).find("form[name='frmSearch']").find("[name='sggCd']").val(MY_INFO.info.sggCd); + + }, + onClose : () => { } + }); + } + }); + +} + + +/*--------------------- PDF자료 추출 설정 메인 화면 표시 ---------------------*/ +function fnOpenExtrStngDialog(){ + dialog.close("selectStngDialog"); + + var url = wctx.url("/stng/stng01/020/main.do"); + + ajax.post({ + url : url, + data : {}, + success : (resp) => { + + let dialogName = "extrStngDialog"; + let dialogId = dialogName+"-"+uuid(); + + dialog.open({ + id : dialogId, + title : "PDF자료 추출 설정", + size : "xxl", + content : resp, + init : () => { + $("#"+dialogId).attr("name", dialogName); + $("#"+dialogId).attr("data-ref-doctx","top"); + let refDlgId = pageObject["top"].refDlgId(dialogName); + + $("#"+refDlgId).find("form[name='frmSearch']").find("[name='sggCd']").val(MY_INFO.info.sggCd); + + }, + onClose : () => { } + }); + } + }); +} + + +function fnOpenMyInfo(){ + var popupWidth = 950; + var popupHeight = 500; + var popupX = (window.screen.width / 2) - (popupWidth / 2); + var popupY= (window.screen.height / 2) - (popupHeight / 2); + + var popup = window.open( + wctx.url("/user/openMyInfo.do") + ,"changeMyInfo" + ,"width="+popupWidth+", height="+popupHeight+", left="+popupX+", top="+popupY + ); + + popup.onload = () => { + popup.addEventListener('beforeunload', function() { + $.unblockUI(); + }); + }; +} + +function fnOpenChangePassword(){ + ajax.get({ + url : wctx.url("/user/changePassword.do"), + data : { }, + success : (resp) => { + dialog.open({ + id : "changePasswordDialog", + title : "비밀번호 변경", + content : resp, + size : "md", + init : () => {}, + onClose : () => {} + }); + } + }); +} + +async function fnCancelAccount(){ + let ok = await confirm2("탈퇴하시겠습니까?"); + if(ok){ + ajax.get({ + url : wctx.url("/user/cancelAccount.do"), + data : { }, + success : (resp) => { + if(resp.saved){ + alert('탈퇴되었습니다.'); + var form = $(""); + $("").appendTo(form); + form.appendTo("body").submit(); + } + } + }); + } +} + +function showHelp(){ + dialog.alert({ + content : "문의전화 : 070-4490-74XX" + +"
" + +"", + timeout : 0, + init : function() { + AppSupport.setDialogZindex(); + AppSupport.focusClose(); + }, + }); +} + +function remoteRequest(){ + window.open("https://81.223.kr/xit-1.exe", '_blank'); +} + + + +/* + * 보안모드 토글 처리 + */ +function fn_securityModeToggle(flag, elementId){ + + var executionArea; + if(elementId){ + executionArea = $("#"+elementId); + } else { + executionArea = $(document); + } + + var targets = executionArea.find("input.privacy"); + for(let i=0; i< targets.length; i++){ + let originId = targets[i].id; + let originValue= targets[i].value; + let maskingValue = originValue.replaceAll(/./g, "*"); + document.getElementById("mask-"+originId).value = maskingValue; + } + + if(flag){ //개인정보 숨김 + + //입력상자 + $("input.privacy").attr("hidden","hidden"); + $("input.privacy-mask").removeAttr("hidden"); + + //그리드 + $("body").addClass("root-privacy-on"); + + } else { //개인정보 표시 + + //입력상자 + $("input.privacy").removeAttr("hidden"); + $("input.privacy-mask").attr("hidden","hidden"); + + //그리드 + $("body").removeClass("root-privacy-on"); + + } + +} + +/* + * 단속사진 마스킹 + */ +function fn_photoMask(flag, element){ + + var executionArea; + var isImg = false; + if(element){ + if(element.tagName == "IMG"){ + isImg = true; + } + executionArea = $(element); + } else { + executionArea = $(document); + } + + var targets; + if(isImg){ + targets = executionArea.filter("[data-crdn-photo-id]"); + } else { + targets = executionArea.find("[data-crdn-photo-id]"); + } + + for(var i=0; i < targets.length; i++){ + var target = targets[i]; + var dataset = target.dataset; + var targetId = dataset.crdnPhotoId; + + $("div[data-ref='"+dataset.crdnPhotoId+"']").remove(); + + if(dataset.crdnPhotoId != null && dataset.crdnPhotoId != "" + && dataset.mosaic != null && dataset.mosaic != "" + && flag){ + + var mosaicInfoArr = dataset.mosaic.split("|"); + + var zoomX = target.width / target.naturalWidth; + var zoomY = target.height / target.naturalHeight; + + for(var j=0; j < mosaicInfoArr.length; j++){ + var mosaicInfo = mosaicInfoArr[j].split(","); + var x2 = mosaicInfo[0] * zoomX + var y2 = mosaicInfo[1] * zoomY + var w2 = mosaicInfo[2] * zoomX + var h2 = mosaicInfo[3] * zoomY + + var mosaic = document.createElement("div"); + mosaic.style["position"] = "absolute"; + mosaic.style["top"] = y2 + "px"; + mosaic.style["left"] = x2 + "px"; + mosaic.style["width"] = w2 + "px"; + mosaic.style["height"] = h2 + "px"; + mosaic.style["background-color"] = "black"; + mosaic.setAttribute("data-ref", targetId); + $(target).after(mosaic); + } + } + } + +} + +/*--------------------- 통합조회 버튼 클릭 이벤트 ---------------------*/ +$("#btnFastSearch--top").on( "click", function() { + fnGlobalFastSearch(); +}); + +$("#fastTerm--top").onEnterPress(fnGlobalFastSearch); + +function fnGlobalFastSearch(){ + + var integrationSearchUrl = wctx.url("/sprt/sprt01/010/main.do"); + if(mainTabs.getDataset().find(i => i.url == integrationSearchUrl) != null){ + mainTabs.close(integrationSearchUrl); + } + + + if($("#fastTerm--top").val() != ""){ + fastSearch = true; + } + openMenu(integrationSearchUrl); + +} + +/*--------------------- 종합민원관리 클릭 이벤트 ---------------------*/ +FimsSupport.mappingButtonAndMenu("btnGoToCvlcptDscsn","민원상담"); +/*--------------------- 일정관리 클릭 이벤트 ---------------------*/ +FimsSupport.mappingButtonAndMenu("btnGoToNtc","공지사항"); +/*--------------------- 공지사항 클릭 이벤트 ---------------------*/ +FimsSupport.mappingButtonAndMenu("btnGoToSchdl","일정관리"); + +/*--------------------- 사용자 메뉴얼 클릭 이벤트 ---------------------*/ +$("#btnDownloadMenual--top").on( "click", function() { + FimsSupport.fnMenualDownload(); +}); + +/*--------------------- 보안모드 체크박스 클릭 이벤트 ---------------------*/ +$("#securityMode--top").on( "click", function() { + if($("#securityMode--top").is(":checked")){ + fn_securityModeToggle(true); + } else { + fn_securityModeToggle(false); + } +}); + +/*--------------------- 단속사진 모자이크 체크박스 클릭 이벤트 ---------------------*/ +$("#photoMask--top").on( "click", function() { + if($("#photoMask--top").is(":checked")){ + fn_photoMask(true); + } else { + fn_photoMask(false); + } +}); + +/*--------------------- 외부자료 파일 처리 ---------------------*/ +$("#btnOpenTempFileUploadWindow").on( "click", function() { + fnOpenTempFileUploadWindow(); +}); +/*--------------------- 특화 설정 ---------------------*/ +$("#btnOpenSelectStngDialog").on( "click", function() { + fnOpenSelectStngDialog(); +}); + +
+ diff --git a/src/main/webapp/WEB-INF/jsp/include/userMenus.jsp b/src/main/webapp/WEB-INF/jsp/include/userMenus.jsp new file mode 100644 index 0000000..f2df4b2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/include/userMenus.jsp @@ -0,0 +1,41 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%> +<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%> + + + + +function fnHome(){ + top.location.href = wctx.url("/")+"?taskSeCd="+$("#layout-navbar input[name='taskSeCd']:checked").val(); +} + +let userMenus = ${userMenus}; +let menuSupport = new MenuSupport("#layout-menu"); +function setUserMenus(menus) { + menuSupport.setMenuInfo(menus).setActive(wctx.current()); + let currentMenu = menuSupport.getMenu(wctx.current()); + if (currentMenu) + setPageTitle(currentMenu.name); +} + +setUserMenus(userMenus); + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/index.jsp b/src/main/webapp/WEB-INF/jsp/index.jsp new file mode 100644 index 0000000..1b42735 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/index.jsp @@ -0,0 +1,459 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%> +<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%> + + +
+
+ +
+ +
+ + + + +
+ +
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/login.jsp b/src/main/webapp/WEB-INF/jsp/login.jsp new file mode 100644 index 0000000..113907c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/login.jsp @@ -0,0 +1,332 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%> +<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%> + +" + data-template="vertical-menu-template-starter"> + + + 과태료통합관리시스템 + + + " /> + + + " /> + + + " /> + " /> + " /> + + " class="template-customizer-core-css" /> + " class="template-customizer-theme-css" /> + " /> + + " /> + " /> + + " /> + + " /> + + " /> + " /> + + + + + + + + + + + + + + +