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"%>
+
+
+
+
+
+
+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"%>
+
+ Loading...
+
+
+
+">
+">
+">
+">
+
+">
+">
+">
+">
+">
+">
+">
+">
+">
+">
+
+
+">
+">
+">
+">
+">
+">
+">
+">
+">
+">
+">
+">
+
+">
+
+
+">
+">
+">
+">
+">
+
+">
+">
+">
+">
+
+
+">
+">
+">
+
+
+
+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 = $("
+
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" />
+ " />
+
+ " />
+ " />
+
+ " />
+
+ " />
+
+ " />
+ " />
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+