Explorar o código

Merge branch 'develop' of http://112.172.147.34:4936/style24/STYLE24.git
into develop

Conflicts:
style24.front/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF

eskim %!s(int64=5) %!d(string=hai) anos
pai
achega
2804b87f6e
Modificáronse 100 ficheiros con 4956 adicións e 3651 borrados
  1. 1 0
      .gitignore
  2. 126 0
      root.iml
  3. 36 0
      style24.admin/META-INF/context.xml
  4. 6 0
      style24.admin/WEB-INF/web.xml
  5. 42 0
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java
  6. 52 52
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaEnvsetDao.java
  7. 4 38
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaMarketingDao.java
  8. 39 39
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java
  9. 166 0
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaCouponService.java
  10. 98 98
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaEnvsetService.java
  11. 21 50
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaMarketingService.java
  12. 12 12
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java
  13. 122 122
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java
  14. 23 0
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  15. 325 325
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaEnvsetController.java
  16. 29 4
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  17. 79 79
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java
  18. 1 0
      style24.admin/src/main/java/com/style24/persistence/domain/Category.java
  19. 27 4
      style24.admin/src/main/java/com/style24/persistence/domain/Coupon.java
  20. 1 1
      style24.admin/src/main/java/com/style24/persistence/domain/MoreBetterSection.java
  21. 5 5
      style24.admin/src/main/java/com/style24/persistence/domain/Order.java
  22. 3 3
      style24.admin/src/main/java/com/style24/persistence/domain/OrderChange.java
  23. 224 0
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml
  24. 145 145
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaEnvset.xml
  25. 0 105
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaMarketing.xml
  26. 4 4
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml
  27. 25 25
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml
  28. 193 0
      style24.admin/src/main/webapp/WEB-INF/views/display/CategorySearchForm.html
  29. 296 295
      style24.admin/src/main/webapp/WEB-INF/views/envset/CustomerGradePolicyForm.html
  30. 908 188
      style24.admin/src/main/webapp/WEB-INF/views/marketing/CouponCreatePopupForm.html
  31. 2 3
      style24.admin/src/main/webapp/WEB-INF/views/marketing/CouponListForm.html
  32. 874 874
      style24.admin/src/main/webapp/WEB-INF/views/marketing/MorebetterRegForm.html
  33. 127 127
      style24.admin/src/main/webapp/WEB-INF/views/order/RefundAccountRegistForm.html
  34. 259 0
      style24.admin/style24.admin.iml
  35. 31 31
      style24.batch/.classpath
  36. 186 0
      style24.batch/style24.batch.iml
  37. 43 0
      style24.core/src/main/java/META-INF/MANIFEST.MF
  38. 182 0
      style24.core/style24.core.iml
  39. 32 32
      style24.front/.classpath
  40. 207 0
      style24.front/style24.front.iml
  41. 0 11
      style24.front/target/classes/banner.txt
  42. BIN=BIN
      style24.front/target/classes/com/style24/front/biz/dao/TsfFaqDao.class
  43. BIN=BIN
      style24.front/target/classes/com/style24/front/biz/dao/TsfLoginDao.class
  44. BIN=BIN
      style24.front/target/classes/com/style24/front/biz/dao/TsfNoticeDao.class
  45. BIN=BIN
      style24.front/target/classes/com/style24/front/biz/service/TsfFaqService.class
  46. BIN=BIN
      style24.front/target/classes/com/style24/front/biz/service/TsfLoginService.class
  47. BIN=BIN
      style24.front/target/classes/com/style24/front/biz/service/TsfNoticeService.class
  48. BIN=BIN
      style24.front/target/classes/com/style24/front/biz/web/TsfCallcenterController.class
  49. BIN=BIN
      style24.front/target/classes/com/style24/front/biz/web/TsfCustomerController.class
  50. BIN=BIN
      style24.front/target/classes/com/style24/front/biz/web/TsfIndexController.class
  51. BIN=BIN
      style24.front/target/classes/com/style24/front/support/config/TsfMybatisShopConfig.class
  52. BIN=BIN
      style24.front/target/classes/com/style24/front/support/config/TsfRedisSessionConfig.class
  53. BIN=BIN
      style24.front/target/classes/com/style24/front/support/config/TsfThymeleafConfig.class
  54. BIN=BIN
      style24.front/target/classes/com/style24/front/support/config/TsfWebMvcConfig.class
  55. BIN=BIN
      style24.front/target/classes/com/style24/front/support/controller/TsfBaseController.class
  56. BIN=BIN
      style24.front/target/classes/com/style24/front/support/controller/TsfCustomErrorController.class
  57. BIN=BIN
      style24.front/target/classes/com/style24/front/support/env/TsfConstants.class
  58. BIN=BIN
      style24.front/target/classes/com/style24/front/support/exception/TsfDormantAccountException.class
  59. BIN=BIN
      style24.front/target/classes/com/style24/front/support/exception/TsfEmailDuplicationException.class
  60. BIN=BIN
      style24.front/target/classes/com/style24/front/support/exception/TsfLockedAccountException.class
  61. BIN=BIN
      style24.front/target/classes/com/style24/front/support/exception/TsfSecedeAccountException.class
  62. BIN=BIN
      style24.front/target/classes/com/style24/front/support/exception/TsfSessionExpiredException.class
  63. BIN=BIN
      style24.front/target/classes/com/style24/front/support/interceptor/TsfAflinkInterceptor.class
  64. BIN=BIN
      style24.front/target/classes/com/style24/front/support/interceptor/TsfDefaultInterceptor.class
  65. BIN=BIN
      style24.front/target/classes/com/style24/front/support/interceptor/TsfGoodsViewInterceptor.class
  66. BIN=BIN
      style24.front/target/classes/com/style24/front/support/interceptor/TsfLoginCheckInterceptor.class
  67. BIN=BIN
      style24.front/target/classes/com/style24/front/support/interceptor/TsfRememberMeInterceptor.class
  68. BIN=BIN
      style24.front/target/classes/com/style24/front/support/interceptor/TsfReturnUrlInterceptor.class
  69. BIN=BIN
      style24.front/target/classes/com/style24/front/support/security/TsfAuthenticationProvider.class
  70. BIN=BIN
      style24.front/target/classes/com/style24/front/support/security/TsfLoginDetails.class
  71. BIN=BIN
      style24.front/target/classes/com/style24/front/support/security/config/TsfSecurityConfig.class
  72. BIN=BIN
      style24.front/target/classes/com/style24/front/support/security/filter/TsfAuthenticationFilter.class
  73. BIN=BIN
      style24.front/target/classes/com/style24/front/support/security/handler/TsfLoginFailureHandler.class
  74. BIN=BIN
      style24.front/target/classes/com/style24/front/support/security/handler/TsfLoginSuccessHandler.class
  75. BIN=BIN
      style24.front/target/classes/com/style24/front/support/security/handler/TsfLogoutSuccessHandler.class
  76. BIN=BIN
      style24.front/target/classes/com/style24/front/support/security/handler/TsfRememberMeSuccessHandler.class
  77. BIN=BIN
      style24.front/target/classes/com/style24/front/support/security/session/TsfSession.class
  78. BIN=BIN
      style24.front/target/classes/com/style24/front/support/startup/TsfApplication.class
  79. BIN=BIN
      style24.front/target/classes/com/style24/front/support/startup/TsfServletInitializer.class
  80. BIN=BIN
      style24.front/target/classes/com/style24/persistence/TsfPageRequest.class
  81. BIN=BIN
      style24.front/target/classes/com/style24/persistence/domain/Faq.class
  82. BIN=BIN
      style24.front/target/classes/com/style24/persistence/domain/Login.class
  83. BIN=BIN
      style24.front/target/classes/com/style24/persistence/domain/Notice.class
  84. BIN=BIN
      style24.front/target/classes/com/style24/persistence/domain/PersistentToken$PersistentTokenBuilder.class
  85. BIN=BIN
      style24.front/target/classes/com/style24/persistence/domain/PersistentToken.class
  86. 0 93
      style24.front/target/classes/com/style24/persistence/mybatis/TsfFaq.xml
  87. 0 192
      style24.front/target/classes/com/style24/persistence/mybatis/TsfLogin.xml
  88. 0 69
      style24.front/target/classes/com/style24/persistence/mybatis/TsfNotice.xml
  89. 0 71
      style24.front/target/classes/config/application-dev.yml
  90. 0 72
      style24.front/target/classes/config/application-locd.yml
  91. 0 73
      style24.front/target/classes/config/application-locp.yml
  92. 0 72
      style24.front/target/classes/config/application-run.yml
  93. 0 65
      style24.front/target/classes/config/application.yml
  94. 0 87
      style24.front/target/classes/i18n/messages/message_ko_KR.properties
  95. 0 25
      style24.front/target/classes/log/logback-dev.xml
  96. 0 41
      style24.front/target/classes/log/logback-locd.xml
  97. 0 41
      style24.front/target/classes/log/logback-locp.xml
  98. 0 39
      style24.front/target/classes/log/logback-run.xml
  99. 0 24
      style24.front/target/classes/persistence/mybatis-shop-config.xml
  100. 0 15
      style24.front/target/m2e-wtp/web-resources/META-INF/maven/com.style24.front/style24.front/pom.properties

+ 1 - 0
.gitignore

@@ -13,3 +13,4 @@ target/
 ### MacOS ###
 .DS_Store
 META-INF/context.xml
+style24.front/target

+ 126 - 0
root.iml

@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.5.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web-services:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.xml.messaging.saaj:saaj-impl:1.5.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.soap:jakarta.xml.soap-api:1.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jvnet.staxex:stax-ex:1.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.ws:jakarta.xml.ws-api:2.3.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.jws:jakarta.jws-api:2.1.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-ws-core:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-xml:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.12" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.37" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.37" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-data-redis:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-core:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
+    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+  </component>
+</module>

+ 36 - 0
style24.admin/META-INF/context.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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
+
+      http://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.
+--><!-- The contents of this file will be loaded for each web application --><Context>
+
+    <!-- Default set of monitored resources. If one of these changes, the    -->
+    <!-- web application will be reloaded.                                   -->
+    <WatchedResource>WEB-INF/web.xml</WatchedResource>
+    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
+    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
+
+    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
+    <!--
+    <Manager pathname="" />
+    -->
+
+    <!-- STYLE24 DEV. 쿼리문 출력을 위해 driverClassName="core.log.jdbc.driver.MysqlDriver"" 로 지정 -->
+    <Resource auth="Container" defaultAutoCommit="false" description="STYLE24 DEV Database" driverClassName="core.log.jdbc.driver.MysqlDriver" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" initialSize="1" maxActive="1" maxIdle="1" maxWait="10000" minIdle="1" name="jdbc/shopDs" numTestsPerEvictionRun="5" password="style01" testWhileIdle="true" type="javax.sql.DataSource" url="jdbc:mysql://TSIT:3308/style?serverTimezone=Asia/Seoul#" username="style" validationInterval="60000" validationQuery="SELECT 1 FROM DUAL"/>
+
+    <!-- WMS DEV. 쿼리문 출력을 위해 driverClassName="core.log.jdbc.driver.Mssql2005Driver"" 로 지정 -->
+    <Resource auth="Container" defaultAutoCommit="false" description="WMS DEV Database" driverClassName="core.log.jdbc.driver.Mssql2005Driver" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" initialSize="1" maxActive="1" maxIdle="1" maxWait="10000" minIdle="1" name="jdbc/wmsDs" numTestsPerEvictionRun="5" password="tester" testWhileIdle="true" type="javax.sql.DataSource" url="jdbc:sqlserver://TSIT:1433;database=test" username="tester" validationInterval="60000" validationQuery="SELECT 1"/>
+
+</Context>

+ 6 - 0
style24.admin/WEB-INF/web.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
+         version="4.0">
+</web-app>

+ 42 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java

@@ -0,0 +1,42 @@
+package com.style24.admin.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.*;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * 쿠폰 DAO
+ * @author xyzp1539
+ * @since  2021-01-11
+ */
+@ShopDs
+public interface TsaCouponDao {
+	/**
+	 * 쿠폰 리스트 조회
+	 * @param  Coupon
+	 * @return ArrayList<Coupon>
+	 * @author xyzp1539
+	 * @since 2020-12-22
+	 */
+	ArrayList<Coupon> getCouponList(Coupon param);
+
+	/**
+	 * 쿠폰 리스트 카운트 조회
+	 * @param  Coupon
+	 * @return int
+	 * @author xyzp1539
+	 * @since 2020-12-22
+	 */
+	int getCouponListCnt(Coupon param);
+
+	/**
+	 * 쿠폰 등록
+	 * @param params
+	 * @author xyzp1539
+	 * @since  2021-01-12
+	 */
+	void couponInsert(Coupon params);
+}

+ 52 - 52
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaEnvsetDao.java

@@ -1,52 +1,52 @@
-package com.style24.admin.biz.dao;
-
-import java.util.Collection;
-
-import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.CustGradePolicy;
-import com.style24.persistence.domain.Envset;
-
-/**
- * 환경설정 Dao
- * 
- * @author gagamel
- * @since 2020. 10. 21
- */
-@ShopDs
-public interface TsaEnvsetDao {
-
-	/**
-	 * 환경설정 저장
-	 * @param envset - 환경설정 정보
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	void createEnvset(Envset envset);
-
-	/**
-	 * 환경설정 목록
-	 * @param envset - 환경설정 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	Collection<Envset> getEnvsetList(Envset envset);
-
-	/**
-	 * 회원등급정책 저장
-	 * @param policy - 회원등급정책 정보
-	 * @author gagamel
-	 * @since 2021. 1. 7
-	 */
-	void createCustomerGradePolicy(CustGradePolicy policy);
-
-	/**
-	 * 회원등급정책 목록
-	 * @param policy - 회원등급정책 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 7
-	 */
-	Collection<CustGradePolicy> getCustomerGradePolicyList(CustGradePolicy policy);
-
-}
+package com.style24.admin.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.CustGradePolicy;
+import com.style24.persistence.domain.Envset;
+
+/**
+ * 환경설정 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 10. 21
+ */
+@ShopDs
+public interface TsaEnvsetDao {
+
+	/**
+	 * 환경설정 저장
+	 * @param envset - 환경설정 정보
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	void createEnvset(Envset envset);
+
+	/**
+	 * 환경설정 목록
+	 * @param envset - 환경설정 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	Collection<Envset> getEnvsetList(Envset envset);
+
+	/**
+	 * 회원등급정책 저장
+	 * @param policy - 회원등급정책 정보
+	 * @author gagamel
+	 * @since 2021. 1. 7
+	 */
+	void createCustomerGradePolicy(CustGradePolicy policy);
+
+	/**
+	 * 회원등급정책 목록
+	 * @param policy - 회원등급정책 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 7
+	 */
+	Collection<CustGradePolicy> getCustomerGradePolicyList(CustGradePolicy policy);
+
+}

+ 4 - 38
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaMarketingDao.java

@@ -1,17 +1,12 @@
 package com.style24.admin.biz.dao;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
 import org.springframework.stereotype.Component;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.Coupon;
-import com.style24.persistence.domain.FreeGoodsPromotion;
-import com.style24.persistence.domain.MoreBetter;
-import com.style24.persistence.domain.MoreBetterBurden;
-import com.style24.persistence.domain.MoreBetterGoods;
-import com.style24.persistence.domain.MoreBetterSection;
+import com.style24.persistence.domain.*;
+
+import java.util.ArrayList;
+import java.util.Collection;
 
 /**
  * 마케팅 Dao
@@ -35,33 +30,4 @@ public interface TsaMarketingDao {
 
 	/* // xodud1202 진행 */
 
-	/* JSM 진행 */
-	/**
-	 * 쿠폰 리스트 조회
-	 * @param  Coupon
-	 * @return ArrayList<Coupon>
-	 * @author xyzp1539
-	 * @since 2020-12-22
-	 */
-	ArrayList<Coupon> getCouponList(Coupon param);
-
-	/**
-	 * 쿠폰 리스트 카운트 조회
-	 * @param  Coupon
-	 * @return int
-	 * @author xyzp1539
-	 * @since 2020-12-22
-	 */
-	int getCouponListCnt(Coupon param);
-	/* // JSM 진행 */
-
-	/**
-	 * 쿠폰조회 목록
-	 * @param coupon - 쿠폰 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
-	 */
-	public Collection<Coupon> getCouponRetrieveList(Coupon coupon);
-
 }

+ 39 - 39
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java

@@ -16,25 +16,25 @@ import com.style24.persistence.domain.OrderChange;
  */
 @ShopDs
 public interface TsaOrderDao {
-	
+
 	/**
 	 * 주문 목록 카운트
 	 * @param Order
 	 * @return
-	 * @author jsh77b	
+	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
 	int getOrderListCount(Order order);
-	
+
 	/**
 	 * 주문 목록
 	 * @param Order
 	 * @return
-	 * @author jsh77b	
+	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderList(Order order);
-	
+
 	/**
 	 * 주문기본정보
 	 *
@@ -44,7 +44,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderInfoList(Order order);
-	
+
 	/**
 	 * 주문상품정보 목록
 	 *
@@ -54,7 +54,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderDetailList(Order order);
-	
+
 	/**
 	 * 주문상세 > 사은품목록
 	 *
@@ -64,7 +64,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderFreeGiftList(Order order);
-	
+
 	/**
 	 * 배송정보
 	 *
@@ -74,7 +74,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getDeliveryAddrList(Order order);
-	
+
 	/**
 	 * 결제내역 > 결제 기본정보
 	 *
@@ -84,7 +84,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderPaymentBasicInfoList(Order order);
-	
+
 	/**
 	 * 배송비 정보
 	 *
@@ -94,7 +94,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getDeliveryFeeList(Order order);
-	
+
 	/**
 	 * 반품/교환 > 반품/교환 정보
 	 *
@@ -104,7 +104,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderChangeList(Order order);
-	
+
 	/**
 	 * 환불정보
 	 *
@@ -114,7 +114,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderRefundInfo(Order order);
-	
+
 	/**
 	 * 상담내역
 	 *
@@ -124,7 +124,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderCounselInfo(Order order);
-	
+
 	/**
 	 * 변경내역 > 주문요청 관리자 메모
 	 *
@@ -134,7 +134,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderMemoList(Order order);
-	
+
 	/**
 	 * 입점업체미발주 주문목록
 	 *
@@ -144,7 +144,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 18
 	 */
 	Collection<Order> getOrderSellerUnorderList(Order order);
-	
+
 	/**
 	 * 입점업체 엑셀다운용 임시테이블 삭제
 	 *
@@ -153,7 +153,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	void deleteEntryExcelDownTmp(Order order);
-	
+
 	/**
 	 * 주문상세상태 수정 - 입점
 	 *
@@ -162,7 +162,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	int updateOrderDetailStat(Order order);
-	
+
 	/**
 	 * 주문상세 이력 등록
 	 *
@@ -172,7 +172,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	int createOrderDetailHst(Order order);
-	
+
 	/**
 	 * 엑셀 다운로드용 임시테이블 데이타 체크
 	 *
@@ -181,7 +181,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	int getEntryUploadExcelCheck(Order order);
-	
+
 	/**
 	 * 입점업체 엑셀다운용 임시테이블 생성
 	 *
@@ -190,7 +190,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	void createEntryExcelDownTmp(Order order);
-	
+
 	/**
 	 * 입점업체미발주목록
 	 *
@@ -200,7 +200,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	Collection<Order> getSellerUnorderList(Order order);
-	
+
 	/**
 	 * 주문 엑셀다운로드
 	 *
@@ -210,7 +210,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	void getSellerUnorderList(Order order, ResultHandler<Order> handler);
-	
+
 	/**
 	 * 주문상세 정보
 	 *
@@ -220,7 +220,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	Order getOrderDetailInfo(Order order);
-	
+
 	/**
 	 * 주문상세정보 변경 - 송장번호 적용(입점)
 	 *
@@ -229,7 +229,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	int updateOrderDetailInvoice(Order order);
-	
+
 	/**
 	 * 주문상세 > 주문메오 > 주문메모정보조회
 	 *
@@ -239,7 +239,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 12. 16
 	 */
 	Order getOrderMemoInfo(Order order);
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모등록
 	 *
@@ -249,7 +249,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 12. 16
 	 */
 	int createOrderMemo(Order order);
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모수정
 	 *
@@ -259,7 +259,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 12. 16
 	 */
 	int updateOrderMemo(Order order);
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모삭제
 	 *
@@ -269,7 +269,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 12. 16
 	 */
 	int deleteOrderMemo(Order order);
-	
+
 	/**
 	 * 주문상품 상세 변경 이력 화면
 	 *
@@ -279,7 +279,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 12. 16
 	 */
 	Collection<Order> getOrderDetailHistoryList(Order order);
-	
+
 	/**
 	 * 쿠폰사용 내역 팝업 화면
 	 *
@@ -289,7 +289,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 12. 16
 	 */
 	Collection<Order> getOrderDiscountCouponList(Order order);
-	
+
 	/**
 	 * 포인트사용 내역 팝업 화면
 	 *
@@ -299,7 +299,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 12. 16
 	 */
 	Collection<Order> getOrderDiscountPointList(Order order);
-	
+
 	/**
 	 * 상품권사용 내역 팝업 화면
 	 *
@@ -309,7 +309,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 12. 16
 	 */
 	Collection<Order> getOrderGiftcardHstList(Order order);
-	
+
 	/**
 	 * 다다익선적용 내역 팝업 화면
 	 *
@@ -319,7 +319,7 @@ public interface TsaOrderDao {
 	 * @since 2020. 12. 16
 	 */
 	Collection<Order> getOrderTmtbHstList(Order order);
-	
+
 	/**
 	 * 주문상세상태를 변경
 	 *
@@ -331,15 +331,15 @@ public interface TsaOrderDao {
 	int changedOrdDtlStat(Order order);
 
 
-	
 
-			
 
 
 
-	
-	
-	
+
+
+
+
+
 }
 
 

+ 166 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaCouponService.java

@@ -0,0 +1,166 @@
+package com.style24.admin.biz.service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.style24.admin.biz.dao.TsaCouponDao;
+import com.style24.admin.biz.dao.TsaMarketingDao;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.thirdparty.NaverLowestPriceApi;
+import com.style24.core.biz.thirdparty.SafetyKoreaApi;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+
+/**
+ * 쿠폰 Service
+ *
+ * @author xyzp1539
+ * @since 2021. 01. 11
+ */
+@Service
+@Slf4j
+public class TsaCouponService {
+
+	@Autowired
+	private TsaCouponDao couponDao;
+
+	@Autowired
+	private TsaCommonService commonService;
+
+
+
+
+	/**
+	 * 쿠폰 저장
+	 * @param params
+	 * @author xyzp1539
+	 * @since  2021-01-11
+	 */
+	@Transactional("shopTxnManager")
+	public void couponSave(Coupon params) {
+		String cpnId = "";		// 쿠폰ID
+
+		params.setRegNo(TsaSession.getInfo().getUserNo());
+		params.setUpdNo(TsaSession.getInfo().getUserNo());
+
+		// 자동생성이면 시퀀스 가져오기
+		if(params.getCpnId() == null || params.getCpnId().equals("")) {
+			int sequence = commonService.getNextSequence("SEQ_COUPON");
+			cpnId = "CPN"+sequence;
+		} else {
+			cpnId = params.getCpnId();
+		}
+
+		log.info(">>>> CPNID : {}" , cpnId );
+		params.setCpnId(cpnId);
+
+		couponDao.couponInsert(params);
+
+
+		//checkCpnValidation(params);
+
+	}
+
+	/**
+	 * 쿠폰 리스트 조회
+	 * @param  Coupon
+	 * @return ArrayList<Coupon>
+	 * @author xyzp1539
+	 * @since 2020-12-22
+	 */
+	public ArrayList<Coupon> getCouponList(Coupon param) {
+		return couponDao.getCouponList(param);
+	}
+
+	/**
+	 * 쿠폰리스트 카운트 조회
+	 * @param  Coupon
+	 * @return int
+	 * @author xyzp1539
+	 * @since 2020-12-22
+	 */
+	public int getCouponListCnt(Coupon param) {
+		return couponDao.getCouponListCnt(param);
+	}
+
+	/**
+	 * 쿠폰 벨리데이션 체크
+	 * @param Coupon
+	 * @author xyzp1539
+	 * @since  2021-01-12
+	 */
+	public void checkCpnValidation(Coupon params) {
+		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		// 할인율이면  100% 초과 체크하기
+		if(params.getDcWay() != null && params.getDcWay().equals("G240_11")) {
+			if(params.getDcAval() > 100) {
+				throw new IllegalStateException("모바일 앱 할인율은 100을 초과할수 없습니다.");
+			} else if(params.getDcPval() > 100) {
+				throw new IllegalStateException("PC할인율은 100을 초과할수 없습니다.");
+			} else if(params.getDcMval() > 100) {
+				throw new IllegalStateException("모바일 웹 100을 초과할수 없습니다.");
+			}
+		}
+
+		// 기간/일수구분이 일수인 경우 날짜 체크
+		if(params.getPdGb() != null && params.getPdGb().equals("D")) {
+			try {
+				Date date1 = format.parse(params.getAvailStdt());
+				Date date2 = format.parse(params.getAvailEddt());
+
+				log.info("checkCpnValidation params.getAvailEddt() :  {}" , params.getAvailEddt());
+				log.info("checkCpnValidation params.getAvailStdt :  {}" , params.getAvailStdt());
+				if(date2.before(date1)) {
+					throw new IllegalStateException("유효기간 종료날짜가 시작날짜보다 작습니다.");
+				}
+			} catch (ParseException exception) {
+			}
+		}
+
+		// 직접다운로드인 경우 기간 체크
+		if(params.getDnGb() != null && params.getDnGb().equals("G058_20")) {
+			try {
+				Date date1 = format.parse(params.getDownStdt());
+				Date date2 = format.parse(params.getDownEddt());
+
+				log.info("checkCpnValidation params.getDownStdt() :  {}" , params.getDownStdt());
+				log.info("checkCpnValidation params.getDownEddt :  {}" , params.getDownEddt());
+				if(date2.before(date1)) {
+					throw new IllegalStateException("다운로드 종료날짜가 시작날짜보다 작습니다.");
+				}
+			} catch (ParseException exception) {
+			}
+		}
+
+		// 첫구매 적용하는 경우 날짜 체크
+		if(params.getFirstYn() != null && params.getFirstYn().equals("Y")) {
+			try {
+				Date date1 = format.parse(params.getBuyStdt());
+				Date date2 = format.parse(params.getBuyEddt());
+
+				log.info("checkCpnValidation params.getBuyStdt() :  {}" , params.getBuyStdt());
+				log.info("checkCpnValidation params.getBuyEddt :  {}" , params.getBuyEddt());
+				if(date2.before(date1)) {
+					throw new IllegalStateException("첫구매 종료날짜가 시작날짜보다 작습니다.");
+				}
+			} catch (ParseException exception) {
+			}
+		}
+
+		// 신규회원여부 적용하는 경우 날짜 체크
+		if(params.getCustJoinYn() != null && params.getCustJoinYn().equals("Y")) {
+
+		}
+
+	}
+
+}

+ 98 - 98
style24.admin/src/main/java/com/style24/admin/biz/service/TsaEnvsetService.java

@@ -1,98 +1,98 @@
-package com.style24.admin.biz.service;
-
-import java.util.Collection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.style24.admin.biz.dao.TsaEnvsetDao;
-import com.style24.admin.support.security.session.TsaSession;
-import com.style24.core.biz.dao.TscEnvsetDao;
-import com.style24.persistence.domain.CustGradePolicy;
-import com.style24.persistence.domain.Envset;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 환경설정 Service
- *
- * @author gagamel
- * @since 2020. 10. 21
- */
-@Service
-@Slf4j
-public class TsaEnvsetService {
-
-	@Autowired
-	private TscEnvsetDao cenvsetDao;
-
-	@Autowired
-	private TsaEnvsetDao envsetDao;
-
-	/**
-	 * 환경설정정보 저장
-	 * 		정책은 중요한 정보로서 캐싱 문제 발생 시 심각해질 수 있으므로 캐싱처리 안 함
-	 * @param envset - 환경설정 정보
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	@Transactional("shopTxnManager")
-	public void createEnvset(Envset envset) {
-		envset.setRegNo(TsaSession.getInfo().getUserNo());
-		envsetDao.createEnvset(envset);
-	}
-
-	/**
-	 * 환경설정정보 - 메타정보 저장. 수정 시 캐싱 삭제
-	 * @param envset - 환경설정 정보
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	@Transactional("shopTxnManager")
-	@CacheEvict(value = "metainfo", allEntries = true)
-	public void createEnvsetMetaInfo(Envset envset) {
-		envset.setRegNo(TsaSession.getInfo().getUserNo());
-		envsetDao.createEnvset(envset);
-	}
-
-	/**
-	 * 환경설정이력 목록
-	 * @param siteCd - 사이트코드
-	 * @param envsetType - 환경설정유형
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	public Collection<Envset> getEnvsetHistoryList(String siteCd, String envsetType) {
-		Envset envset = new Envset();
-		envset.setSiteCd(siteCd);
-		envset.setEnvsetType(envsetType);
-		return envsetDao.getEnvsetList(envset);
-	}
-
-	/**
-	 * 회원등급정책 저장
-	 * @param policy - 회원등급정책 정보
-	 * @author gagamel
-	 * @since 2021. 1. 7
-	 */
-	public void createCustomerGradePolicy(CustGradePolicy policy) {
-		policy.setRegNo(TsaSession.getInfo().getUserNo());
-		policy.setUpdNo(TsaSession.getInfo().getUserNo());
-		envsetDao.createCustomerGradePolicy(policy);
-	}
-
-	/**
-	 * 회원등급정책 목록
-	 * @param policy - 회원등급정책 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 7
-	 */
-	public Collection<CustGradePolicy> getCustomerGradePolicyList(CustGradePolicy policy) {
-		return envsetDao.getCustomerGradePolicyList(policy);
-	}
-
-}
+package com.style24.admin.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.admin.biz.dao.TsaEnvsetDao;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.dao.TscEnvsetDao;
+import com.style24.persistence.domain.CustGradePolicy;
+import com.style24.persistence.domain.Envset;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 환경설정 Service
+ *
+ * @author gagamel
+ * @since 2020. 10. 21
+ */
+@Service
+@Slf4j
+public class TsaEnvsetService {
+
+	@Autowired
+	private TscEnvsetDao cenvsetDao;
+
+	@Autowired
+	private TsaEnvsetDao envsetDao;
+
+	/**
+	 * 환경설정정보 저장
+	 * 		정책은 중요한 정보로서 캐싱 문제 발생 시 심각해질 수 있으므로 캐싱처리 안 함
+	 * @param envset - 환경설정 정보
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	@Transactional("shopTxnManager")
+	public void createEnvset(Envset envset) {
+		envset.setRegNo(TsaSession.getInfo().getUserNo());
+		envsetDao.createEnvset(envset);
+	}
+
+	/**
+	 * 환경설정정보 - 메타정보 저장. 수정 시 캐싱 삭제
+	 * @param envset - 환경설정 정보
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	@Transactional("shopTxnManager")
+	@CacheEvict(value = "metainfo", allEntries = true)
+	public void createEnvsetMetaInfo(Envset envset) {
+		envset.setRegNo(TsaSession.getInfo().getUserNo());
+		envsetDao.createEnvset(envset);
+	}
+
+	/**
+	 * 환경설정이력 목록
+	 * @param siteCd - 사이트코드
+	 * @param envsetType - 환경설정유형
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	public Collection<Envset> getEnvsetHistoryList(String siteCd, String envsetType) {
+		Envset envset = new Envset();
+		envset.setSiteCd(siteCd);
+		envset.setEnvsetType(envsetType);
+		return envsetDao.getEnvsetList(envset);
+	}
+
+	/**
+	 * 회원등급정책 저장
+	 * @param policy - 회원등급정책 정보
+	 * @author gagamel
+	 * @since 2021. 1. 7
+	 */
+	public void createCustomerGradePolicy(CustGradePolicy policy) {
+		policy.setRegNo(TsaSession.getInfo().getUserNo());
+		policy.setUpdNo(TsaSession.getInfo().getUserNo());
+		envsetDao.createCustomerGradePolicy(policy);
+	}
+
+	/**
+	 * 회원등급정책 목록
+	 * @param policy - 회원등급정책 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 7
+	 */
+	public Collection<CustGradePolicy> getCustomerGradePolicyList(CustGradePolicy policy) {
+		return envsetDao.getCustomerGradePolicyList(policy);
+	}
+
+}

+ 21 - 50
style24.admin/src/main/java/com/style24/admin/biz/service/TsaMarketingService.java

@@ -1,27 +1,33 @@
 package com.style24.admin.biz.service;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gagaframework.excel.GagaExcelUtil;
+import com.gagaframework.excel.env.GagaExcelConstants;
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.util.GagaDateUtil;
+import com.gagaframework.web.util.GagaFileUtil;
+import com.gagaframework.web.util.GagaStringUtil;
+import com.style24.admin.biz.dao.TsaGoodsDao;
 import com.style24.admin.biz.dao.TsaMarketingDao;
+import com.style24.admin.support.env.TsaConstants;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.biz.thirdparty.NaverLowestPriceApi;
 import com.style24.core.biz.thirdparty.SafetyKoreaApi;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.domain.Coupon;
-import com.style24.persistence.domain.FreeGoodsPromotion;
-import com.style24.persistence.domain.MoreBetter;
-import com.style24.persistence.domain.MoreBetterBurden;
-import com.style24.persistence.domain.MoreBetterGoods;
-import com.style24.persistence.domain.MoreBetterSection;
-
+import com.style24.persistence.domain.*;
+import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
 
 /**
  *상품관리 Service
@@ -82,39 +88,4 @@ public class TsaMarketingService {
 
 	/* // xodud1202 진행 */
 
-	/* JSM 진행 */
-	/**
-	 * 쿠폰 리스트 조회
-	 * @param  Coupon
-	 * @return ArrayList<Coupon>
-	 * @author xyzp1539
-	 * @since 2020-12-22
-	 */
-	public ArrayList<Coupon> getCouponList(Coupon param) {
-		return marketingDao.getCouponList(param);
-	}
-
-	/**
-	 * 쿠폰리스트 카운트 조회
-	 * @param  Coupon
-	 * @return int
-	 * @author xyzp1539
-	 * @since 2020-12-22
-	 */
-	public int getCouponListCnt(Coupon param) {
-		return marketingDao.getCouponListCnt(param);
-	}
-	/* // JSM 진행 */
-
-	/**
-	 * 쿠폰조회 목록
-	 * @param coupon - 쿠폰 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
-	 */
-	public Collection<Coupon> getCouponRetrieveList(Coupon coupon) {
-		return marketingDao.getCouponRetrieveList(coupon);
-	}
-
 }

+ 12 - 12
style24.admin/src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java

@@ -50,7 +50,7 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 마스터 조회
-     * @param param
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 8
@@ -61,7 +61,7 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 구간 조회
-     * @param param
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 8
@@ -72,7 +72,7 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 구간 조회
-     * @param param
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 8
@@ -107,7 +107,7 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 구간 조회
-     * @param param
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 8
@@ -253,7 +253,7 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 공급업체 삭제
-     * @param tmtb
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 5
@@ -271,7 +271,7 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 브랜드 삭제
-     * @param tmtb
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 16
@@ -289,7 +289,7 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 적용상품 삭제
-     * @param tmtb
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 16
@@ -307,7 +307,7 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 제외상품 삭제
-     * @param tmtb
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 16
@@ -325,18 +325,18 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 다다익선 할인구간 삭제
-     * @param tmtb
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 5
      */
     @Transactional("shopTxnManager")
     public void deleteTmtbSectionValList(MoreBetterSection moreBetterSection) {
-        if (moreBetterSection == null || (moreBetterSection.getArrSecionSq() == null && moreBetterSection.getArrSecionSq().length <= 0)) {
+        if (moreBetterSection == null || (moreBetterSection.getArrSectionSq() == null && moreBetterSection.getArrSectionSq().length <= 0)) {
             throw new IllegalStateException(message.getMessage("FAIL_1001"));
         }
 
-        if (moreBetterSection.getArrSecionSq().length > 0) {
+        if (moreBetterSection.getArrSectionSq().length > 0) {
             morebetterDao.deleteTmtbSectionList(moreBetterSection);
             morebetterDao.deleteTmtbValList(moreBetterSection);
         }
@@ -344,7 +344,7 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 제외상품 삭제
-     * @param tmtb
+     * @param
      * @return
      * @author bin2107
      * @since 2021. 1. 16

+ 122 - 122
style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java

@@ -39,7 +39,7 @@ public class TsaOrderService {
 
 	@Autowired
 	private ObjectMapper mapper;
-	
+
 	/**
 	 * 주문목록 카운트
 	 * @param Order
@@ -50,7 +50,7 @@ public class TsaOrderService {
 	public int getOrderListCount(Order order) {
 		return orderDao.getOrderListCount(order);
 	}
-	
+
 	/**
 	 * 주문목록
 	 * @param Order
@@ -85,7 +85,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderDetailList(Order order) {
 		return orderDao.getOrderDetailList(order);
 	}
-	
+
 	/**
 	 * 사은품목록
 	 *
@@ -97,7 +97,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderFreeGiftList(Order order) {
 		return orderDao.getOrderFreeGiftList(order);
 	}
-	
+
 	/**
 	 * 배송정보
 	 *
@@ -109,7 +109,7 @@ public class TsaOrderService {
 	public Collection<Order> getDeliveryAddrList(Order order) {
 		return orderDao.getDeliveryAddrList(order);
 	}
-	
+
 	/**
 	 * 결제정보
 	 *
@@ -121,7 +121,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderPaymentBasicInfoList(Order order) {
 		return orderDao.getOrderPaymentBasicInfoList(order);
 	}
-	
+
 	/**
 	 * 배송비정보
 	 *
@@ -133,7 +133,7 @@ public class TsaOrderService {
 	public Collection<Order> getDeliveryFeeList(Order order) {
 		return orderDao.getDeliveryFeeList(order);
 	}
-	
+
 	/**
 	 * 취소/반품/교환 요청 정보
 	 *
@@ -157,7 +157,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderRefundInfo(Order order) {
 		return orderDao.getOrderRefundInfo(order);
 	}
-	
+
 	/**
 	 * 상담내역
 	 *
@@ -169,7 +169,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderCounselInfo(Order order) {
 		return orderDao.getOrderCounselInfo(order);
 	}
-	
+
 	/**
 	 * 주문요청 관리자 메모 목록 조회
 	 *
@@ -182,7 +182,7 @@ public class TsaOrderService {
 		order.setDelYn("N");
 		return orderDao.getOrderMemoList(order);
 	}
-	
+
 	/**
 	 * 입점업체미발주 주문목록
 	 * @param Order
@@ -193,7 +193,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderSellerUnorderList(Order order) {
 		return orderDao.getOrderSellerUnorderList(order);
 	}
-	
+
 	/**
 	 * 입점업체미발주목록 - 엑셀다운로드시 주문상태값 변경(상품준비중)
 	 *
@@ -219,26 +219,26 @@ public class TsaOrderService {
 			updateData.setSupplyCompCd(oneData.getSupplyCompCd());
 			updateData.setRegNo(TsaSession.getInfo().getUserNo());
 			updateData.setUpdNo(TsaSession.getInfo().getUserNo());
-						
+
 			// 2. 주문상세상태값 변경
 			// 2.1 2020.12.15 주문상태체크추가 (결제완료 상태만 상품준비중 변경)
 			int result = orderDao.updateOrderDetailStat(updateData);
-			
+
 			if (result > 0) {
 				// 3. 주문상세상태 변경 이력생성
 				orderDao.createOrderDetailHst(updateData);
 			}
-			
+
 			// 4. 엑셀 다운로드용 임시테이블 데이타 체크
 			result = orderDao.getEntryUploadExcelCheck(updateData);
 			if (result < 1) {
-				
+
 				// 5. 엑셀 다운로드용 임시테이블 저장
 				orderDao.createEntryExcelDownTmp(updateData);
 			}
 		}
 	}
-	
+
 	/**
 	 * 입점업체미발주목록 엑셀다운로드
 	 *
@@ -248,106 +248,106 @@ public class TsaOrderService {
 	 * @since 2020. 11. 30
 	 */
 	public void geSellerUnorderExcelList(Order order, String excelFilenameWithPath) {
-		
+
 		// 헤더 title 설정 (23)
 		String[] listTitles = {
-			"입점업체"
-			, "브랜드"
-			, "상품타입"
-			, "상품코드"
-			, "상품명"
-			, "주문번호"
-			, "주문상세번호"
-			, "주문상세상태"
-			, "주문자명"
-			, "주문일시"
-			, "결제수단"
-			, "주문자휴대전화"
-			, "수령자명"
-			, "수령자휴대전화"
-			, "수령자우편번호"
-			, "수령자기본주소"
-			, "수령자상세주소"
-			, "업체상품코드"
-			, "단품코드"
-			, "단품상품명"
-			, "칼라"
-			, "사이즈"
-			, "주문수량"
-			, "주문금액"
-			, "할인금액"
-			, "실결제금액"
-			, "송장"
+				"입점업체"
+				, "브랜드"
+				, "상품타입"
+				, "상품코드"
+				, "상품명"
+				, "주문번호"
+				, "주문상세번호"
+				, "주문상세상태"
+				, "주문자명"
+				, "주문일시"
+				, "결제수단"
+				, "주문자휴대전화"
+				, "수령자명"
+				, "수령자휴대전화"
+				, "수령자우편번호"
+				, "수령자기본주소"
+				, "수령자상세주소"
+				, "업체상품코드"
+				, "단품코드"
+				, "단품상품명"
+				, "칼라"
+				, "사이즈"
+				, "주문수량"
+				, "주문금액"
+				, "할인금액"
+				, "실결제금액"
+				, "송장"
 		};
 
 		// DB 처리 시 사용되는 파라미터명(셀명) 설정 (23)
 		String[] cellNames = {
-			"supplyCompNm"
-			, "brandKnm"
-			, "goodsTypeNm"
-			, "goodsCd"
-			, "goodsNm"
-			, "ordNo"
-			, "ordDtlNo"
-			, "ordDtlStatNm"
-			, "ordNm"
-			, "ordDt"
-			, "payMeansNm"
-			, "ordPhnno"
-			, "recipNm"
-			, "recipPhnno"
-			, "recipZipNo"
-			, "recipBaseAddr"
-			, "recipDtlAddr"
-			, "supplyGoodsCd"
-			, "itemCd"
-			, "itemNm"
-			, "optCd1"
-			, "optCd2"
-			, "itemOrdQty"
-			, "ordAmt"
-			, "totDcAmt"
-			, "realOrdAmt"
-			, "invoiceNo"
+				"supplyCompNm"
+				, "brandKnm"
+				, "goodsTypeNm"
+				, "goodsCd"
+				, "goodsNm"
+				, "ordNo"
+				, "ordDtlNo"
+				, "ordDtlStatNm"
+				, "ordNm"
+				, "ordDt"
+				, "payMeansNm"
+				, "ordPhnno"
+				, "recipNm"
+				, "recipPhnno"
+				, "recipZipNo"
+				, "recipBaseAddr"
+				, "recipDtlAddr"
+				, "supplyGoodsCd"
+				, "itemCd"
+				, "itemNm"
+				, "optCd1"
+				, "optCd2"
+				, "itemOrdQty"
+				, "ordAmt"
+				, "totDcAmt"
+				, "realOrdAmt"
+				, "invoiceNo"
 		};
-		
+
 		String[] cellTypes = {
-			GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
-			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
+				, GagaExcelConstants.CellType.CHAR_CENTER.name()
 		};
 
 		GagaExcelResultHandler<Order> handler = new GagaExcelResultHandler<>(excelFilenameWithPath, "출고배송목록(입점)", listTitles, cellNames, cellTypes);
-		
+
 		orderDao.getSellerUnorderList(order, handler);
-		
+
 		handler.close();
 	}
-	
+
 	/**
 	 * 입점업체미발주목록 - 송장번호 입력(출고완료)
 	 *
@@ -363,14 +363,14 @@ public class TsaOrderService {
 		int failedCount 		= 0;	// 몰 실패 카운트
 		int successCount 		= 0;	// 몰 성공 카운트
 		String failedGoodCdStr 	= "";	// 실패 상품 리스트
-		
+
 		// 1. 송장번호 등록 대상 목록 처리
 		for (Order oneData : orderList) {
-			
-			// 2. 송장번호, 업체코드 체크 
+
+			// 2. 송장번호, 업체코드 체크
 			if (!StringUtils.isEmpty(oneData.getInvoiceNo()) && !StringUtils.isEmpty(oneData.getShipCompCd())) {
 				totalCount++;
-				
+
 				Order updateData = new Order();
 				updateData.setOrdNo(oneData.getOrdNo());
 				updateData.setOrdDtlNo(oneData.getOrdDtlNo());
@@ -394,19 +394,19 @@ public class TsaOrderService {
 
 				// 4. 상품코드, 사이즈, 주문수량 체크 (세트상품도 단품 단위로 업로드 요청)
 				// 2020.12.15 세트상품 때문에 단품단위로 비교
-				if (!orgOrder.getItemCd().equals(updateData.getItemCd()) 
+				if (!orgOrder.getItemCd().equals(updateData.getItemCd())
 						|| !orgOrder.getOptCd2().equals(updateData.getOptCd2()) ) {
 					failedGoodCdStr += updateData.getItemCd() + " /  " + updateData.getOptCd2() + "(Error2)<br/>";
 					failedCount++;
 					continue;
 				}
-				
+
 				// 5. 업체코드설정
 				updateData.setSupplyCompCd(orgOrder.getSupplyCompCd());
-				
+
 				// 6. 송장번호등록
 				int result = orderDao.updateOrderDetailInvoice(updateData);
-				
+
 				// 7. 주문상세상태 변경 이력 등록
 				if (result > 0) {
 					successCount++;
@@ -422,7 +422,7 @@ public class TsaOrderService {
 
 		return resultMsg;
 	}
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모정보조회
 	 * @param Order
@@ -433,7 +433,7 @@ public class TsaOrderService {
 	public Order getOrderMemoInfo(Order order) {
 		return orderDao.getOrderMemoInfo(order);
 	}
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모등록
 	 * @param Order
@@ -444,7 +444,7 @@ public class TsaOrderService {
 	public void createOrderMemo(Order order) {
 		orderDao.createOrderMemo(order);
 	}
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모수정
 	 * @param Order
@@ -455,7 +455,7 @@ public class TsaOrderService {
 	public void updateOrderMemo(Order order) {
 		orderDao.updateOrderMemo(order);
 	}
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모삭제
 	 * @param Order
@@ -466,7 +466,7 @@ public class TsaOrderService {
 	public void deleteOrderMemo(Order order) {
 		orderDao.deleteOrderMemo(order);
 	}
-	
+
 	/**
 	 * 주문상품 상세 변경 이력 화면
 	 * @param Order
@@ -477,7 +477,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderDetailHistoryList(Order order) {
 		return orderDao.getOrderDetailHistoryList(order);
 	}
-	
+
 	/**
 	 * 쿠폰사용 내역 팝업 화면
 	 * @param Order
@@ -488,7 +488,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderDiscountCouponList(Order order) {
 		return orderDao.getOrderDiscountCouponList(order);
 	}
-	
+
 	/**
 	 * 포인트사용 내역 팝업 화면
 	 * @param Order
@@ -499,7 +499,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderDiscountPointList(Order order) {
 		return orderDao.getOrderDiscountPointList(order);
 	}
-	
+
 	/**
 	 * 상품권사용 내역 팝업 화면
 	 * @param Order
@@ -510,7 +510,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderGiftcardHstList(Order order) {
 		return orderDao.getOrderGiftcardHstList(order);
 	}
-	
+
 	/**
 	 * 다다익선적용 내역 팝업 화면
 	 * @param Order
@@ -521,7 +521,7 @@ public class TsaOrderService {
 	public Collection<Order> getOrderTmtbHstList(Order order) {
 		return orderDao.getOrderTmtbHstList(order);
 	}
-	
+
 	/**
 	 * 주문상세상태를 변경
 	 * @param Order
@@ -532,11 +532,11 @@ public class TsaOrderService {
 	public void changedOrdDtlStat(Order order) {
 		// 1. 주문상세상태변경
 		int resultInt = orderDao.changedOrdDtlStat(order);
-		
+
 		// 2. 주문상세상태변경 성공 후 주문상세 이력을 등록
 		if (resultInt > 0) {
 			orderDao.createOrderDetailHst(order);
 		}
 	}
-	
+
 }

+ 23 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaDisplayController.java

@@ -2,6 +2,7 @@ package com.style24.admin.biz.web;
 
 import java.util.Collection;
 
+import com.style24.persistence.domain.Brand;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -185,4 +186,26 @@ public class TsaDisplayController extends TsaBaseController {
 		return displayService.getItemkindCategoryMappingList(itemkindCd);
 	}
 
+	/**
+	 * 카테고리 목록 화면(팝업)
+	 * @param Category
+	 * @return
+	 * @author xyzp1539
+	 * @since 2021. 01. 11
+	 */
+	@GetMapping("/category/popup/form")
+	public ModelAndView categorySearchForm(Category category) {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+		mav.addObject("cateGbList", rendererService.getAvailCommonCodeList("G032"));
+		mav.addObject("cateTypeList", rendererService.getAvailCommonCodeList("G031"));
+		mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
+		mav.addObject("conentsLocList", rendererService.getAvailCommonCodeList("G028"));
+		mav.addObject("params", category);
+
+		mav.setViewName("display/CategorySearchForm");
+		return mav;
+	}
+
 }

+ 325 - 325
style24.admin/src/main/java/com/style24/admin/biz/web/TsaEnvsetController.java

@@ -1,325 +1,325 @@
-package com.style24.admin.biz.web;
-
-import java.util.Collection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.servlet.ModelAndView;
-
-import com.style24.admin.biz.service.TsaAnswerPhaseService;
-import com.style24.admin.biz.service.TsaClauseService;
-import com.style24.admin.biz.service.TsaEnvsetService;
-import com.style24.admin.biz.service.TsaRendererService;
-import com.style24.admin.support.controller.TsaBaseController;
-import com.style24.core.biz.service.TscEnvsetService;
-import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.domain.AnswerPhase;
-import com.style24.persistence.domain.Clause;
-import com.style24.persistence.domain.CustGradePolicy;
-import com.style24.persistence.domain.Envset;
-
-import lombok.extern.slf4j.Slf4j;
-
-import com.gagaframework.web.rest.server.GagaResponse;
-
-/**
- * 환경설정 Controller
- *
- * @author gagamel
- * @since 2020. 10. 21
- */
-@Controller
-@RequestMapping("/envset")
-@Slf4j
-public class TsaEnvsetController extends TsaBaseController {
-
-	@Autowired
-	private TscMessageByLocale message;
-
-	@Autowired
-	private TscEnvsetService cenvsetService;
-
-	@Autowired
-	private TsaEnvsetService envsetService;
-
-	@Autowired
-	private TsaRendererService rendererService;
-
-	@Autowired
-	private TsaClauseService clauseService;
-
-	@Autowired
-	private TsaAnswerPhaseService ansPhaseService;
-
-	/**
-	 * 기본환경설정 화면
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	@GetMapping("/basic/form")
-	public ModelAndView basicSetForm() {
-		ModelAndView mav = new ModelAndView();
-
-		// 사이트 목록
-		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
-
-		mav.setViewName("envset/BasicEnvsetForm");
-
-		return mav;
-	}
-
-	/**
-	 * 사이트별 환경설정유형에 따른 환경설정 정보
-	 * @param siteCd - 사이트코드
-	 * @param envsetType - 환경설정유형
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	@GetMapping("/{siteCd}/{envsetType}")
-	@ResponseBody
-	public Envset getEnvset(@PathVariable String siteCd, @PathVariable String envsetType) {
-		return cenvsetService.getEnvset(siteCd, envsetType);
-	}
-
-	/**
-	 * 환경설정 정보 저장
-	 * @param envset - 환경설정 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	@PostMapping("/create")
-	@ResponseBody
-	public GagaResponse createEnvset(@RequestBody Envset envset) {
-		if (envset.getEnvsetType().equals("B10")) {
-			// 메타 정보 수정 시는 캐싱 삭제되도록
-			// 중요하지 않은 정보로서 캐싱 삭제해도 됨.
-			envsetService.createEnvsetMetaInfo(envset);
-		} else {
-			// 그 외는 캐싱 삭제 안 함
-			// 정책은 중요한 정보로서 캐싱 문제 발생 시 심각해질 수 있으므로 캐싱처리 안 함(2020.05.14. gagamel)
-			envsetService.createEnvset(envset);
-		}
-
-		return super.ok(message.getMessage("SUCC_0001"));
-	}
-
-	/**
-	 * 사이트별 환경설정유형에 따른 환경설정이력 화면
-	 * @param siteCd - 사이트코드
-	 * @param envsetType - 환경설정유형
-	 * @param envsetTypeNm - 환경설정유형명
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	@GetMapping("/history/form")
-	public ModelAndView basicSetForm(@RequestParam(value = "siteCd", required = true) String siteCd, @RequestParam(value = "envsetType", required = true) String envsetType, @RequestParam(value = "envsetTypeNm", required = true) String envsetTypeNm) {
-		ModelAndView mav = new ModelAndView();
-
-		mav.addObject("siteCd", siteCd);
-		mav.addObject("envsetType", envsetType);
-		mav.addObject("envsetTypeNm", envsetTypeNm);
-
-		mav.setViewName("envset/EnvsetHistoryForm");
-
-		return mav;
-	}
-
-	/**
-	 * 사이트별 환경설정유형에 따른 환경설정이력 목록
-	 * @param siteCd - 사이트코드
-	 * @param envsetType - 환경설정유형
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 21
-	 */
-	@GetMapping("/history/{siteCd}/{envsetType}")
-	@ResponseBody
-	public Collection<Envset> getEnvsetHistoryList(@PathVariable String siteCd, @PathVariable String envsetType) {
-		return envsetService.getEnvsetHistoryList(siteCd, envsetType);
-	}
-
-	/**
-	 * 회원등급정책관리 화면
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 6
-	 */
-	@GetMapping("/customer/grade/policy/form")
-	public ModelAndView customerGradePolicyForm() {
-		ModelAndView mav = new ModelAndView();
-
-		// 사이트
-		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
-
-		// 회원등급
-		mav.addObject("custGradeList", rendererService.getAvailCommonCodeList("G110"));
-
-		mav.setViewName("envset/CustomerGradePolicyForm");
-
-		return mav;
-	}
-
-	/**
-	 * 회원등급정책 목록
-	 * @param policy - 회원등급정책 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 7
-	 */
-	@PostMapping("/customer/grade/policy/list")
-	@ResponseBody
-	public Collection<CustGradePolicy> getCustomerGradePolicyList(@RequestBody CustGradePolicy policy) {
-		return envsetService.getCustomerGradePolicyList(policy);
-	}
-
-	/**
-	 * 회원등급정책 저장
-	 * @param policy - 회원등급정책 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 7
-	 */
-	@PostMapping("/customer/grade/policy/create")
-	@ResponseBody
-	public GagaResponse createCustomerGradePolicy(@RequestBody CustGradePolicy policy) {
-		envsetService.createCustomerGradePolicy(policy);
-		return super.ok(message.getMessage("SUCC_0001"));
-	}
-
-	/**
-	 * 약관관리 화면
-	 * @return ModelAndView
-	 * @author gagamel
-	 * @since 2020. 10. 29
-	 */
-	@GetMapping("/clause/form")
-	public ModelAndView clauseForm() {
-		ModelAndView mav = new ModelAndView();
-
-		// 사이트 목록
-		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
-
-		// 약관유형 목록
-		mav.addObject("clauseTypeList", rendererService.getAvailCommonCodeList("G057"));
-
-		mav.setViewName("envset/ClauseForm");
-
-		return mav;
-	}
-
-	/**
-	 * 약관관리 목록
-	 * @param clause - 약관 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 29
-	 */
-	@PostMapping("/clause/list")
-	@ResponseBody
-	public Collection<Clause> getClauseList(@RequestBody Clause clause) {
-		return clauseService.getClauseList(clause);
-	}
-
-	/**
-	 * 약관관리상세 화면
-	 * @param mode - 모드(N:신규, U:상세)
-	 * @param clauseSq - 약관일련번호
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 29
-	 */
-	@GetMapping("/clause/detail/form")
-	public ModelAndView clauseDetailForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "clauseSq", required = false) Integer clauseSq) {
-		ModelAndView mav = new ModelAndView();
-
-		// 사이트 목록
-		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
-
-		// 약관유형 목록
-		mav.addObject("clauseTypeList", rendererService.getAvailCommonCodeList("G057"));
-
-		// 모드 값
-		mav.addObject("mode", mode);
-
-		if ("U".equals(mode)) {
-			mav.addObject("clauseInfo", clauseService.getClauseDetail(clauseSq));
-		}
-
-		mav.setViewName("envset/ClauseDetailForm");
-
-		return mav;
-	}
-
-	/**
-	 * 약관 생성/수정
-	 * @param clause - 약관 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 29
-	 */
-	@PostMapping("/clause/save")
-	@ResponseBody
-	public GagaResponse saveClause(@RequestBody Clause clause) {
-		clauseService.saveClause(clause);
-		return super.ok(message.getMessage("SUCC_0001"));
-	}
-
-	/**
-	 * 답변문구관리
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 29
-	 */
-	@GetMapping("/answer/phase/form")
-	public ModelAndView answerPhaseForm() {
-		ModelAndView mav = new ModelAndView();
-
-		// 사이트콤보
-		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
-
-		// 답변종류콤보
-		mav.addObject("ansClsfList", rendererService.getAvailCommonCodeList("G061"));
-
-		mav.setViewName("envset/AnswerPhaseForm");
-
-		return mav;
-	}
-
-	/**
-	 * 답변문구 목록
-	 * @param ansPhase - 답변문구 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 29
-	 */
-	@PostMapping("/answer/phase/list")
-	@ResponseBody
-	public Collection<AnswerPhase> getAnswerPhaseList(@RequestBody AnswerPhase ansPhase) {
-		return ansPhaseService.getAnswerPhaseList(ansPhase);
-	}
-
-	/**
-	 * 답변문구 저장
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 10. 29
-	 */
-	@PostMapping("/answer/phase/save")
-	@ResponseBody
-	public GagaResponse saveAnswerPhase(@RequestBody AnswerPhase ansPhase) {
-		ansPhaseService.saveAnswerPhase(ansPhase);
-		return super.ok(message.getMessage("SUCC_0001"));
-	}
-
-}
+package com.style24.admin.biz.web;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.style24.admin.biz.service.TsaAnswerPhaseService;
+import com.style24.admin.biz.service.TsaClauseService;
+import com.style24.admin.biz.service.TsaEnvsetService;
+import com.style24.admin.biz.service.TsaRendererService;
+import com.style24.admin.support.controller.TsaBaseController;
+import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.AnswerPhase;
+import com.style24.persistence.domain.Clause;
+import com.style24.persistence.domain.CustGradePolicy;
+import com.style24.persistence.domain.Envset;
+
+import lombok.extern.slf4j.Slf4j;
+
+import com.gagaframework.web.rest.server.GagaResponse;
+
+/**
+ * 환경설정 Controller
+ *
+ * @author gagamel
+ * @since 2020. 10. 21
+ */
+@Controller
+@RequestMapping("/envset")
+@Slf4j
+public class TsaEnvsetController extends TsaBaseController {
+
+	@Autowired
+	private TscMessageByLocale message;
+
+	@Autowired
+	private TscEnvsetService cenvsetService;
+
+	@Autowired
+	private TsaEnvsetService envsetService;
+
+	@Autowired
+	private TsaRendererService rendererService;
+
+	@Autowired
+	private TsaClauseService clauseService;
+
+	@Autowired
+	private TsaAnswerPhaseService ansPhaseService;
+
+	/**
+	 * 기본환경설정 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	@GetMapping("/basic/form")
+	public ModelAndView basicSetForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+
+		mav.setViewName("envset/BasicEnvsetForm");
+
+		return mav;
+	}
+
+	/**
+	 * 사이트별 환경설정유형에 따른 환경설정 정보
+	 * @param siteCd - 사이트코드
+	 * @param envsetType - 환경설정유형
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	@GetMapping("/{siteCd}/{envsetType}")
+	@ResponseBody
+	public Envset getEnvset(@PathVariable String siteCd, @PathVariable String envsetType) {
+		return cenvsetService.getEnvset(siteCd, envsetType);
+	}
+
+	/**
+	 * 환경설정 정보 저장
+	 * @param envset - 환경설정 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	@PostMapping("/create")
+	@ResponseBody
+	public GagaResponse createEnvset(@RequestBody Envset envset) {
+		if (envset.getEnvsetType().equals("B10")) {
+			// 메타 정보 수정 시는 캐싱 삭제되도록
+			// 중요하지 않은 정보로서 캐싱 삭제해도 됨.
+			envsetService.createEnvsetMetaInfo(envset);
+		} else {
+			// 그 외는 캐싱 삭제 안 함
+			// 정책은 중요한 정보로서 캐싱 문제 발생 시 심각해질 수 있으므로 캐싱처리 안 함(2020.05.14. gagamel)
+			envsetService.createEnvset(envset);
+		}
+
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 사이트별 환경설정유형에 따른 환경설정이력 화면
+	 * @param siteCd - 사이트코드
+	 * @param envsetType - 환경설정유형
+	 * @param envsetTypeNm - 환경설정유형명
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	@GetMapping("/history/form")
+	public ModelAndView basicSetForm(@RequestParam(value = "siteCd", required = true) String siteCd, @RequestParam(value = "envsetType", required = true) String envsetType, @RequestParam(value = "envsetTypeNm", required = true) String envsetTypeNm) {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("siteCd", siteCd);
+		mav.addObject("envsetType", envsetType);
+		mav.addObject("envsetTypeNm", envsetTypeNm);
+
+		mav.setViewName("envset/EnvsetHistoryForm");
+
+		return mav;
+	}
+
+	/**
+	 * 사이트별 환경설정유형에 따른 환경설정이력 목록
+	 * @param siteCd - 사이트코드
+	 * @param envsetType - 환경설정유형
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 21
+	 */
+	@GetMapping("/history/{siteCd}/{envsetType}")
+	@ResponseBody
+	public Collection<Envset> getEnvsetHistoryList(@PathVariable String siteCd, @PathVariable String envsetType) {
+		return envsetService.getEnvsetHistoryList(siteCd, envsetType);
+	}
+
+	/**
+	 * 회원등급정책관리 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 6
+	 */
+	@GetMapping("/customer/grade/policy/form")
+	public ModelAndView customerGradePolicyForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+
+		// 회원등급
+		mav.addObject("custGradeList", rendererService.getAvailCommonCodeList("G110"));
+
+		mav.setViewName("envset/CustomerGradePolicyForm");
+
+		return mav;
+	}
+
+	/**
+	 * 회원등급정책 목록
+	 * @param policy - 회원등급정책 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 7
+	 */
+	@PostMapping("/customer/grade/policy/list")
+	@ResponseBody
+	public Collection<CustGradePolicy> getCustomerGradePolicyList(@RequestBody CustGradePolicy policy) {
+		return envsetService.getCustomerGradePolicyList(policy);
+	}
+
+	/**
+	 * 회원등급정책 저장
+	 * @param policy - 회원등급정책 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 7
+	 */
+	@PostMapping("/customer/grade/policy/create")
+	@ResponseBody
+	public GagaResponse createCustomerGradePolicy(@RequestBody CustGradePolicy policy) {
+		envsetService.createCustomerGradePolicy(policy);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 약관관리 화면
+	 * @return ModelAndView
+	 * @author gagamel
+	 * @since 2020. 10. 29
+	 */
+	@GetMapping("/clause/form")
+	public ModelAndView clauseForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+
+		// 약관유형 목록
+		mav.addObject("clauseTypeList", rendererService.getAvailCommonCodeList("G057"));
+
+		mav.setViewName("envset/ClauseForm");
+
+		return mav;
+	}
+
+	/**
+	 * 약관관리 목록
+	 * @param clause - 약관 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 29
+	 */
+	@PostMapping("/clause/list")
+	@ResponseBody
+	public Collection<Clause> getClauseList(@RequestBody Clause clause) {
+		return clauseService.getClauseList(clause);
+	}
+
+	/**
+	 * 약관관리상세 화면
+	 * @param mode - 모드(N:신규, U:상세)
+	 * @param clauseSq - 약관일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 29
+	 */
+	@GetMapping("/clause/detail/form")
+	public ModelAndView clauseDetailForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "clauseSq", required = false) Integer clauseSq) {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+
+		// 약관유형 목록
+		mav.addObject("clauseTypeList", rendererService.getAvailCommonCodeList("G057"));
+
+		// 모드 값
+		mav.addObject("mode", mode);
+
+		if ("U".equals(mode)) {
+			mav.addObject("clauseInfo", clauseService.getClauseDetail(clauseSq));
+		}
+
+		mav.setViewName("envset/ClauseDetailForm");
+
+		return mav;
+	}
+
+	/**
+	 * 약관 생성/수정
+	 * @param clause - 약관 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 29
+	 */
+	@PostMapping("/clause/save")
+	@ResponseBody
+	public GagaResponse saveClause(@RequestBody Clause clause) {
+		clauseService.saveClause(clause);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 답변문구관리
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 29
+	 */
+	@GetMapping("/answer/phase/form")
+	public ModelAndView answerPhaseForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트콤보
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+
+		// 답변종류콤보
+		mav.addObject("ansClsfList", rendererService.getAvailCommonCodeList("G061"));
+
+		mav.setViewName("envset/AnswerPhaseForm");
+
+		return mav;
+	}
+
+	/**
+	 * 답변문구 목록
+	 * @param ansPhase - 답변문구 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 29
+	 */
+	@PostMapping("/answer/phase/list")
+	@ResponseBody
+	public Collection<AnswerPhase> getAnswerPhaseList(@RequestBody AnswerPhase ansPhase) {
+		return ansPhaseService.getAnswerPhaseList(ansPhase);
+	}
+
+	/**
+	 * 답변문구 저장
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 29
+	 */
+	@PostMapping("/answer/phase/save")
+	@ResponseBody
+	public GagaResponse saveAnswerPhase(@RequestBody AnswerPhase ansPhase) {
+		ansPhaseService.saveAnswerPhase(ansPhase);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+}

+ 29 - 4
style24.admin/src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -10,7 +10,6 @@ import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.domain.*;
-
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -56,6 +55,9 @@ public class TsaMarketingController extends TsaBaseController {
 	@Autowired
 	private TsaMorebetterService morebetterService;
 
+	@Autowired
+	private TsaCouponService couponService;
+
 	/* xodud1202 진행 */
 	/**
 	 * 사은품 프로모션 관리 화면
@@ -151,8 +153,8 @@ public class TsaMarketingController extends TsaBaseController {
 	public GagaMap getCouponList(@RequestBody Coupon param){
 		GagaMap result =  new GagaMap();
 
-		ArrayList<Coupon> cpnList = marketingService.getCouponList(param);
-		int cpnTotCnt = marketingService.getCouponListCnt(param);
+		ArrayList<Coupon> cpnList = couponService.getCouponList(param);
+		int cpnTotCnt = couponService.getCouponListCnt(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
@@ -218,7 +220,7 @@ public class TsaMarketingController extends TsaBaseController {
 		// 사용가능 고객구분 조회
 		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100"));
 		// 사용가능 고객등급 조회
-		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
+		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G101"));
 		// 사이트코드 조회
 		mav.addObject("siteCdList" , rendererService.getCommonCodeList("G000"));
 		// 재발급 여부 조회
@@ -227,14 +229,37 @@ public class TsaMarketingController extends TsaBaseController {
 		mav.addObject("dcWayList" , rendererService.getCommonCodeList("G240"));
 		// 쿠폰다운로드 방식 조회
 		mav.addObject("dnGbList" , rendererService.getCommonCodeList("G058"));
+		// 결제수단 조회
+		mav.addObject("payTypeList" , rendererService.getCommonCodeList("G015"));
+		// 결제수단 조회
+		mav.addObject("cpnStatList" , rendererService.getCommonCodeList("G232"));
 		// 시간 분 리스트 세팅
 		mav.addObject("mmList" , mmList);
 		// 시간 시 리스트 세팅
 		mav.addObject("hhList" , hhList);
+		// 입점업체 조회
+		mav.addObject("ibSupplyCompList" , rendererService.getSupplyCompanyList("","N"));
 
 		mav.setViewName("marketing/CouponCreatePopupForm");
 		return mav;
 	}
+
+	/**
+	 * 쿠폰 저장
+	 * @param Coupon - 쿠폰 정보
+	 * @return
+	 * @author xyzp1539
+	 * @since 2021. 1. 11
+	 */
+	@PostMapping("/coupon/save")
+	@ResponseBody
+	public GagaResponse couponSave(@RequestBody Coupon coupon) {
+		log.info("couponSave : {}" , coupon);
+
+		couponService.couponSave(coupon);
+
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
 	/* // JSM 진행 */
 
 	/* CSB 진행 */

+ 79 - 79
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -49,19 +49,19 @@ import lombok.extern.slf4j.Slf4j;
 @RequestMapping("/order")
 @Slf4j
 public class TsaOrderController extends TsaBaseController {
-	
+
 	@Autowired
 	private TscMessageByLocale message;
-	
+
 	@Autowired
 	private Environment env;
-	
+
 	@Autowired
 	private TsaRendererService rendererService;
-	
+
 	@Autowired
 	private TsaOrderService orderService;
-	
+
 	/**
 	 * 주문목록조회
 	 *
@@ -72,13 +72,13 @@ public class TsaOrderController extends TsaBaseController {
 	@GetMapping("/list/form")
 	public ModelAndView orderListForm() {
 		ModelAndView mav = new ModelAndView();
-		
+
 		mav.addObject("siteCdList"		, rendererService.getAvailCommonCodeList("G012"));		// 사이트구분
 		mav.addObject("mallGbList"		, rendererService.getAvailCommonCodeList("G011"));		// 몰구분		
 		mav.addObject("supplyCompList"	, rendererService.getSupplyCompanyList());				// 공급업제목록
 		mav.addObject("ordStatList"		, rendererService.getAvailCommonCodeList("G012"));		// 주문상태코드
 		mav.addObject("ordDtlStatList"	, rendererService.getAvailCommonCodeList("G013"));		// 주문상세상태코드
-		
+
 		mav.addObject("chgStatList"		, rendererService.getAvailCommonCodeList("G685"));		// 주문변경요청상태코드
 		mav.addObject("chgGbList"		, rendererService.getAvailCommonCodeList("G680"));		// 주문변경구분코드
 		mav.addObject("payMeansList"	, rendererService.getAvailCommonCodeList("G014"));		// 결제수단
@@ -89,7 +89,7 @@ public class TsaOrderController extends TsaBaseController {
 
 		return mav;
 	}
-	
+
 	/**
 	 * 주문목록
 	 *
@@ -102,37 +102,37 @@ public class TsaOrderController extends TsaBaseController {
 	@ResponseBody
 	public GagaMap getOrderList(@RequestBody Order order) throws Exception {
 		GagaMap result = new GagaMap();
-		
+
 		order.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		order.setPageable(new TsaPageRequest(order.getPageNo() - 1, order.getPageSize()));
-		
+
 		// 주문상태 CD_GB 변경
 		if (order.getMultiOrdStat() != null) {
 			for (int i=0 ; i<order.getMultiOrdStat().length ; i++) {
-				String ordStat = order.getMultiOrdStat()[i].replace("G012", "G013"); 
+				String ordStat = order.getMultiOrdStat()[i].replace("G012", "G013");
 				order.getMultiOrdStat()[i] = ordStat;
 			}
 		}
-		
+
 		// 주문취소상태 CD_GB 변경
 		if (order.getChgGb() != null) {
-			String chgDtlStat = order.getChgGb().replace("G680", "G685"); 
+			String chgDtlStat = order.getChgGb().replace("G680", "G685");
 			order.setChgGb(chgDtlStat);
 		}
-		
+
 		// 주문전체건수 조회
 		int totalCount = orderService.getOrderListCount(order);
 		order.getPageable().setTotalCount(totalCount);
-		
+
 		// 주문목록 페이지 조회
 		Collection<Order> orderList = orderService.getOrderList(order);
-		
+
 		result.set("pageing"	, order);
 		result.set("orderList"	, orderList);
-		
+
 		return result;
 	}
-	
+
 	/**
 	 * 주문목록엑셀조회
 	 *
@@ -145,37 +145,37 @@ public class TsaOrderController extends TsaBaseController {
 	@ResponseBody
 	public Collection<Order> getOrderListSearchExcel(@RequestBody Order order) throws Exception {
 		ObjectMapper mapper = new ObjectMapper();
-		
+
 		// 1. 엑셀업로드경로설정
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "");
 		String[] cellName = new String[1];
-		
+
 		// 2. DB 처리 시 사용되는 파라미터명(셀명) 설정
 		cellName[0] = "ordNo";
 		Collection<GagaMap> dataList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()), 0, cellName);
-		
+
 		Order searchOrder = new Order();
 		int[] ordNoList = new int[dataList.size()];
 		int cnt = 0;
-		
+
 		for (GagaMap map : dataList) {
 			Order tmpOrder = mapper.convertValue(map, Order.class);
 			ordNoList[cnt] = tmpOrder.getOrdNo();
 			cnt++;
 		}
-		
+
 		// 3. 주문번호 배열에 담고 주문목록 조회
 		searchOrder.setOrdNoList(ordNoList);
 		Collection<Order> orderList = orderService.getOrderList(searchOrder);
-		
+
 		GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()));
- 
+
 		return orderList;
 	}
 
 	/**
 	 * 주문상세 화면
-	 * 
+	 *
 	 * @param ordNo - 주문번호
 	 * @return ModelAndView
 	 * @author jsh77b
@@ -185,35 +185,35 @@ public class TsaOrderController extends TsaBaseController {
 	@ResponseBody
 	public ModelAndView orderDetailForm(@RequestParam(value = "ordNo") int ordNo) {
 		ModelAndView mav = new ModelAndView();
-		
+
 		Order order = new Order();
 		order.setOrdNo(ordNo);
 		order.setDelYn("N");
-		
+
 		// 1. 주문기본정보
 		mav.addObject("ordNo"					, ordNo);												// 주문번호
 		mav.addObject("userNo"					, TsaSession.getInfo().getUserNo());					// 관리자번호
-		
+
 		mav.addObject("orderInfo"				, orderService.getOrderInfoList(order));				// 주문기본정보
 		mav.addObject("orderGoodsInfo"			, orderService.getOrderDetailList(order));				// 주문상품정보
 		mav.addObject("orderFreeGiftInfo"		, orderService.getOrderFreeGiftList(order));			// 주문사은품정보 2020.12.16 추가
 		mav.addObject("orderDeliveryAddrInfo"	, orderService.getDeliveryAddrList(order));				// 배송정보
 		mav.addObject("orderPaymentInfo"		, orderService.getOrderPaymentBasicInfoList(order));	// 결제정보
 		mav.addObject("orderDeliveryFeeInfo"	, orderService.getDeliveryFeeList(order));				// 배송비정보
-		
+
 		// 2. 클레임정보
 		mav.addObject("orderChangeInfo"			, orderService.getOrderChangeList(order));				// 취소/반품/교환 요청 정보
 		mav.addObject("orderRefundInfo"			, orderService.getOrderRefundInfo(order));				// 환불정보
-		
+
 		// 3. 주문메모정보
 		mav.addObject("orderCounselInfo"		, orderService.getOrderCounselInfo(order));				// 상담내역
 		mav.addObject("orderAdminMemoInfo"		, orderService.getOrderMemoList(order));				// 관리자메모목록
 
 		mav.setViewName("order/OrderDetailForm");
-		
+
 		return mav;
 	}
-	
+
 	/**
 	 * 입점업체미발주목록화면
 	 *
@@ -224,7 +224,7 @@ public class TsaOrderController extends TsaBaseController {
 	@GetMapping("/seller/unorder/list/form")
 	public ModelAndView orderSellerUnorderListForm() {
 		ModelAndView mav = new ModelAndView();
-				
+
 		mav.addObject("supplyCompList"	, rendererService.getSupplyCompanyList());				// 공급업제목록
 		mav.addObject("ordStatList"		, rendererService.getAvailCommonCodeList("G012"));		// 주문상태코드
 		mav.addObject("ordDtlStatList"	, rendererService.getAvailCommonCodeList("G013"));		// 주문상세상태코드
@@ -234,7 +234,7 @@ public class TsaOrderController extends TsaBaseController {
 
 		return mav;
 	}
-	
+
 	/**
 	 * 입점업체미발주 주문목록 조회
 	 *
@@ -245,11 +245,11 @@ public class TsaOrderController extends TsaBaseController {
 	 */
 	@PostMapping("/seller/unorder/list")
 	@ResponseBody
-	public Collection<Order> getOrderSellerUnorderList(@RequestBody Order order) throws Exception {		
-		Collection<Order> orderList = orderService.getOrderSellerUnorderList(order); 
+	public Collection<Order> getOrderSellerUnorderList(@RequestBody Order order) throws Exception {
+		Collection<Order> orderList = orderService.getOrderSellerUnorderList(order);
 		return orderList;
 	}
-	
+
 	/**
 	 * 입점업체미발주목록 - 엑셀다운로드시 주문상태값 변경(출고완료)
 	 *
@@ -264,7 +264,7 @@ public class TsaOrderController extends TsaBaseController {
 		orderService.saveUnorderStatus(orderList);
 		return super.ok("");
 	}
-	
+
 	/**
 	 * 입점업체미발주목록 - 엑셀다운로드
 	 *
@@ -278,16 +278,16 @@ public class TsaOrderController extends TsaBaseController {
 	public ResponseEntity<InputStreamResource> downloadPickingGoodsExcelList(HttpServletRequest request) throws Exception {
 		String excelfileName 	= "입점출고목록_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
 		String excelFilePath 	= GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
-		
+
 		Order order = new Order();
 		order.setRegNo(TsaSession.getInfo().getUserNo());
 		order.setSearch("EXCEL");
 
 		orderService.geSellerUnorderExcelList(order, excelFilePath);
-		
+
 		return GagaFileUtil.writeFile(request, excelFilePath);
 	}
-	
+
 	/**
 	 * 입점 송장 엑셀 업로드
 	 *
@@ -302,30 +302,30 @@ public class TsaOrderController extends TsaBaseController {
 	public GagaMap saveSellerUnorderInvoiceExcelupload(@RequestBody Order order) throws Exception {
 
 		ObjectMapper mapper = new ObjectMapper();
-		
+
 		// 1. UPLOAD 경로 조회
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
-		
+
 		// 2. DB 처리 시 사용되는 파라미터명(셀명) 설정
 		String[] cellName = {
-			"ordNo"
-			, "ordDtlNo"
-			, "itemCd"
-			, "optCd2"
-			, "itemOrdQty"
-			, "shipCompCd"
-			, "invoiceNo"
+				"ordNo"
+				, "ordDtlNo"
+				, "itemCd"
+				, "optCd2"
+				, "itemOrdQty"
+				, "shipCompCd"
+				, "invoiceNo"
 		};
-		
+
 		Collection<GagaMap> ecxelList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()), 0, cellName, 0);
-		
+
 		// 3. 주문목록 매퍼 등록
 		Collection<Order> orderList = new ArrayList<>();
 		for (GagaMap map : ecxelList) {
 			Order tmpGoods = mapper.convertValue(map, Order.class);
 			orderList.add(tmpGoods);
 		}
-		
+
 		// 4. 업로드된 임시 엑셀파일 삭제
 		if (CollectionUtils.isEmpty(orderList)) {
 			try {
@@ -336,7 +336,7 @@ public class TsaOrderController extends TsaBaseController {
 			//throw new IllegalStateException(message.getMessage("FAIL_1001"));
 			throw new IllegalStateException("실패 했습니다.");
 		}
-		
+
 		// 4. 주문상세번호 기준으로 송장번호 등록
 		String result = orderService.saveUnorderInvoice(orderList);
 		GagaMap map = new GagaMap();
@@ -347,7 +347,7 @@ public class TsaOrderController extends TsaBaseController {
 
 		return map;
 	}
-	
+
 	/**
 	 * 입점업체미발주목록 - 송장번호 입력(출고완료)
 	 *
@@ -365,7 +365,7 @@ public class TsaOrderController extends TsaBaseController {
 		map.set("msg", result);
 		return map;
 	}
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 등록폼
 	 *
@@ -388,9 +388,9 @@ public class TsaOrderController extends TsaBaseController {
 			order.setSeq(seq);
 			order.setOrdNo(ordNo);
 			order.setDelYn("N");
-			
+
 			Order orderMemo = orderService.getOrderMemoInfo(order);
-			
+
 			mav.addObject("orderMemo", orderMemo);
 		}
 
@@ -403,7 +403,7 @@ public class TsaOrderController extends TsaBaseController {
 		mav.setViewName("order/OrderMemoRegistForm");
 		return mav;
 	}
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모저장
 	 *
@@ -418,7 +418,7 @@ public class TsaOrderController extends TsaBaseController {
 		int userNo = TsaSession.getInfo().getUserNo();
 		order.setRegNo(userNo);
 		order.setUpdNo(userNo);
-		
+
 		// 신규
 		if ("N".equals(order.getMode())) {
 			orderService.createOrderMemo(order);
@@ -427,10 +427,10 @@ public class TsaOrderController extends TsaBaseController {
 		else if ("U".equals(order.getMode())) {
 			orderService.updateOrderMemo(order);
 		}
-		
+
 		return super.ok("저장이 완료되었습니다.");
 	}
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모삭제
 	 *
@@ -445,12 +445,12 @@ public class TsaOrderController extends TsaBaseController {
 		int userNo = TsaSession.getInfo().getUserNo();
 		order.setRegNo(userNo);
 		order.setUpdNo(userNo);
-		
+
 		orderService.deleteOrderMemo(order);
-		
+
 		return super.ok("저장이 완료되었습니다.");
 	}
-	
+
 	/**
 	 * 주문상세 > 주문요청 관리자 메모 > 메모삭제 > 새로고침
 	 *
@@ -466,10 +466,10 @@ public class TsaOrderController extends TsaBaseController {
 		order.setOrdNo(ordNo);
 		return orderService.getOrderMemoList(order);
 	}
-	
+
 	/**
 	 * 주문상품 상세 변경 이력 화면
-	 * 
+	 *
 	 * @param ordDtlNo - 주문상세번호
 	 * @return ModelAndView
 	 * @author jsh77b
@@ -489,10 +489,10 @@ public class TsaOrderController extends TsaBaseController {
 		mav.setViewName("order/OrderDetailChangeHst");
 		return mav;
 	}
-	
+
 	/**
 	 * 쿠폰사용 내역 팝업 화면
-	 * 
+	 *
 	 * @param ordNo - 주문번호
 	 * @return ModelAndView
 	 * @author jsh77b
@@ -512,10 +512,10 @@ public class TsaOrderController extends TsaBaseController {
 		mav.setViewName("order/OrderDetailCouponHst");
 		return mav;
 	}
-	
+
 	/**
 	 * 포인트사용 내역 팝업 화면
-	 * 
+	 *
 	 * @param ordNo - 주문번호
 	 * @return ModelAndView
 	 * @author jsh77b
@@ -535,10 +535,10 @@ public class TsaOrderController extends TsaBaseController {
 		mav.setViewName("order/OrderDetailPointHst");
 		return mav;
 	}
-	
+
 	/**
 	 * 상품권사용 내역 팝업 화면
-	 * 
+	 *
 	 * @param ordNo - 주문번호
 	 * @return ModelAndView
 	 * @author jsh77b
@@ -558,10 +558,10 @@ public class TsaOrderController extends TsaBaseController {
 		mav.setViewName("order/OrderDetailGiftcardHst");
 		return mav;
 	}
-	
+
 	/**
 	 * 다다익선적용 내역 팝업 화면
-	 * 
+	 *
 	 * @param ordNo - 주문번호
 	 * @return ModelAndView
 	 * @author jsh77b
@@ -581,7 +581,7 @@ public class TsaOrderController extends TsaBaseController {
 		mav.setViewName("order/OrderDetailTmtbHst");
 		return mav;
 	}
-	
+
 	/**
 	 * 주문상세상태를 변경
 	 *
@@ -596,9 +596,9 @@ public class TsaOrderController extends TsaBaseController {
 		int userNo = TsaSession.getInfo().getUserNo();
 		order.setUpdNo(userNo);
 		order.setRegNo(userNo);
-		
+
 		orderService.changedOrdDtlStat(order);
-		
+
 		return super.ok("성공");
 	}
 }

+ 1 - 0
style24.admin/src/main/java/com/style24/persistence/domain/Category.java

@@ -41,6 +41,7 @@ public class Category extends TscBaseDomain {
 	// 검색조건
 	private String siteCd;		// 사이트코드
 	private Integer selLvl;		// 선택레벨
+	private String callbackFn;	// 콜백함수
 
 	// 품목카테고리매핑관리 화면에서 사용
 	private String fullCateNo;	// FULL카테고리번호

+ 27 - 4
style24.admin/src/main/java/com/style24/persistence/domain/Coupon.java

@@ -18,7 +18,7 @@ public class Coupon extends TscBaseDomain {
     private String  siteCd;					// 사이트코드(공통코드G000)
     private String  afLinkCd;				// 제휴링크코드
     private String  usableCustGb;			// 사용가능고객구분(공통코드G100)
-    private String  useableCustGrade;		// 사용가능고객등급(공통코드G110)
+    private String  usableCustGrade;		// 사용가능고객등급(공통코드G110)
     private String  cpnType;				// 쿠폰유형(공통코드G230)
     private String  applyScope;				// 적용범위(A:전체, I:개별). "I:개별"이고 쿠폰유형이 "20:장바구니쿠폰" 외 이면 TB_COUPON_REFVAL 참조
     private String  dcWay;					// 할인방식(공통코드G240)
@@ -32,7 +32,7 @@ public class Coupon extends TscBaseDomain {
     private Integer availDays;				// 유효일수(기간/일수구분 "D:일수"일 때 사용됨)
     private Integer custPubLimitQty;		// 고객당발행제한수량(0은 무제한)
     private Integer totPubLimitQty;			// 총발행제한수량(0은 무제한)
-    private Integer onePubQTy;				// 1회발행수량(기본은 1)
+    private Integer onePubQty;				// 1회발행수량(기본은 1)
     private String  dnGb;					// 다운로드구분(공통코드G058)
     private String  downStdt;				// 다운로드시작일시
     private String  downEddt;				// 다운로드종료일시
@@ -46,14 +46,37 @@ public class Coupon extends TscBaseDomain {
     private Integer updNo;					// 수정자번호
     private String  updDt;					// 수정일시
     private String  firstYn;				// 첫구매여부 (Y:구매이력이없음 | N:구매이력있음)
-    private String  downYN;					// 다운로드가능여부(마이페이지, 상품상세) --> EP쿠폰, 난수쿠폰
+    private String  downYn;					// 다운로드가능여부(마이페이지, 상품상세) --> EP쿠폰, 난수쿠폰
     private String  custJoinStdt;			// 회원가입일자(FROM) 20200101 (신규회원여부의 판단을 가입일자로 설정함)
     private String  custJoinEddt;			// 회원가입일자(FROM) 20200101 (신규회원여부의 판단을 가입일자로 설정함)
     private String  buyStdt;				// 회원가입일자(FROM) 20200101 (구매기간일자(FROM) (해당기간에 구매이력이 없으면 다운로드 가능))
     private String  buyEddt;				// 구매기간일자(TO)
-
     private Integer issueCnt;				// 쿠폰발급개수
     private Integer useCnt;					// 쿠폰사용개수
+    private String  payType;                 // 결제수단
+    private String  custJoinYn;             // 신규회원여부
+
+    private String  supplyCompCd;            // 공급업체코드
+    private int     burdenRate;                 // 업체분담율
+    private String  delYn;                   // 삭제여부
+    private String  supplyCompNm;            // 공급업체명
+
+    private String  brandCd;                 // 브랜드코드
+    private String  brandEnm;                // 브랜드영문명
+
+    private String  goodsGb;                 // 상품구분
+    private String  goodsCd;                 // 상품코드
+    private String  goodsNm;                 // 상품명
+
+    private String  cateNm;                  // 카테고리코드명
+    private String  cateNo;                  // 카테고리코드
+
+    private String  supplyCompList;          // 공급업체 리스트
+    private String  brandList;               // 브랜드 리스트
+    private String  applyGoodsList;          // 적용상품 리스트
+    private String  exceptGoodsList;         // 제외상품 리스트
+    private String  burdenList;              // 업체 분담율 리스트
+    private String  cateList;                // 카테고리 리스트
 
     // Pagination
     private TsaPageRequest pageable;

+ 1 - 1
style24.admin/src/main/java/com/style24/persistence/domain/MoreBetterSection.java

@@ -31,6 +31,6 @@ public class MoreBetterSection extends TscBaseDomain {
 	private String  udtDt;			// 수정일시
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private String[] arrSecionSq;
+	private String[] arrSectionSq;
 
 }

+ 5 - 5
style24.admin/src/main/java/com/style24/persistence/domain/Order.java

@@ -329,7 +329,7 @@ public class Order extends TscBaseDomain {
 	private int rfPntAmt;
 	private int rfPrePntAmt;
 	private int rfGfcdUseAmt;
-	
+
 	private int pgCpnAmt;
 	private int npayPntAmt;
 	private String payGb;
@@ -344,20 +344,20 @@ public class Order extends TscBaseDomain {
 	private String vaNm;
 	private String vaDeadline;
 	private String telecom;
-	
+
 	private String accountNo;
 	private String accountNm;
 	private String bankCd;
 	private String bankNm;
-	
+
 	private int realDelvAmt;
 	private int delvCpnSq;
 	private int delvCpnDcAmt;
-	
+
 	private int chgQty;
 	private int rtnDelvFee;
 	private int excDelvFee;
-	
+
 	private String[] ordDtlStatArr;
 }
 

+ 3 - 3
style24.admin/src/main/java/com/style24/persistence/domain/OrderChange.java

@@ -49,11 +49,11 @@ public class OrderChange extends TscBaseDomain {
 	private String accountNm;
 	private String bankCd;
 	private String bankNm;
-	
+
 	private String allCanYn;
-	
+
 	private String isCustomer;
-	
+
 
 }
 

+ 224 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml

@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TsaCouponDao">
+	<!-- 쿠폰리스트 조회 -->
+	<select id="getCouponList" parameterType="Coupon" resultType="Coupon">
+		/* TsaCoupon.getCouponList */
+		SELECT T.*
+		, COUNT(CUST_CPN_SQ) AS ISSUE_CNT
+		, COUNT(USED_DT) AS USE_CNT
+		FROM (
+		SELECT SITE_CD
+		, CPN_ID
+		, CPN_NM
+		, USABLE_CUST_GB
+		, CPN_TYPE
+		, DC_WAY
+		, DC_PVAL
+		, DC_MVAL
+		, MAX_DC_AMT
+		, PD_GB
+		, AVAIL_STDT
+		, AVAIL_EDDT
+		, REG_NO
+		, REG_DT
+		FROM TB_COUPON
+		WHERE 1=1
+		<if test="siteCd != null and siteCd != ''">
+			AND SITE_CD = #{siteCd}
+		</if>
+		<if test="cpnId != null and cpnId != ''">
+			AND CPN_ID = #{cpnId}
+		</if>
+		<if test="cpnType != null and cpnType != ''">
+			AND CPN_TYPE = #{cpnType}
+		</if>
+		<if test="regNo != null and regNo != ''">
+			AND REG_NO = #{regNo}
+		</if>
+		<if test="dcWay != null and dcWay != ''">
+			AND DC_WAY = #{dcWay}
+		</if>
+		<if test="cpnNm != null and cpnNm != ''">
+			AND CPN_NM LIKE LOWER('%' || #{cpnNm} || '%')
+		</if>
+		<if test="pdGb != null and pdGb != ''">
+			AND PD_GB = #{pdGb}
+		</if>
+		<if test="availStdt != null and availStdt != '' and availEddt != null and availEddt != ''">
+			AND AVAIL_STDT >= DATE_FORMAT(#{availStdt} , '%Y-%m-%d')
+			AND AVAIL_EDDT <![CDATA[ <= ]]> DATE_FORMAT(#{availEddt} , '%Y-%m-%d')
+		</if>
+		) T
+		LEFT OUTER JOIN TB_CUST_COUPON CC
+		ON T.CPN_ID = CC.CPN_ID
+		GROUP BY  T.SITE_CD
+		, T.CPN_ID
+		, T.CPN_NM
+		, T.USABLE_CUST_GB
+		, T.CPN_TYPE
+		, T.DC_WAY
+		, T.DC_PVAL
+		, T.DC_MVAL
+		, T.MAX_DC_AMT
+		, T.PD_GB
+		, T.AVAIL_STDT
+		, T.AVAIL_EDDT
+		, T.REG_NO
+		, T.REG_DT
+		ORDER BY  T.REG_DT DESC
+	</select>
+
+	<!-- 쿠폰 리스트 카운트 조회-->
+	<select id="getCouponListCnt" parameterType="Coupon" resultType="int">
+		/* TsaCoupon.getCouponListCnt */
+		SELECT COUNT(1)
+		FROM TB_COUPON
+		WHERE 1=1
+		<if test="siteCd != null and siteCd != ''">
+			AND SITE_CD = #{siteCd}
+		</if>
+		<if test="cpnId != null and cpnId != ''">
+			AND CPN_ID = #{cpnId}
+		</if>
+		<if test="cpnType != null and cpnType != ''">
+			AND CPN_TYPE = #{cpnType}
+		</if>
+		<if test="regNo != null and regNo != ''">
+			AND REG_NO = #{regNo}
+		</if>
+		<if test="dcWay != null and dcWay != ''">
+			AND DC_WAY = #{dcWay}
+		</if>
+		<if test="cpnNm != null and cpnNm != ''">
+			AND CPN_NM LIKE LOWER('%' || #{cpnNm} || '%')
+		</if>
+		<if test="pdGb != null and pdGb != ''">
+			AND PD_GB = #{pdGb}
+		</if>
+		<if test="availStdt != null and availStdt != '' and availEddt != null and availEddt != ''">
+			AND AVAIL_STDT >= DATE_FORMAT(#{availStdt} , '%Y-%m-%d')
+			AND AVAIL_EDDT <![CDATA[ <= ]]> DATE_FORMAT(#{availEddt} , '%Y-%m-%d')
+		</if>
+	</select>
+
+	<!-- 쿠폰 등록 -->
+	<insert id="couponInsert" parameterType="Coupon">
+		/* TsaCoupon.couponInsert*/
+		INSERT INTO TB_COUPON (
+			CPN_ID
+		  , CPN_NM
+		  , SITE_CD
+		  <if test='afLinkCd != null and afLinkCd != ""'>
+		  , AF_LINK_CD
+	      </if>
+		  , USABLE_CUST_GB
+		  , USABLE_CUST_GRADE
+		  , CPN_TYPE
+		  , APPLY_SCOPE
+		  , DC_WAY
+		  , DC_PVAL
+		  , DC_MVAL
+		  , DC_AVAL
+		  , PD_GB
+		  <choose>
+			  <when test='pdGb != null and pdGb == "P"'>
+		  , AVAIL_STDT
+		  , AVAIL_EDDT
+			  </when>
+			  <when test='pdGb != null and pdGb == "D"'>
+		  , AVAIL_DAYS
+			  </when>
+		  </choose>
+		  , CUST_PUB_LIMIT_QTY
+		  , TOT_PUB_LIMIT_QTY
+		  , ONE_PUB_QTY
+		  , DN_GB
+		  <if test='dnGb != null and dnGb == "G058_20"'>
+		  , DOWN_STDT
+		  , DOWN_EDDT
+		  </if>
+		  , BUY_LIMIT_AMT
+		  , PLAN_SQ
+		  , REISSUANCE
+		  , CPN_STAT
+		  , END_ALIM_YN
+		  , REG_NO
+		  , REG_DT
+		  , UPD_NO
+		  , UPD_DT
+		  , FIRST_YN
+		  , DOWN_YN
+		  <if test='custJoinYn != null and custJoinYn == "Y"'>
+		  , CUST_JOIN_STDT
+		  , CUST_JOIN_EDDT
+		  </if>
+		  <if test='firstYn != null and firstYn == "Y"'>
+		  , BUY_STDT
+		  , BUY_EDDT
+		  </if>
+		  <if test='cpnType != null and cpnType == "G230_20"'>
+		  , PAY_TYPE
+		  </if>
+		  , CUST_JOIN_YN
+		) VALUES (
+		    #{cpnId}
+		  , #{cpnNm}
+		  , #{siteCd}
+		  <if test='afLinkCd != null and afLinkCd != ""'>
+		  , #{afLinkCd}
+		  </if>
+		  , #{usableCustGb}
+		  , #{usableCustGrade}
+		  , #{cpnType}
+		  , #{applyScope}
+		  , #{dcWay}
+		  , #{dcPval}
+		  , #{dcMval}
+		  , #{dcAval}
+		  , #{pdGb}
+		  <choose>
+			  <when test='pdGb != null and pdGb == "P"'>
+		  , DATE_FORMAT(#{availStdt} , '%Y-%m-%d %h:%i:%s')
+		  , DATE_FORMAT(#{availEddt} , '%Y-%m-%d %h:%i:%s')
+			  </when>
+			  <when test='pdGb != null and pdGb == "D"' >
+		  , #{availDays}
+			  </when>
+		  </choose>
+		  , #{custPubLimitQty}
+		  , #{totPubLimitQty}
+		  , #{onePubQty}
+		  , #{dnGb}
+		  <if test='dnGb != null and dnGb == "G058_20"'>
+		  , DATE_FORMAT(#{downStdt} , '%Y-%m-%d %h:%i:%s')
+		  , DATE_FORMAT(#{downEddt} , '%Y-%m-%d %h:%i:%s')
+		  </if>
+		  , #{buyLimitAmt}
+		  , #{planSq}
+		  , #{reissuance}
+		  , #{cpnStat}
+		  , #{endAlimYn}
+		  , #{regNo}
+		  , now()
+		  , #{updNo}
+		  , now()
+		  , #{firstYn}
+		  , #{downYn}
+		  <if test='custJoinYn != null and custJoinYn == "Y"'>
+		  , DATE_FORMAT(#{custJoinStdt} , '%Y-%m-%d %h:%i:%s')
+		  , DATE_FORMAT(#{custJoinEddt} , '%Y-%m-%d %h:%i:%s')
+		  </if>
+		  <if test='firstYn != null and firstYn == "Y"'>
+		  , DATE_FORMAT(#{buyStdt} , '%Y-%m-%d %h:%i:%s')
+		  , DATE_FORMAT(#{buyEddt} , '%Y-%m-%d %h:%i:%s')
+		  </if>
+		  <if test='cpnType != null and cpnType == "G230_20"'>
+		  , #{payType}
+		  </if>
+		  , #{custJoinYn}
+		)
+	</insert>
+
+
+</mapper>

+ 145 - 145
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaEnvset.xml

@@ -1,146 +1,146 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.style24.admin.biz.dao.TsaEnvsetDao">
-
-	<!-- 환경설정 생성 -->
-	<insert id="createEnvset" parameterType="Envset">
-		/* TsaEnvset.createEnvset */
-		INSERT INTO TB_ENVSET (
-		       ENVSET_SQ
-		     , SITE_CD
-		     , ENVSET_TYPE
-		     , ENVSET_NM
-		     , STR_SET_VAL1
-		     , STR_SET_VAL2
-		     , STR_SET_VAL3
-		     , STR_SET_VAL4
-		     , STR_SET_VAL5
-		     , STR_SET_VAL6
-		     , STR_SET_VAL7
-		     , STR_SET_VAL8
-		     , REG_NO
-		     , REG_DT
-		)
-		VALUES (
-		       NULL
-		     , #{siteCd}
-		     , #{envsetType}
-		     , #{envsetNm}
-		     , #{strSetVal1}
-		     , #{strSetVal2}
-		     , #{strSetVal3}
-		     , #{strSetVal4}
-		     , #{strSetVal5}
-		     , #{strSetVal6}
-		     , #{strSetVal7}
-		     , #{strSetVal8}
-		     , #{regNo}
-		     , NOW()
-		)
-	</insert>
-
-	<!-- 환경설정 목록 -->
-	<select id="getEnvsetList" parameterType="Envset" resultType="Envset">
-		/* TsaEnvset.getEnvsetList */
-		SELECT SITE_CD
-		     , ENVSET_TYPE
-		     , ENVSET_NM
-		     , STR_SET_VAL1
-		     , STR_SET_VAL2
-		     , STR_SET_VAL3
-		     , STR_SET_VAL4
-		     , STR_SET_VAL5
-		     , STR_SET_VAL6
-		     , STR_SET_VAL7
-		     , STR_SET_VAL8
-		     , FN_GET_USER_NM(REG_NO)             AS REG_NM
-		     , DATE_FORMAT(REG_DT,'%Y%m%d%H%i%S') AS REG_DT
-		FROM   TB_ENVSET
-		WHERE  SITE_CD = #{siteCd}
-		AND    ENVSET_TYPE = #{envsetType}
-		ORDER  BY ENVSET_SQ DESC
-	</select>
-	
-	<!-- 회원등급정책 생성 -->
-	<insert id="createCustomerGradePolicy" parameterType="CustGradePolicy">
-		/* TsaEnvset.createCustomerGradePolicy */
-		INSERT INTO TB_CUST_GRADE_POLICY (
-		       SITE_CD
-		     , GRADE_CD
-		     , ICON_NM
-		     , CAL_MONTHS
-		     , MIN_BUY_AMT
-		     , MIN_BUY_CNT
-		     , BUY_EXCEPT_AMT
-		     , GRADE_CPN_ID1
-		     , GRADE_CPN_ID2
-		     , GRADE_CPN_ID3
-		     , DISP_ORD
-		     , USE_YN
-		     , REG_NO
-		     , REG_DT
-		     , UPD_NO
-		     , UPD_DT
-		)
-		VALUES (
-		       #{siteCd}
-		     , #{gradeCd}
-		     , #{iconNm}
-		     , #{calMonths}
-		     , #{minBuyAmt}
-		     , #{minBuyCnt}
-		     , #{buyExceptAmt}
-		     , #{gradeCpnId1}
-		     , #{gradeCpnId2}
-		     , #{gradeCpnId3}
-		     , #{dispOrd}
-		     , #{useYn}
-		     , #{regNo}
-		     , NOW()
-		     , #{updNo}
-		     , NOW()
-		)
-		ON DUPLICATE KEY UPDATE
-		       ICON_NM = #{iconNm}
-		     , CAL_MONTHS = #{calMonths}
-		     , MIN_BUY_AMT = #{minBuyAmt}
-		     , MIN_BUY_CNT = #{minBuyCnt}
-		     , BUY_EXCEPT_AMT = #{buyExceptAmt}
-		     , GRADE_CPN_ID1 = #{gradeCpnId1}
-		     , GRADE_CPN_ID2 = #{gradeCpnId2}
-		     , GRADE_CPN_ID3 = #{gradeCpnId3}
-		     , DISP_ORD = #{dispOrd}
-		     , USE_YN = #{useYn}
-		     , UPD_NO = #{updNo}
-		     , UPD_DT = NOW()
-	</insert>
-	
-	<!-- 회원등급정책 목록 -->
-	<select id="getCustomerGradePolicyList" parameterType="CustGradePolicy" resultType="CustGradePolicy">
-		/* TsaEnvset.getCustomerGradePolicyList */
-		SELECT SITE_CD
-		     , GRADE_CD
-		     , ICON_NM
-		     , CAL_MONTHS
-		     , MIN_BUY_AMT
-		     , MIN_BUY_CNT
-		     , BUY_EXCEPT_AMT
-		     , GRADE_CPN_ID1
-		     , FN_GET_COUPON_NM(GRADE_CPN_ID1)    AS GRADE_CPN_NM1
-		     , GRADE_CPN_ID2
-		     , FN_GET_COUPON_NM(GRADE_CPN_ID2)    AS GRADE_CPN_NM2
-		     , GRADE_CPN_ID3
-		     , FN_GET_COUPON_NM(GRADE_CPN_ID3)    AS GRADE_CPN_NM3
-		     , DISP_ORD
-		     , USE_YN
-		     , FN_GET_USER_NM(UPD_NO)             AS UPD_NM
-		     , DATE_FORMAT(UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
-		FROM   TB_CUST_GRADE_POLICY A
-		WHERE  SITE_CD = #{siteCd}
-		<if test="gradeCd != null and gradeCd != ''">
-		AND    GRADE_CD = #{gradeCd}
-		</if>
-		ORDER  BY SITE_CD, GRADE_CD
-	</select>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TsaEnvsetDao">
+
+	<!-- 환경설정 생성 -->
+	<insert id="createEnvset" parameterType="Envset">
+		/* TsaEnvset.createEnvset */
+		INSERT INTO TB_ENVSET (
+								ENVSET_SQ
+							  , SITE_CD
+							  , ENVSET_TYPE
+							  , ENVSET_NM
+							  , STR_SET_VAL1
+							  , STR_SET_VAL2
+							  , STR_SET_VAL3
+							  , STR_SET_VAL4
+							  , STR_SET_VAL5
+							  , STR_SET_VAL6
+							  , STR_SET_VAL7
+							  , STR_SET_VAL8
+							  , REG_NO
+							  , REG_DT
+		)
+		VALUES (
+				   NULL
+			   , #{siteCd}
+			   , #{envsetType}
+			   , #{envsetNm}
+			   , #{strSetVal1}
+			   , #{strSetVal2}
+			   , #{strSetVal3}
+			   , #{strSetVal4}
+			   , #{strSetVal5}
+			   , #{strSetVal6}
+			   , #{strSetVal7}
+			   , #{strSetVal8}
+			   , #{regNo}
+			   , NOW()
+			   )
+	</insert>
+
+	<!-- 환경설정 목록 -->
+	<select id="getEnvsetList" parameterType="Envset" resultType="Envset">
+		/* TsaEnvset.getEnvsetList */
+		SELECT SITE_CD
+			 , ENVSET_TYPE
+			 , ENVSET_NM
+			 , STR_SET_VAL1
+			 , STR_SET_VAL2
+			 , STR_SET_VAL3
+			 , STR_SET_VAL4
+			 , STR_SET_VAL5
+			 , STR_SET_VAL6
+			 , STR_SET_VAL7
+			 , STR_SET_VAL8
+			 , FN_GET_USER_NM(REG_NO)             AS REG_NM
+			 , DATE_FORMAT(REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+		FROM   TB_ENVSET
+		WHERE  SITE_CD = #{siteCd}
+		  AND    ENVSET_TYPE = #{envsetType}
+		ORDER  BY ENVSET_SQ DESC
+	</select>
+
+	<!-- 회원등급정책 생성 -->
+	<insert id="createCustomerGradePolicy" parameterType="CustGradePolicy">
+		/* TsaEnvset.createCustomerGradePolicy */
+		INSERT INTO TB_CUST_GRADE_POLICY (
+										   SITE_CD
+										 , GRADE_CD
+										 , ICON_NM
+										 , CAL_MONTHS
+										 , MIN_BUY_AMT
+										 , MIN_BUY_CNT
+										 , BUY_EXCEPT_AMT
+										 , GRADE_CPN_ID1
+										 , GRADE_CPN_ID2
+										 , GRADE_CPN_ID3
+										 , DISP_ORD
+										 , USE_YN
+										 , REG_NO
+										 , REG_DT
+										 , UPD_NO
+										 , UPD_DT
+		)
+		VALUES (
+				   #{siteCd}
+			   , #{gradeCd}
+			   , #{iconNm}
+			   , #{calMonths}
+			   , #{minBuyAmt}
+			   , #{minBuyCnt}
+			   , #{buyExceptAmt}
+			   , #{gradeCpnId1}
+			   , #{gradeCpnId2}
+			   , #{gradeCpnId3}
+			   , #{dispOrd}
+			   , #{useYn}
+			   , #{regNo}
+			   , NOW()
+			   , #{updNo}
+			   , NOW()
+			   )
+			ON DUPLICATE KEY UPDATE
+								 ICON_NM = #{iconNm}
+								 , CAL_MONTHS = #{calMonths}
+								 , MIN_BUY_AMT = #{minBuyAmt}
+								 , MIN_BUY_CNT = #{minBuyCnt}
+								 , BUY_EXCEPT_AMT = #{buyExceptAmt}
+								 , GRADE_CPN_ID1 = #{gradeCpnId1}
+								 , GRADE_CPN_ID2 = #{gradeCpnId2}
+								 , GRADE_CPN_ID3 = #{gradeCpnId3}
+								 , DISP_ORD = #{dispOrd}
+								 , USE_YN = #{useYn}
+								 , UPD_NO = #{updNo}
+								 , UPD_DT = NOW()
+	</insert>
+
+	<!-- 회원등급정책 목록 -->
+	<select id="getCustomerGradePolicyList" parameterType="CustGradePolicy" resultType="CustGradePolicy">
+		/* TsaEnvset.getCustomerGradePolicyList */
+		SELECT SITE_CD
+		, GRADE_CD
+		, ICON_NM
+		, CAL_MONTHS
+		, MIN_BUY_AMT
+		, MIN_BUY_CNT
+		, BUY_EXCEPT_AMT
+		, GRADE_CPN_ID1
+		, FN_GET_COUPON_NM(GRADE_CPN_ID1)    AS GRADE_CPN_NM1
+		, GRADE_CPN_ID2
+		, FN_GET_COUPON_NM(GRADE_CPN_ID2)    AS GRADE_CPN_NM2
+		, GRADE_CPN_ID3
+		, FN_GET_COUPON_NM(GRADE_CPN_ID3)    AS GRADE_CPN_NM3
+		, DISP_ORD
+		, USE_YN
+		, FN_GET_USER_NM(UPD_NO)             AS UPD_NM
+		, DATE_FORMAT(UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
+		FROM   TB_CUST_GRADE_POLICY A
+		WHERE  SITE_CD = #{siteCd}
+		<if test="gradeCd != null and gradeCd != ''">
+			AND    GRADE_CD = #{gradeCd}
+		</if>
+		ORDER  BY SITE_CD, GRADE_CD
+	</select>
+
 </mapper>

+ 0 - 105
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaMarketing.xml

@@ -28,111 +28,6 @@
 		ORDER BY REG_DT DESC
 	</select>
 
-
-
 	<!-- // xodud1202 진행 -->
 
-	<!-- JSM 진행 -->
-	<!-- 쿠폰리스트 조회 -->
-	<select id="getCouponList" parameterType="Coupon" resultType="Coupon">
-		/* marketing.getCouponList */
-		SELECT T.*
-		, COUNT(CUST_CPN_SQ) AS ISSUE_CNT
-		, COUNT(USED_DT) AS USE_CNT
-		FROM (
-		SELECT SITE_CD
-		, CPN_ID
-		, CPN_NM
-		, USABLE_CUST_GB
-		, CPN_TYPE
-		, DC_WAY
-		, DC_PVAL
-		, DC_MVAL
-		, MAX_DC_AMT
-		, PD_GB
-		, AVAIL_STDT
-		, AVAIL_EDDT
-		, REG_NO
-		, REG_DT
-		FROM TB_COUPON
-		WHERE 1=1
-		<if test="siteCd != null and siteCd != ''">
-			AND SITE_CD = #{siteCd}
-		</if>
-		<if test="cpnId != null and cpnId != ''">
-			AND CPN_ID = #{cpnId}
-		</if>
-		<if test="cpnType != null and cpnType != ''">
-			AND CPN_TYPE = #{cpnType}
-		</if>
-		<if test="regNo != null and regNo != ''">
-			AND REG_NO = #{regNo}
-		</if>
-		<if test="dcWay != null and dcWay != ''">
-			AND DC_WAY = #{dcWay}
-		</if>
-		<if test="cpnNm != null and cpnNm != ''">
-			AND CPN_NM LIKE LOWER('%' || #{cpnNm} || '%')
-		</if>
-		<if test="pdGb != null and pdGb != ''">
-			AND PD_GB = #{pdGb}
-		</if>
-		<if test="availStdt != null and availStdt != '' and availEddt != null and availEddt != ''">
-			AND AVAIL_STDT >= DATE_FORMAT(#{availStdt} , '%Y-%m-%d')
-			AND AVAIL_EDDT <![CDATA[ <= ]]> DATE_FORMAT(#{availEddt} , '%Y-%m-%d')
-		</if>
-		) T
-		LEFT OUTER JOIN TB_CUST_COUPON CC
-		ON T.CPN_ID = CC.CPN_ID
-		GROUP BY  T.SITE_CD
-		, T.CPN_ID
-		, T.CPN_NM
-		, T.USABLE_CUST_GB
-		, T.CPN_TYPE
-		, T.DC_WAY
-		, T.DC_PVAL
-		, T.DC_MVAL
-		, T.MAX_DC_AMT
-		, T.PD_GB
-		, T.AVAIL_STDT
-		, T.AVAIL_EDDT
-		, T.REG_NO
-		, T.REG_DT
-		ORDER BY  T.REG_DT DESC
-	</select>
-
-	<!-- 쿠폰 리스트 카운트 조회-->
-	<select id="getCouponListCnt" parameterType="Coupon" resultType="int">
-		/* marketing.getCouponListCnt */
-		SELECT COUNT(1)
-		FROM TB_COUPON
-		WHERE 1=1
-		<if test="siteCd != null and siteCd != ''">
-			AND SITE_CD = #{siteCd}
-		</if>
-		<if test="cpnId != null and cpnId != ''">
-			AND CPN_ID = #{cpnId}
-		</if>
-		<if test="cpnType != null and cpnType != ''">
-			AND CPN_TYPE = #{cpnType}
-		</if>
-		<if test="regNo != null and regNo != ''">
-			AND REG_NO = #{regNo}
-		</if>
-		<if test="dcWay != null and dcWay != ''">
-			AND DC_WAY = #{dcWay}
-		</if>
-		<if test="cpnNm != null and cpnNm != ''">
-			AND CPN_NM LIKE LOWER('%' || #{cpnNm} || '%')
-		</if>
-		<if test="pdGb != null and pdGb != ''">
-			AND PD_GB = #{pdGb}
-		</if>
-		<if test="availStdt != null and availStdt != '' and availEddt != null and availEddt != ''">
-			AND AVAIL_STDT >= DATE_FORMAT(#{availStdt} , '%Y-%m-%d')
-			AND AVAIL_EDDT <![CDATA[ <= ]]> DATE_FORMAT(#{availEddt} , '%Y-%m-%d')
-		</if>
-	</select>
-	<!-- // JSM 진행 -->
-
 </mapper>

+ 4 - 4
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml

@@ -409,9 +409,9 @@
 		/* TsaMarketing.deleteTmtbSectionList */
 		DELETE FROM TB_TMTB_SECTION
 		WHERE TMTB_SQ =  #{tmtbSq}
-		<if test="arrSecionSq != null and arrSecionSq.length>0">
+		<if test="arrSectionSq != null and arrSectionSq.length>0">
 			AND TMTB_SECTION_SQ IN
-			<foreach collection="arrSecionSq" item="item" index="index"  open="(" close=")" separator=",">
+			<foreach collection="arrSectionSq" item="item" index="index"  open="(" close=")" separator=",">
 				#{item}
 			</foreach>
 		</if>
@@ -421,9 +421,9 @@
 		/* TsaMarketing.deleteTmtbValList */
 		DELETE FROM TB_TMTB_VAL
 		WHERE TMTB_SQ =  #{tmtbSq}
-		<if test="arrSecionSq != null and arrSecionSq.length>0">
+		<if test="arrSectionSq != null and arrSectionSq.length>0">
 			AND TMTB_SECTION_SQ IN
-			<foreach collection="arrSecionSq" item="item" index="index"  open="(" close=")" separator=",">
+			<foreach collection="arrSectionSq" item="item" index="index"  open="(" close=")" separator=",">
 				#{item}
 			</foreach>
 		</if>

+ 25 - 25
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -258,7 +258,7 @@
 				<if test='supplyCompCd != null and supplyCompCd != ""'>
 				AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
 				</if>
-				<if test="multiBrand != null and multiBrand != ''">
+				<if test="multiBrand != null and multiBrand != ''">
 		        AND    G1.BRAND_CD IN
 					<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
 		        		#{item}
@@ -341,7 +341,7 @@
 				AND    ODI.OPT_CD2 = #{sizeCd}
 				</if>
 				<if test='goodsNm != null and goodsNm != ""'>
-				AND    G2.GOODS_NM = #{goodsNm}
+				AND    G2.GOODS_NM = #{goodsNm}
 				</if>
 				<if test='recipNm != null and recipNm != ""'>
 				AND    DA.RECIP_NM = #{recipNm}
@@ -429,11 +429,11 @@
 		            ELSE P.CARD_NM
 		            END  CARD_NM
 		     , P.PG_TRADE_NO
-		     , DATE_FORMAT(P.PAY_DT,'%Y%m%d%H%i%S') AS PAY_DT  
-		     , P.PAY_STAT 
+		     , DATE_FORMAT(P.PAY_DT,'%Y%m%d%H%i%S') AS PAY_DT
+		     , P.PAY_STAT
 		     , FN_GET_CODE_NM('G016', P.PAY_STAT) AS PAY_STAT_NM
-		     , P.PAY_AMT 
-		     , DATE_FORMAT(P.VA_DEADLINE,'%Y%m%d%H%i%S') AS VA_DEADLINE 
+		     , P.PAY_AMT
+		     , DATE_FORMAT(P.VA_DEADLINE,'%Y%m%d%H%i%S') AS VA_DEADLINE
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
@@ -474,7 +474,7 @@
 			        THEN 0
 			        ELSE OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY
 			        END  ORD_REQ_CHG_QTY
-		     , ODI.OPT_ADD_PRICE 
+		     , ODI.OPT_ADD_PRICE
 		     , ODI.CPN1_DC_AMT
 		     , ODI.GOODS_CPN_DC_AMT
 		     , ODI.CART_CPN_DC_AMT
@@ -654,13 +654,13 @@
 		/* order.getDeliveryFeeList */
 		SELECT Z.*
 		FROM   (
-			SELECT DF.DELV_FEE_GB 
+			SELECT DF.DELV_FEE_GB
 			     , FN_GET_CODE_NM('G018', DF.DELV_FEE_GB) AS DELV_FEE_GB_NM
 			     , DF.DELV_FEE
-			     , DF.DELV_USAC_YN 
-			     , DATE_FORMAT(DF.DELV_USAC_DT,'%Y%m%d%H%i%S') AS DELV_USAC_DT 
-			     , DF.SUPPLY_COMP_CD 
-			     , DF.DELV_FEE_SQ 
+			     , DF.DELV_USAC_YN
+			     , DATE_FORMAT(DF.DELV_USAC_DT,'%Y%m%d%H%i%S') AS DELV_USAC_DT
+			     , DF.SUPPLY_COMP_CD
+			     , DF.DELV_FEE_SQ
 			FROM   TB_DELIVERY_FEE DF
 			WHERE  1=1
 			AND    DF.ORD_NO = #{ordNo}
@@ -686,7 +686,7 @@
 		     , OCD.CHG_STAT 
 		     , FN_GET_CODE_NM('G685', OCD.CHG_STAT) AS CHG_STAT_NM
 		     , OCD.CHG_QTY
-		     , DATE_FORMAT(OCD.REG_DT,'%Y%m%d%H%i%S') AS REG_DT 
+		     , DATE_FORMAT(OCD.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
 		     , OC.CHG_REASON 
 		     , CASE WHEN OC.CHG_GB = 'G680_20' THEN FN_GET_CODE_NM('G686', OC.CHG_REASON)
 		            WHEN OC.CHG_GB = 'G680_30' THEN FN_GET_CODE_NM('G688', OC.CHG_REASON)
@@ -712,7 +712,7 @@
 		AND    OD.ORD_NO = #{ordNo}
 		AND    OCD.DEL_YN = 'N'
 		ORDER  BY OC.REG_DT DESC
-		     , OCD.ORD_DTL_NO 
+		     , OCD.ORD_DTL_NO
 	</select>
 	
 	<!-- 주문상세 > 환불정보 -->
@@ -729,7 +729,7 @@
 		     , R.RA_NO
 		     , R.RA_NM 
 		     , R.REFUND_AMT 
-		     , DATE_FORMAT(P.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT 
+		     , DATE_FORMAT(P.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
 		     , (SELECT USER_NM
 		        FROM   TB_USER X
 		        WHERE  X.USER_NO = P.UPD_NO) AS UPD_NM
@@ -1514,18 +1514,18 @@
 		AND    ORD_DTL_NO = #{ordDtlNo}
 	</update>
 	
-	
-	
-	
-	
-	
-	
 
-	
 
-	
-	
-
+
+
+
+
+
+
+
+
+
+
 </mapper>
 
 

+ 193 - 0
style24.admin/src/main/webapp/WEB-INF/views/display/CategorySearchForm.html

@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CategorySearchForm.html
+ * @desc    : 카테고리 팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.11   xyzp1539    최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="900" id="popupCategory">
+	<div class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong>카테고리 목록</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupCategory');"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->
+		
+		<!-- 검색 조건 -->
+		<div class="panelContent">
+			<form id="searchCategoryListForm" name="searchCategoryListForm" action="#" th:action="@{'/display/category/list'}" onsubmit="$('#btnSearchCategoryList').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col width="10%"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>카테고리</th>
+						<td>
+							<input type="hidden" name="selLvl"/>
+							<select name="siteCd">
+								<!-- 								<option value="">[사이트]</option> -->
+								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							<select name="cateGb" id="selCate1" onchange="fnChangeSearchCondition($(this).val(), 1);">
+								<option value="">[카테고리구분]</option>
+								<option th:if="${cateGbList}" th:each="oneData, status : ${cateGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							<select name="cate1No" id="selCate2" onchange="fnChangeSearchCondition($(this).val(), 2);">
+								<option value="">[카테고리1]</option>
+							</select>
+							<select name="cate2No" id="selCate3" onchange="fnChangeSearchCondition($(this).val(), 3);">
+								<option value="">[카테고리2]</option>
+							</select>
+							<select name="cate3No" id="selCate4" onchange="fnChangeSearchCondition($(this).val(), 4);">
+								<option value="">[카테고리3]</option>
+							</select>
+							<select name="cate4No" id="selCate5" onchange="fnChangeSearchCondition($(this).val(), 5);">
+								<option value="">[카테고리4]</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearchCategoryList">조회</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- //검색 조건 -->
+		
+		<!-- 리스트 영역 -->
+		<div class="panelContent">
+			<div id="gridCategoryList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+		
+		<!-- 버튼 배치 영역 -->
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-info btn-lg" id="btnConfirmCategory">확인</button>
+			</li>
+		</ul>
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let siteList = gagajf.convertToArray([[${siteList}]]);
+	let cateGbList = gagajf.convertToArray([[${cateGbList}]]);
+	let formalGbList = gagajf.convertToArray([[${formalGbList}]]);
+	let conentsLocList = gagajf.convertToArray([[${conentsLocList}]]);
+
+	let columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{
+			headerName: "사이트", field: "siteCd", width: 150, cellClass: 'text-center',
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteList, params.value); }
+		},
+		{
+			headerName: "카테고리구분", field: "cateGb", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.lookupValue(cateGbList, params.value); }
+		},
+		{headerName: "카테고리번호", field: "cateNo", width: 150, cellClass: 'text-center'},
+		{headerName: "카테고리명", field: "cateNm", width: 150, cellClass: 'text-center'},
+		{
+			headerName: "정상이월구분", field: "formalGb", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.lookupValue(formalGbList, params.value); }
+		},
+		{headerName: "노출여부", field: "dispYn", width: 80, cellClass: 'text-center'},
+		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'}
+	];
+
+	let categoryGridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	categoryGridOptions.rowSelection = "multiple";
+
+	// 조회
+	$('#btnSearchCategoryList').on('click', function() {
+		// Fetch data
+		gagaAgGrid.fetch($('#searchCategoryListForm').prop('action'), categoryGridOptions, '#searchCategoryListForm');
+	});
+	
+	// 확인
+	$('#btnConfirmCategory').on('click', function() {
+		var selectedData = gagaAgGrid.selectedRowData(categoryGridOptions);
+		
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 카테고리가 없습니다.');
+			return false;
+		}
+		
+		var callbackFn = [[${params.callbackFn}]];
+
+		var jsonData = JSON.stringify(selectedData);
+
+		if (typeof callbackFn != 'undefined' && callbackFn) {
+			if (typeof callbackFn == 'function') {
+				callbackFn(jsonData);
+			} else {
+				if (callbackFn) {
+					if (callbackFn.indexOf("(") == -1) {
+						eval(callbackFn + "(" + jsonData + ")");
+					} else {
+						eval(callbackFn(jsonData));
+					}
+				}
+			}
+			uifnPopupClose('popupCategory');
+		}
+	});
+	
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridCategoryList', categoryGridOptions);
+	});
+
+	/**
+	 * 검색폼의 카테고리 선택 시
+	 */
+	var fnChangeSearchCondition = function(val, selLvl) {
+		if (gagajf.isNull(val)) {
+			if (selLvl > 1) {
+				selLvl = selLvl - 1;
+			} else {
+				selLvl = 1;
+			}
+		}
+		$('#searchForm input[name=selLvl]').val(selLvl);
+
+		// Fetch data
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', function(data) {
+			let selLvl = Number($('#searchForm input[name=selLvl]').val()) + 1;
+
+			for (let i = 2; i <= 5; i++) {
+				if (i >= selLvl) {
+					$('#selCate' + i).html('<option value="">[카테고리' + (i - 1) + ']</option>');
+				}
+			}
+
+			let tag = '';
+			for (let i = 0; i < data.length; i++) {
+				if (data[i].useYn == 'Y') {
+					tag += '<option value="' + data[i].cateNo + '">[' + data[i].cateNo + '] ' + data[i].cateNm + '</option>';
+				}
+			}
+
+			$("#selCate" + selLvl).append(tag);
+			$("#btnNew").click();
+		});
+	}
+/*]]>*/
+</script>
+
+</div>
+
+</html>

+ 296 - 295
style24.admin/src/main/webapp/WEB-INF/views/envset/CustomerGradePolicyForm.html

@@ -1,296 +1,297 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-	<!--
- *******************************************************************************
- * @source  : CustomerGradePolicyForm.html
- * @desc    : 회원등급정책관리 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.01.06   gagamel     최초 작성
- *******************************************************************************
- -->
-	<div id="main">
-		<!-- 메인타이틀 영역 -->
-		<div class="main-title">
-		</div>
-		<!-- //메인타이틀 영역 -->
-		
-		<!-- 메뉴 설명 -->
-		<div class="infoBox menu-desc">
-		</div>
-		<!-- //메뉴 설명 -->
-		
-		<!-- 검색조건 영역 -->
-		<div class="panelStyle">
-			<form id="searchForm" name="searchForm" action="#" th:action="@{'/envset/customer/grade/policy/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
-				<table class="frmStyle" aria-describedby="검색조건">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col/>
-					</colgroup>
-					<tr>
-						<th>사이트</th>
-						<td>
-							<select name="siteCd">
-								<option th:if="${siteList}" th:each="oneData, status : ${siteList}"th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-					</tr>
-				</table>
-				
-				<ul class="panelBar">
-					<li class="center">
-						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
-					</li>
-				</ul>
-			</form>
-		</div>
-		<!-- 검색조건 영역 -->
-		
-		<!-- 리스트 영역 -->
-		<div class="panelStyle">
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham lh70"></div>
-		</div>
-		
-		<!-- 등록/수정 -->
-		<div class="panelStyle">
-			<form id="detailForm" name="detailForm" action="#" th:action="@{'/envset/customer/grade/policy/create'}">
-				<table class="frmStyle" aria-describedby="등록/상세폼">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col/>
-					</colgroup>
-					<tr>
-						<th>사이트<em class="required" title="필수"></em></th>
-						<td>
-							<select name="siteCd" required="required" data-valid-name="사이트">
-								<option value="">[선택]</option>
-								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>회원등급<em class="required" title="필수"></em></th>
-						<td>
-							<select name="gradeCd" required="required" data-valid-name="회원등급">
-								<option value="">[선택]</option>
-								<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th rowspan="2">아이콘명<em class="required" title="필수"></em></th>
-						<td colspan="3" rowspan="2">
-							<span class="badgeLevel black marR10" id="iconPrefix"></span>
-							<input type="text" name="iconNm" class="w50" maxlength="20" required="required" data-valid-type="alphaNumeric" data-valid-name="아이콘명" onkeyup="$(this).val($(this).val().toUpperCase());"/>
-							<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>프론트 표기 접두사</span>
-						</td>
-					</tr>
-					<tr>
-						<th>등급산정기간<em class="required" title="필수"></em></th>
-						<td colspan="5">
-							전월 기준 최근 <input type="text" name="calMonths" class="w50 aR" maxlength="2" value="3" required="required" data-valid-type="integer" data-valid-name="등급산정기간"/> 개월
-						</td>
-					</tr>
-					<tr>
-						<th>승급조건<em class="required" title="필수"></em></th>
-						<td colspan="7">
-							구매금액(<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>쿠폰할인, 포인트할인, 배송비, 취소/반품내역을 반영한 실결제금액</span>)
-							<input type="text" name="minBuyAmt" class="w100 aR" maxlength="10" value="0" required="required" data-valid-type="integer" data-valid-name="구매금액"/>원 <span class="cRed">이상</span>
-							<span class="infoTxt cRed"><strong>또는</strong></span>
-							주문당 <input type="text" name="buyExceptAmt" class="w100 aR" maxlength="10" value="0" required="required" data-valid-type="integer" data-valid-name="구매건수제외조건"/>원 <span class="cRed">미만 구매건을 제외</span>한 구매건수(<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>취소를 반영한 주문건수</span>)
-							<input type="text" name="minBuyCnt" class="w50 aR" maxlength="2" value="0" required="required" data-valid-type="integer" data-valid-name="구매건수"/>건 <span class="cRed">이상</span>
-						</td>
-					</tr>
-					<tr>
-						<th>혜택쿠폰1</th>
-						<td colspan="3">
-							<input type="text" class="w300" name="gradeCpnNm1" onkeypress="if (window.event.keyCode == 13) { fnOpenCouponRetrievePopup('input[name=gradeCpnId1]', 'input[name=gradeCpnNm1]'); }"/>
-							<button type="button" class="btn icn" onclick="fnOpenCouponRetrievePopup('input[name=gradeCpnId1]', 'input[name=gradeCpnNm1]');"><i class="fa fa-search cpn" aria-hidden="true"></i></button>
-							<input name="gradeCpnId1" type="text" class="w100" maxlength="20" readonly="readonly"/>
-							<button type="button" class="btn icn" onclick="$('input[name=gradeCpnId1], input[name=gradeCpnNm1]').val('');"><i class="fa fa-eraser" aria-hidden="true"></i></button>
-						</td>
-						<th>혜택쿠폰2</th>
-						<td colspan="3">
-							<input type="text" class="w300" name="gradeCpnNm2" onkeypress="if (window.event.keyCode == 13) { fnOpenCouponRetrievePopup('input[name=gradeCpnId2]', 'input[name=gradeCpnNm2]'); }"/>
-							<button type="button" class="btn icn" onclick="fnOpenCouponRetrievePopup('input[name=gradeCpnId2]', 'input[name=gradeCpnNm2]');"><i class="fa fa-search cpn" aria-hidden="true"></i></button>
-							<input name="gradeCpnId2" type="text" class="w100" maxlength="20"  readonly="readonly"/>
-							<button type="button" class="btn icn" onclick="$('input[name=gradeCpnId2], input[name=gradeCpnNm2]').val('');"><i class="fa fa-eraser" aria-hidden="true"></i></button>
-						</td>
-					</tr>
-					<tr>
-						<th>혜택쿠폰3</th>
-						<td colspan="3">
-							<input type="text" class="w300" name="gradeCpnNm3" onkeypress="if (window.event.keyCode == 13) { fnOpenCouponRetrievePopup('input[name=gradeCpnId3]', 'input[name=gradeCpnNm3]'); }"/>
-							<button type="button" class="btn icn" onclick="fnOpenCouponRetrievePopup('input[name=gradeCpnId3]', 'input[name=gradeCpnNm3]');"><i class="fa fa-search cpn" aria-hidden="true"></i></button>
-							<input name="gradeCpnId3" type="text" class="w100" maxlength="20"  readonly="readonly"/>
-							<button type="button" class="btn icn" onclick="$('input[name=gradeCpnId3], input[name=gradeCpnNm3]').val('');"><i class="fa fa-eraser" aria-hidden="true"></i></button>
-						</td>
-						<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
-						<td>
-							<input type="text" class="w100 aR" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
-						</td>
-						<th>사용여부</th>
-						<td>
-							<input type="hidden" name="useYn" value="Y"/>
-							<label class="chkBox checked"><input type="checkbox" name="chkUseYn" checked="checked"/>사용</label>
-						</td>
-					</tr>
-				</table>
-			</form>
-			
-			<!-- 버튼 배치 영역 -->
-			<ul class="panelBar">
-				<li class="right">
-					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
-					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
-				</li>
-			</ul>
-			<!-- //버튼 배치 영역 -->
-		</div>
-		<!-- 등록/수정 -->
-	</div>
-
-<script th:inline="javascript">
-/*<![CDATA[*/
-	var siteList = gagajf.convertToArray([[${siteList}]]);
-	var custGradeList = gagajf.convertToArray([[${custGradeList}]]);
-
-	var columnDefs = [
-		{
-			headerName: "사이트", field: "siteCd", width: 150, cellClass: 'text-center',
-			cellRenderer: function (params) { return gagaAgGrid.lookupValue(siteList, params.value); }
-		},
-		{
-			headerName: "회원등급", field: "gradeCd", width: 150, cellClass: 'text-center',
-			cellRenderer: function (params) { return '<a href="javascript:void(0);">' + gagaAgGrid.lookupValue(custGradeList, params.value) + '</a>'; }
-		},
-		{
-			headerName: "아이콘명", field: "iconNm", width: 100, cellClass: 'text-center',
-			cellRenderer: function (params) { return '<span class="badgeLevel black">' + params.value + '</span>' }
-		},
-		{
-			headerName: "등급산정기간", field: "calMonths", width: 180, cellClass: 'text-center',
-			cellRenderer: function(params) { return '전월 기준 최근 ' + gagaAgGrid.toAddComma(params.value) + '개월'; }
-		},
-		{
-			headerName: "승급조건", field: "upgradeCondition", width: 500, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				let condition = '';
-				if (params.data.minBuyAmt > 0) condition += '구매금액 <span class="cRed">' + gagaAgGrid.toAddComma(params.data.minBuyAmt) + '</span>원 이상';
-				if (params.data.minBuyAmt > 0) condition += ' 또는 ';
-				condition += '구매건수 <span class="cRed">' + gagaAgGrid.toAddComma(params.data.minBuyCnt) + '</span>건 이상';
-				if (params.data.minBuyCnt == 0) condition += ' (즉, 미구매)';
-				if (params.data.buyExceptAmt > 0) condition += ' (<span class="cRed">' + gagaAgGrid.toAddComma(params.data.buyExceptAmt) + '</span>원 미만 구매건 제외)';
-				return condition;
-			}
-		},
-		{headerName: "구매금액", field: "minBuyAmt", width: 150, cellClass: 'text-right', hide: true},
-		{headerName: "구매건수", field: "minBuyCnt", width: 150, cellClass: 'text-right', hide: true},
-		{headerName: "구매건수제외조건", field: "buyExceptAmt", width: 150, cellClass: 'text-right', hide: true},
-		{headerName: "등급쿠폰ID1", field: "gradeCpnId1", width: 120, cellClass: 'text-center', hide: true},
-		{headerName: "등급쿠폰명1", field: "gradeCpnNm1", width: 200, hide: true},
-		{headerName: "등급쿠폰ID2", field: "gradeCpnId2", width: 120, cellClass: 'text-center', hide: true},
-		{headerName: "등급쿠폰명2", field: "gradeCpnNm2", width: 200, hide: true},
-		{headerName: "등급쿠폰ID3", field: "gradeCpnId3", width: 120, cellClass: 'text-center', hide: true},
-		{headerName: "등급쿠폰명3", field: "gradeCpnNm3", width: 200, hide: true},
-		{headerName: "표시순서", field: "dispOrd", width: 80, cellClass: 'text-center'},
-		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'},
-		{headerName: "수정자", field: "updNm", width: 80, cellClass: 'text-center'},
-		{
-			headerName: '수정일시', field: 'updDt', width: 150, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
-			}
-		}
-	];
-
-	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
-
-	// 이미지가 있을 경우 높이 지정
-	gridOptions.rowHeight = 70;
-	
-	// 셀 클릭 이벤트
-	gridOptions.onCellClicked = function(event) {
-		if (event.colDef.field != 'gradeCd')
-			return;
-		
-		$('#detailForm select[name=siteCd]').val(event.data.siteCd);
-		$('#detailForm select[name=gradeCd]').val(event.data.gradeCd);
-		$('#detailForm input[name=iconNm]').val(event.data.iconNm);
-		$('#iconPrefix').html(event.data.iconNm);
-		$('#detailForm input[name=calMonths]').val(event.data.calMonths);
-		$('#detailForm input[name=minBuyAmt]').val(event.data.minBuyAmt.addComma());
-		$('#detailForm input[name=minBuyCnt]').val(event.data.minBuyCnt);
-		$('#detailForm input[name=buyExceptAmt]').val(event.data.buyExceptAmt.addComma());
-		$('#detailForm input[name=gradeCpnId1]').val(event.data.gradeCpnId1);
-		$('#detailForm input[name=gradeCpnNm1]').val(event.data.gradeCpnNm1);
-		$('#detailForm input[name=gradeCpnId2]').val(event.data.gradeCpnId2);
-		$('#detailForm input[name=gradeCpnNm2]').val(event.data.gradeCpnNm2);
-		$('#detailForm input[name=gradeCpnId3]').val(event.data.gradeCpnId3);
-		$('#detailForm input[name=gradeCpnNm3]').val(event.data.gradeCpnNm3);
-		$('#detailForm input[name=dispOrd]').val(event.data.dispOrd);
-		
-		if (event.data.useYn == 'Y') {
-			$("#detailForm input:checkbox[name=chkUseYn]").prop('checked', true);
-			$("#detailForm input:checkbox[name=chkUseYn]").parent().addClass('checked');
-		} else {
-			$("#detailForm input:checkbox[name=chkUseYn]").prop('checked', false);
-			$("#detailForm input:checkbox[name=chkUseYn]").parent().removeClass('checked');
-		}
-	}
-
-	// 검색
-	$('#btnSearch').on('click', function() {
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
-	});
-	
-	// 쿠폰조회 팝업
-	var fnOpenCouponRetrievePopup = function(strReturnCode, strReturnName) {
-		var oParam = new Object();
-		oParam.returnCode = strReturnCode;
-		oParam.returnName = strReturnName;
-		cfnOpenCouponRetrievePopup($(strReturnName).val(), oParam);
-	}
-	
-	// 신규
-	$('#btnNew').on('click', function() {
-		$('#detailForm')[0].reset();
-		$('#iconPrefix').html('');
-		$('#detailForm select[name=siteCd]').focus();
-	});
-
-	// 저장
-	$("#btnSave").on("click", function() {
-		// 필수값 체크
-		if (!gagajf.validation('#detailForm'))
-			return false;
-
-		mcxDialog.confirm('저장하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				$('#detailForm input[name=useYn]').val($('#detailForm input:checkbox[name=chkUseYn]').is(':checked') ? 'Y' : 'N');
-				
-				gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
-					$('btnNew').click();
-					$('#btnSearch').trigger('click');
-				});
-			}
-		});
-	});
-
-	$(document).ready(function() {
-		gagaAgGrid.createGrid('gridList', gridOptions);
-	});
-/*]]>*/
-</script>
-
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+	<!--
+ *******************************************************************************
+ * @source  : CustomerGradePolicyForm.html
+ * @desc    : 회원등급정책관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.06   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/envset/customer/grade/policy/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>사이트</th>
+						<td>
+							<select name="siteCd">
+								<option th:if="${siteList}" th:each="oneData, status : ${siteList}"th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+		
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham lh70"></div>
+		</div>
+		
+		<!-- 등록/수정 -->
+		<div class="panelStyle">
+			<form id="detailForm" name="detailForm" action="#" th:action="@{'/envset/customer/grade/policy/create'}">
+				<table class="frmStyle" aria-describedby="등록/상세폼">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>사이트<em class="required" title="필수"></em></th>
+						<td>
+							<select name="siteCd" required="required" data-valid-name="사이트">
+								<option value="">[선택]</option>
+								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th>회원등급<em class="required" title="필수"></em></th>
+						<td>
+							<select name="gradeCd" required="required" data-valid-name="회원등급">
+								<option value="">[선택]</option>
+								<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th rowspan="2">아이콘명<em class="required" title="필수"></em></th>
+						<td colspan="3" rowspan="2">
+							<span class="badgeLevel black marR10" id="iconPrefix"></span>
+							<input type="text" name="iconNm" class="w50" maxlength="20" required="required" data-valid-type="alphaNumeric" data-valid-name="아이콘명" onkeyup="$(this).val($(this).val().toUpperCase());"/>
+							<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>프론트 표기 접두사</span>
+						</td>
+					</tr>
+					<tr>
+						<th>등급산정기간<em class="required" title="필수"></em></th>
+						<td colspan="5">
+							전월 기준 최근 <input type="text" name="calMonths" class="w50 aR" maxlength="2" value="3" required="required" data-valid-type="integer" data-valid-name="등급산정기간"/> 개월
+						</td>
+					</tr>
+					<tr>
+						<th>승급조건<em class="required" title="필수"></em></th>
+						<td colspan="7">
+							구매금액(<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>쿠폰할인, 포인트할인, 배송비, 취소/반품내역을 반영한 실결제금액</span>)
+							<input type="text" name="minBuyAmt" class="w100 aR" maxlength="10" value="0" required="required" data-valid-type="integer" data-valid-name="구매금액"/>원 <span class="cRed">이상</span>
+							<span class="infoTxt cRed"><strong>또는</strong></span>
+							주문당 <input type="text" name="buyExceptAmt" class="w100 aR" maxlength="10" value="0" required="required" data-valid-type="integer" data-valid-name="구매건수제외조건"/>원 <span class="cRed">미만 구매건을 제외</span>한 구매건수(<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>취소를 반영한 주문건수</span>)
+							<input type="text" name="minBuyCnt" class="w50 aR" maxlength="2" value="0" required="required" data-valid-type="integer" data-valid-name="구매건수"/>건 <span class="cRed">이상</span>
+						</td>
+					</tr>
+					<tr>
+						<th>혜택쿠폰1</th>
+						<td colspan="3">
+							<input type="text" class="w300" name="gradeCpnNm1" onkeypress="if (window.event.keyCode == 13) { fnOpenCouponRetrievePopup('input[name=gradeCpnId1]', 'input[name=gradeCpnNm1]'); }"/>
+							<button type="button" class="btn icn" onclick="fnOpenCouponRetrievePopup('input[name=gradeCpnId1]', 'input[name=gradeCpnNm1]');"><i class="fa fa-search cpn" aria-hidden="true"></i></button>
+							<input name="gradeCpnId1" type="text" class="w100" maxlength="20" readonly="readonly"/>
+							<button type="button" class="btn icn" onclick="$('input[name=gradeCpnId1], input[name=gradeCpnNm1]').val('');"><i class="fa fa-eraser" aria-hidden="true"></i></button>
+						</td>
+						<th>혜택쿠폰2</th>
+						<td colspan="3">
+							<input type="text" class="w300" name="gradeCpnNm2" onkeypress="if (window.event.keyCode == 13) { fnOpenCouponRetrievePopup('input[name=gradeCpnId2]', 'input[name=gradeCpnNm2]'); }"/>
+							<button type="button" class="btn icn" onclick="fnOpenCouponRetrievePopup('input[name=gradeCpnId2]', 'input[name=gradeCpnNm2]');"><i class="fa fa-search cpn" aria-hidden="true"></i></button>
+							<input name="gradeCpnId2" type="text" class="w100" maxlength="20"  readonly="readonly"/>
+							<button type="button" class="btn icn" onclick="$('input[name=gradeCpnId2], input[name=gradeCpnNm2]').val('');"><i class="fa fa-eraser" aria-hidden="true"></i></button>
+						</td>
+					</tr>
+					<tr>
+						<th>혜택쿠폰3</th>
+						<td colspan="3">
+							<input type="text" class="w300" name="gradeCpnNm3" onkeypress="if (window.event.keyCode == 13) { fnOpenCouponRetrievePopup('input[name=gradeCpnId3]', 'input[name=gradeCpnNm3]'); }"/>
+							<button type="button" class="btn icn" onclick="fnOpenCouponRetrievePopup('input[name=gradeCpnId3]', 'input[name=gradeCpnNm3]');"><i class="fa fa-search cpn" aria-hidden="true"></i></button>
+							<input name="gradeCpnId3" type="text" class="w100" maxlength="20"  readonly="readonly"/>
+							<button type="button" class="btn icn" onclick="$('input[name=gradeCpnId3], input[name=gradeCpnNm3]').val('');"><i class="fa fa-eraser" aria-hidden="true"></i></button>
+						</td>
+						<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td>
+							<input type="text" class="w100 aR" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
+						</td>
+						<th>사용여부</th>
+						<td>
+							<input type="hidden" name="useYn" value="Y"/>
+							<label class="chkBox checked"><input type="checkbox" name="chkUseYn" checked="checked"/>사용</label>
+						</td>
+					</tr>
+				</table>
+			</form>
+			
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
+					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+		</div>
+		<!-- 등록/수정 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var siteList = gagajf.convertToArray([[${siteList}]]);
+	var custGradeList = gagajf.convertToArray([[${custGradeList}]]);
+
+	var columnDefs = [
+		{
+			headerName: "사이트", field: "siteCd", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.lookupValue(siteList, params.value); }
+		},
+		{
+			headerName: "회원등급", field: "gradeCd", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) { return '<a href="javascript:void(0);">' + gagaAgGrid.lookupValue(custGradeList, params.value) + '</a>'; }
+		},
+		{
+			headerName: "아이콘명", field: "iconNm", width: 100, cellClass: 'text-center',
+			cellRenderer: function (params) { return '<span class="badgeLevel black">' + params.value + '</span>' }
+		},
+		{
+			headerName: "등급산정기간", field: "calMonths", width: 180, cellClass: 'text-center',
+			cellRenderer: function(params) { return '전월 기준 최근 ' + gagaAgGrid.toAddComma(params.value) + '개월'; }
+		},
+		{
+			headerName: "승급조건", field: "upgradeCondition", width: 500, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				let condition = '';
+				if (params.data.minBuyAmt > 0) condition += '구매금액 <span class="cRed">' + gagaAgGrid.toAddComma(params.data.minBuyAmt) + '</span>원 이상';
+				if (params.data.minBuyAmt > 0) condition += ' 또는 ';
+				condition += '구매건수 <span class="cRed">' + gagaAgGrid.toAddComma(params.data.minBuyCnt) + '</span>건 이상';
+				if (params.data.minBuyCnt == 0) condition += ' (즉, 미구매)';
+				if (params.data.buyExceptAmt > 0) condition += ' (<span class="cRed">' + gagaAgGrid.toAddComma(params.data.buyExceptAmt) + '</span>원 미만 구매건 제외)';
+				return condition;
+			}
+		},
+		{headerName: "구매금액", field: "minBuyAmt", width: 150, cellClass: 'text-right', hide: true},
+		{headerName: "구매건수", field: "minBuyCnt", width: 150, cellClass: 'text-right', hide: true},
+		{headerName: "구매건수제외조건", field: "buyExceptAmt", width: 150, cellClass: 'text-right', hide: true},
+		{headerName: "등급쿠폰ID1", field: "gradeCpnId1", width: 120, cellClass: 'text-center', hide: true},
+		{headerName: "등급쿠폰명1", field: "gradeCpnNm1", width: 200, hide: true},
+		{headerName: "등급쿠폰ID2", field: "gradeCpnId2", width: 120, cellClass: 'text-center', hide: true},
+		{headerName: "등급쿠폰명2", field: "gradeCpnNm2", width: 200, hide: true},
+		{headerName: "등급쿠폰ID3", field: "gradeCpnId3", width: 120, cellClass: 'text-center', hide: true},
+		{headerName: "등급쿠폰명3", field: "gradeCpnNm3", width: 200, hide: true},
+		{headerName: "표시순서", field: "dispOrd", width: 80, cellClass: 'text-center'},
+		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'},
+		{headerName: "수정자", field: "updNm", width: 80, cellClass: 'text-center'},
+		{
+			headerName: '수정일시', field: 'updDt', width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		}
+	];
+
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 이미지가 있을 경우 높이 지정
+	gridOptions.rowHeight = 70;
+	
+	// 셀 클릭 이벤트
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field != 'gradeCd')
+			return;
+		
+		$('#detailForm select[name=siteCd]').val(event.data.siteCd);
+		$('#detailForm select[name=gradeCd]').val(event.data.gradeCd);
+		$('#detailForm input[name=iconNm]').val(event.data.iconNm);
+		$('#iconPrefix').html(event.data.iconNm);
+		$('#detailForm input[name=calMonths]').val(event.data.calMonths);
+		$('#detailForm input[name=minBuyAmt]').val(event.data.minBuyAmt.addComma());
+		$('#detailForm input[name=minBuyCnt]').val(event.data.minBuyCnt);
+		$('#detailForm input[name=buyExceptAmt]').val(event.data.buyExceptAmt.addComma());
+		$('#detailForm input[name=gradeCpnId1]').val(event.data.gradeCpnId1);
+		$('#detailForm input[name=gradeCpnNm1]').val(event.data.gradeCpnNm1);
+		$('#detailForm input[name=gradeCpnId2]').val(event.data.gradeCpnId2);
+		$('#detailForm input[name=gradeCpnNm2]').val(event.data.gradeCpnNm2);
+		$('#detailForm input[name=gradeCpnId3]').val(event.data.gradeCpnId3);
+		$('#detailForm input[name=gradeCpnNm3]').val(event.data.gradeCpnNm3);
+		$('#detailForm input[name=dispOrd]').val(event.data.dispOrd);
+		
+		if (event.data.useYn == 'Y') {
+			$("#detailForm input:checkbox[name=chkUseYn]").prop('checked', true);
+			$("#detailForm input:checkbox[name=chkUseYn]").parent().addClass('checked');
+		} else {
+			$("#detailForm input:checkbox[name=chkUseYn]").prop('checked', false);
+			$("#detailForm input:checkbox[name=chkUseYn]").parent().removeClass('checked');
+		}
+	}
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 쿠폰조회 팝업
+	var fnOpenCouponRetrievePopup = function(strReturnCode, strReturnName) {
+		var oParam = new Object();
+		oParam.returnCode = strReturnCode;
+		oParam.returnName = strReturnName;
+		cfnOpenCouponRetrievePopup($(strReturnName).val(), oParam);
+	}
+	
+	// 신규
+	$('#btnNew').on('click', function() {
+		$('#detailForm')[0].reset();
+		$('#iconPrefix').html('');
+		$('#detailForm select[name=siteCd]').focus();
+	});
+
+	// 저장
+	$("#btnSave").on("click", function() {
+		// 필수값 체크
+		if (!gagajf.validation('#detailForm'))
+			return false;
+
+		mcxDialog.confirm('저장하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				$('#detailForm input[name=useYn]').val($('#detailForm input:checkbox[name=chkUseYn]').is(':checked') ? 'Y' : 'N');
+				
+				gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
+					$('btnNew').click();
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+
+	$(document).ready(function() {
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+>>>>>>> develop
 </html>

+ 908 - 188
style24.admin/src/main/webapp/WEB-INF/views/marketing/CouponCreatePopupForm.html

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
+	  xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
  * @source  : CouponCreatePopupForm.html
@@ -13,208 +13,928 @@
  * ===  ===========  ==========  =============================================
  * 1.0  2020.12.23   xyzp1539       최초 작성
  *******************************************************************************
- -->	
-	<div class="modalPopup"  data-width="1250" data-height="750">
-		<div class="panelStyle">
-			<div class="panelTitle">
-				<h2>쿠폰등록</h2>
-				<button type="button" class="close" onclick="uifnPopupClose('CouponCreatePopup')"><i class="fa fa-times"></i></button>
-			</div>
-			<form id="couponCreateForm" name="couponCreateForm">
-			<div class="panelContent">
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:10%">
-						<col style="width:40%;">
-						<col style="width:10%">
-						<col style="width:40%;">
-					</colgroup>
-					<tr>
-						<th>쿠폰번호<em class="required" title="필수"></em></th>
-						<td colspan="5">
-							<input type="hidden" name="copyCpnId" maxlength="50" value="">
-							<input type="hidden" name="mode" maxlength="50" value="">
-							<input type="text" name="cpnId" maxlength="50" value="" style="width:70%;" disabled="" placeholder="자동생성">
-							<label class="chkBox">
-								<input type="checkbox" name="cpnCreateType" onchange="fnCreateCpnNoOnChange(this);" value="true" class="type-check" checked="">쿠폰번호 자동생성
-							</label>
-						</td>
-					</tr>
-					<tr>
-						<th>쿠폰명<em class="required" title="필수"></em></th>
-						<td colspan="5">
-							<input type="text" name="cpnNm" id="cpnNm" style="width: 70%;">
-						</td>
-					</tr>
-					<tr>
-						<th>쿠폰유형<em class="required" title="필수"></em></th>
-						<td colspan="5">
-							<label class="rdoBtn" th:if="${cpnTypeList}" th:each="oneData, status : ${cpnTypeList}"> <input type="radio" name="cpnType"  th:text="${oneData.cdNm}" th:value="${oneData.cd}"/></label>
-						</td>
-					</tr>
-					<tr>
-						<th>사용가능고객구분<em class="required" title="필수"></em></th>
-						<td>
-							<select name="usableCustGb" id="usableCustGb">
-								<option th:if="${usableCustGbList}" th:each="oneData , status : ${usableCustGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>사이트<em class="required" title="필수"></em></th>
-						<td>
-							<select name="siteCd" id="siteCd">
-								<option th:if="${siteCdList}" th:each="oneData , status : ${siteCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>사용고객등급구분<em class="required" title="필수"></em></th>
-						<td>
-							<select name="usableCustGradeList" id="usableCustGradeList">
-								<option value="">[전체]</option>
-								<option th:if="${usableCustGradeList}" th:each="oneData , status : ${usableCustGradeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>할인방식<em class="required" title="필수"></em></th>
-						<td>
-							<label class="rdoBtn" th:if="${dcWayList}" th:each="oneData, status : ${dcWayList}"> <input type="radio" name="dcWay"  th:text="${oneData.cdNm}" th:value="${oneData.cd}"/></label>
-						</td>
-						<th>할인값(PC)<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="w200" id="dcPval" name="dcPval" value="0" style="text-align: right"><span id="dcPvalSpan">원</span>
-						</td>
-					</tr>
-					<tr>
-						<th>할인값(모바일)<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="w200" id="dcMval" name="dcMval" value="0" style="text-align: right"><span id="dcMvalSpan">원</span>
-						</td>
-						<th>최대할인금액<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="w200" id="maxDcAmt" name="maxDcAmt" value="0"><span id="maxDcAmtSpan">원</span>
-						</td>
-					</tr>
-					<tr>
-						<th>다운로드시작일시<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="schDate w100" name="downStdt" maxlength="10"/>
-							<select name="downStHH" id="downStHH">
-								<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
-							</select>
-							<select name="downStMM" id="downStMM">
-								<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
-							</select>
-						<th>다운로드종료일시<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="schDate w100" name="downEddt" maxlength="10"/>
-							<select name="downEdHH" id="downEdHH">
-								<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
-							</select>
-							<select name="downEdMM" id="downEdMM">
-								<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>기간/일수구분<em class="required" title="필수"></em></th>
-						<td>
-							<select name="pdGbList" id="pdGbList">
-								<option value="">[전체]</option>
-								<option value="P">기간</option>
-								<option value="D">일수</option>
-							</select>
-						</td>
-						<th>적용범위<em class="required" title="필수"></em></th>
-						<td>
-							<label class="rdoBtn"> <input type="radio" name="appliyScope" value="A"/>전체</label>
-							<label class="rdoBtn"> <input type="radio" name="appliyScope" value="I"/>개별</label>
-						</td>
-					</tr>
-					<tr>
-						<th>유효기간시작일시<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="schDate w100" name="applyStdt" maxlength="10"/>
-							<select name="applyStHH" id="applyStHH">
-								<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
-							</select>
-							<select name="applyStMM" id="applyStMM">
-								<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
-							</select>
-						<th>유효기간종료일시<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="schDate w100" name="applyEddt" maxlength="10"/>
-							<select name="applyEdHH" id="applyEdHH">
-								<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
-							</select>
-							<select name="applyEdMM" id="applyEdMM">
-								<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>총발행제한수량<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="w200" name="totPubLimitQty" id="totPubLimitQty" value="0" style="text-align: right;">개
-						</td>
-						<th>1인당발행제한수량<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" class="w200" name="custPubLimitQty" id="custPubLimitQty" value="0" style="text-align: right;">개
-						</td>
-					</tr>
-					<tr>
-						<th>최소주문금액<em class="required" title="필수"></em></th>
-						<td><input type="text" class="w200" name="minBuyAmt" id="minBuyAmt" value="0" style="text-align: right;"></td>원
-						<th>1회발행수량<em class="required" title="필수"></em></th>
-						<td><input type="text" class="w200" name="onePubQty" id="onePubQty" value="1" style="text-align: right;"></td>개
-					</tr>
-					<tr>
-						<th>재발급여부<em class="required" title="필수"></em></th>
-						<td>
-							<select name="reissuanceList" id="reissuanceList">
-								<option th:if="${reissuanceList}" th:each="oneData , status : ${reissuanceList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>다운로드구분<em class="required" title="필수"></em></th>
-						<td>
-							<select name="dnGbList" id="dnGbList">
-								<option th:if="${dnGbList}" th:each="oneData , status:${dnGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-					</tr>
-				</table>
-			</div>
-			<ul class="panelBar">
-				<li class="right">
-					<button type="button" class="btn btn-info btn-lg" onclick="fnCouponCreate();">등록</button>
-				</li>
-			</ul>
+ -->
+<div class="modalPopup" data-width="1200">
+	<div class="panelStyle" >
+		<div class="panelTitle">
+			<h2>쿠폰등록</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('CouponCreatePopup')"><i class="fa fa-times"></i></button>
+		</div>
+		<div class="panelContent">
+			<form id="couponCreateForm" name="couponCreateForm" th:action="@{'/marketing/coupon/save'}" >
+				<input type="hidden" name="supplyCompList" id="supplyCompList">
+				<input type="hidden" name="brandList" id="brandList">
+				<input type="hidden" name="applyGoodsList" id="applyGoodsList">
+				<input type="hidden" name="exceptGoodsList" id="excepGoodsList">
+				<input type="hidden" name="burdenList" id="burdenList">
+				<input type="hidden" name="cateList" id="cateList">
+
+				<div class="tabs">
+					<div class="tabsNav">
+						<ul>
+							<li class="on"><a href="#coupontab1">기본정보</a></li>
+							<li><a href="#coupontab2">적용대상</a></li>
+							<li><a href="#coupontab3">입점업체분담율</a></li>
+						</ul>
+					</div>
+					<ul class="tabsCont">
+						<li class="tab on" id="coupontab1">
+							<div class="panelStyle">
+								<table class="frmStyle">
+									<colgroup>
+										<col style="width:10%">
+										<col style="width:40%;">
+										<col style="width:10%">
+										<col style="width:40%;">
+									</colgroup>
+									<tr>
+										<th>쿠폰번호<em class="required" title="필수"></em></th>
+										<td colspan="5">
+											<input type="hidden" name="copyCpnId" maxlength="50" value="">
+											<input type="hidden" name="mode" maxlength="50" value="">
+											<input type="text" name="cpnId" maxlength="50" value="" style="width:70%;" disabled="true" placeholder="자동생성" data-valid-name="쿠폰번호">
+											<label class="chkBox checked" onclick="clickCreateChk(this);" id="cpnCreateLab">
+												<input type="checkbox" name="cpnCreateType" id="cpnCreateType" value="true" class="type-check" checked />쿠폰번호 자동생성
+											</label>
+										</td>
+									</tr>
+									<tr>
+										<th>쿠폰명<em class="required" title="필수"></em></th>
+										<td colspan="5">
+											<input type="text" name="cpnNm" id="cpnNm" style="width: 70%;" required="required" data-valid-name="쿠폰명">
+										</td>
+									</tr>
+									<tr>
+										<th>쿠폰유형<em class="required" title="필수"></em></th>
+										<td colspan="5">
+											<input type="hidden" id="cpnType" name="cpnType" required="required" data-valid-name="쿠폰유형">
+											<label class="rdoBtn" th:if="${cpnTypeList}" th:each="oneData, status : ${cpnTypeList}"> <input type="radio" name="rdoCpnType"  th:text="${oneData.cdNm}" th:value="${oneData.cd}"/></label>
+										</td>
+									</tr>
+									<tr>
+										<th>사용가능고객구분<em class="required" title="필수"></em></th>
+										<td>
+											<select name="usableCustGb" id="usableCustGb" required="required" data-valid-name="사용가능고객구분">
+												<option th:if="${usableCustGbList}" th:each="oneData , status : ${usableCustGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+										</td>
+										<th>사이트<em class="required" title="필수"></em></th>
+										<td>
+											<select name="siteCd" id="siteCd" required="required" data-valid-name="사이트">
+												<option th:if="${siteCdList}" th:each="oneData , status : ${siteCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th>사용고객등급구분<em class="required" title="필수"></em></th>
+										<td>
+											<select name="usableCustGrade" id="usableCustGrade" required="required" data-valid-name="사용고객등급구분">
+												<option value="ALL">[전체]</option>
+												<option th:if="${usableCustGradeList}" th:each="oneData , status : ${usableCustGradeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+										</td>
+										<th>만료알림여부<em class="required" title="필수"></em></th>
+										<td>
+											<select name="endAlimYn" id="endAlimYn" required="required" data-valid-name="만료알림여부">
+												<option value="Y">Y</option>
+												<option value="N" selected="selected">N</option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th>할인방식<em class="required" title="필수"></em></th>
+										<td>
+											<input type="hidden" name="dcWay" id="dcWay" required="required" data-valid-name="할인방식">
+											<label class="rdoBtn" th:if="${dcWayList}" th:each="oneData, status : ${dcWayList}"> <input type="radio" name="rdoDcWay"  th:text="${oneData.cdNm}" th:value="${oneData.cd}"/></label>
+										</td>
+										<th>구매제한금액<em class="required" title="필수"></em></th>
+										<td>
+											<input type="text" id="buyLimitAmt" name="buyLimitAmt" class="w200" required="required" value="0" style="text-align: right;" data-valid-name="구매제한금액">원
+										</td>
+									</tr>
+									<tr>
+										<th>할인값(PC)<em class="required" title="필수"></em></th>
+										<td>
+											<input type="text" class="w200" id="dcPval" name="dcPval" value="0" required="required" data-valid-name="할인값(PC)" data-valid-type="numeric" style="text-align: right"><span id="dcPvalSpan">원</span>
+										</td>
+										<th>할인값(모바일웹)<em class="required" title="필수"></em></th>
+										<td>
+											<input type="text" class="w200" id="dcMval" name="dcMval" value="0" required="required" data-valid-name="할인값(모바일웹)" data-valid-type="numeric" style="text-align: right"><span id="dcMvalSpan">원</span>
+										</td>
+									</tr>
+									<tr>
+										<th>할인값(모바일앱)<em class="required" title="필수"></em></th>
+										<td>
+											<input type="text" class="w200" id="dcAval" name="dcAval" value="0" required="required" data-valid-name="할인값(모바일앱)" data-valid-type="numeric" style="text-align: right"><span id="dcAvalSpan">원</span>
+										</td>
+										<th>최대할인금액<em class="required" title="필수"></em></th>
+										<td>
+											<input type="text" class="w200" id="maxDcAmt" name="maxDcAmt" value="0" required="required" data-valid-name="최대할인금액" data-valid-type="numeric" style="text-align: right;"><span id="maxDcAmtSpan">원</span>
+										</td>
+									</tr>
+									<tr>
+										<th>다운로드시작일시<em class="required" title="필수"></em></th>
+										<td>
+											<input type="hidden" name="downStdt" id="downStdt" required="required" data-valid-name="다운로드시작일시">
+											<input type="text" class="schDate w100" name="downStDay" id="downStDay" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+											<select name="downStHH" id="downStHH">
+												<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+											<select name="downStMM" id="downStMM">
+												<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+										<th>다운로드종료일시<em class="required" title="필수"></em></th>
+										<td>
+											<input type="hidden" id="downEddt" name="downEddt" required="required" data-valid-name="다운로드종료일시">
+											<input type="text" class="schDate w100" name="downEdDay" id="downEdDay" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+											<select name="downEdHH" id="downEdHH">
+												<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+											<select name="downEdMM" id="downEdMM">
+												<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th>기간/일수구분<em class="required" title="필수"></em></th>
+										<td>
+											<select name="pdGb" id="pdGb" onchange="pdGbChange(this)" required="required" data-valid-name="기간/일수구분">
+												<option value="P">기간</option>
+												<option value="D">일수</option>
+											</select>
+										</td>
+										<th>적용범위<em class="required" title="필수"></em></th>
+										<td>
+											<input type="hidden" name="applyScope" id="applyScope" required="required" data-valid-name="적용범위">
+											<label class="rdoBtn"> <input type="radio" name="rdoApplyScope" value="A"/>전체</label>
+											<label class="rdoBtn"> <input type="radio" name="rdoApplyScope" value="I"/>개별</label>
+										</td>
+									</tr>
+									<tr class="availDayTr" style="display: none;">
+										<th>유효기간일수<em class="required" title="필수"></em></th>
+										<td>
+											<input type="text" name="availDays" id="availDays" class="w200" data-valid-name="유효기간일수">
+										</td>
+									</tr>
+									<tr>
+										<th class="availDateTr">유효기간시작일시<em class="required" title="필수"></em></th>
+										<td class="availDateTr">
+											<input type="hidden" name="availStdt" id="availStdt" data-valid-name="유효기간시작일시">
+											<input type="text" class="schDate w100" name="availStDay" id="availStDay" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+											<select name="availStHH" id="availStHH">
+												<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+											<select name="availStMM" id="availStMM">
+												<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+										<th class="availDateTr">유효기간종료일시<em class="required" title="필수"></em></th>
+										<td class="availDateTr">
+											<input type="hidden" id="availEddt" name="availEddt" data-valid-name="유효기간종료일시">
+											<input type="text" class="schDate w100" name="availEdDay" id="availEdDay" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+											<select name="availEdHH" id="availEdHH">
+												<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+											<select name="availEdMM" id="availEdMM">
+												<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th>첫구매여부<em class="required" title="필수"></em></th>
+										<td>
+											<select name="firstYn" id="firstYn" onchange="firstYnChange(this)" required="required" data-valid-name="첫구매여부">
+												<option value="Y">Y</option>
+												<option value="N" selected="selected">N</option>
+											</select>
+										</td>
+										<th>다운로드가능여부<em class="required" title="필수"></em></th>
+										<td>
+											<select name="downYn" id="downYn" required="required" data-valid-name="다운로드가능여부">
+												<option value="Y">Y</option>
+												<option value="Y" selected="selected">N</option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th class="buyDateTr">첫구매기간시작일시<em class="required" title="필수"></em></th>
+										<td class="buyDateTr">
+											<input type="hidden" id="buyEddt" name="buyEddt" data-valid-name="첫구매기간종료일시">
+											<input type="text" class="schDate w100" name="buyStDay" id="buyStDay" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+											<select name="buyStHH" id="buyStHH">
+												<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+											<select name="buyStMM" id="buyStMM">
+												<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+										<th class="buyDateTr">첫구매기간종료일시<em class="required" title="필수"></em></th>
+										<td class="buyDateTr">
+											<input type="hidden" name="buyStdt" id="buyStdt" data-valid-name="첫구매기간시작일시">
+											<input type="text" class="schDate w100" name="buyEdDay" id="buyEdDay" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+											<select name="buyEdHH" id="buyEdHH">
+												<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+											<select name="buyEdMM" id="buyEdMM">
+												<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th>신규회원여부<em class="required" title="필수"></em></th>
+										<td colspan="5">
+											<select name="custJoinYn" id="custJoinYn" onchange="custJoinYnChange(this)" required="required" data-valid-name="신규회원여부">
+												<option value="Y">Y</option>
+												<option value="N" selected="selected">N</option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th class="custJoinDateTr">신규회원기간시작일시<em class="required" title="필수"></em></th>
+										<td class="custJoinDateTr">
+											<input type="hidden" name="custJoinStdt" id="custJoinStdt" data-valid-name="신규회원기간시작일시">
+											<input type="text" class="schDate w100" name="custJoinStDay" id="custJoinStDay" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+											<select name="custJoinStHH" id="custJoinStHH">
+												<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+											<select name="custJoinStMM" id="custJoinStMM">
+												<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+										<th class="custJoinDateTr">신규회원기간종료일시<em class="required" title="필수"></em></th>
+										<td class="custJoinDateTr">
+											<input type="hidden" id="custJoinEddt" name="custJoinEddt" data-valid-name="신규회원기간종료일시">
+											<input type="text" class="schDate w100" name="custJoinEdDay" id="custJoinEdDay" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+											<select name="custJoinEdHH" id="custJoinEdHH">
+												<option th:if="${hhList}" th:each="oneData , status : ${hhList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+											<select name="custJoinEdMM" id="custJoinEdMM">
+												<option th:if="${mmList}" th:each="oneData , status : ${mmList}" th:text="${oneData.cdNm}" th:value="${oneData.cd}"></option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th>총발행제한수량<em class="required" title="필수"></em></th>
+										<td>
+											<input type="text" class="w200" name="totPubLimitQty" id="totPubLimitQty" value="0" required="required" data-valid-name="총발행제한수량" data-valid-type="numeric" style="text-align: right;">개<span class="cRed" id="totPubLimitQtySpan"> *제한없음</span>
+										</td>
+										<th>1인당발행제한수량<em class="required" title="필수"></em></th>
+										<td>
+											<input type="text" class="w200" name="custPubLimitQty" id="custPubLimitQty" value="0" required="required" data-valid-name="1인당발행제한수량" data-valid-type="numeric" style="text-align: right;">개<span class="cRed" id="custPubLimitQtySpan"> *제한없음</span>
+										</td>
+									</tr>
+									<tr>
+										<th>최소주문금액<em class="required" title="필수"></em></th>
+										<td><input type="text" class="w200" name="minBuyAmt" id="minBuyAmt" value="0" required="required" data-valid-name="최소주문금액" data-valid-type="numeric" style="text-align: right;">원<span class="cRed" id="minBuyAmtSpan"> *제한없음</span></td>
+										<th>1회발행수량<em class="required" title="필수"></em></th>
+										<td><input type="text" class="w200" name="onePubQty" id="onePubQty" value="1" required="required" data-valid-name="1회발행수량" data-valid-type="numeric" style="text-align: right;">개</td>
+									</tr>
+									<tr>
+										<th>재발급여부<em class="required" title="필수"></em></th>
+										<td>
+											<select name="reissuance" id="reissuance" required="required" data-valid-name="재발급여부" >
+												<option th:if="${reissuanceList}" th:each="oneData , status : ${reissuanceList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+										</td>
+										<th>다운로드구분<em class="required" title="필수"></em></th>
+										<td>
+											<select name="dnGb" id="dnGb" required="required" data-valid-name="다운로드구분">
+												<option th:if="${dnGbList}" th:each="oneData , status:${dnGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th>쿠폰상태<em class="required" title="필수"></em></th>
+										<td>
+											<select name="cpnStat" id="cpnStat" ata-valid-name="쿠폰상태" required="required">
+												<option th:if="${cpnStatList}" th:each="oneData , status : ${cpnStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+										</td>
+									</tr>
+									<tr class="payTypeTr" style="display: none;">
+										<th>결제수단<em class="required" title="필수"></em></th>
+										<td>
+											<select name="payType" id="payType" data-valid-name="결제수단">
+												<option value="">[전체]</option>
+												<option th:if="${payTypeList}" th:each="oneData , status : ${payTypeList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+										</td>
+									</tr>
+								</table>
+								<div class="mdPopBtnB aR">
+									<button type="button" class="btn btn-info btn-lg" onclick="fnCouponCreate();">등록</button>
+								</div>
+							</div>
+						</li>
+						<!-- 쿠폰적용대상-->
+						<li class="tab" id="coupontab2" >
+							<div class="panelStyle">
+								<div class="panelTitle">
+									<h2 style="position: relative">적용 대상 상품 등록</h2>
+								</div>
+								<div class="inner-panelContent">
+									<div class="panelContent">
+										<table class="frmStyle">
+											<colgroup>
+												<col style="width:15%;">
+												<col style="width:85%;">
+											</colgroup>
+											<tbody>
+												<tr>
+													<th>공급처</th>
+													<td>
+														<div class="padding10 inner-tb-solid">
+															<button type="button" class="btn btnRight btn-success btn-lg" id="btnSupplyAdd">공급처 추가</button>
+															<button type="button" class="btn btnRight btn-success btn-lg" id="btnSupplyDel">선택삭제</button>
+															<br/>
+															<div id="supplyGridList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+														</div>
+													</td>
+												</tr>
+												<tr>
+													<th>브랜드</th>
+													<td>
+														<div class="padding10 inner-tb-solid">
+															<button type="button" class="btn btnRight btn-success btn-lg" id="btnBrandAdd">브랜드 추가</button>
+															<button type="button" class="btn btnRight btn-success btn-lg" id="btnBrandDel">선택삭제</button>
+															<br/>
+															<div id="brandGridList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+														</div>
+													</td>
+												</tr>
+												<tr>
+													<th>카테고리</th>
+													<td>
+														<div class="padding10 inner-tb-solid">
+															<button type="button" class="btn btnRight btn-success btn-lg" id="btnCateAdd">카테고리 추가</button>
+															<button type="button" class="btn btnRight btn-success btn-lg" id="btnCateDel">선택삭제</button>
+															<br/>
+															<div id="cateGridList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+														</div>
+													</td>
+												</tr>
+												<tr>
+													<th>적용상품</th>
+													<td>
+														<div class="padding10 inner-tb-solid">
+															<button type="button" class="btn btnRight btn-success btn-lg" id="btnGoodsAdd">상품 추가</button>
+															<button type="button" class="btn btnRight btn-success btn-lg" id="btnGoodsDel">선택삭제</button>
+															<br/>
+															<div id="goodsGridList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+														</div>
+													</td>
+												</tr>
+											</tbody>
+										</table>
+									</div>
+								</div>
+								<div class="panelTitle">
+									<h2 style="position: relative">적용 제외 대상 상품 등록</h2>
+								</div>
+								<div class="inner-panelContent">
+									<div class="panelContent">
+										<table class="frmStyle">
+											<colgroup>
+												<col style="width:15%;">
+												<col style="width:85%;">
+											</colgroup>
+											<tbody>
+											<tr>
+												<th>제외상품</th>
+												<td>
+													<div class="padding10 inner-tb-solid">
+														<button type="button" class="btn btnRight btn-success btn-lg" id="btnExcepGoodsAdd">제외상품 추가</button>
+														<button type="button" class="btn btnRight btn-success btn-lg" id="btnExcepGoodsDel">선택삭제</button>
+														<br/>
+														<div id="excepGoodsGridList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+													</div>
+												</td>
+											</tr>
+											</tbody>
+										</table>
+									</div>
+								</div>
+							</div>
+						</li>
+						<!-- 쿠폰적용대상끝-->
+						<!-- 입점업체분담율-->
+						<li class="tab" id="coupontab3">
+							<div class="panelStyle">
+								<ul class="panelBar">
+									<li class="left">
+										<button type="button" class="btn btn-warning btn-lg" id="btnAddRow">행추가</button>
+										<button type="button" class="btn btn-danger btn-lg" id="btnDeleteRow">행삭제</button>
+									</li>
+								</ul>
+
+								<div id="inComGridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+
+							</div>
+						</li>
+						<!-- 입점업체분담끝-->
+					</ul>
+				</div>
 			</form>
 		</div>
 	</div>
+</div>
 <script th:inline="javascript">
-/*<![CDATA[*/
+	/*<![CDATA[*/
+	var ibSupplyComList = gagajf.convertToArray([[${ibSupplyCompList}]]);
+	var delYnList = { "Y":"Yes", "N":"No" };
 
-	$(document).ready(function(){
+	// ag-grid 입점업체분담율 컬럼
+	var columnDefs = [
+		{ headerName: "입점업체" , field:"supplyCompCd" , width:150, cellClass:"text-center" ,
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(ibSupplyComList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(ibSupplyComList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(ibSupplyComList, params.newValue);}
+		} ,
+		{ headerName: "쿠폰분담율(%)", field:"burdenRate" , width:150, cellClass: "text-center" ,
+		  cellEditorParams: { maxlength: 10, required: true }
+		} ,
+		{ headerName: "삭제여부" , field: "delYn"  , width:150, cellClass: "text-center" ,
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(delYnList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(delYnList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(delYnList, params.newValue); }
+		}
+	];
 
-	});
+	// ag-grid 공급처 컬럼
+	var supplyColumnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{ headerName : "공급업체코드" , field: "supplyCompCd" , width:150, cellClass: 'text-center'} ,
+		{ headerName: "공급업체명" , field: "supplyCompNm" , width:150, cellClass: 'text-center'}
+	];
+
+	// ag-grid 브랜드 컬럼
+	var brandSelColumnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{ headerName : "브랜드ID" , field: "brandCd" , width: 120, cellClass : 'text-center'} ,
+		{ headerName : "브랜드명" , field: "brandEnm" , width: 120, cellClass: 'text-center'} ,
+		{ headerName : "공급업체명", field: "supplyCompNm" , width: 150, cellClass: 'text-center' } ,
+		//{ headerName: "적용대상" , field: "targetGb" , width: 150, cellClass: 'text-center'}
+	];
+
+	// ag-grid 적용상품 컬럼
+	var goodsSelColumnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{ headerName: "상품구분" , field: "goodsGb" , width: 100, cellClass: 'text-center'} ,
+		{ headerName: "Product ID" , field: "goodsCd" , width: 120, cellClass: 'text-center'},
+		{ headerName: "상품명"  , field: "goodsNm" , width: 120 , cellClass: 'text-center'} ,
+		//{ headerName: "적용대상" , field: "targetGB" , width: 150, cellClass: 'text-center'}
+	];
+
+	// ag-grid 카테고리 컬럼
+	var cateSelColumnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{ headerName: "카테고리코드" , field: "cateNo" , width: 100 , cellClass: 'text-center'} ,
+		{ headerName: "카테고리명" , field: "cateNm" , width: 120 , cellClass: 'text-center'},
+		//{ headerName: "적용대사"}
+	];
+
+	// ag-grid 제외상품 컬럼
+	var excepGoodsColumnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{ headerName: "상품구분" , field: "goodsGb" , width: 100, cellClass: 'text-center'} ,
+		{ headerName: "Product ID" , field: "goodsCd" , width: 120, cellClass: 'text-center'},
+		{ headerName: "상품명"  , field: "goodsNm" , width: 120 , cellClass: 'text-center'} ,
+	];
+
+	var inComGridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	var cateGridOptions = gagaAgGrid.getGridOptions(cateSelColumnDefs);
+	var goodsGridOptions = gagaAgGrid.getGridOptions(goodsSelColumnDefs);
+	var brandGridOptions = gagaAgGrid.getGridOptions(brandSelColumnDefs);
+	var supplyGridOptions = gagaAgGrid.getGridOptions(supplyColumnDefs);
+	var excepGoodsGridOptions = gagaAgGrid.getGridOptions(excepGoodsColumnDefs);
+
+	inComGridOptions.defaultColDef.editable = true;
+	inComGridOptions.rowSelection = "multiple";
+	goodsGridOptions.rowSelection = "multiple";
+	supplyGridOptions.rowSelection = "multiple";
+	excepGoodsGridOptions.rowSelection = "multiple";
+	cateGridOptions.rowSelection = "multiple";
+	brandGridOptions.rowSelection = "multiple";
+	inComGridOptions.stopEditingWhenGridLosesFocus = true;
 
 	// 쿠폰 등록 버튼 클릭시
 	function fnCouponCreate(){
-		alert("쿠폰 등록 ");
-		if(!checkVelidation()) {
-			return;
+		// 필수값들 셋팅
+		setReqValue();
+
+		// 필수값 validation 체크
+		if (!gagajf.validation('#couponCreateForm')) {
+			return false;
+		}
+
+		//신규가입 지급한다면 validation 체크
+		if( $('#custJoinYn option:selected').val() == "Y" ){
+			var fromDate = $('#couponCreateForm input[name=custJoinStdt]').val();
+			var toDate = $('#couponCreateForm input[name=custJoinEddt]').val();
+
+			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+				mcxDialog.alertC("신규가입기간 시작일자와 종료일자를 입력하세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#couponCreateForm input[name=custJoinStdt]').focus();
+					}
+				});
+				return false;
+			}
+
+			if (fromDate > toDate) {
+				mcxDialog.alertC("등록 시작일자는 종료일자 보다 클 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#couponCreateForm input[name=custJoinEddt]').focus();
+					}
+				});
+				return false;
+			}
+		}
+
+		// 첫구매 지급하면 validation 체크
+		if( $('#firstYn option:selected').val() == "Y" ){
+			var fromDate = $('#couponCreateForm input[name=buyStdt]').val();
+			var toDate = $('#couponCreateForm input[name=buyEddt]').val();
+
+			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+				mcxDialog.alertC("신규가입기간 시작일자와 종료일자를 입력하세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#couponCreateForm input[name=buyStdt]').focus();
+					}
+				});
+				return false;
+			}
+
+			if (fromDate > toDate) {
+				mcxDialog.alertC("등록 시작일자는 종료일자 보다 클 수 없습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#couponCreateForm input[name=buyEddt]').focus();
+					}
+				});
+				return false;
+			}
+		}
+
+		// 할인율 validation 체크 (100을 넘길수없음)
+		if($('#dcWay').val() == 'G240_11') {
+			if($('#dcPval').val() > 100) {
+				mcxDialog.alert('PC할인율은 100을 초과할수없습니다.');
+				$('#dcPval').focus();
+				return false;
+			} else if( $('#dcMval').val() > 100) {
+				mcxDialog.alert('모바일(웹)할인율은 100을 초과할수없습니다.');
+				$('#dcMval').focus();
+				return false;
+			}  else if( $('#dcAval').val() > 100) {
+				mcxDialog.alert('모바일(앱)할인율은 100을 초과할수없습니다.');
+				$('#dcAval').focus();
+				return false;
+			}
+		}
+
+		mcxDialog.confirm('저장하시겠습니까?' , {
+			cancelBtnText:"취소",
+			sureBtnText:"확인",
+			sureBtnClick: function () {
+				gagajf.ajaxFormSubmit($('#couponCreateForm').prop('action'), '#couponCreateForm', function() {
+					uifnPopupClose('CouponCreatePopup');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	}
+
+	// 할인방식 변경
+	$("#couponCreateForm input[name=rdoDcWay]").bind('click change', function () {
+		var radioValue = $(this).val();
+
+		if(radioValue == 'G240_10') {
+			$('#dcPvalSpan').text("원");
+			$('#dcMvalSpan').text("원");
+			$('#dcAvalSpan').text("원");
+		} else {
+			$('#dcPvalSpan').text("%");
+			$('#dcMvalSpan').text("%");
+			$('#dcAvalSpan').text("%");
+		}
+	});
+
+	// 쿠폰 상태 변경
+	$("#couponCreateForm input[name=rdoCpnType]").bind('click change', function () {
+		var radioValue = $(this).val();
+
+		// 상품쿠폰 선택시 적용범위 개별로 변경 나머진 전체
+		if(radioValue == 'G230_11') {
+			$("input:radio[name='rdoApplyScope']:radio[value='I']").prop('checked', true);
+		} else {
+			$("input:radio[name='rdoApplyScope']:radio[value='A']").prop('checked', true);
+		}
+
+		// 주문서 쿠폰 선택시 결제수단 노출
+		if(radioValue == 'G230_20') {
+			$('.payTypeTr').css('display' , '');
+			$('#couponCreateForm #payType').attr('required' , true);
+		} else {
+			$('.payTypeTr').css('display' , 'none');
+			$('#couponCreateForm #payType').attr('required' , false );
+		}
+
+		$('#couponCreateForm #cpnType').val(radioValue);
+	});
+
+	// 적용대상 - 브랜드 추가 버튼시
+	$('#btnBrandAdd').on('click' , function(){
+		cfnOpenBrandListPopup("fnSetPopupBrandInfo", "M");
+	});
+
+	// 브랜드 설정 / 브랜드 추가 콜백함수 (단수로 가져오므로 복수일 경우에 수정 확인 필요)
+	var fnSetPopupBrandInfo = function(result) {
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(brandGridOptions);		// 받아온 모든 데이터
+
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				if(gridListValue[j].brandCd == result[i].brandCd) {	addChk = false;	}					// 중복체크
+			}
+
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(brandGridOptions, {"brandCd" : result[i].brandCd, "brandEnm" : result[i].brandEnm, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_12"});
+			}
+		}
+	};
+
+	// 적용대상 - 브랜드 삭제 버튼시
+	$('#btnBrandDel').on('click' , function(){
+		brandGridOptions.api.updateRowData({remove:gagaAgGrid.selectedRowData(brandGridOptions)});
+	});
+
+	// 적용대상 - 공급처 추가 버튼시
+	$('#btnSupplyAdd').on('click' , function (){
+		cfnOpenCompanyListPopup("fnSetPopupComapnyInfo");
+	});
+
+	// 공급업체 설정 / 업체 추가 콜백함수
+	var fnSetPopupComapnyInfo = function(result) {
+		// 기존 리스트 데이터 for
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(supplyGridOptions);		// 받아온 모든 데이터
+
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				// 동일한 data는 추가하지 않음
+				if(gridListValue[j].supplyCompCd == result[i].supplyCompCd) {	addChk = false;	}		// 중복체크
+			}
+
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(supplyGridOptions, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_13"});
+			}
+		}
+	};
+
+	// 적용대상 - 공급처 삭제시시
+	$('#btnSupplyDel').on('click' , function () {
+		supplyGridOptions.api.updateRowData({remove:gagaAgGrid.selectedRowData(supplyGridOptions)});
+	});
+
+	// 적용대상 - 카테고리 추가시
+	$('#btnCateAdd').on('click' , function () {
+		cfnOpenCategoryPopup("fnSetPopupCategoryInfo");
+	});
+
+	// 카테고리 추가 콜백 함수
+	var fnSetPopupCategoryInfo = function (result) {
+		// 기존 리스트 데이터 for
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(cateGridOptions);		// 받아온 모든 데이터
+
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				// 동일한 data는 추가하지 않음
+				if(gridListValue[j].supplyCompCd == result[i].supplyCompCd) {	addChk = false;	}		// 중복체크
+			}
+
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(cateGridOptions, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_13"});
+			}
+		}
+	}
+
+	// 적용대상 - 카테고리 삭제시
+	$('#btnCateDel').on('click' , function () {
+		cateGridOptions.api.updateRowData({remove:gagaAgGrid.selectedRowData(cateGridOptions)});
+	});
+
+	// 적용대상 - 상품 추가시
+	$('#btnGoodsAdd').on('click' , function () {
+		cfnOpenGoodsPopup("fnSetPopupApplyGoodsInfo");
+	});
+
+	// 적용 상품 리스트 콜백함수
+	var fnSetPopupApplyGoodsInfo = function(result) {
+		gridAddGoodsList(goodsGridOptions, result , "apply");
+	};
+
+	// 적용대상 - 상품 삭제 시
+	$('#btnGoodsDel').on('click' , function () {
+		goodsGridOptions.api.updateRowData({remove:gagaAgGrid.selectedRowData(goodsGridOptions)});
+	});
+
+	// 적용대상 - 제외상품 추가시
+	$('#btnExcepGoodsAdd').on('click' , function(){
+		gridAddGoodsList(excepGoodsGridOptions, result , "except");
+	});
+
+	$('#btnExcepGoodsDel').on('click' , function () {
+		excepGoodsGridOptions.api.updateRowData({remove:gagaAgGrid.selectedRowData(excepGoodsGridOptions)});
+	});
+
+	// ag-grid 상품관련 list 콜백함수
+	function gridAddGoodsList(OriginGridListOption, result, gubun) {
+		var goodsGbVal = "G800_10";
+		if(gubun == 'except'){
+			goodsGbVal = "G800_30";
+		}
+
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(OriginGridListOption);		// 받아온 모든 데이터
+
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				if(gridListValue[j].goodsCd == result[i].goodsCd) {	addChk = false;	}				// 중복체크
+			}
+
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				//gagaAgGrid.addRowData(OriginGridListOption, result[i], "goodsCd");
+				gagaAgGrid.addRowData(OriginGridListOption, {"goodsGb": goodsGbVal, "goodsCd" : result[i].goodsCd, "goodsNm" : result[i].goodsNm, "targetGb" : "G260_10"});
+			}
+		}
+	}
+
+	// 기간 일수 변경시
+	function pdGbChange(pThis){
+		var selectVal = $(pThis).val();
+
+		if(typeof selectVal == "undefined") {
+			selectVal = "P";
+		}
+
+		if(selectVal == "P") {
+			$('.availDateTr').css('display' , '');
+			$('.availDayTr').css('display' , 'none');
+			$('#couponCreateForm #availDays').attr('required' , false);
+			$('#couponCreateForm #availStDay').attr('required' , true);
+			$('#couponCreateForm #availEdDay').attr('required' , true);
+			$('#couponCreateForm #availStdt').attr('required' , true);
+			$('#couponCreateForm #availEddt').attr('required' , true);
+		} else {
+			$('.availDateTr').css('display' , 'none');
+			$('.availDayTr').css('display' , '');
+			$('#couponCreateForm #availDays').attr('required' , true);
+			$('#couponCreateForm #availStDay').attr('required' , false);
+			$('#couponCreateForm #availEdDay').attr('required' , false);
+			$('#couponCreateForm #availStdt').attr('required' , false);
+			$('#couponCreateForm #availEddt').attr('required' , false);
+		}
+	}
+
+	// 첫구매여부 변경시
+	function firstYnChange(pThis){
+		var selectVal = $(pThis).val();
+
+		if(typeof selectVal == "undefined") {
+			selectVal = "N";
+		}
+
+		if(selectVal == "Y" ) {
+			$('.buyDateTr').css('display' , '');
+			$('#buyStdt').attr('required' , true);
+			$('#buyEddt').attr('required' , true);
+		} else {
+			$('.buyDateTr').css('display' , 'none');
+			$('#buyStdt').attr('required' , false);
+			$('#buyEddt').attr('required' , false);
+		}
+	}
+
+	// 신규회원여부 변경시
+	function custJoinYnChange(pThis){
+		var selectVal = $(pThis).val();
+
+		if(typeof selectVal == "undefined") {
+			selectVal = "N";
+		}
+
+		if(selectVal == "Y" ) {
+			$('.custJoinDateTr').css('display' , '');
+			$('#custJoinStdt').attr('required' , true);
+			$('#custJoinEddt').attr('required' , true);
+		} else {
+			$('.custJoinDateTr').css('display' , 'none');
+			$('#custJoinStdt').attr('required' , false);
+			$('#custJoinEddt').attr('required' , false);
 		}
 	}
 
-	// 쿠폰등록 유효성 체크
-	function checkVelidation(){
-		alert("벨리데이션 체크");
-		if()
+	// 행추가시
+	$('#btnAddRow').on('click' , function(){
+		var data = { supplyCompCd: null , burdenRate : null , delYn : null};
+		gagaAgGrid.addRowData(inComGridOptions , data , "supplyCompCd" );
+	});
 
+	// 쿠폰번호 자동생성 클릭시
+	function clickCreateChk(){
+		var flag = $('#couponCreateForm input[name=cpnCreateType]').prop("checked");
+
+		if(!flag) {
+			$("#couponCreateForm input[name=cpnId]").prop("disabled", true);
+			$("#couponCreateForm input[name=cpnId]").attr("required", false);
+			$("#couponCreateForm input[name=cpnId]").attr("placeholder", "자동생성");
+			$('#couponCreateForm input[name=cpnCreateType]').prop("checked" , false);
+		} else{
+			$("#couponCreateForm input[name=cpnId]").prop("disabled", false);
+			$("#couponCreateForm input[name=cpnId]").attr("required", true);
+			$("#couponCreateForm input[name=cpnId]").attr("placeholder", "");
+			$('#couponCreateForm input[name=cpnCreateType]').prop("checked" , true);
+		}
 	}
 
+	// 전송시 값 세팅
+	function setReqValue(){
+		// 쿠폰유형값 세팅
+		$('#couponCreateForm #cpnType').val($('#couponCreateForm input:radio[name="rdoCpnType"]:checked').val());
+		// 할인방식값 세팅
+		$('#couponCreateForm #dcWay').val($('#couponCreateForm input:radio[name="rdoDcWay"]:checked').val());
+		// 적용범위값 세팅
+		$('#couponCreateForm #applyScope').val($('#couponCreateForm input:radio[name="rdoApplyScope"]:checked').val());
+		// 다운로드기간 세팅
+		$('#couponCreateForm #downStdt').val($('#couponCreateForm #downStDay').val() + " " + $('#couponCreateForm #downStHH').val() + ":" + $('#couponCreateForm #downStMM').val() + ":00");
+		$('#couponCreateForm #downEddt').val($('#couponCreateForm #downEdDay').val() + " " + $('#couponCreateForm #downEdHH').val() + ":" + $('#couponCreateForm #downEdMM').val() + ":59");
+		// 유효기간 세팅
+		$('#couponCreateForm #availStdt').val($('#couponCreateForm #availStDay').val() + " " + $('#couponCreateForm #availStHH').val() + ":" + $('#couponCreateForm #availStMM').val() + ":00");
+		$('#couponCreateForm #availEddt').val($('#couponCreateForm #availEdDay').val() + " " + $('#couponCreateForm #availEdHH').val() + ":" + $('#couponCreateForm #availEdMM').val() + ":59");
+		// 첫구매기간세팅
+		$('#couponCreateForm #buyStdt').val($('#couponCreateForm #buyStDay').val() + " " + $('#couponCreateForm #buyStHH').val() + ":" + $('#couponCreateForm #buyStMM').val() + ":00");
+		$('#couponCreateForm #buyEddt').val($('#couponCreateForm #buyEdDay').val() + " " + $('#couponCreateForm #buyEdHH').val() + ":" + $('#couponCreateForm #buyEdMM').val() + ":59");
+		// 신규회원기간 세팅
+		$('#couponCreateForm #custJoinStdt').val($('#couponCreateForm #custJoinStDay').val() + " " + $('#couponCreateForm #custJoinStHH').val() + ":" + $('#couponCreateForm #custJoinStMM').val() + ":00");
+		$('#couponCreateForm #custJoinEddt').val($('#couponCreateForm #custJoinEdDay').val() + " " + $('#couponCreateForm #custJoinEdHH').val() + ":" + $('#couponCreateForm #custJoinEdMM').val() + ":59");
+		// 적용대상 - 공급처 그리드 전체값 세팅
+		var supplyAllData = gagaAgGrid.getAllRowData(supplyGridOptions);
+		var jsonSupplyCompData = JSON.stringify(supplyAllData);
+		$('#couponCreateForm #supplyCompList').val(jsonSupplyCompData);
+		// 적용대상 - 브랜드 그리드 전체값 세팅
+		var brandAllData = gagaAgGrid.getAllRowData(brandGridOptions);
+		var jsonBrandData = JSON.stringify(brandAllData);
+		$('#couponCreateForm #brandlist').val(jsonBrandData);
+		// // 적용대상 - 카테고리 그리드 전체값 세팅
+		var cateAllData = gagaAgGrid.getAllRowData(cateGridOptions);
+		var jsonCateData = JSON.stringify(cateAllData);
+		$('#couponCreateForm #cateList').val(jsonCateData);
+		// 적용대상 - 적용상품 그리드 전체값 세팅
+		var goodsAllData = gagaAgGrid.getAllRowData(goodsGridOptions);
+		var jsonGoodsData = JSON.stringify(goodsAllData);
+		$('#couponCreateForm #applyGoodsList').val(jsonGoodsData);
+		// 적용대상 - 제외상품 그리드 전체값 세팅
+		var exceptGoodsAllData = gagaAgGrid.getAllRowData(excepGoodsGridOptions);
+		var jsonExceptGoodsData = JSON.stringify(exceptGoodsAllData);
+		$('#couponCreateForm #excepGoodsList').val(jsonExceptGoodsData);
+
+	}
+
+	$(document).ready(function() {
+		// 초기화시 데이터 세팅
+		$('input[name=rdoCpnType]').eq(0).attr("checked" , true);
+		$('input[name=rdoDcWay]').eq(0).attr("checked" , true);
+		$('input[name=rdoApplyScope]').eq(0).attr("checked" , true)
+		$('#couponCreateForm #availEdHH option:last').attr("selected" , "selected");
+		$('#couponCreateForm #availEdMM option:last').attr("selected" , "selected");
+		$('#downEdHH option:last').attr("selected" , "selected");
+		$('#downEdMM option:last').attr("selected" , "selected");
+		$('#custJoinEdHH option:last').attr("selected" , "selected");
+		$('#custJoinEdMM option:last').attr("selected" , "selected");
+		$('#buyEdHH option:last').attr("selected" , "selected");
+		$('#buyEdMM option:last').attr("selected" , "selected");
+
+		pdGbChange();
+		firstYnChange();
+		custJoinYnChange();
+
+		gagaAgGrid.createGrid('inComGridList', inComGridOptions);
+		gagaAgGrid.createGrid('brandGridList' , brandGridOptions);
+		gagaAgGrid.createGrid('cateGridList' , cateGridOptions);
+		gagaAgGrid.createGrid('supplyGridList' , supplyGridOptions);
+		gagaAgGrid.createGrid('goodsGridList' , goodsGridOptions);
+		gagaAgGrid.createGrid('excepGoodsGridList' , excepGoodsGridOptions);
+
+	});
 
-/*]]>*/
+	/*]]>*/
 </script>
 </html>

+ 2 - 3
style24.admin/src/main/webapp/WEB-INF/views/marketing/CouponListForm.html

@@ -141,10 +141,10 @@
 		/*<![CDATA[*/
 		var columnDefs = [];
 		columnDefs = [
-			{headerName: "사이트", field: "siteCD", width: 80, cellClass: 'text-center'},
+			{headerName: "사이트", field: "siteCd", width: 80, cellClass: 'text-center'},
 			{headerName: "쿠폰ID", field: "cpnId", width: 130, cellClass: 'text-center'},
 			{headerName: "쿠폰명", field: "cpnNm", width: 140, cellClass: 'text-center'},
-			{headerName: "사용가능고객구분", field: "useableCustGb", width: 140, cellClass: 'text-center'},
+			{headerName: "사용가능고객구분", field: "usableCustGb", width: 140, cellClass: 'text-center'},
 			{headerName: "쿠폰유형", field: "cpnType", width: 140, cellClass: 'text-center'},
 			{headerName: "할인방식", field: "dcWay", width: 140, cellClass: 'text-center'},
 			{headerName: "할인값(PC)", field: "dcPval", width: 140, cellClass: 'text-center'},
@@ -263,5 +263,4 @@
 		/*]]>*/
 	</script>
 </div>
-
 </html>

+ 874 - 874
style24.admin/src/main/webapp/WEB-INF/views/marketing/MorebetterRegForm.html

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
+	  xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
  * @source  : MorebetterRegForm.html
@@ -13,961 +13,961 @@
  * ===  ===========  ==========  =============================================
  * 1.0  2020.12.29   bin2107     최초 작성
  *******************************************************************************
- -->	
-	<div class="modalPopup frGoodsPro" data-width="1100">
-		<div class="panelStyle" style="max-height:900px;overflow-y:scroll;">
-			<div class="panelTitle">
-				<strong th:text="${'다다익선 ' + (mode == 'N' ? '등록' : '상세')}">다다익선 등록</strong>
-				<button type="button" class="close" onclick="fnMorebetterFormClose()"><i class="fa fa-times"></i></button>
+ -->
+<div class="modalPopup frGoodsPro" data-width="1100">
+	<div class="panelStyle" style="max-height:900px;overflow-y:scroll;">
+		<div class="panelTitle">
+			<strong th:text="${'다다익선 ' + (mode == 'N' ? '등록' : '상세')}">다다익선 등록</strong>
+			<button type="button" class="close" onclick="fnMorebetterFormClose()"><i class="fa fa-times"></i></button>
+		</div>
+
+		<form id="moreBetterForm" name="moreBetterForm" action="#" th:action="@{'/marketing/morebetter/save'}"> <!--th:method="post" >-->
+			<input type="hidden" name="mode" th:value="${mode}"/>
+			<input type="hidden" name="supplyCompList"/>			<!-- 공급업체 리스트 -->
+			<input type="hidden" name="brandList"/>					<!-- 브랜드 리스트 -->
+			<input type="hidden" name="applyGoodsList"/>			<!-- 적용상품 리스트 -->
+			<input type="hidden" name="exceptGoodsList"/>			<!-- 제외상품 리스트 -->
+			<input type="hidden" name="burdenList"/>				<!-- 업체 분담율 리스트 -->
+			<input type="hidden" name="sectionGbList"/>				<!-- 다다익선 구간/혜택 리스트 -->
+
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col width="10%"/>
+						<col width="40%"/>
+						<col width="10%"/>
+						<col width="40%"/>
+					</colgroup>
+					<tr>
+						<th>프로모션명<em class="required" title="필수"></em></th>
+						<td>
+							<!-- 수정시 프로모션명 입력 : before -->
+							<input class="w50p" type="text" id="tmtbNm" name="tmtbNm" maxlength="30" required="required" data-valid-name="프로모션명"/>
+						</td>
+						<th>프로모션ID</th>
+						<td>
+							<!-- 프로모션 ID 입력 : before -->
+							<label th:if="${mode == 'N'}">
+								<input class="w50p" type="text" id="disTmtbSq1" name="disTmtbSq" maxlength="30" th:value="${params.tmtbSq}" disabled=""/>
+							</label>
+							<label th:if="${mode == 'U'}">
+								<input class="w50p" type="text" id="disTmtbSq2" name="disTmtbSq" maxlength="30" th:value="${tmtbSeq}" disabled=""/>
+							</label>
+							<input type="hidden" id="tmtbSq" name="tmtbSq"/>
+						</td>
+					</tr>
+					<tr>
+						<th>행사 기간<em class="required" title="필수"></em></th>
+						<td>
+							<input type="text" class="schDate w100" name="tmtbStdt" maxlength="10" required="required" data-valid-name="시작일자"/>
+							~
+							<input type="text" class="schDate w100" name="tmtbEddt" maxlength="10" required="required" data-valid-name="종료일자"/>
+						</td>
+						<th>상태<em class="required" title="필수"></em></th>
+						<td>
+							<!-- 상태 입력 : before
+                            <input class="w50p" type="text" id="disTmtbStat" name="disTmtbStat" maxlength="30" th:value="${params.tmtbStat}" disabled=""/>-->
+							<label class="rdoBtn" th:if="${tmtbStatList}" th:each="oneData, status : ${tmtbStatList}" ><input type="radio" id="disTmtbStat" name="disTmtbStat" th:value="${oneData.cd}" th:text="${oneData.cdNm}" required="required" data-valid-name="상태"/></label>
+							<input type="hidden" id="tmtbStat" name="tmtbStat"/>
+						</td>
+					</tr>
+					<tr>
+						<th>할인 구간<em class="required" title="필수"></em></th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="sectionGb" id="sectionGbQty" value="G810_10" checked="checked"/>수량</label>
+							<label class="rdoBtn"><input type="radio" name="sectionGb" id="sectionGbAmt" value="G810_11"/>금액</label>
+						</td>
+						<th>할인 구분<em class="required" title="필수"></em></th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="dcWay" id="dcWayQty" value="G240_10" checked="checked"/>할인금액</label>
+							<label class="rdoBtn"><input type="radio" name="dcWay" id="dcWayAmt" value="G240_11"/>할인율</label>
+						</td>
+					</tr>
+					<tr>
+						<th>상품여부<em class="required" title="필수"></em></th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="multiYn" id="multiYnY" value="Y" checked="checked"/>복합상품</label>
+							<label class="rdoBtn"><input type="radio" name="multiYn" id="multiYnN" value="N"/>단일상품</label>
+						</td>
+
+					</tr>
+
+				</table>
 			</div>
 
-			<form id="moreBetterForm" name="moreBetterForm" action="#" th:action="@{'/marketing/morebetter/save'}"> <!--th:method="post" >-->
-				<input type="hidden" name="mode" th:value="${mode}"/>
-				<input type="hidden" name="supplyCompList"/>			<!-- 공급업체 리스트 -->
-				<input type="hidden" name="brandList"/>					<!-- 브랜드 리스트 -->
-				<input type="hidden" name="applyGoodsList"/>			<!-- 적용상품 리스트 -->
-				<input type="hidden" name="exceptGoodsList"/>			<!-- 제외상품 리스트 -->
-				<input type="hidden" name="burdenList"/>				<!-- 업체 분담율 리스트 -->
-				<input type="hidden" name="sectionGbList"/>				<!-- 다다익선 구간/혜택 리스트 -->
-
-				<div class="panelContent">
-					<table class="frmStyle">
-						<colgroup>
-							<col width="10%"/>
-							<col width="40%"/>
-							<col width="10%"/>
-							<col width="40%"/>
-						</colgroup>
-						<tr>
-							<th>프로모션명<em class="required" title="필수"></em></th>
-							<td>
-								<!-- 수정시 프로모션명 입력 : before -->
-								<input class="w50p" type="text" id="tmtbNm" name="tmtbNm" maxlength="30" required="required" data-valid-name="프로모션명"/>
-							</td>
-							<th>프로모션ID</th>
-							<td>
-								<!-- 프로모션 ID 입력 : before -->
-								<label th:if="${mode == 'N'}">
-									<input class="w50p" type="text" id="disTmtbSq1" name="disTmtbSq" maxlength="30" th:value="${params.tmtbSq}" disabled=""/>
-								</label>
-								<label th:if="${mode == 'U'}">
-									<input class="w50p" type="text" id="disTmtbSq2" name="disTmtbSq" maxlength="30" th:value="${tmtbSeq}" disabled=""/>
-								</label>
-								<input type="hidden" id="tmtbSq" name="tmtbSq"/>
-							</td>
-						</tr>
-						<tr>
-							<th>행사 기간<em class="required" title="필수"></em></th>
-							<td>
-								<input type="text" class="schDate w100" name="tmtbStdt" maxlength="10" required="required" data-valid-name="시작일자"/>
-								~
-								<input type="text" class="schDate w100" name="tmtbEddt" maxlength="10" required="required" data-valid-name="종료일자"/>
-							</td>
-							<th>상태<em class="required" title="필수"></em></th>
-							<td>
-								<!-- 상태 입력 : before
-								<input class="w50p" type="text" id="disTmtbStat" name="disTmtbStat" maxlength="30" th:value="${params.tmtbStat}" disabled=""/>-->
-								<label class="rdoBtn" th:if="${tmtbStatList}" th:each="oneData, status : ${tmtbStatList}" ><input type="radio" id="disTmtbStat" name="disTmtbStat" th:value="${oneData.cd}" th:text="${oneData.cdNm}" required="required" data-valid-name="상태"/></label>
-								<input type="hidden" id="tmtbStat" name="tmtbStat"/>
-							</td>
-						</tr>
-						<tr>
-							<th>할인 구간<em class="required" title="필수"></em></th>
-							<td>
-								<label class="rdoBtn"><input type="radio" name="sectionGb" id="sectionGbQty" value="G810_10" checked="checked"/>수량</label>
-								<label class="rdoBtn"><input type="radio" name="sectionGb" id="sectionGbAmt" value="G810_11"/>금액</label>
-							</td>
-							<th>할인 구분<em class="required" title="필수"></em></th>
-							<td>
-								<label class="rdoBtn"><input type="radio" name="dcWay" id="dcWayQty" value="G240_10" checked="checked"/>할인금액</label>
-								<label class="rdoBtn"><input type="radio" name="dcWay" id="dcWayAmt" value="G240_11"/>할인율</label>
-							</td>
-						</tr>
-						<tr>
-							<th>상품여부<em class="required" title="필수"></em></th>
-							<td>
-								<label class="rdoBtn"><input type="radio" name="multiYn" id="multiYnY" value="Y" checked="checked"/>복합상품</label>
-								<label class="rdoBtn"><input type="radio" name="multiYn" id="multiYnN" value="N"/>단일상품</label>
-							</td>
-
-						</tr>
-
-					</table>
-				</div>
-
-				<div class="panelStyle" style="margin:unset;">
-					<!-- TITLE -->
-					<div class="panelTitle">
-						<h2>적용 대상 상품 등록</h2>
-						<span class="panelControl">
+			<div class="panelStyle" style="margin:unset;">
+				<!-- TITLE -->
+				<div class="panelTitle">
+					<h2>적용 대상 상품 등록</h2>
+					<span class="panelControl">
 							<i class="fa inner-fa-chevron-up"></i>    <!-- 열림/닫힘 화살표 -->
 						</span>
-					</div>
-					<!-- //TITLE -->
-					<div class="inner-panelContent">
-						<!--<div><i class="fa fa-info-circle"></i> 브랜드/공급업체/상품 중 1가지는 필수로 지정하셔야 합니다.</div>
-						<div><i class="fa fa-info-circle"></i> 브랜드와 공급업체는 지정 시, 해당 브랜드의 공급처와 같은 AND조건으로 적용됩니다.(예시:A브랜드 상품 중 B업체 상품만)</div>
-						<div><i class="fa fa-info-circle"></i> 공급업체와 브랜드를 적용하시더라도 적용상품은 별개로 등록된 상품을 기준으로 사은품 지급기준으로 적용하실 수 있습니다.</div>-->
-
-						<div class="panelContent">
-							<table class="frmStyle">
-								<colgroup>
-									<col width="10%"/>
-									<col width="90%"/>
-								</colgroup>
-								<tr>
-									<th>공급업체/브랜드</th>
-									<td>
-										<!-- 수정시 프로모션명 입력 : before -->
-										<div class="padding10 wid45">
-											<span>공급업체 설정</span>
-											<div class="padding10 inner-tb-solid">
-												<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddCompany">업체 추가</button>
-												<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteCompany">선택삭제</button>
-												<br/>
-												<div id="gridFGPromotionCompanyList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-											</div>
-										</div>
-										<div class="padding10 wid45">
-											<span>브랜드 설정</span>
-											<div class="padding10 inner-tb-solid">
-												<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddBrand">브랜드 추가</button>
-												<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteBrand">선택삭제</button>
-												<br/>
-												<!-- 브랜드 선택 팝업(단수 선택 팝업... 복수를 새로 만들어야하는지 ? 아니면 변수처리해야하는지 ? -->
-												<div id="gridFGBrandList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-											</div>
+				</div>
+				<!-- //TITLE -->
+				<div class="inner-panelContent">
+					<!--<div><i class="fa fa-info-circle"></i> 브랜드/공급업체/상품 중 1가지는 필수로 지정하셔야 합니다.</div>
+                    <div><i class="fa fa-info-circle"></i> 브랜드와 공급업체는 지정 시, 해당 브랜드의 공급처와 같은 AND조건으로 적용됩니다.(예시:A브랜드 상품 중 B업체 상품만)</div>
+                    <div><i class="fa fa-info-circle"></i> 공급업체와 브랜드를 적용하시더라도 적용상품은 별개로 등록된 상품을 기준으로 사은품 지급기준으로 적용하실 수 있습니다.</div>-->
+
+					<div class="panelContent">
+						<table class="frmStyle">
+							<colgroup>
+								<col width="10%"/>
+								<col width="90%"/>
+							</colgroup>
+							<tr>
+								<th>공급업체/브랜드</th>
+								<td>
+									<!-- 수정시 프로모션명 입력 : before -->
+									<div class="padding10 wid45">
+										<span>공급업체 설정</span>
+										<div class="padding10 inner-tb-solid">
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddCompany">업체 추가</button>
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteCompany">선택삭제</button>
+											<br/>
+											<div id="gridFGPromotionCompanyList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										</div>
-									</td>
-								</tr>
-								<tr>
-									<th>적용상품</th>
-									<td>
-										<div class="padding10">
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyGoods">상품 추가</button>
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteApplyGoods">선택삭제</button>
+									</div>
+									<div class="padding10 wid45">
+										<span>브랜드 설정</span>
+										<div class="padding10 inner-tb-solid">
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddBrand">브랜드 추가</button>
+											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteBrand">선택삭제</button>
 											<br/>
-											<div id="gridFGApplyGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+											<!-- 브랜드 선택 팝업(단수 선택 팝업... 복수를 새로 만들어야하는지 ? 아니면 변수처리해야하는지 ? -->
+											<div id="gridFGBrandList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										</div>
-									</td>
-								</tr>
-							</table>
-						</div>
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<th>적용상품</th>
+								<td>
+									<div class="padding10">
+										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyGoods">상품 추가</button>
+										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteApplyGoods">선택삭제</button>
+										<br/>
+										<div id="gridFGApplyGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+									</div>
+								</td>
+							</tr>
+						</table>
 					</div>
 				</div>
+			</div>
 
-				<div class="panelStyle" style="margin:unset;">
-					<!-- TITLE -->
-					<div class="panelTitle">
-						<h2>제외 대상 상품</h2>
-						<span class="panelControl">
+			<div class="panelStyle" style="margin:unset;">
+				<!-- TITLE -->
+				<div class="panelTitle">
+					<h2>제외 대상 상품</h2>
+					<span class="panelControl">
 							<i class="fa inner-fa-chevron-up"></i>    <!-- 열림/닫힘 화살표 -->
 						</span>
-					</div>
-					<!-- //TITLE -->
-					<div class="inner-panelContent">
-						<div class="panelContent">
-							<table class="frmStyle">
-								<colgroup>
-									<col width="10%"/>
-									<col width="90%"/>
-								</colgroup>
-								<tr>
-									<th>제외 대상</th>
-									<td>
-										<div class="padding10">
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddExceptGoods">상품 추가</button>
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteExtGoods">선택삭제</button>
-											<br/>
-											<div id="gridFGExceptGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-										</div>
-									</td>
-								</tr>
-							</table>
-						</div>
+				</div>
+				<!-- //TITLE -->
+				<div class="inner-panelContent">
+					<div class="panelContent">
+						<table class="frmStyle">
+							<colgroup>
+								<col width="10%"/>
+								<col width="90%"/>
+							</colgroup>
+							<tr>
+								<th>제외 대상</th>
+								<td>
+									<div class="padding10">
+										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddExceptGoods">상품 추가</button>
+										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteExtGoods">선택삭제</button>
+										<br/>
+										<div id="gridFGExceptGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+									</div>
+								</td>
+							</tr>
+						</table>
 					</div>
 				</div>
+			</div>
 
-				<div class="panelStyle" style="margin:unset;">
-					<!-- TITLE -->
-					<div class="panelTitle">
-						<h2>할인 구간</h2>
-						<span class="panelControl">
+			<div class="panelStyle" style="margin:unset;">
+				<!-- TITLE -->
+				<div class="panelTitle">
+					<h2>할인 구간</h2>
+					<span class="panelControl">
 						<i class="fa inner-fa-chevron-up"></i>    <!-- 열림/닫힘 화살표 -->
 					</span>
-					</div>
-					<!-- //TITLE -->
-					<div class="inner-panelContent">
-						<div class="panelContent">
-							<table class="frmStyle">
-								<colgroup>
-									<col width="10%"/>
-									<col width="90%"/>
-								</colgroup>
-								<tr>
-									<th>할인 구간</th>
-									<td>
-										<div class="padding10">
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddSectionRow">행추가</button>
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelSectionRow">행삭제</button>
-											<br/>
-											<div id="gridSectionGbList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-										</div>
-									</td>
-								</tr>
-							</table>
-						</div>
+				</div>
+				<!-- //TITLE -->
+				<div class="inner-panelContent">
+					<div class="panelContent">
+						<table class="frmStyle">
+							<colgroup>
+								<col width="10%"/>
+								<col width="90%"/>
+							</colgroup>
+							<tr>
+								<th>할인 구간</th>
+								<td>
+									<div class="padding10">
+										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddSectionRow">행추가</button>
+										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelSectionRow">행삭제</button>
+										<br/>
+										<div id="gridSectionGbList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+									</div>
+								</td>
+							</tr>
+						</table>
 					</div>
 				</div>
+			</div>
 
-				<div class="panelStyle" style="margin:unset;">
-					<!-- TITLE -->
-					<div class="panelTitle">
-						<h2>업체 분담율</h2>
-						<span class="panelControl">
+			<div class="panelStyle" style="margin:unset;">
+				<!-- TITLE -->
+				<div class="panelTitle">
+					<h2>업체 분담율</h2>
+					<span class="panelControl">
 						<i class="fa inner-fa-chevron-up"></i>    <!-- 열림/닫힘 화살표 -->
 					</span>
-					</div>
-					<!-- //TITLE -->
-					<div class="inner-panelContent">
-						<div class="panelContent">
-							<table class="frmStyle">
-								<colgroup>
-									<col width="10%"/>
-									<col width="90%"/>
-								</colgroup>
-								<tr>
-									<th>업체 분담율</th>
-									<td>
-										<div class="padding10">
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyBurden">업체추가</button>
-											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelApplyBurden">선택삭제</button>
-											<br/>
-											<div id="gridApplyBurdenList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-										</div>
-									</td>
-								</tr>
-							</table>
-						</div>
+				</div>
+				<!-- //TITLE -->
+				<div class="inner-panelContent">
+					<div class="panelContent">
+						<table class="frmStyle">
+							<colgroup>
+								<col width="10%"/>
+								<col width="90%"/>
+							</colgroup>
+							<tr>
+								<th>업체 분담율</th>
+								<td>
+									<div class="padding10">
+										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyBurden">업체추가</button>
+										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelApplyBurden">선택삭제</button>
+										<br/>
+										<div id="gridApplyBurdenList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+									</div>
+								</td>
+							</tr>
+						</table>
 					</div>
 				</div>
-			</form>
-
-			<ul class="panelBar">
-				<li  class="right">
-					<!-- <th:block th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}"> -->
-						<!--<button type="button" class="btn btnRight btn-success btn-lg" id="btnSearchList">목록</button>-->
-						<button type="button" th:if="${mode == 'N'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterSave">저장</button>
-						<button type="button" th:if="${mode == 'U'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterUpdate">수정</button>
-					<!--<button type="button" class="btn btnRight btn-success btn-lg" id="btnChangeStatIng">진행</button>
-                    	<button type="button" class="btn btnRight btn-success btn-lg" id="btnPromotionDelete">삭제</button>
-                    	<button type="button" class="btn btnRight btn-success btn-lg" id="btnPromotionStop">중지</button>-->
-                	<!-- </th:block> -->
-				</li>
-			</ul>
-		</div>	
+			</div>
+		</form>
+
+		<ul class="panelBar">
+			<li  class="right">
+				<!-- <th:block th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}"> -->
+				<!--<button type="button" class="btn btnRight btn-success btn-lg" id="btnSearchList">목록</button>-->
+				<button type="button" th:if="${mode == 'N'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterSave">저장</button>
+				<button type="button" th:if="${mode == 'U'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterUpdate">수정</button>
+				<!--<button type="button" class="btn btnRight btn-success btn-lg" id="btnChangeStatIng">진행</button>
+                    <button type="button" class="btn btnRight btn-success btn-lg" id="btnPromotionDelete">삭제</button>
+                    <button type="button" class="btn btnRight btn-success btn-lg" id="btnPromotionStop">중지</button>-->
+				<!-- </th:block> -->
+			</li>
+		</ul>
 	</div>
-
-	<script th:inline="javascript">
-		// 상세 조회시 데이터 리스트
-		var mode = [[${mode}]];
-		var tmtbMstInfo = [[${tmtbMstInfo}]];
-		var tmtbSectionValList = [[${tmtbSectionValList}]];
-		var tmtbSupplyCompList = [[${tmtbSupplyCompList}]];
-		var tmtbBrandList = [[${tmtbBrandList}]];
-		var tmtbApplyGoodsList = [[${tmtbApplyGoodsList}]];
-		var tmtbExceptGoodsList = [[${tmtbExceptGoodsList}]];
-		var tmtbBurdenList = [[${tmtbBurdenList}]];
-
-		// 공통 코드 리스트
-		var FGAddGoodsStatList = gagajf.convertToArray([[${goodsStatList}]]);		// 상품 상태 리스트
-		var sectionGbList = gagajf.convertToArray([[${sectionGbList}]]);	// 할인구간 리스트
-		var dcWayList = gagajf.convertToArray([[${dcWayList}]]);	// 할인구분 리스트
-		var applyGoodsGbList = gagajf.convertToArray([[${applyGoodsGbList}]]);	// 적용 상품구분 목록
-		var exceptGoodsGbList = gagajf.convertToArray([[${exceptGoodsGbList}]]);	// 제외 상품구분 목록
-
-		// 공급업체 리스트 설정
-		var columnFGCompanyList = [
-			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-			{headerName: "공급처ID", field: "supplyCompCd", width: 120, cellClass: 'text-center'},
-			{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
-			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
-			{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
-		];
-		// 브랜드 리스트 설정
-		var columnBrandList = [
-			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-			{headerName: "브랜드ID", field: "brandCd", width: 120, cellClass: 'text-center'},
-			{headerName: "브랜드명", field: "brandEnm", width: 120, cellClass: 'text-center'},
-			{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
-			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
-			{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
-		];
-		// 적용상품 리스트 설정
-		var columnApplyGoodsList = [
-			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-			{headerName: "상품구분", field: "goodsGb", width: 100, cellClass: 'text-center',
-				cellEditor: 'agRichSelectCellEditor',
-				cellEditorParams: { values: gagaAgGrid.extractValues(applyGoodsGbList), required: true },
-				valueFormatter: function (params) { return gagaAgGrid.lookupValue(applyGoodsGbList, params.value); },
-				valueParser: function (params) { return gagaAgGrid.lookupKey(applyGoodsGbList, params.newValue); }
-			},
-			{headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center'},
-			{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
-			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
-			{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
-		];
-		// 제외상품 리스트 설정
-		var columnExceptGoodsList = [
-			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-			{headerName: "상품구분", field: "goodsGb", width: 100, cellClass: 'text-center',
-				cellEditor: 'agRichSelectCellEditor',
-				cellEditorParams: { values: gagaAgGrid.extractValues(exceptGoodsGbList), required: true },
-				valueFormatter: function (params) { return gagaAgGrid.lookupValue(exceptGoodsGbList, params.value); },
-				valueParser: function (params) { return gagaAgGrid.lookupKey(exceptGoodsGbList, params.newValue); }
-			},
-			{headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center'},
-			{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
-			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
-			{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
-		];
-
-		// 업체분담율 리스트 설정
-		var columnApplyBurdenList = [
-			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-			{headerName: "업체ID", field: "tmtbSupplyCd" , width: 120, cellClass: 'text-center'},
-			{headerName: "분담율(%)", field: "tmtbBurdenRate" , width: 120, cellClass: 'text-center',required: true
-				,valueFormatter: function(params) {
-					if(params.value && params.value > 0) {
-						return params.value.addComma();
-					} else {
-						return '0';
-					}
-				},
-				cellEditor: 'textCellEditor',
-				cellEditorParams: { maxlength: 3, validType: 'numeric'}
-			},
-			{headerName: "사용여부", field: "useYn" , width: 120, cellClass: 'text-center'},
-			{headerName: "시퀀스", field: "tmtbBurdenSq", width: 150, cellClass: 'text-center', hide: true}
-		];
-
-		// 구간 할인/혜택 설정
-		var columnSectionGbList = [
-			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-			{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
-			{headerName: "시퀀스", field: "tmtbSq", width: 100, cellClass: 'text-center', hide: true},
-			{headerName: "할인구간", field: "sectionGb", width: 100, cellClass: 'text-center',
-				cellEditor: 'agRichSelectCellEditor',
-				cellEditorParams: { values: gagaAgGrid.extractValues(sectionGbList), required: true },
-				valueFormatter: function (params) { return gagaAgGrid.lookupValue(sectionGbList, params.value); },
-				valueParser: function (params) { return gagaAgGrid.lookupKey(sectionGbList, params.newValue); }
-			},
-			{headerName: "구간값", field: "sectionVal", width: 100, cellClass: 'text-right', required: true
-				,valueFormatter: function(params) {
-					if(params.value && params.value > 0) {
-						return params.value.addComma();
-					} else {
-						return '0';
-					}
-				},
-				cellEditor: 'textCellEditor',
-				cellEditorParams: { maxlength: 14, validType: 'numeric'}
+</div>
+
+<script th:inline="javascript">
+	// 상세 조회시 데이터 리스트
+	var mode = [[${mode}]];
+	var tmtbMstInfo = [[${tmtbMstInfo}]];
+	var tmtbSectionValList = [[${tmtbSectionValList}]];
+	var tmtbSupplyCompList = [[${tmtbSupplyCompList}]];
+	var tmtbBrandList = [[${tmtbBrandList}]];
+	var tmtbApplyGoodsList = [[${tmtbApplyGoodsList}]];
+	var tmtbExceptGoodsList = [[${tmtbExceptGoodsList}]];
+	var tmtbBurdenList = [[${tmtbBurdenList}]];
+
+	// 공통 코드 리스트
+	var FGAddGoodsStatList = gagajf.convertToArray([[${goodsStatList}]]);		// 상품 상태 리스트
+	var sectionGbList = gagajf.convertToArray([[${sectionGbList}]]);	// 할인구간 리스트
+	var dcWayList = gagajf.convertToArray([[${dcWayList}]]);	// 할인구분 리스트
+	var applyGoodsGbList = gagajf.convertToArray([[${applyGoodsGbList}]]);	// 적용 상품구분 목록
+	var exceptGoodsGbList = gagajf.convertToArray([[${exceptGoodsGbList}]]);	// 제외 상품구분 목록
+
+	// 공급업체 리스트 설정
+	var columnFGCompanyList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "공급처ID", field: "supplyCompCd", width: 120, cellClass: 'text-center'},
+		{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
+		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
+	];
+	// 브랜드 리스트 설정
+	var columnBrandList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "브랜드ID", field: "brandCd", width: 120, cellClass: 'text-center'},
+		{headerName: "브랜드명", field: "brandEnm", width: 120, cellClass: 'text-center'},
+		{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
+		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
+	];
+	// 적용상품 리스트 설정
+	var columnApplyGoodsList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "상품구분", field: "goodsGb", width: 100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(applyGoodsGbList), required: true },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(applyGoodsGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(applyGoodsGbList, params.newValue); }
+		},
+		{headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
+		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
+	];
+	// 제외상품 리스트 설정
+	var columnExceptGoodsList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "상품구분", field: "goodsGb", width: 100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(exceptGoodsGbList), required: true },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(exceptGoodsGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(exceptGoodsGbList, params.newValue); }
+		},
+		{headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
+		{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center', hide: true}
+	];
+
+	// 업체분담율 리스트 설정
+	var columnApplyBurdenList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "업체ID", field: "tmtbSupplyCd" , width: 120, cellClass: 'text-center'},
+		{headerName: "분담율(%)", field: "tmtbBurdenRate" , width: 120, cellClass: 'text-center',required: true
+			,valueFormatter: function(params) {
+				if(params.value && params.value > 0) {
+					return params.value.addComma();
+				} else {
+					return '0';
+				}
 			},
-			{headerName: "할인구분", field: "dcWay", width: 100, cellClass: 'text-center',
-				cellEditor: 'agRichSelectCellEditor',
-				cellEditorParams: { values: gagaAgGrid.extractValues(dcWayList), required: true },
-				valueFormatter: function (params) { return gagaAgGrid.lookupValue(dcWayList, params.value); },
-				valueParser: function (params) { return gagaAgGrid.lookupKey(dcWayList, params.newValue); }
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 3, validType: 'numeric'}
+		},
+		{headerName: "사용여부", field: "useYn" , width: 120, cellClass: 'text-center'},
+		{headerName: "시퀀스", field: "tmtbBurdenSq", width: 150, cellClass: 'text-center', hide: true}
+	];
+
+	// 구간 할인/혜택 설정
+	var columnSectionGbList = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+		{headerName: "시퀀스", field: "tmtbSq", width: 100, cellClass: 'text-center', hide: true},
+		{headerName: "할인구간", field: "sectionGb", width: 100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(sectionGbList), required: true },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(sectionGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(sectionGbList, params.newValue); }
+		},
+		{headerName: "구간값", field: "sectionVal", width: 100, cellClass: 'text-right', required: true
+			,valueFormatter: function(params) {
+				if(params.value && params.value > 0) {
+					return params.value.addComma();
+				} else {
+					return '0';
+				}
 			},
-			{headerName: "할인값", field: "dcVal", width: 100, cellClass: 'text-right', required: true
-				,valueFormatter: function(params) {
-					if(params.value && params.value > 0) {
-						return params.value.addComma();
-					} else {
-						return '0';
-					}
-				},
-				cellEditor: 'textCellEditor',
-				cellEditorParams: { maxlength: 14, validType: 'numeric'}
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{headerName: "할인구분", field: "dcWay", width: 100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(dcWayList), required: true },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(dcWayList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(dcWayList, params.newValue); }
+		},
+		{headerName: "할인값", field: "dcVal", width: 100, cellClass: 'text-right', required: true
+			,valueFormatter: function(params) {
+				if(params.value && params.value > 0) {
+					return params.value.addComma();
+				} else {
+					return '0';
+				}
 			},
-			{headerName: "구간시퀀스", field: "tmtbSectionSq", width: 150, cellClass: 'text-center', hide: true},
-			{headerName: "할인값시퀀스", field: "tmtbValSq", width: 150, cellClass: 'text-center', hide: true}
-		];
-
-		// 공급업체 리스트 설정
-		var gridOptionsFGCompanyList = gagaAgGrid.getGridOptions(columnFGCompanyList);
-		gridOptionsFGCompanyList.rowSelection = "multiple";
-		// 브랜드 리스트 설정
-		var gridOptionsFGBrandList = gagaAgGrid.getGridOptions(columnBrandList);
-		gridOptionsFGBrandList.rowSelection = "multiple";
-		// 적용상품 리스트 설정
-		var gridOptionsFGApplyGoodsList = gagaAgGrid.getGridOptions(columnApplyGoodsList);
-		// Grid editable
-		gridOptionsFGApplyGoodsList.defaultColDef.editable = true;
-		gridOptionsFGApplyGoodsList.rowSelection = "multiple";
-		// 제외상품 리스트 설정
-		var gridOptionsFGExceptGoodsList = gagaAgGrid.getGridOptions(columnExceptGoodsList);
-		gridOptionsFGExceptGoodsList.rowSelection = "multiple";
-		// 업체분담율 리스트 설정
-		var gridOptionsApplyBurdenList = gagaAgGrid.getGridOptions(columnApplyBurdenList);
-		gridOptionsApplyBurdenList.rowSelection = "multiple";
-		// 구간 할인/혜택 설정
-		var gridOptionsSectionGbList = gagaAgGrid.getGridOptions(columnSectionGbList);
-		// Grid editable
-		gridOptionsSectionGbList.defaultColDef.editable = true;
-		// Add on options
-		gridOptionsSectionGbList.suppressRowClickSelection = true;
-		gridOptionsSectionGbList.rowSelection = "multiple";
-		gridOptionsSectionGbList.stopEditingWhenGridLosesFocus = true;
-
-		$(document).ready(function() {
-			// 1.그리드 그리기
-			gagaAgGrid.createGrid("gridFGPromotionCompanyList", gridOptionsFGCompanyList);
-			gagaAgGrid.createGrid("gridFGBrandList", gridOptionsFGBrandList);
-			gagaAgGrid.createGrid("gridFGApplyGoodsList", gridOptionsFGApplyGoodsList);
-			gagaAgGrid.createGrid("gridFGExceptGoodsList", gridOptionsFGExceptGoodsList);
-			gagaAgGrid.createGrid("gridApplyBurdenList", gridOptionsApplyBurdenList);
-			gagaAgGrid.createGrid("gridSectionGbList", gridOptionsSectionGbList);
-
-			// 2. 그리드 데이터 바인딩
-			if(mode == "U"){
-				gridOptionsFGCompanyList.api.setRowData(tmtbSupplyCompList);
-				gridOptionsFGBrandList.api.setRowData(tmtbBrandList);
-				gridOptionsFGApplyGoodsList.api.setRowData(tmtbApplyGoodsList);
-				gridOptionsFGExceptGoodsList.api.setRowData(tmtbExceptGoodsList);
-				gridOptionsSectionGbList.api.setRowData(tmtbSectionValList)
-				gridOptionsApplyBurdenList.api.setRowData(tmtbBurdenList);
-
-				$('#moreBetterForm input[name=tmtbNm]').val(tmtbMstInfo.tmtbNm);
-				$('#moreBetterForm input[name=tmtbStdt]').val(tmtbMstInfo.tmtbStdt);
-				$('#moreBetterForm input[name=tmtbEddt]').val(tmtbMstInfo.tmtbEddt);
-				$("input:radio[name='disTmtbStat']:radio[value="+tmtbMstInfo.tmtbStat+"]").prop('checked', true); // 선택하기
-				$("input:radio[name='sectionGb']:radio[value="+tmtbMstInfo.sectionGb+"]").prop('checked', true); // 선택하기
-				$("input:radio[name='dcWay']:radio[value="+tmtbMstInfo.dcWay+"]").prop('checked', true); // 선택하기
-				$("input:radio[name='multiYn']:radio[value="+tmtbMstInfo.multiYn+"]").prop('checked', true); // 선택하기
-
-			}
-
-			// 구분 -> 대기로 체크
-			if(mode=="N"){
-				$("input:radio[name='disTmtbStat']:radio[value='G232_10']").prop('checked', true); // 선택하기
-			}
-			cfnCreateCalendar('#tmtbTerms', 'tmtbStdt', 'tmtbEddt', true, '행사기간', 'X');
-		});
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{headerName: "구간시퀀스", field: "tmtbSectionSq", width: 150, cellClass: 'text-center', hide: true},
+		{headerName: "할인값시퀀스", field: "tmtbValSq", width: 150, cellClass: 'text-center', hide: true}
+	];
+
+	// 공급업체 리스트 설정
+	var gridOptionsFGCompanyList = gagaAgGrid.getGridOptions(columnFGCompanyList);
+	gridOptionsFGCompanyList.rowSelection = "multiple";
+	// 브랜드 리스트 설정
+	var gridOptionsFGBrandList = gagaAgGrid.getGridOptions(columnBrandList);
+	gridOptionsFGBrandList.rowSelection = "multiple";
+	// 적용상품 리스트 설정
+	var gridOptionsFGApplyGoodsList = gagaAgGrid.getGridOptions(columnApplyGoodsList);
+	// Grid editable
+	gridOptionsFGApplyGoodsList.defaultColDef.editable = true;
+	gridOptionsFGApplyGoodsList.rowSelection = "multiple";
+	// 제외상품 리스트 설정
+	var gridOptionsFGExceptGoodsList = gagaAgGrid.getGridOptions(columnExceptGoodsList);
+	gridOptionsFGExceptGoodsList.rowSelection = "multiple";
+	// 업체분담율 리스트 설정
+	var gridOptionsApplyBurdenList = gagaAgGrid.getGridOptions(columnApplyBurdenList);
+	gridOptionsApplyBurdenList.rowSelection = "multiple";
+	// 구간 할인/혜택 설정
+	var gridOptionsSectionGbList = gagaAgGrid.getGridOptions(columnSectionGbList);
+	// Grid editable
+	gridOptionsSectionGbList.defaultColDef.editable = true;
+	// Add on options
+	gridOptionsSectionGbList.suppressRowClickSelection = true;
+	gridOptionsSectionGbList.rowSelection = "multiple";
+	gridOptionsSectionGbList.stopEditingWhenGridLosesFocus = true;
+
+	$(document).ready(function() {
+		// 1.그리드 그리기
+		gagaAgGrid.createGrid("gridFGPromotionCompanyList", gridOptionsFGCompanyList);
+		gagaAgGrid.createGrid("gridFGBrandList", gridOptionsFGBrandList);
+		gagaAgGrid.createGrid("gridFGApplyGoodsList", gridOptionsFGApplyGoodsList);
+		gagaAgGrid.createGrid("gridFGExceptGoodsList", gridOptionsFGExceptGoodsList);
+		gagaAgGrid.createGrid("gridApplyBurdenList", gridOptionsApplyBurdenList);
+		gagaAgGrid.createGrid("gridSectionGbList", gridOptionsSectionGbList);
+
+		// 2. 그리드 데이터 바인딩
+		if(mode == "U"){
+			gridOptionsFGCompanyList.api.setRowData(tmtbSupplyCompList);
+			gridOptionsFGBrandList.api.setRowData(tmtbBrandList);
+			gridOptionsFGApplyGoodsList.api.setRowData(tmtbApplyGoodsList);
+			gridOptionsFGExceptGoodsList.api.setRowData(tmtbExceptGoodsList);
+			gridOptionsSectionGbList.api.setRowData(tmtbSectionValList)
+			gridOptionsApplyBurdenList.api.setRowData(tmtbBurdenList);
+
+			$('#moreBetterForm input[name=tmtbNm]').val(tmtbMstInfo.tmtbNm);
+			$('#moreBetterForm input[name=tmtbStdt]').val(tmtbMstInfo.tmtbStdt);
+			$('#moreBetterForm input[name=tmtbEddt]').val(tmtbMstInfo.tmtbEddt);
+			$("input:radio[name='disTmtbStat']:radio[value="+tmtbMstInfo.tmtbStat+"]").prop('checked', true); // 선택하기
+			$("input:radio[name='sectionGb']:radio[value="+tmtbMstInfo.sectionGb+"]").prop('checked', true); // 선택하기
+			$("input:radio[name='dcWay']:radio[value="+tmtbMstInfo.dcWay+"]").prop('checked', true); // 선택하기
+			$("input:radio[name='multiYn']:radio[value="+tmtbMstInfo.multiYn+"]").prop('checked', true); // 선택하기
 
-		// 수정 버튼 클릭시
-		$('#btnMorebetterUpdate').on('click', function() {
-			// validation
-			if (!gagajf.validation('#moreBetterForm'))
-				return false;
+		}
 
-			// 행사기간 확인
-			let fromDate = $('#moreBetterForm input[name=tmtbStdt]').val();
-			let toDate = $('#moreBetterForm input[name=tmtbEddt]').val();
+		// 구분 -> 대기로 체크
+		if(mode=="N"){
+			$("input:radio[name='disTmtbStat']:radio[value='G232_10']").prop('checked', true); // 선택하기
+		}
+		cfnCreateCalendar('#tmtbTerms', 'tmtbStdt', 'tmtbEddt', true, '행사기간', 'X');
+	});
+
+	// 수정 버튼 클릭시
+	$('#btnMorebetterUpdate').on('click', function() {
+		// validation
+		if (!gagajf.validation('#moreBetterForm'))
+			return false;
+
+		// 행사기간 확인
+		let fromDate = $('#moreBetterForm input[name=tmtbStdt]').val();
+		let toDate = $('#moreBetterForm input[name=tmtbEddt]').val();
+
+		if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+			mcxDialog.alert("행사 기간 시작일자와 종료일자를 입력하세요.");
+			$('#moreBetterForm input[name=tmtbStdt]').focus();
+			return false;
+		}
 
-			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
-				mcxDialog.alert("행사 기간 시작일자와 종료일자를 입력하세요.");
-				$('#moreBetterForm input[name=tmtbStdt]').focus();
-				return false;
-			}
+		if (fromDate > toDate) {
+			mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+			$('#moreBetterForm input[name=tmtbStdt]').focus();
+			return false;
+		}
 
-			if (fromDate > toDate) {
-				mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
-				$('#moreBetterForm input[name=tmtbStdt]').focus();
-				return false;
+		// disabled 값 넘겨주기
+		$('#moreBetterForm input[name=tmtbSq]').val($('#moreBetterForm input[name=disTmtbSq]').val());
+		$('#moreBetterForm input[name=tmtbStat]').val($('input:radio[name="disTmtbStat"]:checked').val());
+
+		mcxDialog.confirm('수정하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var compAllData = gagaAgGrid.selectedRowData(gridOptionsFGCompanyList);
+				var brandAllData = gagaAgGrid.selectedRowData(gridOptionsFGBrandList);
+				var applyAllData = gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList);
+				var exceptAllData = gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList);
+				var burdenAllData = gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList);
+				var sectionGbAllData = gagaAgGrid.selectedRowData(gridOptionsSectionGbList);
+
+				var jsonSupplyCompData = JSON.stringify(compAllData);
+				$('#moreBetterForm input[name=supplyCompList]').val(jsonSupplyCompData);
+				var jsonBrandData = JSON.stringify(brandAllData);
+				$('#moreBetterForm input[name=brandList]').val(jsonBrandData);
+				var jsonApplyData = JSON.stringify(applyAllData);
+				$('#moreBetterForm input[name=applyGoodsList]').val(jsonApplyData);
+				var jsonExceptData = JSON.stringify(exceptAllData);
+				$('#moreBetterForm input[name=exceptGoodsList]').val(jsonExceptData);
+				var jsonSectionGbData = JSON.stringify(sectionGbAllData);
+				$('#moreBetterForm input[name=sectionGbList]').val(jsonSectionGbData);
+				var jsonBurdenData = JSON.stringify(burdenAllData);
+				$('#moreBetterForm input[name=burdenList]').val(jsonBurdenData);
+
+				var jsonData = JSON.stringify($('#moreBetterForm').serializeObject());
+				gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, function() {
+					fnMorebetterFormClose();
+					$('#btnInit').trigger('click');
+					$('#btnSearch').trigger('click');
+				});
 			}
-
-			// disabled 값 넘겨주기
-			$('#moreBetterForm input[name=tmtbSq]').val($('#moreBetterForm input[name=disTmtbSq]').val());
-			$('#moreBetterForm input[name=tmtbStat]').val($('input:radio[name="disTmtbStat"]:checked').val());
-
-			mcxDialog.confirm('수정하시겠습니까?', {
-				cancelBtnText: "취소",
-				sureBtnText: "확인",
-				sureBtnClick: function(){
-					var compAllData = gagaAgGrid.selectedRowData(gridOptionsFGCompanyList);
-					var brandAllData = gagaAgGrid.selectedRowData(gridOptionsFGBrandList);
-					var applyAllData = gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList);
-					var exceptAllData = gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList);
-					var burdenAllData = gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList);
-					var sectionGbAllData = gagaAgGrid.selectedRowData(gridOptionsSectionGbList);
-
-					var jsonSupplyCompData = JSON.stringify(compAllData);
-					$('#moreBetterForm input[name=supplyCompList]').val(jsonSupplyCompData);
-					var jsonBrandData = JSON.stringify(brandAllData);
-					$('#moreBetterForm input[name=brandList]').val(jsonBrandData);
-					var jsonApplyData = JSON.stringify(applyAllData);
-					$('#moreBetterForm input[name=applyGoodsList]').val(jsonApplyData);
-					var jsonExceptData = JSON.stringify(exceptAllData);
-					$('#moreBetterForm input[name=exceptGoodsList]').val(jsonExceptData);
-					var jsonSectionGbData = JSON.stringify(sectionGbAllData);
-					$('#moreBetterForm input[name=sectionGbList]').val(jsonSectionGbData);
-					var jsonBurdenData = JSON.stringify(burdenAllData);
-					$('#moreBetterForm input[name=burdenList]').val(jsonBurdenData);
-
-					var jsonData = JSON.stringify($('#moreBetterForm').serializeObject());
-					gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, function() {
-						fnMorebetterFormClose();
-						$('#btnInit').trigger('click');
-						$('#btnSearch').trigger('click');
-					});
-				}
-			});
 		});
+	});
+
+	// 저장 버튼 클릭시
+	$('#btnMorebetterSave').on('click', function() {
+		// validation
+		if (!gagajf.validation('#moreBetterForm'))
+			return false;
+
+		// 행사기간 확인
+		let fromDate = $('#moreBetterForm input[name=tmtbStdt]').val();
+		let toDate = $('#moreBetterForm input[name=tmtbEddt]').val();
+
+		if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+			mcxDialog.alert("행사 기간 시작일자와 종료일자를 입력하세요.");
+			$('#moreBetterForm input[name=tmtbStdt]').focus();
+			return false;
+		}
 
-		// 저장 버튼 클릭시
-		$('#btnMorebetterSave').on('click', function() {
-			// validation
-			if (!gagajf.validation('#moreBetterForm'))
-				return false;
-
-			// 행사기간 확인
-			let fromDate = $('#moreBetterForm input[name=tmtbStdt]').val();
-			let toDate = $('#moreBetterForm input[name=tmtbEddt]').val();
-
-			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
-				mcxDialog.alert("행사 기간 시작일자와 종료일자를 입력하세요.");
-				$('#moreBetterForm input[name=tmtbStdt]').focus();
-				return false;
-			}
+		if (fromDate > toDate) {
+			mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+			$('#moreBetterForm input[name=tmtbStdt]').focus();
+			return false;
+		}
 
-			if (fromDate > toDate) {
-				mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
-				$('#moreBetterForm input[name=tmtbStdt]').focus();
-				return false;
-			}
+		// 각 ag-grid list 수량
+		let supplyCompCnt = gagaAgGrid.selectedRowData(gridOptionsFGCompanyList).length;
+		let brandCnt = gagaAgGrid.selectedRowData(gridOptionsFGBrandList).length;
+		let applyGoodsCnt = gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList).length;
+		let exceptGoodsCnt = gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList).length;
+		let applyBurdenCnt = gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList).length;
+		let sectionGbCnt = gagaAgGrid.selectedRowData(gridOptionsSectionGbList).length;
+
+		if(applyGoodsCnt < 1){
+			mcxDialog.alert("선택된 적용상품이 없습니다.");
+			return false;
+		}
+		if(sectionGbCnt < 1){
+			mcxDialog.alert("선택된 할인구간이 없습니다.");
+			return false;
+		}
 
-			// 각 ag-grid list 수량
-			let supplyCompCnt = gagaAgGrid.selectedRowData(gridOptionsFGCompanyList).length;
-			let brandCnt = gagaAgGrid.selectedRowData(gridOptionsFGBrandList).length;
-			let applyGoodsCnt = gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList).length;
-			let exceptGoodsCnt = gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList).length;
-			let applyBurdenCnt = gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList).length;
-			let sectionGbCnt = gagaAgGrid.selectedRowData(gridOptionsSectionGbList).length;
-
-			if(applyGoodsCnt < 1){
-				mcxDialog.alert("선택된 적용상품이 없습니다.");
-				return false;
-			}
-			if(sectionGbCnt < 1){
-				mcxDialog.alert("선택된 할인구간이 없습니다.");
-				return false;
+		// disabled 값 넘겨주기
+		$('#moreBetterForm input[name=tmtbSq]').val($('#moreBetterForm input[name=disTmtbSq]').val());
+		$('#moreBetterForm input[name=tmtbStat]').val($('input:radio[name="disTmtbStat"]:checked').val());
+
+		mcxDialog.confirm('선택된 데이터를 저장하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var compAllData = gagaAgGrid.selectedRowData(gridOptionsFGCompanyList);
+				var brandAllData = gagaAgGrid.selectedRowData(gridOptionsFGBrandList);
+				var applyAllData = gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList);
+				var exceptAllData = gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList);
+				var burdenAllData = gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList);
+				var sectionGbAllData = gagaAgGrid.selectedRowData(gridOptionsSectionGbList);
+
+				var jsonSupplyCompData = JSON.stringify(compAllData);
+				$('#moreBetterForm input[name=supplyCompList]').val(jsonSupplyCompData);
+				var jsonBrandData = JSON.stringify(brandAllData);
+				$('#moreBetterForm input[name=brandList]').val(jsonBrandData);
+				var jsonApplyData = JSON.stringify(applyAllData);
+				$('#moreBetterForm input[name=applyGoodsList]').val(jsonApplyData);
+				var jsonExceptData = JSON.stringify(exceptAllData);
+				$('#moreBetterForm input[name=exceptGoodsList]').val(jsonExceptData);
+				var jsonBurdenData = JSON.stringify(burdenAllData);
+				$('#moreBetterForm input[name=burdenList]').val(jsonBurdenData);
+
+				var jsonSectionGbData = JSON.stringify(sectionGbAllData);
+				$('#moreBetterForm input[name=sectionGbList]').val(jsonSectionGbData);
+
+				var jsonData = JSON.stringify($('#moreBetterForm').serializeObject());
+				gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, function() {
+					fnMorebetterFormClose();
+					$('#btnInit').trigger('click');
+					$('#btnSearch').trigger('click');
+				});
 			}
-
-			// disabled 값 넘겨주기
-			$('#moreBetterForm input[name=tmtbSq]').val($('#moreBetterForm input[name=disTmtbSq]').val());
-			$('#moreBetterForm input[name=tmtbStat]').val($('input:radio[name="disTmtbStat"]:checked').val());
-
-			mcxDialog.confirm('선택된 데이터를 저장하시겠습니까?', {
-				cancelBtnText: "취소",
-				sureBtnText: "확인",
-				sureBtnClick: function(){
-					var compAllData = gagaAgGrid.selectedRowData(gridOptionsFGCompanyList);
-					var brandAllData = gagaAgGrid.selectedRowData(gridOptionsFGBrandList);
-					var applyAllData = gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList);
-					var exceptAllData = gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList);
-					var burdenAllData = gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList);
-					var sectionGbAllData = gagaAgGrid.selectedRowData(gridOptionsSectionGbList);
-
-					var jsonSupplyCompData = JSON.stringify(compAllData);
-					$('#moreBetterForm input[name=supplyCompList]').val(jsonSupplyCompData);
-					var jsonBrandData = JSON.stringify(brandAllData);
-					$('#moreBetterForm input[name=brandList]').val(jsonBrandData);
-					var jsonApplyData = JSON.stringify(applyAllData);
-					$('#moreBetterForm input[name=applyGoodsList]').val(jsonApplyData);
-					var jsonExceptData = JSON.stringify(exceptAllData);
-					$('#moreBetterForm input[name=exceptGoodsList]').val(jsonExceptData);
-					var jsonBurdenData = JSON.stringify(burdenAllData);
-					$('#moreBetterForm input[name=burdenList]').val(jsonBurdenData);
-
-					var jsonSectionGbData = JSON.stringify(sectionGbAllData);
-					$('#moreBetterForm input[name=sectionGbList]').val(jsonSectionGbData);
-
-					var jsonData = JSON.stringify($('#moreBetterForm').serializeObject());
-					gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, function() {
-						fnMorebetterFormClose();
-						$('#btnInit').trigger('click');
-						$('#btnSearch').trigger('click');
-					});
-				}
-			});
-
 		});
 
-		// 공급업체 설정 / 업체 추가 콜백함수
-		var fnSetPopupComapnyInfo = function(result) {
-			// 기존 리스트 데이터 for
-			for(let i = 0 ; i < result.length ; i++) {
-				let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);		// 받아온 모든 데이터
+	});
 
-				// 받아온 data for
-				for(let j = 0 ; j < gridListValue.length ; j++) {
-					// 동일한 data는 추가하지 않음
-					if(gridListValue[j].supplyCompCd == result[i].supplyCompCd) {	addChk = false;	}		// 중복체크
-				}
+	// 공급업체 설정 / 업체 추가 콜백함수
+	var fnSetPopupComapnyInfo = function(result) {
+		// 기존 리스트 데이터 for
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);		// 받아온 모든 데이터
 
-				// 중복되지 않은 데이터 리스트에 추가
-				if(addChk) {
-					gagaAgGrid.addRowData(gridOptionsFGCompanyList, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_13"});
-				}
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				// 동일한 data는 추가하지 않음
+				if(gridListValue[j].supplyCompCd == result[i].supplyCompCd) {	addChk = false;	}		// 중복체크
 			}
-		};
 
-		// 브랜드 설정 / 브랜드 추가 콜백함수 (단수로 가져오므로 복수일 경우에 수정 확인 필요)
-		var fnSetPopupBrandInfo = function(result) {
-			for(let i = 0 ; i < result.length ; i++) {
-				let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);		// 받아온 모든 데이터
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(gridOptionsFGCompanyList, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_13"});
+			}
+		}
+	};
 
-				// 받아온 data for
-				for(let j = 0 ; j < gridListValue.length ; j++) {
-					if(gridListValue[j].brandCd == result[i].brandCd) {	addChk = false;	}					// 중복체크
-				}
+	// 브랜드 설정 / 브랜드 추가 콜백함수 (단수로 가져오므로 복수일 경우에 수정 확인 필요)
+	var fnSetPopupBrandInfo = function(result) {
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);		// 받아온 모든 데이터
 
-				// 중복되지 않은 데이터 리스트에 추가
-				if(addChk) {
-					gagaAgGrid.addRowData(gridOptionsFGBrandList, {"brandCd" : result[i].brandCd, "brandEnm" : result[i].brandEnm, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_12"});
-				}
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				if(gridListValue[j].brandCd == result[i].brandCd) {	addChk = false;	}					// 중복체크
 			}
-		};
-
-		// 분담업체율 설정 / 업체 추가 콜백함수
-		var fnSetPopupApplyBurdenInfo = function(result) {
-			// 기존 리스트 데이터 for
-			for(let i = 0 ; i < result.length ; i++) {
-				//console.log('old i::'+i+"::"+result[i].supplyCompCd);
-				let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList);		// 받아온 모든 데이터
-
-				// 받아온 data for
-				for(let j = 0 ; j < gridListValue.length ; j++) {
-					//console.log('new add j::'+j+":supplyCompCd:"+gridListValue[j].tmtbSupplyCd);
-					// 동일한 data는 추가하지 않음
-					if(gridListValue[j].tmtbSupplyCd == result[i].supplyCompCd) {	addChk = false;	}		// 중복체크
-				}
 
-				// 중복되지 않은 데이터 리스트에 추가
-				if(addChk) {
-					//gagaAgGrid.addRowData(gridOptionsApplyBurdenList, result[i], "tmtbSupplyCd");
-					gagaAgGrid.addRowData(gridOptionsApplyBurdenList, {"tmtbSupplyCd" : result[i].supplyCompCd, "useYn" : result[i].useYn});
-				}
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(gridOptionsFGBrandList, {"brandCd" : result[i].brandCd, "brandEnm" : result[i].brandEnm, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_12"});
 			}
-		};
-
-		// 적용 상품 리스트 콜백함수
-		var fnSetPopupApplyGoodsInfo = function(result) {
-			gridAddGoodsList(gridOptionsFGApplyGoodsList, result , "apply");
-		};
-
-		// 제외 상품 리스트 콜백함수
-		var fnSetPopupExceptGoodsInfo = function(result) {
-			gridAddGoodsList(gridOptionsFGExceptGoodsList, result , "except");
-		};
-
-
-		// ag-grid 상품관련 list 콜백함수
-		function gridAddGoodsList(OriginGridListOption, result, gubun) {
-			var goodsGbVal = "G800_10";
-			if(gubun == 'except'){
-				goodsGbVal = "G800_30";
+		}
+	};
+
+	// 분담업체율 설정 / 업체 추가 콜백함수
+	var fnSetPopupApplyBurdenInfo = function(result) {
+		// 기존 리스트 데이터 for
+		for(let i = 0 ; i < result.length ; i++) {
+			//console.log('old i::'+i+"::"+result[i].supplyCompCd);
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList);		// 받아온 모든 데이터
+
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				//console.log('new add j::'+j+":supplyCompCd:"+gridListValue[j].tmtbSupplyCd);
+				// 동일한 data는 추가하지 않음
+				if(gridListValue[j].tmtbSupplyCd == result[i].supplyCompCd) {	addChk = false;	}		// 중복체크
 			}
 
-			for(let i = 0 ; i < result.length ; i++) {
-				let addChk = true, gridListValue = gagaAgGrid.getAllRowData(OriginGridListOption);		// 받아온 모든 데이터
-
-				// 받아온 data for
-				for(let j = 0 ; j < gridListValue.length ; j++) {
-					if(gridListValue[j].goodsCd == result[i].goodsCd) {	addChk = false;	}				// 중복체크
-				}
-
-				// 중복되지 않은 데이터 리스트에 추가
-				if(addChk) {
-					//gagaAgGrid.addRowData(OriginGridListOption, result[i], "goodsCd");
-					gagaAgGrid.addRowData(OriginGridListOption, {"goodsGb": goodsGbVal, "goodsCd" : result[i].goodsCd, "goodsNm" : result[i].goodsNm, "targetGb" : "G260_10"});
-				}
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				//gagaAgGrid.addRowData(gridOptionsApplyBurdenList, result[i], "tmtbSupplyCd");
+				gagaAgGrid.addRowData(gridOptionsApplyBurdenList, {"tmtbSupplyCd" : result[i].supplyCompCd, "useYn" : result[i].useYn});
 			}
 		}
+	};
 
-		// 공급업체 설정 업체 추가 버튼 클릭시
-		$('#moreBetterForm #btnAddCompany').on('click', function() {
-			cfnOpenCompanyListPopup("fnSetPopupComapnyInfo");
-		});
+	// 적용 상품 리스트 콜백함수
+	var fnSetPopupApplyGoodsInfo = function(result) {
+		gridAddGoodsList(gridOptionsFGApplyGoodsList, result , "apply");
+	};
 
-		// 브랜드 추가 버튼 클릭시 (복수 브랜드때 수정 필요)
-		$('#moreBetterForm #btnAddBrand').on('click', function() {
-			cfnOpenBrandListPopup("fnSetPopupBrandInfo", "M");
-		});
-
-		// 적용 상품 추가 버튼 클릭시
-		$('#moreBetterForm #btnAddApplyGoods').on('click', function() {
-			cfnOpenGoodsPopup("fnSetPopupApplyGoodsInfo");
-		});
-		// 제외 상품 추가 버튼 클릭시
-		$('#moreBetterForm #btnAddExceptGoods').on('click', function() {
-			cfnOpenGoodsPopup("fnSetPopupExceptGoodsInfo");
-		});
-		// 업체분담율 추가 버튼 클릭시
-		$('#moreBetterForm #btnAddApplyBurden').on('click', function() {
-			//cfnOpenApplyBurdenPopup("fnSetPopupApplyBurdenInfo");
-			cfnOpenCompanyListPopup("fnSetPopupApplyBurdenInfo");
-		});
+	// 제외 상품 리스트 콜백함수
+	var fnSetPopupExceptGoodsInfo = function(result) {
+		gridAddGoodsList(gridOptionsFGExceptGoodsList, result , "except");
+	};
 
-		/*
-		// 공급업체 설정 선택삭제 버튼 클릭시
-		$('#moreBetterForm #btnDeleteCompany').on('click', function() {
-			gridOptionsFGCompanyList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGCompanyList)});
-		});
-		// 브랜드 설정 선택삭제 버튼 클릭시
-		$('#moreBetterForm #btnDeleteBrand').on('click', function() {
-			gridOptionsFGBrandList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGBrandList)});
-		});
-		// 적용상품 선택삭제 버튼 클릭시
-		$('#moreBetterForm #btnDeleteApplyGoods').on('click', function() {
-			gridOptionsFGApplyGoodsList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList)});
-		});
-		// 제외상품 선택삭제 버튼 클릭시
-		$('#moreBetterForm #btnDeleteExtGoods').on('click', function() {
-			gridOptionsFGExceptGoodsList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList)});
-		});
-		// 업체분담율 선택삭제 버튼 클릭시
-		$('#moreBetterForm #btnDelApplyBurden').on('click', function() {
-			gridOptionsApplyBurdenList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList)});
-		});
-		*/
-		//패널영역 줄이기
-		$(document).on("click",".panelControl .inner-fa-chevron-up", function() {
-			$(this).parent().parent().parent().find(".inner-panelContent").slideUp(100);
-			$(this).attr("class","fa inner-fa-chevron-down");
-		});
-		//패널영역 펼치기
-		$(document).on("click",".panelControl .inner-fa-chevron-down", function() {
-			$(this).parent().parent().parent().find(".inner-panelContent").slideDown(100);
-			$(this).attr("class","fa inner-fa-chevron-up");
-		});
 
-		// 창 닫기
-		var fnMorebetterFormClose = function(){
-			uifnPopupClose('popupMorebetterReg');
+	// ag-grid 상품관련 list 콜백함수
+	function gridAddGoodsList(OriginGridListOption, result, gubun) {
+		var goodsGbVal = "G800_10";
+		if(gubun == 'except'){
+			goodsGbVal = "G800_30";
 		}
 
-		// 구간할인 행추가
-		$('#btnAddSectionRow').on('click', function() {
-			var tmtbSq = $('#moreBetterForm input[name=disTmtbSq]').val();
-			var sectionGbValue = $('input:radio[name="sectionGb"]:checked').val();
-			var dcWayValue = $('input:radio[name="dcWay"]:checked').val();
-
-			var data = { tmtbSq: tmtbSq ,sectionGb: sectionGbValue, sectionVal: null, dcWay: dcWayValue, dcVal: null };
-			gagaAgGrid.addRowData(gridOptionsSectionGbList, data, "sectionVal");
-		});
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(OriginGridListOption);		// 받아온 모든 데이터
 
-		// 구간할인 행삭제
-		$('#btnDelSectionRow').on('click', function() {
-			var selectedData = gridOptionsSectionGbList.api.getSelectedRows();
-			if (selectedData.length == 0) {
-				mcxDialog.alert('선택된 행이 없습니다.');
-				return;
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				if(gridListValue[j].goodsCd == result[i].goodsCd) {	addChk = false;	}				// 중복체크
 			}
 
-			var removedData = gagaAgGrid.removeRowData(gridOptionsSectionGbList, false);
-
-			var arrSecionSq = [];
-
-			$.each(selectedData, function(idx, item) {
-				arrSecionSq.push(item.tmtbSectionSq);
-			});
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				//gagaAgGrid.addRowData(OriginGridListOption, result[i], "goodsCd");
+				gagaAgGrid.addRowData(OriginGridListOption, {"goodsGb": goodsGbVal, "goodsCd" : result[i].goodsCd, "goodsNm" : result[i].goodsNm, "targetGb" : "G260_10"});
+			}
+		}
+	}
+
+	// 공급업체 설정 업체 추가 버튼 클릭시
+	$('#moreBetterForm #btnAddCompany').on('click', function() {
+		cfnOpenCompanyListPopup("fnSetPopupComapnyInfo");
+	});
+
+	// 브랜드 추가 버튼 클릭시 (복수 브랜드때 수정 필요)
+	$('#moreBetterForm #btnAddBrand').on('click', function() {
+		cfnOpenBrandListPopup("fnSetPopupBrandInfo", "M");
+	});
+
+	// 적용 상품 추가 버튼 클릭시
+	$('#moreBetterForm #btnAddApplyGoods').on('click', function() {
+		cfnOpenGoodsPopup("fnSetPopupApplyGoodsInfo");
+	});
+	// 제외 상품 추가 버튼 클릭시
+	$('#moreBetterForm #btnAddExceptGoods').on('click', function() {
+		cfnOpenGoodsPopup("fnSetPopupExceptGoodsInfo");
+	});
+	// 업체분담율 추가 버튼 클릭시
+	$('#moreBetterForm #btnAddApplyBurden').on('click', function() {
+		//cfnOpenApplyBurdenPopup("fnSetPopupApplyBurdenInfo");
+		cfnOpenCompanyListPopup("fnSetPopupApplyBurdenInfo");
+	});
+
+	/*
+    // 공급업체 설정 선택삭제 버튼 클릭시
+    $('#moreBetterForm #btnDeleteCompany').on('click', function() {
+        gridOptionsFGCompanyList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGCompanyList)});
+    });
+    // 브랜드 설정 선택삭제 버튼 클릭시
+    $('#moreBetterForm #btnDeleteBrand').on('click', function() {
+        gridOptionsFGBrandList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGBrandList)});
+    });
+    // 적용상품 선택삭제 버튼 클릭시
+    $('#moreBetterForm #btnDeleteApplyGoods').on('click', function() {
+        gridOptionsFGApplyGoodsList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList)});
+    });
+    // 제외상품 선택삭제 버튼 클릭시
+    $('#moreBetterForm #btnDeleteExtGoods').on('click', function() {
+        gridOptionsFGExceptGoodsList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList)});
+    });
+    // 업체분담율 선택삭제 버튼 클릭시
+    $('#moreBetterForm #btnDelApplyBurden').on('click', function() {
+        gridOptionsApplyBurdenList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList)});
+    });
+    */
+	//패널영역 줄이기
+	$(document).on("click",".panelControl .inner-fa-chevron-up", function() {
+		$(this).parent().parent().parent().find(".inner-panelContent").slideUp(100);
+		$(this).attr("class","fa inner-fa-chevron-down");
+	});
+	//패널영역 펼치기
+	$(document).on("click",".panelControl .inner-fa-chevron-down", function() {
+		$(this).parent().parent().parent().find(".inner-panelContent").slideDown(100);
+		$(this).attr("class","fa inner-fa-chevron-up");
+	});
+
+	// 창 닫기
+	var fnMorebetterFormClose = function(){
+		uifnPopupClose('popupMorebetterReg');
+	}
+
+	// 구간할인 행추가
+	$('#btnAddSectionRow').on('click', function() {
+		var tmtbSq = $('#moreBetterForm input[name=disTmtbSq]').val();
+		var sectionGbValue = $('input:radio[name="sectionGb"]:checked').val();
+		var dcWayValue = $('input:radio[name="dcWay"]:checked').val();
+
+		var data = { tmtbSq: tmtbSq ,sectionGb: sectionGbValue, sectionVal: null, dcWay: dcWayValue, dcVal: null };
+		gagaAgGrid.addRowData(gridOptionsSectionGbList, data, "sectionVal");
+	});
+
+	// 구간할인 행삭제
+	$('#btnDelSectionRow').on('click', function() {
+		var selectedData = gridOptionsSectionGbList.api.getSelectedRows();
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
 
-			if (removedData.length > 0) {
+		var removedData = gagaAgGrid.removeRowData(gridOptionsSectionGbList, false);
 
-				mcxDialog.confirm('삭제하시겠습니까?', {
-					cancelBtnText: "취소",
-					sureBtnText: "확인",
-					sureBtnClick: function(){
-						var data = { arrSecionSq : arrSecionSq
-									,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-						};
+		var arrSectionSq = [];
 
-						var jsonData = JSON.stringify(data);
-						gagajf.ajaxJsonSubmit('/marketing/morebetter/sectionVal/delete', jsonData);
-					}
-				});
-			}
+		$.each(selectedData, function(idx, item) {
+			arrSectionSq.push(item.tmtbSectionSq);
 		});
 
-		// 할인구간 선택 시 기본 조건 변경
-		$("#moreBetterForm input[name=sectionGb]").bind('click change', function () {
-			var sectionGbValue = $(this).val();
-			var dcWayValue = $('input:radio[name="dcWay"]:checked').val();
-			var loopRowData = gagaAgGrid.getAllRowData(gridOptionsSectionGbList);
+		if (removedData.length > 0) {
 
-			if (loopRowData.length == 0) {
-				mcxDialog.alert('ROW 데이터가 없습니다.');
-				return;
-			}
+			mcxDialog.confirm('삭제하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function(){
+					var data = { arrSectionSq : arrSectionSq
+						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					};
 
-			for(i=0; i<loopRowData.length; i++){
-				loopRowData[i].sectionGb = sectionGbValue;
-				loopRowData[i].sectionVal = "";
-				loopRowData[i].dcWay = dcWayValue;
-				loopRowData[i].dcVal = "";
-			}
-			gridOptionsSectionGbList.api.setRowData(loopRowData);
-		});
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/sectionVal/delete', jsonData);
+				}
+			});
+		}
+	});
 
-		// 할인구분 선택 시 기본 조건 변경
-		$("#moreBetterForm input[name=dcWay]").bind('click change', function () {
-			var sectionGbValue = $('input:radio[name="sectionGb"]:checked').val();
-			var dcWayValue = $(this).val();
-			var loopRowData = gagaAgGrid.getAllRowData(gridOptionsSectionGbList);
+	// 할인구간 선택 시 기본 조건 변경
+	$("#moreBetterForm input[name=sectionGb]").bind('click change', function () {
+		var sectionGbValue = $(this).val();
+		var dcWayValue = $('input:radio[name="dcWay"]:checked').val();
+		var loopRowData = gagaAgGrid.getAllRowData(gridOptionsSectionGbList);
 
-			if (loopRowData.length == 0) {
-				mcxDialog.alert('ROW 데이터가 없습니다.');
-				return;
-			}
+		if (loopRowData.length == 0) {
+			mcxDialog.alert('ROW 데이터가 없습니다.');
+			return;
+		}
 
-			for(i=0; i<loopRowData.length; i++){
-				loopRowData[i].sectionGb = sectionGbValue;
-				loopRowData[i].sectionVal = "";
-				loopRowData[i].dcWay = dcWayValue;
-				loopRowData[i].dcVal = "";
-			}
-			gridOptionsSectionGbList.api.setRowData(loopRowData);
-		});
+		for(i=0; i<loopRowData.length; i++){
+			loopRowData[i].sectionGb = sectionGbValue;
+			loopRowData[i].sectionVal = "";
+			loopRowData[i].dcWay = dcWayValue;
+			loopRowData[i].dcVal = "";
+		}
+		gridOptionsSectionGbList.api.setRowData(loopRowData);
+	});
+
+	// 할인구분 선택 시 기본 조건 변경
+	$("#moreBetterForm input[name=dcWay]").bind('click change', function () {
+		var sectionGbValue = $('input:radio[name="sectionGb"]:checked').val();
+		var dcWayValue = $(this).val();
+		var loopRowData = gagaAgGrid.getAllRowData(gridOptionsSectionGbList);
+
+		if (loopRowData.length == 0) {
+			mcxDialog.alert('ROW 데이터가 없습니다.');
+			return;
+		}
 
-		// 공급업체 행삭제
-		$('#btnDeleteCompany').on('click', function() {
-			var selectedData = gridOptionsFGCompanyList.api.getSelectedRows();
-			if (selectedData.length == 0) {
-				mcxDialog.alert('선택된 행이 없습니다.');
-				return;
-			}
-			var removedData = gagaAgGrid.removeRowData(gridOptionsFGCompanyList, false);
-			var arrCompanySq = [];
-			$.each(selectedData, function(idx, item) {
-				arrCompanySq.push(item.tmtbGoodsSq);
-			});
-			if (removedData.length > 0) {
-				mcxDialog.confirm('삭제하시겠습니까?', {
-					cancelBtnText: "취소",
-					sureBtnText: "확인",
-					sureBtnClick: function(){
-						var data = { arrCompanySq : arrCompanySq
-							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-						};
-						var jsonData = JSON.stringify(data);
-						gagajf.ajaxJsonSubmit('/marketing/morebetter/supplyCompany/delete', jsonData);
-					}
-				});
-			}
+		for(i=0; i<loopRowData.length; i++){
+			loopRowData[i].sectionGb = sectionGbValue;
+			loopRowData[i].sectionVal = "";
+			loopRowData[i].dcWay = dcWayValue;
+			loopRowData[i].dcVal = "";
+		}
+		gridOptionsSectionGbList.api.setRowData(loopRowData);
+	});
+
+	// 공급업체 행삭제
+	$('#btnDeleteCompany').on('click', function() {
+		var selectedData = gridOptionsFGCompanyList.api.getSelectedRows();
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		var removedData = gagaAgGrid.removeRowData(gridOptionsFGCompanyList, false);
+		var arrCompanySq = [];
+		$.each(selectedData, function(idx, item) {
+			arrCompanySq.push(item.tmtbGoodsSq);
 		});
-
-		// 브랜드 행삭제
-		$('#btnDeleteBrand').on('click', function() {
-			var selectedData = gridOptionsFGBrandList.api.getSelectedRows();
-			if (selectedData.length == 0) {
-				mcxDialog.alert('선택된 행이 없습니다.');
-				return;
-			}
-			var removedData = gagaAgGrid.removeRowData(gridOptionsFGBrandList, false);
-			var arrBrandSq = [];
-			$.each(selectedData, function(idx, item) {
-				arrBrandSq.push(item.tmtbGoodsSq);
+		if (removedData.length > 0) {
+			mcxDialog.confirm('삭제하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function(){
+					var data = { arrCompanySq : arrCompanySq
+						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					};
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/supplyCompany/delete', jsonData);
+				}
 			});
-			if (removedData.length > 0) {
-				mcxDialog.confirm('삭제하시겠습니까?', {
-					cancelBtnText: "취소",
-					sureBtnText: "확인",
-					sureBtnClick: function(){
-						var data = { arrBrandSq : arrBrandSq
-							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-						};
-						var jsonData = JSON.stringify(data);
-						gagajf.ajaxJsonSubmit('/marketing/morebetter/brand/delete', jsonData);
-					}
-				});
-			}
+		}
+	});
+
+	// 브랜드 행삭제
+	$('#btnDeleteBrand').on('click', function() {
+		var selectedData = gridOptionsFGBrandList.api.getSelectedRows();
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		var removedData = gagaAgGrid.removeRowData(gridOptionsFGBrandList, false);
+		var arrBrandSq = [];
+		$.each(selectedData, function(idx, item) {
+			arrBrandSq.push(item.tmtbGoodsSq);
 		});
-
-		// 적용상품 행삭제
-		$('#btnDeleteApplyGoods').on('click', function() {
-			var selectedData = gridOptionsFGApplyGoodsList.api.getSelectedRows();
-			if (selectedData.length == 0) {
-				mcxDialog.alert('선택된 행이 없습니다.');
-				return;
-			}
-			var removedData = gagaAgGrid.removeRowData(gridOptionsFGApplyGoodsList, false);
-			var arrApplyGoodsSq = [];
-			$.each(selectedData, function(idx, item) {
-				arrApplyGoodsSq.push(item.tmtbGoodsSq);
+		if (removedData.length > 0) {
+			mcxDialog.confirm('삭제하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function(){
+					var data = { arrBrandSq : arrBrandSq
+						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					};
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/brand/delete', jsonData);
+				}
 			});
-			if (removedData.length > 0) {
-				mcxDialog.confirm('삭제하시겠습니까?', {
-					cancelBtnText: "취소",
-					sureBtnText: "확인",
-					sureBtnClick: function(){
-						var data = { arrApplyGoodsSq : arrApplyGoodsSq
-							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-						};
-						var jsonData = JSON.stringify(data);
-						gagajf.ajaxJsonSubmit('/marketing/morebetter/applyGoods/delete', jsonData);
-					}
-				});
-			}
+		}
+	});
+
+	// 적용상품 행삭제
+	$('#btnDeleteApplyGoods').on('click', function() {
+		var selectedData = gridOptionsFGApplyGoodsList.api.getSelectedRows();
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		var removedData = gagaAgGrid.removeRowData(gridOptionsFGApplyGoodsList, false);
+		var arrApplyGoodsSq = [];
+		$.each(selectedData, function(idx, item) {
+			arrApplyGoodsSq.push(item.tmtbGoodsSq);
 		});
-
-		// 제외상품 행삭제
-		$('#btnDeleteExtGoods').on('click', function() {
-			var selectedData = gridOptionsFGExceptGoodsList.api.getSelectedRows();
-			if (selectedData.length == 0) {
-				mcxDialog.alert('선택된 행이 없습니다.');
-				return;
-			}
-			var removedData = gagaAgGrid.removeRowData(gridOptionsFGExceptGoodsList, false);
-			var arrExceptGoodsSq = [];
-			$.each(selectedData, function(idx, item) {
-				arrExceptGoodsSq.push(item.tmtbGoodsSq);
+		if (removedData.length > 0) {
+			mcxDialog.confirm('삭제하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function(){
+					var data = { arrApplyGoodsSq : arrApplyGoodsSq
+						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					};
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/applyGoods/delete', jsonData);
+				}
 			});
-			if (removedData.length > 0) {
-				mcxDialog.confirm('삭제하시겠습니까?', {
-					cancelBtnText: "취소",
-					sureBtnText: "확인",
-					sureBtnClick: function(){
-						var data = { arrExceptGoodsSq : arrExceptGoodsSq
-							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-						};
-						var jsonData = JSON.stringify(data);
-						gagajf.ajaxJsonSubmit('/marketing/morebetter/exceptGoods/delete', jsonData);
-					}
-				});
-			}
+		}
+	});
+
+	// 제외상품 행삭제
+	$('#btnDeleteExtGoods').on('click', function() {
+		var selectedData = gridOptionsFGExceptGoodsList.api.getSelectedRows();
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		var removedData = gagaAgGrid.removeRowData(gridOptionsFGExceptGoodsList, false);
+		var arrExceptGoodsSq = [];
+		$.each(selectedData, function(idx, item) {
+			arrExceptGoodsSq.push(item.tmtbGoodsSq);
 		});
-
-		// 업체분담율 행삭제
-		$('#btnDelApplyBurden').on('click', function() {
-			var selectedData = gridOptionsApplyBurdenList.api.getSelectedRows();
-			if (selectedData.length == 0) {
-				mcxDialog.alert('선택된 행이 없습니다.');
-				return;
-			}
-			var removedData = gagaAgGrid.removeRowData(gridOptionsApplyBurdenList, false);
-			var arrBurdenSq = [];
-			$.each(selectedData, function(idx, item) {
-				arrBurdenSq.push(item.tmtbBurdenSq);
+		if (removedData.length > 0) {
+			mcxDialog.confirm('삭제하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function(){
+					var data = { arrExceptGoodsSq : arrExceptGoodsSq
+						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					};
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/exceptGoods/delete', jsonData);
+				}
 			});
-			if (removedData.length > 0) {
-				mcxDialog.confirm('삭제하시겠습니까?', {
-					cancelBtnText: "취소",
-					sureBtnText: "확인",
-					sureBtnClick: function(){
-						var data = { arrBurdenSq : arrBurdenSq
-							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
-						};
-						var jsonData = JSON.stringify(data);
-						gagajf.ajaxJsonSubmit('/marketing/morebetter/burden/delete', jsonData);
-					}
-				});
-			}
+		}
+	});
+
+	// 업체분담율 행삭제
+	$('#btnDelApplyBurden').on('click', function() {
+		var selectedData = gridOptionsApplyBurdenList.api.getSelectedRows();
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		var removedData = gagaAgGrid.removeRowData(gridOptionsApplyBurdenList, false);
+		var arrBurdenSq = [];
+		$.each(selectedData, function(idx, item) {
+			arrBurdenSq.push(item.tmtbBurdenSq);
 		});
+		if (removedData.length > 0) {
+			mcxDialog.confirm('삭제하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function(){
+					var data = { arrBurdenSq : arrBurdenSq
+						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					};
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/burden/delete', jsonData);
+				}
+			});
+		}
+	});
 
-		$(document).ready(function() {
+	$(document).ready(function() {
 
-		});
-	</script>
+	});
+</script>
 </html>

+ 127 - 127
style24.admin/src/main/webapp/WEB-INF/views/order/RefundAccountRegistForm.html

@@ -1,127 +1,127 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : OrderListForm.html
- * @desc    : 주문목록 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.01.04   jsh77b       최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="900">
-	<div class="panelStyle">
-		<div class="panelTitle">
-			<h2>환불계좌정보</h2>
-			<button type="button" class="close" onclick="uifnPopupClose('popupCreateRefundAccount');"><i class="fa fa-times"></i></button>
-		</div>
-		
-		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="orderRefundAccontForm">
-				<table class="frmStyle">
-					<colgroup>
-						<col style="width:160px;" />
-						<col />
-						<col />
-						<col />
-						<col />
-						<col />
-						<col />
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>은행</th>
-								<td>
-									<select name="bankCd">
-										<option value="">[선택하세요]</option>
-										<option th:if="${bankList}" th:each="oneData, status : ${bankList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-									</select>
-								</td>
-								<th>계좌번호</th>
-								<td><input type="text" name="accountNo" data-valid-type="numeric"></td>
-								<th>예금주</th>
-								<td><input type="text" name="accountNm"></td>
-							</th:block>
-							<td>
-								<button type="button" class="btn btn-success" id="saveAccountBtn" onclick="fnSaveAccount();">저장</button>
-							</td>
-						</tr>
-					</tbody>
-				</table>
-			</form>
-		</div>
-	</div>
-</div>
-
-<script th:inline="javascript">
-/*<![CDATA[*/
-/* 이벤트 바인딩 관련 */
-	var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
-	var ordNo 					= orderInfoList[0].ordNo;
-	var custNo 					= orderInfoList[0].custNo;
-
-	/* 환불계좌번호 저장 */
-	var fnSaveAccount = function(){
-		var bankCd 		= $("#orderRefundAccontForm select[name=bankCd]").val();
-		var accountNo 	= $("#orderRefundAccontForm input[name=accountNo]").val();
-		var accountNm 	= $("#orderRefundAccontForm input[name=accountNm]").val();
-
-		if (gagajf.isNull(bankCd)) {
-			mcxDialog.alert('은행을 선택하세요.');
-			return;
-		}
-
-		if (gagajf.isNull(accountNo)) {
-			mcxDialog.alert('계좌번호를 입력하세요.');
-			return;
-		}
-
-		if (gagajf.isNull(accountNm)) {
-			mcxDialog.alert('예금주를 입력하세요.');
-			return;
-		}
-
-		if (gagajf.isNull(ordNo) || gagajf.isNull(custNo)) {
-			mcxDialog.alert('주문정보를 다시 확인하시기 바랍니다..');
-			return;
-		}
-
-		mcxDialog.confirm("환불계좌를 저장하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function(){
-				var data = {};
-				data.ordNo 			= ordNo;
-				data.custNo 		= custNo;
-				data.bankCd 		= bankCd;
-				data.accountNo 		= accountNo;
-				data.accountNm 		= accountNm;
-				
-				var jsonData = JSON.stringify(data);
-				
-				gagajf.ajaxJsonSubmit('/order/account/save', jsonData, function(result){
-					uifnPopupClose('popupCreateRefundAccount');
-					fnBindOrderRfAccountInfo();
-				});
-			}
-		});
-	};
-
-	$(document).ready(function() {
-
-
-	});
-
-/*]]>*/
-</script>
-
-</html>
-
-
-
-
-
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderListForm.html
+ * @desc    : 주문목록 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.04   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="900">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>환불계좌정보</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupCreateRefundAccount');"><i class="fa fa-times"></i></button>
+		</div>
+
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
+			<form id="orderRefundAccontForm">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col />
+						<col />
+						<col />
+						<col />
+						<col />
+						<col />
+					</colgroup>
+					<tbody>
+					<tr>
+						<th>은행</th>
+						<td>
+							<select name="bankCd">
+								<option value="">[선택하세요]</option>
+								<option th:if="${bankList}" th:each="oneData, status : ${bankList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>계좌번호</th>
+						<td><input type="text" name="accountNo" data-valid-type="numeric"></td>
+						<th>예금주</th>
+						<td><input type="text" name="accountNm"></td>
+						</th:block>
+						<td>
+							<button type="button" class="btn btn-success" id="saveAccountBtn" onclick="fnSaveAccount();">저장</button>
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</form>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	/* 이벤트 바인딩 관련 */
+	var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
+	var ordNo 					= orderInfoList[0].ordNo;
+	var custNo 					= orderInfoList[0].custNo;
+
+	/* 환불계좌번호 저장 */
+	var fnSaveAccount = function(){
+		var bankCd 		= $("#orderRefundAccontForm select[name=bankCd]").val();
+		var accountNo 	= $("#orderRefundAccontForm input[name=accountNo]").val();
+		var accountNm 	= $("#orderRefundAccontForm input[name=accountNm]").val();
+
+		if (gagajf.isNull(bankCd)) {
+			mcxDialog.alert('은행을 선택하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(accountNo)) {
+			mcxDialog.alert('계좌번호를 입력하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(accountNm)) {
+			mcxDialog.alert('예금주를 입력하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(ordNo) || gagajf.isNull(custNo)) {
+			mcxDialog.alert('주문정보를 다시 확인하시기 바랍니다..');
+			return;
+		}
+
+		mcxDialog.confirm("환불계좌를 저장하시겠습니까?", {
+			cancelBtnText	: "취소",
+			sureBtnText		: "확인",
+			sureBtnClick	: function(){
+				var data = {};
+				data.ordNo 			= ordNo;
+				data.custNo 		= custNo;
+				data.bankCd 		= bankCd;
+				data.accountNo 		= accountNo;
+				data.accountNm 		= accountNm;
+
+				var jsonData = JSON.stringify(data);
+
+				gagajf.ajaxJsonSubmit('/order/account/save', jsonData, function(result){
+					uifnPopupClose('popupCreateRefundAccount');
+					fnBindOrderRfAccountInfo();
+				});
+			}
+		});
+	};
+
+	$(document).ready(function() {
+
+
+	});
+
+	/*]]>*/
+</script>
+
+</html>
+
+
+
+
+

+ 259 - 0
style24.admin/style24.admin.iml

@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <descriptors>
+          <deploymentDescriptor name="context.xml" url="file://$MODULE_DIR$/META-INF/context.xml" />
+          <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/WEB-INF/web.xml" />
+        </descriptors>
+        <webroots>
+          <root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
+        </webroots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration>
+        <fileset id="fileset" name="Spring Application Context" removed="false">
+          <file>file://$MODULE_DIR$/src/main/java/com/style24/admin/support/startup/TsaApplication.java</file>
+          <file>file://$MODULE_DIR$/src/main/java/com/style24/admin/support/config/TsaMybatisShopConfig.java</file>
+          <file>file://$MODULE_DIR$/src/main/java/com/style24/admin/support/config/TsaMybatisWmsConfig.java</file>
+          <file>file://$MODULE_DIR$/src/main/java/com/style24/admin/support/config/TsaRedisSessionConfig.java</file>
+          <file>file://$MODULE_DIR$/src/main/java/com/style24/admin/support/security/config/TsaSecurityConfig.java</file>
+          <file>file://$MODULE_DIR$/src/main/java/com/style24/admin/support/config/TsaThymeleafConfig.java</file>
+          <file>file://$MODULE_DIR$/src/main/java/com/style24/admin/support/config/TsaWebMvcConfig.java</file>
+          <file>file://$MODULE_DIR$/../style24.core/src/main/java/com/style24/core/support/config/TscJndiShopConfig.java</file>
+          <file>file://$MODULE_DIR$/../style24.core/src/main/java/com/style24/core/support/config/TscJndiWmsConfig.java</file>
+          <file>file://$MODULE_DIR$/../style24.core/src/main/java/com/style24/core/support/config/TscLocaleMessageConfig.java</file>
+          <file>file://$MODULE_DIR$/../style24.core/src/main/java/com/style24/core/support/config/TscRedisCacheConfig.java</file>
+        </fileset>
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../bin/jar/mysql-connector-java-8.0.21.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.3.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.3.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.security:spring-security-test:5.3.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.3.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-thymeleaf:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf-spring5:3.0.11.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.4.1" level="project" />
+    <orderEntry type="library" name="Maven: nz.net.ultraq.thymeleaf:thymeleaf-expression-processor:1.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.5.13" level="project" />
+    <orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf:3.0.11.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ognl:ognl:3.1.12" level="project" />
+    <orderEntry type="library" name="Maven: org.javassist:javassist:3.20.0-GA" level="project" />
+    <orderEntry type="library" name="Maven: org.attoparser:attoparser:2.0.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.unbescape:unbescape:1.1.6.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: servlets.com:cos:05Nov2002" level="project" />
+    <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" />
+    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
+    <orderEntry type="module-library">
+      <library name="Maven: devpia.dextuploadnj:dextuploadnj:2.3.2">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/dextuploadnj-2.3.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: devpia.dextuploadnj:devpia.dextuploadnj.support.spring:2.3.2">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/dextuploadnj.support.spring-2.3.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-core:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-core-1.7.1-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-security:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-security-1.7.1-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-parameter:1.7-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-parameter-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-rest:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-rest-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-util:1.7-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-excel:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-excel-1.7.1-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.5.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web-services:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.xml.messaging.saaj:saaj-impl:1.5.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.soap:jakarta.xml.soap-api:1.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jvnet.staxex:stax-ex:1.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.ws:jakarta.xml.ws-api:2.3.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.jws:jakarta.jws-api:2.1.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-ws-core:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-xml:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.12" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.37" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.37" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-data-redis:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-core:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
+    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+    <orderEntry type="module" module-name="style24.core" />
+  </component>
+</module>

+ 31 - 31
style24.batch/.classpath

@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry including="**/*.java" kind="src" output="target/classes" path="src/main/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry including="**/*.java" kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
 	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v9.0.22"/>
-	<classpathentry kind="lib" path="/style24.core/target/classes">
-		<attributes>
-			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/classes"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v9.0.22"/>
+	<classpathentry kind="lib" path="/style24.core/target/classes">
+		<attributes>
+			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/classes"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

+ 186 - 0
style24.batch/style24.batch.iml

@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots>
+          <root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
+        </webroots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-batch:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.batch:spring-batch-core:4.2.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.5.4" level="project" />
+    <orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.12" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.latencyutils:LatencyUtils:2.0.3" level="project" />
+    <orderEntry type="library" name="Maven: javax.batch:javax.batch-api:1.0" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.batch:spring-batch-infrastructure:4.2.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.8.RELEASE" level="project" />
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-core:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-core-1.7.1-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-parameter:1.7-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-parameter-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-rest:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-rest-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-util:1.7-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.5.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web-services:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.xml.messaging.saaj:saaj-impl:1.5.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.soap:jakarta.xml.soap-api:1.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jvnet.staxex:stax-ex:1.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.ws:jakarta.xml.ws-api:2.3.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.jws:jakarta.jws-api:2.1.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-ws-core:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-xml:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.12" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.37" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.37" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-data-redis:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-core:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
+    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+    <orderEntry type="module" module-name="style24.core" />
+  </component>
+</module>

+ 43 - 0
style24.core/src/main/java/META-INF/MANIFEST.MF

@@ -0,0 +1,43 @@
+Manifest-Version: 1.0
+Main-Class: 
+Class-Path: spring-data-redis-2.3.3.RELEASE.jar spring-boot-autoconfigur
+ e-2.3.3.RELEASE.jar spring-boot-starter-web-services-2.3.3.RELEASE.jar 
+ xmlbeans-2.6.0.jar logback-classic-1.2.3.jar stax-ex-1.8.3.jar spring-a
+ op-5.2.8.RELEASE.jar log4j-to-slf4j-2.13.3.jar saaj-impl-1.5.2.jar jack
+ son-databind-2.11.2.jar slf4j-api-1.7.30.jar netty-codec-4.1.51.Final.j
+ ar spring-boot-starter-web-2.3.3.RELEASE.jar spring-boot-starter-loggin
+ g-2.3.3.RELEASE.jar hibernate-validator-6.1.5.Final.jar spring-core-5.2
+ .8.RELEASE.jar poi-3.17.jar gagaframework-web-util-1.7-RELEASE.jar comm
+ ons-codec-1.14.jar jakarta.activation-1.2.2.jar jackson-module-paramete
+ r-names-2.11.2.jar spring-boot-starter-jdbc-2.3.3.RELEASE.jar lettuce-c
+ ore-5.3.3.RELEASE.jar gagaframework-web-rest-1.7-RELEASE.jar spring-boo
+ t-starter-2.3.3.RELEASE.jar jakarta.xml.soap-api-1.4.2.jar netty-buffer
+ -4.1.51.Final.jar curvesapi-1.04.jar jackson-annotations-2.11.2.jar jak
+ arta.annotation-api-1.3.5.jar poi-ooxml-schemas-3.17.jar httpcore-4.4.1
+ 3.jar mybatis-spring-boot-starter-2.1.3.jar gson-2.8.6.jar jackson-data
+ type-jsr310-2.11.2.jar spring-boot-starter-json-2.3.3.RELEASE.jar jakar
+ ta.activation-api-1.2.2.jar mybatis-3.5.5.jar spring-expression-5.2.8.R
+ ELEASE.jar spring-jcl-5.2.8.RELEASE.jar spring-ws-core-3.0.9.RELEASE.ja
+ r spring-data-commons-2.3.3.RELEASE.jar gagaframework-web-security-1.7.
+ 1-RELEASE.jar commons-lang3-3.10.jar snakeyaml-1.26.jar mybatis-spring-
+ 2.0.5.jar reactor-core-3.3.9.RELEASE.jar spring-boot-starter-validation
+ -2.3.3.RELEASE.jar commons-collections4-4.1.jar spring-session-data-red
+ is-2.3.0.RELEASE.jar spring-context-5.2.8.RELEASE.jar gagaframework-web
+ -parameter-1.7-RELEASE.jar spring-data-keyvalue-2.3.3.RELEASE.jar jacks
+ on-core-2.11.2.jar jakarta.xml.bind-api-2.3.3.jar reactive-streams-1.0.
+ 3.jar netty-resolver-4.1.51.Final.jar lombok-1.18.12.jar netty-transpor
+ t-4.1.51.Final.jar spring-context-support-5.2.8.RELEASE.jar jackson-dat
+ atype-jdk8-2.11.2.jar netty-handler-4.1.51.Final.jar stax-api-1.0.1.jar
+  mybatis-spring-boot-autoconfigure-2.1.3.jar httpclient-4.5.12.jar spri
+ ng-boot-starter-data-redis-2.3.3.RELEASE.jar spring-xml-3.0.9.RELEASE.j
+ ar HikariCP-3.4.5.jar spring-boot-starter-cache-2.3.3.RELEASE.jar log4j
+ -api-2.13.3.jar spring-beans-5.2.8.RELEASE.jar netty-common-4.1.51.Fina
+ l.jar commons-pool2-2.8.1.jar spring-webmvc-5.2.8.RELEASE.jar spring-we
+ b-5.2.8.RELEASE.jar gagaframework-web-core-1.7.1-RELEASE.jar spring-ses
+ sion-core-2.3.0.RELEASE.jar jakarta.validation-api-2.0.2.jar jboss-logg
+ ing-3.4.1.Final.jar spring-jdbc-5.2.8.RELEASE.jar spring-oxm-5.2.8.RELE
+ ASE.jar logback-core-1.2.3.jar spring-boot-2.3.3.RELEASE.jar jakarta.xm
+ l.ws-api-2.3.3.jar jul-to-slf4j-1.7.30.jar spring-tx-5.2.8.RELEASE.jar 
+ classmate-1.5.1.jar jakarta.el-3.0.3.jar poi-ooxml-3.17.jar jakarta.jws
+ -api-2.1.0.jar
+

+ 182 - 0
style24.core/style24.core.iml

@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/../style24.admin/target/classes" />
+    <output-test url="file://$MODULE_DIR$/../style24.admin/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-core:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/gagaframework-web-core-1.7.1-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-security:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/gagaframework-web-security-1.7.1-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-parameter:1.7-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/gagaframework-web-parameter-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-rest:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/gagaframework-web-rest-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-util:1.7-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/gagaframework-web-util-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.5.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web-services:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.xml.messaging.saaj:saaj-impl:1.5.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.soap:jakarta.xml.soap-api:1.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jvnet.staxex:stax-ex:1.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.ws:jakarta.xml.ws-api:2.3.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.jws:jakarta.jws-api:2.1.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-ws-core:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-xml:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.12" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.37" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.37" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-data-redis:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-core:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
+    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+  </component>
+</module>

+ 32 - 32
style24.front/.classpath

@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry including="**/*.java" kind="src" output="target/classes" path="src/main/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v9.0.22"/>
-	<classpathentry kind="lib" path="/style24.core/target/classes">
-		<attributes>
-			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/classes"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry including="**/*.java" kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v9.0.22"/>
+	<classpathentry kind="lib" path="/style24.core/target/classes">
+		<attributes>
+			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/classes"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

+ 207 - 0
style24.front/style24.front.iml

@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots>
+          <root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
+        </webroots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.3.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.3.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.security:spring-security-test:5.3.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.3.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-mobile:1.5.22.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.mobile:spring-mobile-device:1.1.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-thymeleaf:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf-spring5:3.0.11.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.4.1" level="project" />
+    <orderEntry type="library" name="Maven: nz.net.ultraq.thymeleaf:thymeleaf-expression-processor:1.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.5.13" level="project" />
+    <orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf:3.0.11.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ognl:ognl:3.1.12" level="project" />
+    <orderEntry type="library" name="Maven: org.javassist:javassist:3.20.0-GA" level="project" />
+    <orderEntry type="library" name="Maven: org.attoparser:attoparser:2.0.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.unbescape:unbescape:1.1.6.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: servlets.com:cos:05Nov2002" level="project" />
+    <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" />
+    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-core:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-core-1.7.1-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-security:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-security-1.7.1-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-parameter:1.7-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-parameter-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-rest:1.7.1-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-rest-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.gagaframework:gagaframework-web-util:1.7-RELEASE">
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.5.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web-services:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.xml.messaging.saaj:saaj-impl:1.5.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.soap:jakarta.xml.soap-api:1.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jvnet.staxex:stax-ex:1.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.ws:jakarta.xml.ws-api:2.3.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.jws:jakarta.jws-api:2.1.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-ws-core:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.ws:spring-xml:3.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.12" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.37" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.37" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.14" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.51.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-data-redis:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.session:spring-session-core:2.3.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
+    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+    <orderEntry type="module" module-name="style24.core" />
+  </component>
+</module>

+ 0 - 11
style24.front/target/classes/banner.txt

@@ -1,11 +0,0 @@
-  ______   ________  __      __  __        ________   ______   __    __        ________                               __     
- /      \ /        |/  \    /  |/  |      /        | /      \ /  |  /  |      /        |                             /  |    
-/$$$$$$  |$$$$$$$$/ $$  \  /$$/ $$ |      $$$$$$$$/ /$$$$$$  |$$ |  $$ |      $$$$$$$$/______    ______   _______   _$$ |_   
-$$ \__$$/    $$ |    $$  \/$$/  $$ |      $$ |__    $$____$$ |$$ |__$$ |      $$ |__  /      \  /      \ /       \ / $$   |  
-$$      \    $$ |     $$  $$/   $$ |      $$    |    /    $$/ $$    $$ |      $$    |/$$$$$$  |/$$$$$$  |$$$$$$$  |$$$$$$/   
- $$$$$$  |   $$ |      $$$$/    $$ |      $$$$$/    /$$$$$$/  $$$$$$$$ |      $$$$$/ $$ |  $$/ $$ |  $$ |$$ |  $$ |  $$ | __ 
-/  \__$$ |   $$ |       $$ |    $$ |_____ $$ |_____ $$ |_____       $$ |      $$ |   $$ |      $$ \__$$ |$$ |  $$ |  $$ |/  |
-$$    $$/    $$ |       $$ |    $$       |$$       |$$       |      $$ |      $$ |   $$ |      $$    $$/ $$ |  $$ |  $$  $$/ 
- $$$$$$/     $$/        $$/     $$$$$$$$/ $$$$$$$$/ $$$$$$$$/       $$/       $$/    $$/        $$$$$$/  $$/   $$/    $$$$/  
-                                                                                                                             
-:: (v1.0.0.RELEASE by tsinfotech.co.kr 2020) ::

BIN=BIN
style24.front/target/classes/com/style24/front/biz/dao/TsfFaqDao.class


BIN=BIN
style24.front/target/classes/com/style24/front/biz/dao/TsfLoginDao.class


BIN=BIN
style24.front/target/classes/com/style24/front/biz/dao/TsfNoticeDao.class


BIN=BIN
style24.front/target/classes/com/style24/front/biz/service/TsfFaqService.class


BIN=BIN
style24.front/target/classes/com/style24/front/biz/service/TsfLoginService.class


BIN=BIN
style24.front/target/classes/com/style24/front/biz/service/TsfNoticeService.class


BIN=BIN
style24.front/target/classes/com/style24/front/biz/web/TsfCallcenterController.class


BIN=BIN
style24.front/target/classes/com/style24/front/biz/web/TsfCustomerController.class


BIN=BIN
style24.front/target/classes/com/style24/front/biz/web/TsfIndexController.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/config/TsfMybatisShopConfig.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/config/TsfRedisSessionConfig.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/config/TsfThymeleafConfig.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/config/TsfWebMvcConfig.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/controller/TsfBaseController.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/controller/TsfCustomErrorController.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/env/TsfConstants.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/exception/TsfDormantAccountException.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/exception/TsfEmailDuplicationException.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/exception/TsfLockedAccountException.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/exception/TsfSecedeAccountException.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/exception/TsfSessionExpiredException.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/interceptor/TsfAflinkInterceptor.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/interceptor/TsfDefaultInterceptor.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/interceptor/TsfGoodsViewInterceptor.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/interceptor/TsfLoginCheckInterceptor.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/interceptor/TsfRememberMeInterceptor.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/interceptor/TsfReturnUrlInterceptor.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/security/TsfAuthenticationProvider.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/security/TsfLoginDetails.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/security/config/TsfSecurityConfig.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/security/filter/TsfAuthenticationFilter.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/security/handler/TsfLoginFailureHandler.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/security/handler/TsfLoginSuccessHandler.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/security/handler/TsfLogoutSuccessHandler.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/security/handler/TsfRememberMeSuccessHandler.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/security/session/TsfSession.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/startup/TsfApplication.class


BIN=BIN
style24.front/target/classes/com/style24/front/support/startup/TsfServletInitializer.class


BIN=BIN
style24.front/target/classes/com/style24/persistence/TsfPageRequest.class


BIN=BIN
style24.front/target/classes/com/style24/persistence/domain/Faq.class


BIN=BIN
style24.front/target/classes/com/style24/persistence/domain/Login.class


BIN=BIN
style24.front/target/classes/com/style24/persistence/domain/Notice.class


BIN=BIN
style24.front/target/classes/com/style24/persistence/domain/PersistentToken$PersistentTokenBuilder.class


BIN=BIN
style24.front/target/classes/com/style24/persistence/domain/PersistentToken.class


+ 0 - 93
style24.front/target/classes/com/style24/persistence/mybatis/TsfFaq.xml

@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.style24.front.biz.dao.TsfFaqDao">
-
-	<!-- Paging -->
-	<sql id="pageSql">
-		LIMIT #{pageable.startRow}, #{pageable.pageSize}
-	</sql>
-	<!--// Paging -->
-	
-	<!-- FAQ 자주 묻는 질문 목록 (10개) -->
-	<select id="getFaqLikesList" parameterType="String" resultType="Faq">
-		/* TsfFaq.getFaqLikesList */
-		SELECT FAQ_SQ   /*FAQ일련번호*/
-		     , SITE_CD  /*사이트코드(공통코드G000)*/
-		     , FAQ_TYPE /*FAQ유형(공통코드G046)*/
-		     , QUESTION /*질문*/
-		     , ANSWER   /*답변*/
-		     , DISP_ORD /*표시순서*/
-		FROM   TB_FAQ
-		WHERE  SITE_CD = #{siteCd}
-		AND    USE_YN = 'Y'
-		ORDER  BY DISP_ORD
-		LIMIT 10
-	</select>
-	
-	<!-- FAQ 총건수 -->
-	<select id="getFaqTotalCount" parameterType="Faq" resultType="int">
-		/* TsfFaq.getFaqTotalCount */
-		SELECT COUNT(*) AS CNT
-		FROM   TB_FAQ
-		WHERE  SITE_CD = #{siteCd}
-		<if test='faqType != null and faqType !=""'>
-		AND    FAQ_TYPE = #{faqType}
-		</if>
-		AND    USE_YN = 'Y'
-		<if test="searchTxt != null and searchTxt !=''">
-		AND    (
-		        LOWER(QUESTION) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
-		        OR
-		        LOWER(ANSWER) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
-		       )
-		</if>
-	</select>
-	
-	<!-- FAQ 목록 -->
-	<select id="getFaqList" parameterType="Faq" resultType="Faq">
-		/* TsfFaq.getFaqList */
-		SELECT FAQ_SQ   /*FAQ일련번호*/
-		     , SITE_CD  /*사이트코드(공통코드G000)*/
-		     , FAQ_TYPE /*FAQ유형(공통코드G046)*/
-		     , QUESTION /*질문*/
-		     , ANSWER   /*답변*/
-		     , DISP_ORD /*표시순서*/
-		FROM   TB_FAQ
-		WHERE  SITE_CD = #{siteCd}
-		<if test='faqType != null and faqType !=""'>
-		AND    FAQ_TYPE = #{faqType}
-		</if>
-		AND    USE_YN = 'Y'
-		<if test="searchTxt != null and searchTxt !=''">
-		AND    (
-		        LOWER(QUESTION) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
-		        OR
-		        LOWER(ANSWER) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
-		       )
-		</if>
-		ORDER  BY REG_DT DESC
-		<include refid="pageSql"></include>
-	</select>
-
-	<!-- FAQ 조회수 Update -->
-	<update id="updateFaqReadCount" parameterType="Integer">
-		/* TsfFaq.updateFaqReadCount */
-		UPDATE TB_FAQ
-		SET    READ_CNT = READ_CNT + 1
-		WHERE  FAQ_SQ = #{faqSq}
-	</update>
-
-	<!-- FAQ 상세 -->
-	<select id="getFaq" parameterType="Integer" resultType="Faq">
-		/* TsfFaq.getFaq */
-		SELECT FAQ_SQ                                         /*FAQ일련번호*/
-		     , FAQ_TYPE                                       /*FAQ유형*/
-		     , FN_GET_CODE_NM('G046',FAQ_TYPE) AS FAQ_TYPE_NM /*FAQ유형명*/
-		     , QUESTION                                       /*질문*/
-		     , ANSWER                                         /*답변*/
-		FROM   TB_FAQ
-		WHERE  FAQ_SQ = #{faqSq}
-		AND    USE_YN = 'Y'
-	</select>
-
-</mapper>

+ 0 - 192
style24.front/target/classes/com/style24/persistence/mybatis/TsfLogin.xml

@@ -1,192 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.style24.front.biz.dao.TsfLoginDao">
-
-	<!-- 로그인체크 정보 조회 -->
-	<select id="getLoginCheckInfo" parameterType="Login" resultType="Login">
-		/* TsfLogin.getLoginCheckInfo */
-		SELECT CUST_NO                                      --고객번호
-		     , CUST_ID                                      --고객ID
-		     , CUST_NM                                      --고객명
-		     , PASSWD                                       --비밀번호
-		     , CUST_GB                                      --고객구분
-		     , FN_GET_CODE_NM('G100',CUST_GB) AS CUST_GB_NM --고객구분명
-		     , CUST_STAT                                    --회원상태
-		     , EMAIL                                        --이메일
-		     , SNS_TYPE                                     --SNS유형
-		     , SNS_JOIN_ID                                  --SNS가입ID
-		     , NVL((SELECT LOGIN_FAIL_CNT
-		            FROM   TB_LOGIN_FAIL
-		            WHERE  LOGIN_ID = TO_CHAR(A.CUST_NO)
-		            AND    IP_ADDR = #{ipAddr}
-		            AND    SITE_CD = #{siteCd}
-		           ),0)    AS LOGIN_FAIL_CNT                --로그인실패건수
-		FROM   TB_CUSTOMER A
-		WHERE  CUST_STAT <![CDATA[<>]]> '40'                --전환대상고객제외
-		<choose>
-		    <when test="snsType != null and snsType != ''"> <!-- SNS로그인 -->
-		AND    (
-		        SNS_TYPE||'-'||SNS_JOIN_ID = #{custId}
-		        OR
-		        EMAIL = #{email}
-		       )
-		    </when>
-		    <otherwise> <!-- 일반로그인 -->
-		AND    CUST_ID = #{custId}
-		    </otherwise>
-		</choose>
-	</select>
-
-	<!-- 로그인실패 남기기 -->
-	<insert id="createLoginFail" parameterType="Login">
-		/* TsfLogin.createLoginFail */
-		MERGE INTO TB_LOGIN_FAIL
-		USING (
-		       SELECT TO_CHAR(CUST_NO) AS CUST_NO
-		       FROM   TB_CUSTOMER
-		       WHERE  CUST_ID = #{custId}
-		      ) B
-		ON    (
-		       LOGIN_ID = B.CUST_NO
-		AND    IP_ADDR = #{ipAddr}
-		AND    SITE_CD = #{siteCd}
-		      )
-		WHEN MATCHED THEN
-		    UPDATE
-		    SET    LOGIN_FAIL_CNT = DECODE(#{loginFailYn},'Y',LOGIN_FAIL_CNT + 1,0)
-		         , UPD_NO = B.CUST_NO
-		         , UPD_DT = NOW()
-		WHEN NOT MATCHED THEN
-		    INSERT (LOGIN_ID, IP_ADDR, SITE_CD, LOGIN_FAIL_CNT, REG_ID, REG_DT, UPD_NO, UPD_DT)
-		    VALUES (B.CUST_NO, #{ipAddr}, #{siteCd}, 1, B.CUST_NO, NOW(), B.CUST_NO, NOW())
-	</insert>
-
-	<!-- 로그인 실패건수 조회 -->
-	<select id="getLoginFailCount" parameterType="Login" resultType="int">
-		/* TsfLogin.getLoginFailCount */
-		SELECT NVL((SELECT LOGIN_FAIL_CNT
-		            FROM   TB_LOGIN_FAIL
-		            WHERE  LOGIN_ID = #{custNo}
-		            AND    IP_ADDR = #{ipAddr}
-		            AND    SITE_CD = #{siteCd}
-		           ),0)
-		FROM   DUAL
-	</select>
-
-	<!-- 최종로그인일시 Update -->
-	<update id="updateLastLoginDate" parameterType="Integer">
-		/* TsfLogin.updateLastLoginDate */
-		UPDATE TB_CUSTOMER
-		SET    LOGIN_LDT = NOW()
-		     , UPD_NO = #{custNo}
-		     , UPD_DT = NOW()
-		WHERE  CUST_NO = #{custNo}
-	</update>
-
-	<!-- 로그인이력 남기기 -->
-	<insert id="createLoginHistory" parameterType="Login">
-		/* TsfLogin.createLoginHistory */
-		INSERT INTO TB_LOGIN_HST (
-		       LOGIN_HST_SQ
-		     , LOGIN_ID
-		     , IP_ADDR
-		     , SITE_CD
-		     , FRONT_GB
-		     , LOGIN_DT
-		     , REG_ID
-		     , REG_DT
-		)
-		VALUES (
-		       SEQ_LOGIN_HST.NEXTVAL
-		     , #{custNo}
-		     , #{ipAddr}
-		     , #{siteCd}
-		     , #{frontGb}
-		     , NOW()
-		     , #{custNo}
-		     , NOW()
-		)
-	</insert>
-
-	<!-- 로그인 세션정보 조회 -->
-	<select id="getLoginSessionInfo" parameterType="Login" resultType="Login">
-		/* TsfLogin.getLoginSessionInfo */
-		SELECT CUST_NO                                                --고객번호
-		     , CUST_ID                                                --고객ID
-		     , CUST_NM                                                --고객명
-		     , PASSWD                                                 --비밀번호
-		     , CELL_PHNNO                                             --휴대전화번호
-		     , EMAIL                                                  --이메일
-		     , CUST_GB                                                --회원구분코드
-		     , FN_GET_CODE_NM('G100',CUST_GB)        AS CUST_GB_NM    --회원구분명
-		     , CUST_GRADE                                             --회원등급코드
-		     , FN_GET_CODE_NM('G110',CUST_GRADE)     AS CUST_GRADE_NM --회원등급명
-		     , SITE_CD                                                --사이트코드
-		     , TO_CHAR(LOGIN_LDT,'YYYYMMDDHH24MISS') AS LOGIN_LDT     --최종로그인일시
-		     , MANAGED_RSN                                            --관리대상지정사유(공통코드G120)
-		     , CASE WHEN ADD_MONTHS(PASSWD_CHG_DT,6) <![CDATA[<]]> NOW() THEN 'Y'
-		            ELSE 'N'
-		       END                                   AS PASSWD_CHG_YN --비밀번호변경도래여부
-		FROM   TB_CUSTOMER A
-		WHERE  CUST_ID = #{custId}
-		AND    CUST_STAT = '10' --활동회원
-	</select>
-
-	<!-- 로그인유지토큰 생성 -->
-	<insert id="createPersistentToken" parameterType="PersistentToken">
-		/* TsfLogin.createPersistentToken */
-		MERGE INTO TB_PERSISTENT_TOKEN
-		USING DUAL
-		ON    (
-		       CUST_NO = #{custNo}
-		       AND
-		       REMEMBERME_TOKEN = #{remembermeToken}
-		)
-		WHEN MATCHED THEN
-		    UPDATE
-		    SET    LIMIT_DT = #{limitDt}
-		WHEN NOT MATCHED THEN
-		    INSERT (
-		            CUST_NO
-		          , REMEMBERME_TOKEN
-		          , LIMIT_DT
-		    )
-		    VALUES (
-		           #{custNo}
-		         , #{remembermeToken}
-		         , NOW()
-		    )
-	</insert>
-
-	<!-- 로그인유지토큰 조회 -->
-	<select id="getPersistentToken" parameterType="String" resultType="PersistentToken">
-		/* TsfLogin.getPersistentToken */
-		SELECT PT.CUST_NO
-		     , PT.REMEMBERME_TOKEN
-		     , PT.LIMIT_DT
-		     , C.CUST_ID
-		FROM   TB_PERSISTENT_TOKEN PT
-		     , TB_CUSTOMER C
-		WHERE  PT.CUST_NO = C.CUST_NO
-		AND    PT.REMEMBERME_TOKEN = #{remembermeToken}
-		AND    NOW() <![CDATA[<=]]> PT.LIMIT_DT
-	</select>
-
-	<!-- 로그인유지토큰 갱신 -->
-	<update id="updatePersistentToken" parameterType="PersistentToken">
-		/* TsfLogin.updatePersistentToken */
-		UPDATE TB_PERSISTENT_TOKEN
-		SET    REMEMBERME_TOKEN = #{remembermeToken}
-		     , LIMIT_DT = #{limitDt}
-		WHERE  CUST_NO = #{custNo}
-		AND    REMEMBERME_TOKEN = #{prevRemembermeToken}
-	</update>
-
-	<!-- 로그인유지토근 삭제 -->
-	<delete id="deletePersistentToken" parameterType="String">
-		/* TsfLogin.deletePersistentToken */
-		DELETE FROM TB_PERSISTENT_TOKEN
-		WHERE  REMEMBERME_TOKEN = #{remembermeToken}
-	</delete>
-
-</mapper>

+ 0 - 69
style24.front/target/classes/com/style24/persistence/mybatis/TsfNotice.xml

@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.style24.front.biz.dao.TsfNoticeDao">
-
-	<!-- Paging -->
-	<sql id="pageSql">
-		LIMIT #{pageable.startRow}, #{pageable.pageSize}
-	</sql>
-	
-	<!-- 공지사항 전체 건수 조회 -->
-	<select id="getNoticeTotalCount" parameterType="Notice" resultType="int">
-		/* TsfNotice.getNoticeTotalCount */
-		SELECT COUNT(*)
-		FROM   TB_NOTICE A
-		WHERE  NOTICE_TYPE = 'G047_10' /*사이트공지*/
-		AND    USE_YN = 'Y'
-		AND    CURRENT_DATE() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		AND    EXISTS (SELECT 1
-		               FROM   TB_NOTICE_RECEIVER
-		               WHERE  NOTICE_SQ = A.NOTICE_SQ
-		               AND    RECEIVER_ID = #{siteCd}
-		              )
-	</select>
-	
-	<!-- 공지사항 목록 -->
-	<select id="getNoticeList" parameterType="Notice" resultType="Notice">
-		/* TsfNotice.getNoticeList */
-		SELECT NOTICE_SQ                                  /*공지사항일련번호*/
-		     , NOTICE_TITLE                               /*공지제목*/
-		     , NOTICE_CONTENT                             /*공지내용*/
-		     , READ_CNT                                   /*조회수*/
-		     , DATE_FORMAT(REG_DT,'%Y.%m.%d') AS REG_DT   /*등록일자*/
-		     , (SELECT COUNT(1)
-		        FROM   TB_NOTICE_FILE
-		        WHERE  NOTICE_SQ = A.NOTICE_SQ
-		       )                              AS FILE_CNT /*첨부파일건수*/
-		FROM   TB_NOTICE A
-		WHERE  NOTICE_TYPE = 'G047_10' /*사이트공지*/
-		AND    USE_YN =  'Y'
-		AND    CURRENT_DATE() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		AND    EXISTS (SELECT 1
-		               FROM   TB_NOTICE_RECEIVER
-		               WHERE  NOTICE_SQ = A.NOTICE_SQ
-		               AND    RECEIVER_ID = #{siteCd}
-		              )
-		ORDER  BY URGENT_YN DESC, REG_DT DESC
-		<include refid="pageSql"></include>
-	</select>
-
-	<!-- 공지사항 파일 목록 -->
-	<select id="getNoticeFileList" parameterType="Integer" resultType="Notice">
-		/* TsfNotice.getNoticeFileList */
-		SELECT NOTICE_SQ
-		     , SEQ
-		     , ORG_FILE_NM
-		     , SYS_FILE_NM
-		FROM   TB_NOTICE_FILE
-		WHERE  NOTICE_SQ = #{noticeSq}
-	</select>
-	
-	<!-- 공지사항  조회건수 Update -->
-	<update id="updateNoticeReadCount" parameterType="Integer">
-		/* TsfNotice.updateNoticeReadCount */
-		UPDATE TB_NOTICE
-		SET    READ_CNT = READ_CNT + 1
-		WHERE  NOTICE_SQ = #{noticeSq}
-	</update>
-
-</mapper>

+ 0 - 71
style24.front/target/classes/config/application-dev.yml

@@ -1,71 +0,0 @@
-spring:
-    profiles:
-        active: dev
-    cache:
-        type: redis
-    redis:
-        lettuce:
-            pool:
-                max-active: 10
-                max-idle: 10
-                min-idle: 2
-        host: 116.121.60.104
-        port: 6379
-        password: 
-
-logging.config: classpath:log/logback-dev.xml
-
-domain:
-    wivis: //116.121.60.104
-    image: //116.121.60.104:90
-    uximage: //116.121.60.104
-
-# SSL Server
-has-ssl: false
-
-upload:
-    default:
-        target.path: /home/app/www/data
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //116.121.60.104:90
-    goods:
-        target.path: /home/app/www/data/goods
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png
-        view: //image.style24.com/speedy_image-wivismall/goods
-    image:
-        target.path: /home/app/www/data
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png
-        view: //116.121.60.104:90
-    excel:
-        target.path: /home/app/www/data/excel
-        max.size: 10
-        allow.extension: xls|xlsx
-        view: //116.121.60.104:90/excel
-
-download.path: /home/app/www/data
-
-# SMTP(운영서버만 설정되어 있어 작동안함)
-mail:
-    host: mail.wivis.com
-    #    port: 465
-    username: admin@wivis.com
-    password: dnlqltm1!
-    protocol: smtp
-    #    tls: true
-    auth: true
-    from: admin@wivis.com
-    wivis.url: http://116.121.60.104
-    image.url: http://116.121.60.104/image/mailing
-    template.path: /home/app/www/front/WEB-INF/mail
-
-# PG
-pg:
-    nicepay:
-        merchantId: nictest00m
-        merchantKey: 33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A==
-        log.path: /home/app/logs/nicepay
-        account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
-        vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp

+ 0 - 72
style24.front/target/classes/config/application-locd.yml

@@ -1,72 +0,0 @@
-spring:
-    profiles:
-        active: locd
-    cache:
-        type: redis
-    redis:
-        lettuce:
-            pool:
-                max-active: 10
-                max-idle: 10
-                min-idle: 2
-        host: localhost
-        port: 6379
-        password: 
-
-logging:
-    config: classpath:log/logback-locd.xml
-
-# SSL Server
-has-ssl: false
-
-domain:
-    wivis: //ldfront.style24.com
-    image: //ldimage.style24.com
-    uximage: //ldfront.style24.com
-
-upload:
-    default:
-        target.path: /WIDE/workspace/files/data
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //ldimage.style24.com
-    goods:
-        target.path: /WIDE/workspace/files/data/goods
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png
-        view: //image.style24.com/speedy_image-wivismall/goods
-    image:
-        target.path: /WIDE/workspace/files/data
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png
-        view: //ldimage.style24.com
-    excel:
-        target.path: /WIDE/workspace/files/data/excel
-        max.size: 10
-        allow.extension: xls|xlsx
-        view: //ldimage.style24.com/excel
-
-download.path: /WIDE/workspace/files/data
-
-# SMTP(naver의 본인 username과 password, from(메일주소) 입려 후 테스트 하면 됨)
-mail:
-    host: mail.wivis.com
-    #    port: 465
-    username: admin@wivis.com
-    password: dnlqltm1!
-    protocol: smtp
-    #    tls: true
-    auth: true
-    from: admin@wivis.com
-    wivis.url: https://ldfront.style24.com
-    image.url: http://ldfront.style24.com/image/mailing
-    template.path: /WIDE/workspace/webapps/wivis/wivismall.front/src/main/webapp/WEB-INF/mail
-
-# PG
-pg:
-    nicepay:
-        merchantId: nictest00m
-        merchantKey: 33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A==
-        log.path: /WIDE/workspace/logs/wivis
-        account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
-        vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp

+ 0 - 73
style24.front/target/classes/config/application-locp.yml

@@ -1,73 +0,0 @@
-spring:
-    profiles:
-        active: locp
-    cache:
-        type: redis
-    redis:
-        lettuce:
-            pool:
-                max-active: 10
-                max-idle: 10
-                min-idle: 2
-        host: localhost
-        port: 6379
-        password: 
-
-logging:
-    config: classpath:log/logback-locp.xml
-
-# SSL Server
-has-ssl: false
-
-domain:
-    wivis: //lpfront.style24.com
-    image: //image.style24.com/speedy_image-wivismall
-    uximage: //lpfront.style24.com
-
-upload:
-    default:
-        target.path: /WIDE/workspace/files/data
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //image.style24.com/speedy_image-wivismall
-    goods:
-        target.path: /WIDE/workspace/files/data/goods
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png
-        view: //image.style24.com/speedy_image-wivismall/goods
-    image:
-        target.path: /WIDE/workspace/files/data
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png
-        view: //image.style24.com/speedy_image-wivismall
-    excel:
-        target.path: /WIDE/workspace/files/data/excel
-        max.size: 10
-        allow.extension: xls|xlsx
-        view: //lpimage.style24.com/excel
-
-download.path: /WIDE/workspace/files/data
-
-# SMTP(naver의 본인 username과 password, from(메일주소) 입려 후 테스트 하면 됨)
-mail:
-    host: mail.wivis.com
-    #    port: 465
-    username: admin@wivis.com
-    password: dnlqltm1!
-    protocol: smtp
-    #    tls: true
-    auth: true
-    from: admin@wivis.com
-    wivis.url: http://lpfront.style24.com
-    image.url: http://lpfront.style24.com/image/mailing
-    template.path: /WIDE/workspace/webapps/wivis/wivismall.front/src/main/webapp/WEB-INF/mail
-
-# PG
-pg:
-    nicepay:
-        merchantId: wivismallm
-        merchantKey: pXTdML8rIaOVCeXQQsyRp1uCfTSTT/n80BV4LCqa+/yJM64MYIqeBCIQdH1rKhJRwSOsdCxVPa1V6hRxkkdJxg==
-        cancelPwd: wivis@2020
-        log.path: /WIDE/workspace/logs/wivis
-        account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
-        vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp

+ 0 - 72
style24.front/target/classes/config/application-run.yml

@@ -1,72 +0,0 @@
-spring:
-    profiles:
-        active: run
-    cache:
-        type: redis
-    redis:
-        lettuce:
-            pool:
-                max-active: 10
-                max-idle: 10
-                min-idle: 2
-        host: 192.186.1.30
-        port: 6379
-        password: wivismall
-
-logging.config: classpath:log/logback-run.xml
-
-domain:
-    wivis: //www.style24.com
-    image: //image.style24.com/speedy_image-wivismall
-    uximage: //www.style24.com
-
-# SSL Server
-has-ssl: true
-
-upload:
-    default:
-        target.path: /app/was/deploy/wivismall.front/data
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //image.style24.com/speedy_image-wivismall
-    goods:
-        target.path: /app/was/deploy/wivismall.front/data/goods
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png
-        view: //image.style24.com/speedy_image-wivismall/goods
-    image:
-        target.path: /app/was/deploy/wivismall.front/data
-        max.size: 10
-        allow.extension: jpg|gif|jpeg|png
-        view: //image.style24.com/speedy_image-wivismall
-    excel:
-        target.path: /app/was/deploy/wivismall.front/data/excel
-        max.size: 10
-        allow.extension: xls|xlsx
-        view: //www.style24.com/excel
-
-download.path: /app/was/deploy/wivismall.front/data
-
-# SMTP
-mail:
-    host: mail.wivis.com
-    #    port: 465
-    username: admin@wivis.com
-    password: dnlqltm1!
-    protocol: smtp
-    #    tls: true
-    auth: true
-    from: admin@wivis.com
-    wivis.url: https://www.style24.com
-    image.url: http://www.style24.com/image/mailing
-    template.path: /app/was/deploy/wivismall.front/WEB-INF/mail
-
-# PG
-pg:
-    nicepay:
-        merchantId: wivismallm
-        merchantKey: pXTdML8rIaOVCeXQQsyRp1uCfTSTT/n80BV4LCqa+/yJM64MYIqeBCIQdH1rKhJRwSOsdCxVPa1V6hRxkkdJxg==
-        cancelPwd: wivis@2020
-        log.path: /app/was/applogs/nicepay
-        account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
-        vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp

+ 0 - 65
style24.front/target/classes/config/application.yml

@@ -1,65 +0,0 @@
-spring:
-    messages:
-        cache-duration: -1
-        basename: classpath:i18n/messages/message
-        encoding: UTF-8
-    thymeleaf:
-        check-template-location: true
-        prefix: /WEB-INF/views/
-        suffix: .html
-    servlet:
-        multipart:
-            max-file-size: 10MB
-            max-request-size: 10MB
-#    session.store-type: redis
-    data:
-        redis:
-            repositories:
-                enabled: true
-
-server:
-#    servlet:
-#        session:
-#            cookie:
-#                name: WSESSIONID
-#                secure: true
-    error.whitelabel.enabled: false
-
-# 네이버 API
-naver:
-    clientId: OMmbCMu7ac7GgYWgjlhv
-    clientSecret: jwRNdDbEBG
-    login.callbackUrl: /signin/snsLoginCallback?snsType=NV
-    shortUrl: https://openapi.naver.com/v1/util/shorturl
-    tokenUrl: https://nid.naver.com/oauth2.0/token
-    userInfoUrl : https://openapi.naver.com/v1/nid/me
-    authorizeUrl : https://nid.naver.com/oauth2.0/authorize
-
-# SPEEDY Image Upload
-speedy:
-    ftp:
-        host: fileupload.cdn.cloudn.co.kr
-        port: 21
-        username: speedy_image-wivismall
-        pwd: wZ31jS_!@
-
-#카카오 API
-kakao:
-    appId : 399207
-    appName : WIVISMALL
-    companyName : 위비스
-    restApiKey: 8f8db3657b60b2c83df79a37d38becd4
-    nativeAppKey : a4790e2102950309d87ad81a39c0597d
-    javascriptKey : f435c12d89ddb9cc6337f4cf0a05fd30
-    adminKey : 567e9476b15d2149c714aaecd0fee740
-    addressApiRequestUrl : https://dapi.kakao.com/v2/local/search/address.json?page=1&query=
-    login.callbackUrl: /signin/snsLoginCallback?snsType=KK
-    tokenUrl: https://kauth.kakao.com/oauth/token
-    userInfoUrl: https://kapi.kakao.com/v2/user/me
-    authorizeUrl: https://kauth.kakao.com/oauth/authorize
-    unlinkUrl : https://kapi.kakao.com/v1/user/unlink
-
-# APP 다운로드 URL
-app.down.url: 
-    ios: https://apps.apple.com/kr/app/WIVISMALL/id1517275108
-    aos: https://play.google.com/store/apps/details?id=com.wivis.wivismal

+ 0 - 87
style24.front/target/classes/i18n/messages/message_ko_KR.properties

@@ -1,87 +0,0 @@
-## -----------------------------------------------------------------------------
-## Message properties
-## -----------------------------------------------------------------------------
-SUCC_0001=\uC131\uACF5\uC801\uC73C\uB85C \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-SUCC_0002=\uC131\uACF5\uC801\uC73C\uB85C \uC218\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-SUCC_0003=\uC131\uACF5\uC801\uC73C\uB85C \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-SUCC_0004=\uC131\uACF5\uC801\uC73C\uB85C \uCC98\uB9AC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-SUCC_0005=\uC131\uACF5\uC801\uC73C\uB85C \uBC1C\uC1A1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-SUCC_0006=\uC131\uACF5\uC801\uC73C\uB85C \uBC1C\uD589\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-SUCC_0007=\uC131\uACF5\uC801\uC73C\uB85C \uC5C5\uB85C\uB4DC \uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-#SUCC_0008=\uC131\uACF5\uC801\uC73C\uB85C \uB4F1\uB85D\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-SUCC_0009=\uC131\uACF5\uC801\uC73C\uB85C \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-
-FAIL_0001=\uC624\uB958\uB85C \uC778\uD574 \uC800\uC7A5\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-FAIL_0002=\uC624\uB958\uB85C \uC778\uD574 \uC218\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-FAIL_0003=\uC624\uB958\uB85C \uC778\uD574 \uC0AD\uC81C\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-FAIL_0004=\uC624\uB958\uB85C \uC778\uD574 \uCC98\uB9AC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-FAIL_0005=\uC624\uB958\uB85C \uC778\uD574 \uBC1C\uC1A1\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-FAIL_0006=\uC624\uB958\uB85C \uC778\uD574 \uBC1C\uD589\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-FAIL_0007=\uC624\uB958\uB85C \uC778\uD574 \uC5C5\uB85C\uB4DC \uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-#FAIL_0008=\uC624\uB958\uB85C \uC778\uD574 \uB4F1\uB85D\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-FAIL_0009=\uC624\uB958\uB85C \uC778\uD574 \uBCC0\uACBD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-FAIL_1001=\uC800\uC7A5\uD560 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.
-FAIL_1002=\uC804\uC1A1\uD560 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.
-
-LOGN_0001=\uC785\uB825\uD558\uC2E0 \uC815\uBCF4\uB85C \uAC00\uC785\uB41C \uB0B4\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
-LOGN_0002=\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-LOGN_0003=\uB85C\uADF8\uC778 \uC0C1\uD0DC\uAC00 \uC544\uB2D9\uB2C8\uB2E4. \uB2E4\uC2DC \uB85C\uADF8\uC778 \uD574\uC8FC\uC138\uC694.
-LOGN_0004=\uBE44\uBC00\uBC88\uD638\uB97C \uBCC0\uACBD\uD55C \uB0A0\uB85C\uBD80\uD130 3\uAC1C\uC6D4\uC774 \uACBD\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-LOGN_0005=\uBE44\uBC00\uBC88\uD638\uAC00 5\uD68C \uC774\uC0C1 \uD2C0\uB824 \uACC4\uC815\uC774 \uC7A0\uACBC\uC2B5\uB2C8\uB2E4.
-LOGN_0006=\uD734\uBA74 \uD68C\uC6D0\uC785\uB2C8\uB2E4.
-LOGN_0007=\uD0C8\uD1F4 \uD68C\uC6D0\uC785\uB2C8\uB2E4.
-LOGN_0008=\uC774\uBBF8 \uAC00\uC785\uD558\uC2E0 \uC774\uBA54\uC77C\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4.
-
-##\uC7A5\uBC14\uAD6C\uB2C8
-CART_0001=\uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uB2F4\uACBC\uC2B5\uB2C8\uB2E4.
-
-##\uC8FC\uBB38
-ORDER_0001=\uC8FC\uBB38\uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.
-ORDER_0002=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uACB0\uC81C\uC644\uB8CC][\uCD9C\uACE0\uC644\uB8CC] \uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uC0C1\uD488\uC900\uBE44\uC911\uC73C\uB85C \uBCC0\uACBD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
-ORDER_0003=\uD574\uB2F9 \uC0C1\uD488 \uBE0C\uB79C\uB4DC \uC218\uC815 \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
-ORDER_0004=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uC0C1\uD488\uC900\uBE44\uC911][\uAD6C\uB9E4\uD655\uC815] \uC0C1\uD0DC\uC5D0\uB9CC \uC1A1\uC7A5\uBC88\uD638\uB97C \uC785\uB825\uD558\uC2E4\uC218 \uC788\uC2B5\uB2C8\uB2E4.
-ORDER_0005=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uCD9C\uACE0\uC644\uB8CC]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uAD6C\uB9E4\uD655\uC815 \uC0C1\uD0DC\uB85C \uBCC0\uACBD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
-ORDER_0006=\uAD6C\uB9E4\uD655\uC815\uC744 \uD558\uC2E4\uC218 \uC788\uB294 \uC0C1\uD488\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \n\uBC18\uD488\uC774\uB098 \uAD50\uD658\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC2DC\uAE30 \uBC14\uB78D\uB2C8\uB2E4.
-ORDER_0007=\uC8FC\uBB38 \uC804\uCCB4\uCDE8\uC18C\uB97C \uD558\uC2E4\uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uAD50\uD658,\uBC18\uD488,\uCDE8\uC18C\uC911\uC778 \uC0C1\uD488\uC774 \uC788\uB294\uC9C0 \uD655\uC778 \uBC14\uB78D\uB2C8\uB2E4.
-ORDER_0008=\uD0C0 \uC5C5\uCCB4\uC758 \uC0C1\uD488\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uC804\uCCB4 \uBC18\uD488\uC744 \uC9C4\uD589\uD558\uC2E4\uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-ORDER_0009=\uD3EC\uC778\uD2B8 \uC6D0\uBCF5 \uCC98\uB9AC\uB97C \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
-ORDER_0010=\uACB0\uC81C \uCDE8\uC18C\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
-ORDER_0011=\uCE74\uB4DC \uACB0\uC81C\uC778 \uACBD\uC6B0\uC5D0\uB9CC \uBD80\uBD84\uCDE8\uC18C\uAC00 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0012=\uCDE8\uC18C\uC218\uB7C9\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694. \uCDE8\uC18C\uAC00\uB2A5 \uC218\uB7C9\uBCF4\uB2E4 \uB9CE\uC2B5\uB2C8\uB2E4.
-ORDER_0013=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uACB0\uC81C\uC644\uB8CC][\uC0C1\uD488\uC900\uBE44\uC911]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uBD80\uBD84\uCDE8\uC18C\uAC00 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0014=\uCD9C\uACE0\uC644\uB8CC\uB97C \uD558\uC2E4\uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uC8FC\uBB38 \uCDE8\uC18C\uC2E0\uCCAD\uB41C \uC8FC\uBB38\uC744 \uBA3C\uC800 \uCC98\uB9AC\uD574\uC8FC\uC2DC\uAE30\uBC14\uB78D\uB2C8\uB2E4.
-ORDER_0015=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uCD9C\uACE0\uC644\uB8CC]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uC8FC\uBB38\uAD50\uD658\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0016=\uAD50\uD658\uC218\uB7C9\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694.\uAD50\uD658\uAC00\uB2A5 \uC218\uB7C9\uBCF4\uB2E4 \uB9CE\uC2B5\uB2C8\uB2E4.
-ORDER_0017=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uAD50\uD658\uC2E0\uCCAD]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uAD50\uD658\uC9C4\uD589\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0018=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uAD50\uD658\uC9C4\uD589]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uAD50\uD658\uC644\uB8CC\uAC00 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0019=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uAD50\uD658\uC2E0\uCCAD]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uAD50\uD658\uBC18\uB824\uAC00 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0020=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uBC18\uD488\uC2E0\uCCAD]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uBC18\uD488\uC9C4\uD589\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0021=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uBC18\uD488\uC9C4\uD589]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uBC18\uD488\uC644\uB8CC\uAC00 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0022=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uBC18\uD488\uC2E0\uCCAD]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uBC18\uD488\uBC18\uB824\uAC00 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0023=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uCDE8\uC18C\uC2E0\uCCAD]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uCDE8\uC18C\uBC18\uB824\uAC00 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0024=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uCDE8\uC18C\uC2E0\uCCAD]\uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uCDE8\uC18C\uC644\uB8CC\uAC00 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
-ORDER_0025=\uBC18\uD488\uC218\uB7C9\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694. \uBC18\uD488\uAC00\uB2A5 \uC218\uB7C9\uBCF4\uB2E4 \uB9CE\uC2B5\uB2C8\uB2E4.
-ORDER_0026=\uC8FC\uBB38 \uC804\uCCB4\uBC18\uD488\uC744 \uD558\uC2E4\uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uAD50\uD658,\uBC18\uD488,\uCDE8\uC18C\uC911\uC778 \uC0C1\uD488\uC774 \uC788\uB294\uC9C0 \uD655\uC778 \uBC14\uB78D\uB2C8\uB2E4.
-ORDER_0027=\uC8FC\uBB38\uC0C1\uD0DC\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.\n[\uC0C1\uD488\uC900\uBE44\uC911] \uC0C1\uD0DC\uC5D0\uC11C\uB9CC \uACB0\uC81C\uC644\uB8CC \uBCC0\uACBD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
-ORDER_0028=\uACB0\uC81C \uC644\uB8CC \uC0C1\uD0DC\uB85C \uBCC0\uACBD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uCDE8\uC18C,\uBC18\uD488\uC774 \uC644\uB8CC\uB41C \uC8FC\uBB38\uC785\uB2C8\uB2E4.
-ORDER_0029=\uC8FC\uBB38 \uC0C1\uD0DC\uB97C \uD655\uC778\uD574 \uC8FC\uC138\uC694. [\uCD9C\uACE0\uC911][\uAD6C\uB9E4\uD655\uC815]\uC0C1\uD0DC\uC778 \uC8FC\uBB38\uAC74\uC774 \uC788\uC2B5\uB2C8\uB2E4.
-ORDER_0030=\uD544\uC218\uAC12\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
-ORDER_0031=\uC8FC\uBB38\uC804\uCCB4\uCDE8\uC18C \uCC98\uB9AC\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-
-##\uD68C\uC6D0
-CUST_0001=\uC815\uC0C1\uC801\uC73C\uB85C \uD0C8\uD1F4\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-CUST_0002=\uC774\uBBF8 \uD0C8\uD1F4\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-CUST_0003=\uC9C4\uD589\uC911\uC778 \uAC70\uB798\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uC9C4\uD589\uC911\uC778 \uAC70\uB798\uB97C \uC644\uB8CC \uD6C4 \uD0C8\uD1F4 \uC2E0\uCCAD\uC744 \uD574\uC8FC\uC138\uC694.
-CUST_0004=\uD0C8\uD1F4\uAC00 \uC815\uC0C1\uC801\uC73C\uB85C \uCC98\uB9AC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.
-
-#\uC0AC\uBC29\uB137
-SABANGNET_0001=\uC131\uACF5\uC801\uC73C\uB85C \uC0C1\uD488 \uC815\uBCF4\uAC00 \uC804\uC1A1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.(\uCD1D {0}\uAC74 \uC911 {1}\uAC74 \uC131\uACF5)
-SABANGNET_0002=\uC131\uACF5\uC801\uC73C\uB85C \uC1FC\uD551\uBAB0\uBCC4 DATA \uAC00 \uC804\uC1A1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.(\uCD1D {0}\uAC74 \uC911 {1}\uAC74 \uC131\uACF5)
-SABANGNET_0003=\uC131\uACF5\uC801\uC73C\uB85C \uC0C1\uD488 \uC694\uC57D \uC815\uBCF4\uAC00 \uC804\uC1A1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.(\uCD1D {0}\uAC74 \uC911 {1}\uAC74 \uC131\uACF5)
-SABANGNET_0004=\uC8FC\uBB38\uC774 \uC218\uC9D1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.(\uCD1D {0}\uAC74 \uC911 {1}\uAC74 \uC131\uACF5, \uC2E4\uD328: {2}\uAC74)
-SABANGNET_0005=\uC131\uACF5\uC801\uC73C\uB85C \uC1A1\uC7A5\uBC88\uD638\uAC00 \uB4F1\uB85D\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
-SABANGNET_0006=\uCDE8\uC18C\uC8FC\uBB38\uC774 \uC218\uC9D1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.(\uCD1D {0}\uAC74 \uC911 {1}\uAC74 \uC2E4\uD328 {2}\uAC74 \uC131\uACF5)
-SABANGNET_0007=\uAD50\uD658\uC8FC\uBB38\uC774 \uC218\uC9D1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.(\uCD1D {0}\uAC74 \uC911 {1}\uAC74 \uC2E4\uD328 {2}\uAC74 \uC131\uACF5)
-SABANGNET_0008=\uBC18\uD488\uC8FC\uBB38\uC774 \uC218\uC9D1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.(\uCD1D {0}\uAC74 \uC911 {1}\uAC74 \uC2E4\uD328 {2}\uAC74 \uC131\uACF5)
-SABANGNET_0009=\uC720\uD6A8\uC131 \uAC80\uC99D \uC2E4\uD328\uB85C \uCC98\uB9AC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-SABANGNET_0010=\uCD9C\uACE0\uB97C \uC704\uD574 ERP\uB85C \uC804\uC1A1\uD558\uC600\uC2B5\uB2C8\uB2E4.(\uC131\uACF5: {0}\uAC74, \uC2E4\uD328: {1}\uAC74)

+ 0 - 25
style24.front/target/classes/log/logback-dev.xml

@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration scan="true">
-	<property name="LOG_HOME" value="./logs/applog"/>
-	<property name="LOG_LEVEL" value="DEBUG"/>
-	
-	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder>
-			<charset>utf-8</charset>
-			<pattern>[%d] [%thread] %-5level %logger{32} : %msg%n</pattern>
-		</encoder>
-	</appender>
-
-	<logger name="org.springframework" level="ERROR"/>
-	
-	<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. -->
-	<logger name="jdbc.sqltiming" level="INFO" additivity="false">
-		<appender-ref ref="CONSOLE"/>
-	</logger>
-	
-	<root level="${LOG_LEVEL}">
-		<appender-ref ref="CONSOLE"/>
-	</root>
-
-</configuration>

+ 0 - 41
style24.front/target/classes/log/logback-locd.xml

@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration scan="true">
-	<property name="LOG_HOME" value="/WIDE/workspace/logs/style24/front"/>
-	<property name="LOG_LEVEL" value="INFO"/>
-	
-	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder>
-			<charset>utf-8</charset>
-			<pattern>[%d] [%thread] %-5level %logger{32} : %msg%n</pattern>
-		</encoder>
-	</appender>
-	
-	<logger name="org.springframework" level="ERROR"/>
-	
-	<!-- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. -->
-	<!-- <logger name="jdbc.sqlonly" level="${LOG_LEVEL}">
-		<appender-ref ref="CONSOLE"/>
-	</logger> -->
-	
-	<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. -->
-	<!-- <logger name="jdbc.sqltiming" level="${LOG_LEVEL}">
-		<appender-ref ref="CONSOLE"/>
-	</logger> -->
-	
-	<!-- ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. -->
-	<!-- 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다. -->
-	<!-- <logger name="jdbc.audit" level="ERROR">
-		<appender-ref ref="CONSOLE"/>
-	</logger> -->
-	
-	<!-- ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. -->
-	<!-- <logger name="jdbc.resultset" level="ERROR">
-		<appender-ref ref="CONSOLE"/>
-	</logger> -->
-
-	<root level="${LOG_LEVEL}">
-		<appender-ref ref="CONSOLE"/>
-	</root>
-
-</configuration>

+ 0 - 41
style24.front/target/classes/log/logback-locp.xml

@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration scan="true">
-	<property name="LOG_HOME" value="/WIDE/workspace/logs/style24/front"/>
-	<property name="LOG_LEVEL" value="INFO"/>
-	
-	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder>
-			<charset>utf-8</charset>
-			<pattern>[%d] [%thread] %-5level %logger{32} : %msg%n</pattern>
-		</encoder>
-	</appender>
-
-	<logger name="org.springframework" level="ERROR"/>
-
-	<!-- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. -->
-	<!-- <logger name="jdbc.sqlonly" level="${LOG_LEVEL}">
-		<appender-ref ref="CONSOLE"/>
-	</logger> -->
-	
-	<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. -->
-	<!-- <logger name="jdbc.sqltiming" level="${LOG_LEVEL}">
-		<appender-ref ref="CONSOLE"/>
-	</logger> -->
-	
-	<!-- ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. -->
-	<!-- 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다. -->
-	<!-- <logger name="jdbc.audit" level="ERROR">
-		<appender-ref ref="CONSOLE"/>
-	</logger> -->
-	
-	<!-- ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. -->
-	<!-- <logger name="jdbc.resultset" level="ERROR">
-		<appender-ref ref="CONSOLE"/>
-	</logger> -->
-
-	<root level="${LOG_LEVEL}">
-		<appender-ref ref="CONSOLE"/>
-	</root>
-
-</configuration>

+ 0 - 39
style24.front/target/classes/log/logback-run.xml

@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration scan="true">
-	<property name="LOG_HOME" value="./logs/applog"/>
-	<property name="LOG_LEVEL" value="INFO"/>
-	
-	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder>
-			<charset>utf-8</charset>
-			<pattern>[%d] [%thread] %-5level %logger{32} : %msg%n</pattern>
-		</encoder>
-	</appender>
-
-	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${LOG_HOME}/wivismall_front.log</file>
-		<encoder>
-			<charset>utf-8</charset>
-			<pattern>[%d] [%thread] %-5level %logger{32} : %msg%n</pattern>
-		</encoder>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${LOG_HOME}/wivismall_front.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
-			<!-- keep 30 days' worth of history -->
-			<maxHistory>30</maxHistory>
-		</rollingPolicy>
-	</appender>
-
-	<logger name="org.springframework" level="ERROR"/>
-	
-	<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. -->
-	<logger name="jdbc.sqltiming" level="INFO" additivity="false">
-		<appender-ref ref="CONSOLE"/>
-	</logger>
-
-	<root level="${LOG_LEVEL}">
-		<appender-ref ref="CONSOLE"/>
-		<appender-ref ref="FILE" />
-	</root>
-
-</configuration>

+ 0 - 24
style24.front/target/classes/persistence/mybatis-shop-config.xml

@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "HTTP://mybatis.org/dtd/mybatis-3-config.dtd">
-
-<configuration>
-
-	<settings>
-		<setting name="cacheEnabled" value="false" /> <!-- 설정에서 각 매퍼에 설정된 캐시를 전역적으로 사용할지 말지에 대한 여부 (default true)-->
-		<!-- <setting name="lazyLoadingEnabled" value="true" /> --> <!-- 지연로딩을 사용할지에 대한 여부. 사용하지 않는다면 모두 즉시 로딩 (default true) -->
-		<!-- <setting name="multipleResultSetsEnabled" value="true" /> --> <!-- 한개의 구문에서 여러개의 ResultSet을 허용할지의 여부 (default true) -->
-		<setting name="useGeneratedKeys" value="true" /> <!-- 생성키를 강제로 생성 (default false) -->
-		<setting name="defaultExecutorType" value="REUSE" /> <!-- 디폴트 실행자(executor) 설정. PreparedStatement를 재사용 (default SIMPLE)-->
-		<setting name="defaultStatementTimeout" value="25" /> <!-- 데이터베이스로의 응답을 얼마나 오래 기다릴지를 판단하는 타임아웃(초)를 설정 -->
-		<setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 데이터베이스 칼럼명 형태인 A_COLUMN을 CamelCase 형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함 (default false) -->
-		<setting name="logImpl" value="NO_LOGGING" /> <!-- 마이바티스가 사용할 로깅 구현체를 명시. 이 설정을 사용하지 않으면 마이바티스가 사용할 로깅 구현체를 자동으로 찾는다. -->
-		<setting name="jdbcTypeForNull" value="NULL"/> <!-- JDBC 타입을 파라미터에 제공하지 않을 때 null 값을 처리한 JDBC 타입을 명시 -->
-		<setting name="callSettersOnNulls" value="true"/> <!-- 가져온 값이 null일때 setter나 맵의 put 메소드를 호출할지를 명시 (default false) -->
-		<setting name="returnInstanceForEmptyRow" value="true"/> <!-- 모든 컬럼이 null이면 row를 null 인스턴스로 리턴 (default false: row를 null로 리턴) -->
-	</settings>
-	
-	<typeAliases>
-		<typeAlias alias="paramMap" type="com.gagaframework.web.parameter.GagaMap" />
-	</typeAliases>
-
-</configuration>

+ 0 - 15
style24.front/target/m2e-wtp/web-resources/META-INF/maven/com.style24.front/style24.front/pom.properties

@@ -1,15 +0,0 @@
-#Generated by Maven Integration for Eclipse
-<<<<<<< HEAD
-#Wed Jan 06 14:17:20 KST 2021
-=======
-#Fri Jan 08 18:59:52 KST 2021
-version=0.0.1-SNAPSHOT
-groupId=com.style24.front
-m2e.projectName=style24.front
->>>>>>> refs/heads/develop
-m2e.projectLocation=D\:\\WIDE\\workspace\\webapps\\style24\\STYLE24\\style24.front
-artifactId=style24.front
-<<<<<<< HEAD
-version=0.0.1-SNAPSHOT
-=======
->>>>>>> refs/heads/develop

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio