Explorar el 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

gagamel hace 5 años
padre
commit
55298c592d
Se han modificado 100 ficheros con 8095 adiciones y 5101 borrados
  1. 126 0
      root.iml
  2. 36 0
      style24.admin/META-INF/context.xml
  3. 6 0
      style24.admin/WEB-INF/web.xml
  4. 2 2
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaCommonDao.java
  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 112
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaMarketingDao.java
  8. 181 0
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaMorebetterDao.java
  9. 77 11
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderChangeDao.java
  10. 43 95
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java
  11. 3 3
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaCommonService.java
  12. 166 0
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaCouponService.java
  13. 98 98
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaEnvsetService.java
  14. 21 194
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaMarketingService.java
  15. 363 0
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java
  16. 48 13
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java
  17. 122 122
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java
  18. 23 0
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  19. 325 325
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaEnvsetController.java
  20. 2 2
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  21. 171 119
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  22. 81 36
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  23. 79 79
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java
  24. 1 0
      style24.admin/src/main/java/com/style24/persistence/domain/Category.java
  25. 27 4
      style24.admin/src/main/java/com/style24/persistence/domain/Coupon.java
  26. 3 0
      style24.admin/src/main/java/com/style24/persistence/domain/MoreBetterBurden.java
  27. 12 0
      style24.admin/src/main/java/com/style24/persistence/domain/MoreBetterGoods.java
  28. 4 0
      style24.admin/src/main/java/com/style24/persistence/domain/MoreBetterSection.java
  29. 6 6
      style24.admin/src/main/java/com/style24/persistence/domain/Order.java
  30. 4 2
      style24.admin/src/main/java/com/style24/persistence/domain/OrderChange.java
  31. 4 4
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaCommon.xml
  32. 224 0
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml
  33. 145 145
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaEnvset.xml
  34. 0 314
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaMarketing.xml
  35. 444 0
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml
  36. 57 399
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml
  37. 462 91
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml
  38. 193 0
      style24.admin/src/main/webapp/WEB-INF/views/display/CategorySearchForm.html
  39. 296 295
      style24.admin/src/main/webapp/WEB-INF/views/envset/CustomerGradePolicyForm.html
  40. 4 4
      style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsMassRegisterForm.html
  41. 908 188
      style24.admin/src/main/webapp/WEB-INF/views/marketing/CouponCreatePopupForm.html
  42. 2 3
      style24.admin/src/main/webapp/WEB-INF/views/marketing/CouponListForm.html
  43. 11 5
      style24.admin/src/main/webapp/WEB-INF/views/marketing/MorebetterListForm.html
  44. 887 676
      style24.admin/src/main/webapp/WEB-INF/views/marketing/MorebetterRegForm.html
  45. 30 33
      style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestForm.html
  46. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestFormBack.html
  47. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailChangeHst.html
  48. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailCouponHst.html
  49. 417 414
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailForm.html
  50. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailGiftcardHst.html
  51. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailPointHst.html
  52. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailTmtbHst.html
  53. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderListForm.html
  54. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderMemoRegistForm.html
  55. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html
  56. 127 127
      style24.admin/src/main/webapp/WEB-INF/views/order/RefundAccountRegistForm.html
  57. 91 40
      style24.admin/src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html
  58. 4 3
      style24.admin/src/main/webapp/ux/js/admin.popup.js
  59. 258 0
      style24.admin/style24.admin.iml
  60. 31 31
      style24.batch/.classpath
  61. 7 7
      style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsWmsProductStockJob.java
  62. 1 1
      style24.batch/src/main/java/com/style24/batch/biz/service/TsbCommonService.java
  63. 29 31
      style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java
  64. 5 4
      style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml
  65. 185 0
      style24.batch/style24.batch.iml
  66. 43 0
      style24.core/src/main/java/META-INF/MANIFEST.MF
  67. 182 0
      style24.core/style24.core.iml
  68. 0 32
      style24.front/.classpath
  69. 43 42
      style24.front/.project
  70. 0 13
      style24.front/.settings/.jsdtscope
  71. 0 6
      style24.front/.settings/org.eclipse.core.resources.prefs
  72. 0 12
      style24.front/.settings/org.eclipse.jdt.core.prefs
  73. 0 4
      style24.front/.settings/org.eclipse.m2e.core.prefs
  74. 0 12
      style24.front/.settings/org.eclipse.wst.common.component
  75. 0 7
      style24.front/.settings/org.eclipse.wst.common.project.facet.core.xml
  76. 0 1
      style24.front/.settings/org.eclipse.wst.jsdt.ui.superType.container
  77. 0 1
      style24.front/.settings/org.eclipse.wst.jsdt.ui.superType.name
  78. 0 2
      style24.front/.settings/org.eclipse.wst.validation.prefs
  79. 0 2
      style24.front/.settings/org.springframework.ide.eclipse.prefs
  80. 110 110
      style24.front/pom.xml
  81. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfCartDao.java
  82. 132 132
      style24.front/src/main/java/com/style24/front/biz/dao/TsfCounselDao.java
  83. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfCouponDao.java
  84. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  85. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  86. 61 61
      style24.front/src/main/java/com/style24/front/biz/dao/TsfFaqDao.java
  87. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java
  88. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  89. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfOrderDao.java
  90. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  91. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfPointDao.java
  92. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfReviewDao.java
  93. 14 14
      style24.front/src/main/java/com/style24/front/biz/dao/TsfWishlistDao.java
  94. 23 23
      style24.front/src/main/java/com/style24/front/biz/service/TsfCartService.java
  95. 212 212
      style24.front/src/main/java/com/style24/front/biz/service/TsfCounselService.java
  96. 23 23
      style24.front/src/main/java/com/style24/front/biz/service/TsfCouponService.java
  97. 23 23
      style24.front/src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  98. 23 23
      style24.front/src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  99. 84 84
      style24.front/src/main/java/com/style24/front/biz/service/TsfFaqService.java
  100. 23 23
      style24.front/src/main/java/com/style24/front/biz/service/TsfGiftcardService.java

+ 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>

+ 2 - 2
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaCommonDao.java

@@ -68,12 +68,12 @@ public interface TsaCommonDao {
 	String getSampleFileSystemFilename(String sampleFileId);
 
 	/**
-	 * ERP 연동 여부
+	 * WMS 연동 여부
 	 *
 	 * @return
 	 * @author eskim
 	 * @since 2020. 01. 16
 	 */
-	String getErpSyncYn();
+	String getWmsSyncYn();
 
 }

+ 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 - 112
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,107 +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 진행 */
-
-	/* CSB 진행 */
-	/**
-	 * 다다익선 프로모션 리스트
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2020. 12. 28
-	 */
-	Collection<MoreBetter> getMorebetterList(MoreBetter param);
-
-	/**
-	 * 다다익선 마스터(TB_TMTB) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2020. 12. 28
-	 */
-	void saveMorebetterMst(MoreBetter tmtb);
-
-	/**
-	 * 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 7
-	 */
-	void saveMorebetterGoods(MoreBetterGoods regSupplyComp);
-
-	/**
-	 * 다다익선 할인구간설정 2차조건(TB_TMTB_SECTION) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 6
-	 */
-	void saveMorebetterSection(MoreBetterSection regSection);
-
-	/**
-	 * 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 6
-	 */
-	void saveMorebetterVal(MoreBetterSection regSection);
-
-	/**
-	 * 다다익선 업체분담율(TB_TMTB_BURDEN) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2020. 12. 28
-	 */
-	void saveMorebetterBurden(MoreBetterBurden regBurden);
-
-	/**
-	 * 다다익선 할인구간설정(TB_TMTB_SECTION) 삭제
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 6
-	 */
-	void deleteTmtbSectionList(MoreBetterSection sectionVal);
-
-	/**
-	 * 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 삭제
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 6
-	 */
-	void deleteTmtbValList(MoreBetterSection sectionVal);
-	/* // CSB 진행 */
-
-	/**
-	 * 쿠폰조회 목록
-	 * @param coupon - 쿠폰 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
-	 */
-	public Collection<Coupon> getCouponRetrieveList(Coupon coupon);
-
 }

+ 181 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaMorebetterDao.java

@@ -0,0 +1,181 @@
+package com.style24.admin.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+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 org.springframework.stereotype.Component;
+
+import java.util.Collection;
+
+/**
+ * 마케팅 다다익선 Dao
+ *
+ * @author bin2107
+ * @since 2021. 1. 12
+ */
+@ShopDs
+@Component
+public interface TsaMorebetterDao {
+    /* CSB 진행 */
+    /**
+     * 다다익선 프로모션 리스트
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2020. 12. 28
+     */
+    Collection<MoreBetter> getMorebetterList(MoreBetter param);
+
+    /**
+     * 다다익선 상세조회
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    MoreBetter getMorebetterMstInfo(Integer tmtbSq);
+
+    /**
+     * 다다익선 구간 조회
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    Collection<MoreBetterSection> getMorebetterSectionValList(Integer tmtbSq);
+
+    /**
+     * 다다익선 구간 조회
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    Collection<MoreBetterGoods> getMorebetterSupplyCompList(MoreBetterGoods merebetterGoods);
+
+    Collection<MoreBetterGoods> getMorebetterBrandList(MoreBetterGoods merebetterGoods);
+
+    Collection<MoreBetterGoods> getMorebetterApplyGoodsList(MoreBetterGoods merebetterGoods);
+
+    Collection<MoreBetterGoods> getMorebetterExceptGoodsList(MoreBetterGoods merebetterGoods);
+
+    /**
+     * 다다익선 구간 조회
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    Collection<MoreBetterBurden> getMorebetterBurdenList(Integer tmtbSq);
+
+    /**
+     * 다다익선 마스터(TB_TMTB) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2020. 12. 28
+     */
+    void saveMorebetterMst(MoreBetter tmtb);
+
+    /**
+     * 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 7
+     */
+    void saveMorebetterGoods(MoreBetterGoods regSupplyComp);
+
+    /**
+     * 다다익선 할인구간설정 2차조건(TB_TMTB_SECTION) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 6
+     */
+    void saveMorebetterSection(MoreBetterSection regSection);
+
+    /**
+     * 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 6
+     */
+    void saveMorebetterVal(MoreBetterSection regSection);
+
+    /**
+     * 다다익선 업체분담율(TB_TMTB_BURDEN) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2020. 12. 28
+     */
+    void saveMorebetterBurden(MoreBetterBurden regBurden);
+
+    /**
+     * 다다익선 공급업체(TB_TMTB_GOODS) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbSupplyCompanyList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 브랜드(TB_TMTB_GOODS) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbBrandList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 적용상품(TB_TMTB_GOODS) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbApplyGoodsList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 제외상품(TB_TMTB_GOODS) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbExceptGoodsList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 할인구간설정(TB_TMTB_SECTION) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 6
+     */
+    void deleteTmtbSectionList(MoreBetterSection moreBetterSection);
+
+    /**
+     * 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 6
+     */
+    void deleteTmtbValList(MoreBetterSection moreBetterSection);
+
+    /**
+     * 다다익선 업체분담율(TB_TMTB_BURDEN) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbBurdenList(MoreBetterBurden moreBetterBurden);
+    /* // CSB 진행 */
+}

+ 77 - 11
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderChangeDao.java

@@ -18,7 +18,7 @@ import com.style24.persistence.domain.OrderChange;
 public interface TsaOrderChangeDao {
 	
 	/**
-	 * 주문상세 > 주문취소대상목록
+	 * 주문상세 > 주문취소신청 > 주문취소,반품,교환 대상목록
 	 *
 	 * @param Order - 주문 정보
 	 * @return
@@ -26,7 +26,7 @@ public interface TsaOrderChangeDao {
 	 * @since 2020. 12. 16
 	 */
 	Collection<Order> getCancelRequestTargetList(Order order);
-	
+		
 	/**
 	 * 주문상세 > 주문취소신청 > 주문변경정보 등록
 	 *
@@ -38,27 +38,67 @@ public interface TsaOrderChangeDao {
 	int createOrderChange(OrderChange orderChange);
 	
 	/**
-	 * 주문상세 > 주문취소신청 > 주문사은품전체취소
+	 * 주문상세 > 주문취소신청 > 주문상세단품정보 수정
 	 *
 	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 12. 22
 	 */
-	int updateOrdFreegiftDel(Order order);
+	int updateOrderDetailItem(Order order);
 	
 	/**
-	 * 주문상세 > 주문취소신청 > 주문 환불 정보 등록
+	 * 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록
 	 *
 	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 12. 22
 	 */
-	int createRefund(Order order);
+	int createOrderDetailItemHst(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 상품옵션 재고 원복
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 01. 08
+	 */
+	int updateOptionQty(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세정보(취소,반품) 이력 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderDetailHstCnclRtn(Order order);
 	
 	/**
-	 * 주문상세 > 주문취소신청 > 주문 환불 금액 정보 등록
+	 * 주문상세 > 주문취소신청 > 주문상세정보 수정
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int updateOrderDetail(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문변경정보상세 등록
+	 *
+	 * @param OrderChange - 주문 변경 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderChangeDetail(OrderChange orderChange);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문환불금액정보 등록
 	 *
 	 * @param Order - 주문 정보
 	 * @return
@@ -68,7 +108,17 @@ public interface TsaOrderChangeDao {
 	int createPayment(Order order);
 	
 	/**
-	 * 주문상세 > 주문취소신청 > 주문 추가 배송 금액 등록
+	 * 주문상세 > 주문취소신청 > 주문환불정보 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createRefund(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문추가배송금액 등록
 	 *
 	 * @param Order - 주문 정보
 	 * @return
@@ -78,7 +128,23 @@ public interface TsaOrderChangeDao {
 	int createDeliveryFee(Order order);
 	
 	/**
-	 * 고객환불계좌 정보 조회
+	 * 주문상세 > 주문취소신청 > 주문사은품전체취소
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int updateOrdFreegiftDel(Order order);
+	
+
+	
+
+	
+
+	
+	/**
+	 * 주문상세 > 주문취소 > 고객환불계좌정보 조회
 	 *
 	 * @param order - 주문 정보
 	 * @return
@@ -88,7 +154,7 @@ public interface TsaOrderChangeDao {
 	Collection<Order> getRefundAccount(Order order);
 	
 	/**
-	 * 환불계좌 존재 유무 체크
+	 * 주문상세 > 주문취소 > 고객환불계좌정보 중복체크
 	 *
 	 * @param order
 	 * @return int
@@ -98,7 +164,7 @@ public interface TsaOrderChangeDao {
 	int getRefundAccountCheck(Order order);
 	
 	/**
-	 * 환불계좌 저정
+	 * 주문상세 > 주문취소 > 고객환불계좌정보 등록
 	 *
 	 * @param order
 	 * @return int

+ 43 - 95
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);
-	
+
 	/**
 	 * 주문상세상태를 변경
 	 *
@@ -330,68 +330,16 @@ public interface TsaOrderDao {
 	 */
 	int changedOrdDtlStat(Order order);
 
-	/**
-	 * 주문상세 > 주문취소신청 > 주문변경정보 상세 등록
-	 *
-	 * @param OrderChange - 주문 변경 정보
-	 * @return
-	 * @author jsh77b
-	 * @since 2020. 12. 22
-	 */
-	int createOrderChangeDetail(OrderChange orderChange);
-	
-	/**
-	 * 주문상세 > 주문취소신청 > 상품옵션 재고 원복
-	 *
-	 * @param Order - 주문 정보
-	 * @return
-	 * @author jsh77b
-	 * @since 2021. 01. 08
-	 */
-	int updateOptionQty(Order order);
-	
-	/**
-	 * 주문상세 > 주문취소신청 > 주문상세단품정보 수정
-	 *
-	 * @param Order - 주문 정보
-	 * @return
-	 * @author jsh77b
-	 * @since 2020. 12. 22
-	 */
-	int updateOrderDetailItem(Order order);
-	
-	/**
-	 * 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록
-	 *
-	 * @param Order - 주문 정보
-	 * @return
-	 * @author jsh77b
-	 * @since 2020. 12. 22
-	 */
-	int createOrderDetailItemHst(Order order);
-	
-	/**
-	 * 주문상세 > 주문취소신청 > 주문상세정보(취소,반품) 이력 등록
-	 *
-	 * @param Order - 주문 정보
-	 * @return
-	 * @author jsh77b
-	 * @since 2020. 12. 22
-	 */
-	int createOrderDetailHstCnclRtn(Order order);
 
-	/**
-	 * 주문상세 > 주문취소신청 > 주문상세정보 수정
-	 *
-	 * @param Order - 주문 정보
-	 * @return
-	 * @author jsh77b
-	 * @since 2020. 12. 22
-	 */
-	int updateOrderDetail(Order order);
-	
-	
-	
+
+
+
+
+
+
+
+
+
 }
 
 

+ 3 - 3
style24.admin/src/main/java/com/style24/admin/biz/service/TsaCommonService.java

@@ -92,15 +92,15 @@ public class TsaCommonService {
 	}
 
 	/**
-	 * ERP 연동 여부
+	 * WMS 연동 여부
 	 *
 	 * @param
 	 * @return
 	 * @author eskim
 	 * @since 2020. 01. 16
 	 */
-	public String getErpSyncYn() {
-		return commonDao.getErpSyncYn();
+	public String getWmsSyncYn() {
+		return commonDao.getWmsSyncYn();
 	}
 
 }

+ 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 - 194
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,183 +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 진행 */
-
-	/* CSB 진행 */
-	/**
-	 * 다다익선 리스트
-	 * @param param
-	 * @return
-	 * @author bin2107
-	 * @since 2020. 12. 28
-	 */
-	public Collection<MoreBetter> getMorebetterList(MoreBetter param) {
-		return marketingDao.getMorebetterList(param);
-	}
-
-	/**
-	 * 다다익선 저장
-	 * @param tmtb
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 5
-	 */
-	@Transactional("shopTxnManager")
-	public void saveMoreBetterDetail(MoreBetter tmtb) {
-		// <,> replace 처리
-		tmtb.setRegNo(TsaSession.getInfo().getUserNo());
-		tmtb.setUdpNo(TsaSession.getInfo().getUserNo());
-
-		// TMTB 마스터(TB_TMTB) 저장
-		marketingDao.saveMorebetterMst(tmtb);
-
-		// 다다익선 적용대상 설정
-		// 공급업체
-		Collection<MoreBetterGoods> supplyCompList = tmtb.getSupplyCompListNew();
-		for (MoreBetterGoods regSupplyComp : supplyCompList) {
-			// 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-			// tmtbGoodsSq 생성
-			Integer tmtbGoodsSq = commonService.getNextSequence("SEQ_TMTB_GOODS");
-			regSupplyComp.setTmtbGoodsSq(tmtbGoodsSq);
-			regSupplyComp.setTmtbSq(tmtb.getTmtbSq());
-			regSupplyComp.setGoodsGb("G800_20");
-			regSupplyComp.setTargetVal(regSupplyComp.getSupplyCompCd());
-			regSupplyComp.setRegNo(tmtb.getRegNo());
-			regSupplyComp.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterGoods(regSupplyComp);
-		}
-
-		// 브랜드
-		Collection<MoreBetterGoods> brandList = tmtb.getBrandListNew();
-		for (MoreBetterGoods regBrand : brandList) {
-			// 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-			// tmtbGoodsSq 생성
-			Integer tmtbGoodsSq = commonService.getNextSequence("SEQ_TMTB_GOODS");
-			regBrand.setTmtbGoodsSq(tmtbGoodsSq);
-			regBrand.setTmtbSq(tmtb.getTmtbSq());
-			regBrand.setGoodsGb("G800_20");
-			regBrand.setTargetVal(regBrand.getBrandCd());
-			regBrand.setRegNo(tmtb.getRegNo());
-			regBrand.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterGoods(regBrand);
-		}
-
-		// 적용상품
-		Collection<MoreBetterGoods> applyGoodsList = tmtb.getApplyGoodsListNew();
-		for (MoreBetterGoods regApplyGoods : applyGoodsList) {
-			// 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-			// tmtbGoodsSq 생성
-			Integer tmtbGoodsSq = commonService.getNextSequence("SEQ_TMTB_GOODS");
-			regApplyGoods.setTmtbGoodsSq(tmtbGoodsSq);
-			regApplyGoods.setTmtbSq(tmtb.getTmtbSq());
-			regApplyGoods.setTargetVal(regApplyGoods.getGoodsCd());
-			regApplyGoods.setRegNo(tmtb.getRegNo());
-			regApplyGoods.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterGoods(regApplyGoods);
-		}
-
-		// 제외상품
-		Collection<MoreBetterGoods> exceptGoodsList = tmtb.getExceptGoodsListNew();
-		for (MoreBetterGoods regExceptGoods : exceptGoodsList) {
-			// 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-			// tmtbGoodsSq 생성
-			Integer tmtbGoodsSq = commonService.getNextSequence("SEQ_TMTB_GOODS");
-			regExceptGoods.setTmtbGoodsSq(tmtbGoodsSq);
-			regExceptGoods.setTmtbSq(tmtb.getTmtbSq());
-			regExceptGoods.setTargetVal(regExceptGoods.getGoodsCd());
-			regExceptGoods.setRegNo(tmtb.getRegNo());
-			regExceptGoods.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterGoods(regExceptGoods);
-		}
-
-		// 다다익선 할인구간 저장
-		Collection<MoreBetterSection> sectionGbList = tmtb.getSectionGbListNew();
-		for (MoreBetterSection regSection : sectionGbList) {
-			// 다다익선 할인구간설정 2차조건(TB_TMTB_SECTION) 저장
-			// tmtbSectionSq 생성
-			Integer tmtbSectionSq = commonService.getNextSequence("SEQ_TMTB_SECTION");
-			regSection.setTmtbSectionSq(tmtbSectionSq);
-
-			// 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 저장
-			// tmtbValSq 생성
-			Integer tmtbValSq = commonService.getNextSequence("SEQ_TMTB_VAL");
-			regSection.setTmtbValSq(tmtbValSq);
-			regSection.setTmtbSq(tmtb.getTmtbSq());
-			regSection.setRegNo(tmtb.getRegNo());
-			regSection.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterSection(regSection);
-			marketingDao.saveMorebetterVal(regSection);
-		}
-
-		// 다다익선 업체분담율(TB_TMTB_BURDEN) 저장
-		Collection<MoreBetterBurden> burdenList = tmtb.getBurdenListNew();
-		for (MoreBetterBurden regBurden : burdenList) {
-			// tmtbBurdenSq 생성
-			Integer tmtbBurdenSq = commonService.getNextSequence("SEQ_TMTB_BURDEN");
-			regBurden.setTmtbBurdenSq(tmtbBurdenSq);
-			regBurden.setTmtbSq(tmtb.getTmtbSq());
-			regBurden.setRegNo(tmtb.getRegNo());
-			regBurden.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterBurden(regBurden);
-		}
-
-		log.info("newBurdenSq = {}, newTmtbSq = {}, newSupplyCd = {}, newBurdenRate = {} , newUseYn = {}");
-
-	}
-
-	/**
-	 * 다다익선 다다익선 할인구간 삭제
-	 * @param tmtb
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 5
-	 */
-	@Transactional("shopTxnManager")
-	public void deleteSectionValList(Collection<MoreBetterSection> sectionValList) {
-		for (MoreBetterSection sectionVal : sectionValList) {
-			marketingDao.deleteTmtbSectionList(sectionVal);
-			marketingDao.deleteTmtbValList(sectionVal);
-		}
-	}
-	/* // CSB 진행 */
-
-	/**
-	 * 쿠폰조회 목록
-	 * @param coupon - 쿠폰 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
-	 */
-	public Collection<Coupon> getCouponRetrieveList(Coupon coupon) {
-		return marketingDao.getCouponRetrieveList(coupon);
-	}
-
 }

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

@@ -0,0 +1,363 @@
+package com.style24.admin.biz.service;
+
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.support.message.TscMessageByLocale;
+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 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 com.style24.admin.biz.dao.TsaMorebetterDao;
+
+import java.util.Collection;
+
+/**
+ *마케팅>다다익선 Service
+ *
+ * @author bin2107
+ * @since 2021. 1. 12
+ */
+@Service
+@Slf4j
+public class TsaMorebetterService {
+    @Autowired
+    private TscMessageByLocale message;
+
+    @Autowired
+    private Environment env;
+
+    @Autowired
+    private TsaMorebetterDao morebetterDao;
+
+    @Autowired
+    private TsaCommonService commonService;
+
+    /* CSB 진행 */
+    /**
+     * 다다익선 리스트
+     * @param param
+     * @return
+     * @author bin2107
+     * @since 2020. 12. 28
+     */
+    public Collection<MoreBetter> getMorebetterList(MoreBetter param) {
+        return morebetterDao.getMorebetterList(param);
+    }
+
+    /**
+     * 다다익선 마스터 조회
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    public MoreBetter getMorebetterMstInfo(Integer tmtbSq){
+        return morebetterDao.getMorebetterMstInfo(tmtbSq);
+    }
+
+    /**
+     * 다다익선 구간 조회
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    public Collection<MoreBetterSection> getMorebetterSectionValList(Integer tmtbSq) {
+        return morebetterDao.getMorebetterSectionValList(tmtbSq);
+    }
+
+    /**
+     * 다다익선 구간 조회
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    public Collection<MoreBetterGoods> getMorebetterSupplyCompList(Integer tmtbSq, String targetGb) {
+        MoreBetterGoods merebetterGoods = new MoreBetterGoods();
+        merebetterGoods.setTmtbSq(tmtbSq);
+        merebetterGoods.setTargetGb(targetGb);
+        return morebetterDao.getMorebetterSupplyCompList(merebetterGoods);
+    }
+
+    public Collection<MoreBetterGoods> getMorebetterBrandList(Integer tmtbSq, String targetGb) {
+        MoreBetterGoods merebetterGoods = new MoreBetterGoods();
+        merebetterGoods.setTmtbSq(tmtbSq);
+        merebetterGoods.setTargetGb(targetGb);
+        return morebetterDao.getMorebetterBrandList(merebetterGoods);
+    }
+
+    public Collection<MoreBetterGoods> getMorebetterApplyGoodsList(Integer tmtbSq, String targetGb) {
+        MoreBetterGoods merebetterGoods = new MoreBetterGoods();
+        merebetterGoods.setTmtbSq(tmtbSq);
+        merebetterGoods.setTargetGb(targetGb);
+        return morebetterDao.getMorebetterApplyGoodsList(merebetterGoods);
+    }
+
+    public Collection<MoreBetterGoods> getMorebetterExceptGoodsList(Integer tmtbSq, String targetGb) {
+        MoreBetterGoods merebetterGoods = new MoreBetterGoods();
+        merebetterGoods.setTmtbSq(tmtbSq);
+        merebetterGoods.setTargetGb(targetGb);
+        return morebetterDao.getMorebetterExceptGoodsList(merebetterGoods);
+    }
+
+    /**
+     * 다다익선 구간 조회
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    public Collection<MoreBetterBurden> getMorebetterBurdenList(Integer tmtbSq) {
+        return morebetterDao.getMorebetterBurdenList(tmtbSq);
+    }
+
+    /**
+     * 다다익선 저장
+     * @param tmtb
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 5
+     */
+    @Transactional("shopTxnManager")
+    public void saveMoreBetterDetail(MoreBetter tmtb) {
+        // <,> replace 처리
+        tmtb.setRegNo(TsaSession.getInfo().getUserNo());
+        tmtb.setUdpNo(TsaSession.getInfo().getUserNo());
+
+        // TMTB 마스터(TB_TMTB) 저장
+        morebetterDao.saveMorebetterMst(tmtb);
+
+        // 다다익선 적용대상 설정
+        // 공급업체
+        Collection<MoreBetterGoods> supplyCompList = tmtb.getSupplyCompListNew();
+        for(MoreBetterGoods regSupplyComp : supplyCompList){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            // tmtbGoodsSq 생성
+            log.info("regSupplyComp.getTmtbGoodsSq = {}",regSupplyComp.getTmtbGoodsSq());
+            if("".equals(regSupplyComp.getTmtbGoodsSq())){
+                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+                regSupplyComp.setTmtbGoodsSq(tmtbGoodsSq);
+            }
+            regSupplyComp.setTmtbSq(tmtb.getTmtbSq());
+            regSupplyComp.setGoodsGb("G800_20");
+            regSupplyComp.setTargetVal(regSupplyComp.getSupplyCompCd());
+            regSupplyComp.setRegNo(tmtb.getRegNo());
+            regSupplyComp.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterGoods(regSupplyComp);
+        }
+
+        // 브랜드
+        Collection<MoreBetterGoods> brandList = tmtb.getBrandListNew();
+        for(MoreBetterGoods regBrand : brandList){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            // tmtbGoodsSq 생성
+            log.info("regBrand.getTmtbGoodsSq = {}",regBrand.getTmtbGoodsSq());
+            if("".equals(regBrand.getTmtbGoodsSq())){
+                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+                regBrand.setTmtbGoodsSq(tmtbGoodsSq);
+            }
+            regBrand.setTmtbSq(tmtb.getTmtbSq());
+            regBrand.setGoodsGb("G800_20");
+            regBrand.setTargetVal(regBrand.getBrandCd());
+            regBrand.setRegNo(tmtb.getRegNo());
+            regBrand.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterGoods(regBrand);
+        }
+
+        // 적용상품
+        Collection<MoreBetterGoods> applyGoodsList = tmtb.getApplyGoodsListNew();
+        for(MoreBetterGoods regApplyGoods : applyGoodsList){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            // tmtbGoodsSq 생성
+            log.info("regApplyGoods.getTmtbGoodsSq = {}",regApplyGoods.getTmtbGoodsSq());
+            if("".equals(regApplyGoods.getTmtbGoodsSq())){
+                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+                regApplyGoods.setTmtbGoodsSq(tmtbGoodsSq);
+            }
+            regApplyGoods.setTmtbSq(tmtb.getTmtbSq());
+            regApplyGoods.setTargetVal(regApplyGoods.getGoodsCd());
+            regApplyGoods.setRegNo(tmtb.getRegNo());
+            regApplyGoods.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterGoods(regApplyGoods);
+        }
+
+        // 제외상품
+        Collection<MoreBetterGoods> exceptGoodsList = tmtb.getExceptGoodsListNew();
+        for(MoreBetterGoods regExceptGoods : exceptGoodsList){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            // tmtbGoodsSq 생성
+            log.info("regExceptGoods.getTmtbGoodsSq = {}",regExceptGoods.getTmtbGoodsSq());
+            if("".equals(regExceptGoods.getTmtbGoodsSq())){
+                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+                regExceptGoods.setTmtbGoodsSq(tmtbGoodsSq);
+            }
+            regExceptGoods.setTmtbSq(tmtb.getTmtbSq());
+            regExceptGoods.setTargetVal(regExceptGoods.getGoodsCd());
+            regExceptGoods.setRegNo(tmtb.getRegNo());
+            regExceptGoods.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterGoods(regExceptGoods);
+        }
+
+        // 다다익선 할인구간 저장
+        Collection<MoreBetterSection> sectionGbList = tmtb.getSectionGbListNew();
+        for(MoreBetterSection regSection : sectionGbList){
+            log.info("regSection.getTmtbSectionSq = {}",regSection.getTmtbSectionSq());
+            log.info("regSection.getTmtbValSq = {}",regSection.getTmtbValSq());
+            // 다다익선 할인구간설정 2차조건(TB_TMTB_SECTION) 저장
+            // tmtbSectionSq 생성
+            if("".equals(regSection.getTmtbSectionSq()) || regSection.getTmtbSectionSq() == null){
+                Integer tmtbSectionSq =  commonService.getNextSequence("SEQ_TMTB_SECTION");
+                regSection.setTmtbSectionSq(tmtbSectionSq);
+            }
+            // 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 저장
+            // tmtbValSq 생성
+            if("".equals(regSection.getTmtbValSq()) || regSection.getTmtbValSq() == null){
+                Integer tmtbValSq =  commonService.getNextSequence("SEQ_TMTB_VAL");
+                regSection.setTmtbValSq(tmtbValSq);
+            }
+            regSection.setTmtbSq(tmtb.getTmtbSq());
+            regSection.setRegNo(tmtb.getRegNo());
+            regSection.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterSection(regSection);
+            morebetterDao.saveMorebetterVal(regSection);
+        }
+
+        // 다다익선 업체분담율(TB_TMTB_BURDEN) 저장
+        Collection<MoreBetterBurden> burdenList = tmtb.getBurdenListNew();
+        for (MoreBetterBurden regBurden : burdenList) {
+            // tmtbBurdenSq 생성
+            log.info("regBurden.getTmtbBurdenSq = {}",regBurden.getTmtbBurdenSq());
+            if("".equals(regBurden.getTmtbBurdenSq())){
+                Integer tmtbBurdenSq =  commonService.getNextSequence("SEQ_TMTB_BURDEN");
+                regBurden.setTmtbBurdenSq(tmtbBurdenSq);
+            }
+            regBurden.setTmtbSq(tmtb.getTmtbSq());
+            regBurden.setRegNo(tmtb.getRegNo());
+            regBurden.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterBurden(regBurden);
+        }
+
+        log.info("newBurdenSq = {}, newTmtbSq = {}, newSupplyCd = {}, newBurdenRate = {} , newUseYn = {}");
+    }
+
+    /**
+     * 다다익선 공급업체 삭제
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 5
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbSupplyCompanyList(MoreBetterGoods moreBetterGoods) {
+        if (moreBetterGoods == null || (moreBetterGoods.getArrCompanySq() == null && moreBetterGoods.getArrCompanySq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterGoods.getArrCompanySq().length > 0) {
+            morebetterDao.deleteTmtbSupplyCompanyList(moreBetterGoods);
+        }
+    }
+
+    /**
+     * 다다익선 브랜드 삭제
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 16
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbBrandList(MoreBetterGoods moreBetterGoods) {
+        if (moreBetterGoods == null || (moreBetterGoods.getArrBrandSq() == null && moreBetterGoods.getArrBrandSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterGoods.getArrBrandSq().length > 0) {
+            morebetterDao.deleteTmtbBrandList(moreBetterGoods);
+        }
+    }
+
+    /**
+     * 다다익선 적용상품 삭제
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 16
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbApplyGoodsList(MoreBetterGoods moreBetterGoods) {
+        if (moreBetterGoods == null || (moreBetterGoods.getArrApplyGoodsSq() == null && moreBetterGoods.getArrApplyGoodsSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterGoods.getArrApplyGoodsSq().length > 0) {
+            morebetterDao.deleteTmtbApplyGoodsList(moreBetterGoods);
+        }
+    }
+
+    /**
+     * 다다익선 제외상품 삭제
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 16
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbExceptGoodsList(MoreBetterGoods moreBetterGoods) {
+        if (moreBetterGoods == null || (moreBetterGoods.getArrExceptGoodsSq() == null && moreBetterGoods.getArrExceptGoodsSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterGoods.getArrExceptGoodsSq().length > 0) {
+            morebetterDao.deleteTmtbExceptGoodsList(moreBetterGoods);
+        }
+    }
+
+    /**
+     * 다다익선 다다익선 할인구간 삭제
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 5
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbSectionValList(MoreBetterSection moreBetterSection) {
+        if (moreBetterSection == null || (moreBetterSection.getArrSectionSq() == null && moreBetterSection.getArrSectionSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterSection.getArrSectionSq().length > 0) {
+            morebetterDao.deleteTmtbSectionList(moreBetterSection);
+            morebetterDao.deleteTmtbValList(moreBetterSection);
+        }
+    }
+
+    /**
+     * 다다익선 제외상품 삭제
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 16
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbBurdenList(MoreBetterBurden moreBetterBurden) {
+        if (moreBetterBurden == null || (moreBetterBurden.getArrBurdenSq() == null && moreBetterBurden.getArrBurdenSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterBurden.getArrBurdenSq().length > 0) {
+            morebetterDao.deleteTmtbBurdenList(moreBetterBurden);
+        }
+    }
+    /* // CSB 진행 */
+}

+ 48 - 13
style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java

@@ -47,7 +47,7 @@ public class TsaOrderChangeService {
 	private ObjectMapper mapper;
 	
 	/**
-	 * 주문상세 > 주문취소대상목록
+	 * 주문상세 > 주문취소신청 > 주문취소,반품,교환 대상목록
 	 * @param Order
 	 * @return Order
 	 * @author jsh77b
@@ -58,7 +58,7 @@ public class TsaOrderChangeService {
 	}
 	
 	/**
-	 * 주문상세 > 주문취소 환불 금액 계산
+	 * 주문상세 > 주문취소신청 > 주문취소, 반품 환불 금액 계산
 	 * @param Order
 	 * @return Order
 	 * @author jsh77b
@@ -209,7 +209,7 @@ public class TsaOrderChangeService {
 				delvObj.setRealOrdAmt(orderObj.getRealOrdAmt());
 				
 				delvObj.setDelvFee(orderObj.getDelvFee());
-				delvObj.setMinOrdAmt(orderObj.getMinOrdAmt());			
+				delvObj.setMinOrdAmt(orderObj.getMinOrdAmt());		
 				delvObj.setOrgDelvFee(orderObj.getOrgDelvFee());
 				delvObj.setRtnDelvFee(orderObj.getRtnDelvFee());
 				delvObj.setExcDelvFee(orderObj.getExcDelvFee());
@@ -220,7 +220,7 @@ public class TsaOrderChangeService {
 				cancelDelvRefundList.add(delvObj);
 			}
 			
-			// 3.9 FRONT 화면에서 용 하는 변수 값 설정 & 계산
+			// 3.9 FRONT 화면에서 용 하는 변수 값 설정 & 계산
 			spanSumRealOrdAmt	+= oneData.getRealOrdAmt();
 			spanPntDcAmt		+= orderObj.getPntDcAmt();
 			spanPrePntDcAmt		+= orderObj.getPrePntDcAmt();
@@ -319,6 +319,7 @@ public class TsaOrderChangeService {
 		mav.set("spanTmtb2DcAmt"		, spanTmtb2DcAmt);			//금액할인
 		mav.set("spanGfcdUseAmt"		, spanGfcdUseAmt);			//취소 고객 상품권 금액
 		mav.set("spanRealCnclRtnAmt"	, spanRealCnclRtnAmt);		//취소 상품 실결제 금액
+		mav.set("sumDeliveryFee"		, sumDeliveryFee);			//배송비 합계 금액
 		mav.set("spanTotDeliveryFee"	, spanTotDeliveryFee);		//추가 배송 금액
 		mav.set("spanTotRtnDelvFee"		, spanRtnSumDeliveryFee);	//추가 반품 배송 금액
 		mav.set("spanTotExcDelvFee"		, spanExcSumDeliveryFee);	//추가 교환 배송 금액
@@ -328,7 +329,7 @@ public class TsaOrderChangeService {
 	}
 	
 	/**
-	 * 주문상세 > 주문취소
+	 * 주문상세 > 주문취소신청 > 주문취소
 	 * @param Order
 	 * @return Order
 	 * @author jsh77b
@@ -350,6 +351,7 @@ public class TsaOrderChangeService {
 		String chgReason 	= mav.getString("chgReason").toString();
 		String chgMemo 		= mav.getString("chgMemo").toString();
 		String allCanYn		= mav.getString("allCanYn").toString();
+		String isCustomer	= mav.getString("isCustomer").toString();
 		String chgGb		= "G680_20";
 		
 		// 4.1 주문변경 기본정보 등록
@@ -383,10 +385,10 @@ public class TsaOrderChangeService {
 			// 4.2.1 취소수량이 존재하면 주문정보 수정 및 주문변경정보 등록
 			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
 				// 4.2.3 주문상세단품정보 수정
-				orderDao.updateOrderDetailItem(cancelOrderRefundPo);
+				orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
 				
 				// 4.2.4 주문상세단품정보 이력 등록
-				orderDao.createOrderDetailItemHst(cancelOrderRefundPo);
+				orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
 				
 				// 4.3 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
 				Boolean temp = false;
@@ -405,7 +407,7 @@ public class TsaOrderChangeService {
 				}
 				
 				// 4.5 상품옵션 재고 원복
-				orderDao.updateOptionQty(cancelOrderRefundPo);
+				orderChangeDao.updateOptionQty(cancelOrderRefundPo);
 			}
 		}
 		
@@ -423,10 +425,10 @@ public class TsaOrderChangeService {
 			}
 			
 			// 5.1 주문변경상세정보 이력 등록
-			orderDao.createOrderDetailHstCnclRtn(vo);
+			orderChangeDao.createOrderDetailHstCnclRtn(vo);
 			
 			// 4.2 주문변경상세정보 수정
-			orderDao.updateOrderDetail(vo);
+			orderChangeDao.updateOrderDetail(vo);
 			
 			// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음
 			// 5.3 주문변경상세정보 등록
@@ -438,9 +440,28 @@ public class TsaOrderChangeService {
 			changeDetailPo.setRegNo(userNo);
 			changeDetailPo.setUpdNo(userNo);
 			
-			orderDao.createOrderChangeDetail(changeDetailPo);
+			orderChangeDao.createOrderChangeDetail(changeDetailPo);
 		}
 		
+		// To Do List
+		// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
+		int spanRealCnclRtnAmt 		= Integer.parseInt(mav.get("spanRealCnclRtnAmt").toString());		// 취소금액합계
+		int sumDeliveryFee 			= Integer.parseInt(mav.get("sumDeliveryFee").toString());			// 배송비합계
+		int spanTotDeliveryFee 		= Integer.parseInt(mav.get("spanTotDeliveryFee").toString());		// 추가배송비합계
+		int spanTotRtnDelvFee 		= Integer.parseInt(mav.get("spanTotRtnDelvFee").toString());		// 반품배송비합계
+		int spanRefundAmt			= 0;
+		
+		// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+		if ("true".equals(isCustomer)) {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
+			//Integer.parseInt(mav.get("spanRefundAmt").toString());
+		}
+		// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+		else {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
+		}
+		mav.set("spanRefundAmt", spanRefundAmt);
+		
 		// 6. 환불결제 정보 등록
 		Order paymentOrder = new Order();
 		paymentOrder.setOrdNo(ordNo);
@@ -496,22 +517,36 @@ public class TsaOrderChangeService {
 				orderChangeDao.createDeliveryFee(delvFeeOrder);
 			}
 		}
-
+		
+		// To Do List
 		// 9. 포인트원복 (사용포인트, 주문상세단위)
 		
+		// To Do List
 		// 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
 		
-		// 11. 사은품 전체 취소 (전체취소시 적용)
+		// To Do List
+		// 11. 상품권원복
+		
+		// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
 		Order freegiftOrder = new Order();
 		freegiftOrder.setOrdNo(ordNo);
 		freegiftOrder.setUpdNo(userNo);
 		orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
 		
+		// To Do List
 		// 13. PG 연동
 		
+		// To Do List
+		// 14. 취소 완료 알림톡 발송 에정
+		
 		//int a = 100/0;
 	}
 	
+	
+	
+	
+	
+	
 	/**
 	 * 주문 환불계좌
 	 *

+ 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"));
+	}
+
+}

+ 2 - 2
style24.admin/src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -1221,8 +1221,8 @@ public class TsaGoodsController extends TsaBaseController {
 		mav.addObject("goodsStatList", rendererService.getAvailCommonCodeList("G008"));
 		// 사용여부
 		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
-		// ERP 연동여부
-		mav.addObject("erpSyncYn", commonService.getErpSyncYn());
+		// WMS 연동여부
+		mav.addObject("wmsSyncYn", commonService.getWmsSyncYn());
 		// 정보고시 목록
 		mav.addObject("niClsfCdList", rendererService.getAvailCommonCodeList("G004"));
 		// 사용자 업체

+ 171 - 119
style24.admin/src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1,45 +1,26 @@
 package com.style24.admin.biz.web;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-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.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.style24.admin.biz.service.TsaBusinessService;
-import com.style24.admin.biz.service.TsaCommonService;
-import com.style24.admin.biz.service.TsaMarketingService;
-import com.style24.admin.biz.service.TsaRendererService;
-import com.style24.admin.biz.service.TsaSystemService;
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
+import com.style24.admin.biz.service.*;
 import com.style24.admin.support.controller.TsaBaseController;
 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.CommonCode;
-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 lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponse;
-
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 /**
  * 마케팅 Controller
  * @author xodud1202
@@ -71,6 +52,12 @@ public class TsaMarketingController extends TsaBaseController {
 	@Autowired
 	private TsaSystemService systemService;
 
+	@Autowired
+	private TsaMorebetterService morebetterService;
+
+	@Autowired
+	private TsaCouponService couponService;
+
 	/* xodud1202 진행 */
 	/**
 	 * 사은품 프로모션 관리 화면
@@ -94,7 +81,7 @@ public class TsaMarketingController extends TsaBaseController {
 	public GagaMap getFreeGoodsPromotionList(@RequestBody FreeGoodsPromotion param) {
 		GagaMap result = new GagaMap();
 
-		List<FreeGoodsPromotion> marketingList = (ArrayList<FreeGoodsPromotion>)marketingService.getFreeGoodsPromotionList(param);
+		List<FreeGoodsPromotion> marketingList = (ArrayList<FreeGoodsPromotion>) marketingService.getFreeGoodsPromotionList(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
@@ -106,6 +93,7 @@ public class TsaMarketingController extends TsaBaseController {
 		return result;
 	}
 
+
 	/**
 	 * 사은품 프로모션 등록 팝업창
 	 * @param param
@@ -128,6 +116,7 @@ public class TsaMarketingController extends TsaBaseController {
 		return mav;
 	}
 
+
 	/* // xodud1202 진행 */
 
 	/* JSM 진행 */
@@ -137,15 +126,15 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @since 2020-12-21
 	 */
 	@GetMapping("/coupon/form")
-	public ModelAndView couponListForm() {
+	public ModelAndView couponListForm(){
 		ModelAndView mav = new ModelAndView();
 
 		// 쿠폰 유형 조회
-		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230"));
+		mav.addObject("cpnTypeList" ,  rendererService.getCommonCodeList("G230"));
 		// 할인 유형 조회
-		mav.addObject("dcWayList", rendererService.getCommonCodeList("G240"));
+		mav.addObject("dcWayList" , rendererService.getCommonCodeList("G240"));
 		// 사이트 조회
-		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
+		mav.addObject("siteCdList" , rendererService.getCommonCodeList("G000"));
 
 		mav.setViewName("marketing/CouponListForm");
 
@@ -161,19 +150,19 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@PostMapping("/coupon/list")
 	@ResponseBody
-	public GagaMap getCouponList(@RequestBody Coupon param) {
-		GagaMap result = new GagaMap();
+	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()));
 		param.getPageable().setTotalCount(cpnTotCnt);
 
-		result.set("pageing", param);
-		result.set("cpnTotCnt", cpnTotCnt);
-		result.set("cpnList", cpnList);
+		result.set("pageing" , param);
+		result.set("cpnTotCnt" , cpnTotCnt);
+		result.set("cpnList" , cpnList);
 
 		return result;
 	}
@@ -192,10 +181,10 @@ public class TsaMarketingController extends TsaBaseController {
 
 		// 일시 시 리스트 세팅
 		Collection<CommonCode> hhList = new ArrayList<CommonCode>();
-		for (int i = 0; i < 24; i++) {
+		for(int i = 0; i < 24; i++) {
 			num = "";
 			CommonCode temp = new CommonCode();
-			if (i < 10) {
+			if(i < 10) {
 				num = "0" + i;
 			} else {
 				num = String.valueOf(i);
@@ -206,48 +195,71 @@ public class TsaMarketingController extends TsaBaseController {
 			mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
 
 			temp.setCd(num);
-			temp.setCdNm(num + "시");
+			temp.setCdNm(num+"시");
 
 			hhList.add(temp);
 		}
 		// 일시 분 리스트 세팅
 		Collection<CommonCode> mmList = new ArrayList<CommonCode>();
-		for (int i = 0; i < 60; i++) {
+		for(int i = 0 ; i < 60; i++) {
 			num = "";
 			CommonCode temp = new CommonCode();
-			if (i < 10) {
+			if(i < 10) {
 				num = "0" + i;
 			} else {
 				num = String.valueOf(i);
 			}
 			temp.setCd(num);
-			temp.setCdNm(num + "분");
+			temp.setCdNm(num+"분");
 
 			mmList.add(temp);
 		}
 
 		// 쿠폰 유형 조회
-		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230"));
+		mav.addObject("cpnTypeList" ,  rendererService.getCommonCodeList("G230"));
 		// 사용가능 고객구분 조회
 		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100"));
 		// 사용가능 고객등급 조회
-		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
+		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G101"));
 		// 사이트코드 조회
-		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
+		mav.addObject("siteCdList" , rendererService.getCommonCodeList("G000"));
 		// 재발급 여부 조회
-		mav.addObject("reissuanceList", rendererService.getCommonCodeList("G231"));
+		mav.addObject("reissuanceList" , rendererService.getCommonCodeList("G231"));
 		// 할인방식 조회
-		mav.addObject("dcWayList", rendererService.getCommonCodeList("G240"));
+		mav.addObject("dcWayList" , rendererService.getCommonCodeList("G240"));
 		// 쿠폰다운로드 방식 조회
-		mav.addObject("dnGbList", rendererService.getCommonCodeList("G058"));
+		mav.addObject("dnGbList" , rendererService.getCommonCodeList("G058"));
+		// 결제수단 조회
+		mav.addObject("payTypeList" , rendererService.getCommonCodeList("G015"));
+		// 결제수단 조회
+		mav.addObject("cpnStatList" , rendererService.getCommonCodeList("G232"));
 		// 시간 분 리스트 세팅
-		mav.addObject("mmList", mmList);
+		mav.addObject("mmList" , mmList);
 		// 시간 시 리스트 세팅
-		mav.addObject("hhList", hhList);
+		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 진행 */
@@ -274,7 +286,7 @@ public class TsaMarketingController extends TsaBaseController {
 	public GagaMap getMorebetterList(@RequestBody MoreBetter param) {
 		GagaMap result = new GagaMap();
 
-		List<MoreBetter> tmtbList = (ArrayList<MoreBetter>)marketingService.getMorebetterList(param);
+		List<MoreBetter> tmtbList = (ArrayList<MoreBetter>) morebetterService.getMorebetterList(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
@@ -296,41 +308,59 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@ResponseBody
 	@GetMapping("/morebetterRegPopup/form")
-	public ModelAndView morebetterRegForm(MoreBetter tmtb) {
+	public ModelAndView morebetterRegForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "tmtbSeq", required = false) Integer tmtbSeq,MoreBetter tmtb) {
 		ModelAndView mav = new ModelAndView();
 
 		// 상품상태 : 등록일때는 '대기'
 		String[] exceptCds = {"G008_00"};
 		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
-		log.info("CHECK param goodsStatList>>" + rendererService.getCommonCodeList("G008", "Y", exceptCds));
 
 		// 할인구간 목록
 		mav.addObject("sectionGbList", rendererService.getAvailCommonCodeList("G810"));
-		log.info("CHECK param sectionGbList>>" + rendererService.getAvailCommonCodeList("G810"));
+
 		// 할인구분 목록
 		mav.addObject("dcWayList", rendererService.getAvailCommonCodeList("G240"));
-		log.info("CHECK param dcWayList>>" + rendererService.getAvailCommonCodeList("G240"));
 
 		// 적용 상품구분 목록
-		String[] exceptGoodsCds = {"G800_30", "G800_40"};
+		String[] exceptGoodsCds = {"G800_30","G800_40"};
 		mav.addObject("applyGoodsGbList", rendererService.getCommonCodeList("G800", "Y", exceptGoodsCds));
-		log.info("CHECK param applyGoodsGbList>>" + rendererService.getCommonCodeList("G800", "Y", exceptGoodsCds));
 
 		// 제외 상품구분 목록
 		mav.addObject("exceptGoodsGbList", rendererService.getAvailCommonCodeList("G800"));
-		log.info("CHECK param exceptGoodsGbList>>" + rendererService.getAvailCommonCodeList("G800"));
 
-		// 이것도 리스트 받아와서 바꿔야함 ㅠㅠ
-		String tmtbStat = "G232_10";
-		tmtb.setTmtbStat(tmtbStat);
+		// 다다익선 상태 목록
+		mav.addObject("tmtbStatList", rendererService.getAvailCommonCodeList("G232"));
 
-		//tmtb sq 자동생성 추가해야함
+		//tmtb sq 자동생성
 		Integer tmtbSq;
-		tmtbSq = commonService.getNextSequence("SEQ_TMTB");
-		tmtb.setTmtbSq(tmtbSq);
+		if("N".equals(mode)){
+			tmtbSq =  commonService.getNextSequence("SEQ_TMTB");
+			tmtb.setTmtbSq(tmtbSq);
+		}
+
+		if("U".equals(mode)){
+			// 다다익선 정보
+			mav.addObject("tmtbMstInfo", morebetterService.getMorebetterMstInfo(tmtbSeq));
+			mav.addObject("tmtbSupplyCompList", morebetterService.getMorebetterSupplyCompList(tmtbSeq,"G260_13"));
+			mav.addObject("tmtbBrandList", morebetterService.getMorebetterBrandList(tmtbSeq,"G260_12"));
+			mav.addObject("tmtbApplyGoodsList", morebetterService.getMorebetterApplyGoodsList(tmtbSeq,"G260_10"));
+			mav.addObject("tmtbExceptGoodsList", morebetterService.getMorebetterExceptGoodsList(tmtbSeq,"G260_10"));
+			mav.addObject("tmtbSectionValList", morebetterService.getMorebetterSectionValList(tmtbSeq));
+			mav.addObject("tmtbBurdenList", morebetterService.getMorebetterBurdenList(tmtbSeq));
+		}else{
+			mav.addObject("tmtbMstInfo", new MoreBetter());
+			mav.addObject("tmtbSupplyCompList", new MoreBetterGoods());
+			mav.addObject("tmtbBrandList", new MoreBetterGoods());
+			mav.addObject("tmtbApplyGoodsList", new MoreBetterGoods());
+			mav.addObject("tmtbExceptGoodsList", new MoreBetterGoods());
+			mav.addObject("tmtbSectionValList", new MoreBetterSection());
+			mav.addObject("tmtbBurdenList", new MoreBetterBurden());
+		}
 
+		mav.addObject("mode", mode);
+		mav.addObject("tmtbSeq", tmtbSeq);
 		mav.addObject("params", tmtb);
-		log.info("CHECK param tmtbSq>>" + tmtb.getTmtbSq());
+		log.info("CHECK param tmtbSq::{}", tmtb.getTmtbSq());
 		mav.setViewName("marketing/MorebetterRegForm");
 		return mav;
 	}
@@ -413,7 +443,7 @@ public class TsaMarketingController extends TsaBaseController {
 			e.printStackTrace();
 		}
 
-		log.info("tmtb::" + tmtb);
+		log.info("tmtb::{}", tmtb);
 
 		tmtb.setSupplyCompListNew(tmtbSupplyCompList);
 		tmtb.setBrandListNew(tmtbBrandList);
@@ -422,76 +452,98 @@ public class TsaMarketingController extends TsaBaseController {
 		tmtb.setSectionGbListNew(tmtbSectionGbList);
 		tmtb.setBurdenListNew(tmtbBurdenList);
 
-		marketingService.saveMoreBetterDetail(tmtb);
+		morebetterService.saveMoreBetterDetail(tmtb);
 
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
-
 	/**
-	 * 다다익선 할인구간 삭제
+	 * 다다익선 공급업체 삭제
 	 *
 	 * @param
 	 * @return
 	 * @author bin2107
-	 * @since 2021. 1. 5
+	 * @since 2021. 1. 12
 	 */
-	@PostMapping("/morebetter/sectionVal/delete")
+	@PostMapping("/morebetter/supplyCompany/delete")
 	@ResponseBody
-	public GagaResponse deleteSectionValList(@RequestBody Collection<MoreBetterSection> sectionValList) {
-		// 추후에 더 개발 ㅠㅠ
-		log.info("[deleteSectionValList]");
-		marketingService.deleteSectionValList(sectionValList);
+	public GagaResponse deleteTmtbSupplyCompanyList(@RequestBody MoreBetterGoods moreBetterGoods) {
+		morebetterService.deleteTmtbSupplyCompanyList(moreBetterGoods);
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
-	/* // CSB 진행 */
-
 	/**
-	 * 쿠폰조회 팝업
-	 * @param returnCode - 반환할코드. 필수
-	 * @param returnName - 반환할명칭. 필수
-	 * @param cpnNm - 쿠폰명. 옵션
+	 * 다다익선 브랜드 삭제
+	 *
+	 * @param
 	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
+	 * @author bin2107
+	 * @since 2021. 1. 12
 	 */
-	@GetMapping("/coupon/retrieve/form")
+	@PostMapping("/morebetter/brand/delete")
 	@ResponseBody
-	public ModelAndView couponRetrieveForm(@RequestParam(value = "returnCode") String returnCode, @RequestParam(value = "returnName") String returnName, @RequestParam(value = "cpnNm", required = false) String cpnNm) {
-		ModelAndView mav = new ModelAndView();
-
-		mav.addObject("returnCode", returnCode);
-		mav.addObject("returnName", returnName);
-		mav.addObject("cpnNm", StringUtils.defaultString(cpnNm, ""));
-
-		// 사이트 목록
-		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
-
-		// 사용가능고객구분 목록
-		mav.addObject("usableCustGbList", rendererService.getAvailCommonCodeList("G100"));
-
-		// 쿠폰유형 목록
-		mav.addObject("cpnTypeList", rendererService.getAvailCommonCodeList("G230"));
-
-		// 할인방식 목록
-		mav.addObject("dcWayList", rendererService.getAvailCommonCodeList("G240"));
+	public GagaResponse deleteTmtbBrandList(@RequestBody MoreBetterGoods moreBetterGoods) {
+		morebetterService.deleteTmtbBrandList(moreBetterGoods);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
 
-		mav.setViewName("marketing/CouponRetrieveForm");
+	/**
+	 * 다다익선 적용상품 삭제
+	 *
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 12
+	 */
+	@PostMapping("/morebetter/applyGoods/delete")
+	@ResponseBody
+	public GagaResponse deleteTmtbApplyGoodsList(@RequestBody MoreBetterGoods moreBetterGoods) {
+		morebetterService.deleteTmtbApplyGoodsList(moreBetterGoods);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
 
-		return mav;
+	/**
+	 * 다다익선 제외상품 삭제
+	 *
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 12
+	 */
+	@PostMapping("/morebetter/exceptGoods/delete")
+	@ResponseBody
+	public GagaResponse deleteTmtbExceptGoodsList(@RequestBody MoreBetterGoods moreBetterGoods) {
+		morebetterService.deleteTmtbExceptGoodsList(moreBetterGoods);
+		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
 	/**
-	 * 쿠폰조회 목록
-	 * @param coupon - 쿠폰 정보
+	 * 다다익선 할인구간 삭제
+	 *
+	 * @param
 	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
+	 * @author bin2107
+	 * @since 2021. 1. 5
 	 */
-	@PostMapping("/coupon/retrieve/list")
+	@PostMapping("/morebetter/sectionVal/delete")
 	@ResponseBody
-	public Collection<Coupon> getCouponRetrieveList(@RequestBody Coupon coupon) {
-		return marketingService.getCouponRetrieveList(coupon);
+	public GagaResponse deleteTmtbSectionValList(@RequestBody MoreBetterSection moreBetterSection) {
+		morebetterService.deleteTmtbSectionValList(moreBetterSection);
+		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
+	/**
+	 * 다다익선 업체분담율 삭제
+	 *
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 12
+	 */
+	@PostMapping("/morebetter/burden/delete")
+	@ResponseBody
+	public GagaResponse deleteTmtbBurdenList(@RequestBody MoreBetterBurden moreBetterBurden) {
+		morebetterService.deleteTmtbBurdenList(moreBetterBurden);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
+	/* // CSB 진행 */
 }

+ 81 - 36
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -63,28 +63,28 @@ public class TsaOrderChangeController extends TsaBaseController {
 	 * @since 2020. 12. 22
 	 */
 	@GetMapping("/cancel/request/form")
-	public ModelAndView cancelRequestFrom(@RequestParam(value = "ordNo") int ordNo, @RequestParam(value = "cncWait") String cncWait) {
+	public ModelAndView cancelRequestFrom(@RequestParam(value = "ordNo") int ordNo) {
 
 		Order order = new Order();
 		ModelAndView mav = new ModelAndView();
 		
 		order.setOrdNo(ordNo);
-		order.setCncWait(cncWait);
 		
-		//NicePay nicePay = new NicePay();
-		//nicePay.setMerchantId(env.getProperty("pg.nicepay.merchantId"));
-		//nicePay.setMerchantKey(env.getProperty("pg.nicepay.merchantKey"));
+		// 취소가능 주문상세상탭값 설정
+		String[] ordDtlStatArr = new String[4];
+		ordDtlStatArr[0] = "G013_10";
+		ordDtlStatArr[1] = "G013_20";
+		ordDtlStatArr[2] = "G013_30";
+		ordDtlStatArr[3] = "G013_40";
 		
 		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
 
 		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
 
-		//mav.addObject("nicePay", nicePay);
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 취소사유
 		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 취소요청대상 목록
 		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
 		mav.addObject("ordNo"						, ordNo);
-		mav.addObject("cncWait"						, cncWait);
 
 		mav.setViewName("order/CancelRequestForm");
 		
@@ -110,6 +110,11 @@ public class TsaOrderChangeController extends TsaBaseController {
 
 		List<Order> cancelReqList = cancelReq.getCancelReqList(); // 취소요청정보
 		
+		// To Do List
+		// @ 결품취소로직 현재는 일반취소로직만존재
+		// @ 주문취소 취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 
+		
 		// 1. 환불금액정보 계산 & 조회
 		mav = orderChangeService.orderCancelRefundAmt(cancelReqList);
 		
@@ -123,6 +128,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		mav.set("bankCd"		, cancelReq.getBankCd());
 		
 		mav.set("allCanYn"		, cancelReq.getAllCanYn());
+		mav.set("isCustomer"	, cancelReq.getIsCustomer());
 		
 		// 3. 주문변경 DB 등록 (주문정보, 배송정보)
 		orderChangeService.orderCancel(mav);
@@ -153,6 +159,67 @@ public class TsaOrderChangeController extends TsaBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 반품요청 화면
+	 * 
+	 * @param ordNo - 주문번호
+	 * @param cncWait - 취소대기요청 구분
+	 * @return ModelAndView
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	@GetMapping("/return/request/form")
+	public ModelAndView returnRequestFrom(@RequestParam(value = "ordNo") int ordNo) {
+
+		Order order = new Order();
+		ModelAndView mav = new ModelAndView();
+		
+		order.setOrdNo(ordNo);
+		
+		// 취소가능 주문상세상탭값 설정
+		String[] ordDtlStatArr = new String[3];
+		ordDtlStatArr[0] = "G013_50";
+		ordDtlStatArr[1] = "G013_55";
+		ordDtlStatArr[2] = "G013_60";
+		order.setOrdDtlStatArr(ordDtlStatArr);
+		
+		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
+
+		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
+
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 반품사유
+		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 반품요청대상 목록
+		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
+		mav.addObject("ordNo"						, ordNo);
+		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));			// 배송정보
+
+		mav.setViewName("order/ReturnRequestForm");
+		
+		return mav;
+	}
+	
+	
+	
+	/**
+	 * 환불계좌목록
+	 *
+	 * @param ordNo - 주문번호
+	 * @param custNo - 고객고유번호
+	 * @return Collection<TsaOrder>
+	 * @author jsshin
+	 * @since 2020. 10. 16.
+	 */
+	@GetMapping("/refund/account/info/list")
+	@ResponseBody
+	public Collection<Order> getRefundAccountInfoList(@RequestParam(value = "ordNo") int ordNo) {
+		Order order = new Order();
+		order.setOrdNo(ordNo);
+
+		Collection<Order> orderRfAccountInfo = orderChangeService.getRefundAccount(order);
+
+		return orderRfAccountInfo;
+	}
+	
 	/**
 	 * 환불계좌등록 화면
 	 *
@@ -181,7 +248,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 	}
 	
 	/**
-	 * 환불계좌 저장
+	 * 환불계좌등록
 	 *
 	 * @param order - 환불계좌정보
 	 * @return GagaResponse
@@ -196,16 +263,12 @@ public class TsaOrderChangeController extends TsaBaseController {
 		order.setUpdNo(userNo);
 		order.setRegNo(userNo);
 		
-		/*
-		NicePay nicePay = new NicePay();
-		nicePay.setInAccount(order.getRaNo());
-		nicePay.setInBankCode(order.getRaBnk());
-		nicePay.setRaNm(order.getRaNm());
-		String accountCheck = nicepay.checkBankAccount(nicePay);
-		*/
-		
 		String accountCheck = "Y";
-
+		
+		// To Do List
+		// @ 환불계좌인증
+		
+		
 		if ("Y".equals(accountCheck)) {
 			orderChangeService.saveRefundAccount(order);
 		} else {
@@ -215,25 +278,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 	
-	/**
-	 * 환불계좌정보
-	 *
-	 * @param ordNo - 주문번호
-	 * @param custNo - 고객고유번호
-	 * @return Collection<TsaOrder>
-	 * @author jsshin
-	 * @since 2020. 10. 16.
-	 */
-	@GetMapping("/refund/account/info/list")
-	@ResponseBody
-	public Collection<Order> getRefundAccountInfoList(@RequestParam(value = "ordNo") int ordNo) {
-		Order order = new Order();
-		order.setOrdNo(ordNo);
-
-		Collection<Order> orderRfAccountInfo = orderChangeService.getRefundAccount(order);
-
-		return orderRfAccountInfo;
-	}
+	
 }
 
 

+ 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;

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

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
@@ -26,4 +27,6 @@ public class MoreBetterBurden extends TscBaseDomain {
 	//private String supplyCompCd;
 	private String burdenRate;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrBurdenSq;
 }

+ 12 - 0
style24.admin/src/main/java/com/style24/persistence/domain/MoreBetterGoods.java

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
@@ -34,4 +35,15 @@ public class MoreBetterGoods extends TscBaseDomain {
 	private String goodsCd;
 	private String goodsNm;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrCompanySq;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrBrandSq;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrApplyGoodsSq;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrExceptGoodsSq;
 }

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

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
@@ -29,4 +30,7 @@ public class MoreBetterSection extends TscBaseDomain {
 	private Integer udpNo;			// 수정자
 	private String  udtDt;			// 수정일시
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrSectionSq;
+
 }

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

@@ -29,7 +29,7 @@ public class Order extends TscBaseDomain {
 	private int npayOrdNo;
 	private String frontGb;
 	private String frontGbNm;
-	
+
 	// 주문상세
 	private int ordDtlNo;
 	private String ordExchGb;
@@ -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,21 +344,21 @@ 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;
 }
 
 

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

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

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

@@ -80,12 +80,12 @@
 	</select>
 	
 	<!-- ERP 연동 여부 -->
-	<select id="getErpSyncYn" resultType="String">
-		/* TsaSystem.getErpSyncYn */
-		SELECT UPPER(NVL(USE_YN,'N')) AS ERP_SYNC_YN
+	<select id="getWmsSyncYn" resultType="String">
+		/* TsaSystem.getWmsSyncYn */
+		SELECT UPPER(NVL(USE_YN,'N')) AS WMS_SYNC_YN
 		FROM TB_COMMON_CODE
 		WHERE CD_GB = 'G077'
-		AND CD = 'ERPSYNCYN'
+		AND CD = 'WMSSYNCYN'
 	</select>
 	
 </mapper>

+ 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 - 314
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaMarketing.xml

@@ -28,320 +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 진행 -->
-
-	<!-- // CSB 진행 -->
-	<select id="getMorebetterList" parameterType="MoreBetter" resultType="MoreBetter">
-		/* TsaMarketing.getMorebetterList */
-		SELECT TMTB_SQ
-			 , TMTB_NM
-			 , FN_GET_CODE_NM('G232',TMTB_STAT) as TMTB_STAT
-			 , DATE_FORMAT(TMTB_ST_DT, '%Y.%m.%d') AS TMTB_STDT
-			 , DATE_FORMAT(TMTB_ED_DT, '%Y.%m.%d') AS TMTB_EDDT
-			 , DEL_YN
-			 , FN_GET_USER_NM(REG_NO) AS REG_NM
-			 , DATE_FORMAT(REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
-			 , FN_GET_USER_NM(UDP_NO) AS UPD_NM
-			 , DATE_FORMAT(UDT_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
-		FROM TB_TMTB
-		WHERE 1=1
-		<if test="tmtbStdt != null and tmtbStdt != '' and tmtbEddt != null and tmtbEddt != ''">
-			AND DATE_FORMAT(TMTB_ST_DT,'%Y%m%d%H%i%S') >= DATE_FORMAT(#{tmtbStdt} , '%Y%m%d%H%i%S')
-			AND DATE_FORMAT(TMTB_ED_DT,'%Y%m%d%H%i%S') <![CDATA[ <= ]]> DATE_FORMAT(#{tmtbEddt} , '%Y%m%d%H%i%S')
-		</if>
-		<if test="searchTxt != null and searchTxt != ''">
-			<if test="searchGubun != null and searchGubun == 'tmtbSq'">
-				AND TMTB_SQ = #{searchTxt}
-			</if>
-			<if test="searchGubun != null and searchGubun == 'tmtbNm'">
-				AND TMTB_NM = #{searchTxt}
-			</if>
-		</if>
-		ORDER BY REG_DT DESC
-	</select>
-
-	<insert id="saveMorebetterMst" parameterType="MoreBetter" >
-		/* TsaMarketing.saveMorebetterMst */
-		INSERT INTO TB_TMTB(
-					 TMTB_SQ
-					,TMTB_NM
-					,TMTB_STAT
-					,TMTB_ST_DT
-					,TMTB_ED_DT
-					,MULTI_YN
-					,DEL_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-			         #{tmtbSq}
-					,#{tmtbNm}
-				    ,#{tmtbStat}
-				    ,#{tmtbStdt}
-				    ,#{tmtbEddt}
-				    ,#{multiYn}
-				    ,'N'
-				    ,#{regNo}
-				    ,NOW()
-				    ,#{udpNo}
-				    ,NOW()
-				   )
-	</insert>
-
-	<insert id="saveMorebetterGoods" parameterType="MoreBetterGoods" >
-		/* TsaMarketing.saveMorebetterGoods */
-		INSERT INTO TB_TMTB_GOODS(
-		         	 TMTB_GOODS_SQ
-		        	,TMTB_SQ
-					,GOODS_GB
-					,TARGET_GB
-					,TARGET_VAL
-					,DEL_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-			         #{tmtbGoodsSq}
-			        ,#{tmtbSq}
-				    ,#{goodsGb}
-				    ,#{targetGb}
-				    ,#{targetVal}
-				    ,'N'
-				    ,#{regNo}
-				    ,NOW()
-				    ,#{udpNo}
-				    ,NOW()
-				   )
-	</insert>
-
-	<insert id="saveMorebetterSection" parameterType="MoreBetterSection" >
-		/* TsaMarketing.saveMorebetterSection */
-		INSERT INTO TB_TMTB_SECTION(
-					 TMTB_SECTION_SQ
-					,TMTB_SQ
-					,SECTION_GB
-					,SECTION_VAL
-					,DEL_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-					 #{tmtbSectionSq}
-					,#{tmtbSq}
-					,#{sectionGb}
-				    ,#{sectionVal}
-				    ,'N'
-				    ,#{regNo}
-				    ,NOW()
-				    ,#{udpNo}
-				    ,NOW()
-				   )
-	</insert>
-
-	<insert id="saveMorebetterVal" parameterType="MoreBetterSection" >
-		/* TsaMarketing.saveMorebetterVal */
-		INSERT INTO TB_TMTB_VAL(
-					 TMTB_VAL_SQ
-					,TMTB_SQ
-					,TMTB_SECTION_SQ
-					,DC_WAY
-					,DC_VAL
-					,DEL_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-					#{tmtbValSq}
-				   ,#{tmtbSq}
-				   ,#{tmtbSectionSq}
-				   ,#{dcWay}
-				   ,#{dcVal}
-				   ,'N'
-				   ,#{regNo}
-				   ,NOW()
-				   ,#{udpNo}
-				   ,NOW()
-				   )
-	</insert>
-
-	<insert id="saveMorebetterBurden" parameterType="MoreBetterBurden" >
-		/* TsaMarketing.saveMorebetterBurden */
-		INSERT INTO TB_TMTB_BURDEN(
-					 TB_TMTB_BURDEN_SQ
-					,TMTB_SQ
-					,TMTB_SUPPLY_CD
-					,TMTB_BURDEN_RATE
-					,USE_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-			         #{tmtbBurdenSq}
-			        ,#{tmtbSq}
-			        ,#{tmtbSupplyCd}
-			        ,#{tmtbBurdenRate}
-			        ,#{useYn}
-				    ,#{regNo}
-				    ,NOW()
-				    ,#{udpNo}
-				    ,NOW()
-				   )
-		ON DUPLICATE KEY UPDATE
-					 TMTB_SUPPLY_CD = #{tmtbSupplyCd}
-					,TMTB_BURDEN_RATE = #{tmtbBurdenRate}
-					,USE_YN = #{useYn}
-					,UDP_NO = #{udpNo}
-					,UDT_DT = NOW()
-	</insert>
-	<!--// CSB 진행 -->
-	
-	<!-- 쿠폰조회 목록 -->
-	<select id="getCouponRetrieveList" parameterType="Coupon" resultType="Coupon">
-		/* TsaMarketing.getCouponRetrieveList */
-		SELECT A.CPN_ID                                               /*쿠폰ID*/
-		     , A.CPN_NM                                               /*쿠폰명*/
-		     , A.SITE_CD                                              /*사이트코드(공통코드G000)*/
-		     , A.USABLE_CUST_GB                                       /*사용가능고객구분(공통코드G100)*/
-		     , A.CPN_TYPE                                             /*쿠폰유형(공통코드G230)*/
-		     , A.DC_WAY                                               /*할인방식(공통코드G240)*/
-		     , A.DC_PVAL                                              /*할인값(PC). 할인방식이 금액이면 할인금액, 율이면 할인율*/
-		     , A.DC_MVAL                                              /*할인값(모바일). 할인방식이 금액이면 할인금액, 율이면 할인율*/
-		     , A.MAX_DC_AMT                                           /*최고할인값. 할인방식이 금액이면 최고할인금액, 율이면 최고할인율*/
-		     , A.PD_GB                                                /*기간/일수구분(P 기간, D 일수)*/
-		     , DATE_FORMAT(A.AVAIL_STDT,'%Y%m%d%H%i%S') AS AVAIL_STDT /*유효시작일시(기간/일수구분 "P 기간"일 때 사용됨)*/
-		     , DATE_FORMAT(A.AVAIL_EDDT,'%Y%m%d%H%i%S') AS AVAIL_EDDT /*유효종료일시(기간/일수구분 "P 기간"일 때 사용됨)*/
-		     , A.AVAIL_DAYS                                           /*유효일수(기간/일수구분 "D 일수"일 때 사용됨)*/
-		     , A.CUST_PUB_LIMIT_QTY                                   /*고객당발행제한수량(0은 무제한)*/
-		     , A.TOT_PUB_LIMIT_QTY                                    /*총발행제한수량(0은 무제한)*/
-		     , A.ONE_PUB_QTY                                          /*1회발행수량*/
-		     , A.DN_GB                                                /*다운로드구분(A:자동다운로드, D:직접다운로드). 다운로드가능여부가 "Y 다운로드가능"일 때만 사용됨*/
-		     , A.BUY_LIMIT_AMT                                        /*구매제한금액(0은 제한없음)*/
-		FROM   TB_COUPON A
-		WHERE  A.SITE_CD = #{siteCd}
-		<if test="cpnId !=null and cpnId !=''">
-		AND	   A.CPN_ID = #{cpnId}
-		</if>
-		<if test="cpnNm !=null and cpnNm !=''">
-		AND	   A.CPN_NM LIKE '%'||#{cpnNm}||'%'
-		</if>
-		<if test="cpnType !=null and cpnType !=''">
-		AND	   A.CPN_TYPE = #{cpnType}
-		</if>
-	</select>
-	
 </mapper>

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

@@ -0,0 +1,444 @@
+<?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.TsaMorebetterDao">
+	<!-- // CSB 진행 -->
+	<select id="getMorebetterList" parameterType="MoreBetter" resultType="MoreBetter">
+		/* TsaMarketing.getMorebetterList */
+		SELECT TMTB_SQ
+			 , TMTB_NM
+			 , FN_GET_CODE_NM('G232',TMTB_STAT) as TMTB_STAT
+			 , DATE_FORMAT(TMTB_ST_DT, '%Y.%m.%d') AS TMTB_STDT
+			 , DATE_FORMAT(TMTB_ED_DT, '%Y.%m.%d') AS TMTB_EDDT
+			 , DEL_YN
+			 , FN_GET_USER_NM(REG_NO) AS REG_NM
+			 , DATE_FORMAT(REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
+			 , FN_GET_USER_NM(UDP_NO) AS UPD_NM
+			 , DATE_FORMAT(UDT_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
+		FROM TB_TMTB
+		WHERE 1=1
+		<if test="tmtbStdt != null and tmtbStdt != '' and tmtbEddt != null and tmtbEddt != ''">
+			AND DATE_FORMAT(TMTB_ST_DT,'%Y%m%d%H%i%S') >= DATE_FORMAT(#{tmtbStdt} , '%Y%m%d%H%i%S')
+			AND DATE_FORMAT(TMTB_ED_DT,'%Y%m%d%H%i%S') <![CDATA[ <= ]]> DATE_FORMAT(#{tmtbEddt} , '%Y%m%d%H%i%S')
+		</if>
+		<if test="searchTxt != null and searchTxt != ''">
+			<if test="searchGubun != null and searchGubun == 'tmtbSq'">
+				AND TMTB_SQ = #{searchTxt}
+			</if>
+			<if test="searchGubun != null and searchGubun == 'tmtbNm'">
+				AND TMTB_NM = #{searchTxt}
+			</if>
+		</if>
+		ORDER BY REG_DT DESC
+	</select>
+
+	<select id="getMorebetterMstInfo" parameterType="Integer" resultType="MoreBetter">
+		/* TsaMarketing.getMorebetterMstInfo */
+		SELECT	   	   TT.TMTB_SQ
+					 , TT.TMTB_NM
+					 , TT.TMTB_STAT
+					 , DATE_FORMAT(TT.TMTB_ST_DT , '%Y-%m-%d') AS TMTB_ST_DT
+					 , DATE_FORMAT(TT.TMTB_ED_DT , '%Y-%m-%d') AS TMTB_ED_DT
+					 , TT.MULTI_YN
+					 , TT.DEL_YN
+					 , TT.REG_NO
+					 , TT.REG_DT
+					 , TT.UDP_NO
+					 , TT.UDT_DT
+					 , TS.SECTION_GB
+					 , TS.SECTION_VAL
+					 , TV.DC_WAY
+					 , TV.DC_VAL
+		FROM 	TB_TMTB TT
+		INNER 	JOIN TB_TMTB_SECTION TS
+		ON 		TT.TMTB_SQ = TS.TMTB_SQ
+		INNER 	JOIN TB_TMTB_VAL TV
+		ON 		TT.TMTB_SQ = TV.TMTB_SQ
+		AND		TS.TMTB_SECTION_SQ = TV.TMTB_SECTION_SQ
+		WHERE 	1=1
+		  AND 	TT.TMTB_SQ = #{tmtbSq}
+		LIMIT 1
+	</select>
+
+	<select id="getMorebetterSectionValList" parameterType="Integer" resultType="MoreBetterSection">
+		/* TsaMarketing.getMorebetterSectionValList */
+		SELECT    TS.TMTB_SQ
+				 ,TS.TMTB_SECTION_SQ
+				 ,TV.TMTB_VAL_SQ
+				 ,TS.SECTION_GB
+				 ,TS.SECTION_VAL
+				 ,TV.DC_WAY
+				 ,TV.DC_VAL
+				 ,TS.DEL_YN
+				 ,TS.REG_NO
+				 ,TS.REG_DT
+				 ,TS.UDP_NO
+				 ,TS.UDT_DT
+		FROM	TB_TMTB_SECTION TS
+		INNER 	JOIN TB_TMTB_VAL TV
+		ON 		TS.TMTB_SQ = TV.TMTB_SQ
+		AND		TS.TMTB_SECTION_SQ = TV.TMTB_SECTION_SQ
+		WHERE 	1=1
+		  AND 	TS.TMTB_SQ = #{tmtbSq}
+		ORDER BY TS.TMTB_SQ, TS.TMTB_SECTION_SQ, TV.TMTB_VAL_SQ
+	</select>
+
+	<select id="getMorebetterSupplyCompList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
+		/* TsaMarketing.getMorebetterSupplyCompList */
+		SELECT 	 TMTB_GOODS_SQ
+				 , TMTB_SQ
+				 , GOODS_GB
+				 , TARGET_GB
+				 , TARGET_VAL
+				 , TARGET_VAL AS SUPPLY_COMP_CD
+				 , FN_GET_SUPPLY_COMP_NM(TARGET_VAL) AS SUPPLY_COMP_NM
+				 , DEL_YN
+				 , REG_NO
+				 , REG_DT
+				 , UDP_NO
+				 , UDT_DT
+		FROM TB_TMTB_GOODS
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+		  AND TARGET_GB = 'G260_13'
+	</select>
+
+	<select id="getMorebetterBrandList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
+		/* TsaMarketing.getMorebetterBrandList */
+		SELECT 	 TMTB_GOODS_SQ
+				 , TMTB_SQ
+				 , GOODS_GB
+				 , TARGET_GB
+				 , TARGET_VAL
+				 , TARGET_VAL AS BRAND_CD
+				 , (SELECT   BRAND_ENM
+					FROM  TB_BRAND
+					WHERE BRAND_CD = TARGET_VAL) AS BRAND_ENM
+				 , (SELECT   FN_GET_SUPPLY_COMP_NM(SUPPLY_COMP_CD)
+					FROM  TB_BRAND
+					WHERE BRAND_CD = TARGET_VAL) AS SUPPLY_COMP_NM
+				 , DEL_YN
+				 , REG_NO
+				 , REG_DT
+				 , UDP_NO
+				 , UDT_DT
+		FROM TB_TMTB_GOODS
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+		  AND TARGET_GB = 'G260_12'
+	</select>
+
+	<select id="getMorebetterApplyGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
+		/* TsaMarketing.getMorebetterApplyGoodsList */
+		SELECT 	 TMTB_GOODS_SQ
+				 , TMTB_SQ
+				 , GOODS_GB
+				 , TARGET_GB
+				 , TARGET_VAL
+				 , TARGET_VAL AS GOODS_CD
+				 , (SELECT  GOODS_NM
+					FROM  TB_GOODS
+					WHERE  GOODS_CD = TARGET_VAL) AS GOODS_NM
+				 , DEL_YN
+				 , REG_NO
+				 , REG_DT
+				 , UDP_NO
+				 , UDT_DT
+		FROM TB_TMTB_GOODS
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+		  AND TARGET_GB = 'G260_10'
+		  AND GOODS_GB IN ('G800_10','G800_20')
+	</select>
+
+	<select id="getMorebetterExceptGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
+		/* TsaMarketing.getMorebetterExceptGoodsList */
+		SELECT 	 TMTB_GOODS_SQ
+			 , TMTB_SQ
+			 , GOODS_GB
+			 , TARGET_GB
+			 , TARGET_VAL
+			 , TARGET_VAL AS GOODS_CD
+			 , (SELECT  GOODS_NM
+				FROM  TB_GOODS
+				WHERE  GOODS_CD = TARGET_VAL) AS GOODS_NM
+			 , DEL_YN
+			 , REG_NO
+			 , REG_DT
+			 , UDP_NO
+			 , UDT_DT
+		FROM TB_TMTB_GOODS
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+		  AND TARGET_GB = 'G260_10'
+		  AND GOODS_GB IN ('G800_30')
+	</select>
+
+	<select id="getMorebetterBurdenList" parameterType="Integer" resultType="MoreBetterBurden">
+		/* TsaMarketing.getMorebetterBurdenList */
+		SELECT 		TB_TMTB_BURDEN_SQ AS TMTB_BURDEN_SQ
+				   , TMTB_SQ
+				   , TMTB_SUPPLY_CD
+				   , TMTB_BURDEN_RATE
+				   , USE_YN
+				   , REG_NO
+				   , REG_DT
+				   , UDP_NO
+				   , UDT_DT
+		FROM TB_TMTB_BURDEN
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+	</select>
+
+	<insert id="saveMorebetterMst" parameterType="MoreBetter" >
+		/* TsaMarketing.saveMorebetterMst */
+		INSERT INTO TB_TMTB(
+					 TMTB_SQ
+					,TMTB_NM
+					,TMTB_STAT
+					,TMTB_ST_DT
+					,TMTB_ED_DT
+					,MULTI_YN
+					,DEL_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+			         #{tmtbSq}
+					,#{tmtbNm}
+				    ,#{tmtbStat}
+				    ,#{tmtbStdt}
+				    ,#{tmtbEddt}
+				    ,#{multiYn}
+				    ,'N'
+				    ,#{regNo}
+				    ,NOW()
+				    ,#{udpNo}
+				    ,NOW()
+				   )
+			ON DUPLICATE KEY UPDATE
+						 TMTB_NM = #{tmtbNm}
+						,TMTB_STAT = #{tmtbStat}
+						,TMTB_ST_DT = #{tmtbStdt}
+						,TMTB_ED_DT = #{tmtbEddt}
+						,MULTI_YN = #{multiYn}
+						,UDP_NO = #{udpNo}
+						,UDT_DT = NOW()
+	</insert>
+
+	<insert id="saveMorebetterGoods" parameterType="MoreBetterGoods" >
+		/* TsaMarketing.saveMorebetterGoods */
+		INSERT INTO TB_TMTB_GOODS(
+		         	 TMTB_GOODS_SQ
+		        	,TMTB_SQ
+					,GOODS_GB
+					,TARGET_GB
+					,TARGET_VAL
+					,DEL_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+			         #{tmtbGoodsSq}
+			        ,#{tmtbSq}
+				    ,#{goodsGb}
+				    ,#{targetGb}
+				    ,#{targetVal}
+				    ,'N'
+				    ,#{regNo}
+				    ,NOW()
+				    ,#{udpNo}
+				    ,NOW()
+				   )
+			ON DUPLICATE KEY UPDATE
+						 GOODS_GB = #{goodsGb}
+						,TARGET_GB = #{targetGb}
+						,TARGET_VAL = #{targetVal}
+						,UDP_NO = #{udpNo}
+						,UDT_DT = NOW()
+	</insert>
+
+	<insert id="saveMorebetterSection" parameterType="MoreBetterSection" >
+		/* TsaMarketing.saveMorebetterSection */
+		INSERT INTO TB_TMTB_SECTION(
+					 TMTB_SECTION_SQ
+					,TMTB_SQ
+					,SECTION_GB
+					,SECTION_VAL
+					,DEL_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+					 #{tmtbSectionSq}
+					,#{tmtbSq}
+					,#{sectionGb}
+				    ,#{sectionVal}
+				    ,'N'
+				    ,#{regNo}
+				    ,NOW()
+				    ,#{udpNo}
+				    ,NOW()
+				   )
+			ON DUPLICATE KEY UPDATE
+						 SECTION_GB = #{sectionGb}
+						,SECTION_VAL = #{sectionVal}
+						,UDP_NO = #{udpNo}
+						,UDT_DT = NOW()
+	</insert>
+
+	<insert id="saveMorebetterVal" parameterType="MoreBetterSection" >
+		/* TsaMarketing.saveMorebetterVal */
+		INSERT INTO TB_TMTB_VAL(
+					 TMTB_VAL_SQ
+					,TMTB_SQ
+					,TMTB_SECTION_SQ
+					,DC_WAY
+					,DC_VAL
+					,DEL_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+					#{tmtbValSq}
+				   ,#{tmtbSq}
+				   ,#{tmtbSectionSq}
+				   ,#{dcWay}
+				   ,#{dcVal}
+				   ,'N'
+				   ,#{regNo}
+				   ,NOW()
+				   ,#{udpNo}
+				   ,NOW()
+				   )
+			ON DUPLICATE KEY UPDATE
+						 DC_WAY = #{dcWay}
+						,DC_VAL = #{dcVal}
+						,UDP_NO = #{udpNo}
+						,UDT_DT = NOW()
+	</insert>
+
+	<insert id="saveMorebetterBurden" parameterType="MoreBetterBurden" >
+		/* TsaMarketing.saveMorebetterBurden */
+		INSERT INTO TB_TMTB_BURDEN(
+					 TB_TMTB_BURDEN_SQ
+					,TMTB_SQ
+					,TMTB_SUPPLY_CD
+					,TMTB_BURDEN_RATE
+					,USE_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+			         #{tmtbBurdenSq}
+			        ,#{tmtbSq}
+			        ,#{tmtbSupplyCd}
+			        ,#{tmtbBurdenRate}
+			        ,#{useYn}
+				    ,#{regNo}
+				    ,NOW()
+				    ,#{udpNo}
+				    ,NOW()
+				   )
+		ON DUPLICATE KEY UPDATE
+					 TMTB_SUPPLY_CD = #{tmtbSupplyCd}
+					,TMTB_BURDEN_RATE = #{tmtbBurdenRate}
+					,USE_YN = #{useYn}
+					,UDP_NO = #{udpNo}
+					,UDT_DT = NOW()
+	</insert>
+
+	<delete id="deleteTmtbSupplyCompanyList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbSupplyCompanyList */
+		DELETE FROM TB_TMTB_GOODS
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrCompanySq != null and arrCompanySq.length>0">
+			AND TMTB_GOODS_SQ IN
+			<foreach collection="arrCompanySq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbBrandList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbBrandList */
+		DELETE FROM TB_TMTB_GOODS
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrBrandSq != null and arrBrandSq.length>0">
+			AND TMTB_GOODS_SQ IN
+			<foreach collection="arrBrandSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbApplyGoodsList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbApplyGoodsList */
+		DELETE FROM TB_TMTB_GOODS
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrApplyGoodsSq != null and arrApplyGoodsSq.length>0">
+			AND TMTB_GOODS_SQ IN
+			<foreach collection="arrApplyGoodsSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbExceptGoodsList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbExceptGoodsList */
+		DELETE FROM TB_TMTB_GOODS
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrExceptGoodsSq != null and arrExceptGoodsSq.length>0">
+			AND TMTB_GOODS_SQ IN
+			<foreach collection="arrExceptGoodsSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbSectionList" parameterType="MoreBetterSection">
+		/* TsaMarketing.deleteTmtbSectionList */
+		DELETE FROM TB_TMTB_SECTION
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrSectionSq != null and arrSectionSq.length>0">
+			AND TMTB_SECTION_SQ IN
+			<foreach collection="arrSectionSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbValList" parameterType="MoreBetterSection">
+		/* TsaMarketing.deleteTmtbValList */
+		DELETE FROM TB_TMTB_VAL
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrSectionSq != null and arrSectionSq.length>0">
+			AND TMTB_SECTION_SQ IN
+			<foreach collection="arrSectionSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbBurdenList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbBurdenList */
+		DELETE FROM TB_TMTB_BURDEN
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrBurdenSq != null and arrBurdenSq.length>0">
+			AND TB_TMTB_BURDEN_SQ IN
+			<foreach collection="arrBurdenSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+	<!--// CSB 진행 -->
+</mapper>

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

@@ -2,7 +2,7 @@
 <!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.TsaOrderDao">
 
-	<!-- 주문목록 카운트 -->
+	<!-- 주문목록 > 주문목록카운트 -->
 	<select id="getOrderListCount" parameterType="Order" resultType="int">
 		/* order.getOrderListCnt */
 		SELECT COUNT(1)  
@@ -166,7 +166,7 @@
         </if>
 	</select>
 
-	<!-- 주문목록 -->
+	<!-- 주문목록 > 주문목록 -->
 	<select id="getOrderList" parameterType="Order" resultType="Order">
 		/* order.getOrderList */
 		SELECT Z.*
@@ -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}
@@ -386,7 +386,7 @@
              , Z.ORD_DTL_ITEM_SQ DESC
 	</select>
 	
-	<!-- 주문상세 > 주문 정보 -->
+	<!-- 주문상세 > 주문기본정보 -->
 	<select id="getOrderInfoList" parameterType="Order" resultType="Order">
 		/* order.getOrderInfoList */
 		SELECT O.SITE_CD
@@ -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
@@ -448,7 +448,7 @@
 		LIMIT  1
 	</select>
 	
-	<!-- 주문상세 > 상품상세 목록 -->
+	<!-- 주문상세 > 주문상품상세 목록(단품) -->
 	<select id="getOrderDetailList" parameterType="Order" resultType="Order">
 		/* order.getOrderDetailList */
 		SELECT OD.ORD_NO
@@ -470,7 +470,11 @@
 		     , ODI.ITEM_PRICE
 		     , ODI.ITEM_QTY * OD.ORD_QTY      AS ORD_QTY
 		     , ODI.ITEM_QTY * OD.CNCL_RTN_QTY AS CNCL_RTN_QTY
-		     , ODI.OPT_ADD_PRICE 
+ 		     , CASE WHEN OCD.ORD_REQ_CHG_QTY IS NULL
+			        THEN 0
+			        ELSE OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY
+			        END  ORD_REQ_CHG_QTY
+		     , ODI.OPT_ADD_PRICE
 		     , ODI.CPN1_DC_AMT
 		     , ODI.GOODS_CPN_DC_AMT
 		     , ODI.CART_CPN_DC_AMT
@@ -540,8 +544,21 @@
 				GROUP  BY ODH.ORD_DTL_STAT
 			) Z
 		) X
-		ON     OD.ORD_NO = X.ORD_NO
-		AND    OD.ORD_DTL_NO = X.ORD_DTL_NO
+		ON     OD.ORD_DTL_NO = X.ORD_DTL_NO
+		LEFT   OUTER JOIN (
+			SELECT OD.ORD_DTL_NO
+			     , SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+			FROM   TB_ORDER_CHANGE_DETAIL OCD
+			INNER  JOIN TB_ORDER_DETAIL OD
+			ON     OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+			WHERE  1=1
+			AND    OD.ORD_NO = #{ordNo}
+			AND    OCD.CHG_STAT IN (
+				'G685_20', 'G685_30', 'G685_40'
+			)
+			GROUP  BY OCD.ORD_DTL_NO
+		) OCD
+		ON     OD.ORD_DTL_NO = OCD.ORD_DTL_NO
 		WHERE  1=1
 		AND    OD.ORD_NO = #{ordNo}
 	</select>
@@ -637,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}
@@ -657,7 +674,7 @@
 		     , Z.DELV_FEE_SQ
 	</select>
 	
-	<!-- 주문상세 > 취소 / 반품 / 교환 요청 정보 -->
+	<!-- 주문상세 > 취소/반품/교환 요청정보 -->
 	<select id="getOrderChangeList" parameterType="Order" resultType="Order">
 		/* order.getOrderChangeList */
 		SELECT OCD.ORD_CHG_SQ
@@ -669,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)
@@ -695,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>
 	
 	<!-- 주문상세 > 환불정보 -->
@@ -712,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
@@ -854,14 +871,14 @@
 		</if>
 	</select>
 	
-	<!-- 입점업체 엑셀다운용 임시테이블 삭제-->
+	<!-- 주문/배송 > 입점업체 엑셀다운용 임시테이블 삭제-->
 	<delete id="deleteEntryExcelDownTmp" parameterType="Order">
 		/* TsbOrder.deleteEntryExcelDownTmp */
 		DELETE FROM TB_ENTRY_UPLOAD_EXCEL
 		WHERE  1=1
 	</delete>
 	
-	<!-- 주문상세정보 변경 (입점) -->
+	<!-- 주문/배송 > 입점업체 주문상세정보 변경 (입점) -->
 	<update id="updateOrderDetailStat" parameterType="Order">
 		/* Order.updateOrderDetailStat */
 		UPDATE TB_ORDER_DETAIL
@@ -873,7 +890,7 @@
 		AND    SUPPLY_COMP_CD = #{supplyCompCd}
 	</update>
 	
-	<!-- 주문상세이력 생성-->
+	<!-- 주문/배송 > 주문상세이력 생성-->
 	<insert id="createOrderDetailHst" parameterType="Order">
 		/* Order.createOrderDetailHst */
 		INSERT INTO TB_ORDER_DETAIL_HST (
@@ -1028,7 +1045,7 @@
 		WHERE  ORD_DTL_NO = #{ordDtlNo}
 	</insert>
 	
-	<!-- 입점업체 엑셀다운 임시파일 체크-->
+	<!-- 주문/배송 > 입점업체 엑셀다운 임시파일 체크-->
 	<select id="getEntryUploadExcelCheck" parameterType="Order" resultType="int">
 		SELECT COUNT(1)
 		FROM   TB_ENTRY_UPLOAD_EXCEL X
@@ -1037,7 +1054,7 @@
 		AND    X.ORD_DTL_NO = #{ordDtlNo}
 	</select>
 	
-	<!-- 입점업체 엑셀다운용 임시테이블 생성-->
+	<!-- 주문/배송 > 입점업체 엑셀다운용 임시테이블 생성-->
 	<insert id="createEntryExcelDownTmp" parameterType="Order">
 		INSERT INTO TB_ENTRY_UPLOAD_EXCEL (
 			ORD_NO
@@ -1189,7 +1206,7 @@
 		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
 	</select>
 	
-	<!-- 주문상세정보 변경 - 송장번호 적용(입점)  -->
+	<!-- 주문/배송 > 주문상세정보 변경 - 송장번호 적용(입점)  -->
 	<update id="updateOrderDetailInvoice" parameterType="Order">
 		/* TsaOrder.updateOrderDetailInvoice */
 		UPDATE TB_ORDER_DETAIL
@@ -1497,377 +1514,18 @@
 		AND    ORD_DTL_NO = #{ordDtlNo}
 	</update>
 	
-	
-	
-	
-	
-	<!-- 주문상세 > 주문취소신청 > 주문변경정보 등록-->
-	<insert id="createOrderChangeDetail" parameterType="OrderChange">
-		/* Order.createOrderChangeDetail */
-		INSERT INTO TB_ORDER_CHANGE_DETAIL (
-			ORD_CHG_SQ
-			, ORD_DTL_NO
-			, CHG_QTY
-			, CHG_STAT
-			, COMPLETE_DT
-			, REG_NO
-			, REG_DT
-			, UPD_NO
-			, UPD_DT
-		) VALUES (
-			#{ordChgSq}
-			, #{ordDtlNo}
-			, #{chgQty}
-			, #{chgStat}
-			, SYSDATE()
-			, #{regNo}
-			, SYSDATE()
-			, #{updNo}
-			, SYSDATE()
-		)
-	</insert>
-	
-	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 -->
-	<update id="updateOptionQty" parameterType="OrderChange">
-		/* Order.updateOptionQty */
-		UPDATE TB_OPTION OP
-		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
-		ON     OP.GOODS_CD = ODI.ITEM_CD
-		AND    OP.OPT_CD1 = ODI.OPT_CD1
-		AND    OP.OPT_CD2 = ODI.OPT_CD2
-		SET    OP.CURR_STOCK_QTY = OP.CURR_STOCK_QTY + (ODI.ITEM_QTY * #{ordCanChgQty})
-		     , OP.UPD_NO = 1
-		     , OP.UPD_DT = SYSDATE()
-		WHERE  1=1
-		AND    ODI.ORD_NO 			= #{ordNo} 
-		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
-		AND    ODI.ORD_DTL_ITEM_SQ 	= #{ordDtlItemSq}
-	</update>
-	
-	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 -->
-	<update id="updateOrderDetailItem" parameterType="Order">
-		/* Order.updateOrderDetailItem */
-		UPDATE TB_ORDER_DETAIL_ITEM ODI
-		INNER  JOIN TB_ORDER_DETAIL OD
-		ON     OD.ORD_DTL_NO = OD.ORD_DTL_NO
-		SET    ODI.ORD_DTL_STAT		= CASE WHEN OD.ORD_QTY > (OD.CNCL_RTN_QTY + #{ordCanChgQty})
-		                                   THEN ODI.ORD_DTL_STAT
-		                                   ELSE #{ordDtlStat}
-		                                    END
-		     , ODI.ORD_AMT 			= ODI.ORD_AMT 				- #{cnclRtnAmt}
-		     , ODI.CNCL_RTN_AMT 	= ODI.CNCL_RTN_AMT 			+ #{cnclRtnAmt}
-		     , ODI.CPN1_DC_AMT 		= ODI.CPN1_DC_AMT 			- #{cpn1DcAmt}
-		     , ODI.TMTB1_DC_AMT 	= ODI.TMTB1_DC_AMT 			- #{tmtb1DcAmt}
-		     , ODI.TMTB2_DC_AMT 	= ODI.TMTB1_DC_AMT 			- #{tmtb2DcAmt}
-		     , ODI.GOODS_CPN_DC_AMT = ODI.GOODS_CPN_DC_AMT 		- #{goodsCpnDcAmt}
-		     , ODI.CART_CPN_DC_AMT 	= ODI.CART_CPN_DC_AMT 		- #{cartCpnDcAmt}
-		     , ODI.PNT_DC_AMT 		= ODI.PNT_DC_AMT 			- #{pntDcAmt}
-		     , ODI.PRE_PNT_DC_AMT 	= ODI.PRE_PNT_DC_AMT 		- #{prePntDcAmt}
-		     , ODI.SAVE_PNT_AMT 	= ODI.SAVE_PNT_AMT 			- #{savePntAmt}
-		     , ODI.REAL_ORD_AMT 	= ODI.REAL_ORD_AMT 			- #{realOrdAmt}
-		     , ODI.GFCD_USE_AMT 	= ODI.GFCD_USE_AMT 			- #{gfcdUseAmt}
-		     , ODI.UPD_NO 			= #{updNo}
-		     , ODI.UPD_DT 			= SYSDATE()
-		WHERE  1=1
-		AND    ODI.ORD_NO 			= #{ordNo} 
-		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
-		AND    ODI.ORD_DTL_ITEM_SQ 	= #{ordDtlItemSq}
-	</update>
-	
-	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록 -->
-	<insert id="createOrderDetailItemHst" parameterType="Order">
-		/* Order.createOrderDetailItemHst */
-		INSERT INTO TB_ORDER_DETAIL_ITEM_HST (
-			ORD_DTL_ITEM_SQ
-			, ORD_DTL_NO
-			, ORD_NO
-			, ORD_DTL_STAT
-			, ITEM_CD
-			, OPT_CD
-			, OPT_CD1
-			, OPT_CD2
-			, SKU_MODEL_NO
-			, PRODUCT_NO
-			, PRODUCT_CODE
-			, ITEM_QTY
-			, ITEM_PRICE
-			, OPT_ADD_PRICE
-			, DISP_ORD
-			, ORD_AMT
-			, CNCL_RTN_AMT
-			, CPN1_DC_AMT
-			, TMTB1_DC_AMT
-			, TMTB2_DC_AMT
-			, GOODS_CPN_DC_AMT
-			, CART_CPN_DC_AMT
-			, PNT_DC_AMT
-			, PRE_PNT_DC_AMT
-			, SAVE_PNT_AMT
-			, REAL_ORD_AMT
-			, GFCD_USE_AMT
-			, REG_NO
-			, REG_DT
-			, UPD_NO
-			, UPD_DT
-		) 
-		SELECT ORD_DTL_ITEM_SQ
-			 , ORD_DTL_NO
-			 , ORD_NO
-			 , #{ordDtlStat}
-			 , ITEM_CD
-			 , OPT_CD
-			 , OPT_CD1
-			 , OPT_CD2
-			 , SKU_MODEL_NO
-			 , PRODUCT_NO
-			 , PRODUCT_CODE
-			 , ITEM_QTY
-			 , ITEM_PRICE
-			 , OPT_ADD_PRICE
-			 , DISP_ORD
-			 , #{ordAmt}
-			 , #{cnclRtnAmt}
-			 , #{cpn1DcAmt}
-			 , #{tmtb1DcAmt}
-			 , #{tmtb2DcAmt}
-			 , #{goodsCpnDcAmt}
-			 , #{cartCpnDcAmt}
-			 , #{pntDcAmt}
-			 , #{prePntDcAmt}
-			 , #{savePntAmt}
-			 , #{realOrdAmt}
-			 , #{gfcdUseAmt}
-			 , REG_NO
-			 , REG_DT
-			 , UPD_NO
-			 , UPD_DT
-		FROM   TB_ORDER_DETAIL_ITEM
-		WHERE  1=1
-		AND    ORD_NO = #{ordNo} 
-		AND    ORD_DTL_NO = #{ordDtlNo} 
-		AND    ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
-	</insert>
-	
-	<!-- 주문상세이력 생성-->
-	<insert id="createOrderDetailHstCnclRtn" parameterType="Order">
-		/* Order.createOrderDetailHstCnclRtn */
-		INSERT INTO TB_ORDER_DETAIL_HST (
-				ORD_DTL_NO
-				, ORD_NO
-				, ORD_EXCH_GB
-				, ORD_DTL_STAT
-				, ORG_ORD_DTL_NO
-				, SUPPLY_COMP_CD
-				, GOODS_CD
-				, PRODUCT_NO
-				, PRODUCT_CODE
-				, FORMAL_GB
-				, GOODS_TYPE
-				, LIST_PRICE
-				, CURR_PRICE
-				, DC_RATE
-				, OPT_ADD_PRICE
-				, ORD_QTY
-				, ORD_AMT
-				, CNCL_RTN_QTY
-				, CNCL_RTN_AMT
-				, CPN1_CPN_SQ
-				, CPN1_DC_AMT
-				, TMTB1_SQ
-				, TMTB1_DC_AMT
-				, TMTB2_SQ
-				, TMTB2_DC_AMT
-				, GOODS_CPN_SQ
-				, GOODS_CPN_DC_AMT
-				, CART_CPN_SQ
-				, CART_CPN_DC_AMT
-				, BURDEN_RATE
-				, PNT_DC_AMT
-				, PRE_PNT_DC_AMT
-				, SAVE_PNT_AMT
-				, REAL_ORD_AMT
-				, GFCD_USE_AMT
-				, VENDOR_ID
-				, EXTMALL_ID
-				, AGENT_ORDER_ID
-				, EXTMALL_ORDER_ID
-				, CHANGABLE_YN
-				, CHANGE_FEE_FREE_YN
-				, RETURNABLE_YN
-				, RETURN_FEE_FREE_YN
-				, SOLDOUT_YN
-				, SOLDOUT_MEMO
-				, SOLDOUT_REG_NO
-				, SOLDOUT_REG_DT
-				, DELV_ADDR_SQ
-				, DELV_FEE_CD
-				, SHOT_DELV_YN
-				, GIFT_PACK_YN
-				, MAKE_GOODS_YN
-				, ENTRY_NO
-				, DELV_LOC_CD
-				, DELV_ASSIGN_DT
-				, DELV_ASSIGN_STAT
-				, DSTRBT_NOTE
-				, DELV_STDT
-				, DELV_EDDT
-				, SHIP_COMP_CD
-				, INVOICE_NO
-				, INVOICE_SEND_YN
-				, SELL_STORE_CD
-				, SELL_FEE_RATE
-				, AF_LINK_CD
-				, ITHR_CD
-				, CONTENTS_LOC
-				, PLAN_DTL_SQ
-				, SOCIAL_SQ
-				, REG_NO
-				, REG_DT
-				, UPD_NO
-				, UPD_DT
-		)
-		SELECT OD.ORD_DTL_NO
-			 , OD.ORD_NO
-			 , OD.ORD_EXCH_GB
-			 , #{ordDtlStat}
-			 , OD.ORG_ORD_DTL_NO
-			 , OD.SUPPLY_COMP_CD
-			 , OD.GOODS_CD
-			 , OD.PRODUCT_NO
-			 , OD.PRODUCT_CODE
-			 , OD.FORMAL_GB
-			 , OD.GOODS_TYPE
-			 , OD.LIST_PRICE
-			 , OD.CURR_PRICE
-			 , OD.DC_RATE
-			 , OD.OPT_ADD_PRICE
-			 , OD.ORD_QTY
-			 , Z.ORD_AMT
-			 , #{ordCanChgQty}
-			 , OD.ORD_AMT
-			 , OD.CPN1_CPN_SQ
-			 , OD.CPN1_DC_AMT - Z.CPN1_DC_AMT
-			 , OD.TMTB1_SQ
-			 , OD.TMTB1_DC_AMT - Z.TMTB1_DC_AMT
-			 , OD.TMTB2_SQ
-			 , OD.TMTB2_DC_AMT - Z.TMTB2_DC_AMT
-			 , OD.GOODS_CPN_SQ
-			 , OD.GOODS_CPN_DC_AMT - Z.GOODS_CPN_DC_AMT
-			 , OD.CART_CPN_SQ
-			 , OD.CART_CPN_DC_AMT - Z.CART_CPN_DC_AMT
-			 , OD.BURDEN_RATE
-			 , OD.PNT_DC_AMT - Z.PNT_DC_AMT
-			 , OD.PRE_PNT_DC_AMT - Z.PRE_PNT_DC_AMT
-			 , OD.SAVE_PNT_AMT - Z.SAVE_PNT_AMT
-			 , Z.REAL_ORD_AMT
-			 , OD.GFCD_USE_AMT - Z.GFCD_USE_AMT
-			 , OD.VENDOR_ID
-			 , OD.EXTMALL_ID
-			 , OD.AGENT_ORDER_ID
-			 , OD.EXTMALL_ORDER_ID
-			 , OD.CHANGABLE_YN
-			 , OD.CHANGE_FEE_FREE_YN
-			 , OD.RETURNABLE_YN
-			 , OD.RETURN_FEE_FREE_YN
-			 , OD.SOLDOUT_YN
-			 , OD.SOLDOUT_MEMO
-			 , OD.SOLDOUT_REG_NO
-			 , OD.SOLDOUT_REG_DT
-			 , OD.DELV_ADDR_SQ
-			 , OD.DELV_FEE_CD
-			 , OD.SHOT_DELV_YN
-			 , OD.GIFT_PACK_YN
-			 , OD.MAKE_GOODS_YN
-			 , OD.ENTRY_NO
-			 , OD.DELV_LOC_CD
-			 , OD.DELV_ASSIGN_DT
-			 , OD.DELV_ASSIGN_STAT
-			 , OD.DSTRBT_NOTE
-			 , OD.DELV_STDT
-			 , OD.DELV_EDDT
-			 , OD.SHIP_COMP_CD
-			 , OD.INVOICE_NO
-			 , OD.INVOICE_SEND_YN
-			 , OD.SELL_STORE_CD
-			 , OD.SELL_FEE_RATE
-			 , OD.AF_LINK_CD
-			 , OD.ITHR_CD
-			 , OD.CONTENTS_LOC
-			 , OD.PLAN_DTL_SQ
-			 , OD.SOCIAL_SQ
-			 , #{regNo} AS REG_ID
-			 , CURRENT_TIMESTAMP() AS REG_DT
-			 , #{regNo} AS REG_ID
-			 , CURRENT_TIMESTAMP() AS UPD_DT
-		FROM   TB_ORDER_DETAIL OD
-		INNER  JOIN (
-		SELECT ODI.ORD_DTL_NO
-		     , SUM(ODI.ORD_AMT) AS ORD_AMT
-		     , SUM(ODI.CNCL_RTN_AMT) AS CNCL_RTN_AMT
-		     , SUM(ODI.CPN1_DC_AMT) AS CPN1_DC_AMT
-		     , SUM(ODI.TMTB1_DC_AMT) AS TMTB1_DC_AMT
-		     , SUM(ODI.TMTB2_DC_AMT) AS TMTB2_DC_AMT
-		     , SUM(ODI.GOODS_CPN_DC_AMT) AS GOODS_CPN_DC_AMT
-		     , SUM(ODI.CART_CPN_DC_AMT) AS CART_CPN_DC_AMT
-		     , SUM(ODI.PNT_DC_AMT) AS PNT_DC_AMT
-		     , SUM(ODI.PRE_PNT_DC_AMT) AS PRE_PNT_DC_AMT
-		     , SUM(ODI.SAVE_PNT_AMT) AS SAVE_PNT_AMT
-		     , SUM(ODI.REAL_ORD_AMT) AS REAL_ORD_AMT
-		     , SUM(ODI.GFCD_USE_AMT) AS GFCD_USE_AMT
-		FROM   TB_ORDER_DETAIL_ITEM ODI
-		WHERE  ODI.ORD_DTL_NO = #{ordDtlNo}
-		GROUP  BY ODI.ORD_DTL_NO
-		) Z
-		ON    OD.ORD_DTL_NO = Z.ORD_DTL_NO
-		AND   OD.ORD_DTL_NO = #{ordDtlNo}
-	</insert>
-	
-	<!-- 주문상세 > 주문취소신청 > 주문상세정보 수정 -->
-	<update id="updateOrderDetail" parameterType="Order">
-		/* Order.updateOrderDetail */
-		UPDATE TB_ORDER_DETAIL OD
-		INNER  JOIN (
-		SELECT ODI.ORD_DTL_NO
-		     , SUM(ODI.ORD_AMT) 			AS ORD_AMT
-		     , SUM(ODI.CNCL_RTN_AMT) 		AS CNCL_RTN_AMT
-		     , SUM(ODI.CPN1_DC_AMT) 		AS CPN1_DC_AMT
-		     , SUM(ODI.TMTB1_DC_AMT) 		AS TMTB1_DC_AMT
-		     , SUM(ODI.TMTB2_DC_AMT) 		AS TMTB2_DC_AMT 
-		     , SUM(ODI.GOODS_CPN_DC_AMT) 	AS GOODS_CPN_DC_AMT
-		     , SUM(ODI.CART_CPN_DC_AMT) 	AS CART_CPN_DC_AMT 
-		     , SUM(ODI.PNT_DC_AMT) 			AS PNT_DC_AMT 
-		     , SUM(ODI.PRE_PNT_DC_AMT) 		AS PRE_PNT_DC_AMT
-		     , SUM(ODI.SAVE_PNT_AMT) 		AS SAVE_PNT_AMT 
-		     , SUM(ODI.REAL_ORD_AMT) 		AS REAL_ORD_AMT 
-		     , SUM(ODI.GFCD_USE_AMT) 		AS GFCD_USE_AMT 
-		FROM   TB_ORDER_DETAIL_ITEM ODI
-		WHERE  ODI.ORD_NO = #{ordNo} 
-		AND    ODI.ORD_DTL_NO = #{ordDtlNo}
-		GROUP  BY ODI.ORD_DTL_NO
-		) Z
-		ON     OD.ORD_DTL_NO 			= Z.ORD_DTL_NO
-		SET    OD.ORD_DTL_STAT			= CASE WHEN OD.ORD_QTY > (OD.CNCL_RTN_QTY + #{ordCanChgQty})
-		                                       THEN OD.ORD_DTL_STAT
-		                                       ELSE #{ordDtlStat}
-		                                        END
-		     , OD.CNCL_RTN_QTY			= OD.CNCL_RTN_QTY + #{ordCanChgQty}
-		     , OD.ORD_AMT 				= Z.ORD_AMT
-		     , OD.CNCL_RTN_AMT  		= Z.CNCL_RTN_AMT
-		     , OD.CPN1_DC_AMT 			= Z.CPN1_DC_AMT
-		     , OD.TMTB1_DC_AMT 			= Z.TMTB1_DC_AMT
-		     , OD.TMTB2_DC_AMT 			= Z.TMTB2_DC_AMT
-		     , OD.GOODS_CPN_DC_AMT 		= Z.GOODS_CPN_DC_AMT
-		     , OD.CART_CPN_DC_AMT 		= Z.CART_CPN_DC_AMT
-		     , OD.PNT_DC_AMT 			= Z.PNT_DC_AMT
-		     , OD.PRE_PNT_DC_AMT 		= Z.PRE_PNT_DC_AMT
-		     , OD.SAVE_PNT_AMT 			= Z.SAVE_PNT_AMT
-		     , OD.REAL_ORD_AMT 			= Z.REAL_ORD_AMT
-		     , OD.GFCD_USE_AMT 			= Z.GFCD_USE_AMT
-		WHERE  1=1
-		AND    OD.ORD_NO = #{ordNo}
-		AND    OD.ORD_DTL_NO = #{ordDtlNo}
-	</update>
-
+
+
+
+
+
+
+
+
+
+
+
+
 </mapper>
 
 

+ 462 - 91
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml

@@ -2,7 +2,7 @@
 <!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.TsaOrderChangeDao">
 
-	<!-- 주문상세 > 주문취소대상목록 -->
+	<!-- 주문상세 > 주문취소신청 > 주문취소,반품,교환 대상목록 -->
 	<select id="getCancelRequestTargetList" parameterType="Order" resultType="Order">
 		/* order.getCancelRequestTargetList */
 		SELECT OD.ORD_NO
@@ -91,16 +91,19 @@
 		AND    DF.DELV_FEE_CD = DFP.DELV_FEE_CD 
 		AND    DFP.USE_YN = 'Y'
 		WHERE  1=1
-		AND    OD.ORD_DTL_STAT IN (
-			'G013_10', 'G013_20', 'G013_30', 'G013_40'
-		)
+		<if test="ordDtlStatArr != null and ordDtlStatArr != ''">
+        AND    OD.ORD_DTL_STAT IN
+			<foreach collection="ordDtlStatArr" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if> 
 		AND    OD.ORD_NO = #{ordNo}
 		GROUP  BY OD.ORD_NO
 		     , OD.ORD_DTL_NO
 	    ORDER  BY OD.ORD_NO
 	         , OD.ORD_DTL_NO
 	</select>
-	
+		
 	<!-- 주문상세 > 주문취소신청 > 주문변경정보 등록-->
 	<insert id="createOrderChange" parameterType="OrderChange" keyProperty="ordChgSq">
 		/* Order.createOrderChange */
@@ -143,73 +146,372 @@
 		FROM   TB_ORDER  
 		WHERE  ORD_NO = #{ordNo}
 	</insert>
+
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 -->
+	<update id="updateOrderDetailItem" parameterType="Order">
+		/* Order.updateOrderDetailItem */
+		UPDATE TB_ORDER_DETAIL_ITEM ODI
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     OD.ORD_DTL_NO = OD.ORD_DTL_NO
+		SET    ODI.ORD_DTL_STAT		= CASE WHEN OD.ORD_QTY > (OD.CNCL_RTN_QTY + #{ordCanChgQty})
+		                                   THEN ODI.ORD_DTL_STAT
+		                                   ELSE #{ordDtlStat}
+		                                    END
+		     , ODI.CNCL_RTN_AMT 	= ODI.CNCL_RTN_AMT 			+ #{cnclRtnAmt}
+		     , ODI.CPN1_DC_AMT 		= ODI.CPN1_DC_AMT 			- #{cpn1DcAmt}
+		     , ODI.TMTB1_DC_AMT 	= ODI.TMTB1_DC_AMT 			- #{tmtb1DcAmt}
+		     , ODI.TMTB2_DC_AMT 	= ODI.TMTB1_DC_AMT 			- #{tmtb2DcAmt}
+		     , ODI.GOODS_CPN_DC_AMT = ODI.GOODS_CPN_DC_AMT 		- #{goodsCpnDcAmt}
+		     , ODI.CART_CPN_DC_AMT 	= ODI.CART_CPN_DC_AMT 		- #{cartCpnDcAmt}
+		     , ODI.PNT_DC_AMT 		= ODI.PNT_DC_AMT 			- #{pntDcAmt}
+		     , ODI.PRE_PNT_DC_AMT 	= ODI.PRE_PNT_DC_AMT 		- #{prePntDcAmt}
+		     , ODI.SAVE_PNT_AMT 	= ODI.SAVE_PNT_AMT 			- #{savePntAmt}
+		     , ODI.REAL_ORD_AMT 	= ODI.REAL_ORD_AMT 			- #{realOrdAmt}
+		     , ODI.GFCD_USE_AMT 	= ODI.GFCD_USE_AMT 			- #{gfcdUseAmt}
+		     , ODI.UPD_NO 			= #{updNo}
+		     , ODI.UPD_DT 			= SYSDATE()
+		WHERE  1=1
+		AND    ODI.ORD_NO 			= #{ordNo} 
+		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
+		AND    ODI.ORD_DTL_ITEM_SQ 	= #{ordDtlItemSq}
+	</update>
 	
-	<!-- 주문사은품취소 -->
-	<update id="updateOrdFreegiftDel" parameterType="Order">
-		/* Order.updateOrdFreegiftDel */
-		UPDATE TB_ORD_FREEGIFT_VAL
-		SET    DEL_YN= 'N'
-		     , UPD_NO = #{updNo}
-		     , UPD_DT = SYSDATE()
-		WHERE  FREEGIFT_VAL_SQ IN (
-			SELECT OFRV.FREEGIFT_VAL_SQ 
-			FROM   TB_ORD_FREEGIFT OFR
-			INNER  JOIN TB_ORD_FREEGIFT_VAL OFRV
-			ON     OFR.ORD_FREEGIFT_SQ  = OFRV.ORD_FREEGIFT_SQ 
-			WHERE  1=1
-			AND    OFR.ORD_NO = (SELECT CASE WHEN SUM(X.ORD_QTY) > SUM(X.CNCL_RTN_QTY)
-								             THEN 0
-								             ELSE X.ORD_NO
-								             END 
-								 FROM   TB_ORDER_DETAIL X
-								 WHERE  1=1
-								 AND    X.ORD_NO = #{ordNo})
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록 -->
+	<insert id="createOrderDetailItemHst" parameterType="Order">
+		/* Order.createOrderDetailItemHst */
+		INSERT INTO TB_ORDER_DETAIL_ITEM_HST (
+			ORD_DTL_ITEM_SQ
+			, ORD_DTL_NO
+			, ORD_NO
+			, ORD_DTL_STAT
+			, ITEM_CD
+			, OPT_CD
+			, OPT_CD1
+			, OPT_CD2
+			, SKU_MODEL_NO
+			, PRODUCT_NO
+			, PRODUCT_CODE
+			, ITEM_QTY
+			, ITEM_PRICE
+			, OPT_ADD_PRICE
+			, DISP_ORD
+			, ORD_AMT
+			, CNCL_RTN_AMT
+			, CPN1_DC_AMT
+			, TMTB1_DC_AMT
+			, TMTB2_DC_AMT
+			, GOODS_CPN_DC_AMT
+			, CART_CPN_DC_AMT
+			, PNT_DC_AMT
+			, PRE_PNT_DC_AMT
+			, SAVE_PNT_AMT
+			, REAL_ORD_AMT
+			, GFCD_USE_AMT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) 
+		SELECT ORD_DTL_ITEM_SQ
+			 , ORD_DTL_NO
+			 , ORD_NO
+			 , #{ordDtlStat}
+			 , ITEM_CD
+			 , OPT_CD
+			 , OPT_CD1
+			 , OPT_CD2
+			 , SKU_MODEL_NO
+			 , PRODUCT_NO
+			 , PRODUCT_CODE
+			 , ITEM_QTY
+			 , ITEM_PRICE
+			 , OPT_ADD_PRICE
+			 , DISP_ORD
+			 , ORD_AMT
+			 , #{cnclRtnAmt}
+			 , #{cpn1DcAmt}
+			 , #{tmtb1DcAmt}
+			 , #{tmtb2DcAmt}
+			 , #{goodsCpnDcAmt}
+			 , #{cartCpnDcAmt}
+			 , #{pntDcAmt}
+			 , #{prePntDcAmt}
+			 , #{savePntAmt}
+			 , #{realOrdAmt}
+			 , #{gfcdUseAmt}
+			 , REG_NO
+			 , REG_DT
+			 , UPD_NO
+			 , UPD_DT
+		FROM   TB_ORDER_DETAIL_ITEM
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo} 
+		AND    ORD_DTL_NO = #{ordDtlNo} 
+		AND    ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 (재고수정) -->
+	<update id="updateOptionQty" parameterType="OrderChange">
+		/* Order.updateOptionQty */
+		UPDATE TB_OPTION OP
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OP.GOODS_CD = ODI.ITEM_CD
+		AND    OP.OPT_CD1 = ODI.OPT_CD1
+		AND    OP.OPT_CD2 = ODI.OPT_CD2
+		SET    OP.CURR_STOCK_QTY = OP.CURR_STOCK_QTY + (ODI.ITEM_QTY * #{ordCanChgQty})
+		     , OP.UPD_NO = #{updNo}
+		     , OP.UPD_DT = SYSDATE()
+		WHERE  1=1
+		AND    ODI.ORD_NO 			= #{ordNo} 
+		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
+		AND    ODI.ORD_DTL_ITEM_SQ 	= #{ordDtlItemSq}
+	</update>
+	
+	<!-- 주문상세 > 주문취소 > 주문상세정보(취소,반품) 이력 등록-->
+	<insert id="createOrderDetailHstCnclRtn" parameterType="Order">
+		/* Order.createOrderDetailHstCnclRtn */
+		INSERT INTO TB_ORDER_DETAIL_HST (
+				ORD_DTL_NO
+				, ORD_NO
+				, ORD_EXCH_GB
+				, ORD_DTL_STAT
+				, ORG_ORD_DTL_NO
+				, SUPPLY_COMP_CD
+				, GOODS_CD
+				, PRODUCT_NO
+				, PRODUCT_CODE
+				, FORMAL_GB
+				, GOODS_TYPE
+				, LIST_PRICE
+				, CURR_PRICE
+				, DC_RATE
+				, OPT_ADD_PRICE
+				, ORD_QTY
+				, ORD_AMT
+				, CNCL_RTN_QTY
+				, CNCL_RTN_AMT
+				, CPN1_CPN_SQ
+				, CPN1_DC_AMT
+				, TMTB1_SQ
+				, TMTB1_DC_AMT
+				, TMTB2_SQ
+				, TMTB2_DC_AMT
+				, GOODS_CPN_SQ
+				, GOODS_CPN_DC_AMT
+				, CART_CPN_SQ
+				, CART_CPN_DC_AMT
+				, BURDEN_RATE
+				, PNT_DC_AMT
+				, PRE_PNT_DC_AMT
+				, SAVE_PNT_AMT
+				, REAL_ORD_AMT
+				, GFCD_USE_AMT
+				, VENDOR_ID
+				, EXTMALL_ID
+				, AGENT_ORDER_ID
+				, EXTMALL_ORDER_ID
+				, CHANGABLE_YN
+				, CHANGE_FEE_FREE_YN
+				, RETURNABLE_YN
+				, RETURN_FEE_FREE_YN
+				, SOLDOUT_YN
+				, SOLDOUT_MEMO
+				, SOLDOUT_REG_NO
+				, SOLDOUT_REG_DT
+				, DELV_ADDR_SQ
+				, DELV_FEE_CD
+				, SHOT_DELV_YN
+				, GIFT_PACK_YN
+				, MAKE_GOODS_YN
+				, ENTRY_NO
+				, DELV_LOC_CD
+				, DELV_ASSIGN_DT
+				, DELV_ASSIGN_STAT
+				, DSTRBT_NOTE
+				, DELV_STDT
+				, DELV_EDDT
+				, SHIP_COMP_CD
+				, INVOICE_NO
+				, INVOICE_SEND_YN
+				, SELL_STORE_CD
+				, SELL_FEE_RATE
+				, AF_LINK_CD
+				, ITHR_CD
+				, CONTENTS_LOC
+				, PLAN_DTL_SQ
+				, SOCIAL_SQ
+				, REG_NO
+				, REG_DT
+				, UPD_NO
+				, UPD_DT
 		)
+		SELECT OD.ORD_DTL_NO
+			 , OD.ORD_NO
+			 , OD.ORD_EXCH_GB
+			 , #{ordDtlStat}
+			 , OD.ORG_ORD_DTL_NO
+			 , OD.SUPPLY_COMP_CD
+			 , OD.GOODS_CD
+			 , OD.PRODUCT_NO
+			 , OD.PRODUCT_CODE
+			 , OD.FORMAL_GB
+			 , OD.GOODS_TYPE
+			 , OD.LIST_PRICE
+			 , OD.CURR_PRICE
+			 , OD.DC_RATE
+			 , OD.OPT_ADD_PRICE
+			 , OD.ORD_QTY
+			 , Z.ORD_AMT
+			 , #{ordCanChgQty}
+			 , OD.ORD_AMT
+			 , OD.CPN1_CPN_SQ
+			 , OD.CPN1_DC_AMT - Z.CPN1_DC_AMT
+			 , OD.TMTB1_SQ
+			 , OD.TMTB1_DC_AMT - Z.TMTB1_DC_AMT
+			 , OD.TMTB2_SQ
+			 , OD.TMTB2_DC_AMT - Z.TMTB2_DC_AMT
+			 , OD.GOODS_CPN_SQ
+			 , OD.GOODS_CPN_DC_AMT - Z.GOODS_CPN_DC_AMT
+			 , OD.CART_CPN_SQ
+			 , OD.CART_CPN_DC_AMT - Z.CART_CPN_DC_AMT
+			 , OD.BURDEN_RATE
+			 , OD.PNT_DC_AMT - Z.PNT_DC_AMT
+			 , OD.PRE_PNT_DC_AMT - Z.PRE_PNT_DC_AMT
+			 , OD.SAVE_PNT_AMT - Z.SAVE_PNT_AMT
+			 , Z.REAL_ORD_AMT
+			 , OD.GFCD_USE_AMT - Z.GFCD_USE_AMT
+			 , OD.VENDOR_ID
+			 , OD.EXTMALL_ID
+			 , OD.AGENT_ORDER_ID
+			 , OD.EXTMALL_ORDER_ID
+			 , OD.CHANGABLE_YN
+			 , OD.CHANGE_FEE_FREE_YN
+			 , OD.RETURNABLE_YN
+			 , OD.RETURN_FEE_FREE_YN
+			 , OD.SOLDOUT_YN
+			 , OD.SOLDOUT_MEMO
+			 , OD.SOLDOUT_REG_NO
+			 , OD.SOLDOUT_REG_DT
+			 , OD.DELV_ADDR_SQ
+			 , OD.DELV_FEE_CD
+			 , OD.SHOT_DELV_YN
+			 , OD.GIFT_PACK_YN
+			 , OD.MAKE_GOODS_YN
+			 , OD.ENTRY_NO
+			 , OD.DELV_LOC_CD
+			 , OD.DELV_ASSIGN_DT
+			 , OD.DELV_ASSIGN_STAT
+			 , OD.DSTRBT_NOTE
+			 , OD.DELV_STDT
+			 , OD.DELV_EDDT
+			 , OD.SHIP_COMP_CD
+			 , OD.INVOICE_NO
+			 , OD.INVOICE_SEND_YN
+			 , OD.SELL_STORE_CD
+			 , OD.SELL_FEE_RATE
+			 , OD.AF_LINK_CD
+			 , OD.ITHR_CD
+			 , OD.CONTENTS_LOC
+			 , OD.PLAN_DTL_SQ
+			 , OD.SOCIAL_SQ
+			 , #{regNo} AS REG_ID
+			 , CURRENT_TIMESTAMP() AS REG_DT
+			 , #{regNo} AS REG_ID
+			 , CURRENT_TIMESTAMP() AS UPD_DT
+		FROM   TB_ORDER_DETAIL OD
+		INNER  JOIN (
+		SELECT ODI.ORD_DTL_NO
+		     , SUM(ODI.ORD_AMT) AS ORD_AMT
+		     , SUM(ODI.CNCL_RTN_AMT) AS CNCL_RTN_AMT
+		     , SUM(ODI.CPN1_DC_AMT) AS CPN1_DC_AMT
+		     , SUM(ODI.TMTB1_DC_AMT) AS TMTB1_DC_AMT
+		     , SUM(ODI.TMTB2_DC_AMT) AS TMTB2_DC_AMT
+		     , SUM(ODI.GOODS_CPN_DC_AMT) AS GOODS_CPN_DC_AMT
+		     , SUM(ODI.CART_CPN_DC_AMT) AS CART_CPN_DC_AMT
+		     , SUM(ODI.PNT_DC_AMT) AS PNT_DC_AMT
+		     , SUM(ODI.PRE_PNT_DC_AMT) AS PRE_PNT_DC_AMT
+		     , SUM(ODI.SAVE_PNT_AMT) AS SAVE_PNT_AMT
+		     , SUM(ODI.REAL_ORD_AMT) AS REAL_ORD_AMT
+		     , SUM(ODI.GFCD_USE_AMT) AS GFCD_USE_AMT
+		FROM   TB_ORDER_DETAIL_ITEM ODI
+		WHERE  ODI.ORD_DTL_NO = #{ordDtlNo}
+		GROUP  BY ODI.ORD_DTL_NO
+		) Z
+		ON    OD.ORD_DTL_NO = Z.ORD_DTL_NO
+		AND   OD.ORD_DTL_NO = #{ordDtlNo}
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세정보 수정 -->
+	<update id="updateOrderDetail" parameterType="Order">
+		/* Order.updateOrderDetail */
+		UPDATE TB_ORDER_DETAIL OD
+		INNER  JOIN (
+		SELECT ODI.ORD_DTL_NO
+		     , SUM(ODI.CNCL_RTN_AMT) 		AS CNCL_RTN_AMT
+		     , SUM(ODI.CPN1_DC_AMT) 		AS CPN1_DC_AMT
+		     , SUM(ODI.TMTB1_DC_AMT) 		AS TMTB1_DC_AMT
+		     , SUM(ODI.TMTB2_DC_AMT) 		AS TMTB2_DC_AMT 
+		     , SUM(ODI.GOODS_CPN_DC_AMT) 	AS GOODS_CPN_DC_AMT
+		     , SUM(ODI.CART_CPN_DC_AMT) 	AS CART_CPN_DC_AMT 
+		     , SUM(ODI.PNT_DC_AMT) 			AS PNT_DC_AMT 
+		     , SUM(ODI.PRE_PNT_DC_AMT) 		AS PRE_PNT_DC_AMT
+		     , SUM(ODI.SAVE_PNT_AMT) 		AS SAVE_PNT_AMT 
+		     , SUM(ODI.REAL_ORD_AMT) 		AS REAL_ORD_AMT 
+		     , SUM(ODI.GFCD_USE_AMT) 		AS GFCD_USE_AMT 
+		FROM   TB_ORDER_DETAIL_ITEM ODI
+		WHERE  ODI.ORD_NO = #{ordNo} 
+		AND    ODI.ORD_DTL_NO = #{ordDtlNo}
+		GROUP  BY ODI.ORD_DTL_NO
+		) Z
+		ON     OD.ORD_DTL_NO 			= Z.ORD_DTL_NO
+		SET    OD.ORD_DTL_STAT			= CASE WHEN OD.ORD_QTY > (OD.CNCL_RTN_QTY + #{ordCanChgQty})
+		                                       THEN OD.ORD_DTL_STAT
+		                                       ELSE #{ordDtlStat}
+		                                        END
+		     , OD.CNCL_RTN_QTY			= OD.CNCL_RTN_QTY + #{ordCanChgQty}
+		     , OD.CNCL_RTN_AMT  		= Z.CNCL_RTN_AMT
+		     , OD.CPN1_DC_AMT 			= Z.CPN1_DC_AMT
+		     , OD.TMTB1_DC_AMT 			= Z.TMTB1_DC_AMT
+		     , OD.TMTB2_DC_AMT 			= Z.TMTB2_DC_AMT
+		     , OD.GOODS_CPN_DC_AMT 		= Z.GOODS_CPN_DC_AMT
+		     , OD.CART_CPN_DC_AMT 		= Z.CART_CPN_DC_AMT
+		     , OD.PNT_DC_AMT 			= Z.PNT_DC_AMT
+		     , OD.PRE_PNT_DC_AMT 		= Z.PRE_PNT_DC_AMT
+		     , OD.SAVE_PNT_AMT 			= Z.SAVE_PNT_AMT
+		     , OD.REAL_ORD_AMT 			= Z.REAL_ORD_AMT
+		     , OD.GFCD_USE_AMT 			= Z.GFCD_USE_AMT
+		WHERE  1=1
+		AND    OD.ORD_NO = #{ordNo}
+		AND    OD.ORD_DTL_NO = #{ordDtlNo}
 	</update>
 	
-	<!-- 주문상세 > 주문취소신청 > 주문환불 금액 정보 등록 -->
-	<insert id="createRefund" parameterType="Order">
-		/* Order.createRefund */
-		INSERT INTO TB_REFUND (
-			ORD_NO
-			, PAY_SQ
-			, ORD_CHG_SQ
-			, REFUND_AMT
-			, RA_NO
-			, RA_BANK
-			, RA_NM
-			, RF_CPN1_AMT
-			, RF_TMTB1_AMT
-			, RF_TMTB2_AMT
-			, RF_GOODS_CPN_AMT
-			, RF_CART_CPN_AMT
-			, RF_PNT_AMT
-			, RF_PRE_PNT_AMT
-			, RF_GFCD_USE_AMT
+	<!-- 주문상세 > 주문취소신청 > 주문변경정보상세 등록-->
+	<insert id="createOrderChangeDetail" parameterType="OrderChange">
+		/* Order.createOrderChangeDetail */
+		INSERT INTO TB_ORDER_CHANGE_DETAIL (
+			ORD_CHG_SQ
+			, ORD_DTL_NO
+			, CHG_QTY
+			, CHG_STAT
+			, COMPLETE_DT
 			, REG_NO
 			, REG_DT
+			, UPD_NO
+			, UPD_DT
 		) VALUES (
-			#{ordNo}
-			, #{paySq}
-			, #{ordChgSq}
-			, #{refundAmt}
-			, #{raNo}
-			, #{raBank}
-			, #{raNm}
-			, #{rfCpn1Amt}
-			, #{rfTmtb1Amt}
-			, #{rfTmtb2Amt}
-			, #{rfGoodsCpnAmt}
-			, #{rfCartCpnAmt}
-			, #{rfPntAmt}
-			, #{rfPrePntAmt}
-			, #{rfGfcdUseAmt}
+			#{ordChgSq}
+			, #{ordDtlNo}
+			, #{chgQty}
+			, #{chgStat}
+			, SYSDATE()
 			, #{regNo}
 			, SYSDATE()
+			, #{updNo}
+			, SYSDATE()
 		)
 	</insert>
 	
-	<!-- 주문상세 > 주문취소신청 > 주문환불 결제 정보 등록 -->
+	<!-- 주문상세 > 주문취소신청 > 주문환불금액정보 등록 -->
 	<insert id="createPayment" parameterType="Order" keyProperty="paySq">
 		/* Order.createPayment */
 		INSERT INTO TB_PAYMENT (
@@ -279,7 +581,49 @@
 		AND    PAY_STAT = 'G016_30'
 	</insert>
 	
-	<!-- 주문상세 > 주문취소신청 > 주문 추가 배송 금액 등록-->
+	<!-- 주문상세 > 주문취소신청 > 주문환불정보 등록 -->
+	<insert id="createRefund" parameterType="Order">
+		/* Order.createRefund */
+		INSERT INTO TB_REFUND (
+			ORD_NO
+			, PAY_SQ
+			, ORD_CHG_SQ
+			, REFUND_AMT
+			, RA_NO
+			, RA_BANK
+			, RA_NM
+			, RF_CPN1_AMT
+			, RF_TMTB1_AMT
+			, RF_TMTB2_AMT
+			, RF_GOODS_CPN_AMT
+			, RF_CART_CPN_AMT
+			, RF_PNT_AMT
+			, RF_PRE_PNT_AMT
+			, RF_GFCD_USE_AMT
+			, REG_NO
+			, REG_DT
+		) VALUES (
+			#{ordNo}
+			, #{paySq}
+			, #{ordChgSq}
+			, #{refundAmt}
+			, #{raNo}
+			, #{raBank}
+			, #{raNm}
+			, #{rfCpn1Amt}
+			, #{rfTmtb1Amt}
+			, #{rfTmtb2Amt}
+			, #{rfGoodsCpnAmt}
+			, #{rfCartCpnAmt}
+			, #{rfPntAmt}
+			, #{rfPrePntAmt}
+			, #{rfGfcdUseAmt}
+			, #{regNo}
+			, SYSDATE()
+		)
+	</insert>
+
+	<!-- 주문상세 > 주문취소신청 > 주문추가배송금액등록-->
 	<insert id="createDeliveryFee" parameterType="Order">
 		/* Order.createDeliveryFee */
 		INSERT INTO TB_DELIVERY_FEE ( 
@@ -319,7 +663,61 @@
 		)
 	</insert>
 	
-	<!-- 고객환불계좌정보 체크 -->
+	<!-- 주문상세 > 주문취소신청 > 주문사은품취소 -->
+	<update id="updateOrdFreegiftDel" parameterType="Order">
+		/* Order.updateOrdFreegiftDel */
+		UPDATE TB_ORD_FREEGIFT_VAL
+		SET    DEL_YN= 'N'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = SYSDATE()
+		WHERE  FREEGIFT_VAL_SQ IN (
+			SELECT OFRV.FREEGIFT_VAL_SQ 
+			FROM   TB_ORD_FREEGIFT OFR
+			INNER  JOIN TB_ORD_FREEGIFT_VAL OFRV
+			ON     OFR.ORD_FREEGIFT_SQ  = OFRV.ORD_FREEGIFT_SQ 
+			WHERE  1=1
+			AND    OFR.ORD_NO = (SELECT CASE WHEN SUM(X.ORD_QTY) > SUM(X.CNCL_RTN_QTY)
+								             THEN 0
+								             ELSE X.ORD_NO
+								             END 
+								 FROM   TB_ORDER_DETAIL X
+								 WHERE  1=1
+								 AND    X.ORD_NO = #{ordNo})
+		)
+	</update>
+	
+	
+	
+	<!-- 주문상세 > 주문취소 > 고객환불계좌정보 조회 -->
+	<select id="getRefundAccount" parameterType="Order" resultType="Order">
+		/* Order.getRefundAccount */
+		SELECT Z.ACCOUNT_NO
+		     , Z.ACCOUNT_NM
+		     , Z.BANK_CD
+		     , FN_GET_CODE_NM('G940', Z.BANK_CD) AS BANK_NM
+		     , Z.DEFAULT_YN
+		     , Z.REG_DT
+		FROM   (
+			SELECT CA.ACCOUNT_NO
+			     , CA.ACCOUNT_NM 
+			     , CA.BANK_CD
+			     , CA.DEFAULT_YN
+			     , CA.REG_DT
+			FROM   TB_ORDER O
+			LEFT   OUTER JOIN TB_CUST_ACCOUNT CA 
+			ON     O.CUST_NO = CA.CUST_NO
+			WHERE  1=1
+			AND    O.CUST_NO = 0
+			GROUP  BY CA.ACCOUNT_NO
+			     , CA.ACCOUNT_NM 
+			     , CA.BANK_CD
+			     , CA.DEFAULT_YN
+			ORDER  BY CA.DEFAULT_YN DESC
+			     , CA.REG_DT DESC
+		) Z
+	</select>
+	
+	<!-- 주문상세 > 주문취소 > 고객환불계좌정보 중복체크 -->
 	<select id="getRefundAccountCheck" parameterType="Order" resultType="int">
 		/* Order.getRefundAccountCheck */
 		SELECT COUNT(1)
@@ -331,7 +729,7 @@
 		AND    CA.DEL_YN = 'N'
 	</select>
 	
-	<!-- 고객환불계좌정보 등록 -->
+	<!-- 주문상세 > 주문취소 > 고객환불계좌정보 등록 -->
 	<insert id="saveRefundAccount" parameterType="Order">
 		/* Order.saveRefundAccount */
 		INSERT INTO TB_CUST_ACCOUNT (
@@ -359,34 +757,7 @@
 		)
 	</insert>
 	
-	<!-- 고객환불계좌정보 조회 -->
-	<select id="getRefundAccount" parameterType="Order" resultType="Order">
-		/* Order.getRefundAccount */
-		SELECT Z.ACCOUNT_NO
-		     , Z.ACCOUNT_NM
-		     , Z.BANK_CD
-		     , FN_GET_CODE_NM('G940', Z.BANK_CD) AS BANK_NM
-		     , Z.DEFAULT_YN
-		     , Z.REG_DT
-		FROM   (
-			SELECT CA.ACCOUNT_NO
-			     , CA.ACCOUNT_NM 
-			     , CA.BANK_CD
-			     , CA.DEFAULT_YN
-			     , CA.REG_DT
-			FROM   TB_ORDER O
-			LEFT   OUTER JOIN TB_CUST_ACCOUNT CA 
-			ON     O.CUST_NO = CA.CUST_NO
-			WHERE  1=1
-			AND    O.CUST_NO = 0
-			GROUP  BY CA.ACCOUNT_NO
-			     , CA.ACCOUNT_NM 
-			     , CA.BANK_CD
-			     , CA.DEFAULT_YN
-			ORDER  BY CA.DEFAULT_YN DESC
-			     , CA.REG_DT DESC
-		) Z
-	</select>
+	
 	
 </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>

+ 4 - 4
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsMassRegisterForm.html

@@ -28,7 +28,7 @@
 			<ul class="notice">
 				<li>상품을 대량으로 등록하는 페이지입니다.</li>
 				<li>상품을 등록 할 경우 [승인대기] 상태이며, STYLE 관리자의 [승인완료] 상태 변경 후 FRONT애 노출이 가능합니다.</li>
-				<li><th:block th:if="${erpSyncYn == 'N'}"><em><b>WMS연동여부가 [N]입니다. 관리자에게 문의하세요.</b></em></th:block></li>
+				<li><th:block th:if="${wmsSyncYn == 'N'}"><em><b>WMS연동여부가 [N]입니다. 관리자에게 문의하세요.</b></em></th:block></li>
 			</ul>
 			<ul class="panelBar">
 				<li class="center">
@@ -39,7 +39,7 @@
 									or sessionInfo.roleCd == 'G001_A101'
 									}">
 						<button type="button" class="btn btn-default btn-lg" id="btnInit" onclick="cfnDownloadSampleFile('SF001');">자사상품 등록양식 다운로드</button>
-						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsSelfCreate" >자사상품 등록</button>
+						<button th:if="${wmsSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsSelfCreate" >자사상품 등록</button>
 					</th:block>
 					<th:block th:if="${sessionInfo.roleCd == 'G001_0000' 
 									or sessionInfo.roleCd == 'G001_A000' 
@@ -48,7 +48,7 @@
 									or sessionInfo.roleCd == 'G001_A101'
 									}">
 						<button type="button" class="btn btn-default btn-lg" id="btnInit" onclick="cfnDownloadSampleFile('SF005');">입점상품 등록양식 다운로드</button>
-						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsCreate" >입점상품 등록</button> -->
+						<button th:if="${wmsSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsCreate" >입점상품 등록</button> -->
 					</th:block>
 					<label class="off"><a href="javascript:void(0);" id="excelList" style="display: none;">엑셀다운로드</a></label>
 					<!--  추후 대량 수정 권한-->
@@ -60,7 +60,7 @@
 								}" 
 							th:style="'padding-left:80px;'">
 						<button type="button" class="btn btn-default btn-lg" id="btnInit" onclick="cfnDownloadSampleFile('SF014');">상품대량수정 등록양식 다운로드</button>
-						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsUpdate" >상품 수정</button>
+						<button th:if="${wmsSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsUpdate" >상품 수정</button>
 					</span>
 				</li>
 			</ul>

+ 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>

+ 11 - 5
style24.admin/src/main/webapp/WEB-INF/views/marketing/MorebetterListForm.html

@@ -6,7 +6,7 @@
  * @source  : MorebetterListForm.html
  * @desc    : 다다익선 관리 페이지
  *============================================================================
- * SISUN
+ * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
@@ -21,8 +21,10 @@
 		<!-- //메인타이틀 영역 -->
 		
 		<!-- 메뉴 설명 -->
-		<!--<div class="infoBox menu-desc">
-		</div>-->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+
 		<form id="searchForm" name="searchForm" action="#" th:action="@{'/marketing/morebetter/list'}">
 			<input type="hidden" id="searchGb" name="searchGb" />
 			<input type="hidden" id="imageViewYn" name="imageViewYn" />
@@ -102,7 +104,11 @@
 /*<![CDATA[*/
 	var columnDefs = [];
 	columnDefs = [
-		{headerName: "프로모션ID", field: "tmtbSq", width: 80, cellClass: 'text-center'},
+		{headerName: "프로모션ID", field: "tmtbSq", width: 80, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return "<a href=\"javascript:void(0);\" onclick=\"cfnOpenMorebetterSetPopup('U','" + params.value + "');\">" + params.value + "</a>";
+			}
+		},
 		{headerName: "프로모션명", field: "tmtbNm", width: 200, cellClass: 'text-center'},
 		{headerName: "상태", field: "tmtbStat", width: 140, cellClass: 'text-center'},
 		{headerName: "시작일", field: "tmtbStdt", width: 140, cellClass: 'text-center'},
@@ -207,7 +213,7 @@
 
 	// 등록클릭시
 	$('#btnMorebetterReg').on('click', function() {
-		cfnOpenMorebetterSetPopup();
+		cfnOpenMorebetterSetPopup('N');
 	});
 
 

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

@@ -1,762 +1,973 @@
 <!DOCTYPE html>
 <html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
+	  xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
  * @source  : MorebetterRegForm.html
  * @desc    : 다다익선 등록 화면
  *============================================================================
- * SISUN
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
  * 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">
-				<h2>다다익선 등록</h2>
-				<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="gbn" th:value="${params.gbn}" />				<!-- 신규/수정 구분 -->
-				<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">
-					<ul class="notice">
-						<li>구성상품 등록시 기본값&nbsp;
-							<!-- 아이콘 툴팁 -->
-							<div class="iconTooltip">
-								<i class="fa fa-info" aria-hidden="true"></i>
-								<span class="left" style="width:400px; text-align:left;">
-									<!-- class="left" 또는 class="right" -->
-									- 상품상태 : 정보부족<br/>
-									- 정상가 : 구성상품의 정상가 합<br/>
-									- 판매가 : 구성상품 판매가 입력값의 합<br/>
-									- 브랜드코드 : 구성상품의 기준여부 'Y'상품의 브랜드코드<br/>
-									- 품목코드 : 구성상품의 기준여부 'Y'상품의 품목코드<br/>
-									- 포인트 : 구성상품의 기준여부 'Y'상품의 브랜드 포인트<br/>
-									- 배송비정책 : 구성상품의 기준여부 'Y'상품의 브랜드 배송비정책<br/>
-								</span>
-							</div>
-							<!-- //아이콘 툴팁 -->
-						</li>
-					</ul>
-					<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 -->
-								<input class="w50p" type="text" id="disTmtbSq" name="disTmtbSq" maxlength="30" th:value="${params.tmtbSq}"  disabled=""/>
-								<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>상태</th>
-							<td>
-								<!-- 상태 입력 : before -->
-								<input class="w50p" type="text" id="disTmtbStat" name="disTmtbStat" maxlength="30" th:value="${params.tmtbStat}" disabled=""/>
-								<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>
-												<span>선택 : 00개</span>
-												<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>
-												<span>선택 : 00개</span>
-												<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>
-											<span>선택 : 00개</span>
+									</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>
-											<span>선택 : 00개</span>
-											<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>
-											<span>선택 : 00개</span>
-											<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>
-											<span>선택 : 00개</span>
-											<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" class="btn btnRight btn-success btn-lg" id="btnMorebetterSave">저장</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 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'}
-		];
-		// 브랜드 리스트 설정
-		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'}
-		];
-		// 적용상품 리스트 설정
-		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: "goodsGb", width: 120, 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'}
-		];
-		// 제외상품 리스트 설정
-		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: "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'}
-			/*{headerName: "Product ID", field: "goodsCd", width: 120, cellClass: 'text-center'},
-			{headerName: "브랜드명", field: "brandEnm", width: 150, cellClass: 'text-center'},
-			{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
-			{headerName: "판매상태", field: "goodsStat" , width: 120, cellClass: 'text-center',
-				cellEditorParams: { values: gagaAgGrid.extractValues(FGAddGoodsStatList) },
-				valueFormatter: function (params) { return gagaAgGrid.lookupValue(FGAddGoodsStatList, params.value); },
-				valueParser: function (params) { return gagaAgGrid.lookupKey(FGAddGoodsStatList, params.newValue); }
-			},
-			{headerName: "정상가", field: "listPrice", width: 120, cellClass: 'text-center',valueFormatter: function(params) {return params.value.addComma();}},
-			{headerName: "판매가", field: "currPrice", width: 120, cellClass: 'text-center',valueFormatter: function(params) {return params.value.addComma();}},
-			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center'}*/
-		];
-
-		// 업체분담율 리스트 설정
-		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',editable: true, required: true},
-			{headerName: "사용여부", field: "useYn" , width: 120, cellClass: 'text-center'}
-		];
-
-		// 구간 할인/혜택 설정
-		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'},
-			{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); }
+</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: "sectionVal", width: 100, cellClass: 'text-right',
-				cellEditor: 'textCellEditor',
-				cellEditorParams: { maxlength: 50, required: true }
+			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: "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: 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: "dcVal", width: 100, cellClass: 'text-right',
-				cellEditor: 'textCellEditor',
-				cellEditorParams: { maxlength: 50, required: 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() {
-			gagaAgGrid.createGrid("gridFGPromotionCompanyList", gridOptionsFGCompanyList);
-			gagaAgGrid.createGrid("gridFGBrandList", gridOptionsFGBrandList);
-			gagaAgGrid.createGrid("gridFGApplyGoodsList", gridOptionsFGApplyGoodsList);
-			gagaAgGrid.createGrid("gridFGExceptGoodsList", gridOptionsFGExceptGoodsList);
-			gagaAgGrid.createGrid("gridApplyBurdenList", gridOptionsApplyBurdenList);
-			gagaAgGrid.createGrid("gridSectionGbList", gridOptionsSectionGbList);
-
-			cfnCreateCalendar('#tmtbTerms', 'tmtbStdt', 'tmtbEddt', true, '행사기간', 'X');
-		});
-
-		// 저장 버튼 클릭시
-		$('#btnMorebetterSave').on('click', function() {
-			// 각 ag-grid list 수량
-			let supplyCompCnt = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList).length;
-			let brandCnt = gagaAgGrid.getAllRowData(gridOptionsFGBrandList).length;
-			let applyGoodsCnt = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList).length;
-			let exceptGoodsCnt = gagaAgGrid.getAllRowData(gridOptionsFGExceptGoodsList).length;
-			let applyBurdenCnt = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList).length;
-			let sectionGbCnt = gagaAgGrid.getAllRowData(gridOptionsSectionGbList).length;
-			console.log('supplyCompCnt>>'+supplyCompCnt);
-			console.log('brandCnt>>'+brandCnt);
-			console.log('applyGoodsCnt>>'+applyGoodsCnt);
-			console.log('exceptGoodsCnt>>'+exceptGoodsCnt);
-			console.log('applyBurdenCnt>>'+applyBurdenCnt);
-			console.log('sectionGbCnt>>'+sectionGbCnt);
-
-			// 행사기간 확인
-			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;
-			}
-
-
-			// validation
-			if (!gagajf.validation('#moreBetterForm'))
-				return false;
+			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); // 선택하기
 
-			// disabled 값 넘겨주기
-			$('#moreBetterForm input[name=tmtbSq]').val($('#moreBetterForm input[name=disTmtbSq]').val());
-			$('#moreBetterForm input[name=tmtbStat]').val($('#moreBetterForm input[name=disTmtbStat]').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;
+		}
 
-			mcxDialog.confirm('저장하시겠습니까?', {
-				cancelBtnText: "취소",
-				sureBtnText: "확인",
-				sureBtnClick: function(){
-					var comp_idx = 0;
-					var brand_idx = 0;
-					var apply_idx = 0;
-					var except_idx = 0;
-					var burden_idx = 0;
-
-					var compAllData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
-					/*$.each(compAllData, function(comp_idx, item) {
-						item.dispOrd = comp_idx+1;
-					});*/
-
-					var brandAllData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
-					/*$.each(brandAllData, function(brand_idx, item) {
-						item.dispOrd = brand_idx+1;
-					});*/
-
-					var applyAllData = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList);
-					/*$.each(applyAllData, function(apply_idx, item) {
-						item.dispOrd = apply_idx+1;
-					});*/
-
-					var exceptAllData = gagaAgGrid.getAllRowData(gridOptionsFGExceptGoodsList);
-					/*$.each(exceptAllData, function(except_idx, item) {
-						item.dispOrd = except_idx+1;
-					});*/
-
-					var burdenAllData = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList);
-					/*$.each(burdenAllData, function(burden_idx, item) {
-						item.dispOrd = burden_idx+1;
-					});*/
-
-					var sectionGbAllData = gagaAgGrid.getAllRowData(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() {
-						//$('#btnSearch').trigger('click');
-						//$('#btnNew').trigger('click');
-						console.log('save 11111');
-					});
-				}
-			});
+		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');
+				});
+			}
 		});
+	});
+
+	// 저장 버튼 클릭시
+	$('#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;
+		}
 
-		// 공급업체 설정 / 업체 추가 콜백함수
-		var fnSetPopupComapnyInfo = function(result) {
-			// 기존 리스트 데이터 for
-			for(let i = 0 ; i < result.length ; i++) {
-				let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);		// 받아온 모든 데이터
+		if (fromDate > toDate) {
+			mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+			$('#moreBetterForm input[name=tmtbStdt]').focus();
+			return false;
+		}
 
-				// 받아온 data for
-				for(let j = 0 ; j < gridListValue.length ; j++) {
-					// 동일한 data는 추가하지 않음
-					if(gridListValue[j].supplyCompCd == result[i].supplyCompCd) {	addChk = 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;
+		}
 
-				// 중복되지 않은 데이터 리스트에 추가
-				if(addChk) {
-					gagaAgGrid.addRowData(gridOptionsFGCompanyList, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_13"});
-				}
+		// 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 fnSetPopupBrandInfo = function(result) {
-			for(let i = 0 ; i < result.length ; i++) {
-				let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);		// 받아온 모든 데이터
+	});
 
-				// 받아온 data for
-				for(let j = 0 ; j < gridListValue.length ; j++) {
-					if(gridListValue[j].brandCd == result[i].brandCd) {	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(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++) {
+				// 동일한 data는 추가하지 않음
+				if(gridListValue[j].supplyCompCd == result[i].supplyCompCd) {	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(gridOptionsFGCompanyList, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_13"});
 			}
-		};
-
-		// 적용 상품 리스트 콜백함수
-		var fnSetPopupApplyGoodsInfo = function(result) {
-			gridAddGoodsList(gridOptionsFGApplyGoodsList, result , "apply");
-		};
-
-		// 제외 상품 리스트 콜백함수
-		var fnSetPopupExceptGoodsInfo = function(result) {
-			gridAddGoodsList(gridOptionsFGExceptGoodsList, result , "except");
-		};
+		}
+	};
 
+	// 브랜드 설정 / 브랜드 추가 콜백함수 (단수로 가져오므로 복수일 경우에 수정 확인 필요)
+	var fnSetPopupBrandInfo = function(result) {
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);		// 받아온 모든 데이터
 
-		// ag-grid 상품관련 list 콜백함수
-		function gridAddGoodsList(OriginGridListOption, result, gubun) {
-			var goodsGbVal = "G800_10";
-			if(gubun == 'except'){
-				goodsGbVal = "G800_30";
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				if(gridListValue[j].brandCd == result[i].brandCd) {	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(gridOptionsFGBrandList, {"brandCd" : result[i].brandCd, "brandEnm" : result[i].brandEnm, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_12"});
+			}
+		}
+	};
+
+	// 분담업체율 설정 / 업체 추가 콜백함수
+	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(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");
-		});
+	// 제외 상품 리스트 콜백함수
+	var fnSetPopupExceptGoodsInfo = function(result) {
+		gridAddGoodsList(gridOptionsFGExceptGoodsList, result , "except");
+	};
 
-		// 적용 상품 추가 버튼 클릭시
-		$('#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');
+	// 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();
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(OriginGridListOption);		// 받아온 모든 데이터
 
-			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();
-			var removedData = gagaAgGrid.removeRowData(gridOptionsSectionGbList);
-
-			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;	}				// 중복체크
 			}
 
-			if (removedData.length > 0) {
+			// 중복되지 않은 데이터 리스트에 추가
+			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;
+		}
 
-				mcxDialog.confirm('삭제하시겠습니까?', {
-					cancelBtnText: "취소",
-					sureBtnText: "확인",
-					sureBtnClick: function(){
-						var deleteData = [];
+		var removedData = gagaAgGrid.removeRowData(gridOptionsSectionGbList, false);
 
-						$.each(removedData, function(idx, item) {
-							deleteData.push(item);
-						});
+		var arrSectionSq = [];
 
-						var jsonData = JSON.stringify(deleteData);
-						gagajf.ajaxJsonSubmit('/morebetter/sectionVal/delete', jsonData, fnSearch);
-					}
-				});
-			}
+		$.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;
+		}
+
+		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);
 		});
+		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);
+				}
+			});
+		}
+	});
+
+	// 브랜드 행삭제
+	$('#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 = { arrBrandSq : arrBrandSq
+						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					};
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/brand/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);
+		});
+		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);
+				}
+			});
+		}
+	});
+
+	// 제외상품 행삭제
+	$('#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 = { arrExceptGoodsSq : arrExceptGoodsSq
+						,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+					};
+					var jsonData = JSON.stringify(data);
+					gagajf.ajaxJsonSubmit('/marketing/morebetter/exceptGoods/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>

+ 30 - 33
style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestForm.html

@@ -5,7 +5,7 @@
  * @source  : CancelRequestForm.html
  * @desc    : 취소요청 화면
  *============================================================================
- * Pastelmall
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
@@ -36,12 +36,6 @@
 				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
 				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<!-- 
-					<button type="button" class="btn btn-success" id="btnCancelRequestEscrow" onclick="fnCancelRequestEscrow();" style="display:none;">에스크로 결제생성</button>
-					<label th:if="${sessionInfo.userId == 'jsh77b'}">
-						<input type="checkbox" name="pgStats" value="N">PG 전문 미전송
-					</label>
-					 -->
 					<button type="button" class="btn btn-success" id="btnCancelRequestPartOk" onclick="fnCancelRequestPartOk();">요청</button>
 				</div>
 				
@@ -117,13 +111,6 @@
 							<td><span id="spanTotDeliveryFee"></span>원 </td>
 						</tr>
 						
-						<tr>
-							<th>추가 반품배송 금액</th>
-							<td><span id="spanTotRtnDelvFee"></span>원</td>
-							<th>추가 교환배송 금액</th>
-							<td><span id="spanTotExcDelvFee"></span>원 </td>
-						</tr>
-						
 						<tr>
 							<th>환불 금액 합계</th>
 							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
@@ -153,7 +140,7 @@ var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
 var temp1 = true;
 var temp2 = false;
 
-// specify the columns
+// 1. 주문정보(반품대상)
 var columnCancelReqList = [
 	{
 		headerName	: "주문상세정보",
@@ -423,7 +410,7 @@ var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
 gridOptionsCancelReqList.suppressRowClickSelection = true;
 gridOptionsCancelReqList.rowSelection = 'multiple';
 
-//specify the columns
+// 2. 취소정보(환불정보)
 var columnCancelReqToBeList = [
 	{
 		headerName	: "주문상세정보",
@@ -672,7 +659,7 @@ var columnCancelReqToBeList = [
 ];
 var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
 
-//specify the columns
+// 3. 배송비정보(환불정보)
 var columnDelvCdList = [
 	{
 		headerName	: "배송코드기준금액",
@@ -778,7 +765,7 @@ var columnDelvCdList = [
 ];
 var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
 
-// 10. 무통장 환불정보
+// 4. 무통장 계좌정보
 var columnDefsRefundAccountInfo = [
 	{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: false, checkboxSelection: true, filter: false},
 	{headerName: "은행명"		, field: "bankNm"		, width: 140	, cellClass: 'text-center'},
@@ -830,6 +817,9 @@ var orderAgGrid = {
 </script>
 
 <script>
+// 현재 사유는 고객 입니다.
+var isCustomer = true;
+
 // 취소정보계산
 var fnCalculateRefundAmt = function (obj) {
 	// 취소정보담은목록
@@ -848,6 +838,12 @@ var fnCalculateRefundAmt = function (obj) {
 		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	}
 	
+	if (cancelRequestTargetList.length == 0) {
+		alert("요청 대상정보가 존재 하지 않습니다.");
+		uifnPopupClose('popupCancelRequestForm');
+		return false;
+	}
+	
 	// 환불금액계산호출
 	var jsonData = JSON.stringify(cancelRequestTargetList);
 	gagajf.ajaxJsonSubmit(
@@ -880,10 +876,19 @@ var fnCalculateRefundAmt = function (obj) {
 			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
 			
 			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
-			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//환불 배송 금액
+			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//취소 환불 배송 금액
 			
-			$("#spanTotRtnDelvFee").text(result.spanTotRtnDelvFee.addComma());		//환불 배송 금액
-			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//환불 배송 금액
+			$("#spanTotRtnDelvFee").text(result.spanTotRtnDelvFee.addComma());		//반품 환불 배송 금액
+			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//교환 환불 배송 금액
+			
+			// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+			if (isCustomer) {
+				result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee) - result.spanTotDeliveryFee;
+			} 
+			// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+			else {
+				result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee);
+			}
 			
 			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
 		}
@@ -897,16 +902,16 @@ var fnChangeChgReason = function(reasonCd){
 	// 취소, 반품, 교환 사유 판단
 	if (arrREasonCd[0] == 'G686_10') {
 		$("#imputeReason").text("고객");
-		isImputationCustomers = true;
+		isCustomer = true;
 	} else {
 		$("#imputeReason").text("회사");
-		isImputationCustomers = false;
+		isCustomer = false;
 	}
 
 	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
 	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
 
-	//fnCalculateRefundAmt();			//환불예정금액 계산.
+	fnCalculateRefundAmt();			//환불예정금액 계산.
 }
 
 // 취소요청
@@ -963,14 +968,6 @@ var fnCancelRequestPartOk = function () {
 		accountNm 	= refundAccount[0].accountNm;
 		bankCd 		= refundAccount[0].bankCd;
 	}
-
-	// 5. PG 전송 여부
-	var pgStat = "N";
-	if ($('#cancelRequestFrm input:checkbox[name=pgStats]').is(":checked")) {
-		pgStat = "Y";
-	}
-	
-	$("#cancelRequestFrm input[name=pgStat]").val(pgStat);
 	
 	var jsonObj = {
 		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
@@ -981,6 +978,7 @@ var fnCancelRequestPartOk = function () {
 		,"accountNm" 		: accountNm
 		,"bankCd" 			: bankCd
 		,"allCanYn" 		: allCanYn
+		,"isCustomer" 		: isCustomer
 	}
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
@@ -1030,7 +1028,6 @@ $(document).ready(function() {
 	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
 	
 	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
-	//gridOptionsRefundAccountInfo.api.setRowData(orderRfAccountInfo);
 	
 	// 취소정보계산
 	fnCalculateRefundAmt(null);

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestFormBack.html

@@ -5,7 +5,7 @@
  * @source  : CancelRequestForm.html
  * @desc    : 취소요청 화면
  *============================================================================
- * Pastelmall
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailChangeHst.html

@@ -5,7 +5,7 @@
  * @source  : OrderDetailChangeHst.html
  * @desc    : 주문상품상세이력 화면
  *============================================================================
- * Pastelmall
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailCouponHst.html

@@ -5,7 +5,7 @@
  * @source  : OrderDetailCouponHst.html
  * @desc    : 주문상품 상세 쿠폰 이력 화면
  *============================================================================
- * Pastelmall
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION

+ 417 - 414
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -5,7 +5,7 @@
  * @source  : OrderListForm.html
  * @desc    : 주문상세화면
  *============================================================================
- * SISUN
+ * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
@@ -287,6 +287,7 @@ var columnDefsGoodsInfo = [
 		children	: [
 			{headerName: "주문수량"	, field: "ordQty"		, width: 80, cellClass: 'text-center'},
 			{headerName: "취소수량"	, field: "cnclRtnQty"	, width: 80, cellClass: 'text-center'},
+			{headerName: "변경요청수량"	, field: "ordReqChgQty"	, width: 100, cellClass: 'text-center'},
 			{headerName: "상세상태"	, field: "ordDtlStat"	, width: 120, cellClass: 'text-center', hide: true},
 			{
 				headerName		: "상세상태"
@@ -554,7 +555,7 @@ var columnDefsDeliveryInfo = [
 		, width			: 200
 		, cellClass		: 'text-left'
 		, cellRenderer	: function (params) {
-			return params.value + "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"cfnOpenPostFindPopup('grid');\">우편번호찾기</button>";
+			return params.value + "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('grid');\">우편번호찾기</button>";
 		}
 	},
 	{headerName: "주소(기본)"		, field: "recipBaseAddr"	, width: 350, cellClass: 'text-left'},
@@ -933,28 +934,17 @@ $(document).ready(function () {
 	gridOptionsGoodsInfo.api.forEachNode(function (rowNode, index) {
 		
 		// 입금대기, 결제완료, 상품준비중, 배송준비중 일때 취소가능
-		if (rowNode.data.ordDtlStat == 'G013_10' 
-				|| rowNode.data.ordDtlStat == 'G013_20'
-				|| rowNode.data.ordDtlStat == 'G013_30'
-				|| rowNode.data.ordDtlStat == 'G013_40') {
+		if (rowNode.data.ordDtlStat == 'G013_10' || rowNode.data.ordDtlStat == 'G013_20' || rowNode.data.ordDtlStat == 'G013_30' || rowNode.data.ordDtlStat == 'G013_40') {
 			$("#btnCancel").removeClass("off");	//취소요청
 		}
 		
 		// 배송중, 출고완료, 배송완료 일때 반품, 교환 가능
-		if ((rowNode.data.ordDtlStat == 'G013_50' 
-				|| rowNode.data.ordDtlStat == 'G013_55' 
-				|| rowNode.data.ordDtlStat == 'G013_60'
-			) 
-			//&& rowNode.data.ordQty > rowNode.data.chgSumQty
-			) {
+		if ((rowNode.data.ordDtlStat == 'G013_50' || rowNode.data.ordDtlStat == 'G013_55' || rowNode.data.ordDtlStat == 'G013_60') && rowNode.data.ordQty > rowNode.data.ordReqChgQty) {
 			$("#btnReturn, #btnExchange").removeClass("off");
 		}
 		
 		// 입금대기, 결제완료, 상품준비중, 배송준비중 일때 취소가능
-		if (rowNode.data.ordDtlStat == 'G013_10' 
-				|| rowNode.data.ordDtlStat == 'G013_20'
-				|| rowNode.data.ordDtlStat == 'G013_30'
-				|| rowNode.data.ordDtlStat == 'G013_40') {
+		if (rowNode.data.ordDtlStat == 'G013_10' || rowNode.data.ordDtlStat == 'G013_20' || rowNode.data.ordDtlStat == 'G013_30' || rowNode.data.ordDtlStat == 'G013_40') {
 			addrBtnChkCnt++;
 		}
 	});
@@ -997,358 +987,400 @@ $(document).ready(function () {
 
 <!-- function -->
 <script>
-	var gridOrderChangeInfoSelectedIdx = '';
-	
-	// 배송지변경
-	var fnUpdateOrderAddr = function () {
-		gridOptionsDeliveryInfo.api.stopEditing();
-		
-		var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(0).data);
-		mcxDialog.confirm("주소를 변경하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				gagajf.ajaxJsonSubmit(
-					"/order/deliver/addr/update"
-					, jsonData
-					, function () {
-						
-					}
-				);
-			}
-		});
-	}
+var gridOrderChangeInfoSelectedIdx = '';
 
-	// 반품요청
-	var fnReturnRequest = function () {
-		var actionUrl = "/orderChange/return/request/form?ordNo=" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
-	};
+// 배송지변경
+var fnUpdateOrderAddr = function () {
+	gridOptionsDeliveryInfo.api.stopEditing();
+	
+	var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(0).data);
+	mcxDialog.confirm("주소를 변경하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			gagajf.ajaxJsonSubmit(
+				"/order/deliver/addr/update"
+				, jsonData
+				, function () {
+					
+				}
+			);
+		}
+	});
+}
 
-	// 교환요청
-	var fnExchangeRequest = function () {
-		var actionUrl = "/orderChange/exchange/request/form?ordNo=" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
-	};
+// 취소요청
+var fnCancelRequest = function () {
+	var actionUrl = "/orderChange/cancel/request/form?ordNo=" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
+};
+
+// 반품요청
+var fnReturnRequest = function () {
+	var actionUrl = "/orderChange/return/request/form?ordNo=" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
+};
+
+// 교환요청
+var fnExchangeRequest = function () {
+	var actionUrl = "/orderChange/exchange/request/form?ordNo=" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
+};
+
+// 취소승인
+var fnCancelConfirmRequest = function (ordChgSq) {
+	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 		= ordNo;	//전역변수
+			data.ordChgSq 	= ordChgSq;
+
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/orderChange/cancel/confirm'
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}
+			);
+		}
+	});
+};
+
+// 취소요청철회
+var fnCancelConfirmRequestCancel = function (ordChgSq) {
+	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordChgSq = ordChgSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/orderChange/cancel/wait/cancel'
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+			});
+		}
+	});
+}
 
-	// 취소요청
-	var fnCancelRequest = function () {
-		var actionUrl = "/orderChange/cancel/request/form?ordNo=" + ordNo + "&cncWait=N";
-		cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
-	};
-
-	// 취소승인
-	var fnCancelConfirmRequest = function (ordChgSq) {
-		mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordNo 		= ordNo;	//전역변수
-				data.ordChgSq 	= ordChgSq;
+// 주문상품 상세 변경 이력 팝업
+var fnOrderDetailChangeHst = function (ordDtlNo) {
+	var actionUrl = "/order/detail/change/hst/form/" + ordDtlNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailChangeHstForm');
+};
+
+// 쿠폰내역 팝업
+var fnOrderCouponHst = function (ordNo) {
+	var actionUrl = "/order/detail/coupon/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailCouponHstForm');
+};
+
+// 다다익선내역 팝업
+var fnOrderTmtbHst = function (ordNo) {
+	var actionUrl = "/order/detail/tmtb/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailTmtbHstForm');
+};
+
+// 포인트내역 팝업
+var fnOrderPointHst = function (ordNo) {
+	var actionUrl = "/order/detail/point/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailPointHstForm');
+};
+
+// 상품권내역 팝업
+var fnOrderGiftcardHst = function (ordNo) {
+	var actionUrl = "/order/detail/giftcard/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailGiftcardHstForm');
+};
+
+// 관리자메모 등록
+var fnCreateOrderMemo = function (ordNo, seq, mode) {
+	var actionUrl = "/order/memo/create/form?ordNo=" + ordNo + "&seq=" + seq + "&mode=" + mode;
+	cfnOpenModalPopup(actionUrl, 'popupCreateOrderMemo');
+};
+
+// 환불계좌 등록
+var fnCreateOrderRfAccount = function (ordNo, custNo) {
+	var actionUrl = "/order/refund/account/create/form?ordNo=" + ordNo + "&custNo="+custNo;
+	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
+};
+
+// 주문메모 삭제
+var fnDeleteOrderMemo = function (ordNo, orderMemoSq) {
+	mcxDialog.confirm('삭제하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 	= ordNo;
+			data.seq 	= orderMemoSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/memo/delete'
+				, jsonData
+				, function () {
+					fnBindOrderMemo();
+				}
+			);
+		}
+	});
+}
 
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/orderChange/cancel/confirm'
-					, jsonData
-					, function (result) {
-						uifnPopupClose('popupOrderDetail');
-						fnReOpenOrderDetailPopup();
-					}
-				);
-			}
-		});
-	};
+// 주문메모 바인딩
+var fnBindOrderMemo = function() {
+	gagaAgGrid.fetch(
+		"/order/admin/memo/list/" + ordNo
+		, gridOptionsOrderMemoInfo
+		, null
+		, function (result) {
+		}
+	);
+};
+
+// 주문 변경요청정보 바인딩
+var fnBindOrderChangeInfo = function() {
+	gagaAgGrid.fetch(
+		"/order/return/info/list/" + ordNo
+		, gridOptionsOrderChangeInfo
+		, null
+		, function (result) {
+			$('#gridOrderChangeInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
+		}
+	);
+};
+
+// 환불계좌 정보
+var fnBindOrderRfAccountInfo = function () {
+	gagaAgGrid.fetch(
+		"/order/refund/account/info/list?ordNo=" + ordNo+"&custNo="+custNo
+		, gridOptionsRefundAccountInfo
+		, null
+		, function (result) {
+			$('#gridOptionsRefundAccountInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
+		}
+	);
+};
+
+// 배송비 DATA 바인딩
+var fnBindDeliveryAddr = function(delvAddrSq) {
+	if (typeof (delvAddrSq) != 'undefined') {
+		var strLink = '/order/deliver/addr/info/' + delvAddrSq;
+		var jsonData = JSON.stringify([]);
+		gagajf.ajaxJsonSubmit(strLink, jsonData, fnBindDeliveryAddrCallBack);
+	}
+};
+
+// 배송정보
+var fnBindDeliveryAddrCallBack = function(result) {
+	gridOptionsDeliveryInfo.api.setRowData(result);
+};
+
+// 우편번호 찾기관련
+var fnSetPostValue = function(zipNo, baseRoadAddr1, baseRoadAddr2, etcAddr, postPosition) {
+	if (postPosition == 'grid') {
+		gridOptionsDeliveryInfo.api.getRowNode(0).data.recipPostNo = zipNo;
+		gridOptionsDeliveryInfo.api.getRowNode(0).data.recipBaseAddr = baseRoadAddr1;
+		gridOptionsDeliveryInfo.api.getRowNode(0).data.recipDtlAddr = baseRoadAddr2;
+		gridOptionsDeliveryInfo.api.refreshCells();
+	} 
+	else if (postPosition == 'returnRequest') {
+		$("#returnRequestFrm input[name=chgerPostNo]").val(zipNo);
+		$("#returnRequestFrm input[name=chgerBaseAddr]").val(baseRoadAddr1);
+		$("#returnRequestFrm input[name=chgerDtlAddr]").val(baseRoadAddr2);
+	} 
+	else if (postPosition == 'updateOrderChangeAddr') {
+		gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerPostNo = zipNo;
+		gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerBaseAddr = baseRoadAddr1;
+		gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerDtlAddr = baseRoadAddr2;
+		gridOptionsOrderChangeInfo.api.refreshCells();
 
-	// 취소요청철회
-	var fnCancelConfirmRequestCancel = function (ordChgSq) {
-		mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordChgSq = ordChgSq;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/orderChange/cancel/wait/cancel'
-					, jsonData
-					, function (result) {
-						uifnPopupClose('popupOrderDetail');
-						fnReOpenOrderDetailPopup();
-				});
-			}
-		});
 	}
+}
 
-	// 주문상품 상세 변경 이력 팝업
-	var fnOrderDetailChangeHst = function (ordDtlNo) {
-		var actionUrl = "/order/detail/change/hst/form/" + ordDtlNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailChangeHstForm');
-	};
-
-	// 쿠폰내역 팝업
-	var fnOrderCouponHst = function (ordNo) {
-		var actionUrl = "/order/detail/coupon/hst/form/" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailCouponHstForm');
-	};
+// 변경요청 > 우편번호찾기
+var fnOpenPostFindPopup = function (idx) {
+	gridOrderChangeInfoSelectedIdx = idx;
+	cfnOpenPostFindPopup('updateOrderChangeAddr');
+}
+
+// 변경요청 > 회수지정보 저장
+var fnSaveChgerAddr = function (rowIdx) {
+	gridOptionsOrderChangeInfo.api.stopEditing();
 	
-	// 다다익선내역 팝업
-	var fnOrderTmtbHst = function (ordNo) {
-		var actionUrl = "/order/detail/tmtb/hst/form/" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailTmtbHstForm');
-	};
-
-	// 포인트내역 팝업
-	var fnOrderPointHst = function (ordNo) {
-		var actionUrl = "/order/detail/point/hst/form/" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailPointHstForm');
-	};
+	var jsonData = JSON.stringify(gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data);
 	
-	// 상품권내역 팝업
-	var fnOrderGiftcardHst = function (ordNo) {
-		var actionUrl = "/order/detail/giftcard/hst/form/" + ordNo;
-		cfnOpenModalPopup(actionUrl, 'popupOrderDetailGiftcardHstForm');
-	};
-
-	// 관리자메모 등록
-	var fnCreateOrderMemo = function (ordNo, seq, mode) {
-		var actionUrl = "/order/memo/create/form?ordNo=" + ordNo + "&seq=" + seq + "&mode=" + mode;
-		cfnOpenModalPopup(actionUrl, 'popupCreateOrderMemo');
-	};
+	mcxDialog.confirm("주소를 변경하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			gagajf.ajaxJsonSubmit(
+				"/order/change/info/addr/update"
+				, jsonData
+				, function () {
+					
+				}
+			);
+		}
+	});
+}
 
-	// 환불계좌 등록
-	var fnCreateOrderRfAccount = function (ordNo, custNo) {
-		var actionUrl = "/order/refund/account/create/form?ordNo=" + ordNo + "&custNo="+custNo;
-		cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
-	};
-
-	// 주문메모 삭제
-	var fnDeleteOrderMemo = function (ordNo, orderMemoSq) {
-		mcxDialog.confirm('삭제하시겠습니까?', {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordNo 	= ordNo;
-				data.seq 	= orderMemoSq;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/order/memo/delete'
-					, jsonData
-					, function () {
-						fnBindOrderMemo();
+// 반품요청 철회
+var fnReturnReqeustCancel = function (ordChgSq, ordDtlNo, rowIdx) {
+	mcxDialog.confirm('반품요청을 철회하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordChgSq = ordChgSq;
+			data.ordDtlNo = ordDtlNo;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/return/request/cancel'
+				, jsonData
+				, function (result) {
+					if (result.message != '회수컨펌 된 내역이 있습니다.') {
+						var selectedRow = gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data;
+						gridOptionsOrderChangeInfo.api.updateRowData({remove: [selectedRow]});
 					}
-				);
-			}
-		});
-	}
-
-	// 주문메모 바인딩
-	var fnBindOrderMemo = function() {
-		gagaAgGrid.fetch(
-			"/order/admin/memo/list/" + ordNo
-			, gridOptionsOrderMemoInfo
-			, null
-			, function (result) {
-			}
-		);
-	};
-
-	// 주문 변경요청정보 바인딩
-	var fnBindOrderChangeInfo = function() {
-		gagaAgGrid.fetch(
-			"/order/return/info/list/" + ordNo
-			, gridOptionsOrderChangeInfo
-			, null
-			, function (result) {
-				$('#gridOrderChangeInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
-			}
-		);
-	};
-
-	// 환불계좌 정보
-	var fnBindOrderRfAccountInfo = function () {
-		gagaAgGrid.fetch(
-			"/order/refund/account/info/list?ordNo=" + ordNo+"&custNo="+custNo
-			, gridOptionsRefundAccountInfo
-			, null
-			, function (result) {
-				$('#gridOptionsRefundAccountInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
-			}
-		);
-	};
-
-	// 배송비 DATA 바인딩
-	var fnBindDeliveryAddr = function(delvAddrSq) {
-		if (typeof (delvAddrSq) != 'undefined') {
-			var strLink = '/order/deliver/addr/info/' + delvAddrSq;
-			var jsonData = JSON.stringify([]);
-			gagajf.ajaxJsonSubmit(strLink, jsonData, fnBindDeliveryAddrCallBack);
+				}
+			);
 		}
-	};
-
-	// 배송정보
-	var fnBindDeliveryAddrCallBack = function(result) {
-		gridOptionsDeliveryInfo.api.setRowData(result);
-	};
-
-	// 우편번호 찾기관련
-	var fnSetPostValue = function(zipNo, baseRoadAddr1, baseRoadAddr2, etcAddr, postPosition) {
-		if (postPosition == 'grid') {
-			gridOptionsDeliveryInfo.api.getRowNode(0).data.recipPostNo = zipNo;
-			gridOptionsDeliveryInfo.api.getRowNode(0).data.recipBaseAddr = baseRoadAddr1;
-			gridOptionsDeliveryInfo.api.getRowNode(0).data.recipDtlAddr = baseRoadAddr2;
-			gridOptionsDeliveryInfo.api.refreshCells();
-		} 
-		else if (postPosition == 'returnRequest') {
-			$("#returnRequestFrm input[name=chgerPostNo]").val(zipNo);
-			$("#returnRequestFrm input[name=chgerBaseAddr]").val(baseRoadAddr1);
-			$("#returnRequestFrm input[name=chgerDtlAddr]").val(baseRoadAddr2);
-		} 
-		else if (postPosition == 'updateOrderChangeAddr') {
-			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerPostNo = zipNo;
-			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerBaseAddr = baseRoadAddr1;
-			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerDtlAddr = baseRoadAddr2;
-			gridOptionsOrderChangeInfo.api.refreshCells();
-
+	});
+};
+
+// 교환요청 철회
+var fnExchangeReqeustCancel = function (ordChgSq, ordNo, ordDtlNo, rowIdx) {
+	mcxDialog.confirm('교환요청을 취소하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 		= ordNo;
+			data.ordDtlNo 	= ordDtlNo;
+			data.ordChgSq 	= ordChgSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/exchange/request/cancel'
+				, jsonData, function () {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}
+			);
 		}
-	}
+	});
+};
 
-	// 변경요청 > 우편번호찾기
-	var fnOpenPostFindPopup = function (idx) {
-		gridOrderChangeInfoSelectedIdx = idx;
-		cfnOpenPostFindPopup('updateOrderChangeAddr');
+// LMS 전송
+var fnOpenLmsForm = function (orderPhnno, custNo) {
+	if (gagajf.isNull(custNo) && gagajf.isNull(orderPhnno)) {
+		mcxDialog.alert("정보가 올바르지 않습니다.");
+		return false;
 	}
 
-	// 변경요청 > 회수지정보 저장
-	var fnSaveChgerAddr = function (rowIdx) {
-		gridOptionsOrderChangeInfo.api.stopEditing();
-		
-		var jsonData = JSON.stringify(gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data);
-		
-		mcxDialog.confirm("주소를 변경하시겠습니까?", {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				gagajf.ajaxJsonSubmit(
-					"/order/change/info/addr/update"
-					, jsonData
-					, function () {
-						
-					}
-				);
-			}
-		});
-	}
+	$('#orderDetailInfo input[name=orderPhnno]').val(orderPhnno);
+	$('#orderDetailInfo input[name=custNo]').val(custNo);
 
-	// 반품요청 철회
-	var fnReturnReqeustCancel = function (ordChgSq, ordDtlNo, rowIdx) {
-		mcxDialog.confirm('반품요청을 철회하시겠습니까?', {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordChgSq = ordChgSq;
-				data.ordDtlNo = ordDtlNo;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/order/return/request/cancel'
-					, jsonData
-					, function (result) {
-						if (result.message != '회수컨펌 된 내역이 있습니다.') {
-							var selectedRow = gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data;
-							gridOptionsOrderChangeInfo.api.updateRowData({remove: [selectedRow]});
-						}
-					}
-				);
-			}
-		});
-	};
+	var param = {};
+	param.elementCellPhnno = '#orderDetailInfo input[name=orderPhnno]';
+	param.elementCustNo = '#orderDetailInfo input[name=custNo]';
+	cfnOpenLmsPopup(param);
+};
 
-	// 교환요청 철회
-	var fnExchangeReqeustCancel = function (ordChgSq, ordNo, ordDtlNo, rowIdx) {
-		mcxDialog.confirm('교환요청을 취소하시겠습니까?', {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordNo 		= ordNo;
-				data.ordDtlNo 	= ordDtlNo;
-				data.ordChgSq 	= ordChgSq;
-				
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/order/exchange/request/cancel'
-					, jsonData, function () {
-						uifnPopupClose('popupOrderDetail');
-						fnReOpenOrderDetailPopup();
-					}
-				);
-			}
-		});
-	};
-	
-	// LMS 전송
-	var fnOpenLmsForm = function (orderPhnno, custNo) {
-		if (gagajf.isNull(custNo) && gagajf.isNull(orderPhnno)) {
-			mcxDialog.alert("정보가 올바르지 않습니다.");
-			return false;
+// EMAIL 전송
+var fnOpenEmailForm = function (orderEmail, orderNm, custNo) {
+	if (gagajf.isNull(orderEmail) && gagajf.isNull(orderNm) && gagajf.isNull(custNo)) {
+		mcxDialog.alert("정보가 올바르지 않습니다.");
+		return false;
+	}
+	$('#orderDetailInfo input[name=orderEmail]').val(orderEmail);
+	$('#orderDetailInfo input[name=orderNm]').val(orderNm);
+	$('#orderDetailInfo input[name=custNo]').val(custNo);
+
+	var param = {};
+	param.elementRecipEmail = '#orderDetailInfo input[name=orderEmail]';
+	param.elementCustNm = '#orderDetailInfo input[name=orderNm]';
+	param.elementCustNo = '#orderDetailInfo input[name=custNo]';
+
+	cfnOpenEmailPopup(param);
+};
+
+// 송장조회
+var fnSearchDelivery = function (url, invoiceNo) {
+	var fullUrl = url + invoiceNo;
+	window.open(fullUrl, '_blank');
+};
+
+// 카드전표 영수증 조회
+var fnReceiptPage = function (tid) {
+	var fullUrl = "https://npg.nicepay.co.kr/issue/IssueLoader.do?TID=" + tid + "&type=0";
+	window.open(fullUrl, '_blank');
+};
+
+// 수동 회수 지시 
+var fnWdinvocieSend = function (ordChgSq) {
+	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 회수지시 처리 하시겠습니까? <br> 시스템에서 회수지시를 보내지는않습니다.", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordChgSq = ordChgSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/wdinvoice/send/save'
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}
+			);
 		}
+	});
+};
 
-		$('#orderDetailInfo input[name=orderPhnno]').val(orderPhnno);
-		$('#orderDetailInfo input[name=custNo]').val(custNo);
-
-		var param = {};
-		param.elementCellPhnno = '#orderDetailInfo input[name=orderPhnno]';
-		param.elementCustNo = '#orderDetailInfo input[name=custNo]';
-		cfnOpenLmsPopup(param);
-	};
+// 구매확정철회
+var fnChangedCompleteDelivery = function (ordNo, ordDtlNo, ordDtlStat) {
+	if ('70' !== ordDtlStat) {
+		mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
+		return false;
+	}
 	
-	// EMAIL 전송
-	var fnOpenEmailForm = function (orderEmail, orderNm, custNo) {
-		if (gagajf.isNull(orderEmail) && gagajf.isNull(orderNm) && gagajf.isNull(custNo)) {
-			mcxDialog.alert("정보가 올바르지 않습니다.");
-			return false;
-		}
-		$('#orderDetailInfo input[name=orderEmail]').val(orderEmail);
-		$('#orderDetailInfo input[name=orderNm]').val(orderNm);
-		$('#orderDetailInfo input[name=custNo]').val(custNo);
-
-		var param = {};
-		param.elementRecipEmail = '#orderDetailInfo input[name=orderEmail]';
-		param.elementCustNm = '#orderDetailInfo input[name=orderNm]';
-		param.elementCustNo = '#orderDetailInfo input[name=custNo]';
-
-		cfnOpenEmailPopup(param);
-	};
-
-	// 송장조회
-	var fnSearchDelivery = function (url, invoiceNo) {
-		var fullUrl = url + invoiceNo;
-		window.open(fullUrl, '_blank');
-	};
-
-	// 카드전표 영수증 조회
-	var fnReceiptPage = function (tid) {
-		var fullUrl = "https://npg.nicepay.co.kr/issue/IssueLoader.do?TID=" + tid + "&type=0";
-		window.open(fullUrl, '_blank');
-	};
+	var data = {};
+	data.ordDtlNo = ordDtlNo;
+	data.ordNo = ordNo;
+	var jsonData = JSON.stringify(data);
 	
-	// 수동 회수 지시 
-	var fnWdinvocieSend = function (ordChgSq) {
-		mcxDialog.confirm("요청번호 [" + ordChgSq + "] 회수지시 처리 하시겠습니까? <br> 시스템에서 회수지시를 보내지는않습니다.", {
+	gagajf.ajaxJsonSubmit('/order/check/status', jsonData, fnChangedCompleteDeliveryCallback);
+};
+
+var fnChangedCompleteDeliveryCallback = function (result) {
+	// 구매확정 처리 가능 하지 않으면 얼럿 노출 끝
+	if (!result.isPossible) {
+		mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
+		return false;
+	} else {
+		mcxDialog.confirm("구매확정 철회 하시겠습니까? <br> 지급된 포인트에 대한 처리는 별도로 하셔야 합니다. ", {
 			cancelBtnText	: "취소",
 			sureBtnText		: "확인",
 			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordChgSq = ordChgSq;
+				var data = {};
+				data.ordDtlNo = result.ordDtlNo;
+				data.ordNo = result.ordNo;
 				
 				var jsonData = JSON.stringify(data);
 				gagajf.ajaxJsonSubmit(
-					'/order/wdinvoice/send/save'
+					'/order/complete/delivery/changed'
 					, jsonData
 					, function (result) {
 						uifnPopupClose('popupOrderDetail');
@@ -1357,84 +1389,55 @@ $(document).ready(function () {
 				);
 			}
 		});
-	};
+	}
+};
+
+// 주문상세 상태값 변경
+var fnChangOrdDtlStat = function (obj) {
+	var ordNo 			= $(obj).attr("ordNo");
+	var ordDtlNo 		= $(obj).attr("ordDtlNo");
+	var ordDtlStat 		= $(obj).val();
+	var ordDtlStatNm 	= $(obj).children("option:selected").text();
+	var strConfirm		= "주문상태를 " + ordDtlStatNm + "(으)로 변경 하시겠습니까?"
 	
-	// 구매확정철회
-	var fnChangedCompleteDelivery = function (ordNo, ordDtlNo, ordDtlStat) {
-		if ('70' !== ordDtlStat) {
-			mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
-			return false;
-		}
-		
-		var data = {};
-		data.ordDtlNo = ordDtlNo;
-		data.ordNo = ordNo;
-		var jsonData = JSON.stringify(data);
-		
-		gagajf.ajaxJsonSubmit('/order/check/status', jsonData, fnChangedCompleteDeliveryCallback);
-	};
-
-	var fnChangedCompleteDeliveryCallback = function (result) {
-		// 구매확정 처리 가능 하지 않으면 얼럿 노출 끝
-		if (!result.isPossible) {
-			mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
-			return false;
-		} else {
-			mcxDialog.confirm("구매확정 철회 하시겠습니까? <br> 지급된 포인트에 대한 처리는 별도로 하셔야 합니다. ", {
-				cancelBtnText	: "취소",
-				sureBtnText		: "확인",
-				sureBtnClick	: function () {
-					var data = {};
-					data.ordDtlNo = result.ordDtlNo;
-					data.ordNo = result.ordNo;
-					
-					var jsonData = JSON.stringify(data);
-					gagajf.ajaxJsonSubmit(
-						'/order/complete/delivery/changed'
-						, jsonData
-						, function (result) {
-							uifnPopupClose('popupOrderDetail');
-							fnReOpenOrderDetailPopup();
-						}
-					);
+	mcxDialog.confirm(strConfirm, {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo			= ordNo;
+			data.ordDtlNo 		= ordDtlNo;
+			data.ordDtlStat 	= ordDtlStat;
+
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/detail/ordDtlStat/changed'
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
 				}
-			});
+			);
 		}
-	};
-	
-	// 주문상세 상태값 변경
-	var fnChangOrdDtlStat = function (obj) {
-		var ordNo 			= $(obj).attr("ordNo");
-		var ordDtlNo 		= $(obj).attr("ordDtlNo");
-		var ordDtlStat 		= $(obj).val();
-		var ordDtlStatNm 	= $(obj).children("option:selected").text();
-		var strConfirm		= "주문상태를 " + ordDtlStatNm + "(으)로 변경 하시겠습니까?"
-		
-		mcxDialog.confirm(strConfirm, {
-			cancelBtnText	: "취소",
-			sureBtnText		: "확인",
-			sureBtnClick	: function () {
-				var data = new Object();
-				data.ordNo			= ordNo;
-				data.ordDtlNo 		= ordDtlNo;
-				data.ordDtlStat 	= ordDtlStat;
-
-				var jsonData = JSON.stringify(data);
-				gagajf.ajaxJsonSubmit(
-					'/order/detail/ordDtlStat/changed'
-					, jsonData
-					, function (result) {
-						uifnPopupClose('popupOrderDetail');
-						fnReOpenOrderDetailPopup();
-					}
-				);
-			}
-		});
-	};
-	
-	
-	
+	});
+};
+
+// DAUM을 이용한 우편번호 팝업 레이어
+var fnOpenDaumAddr = function() {
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			// 우편번호와 주소 정보를 해당 필드에 넣는다.
+			$('#detailForm input[name=bizZipcode]').val(data.zonecode);
+			$('#detailForm input[name=bizBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#detailForm input[name=bizDtlAddr]').focus();
+			
+			cfnCloseDaumAddr();
+		},
+		width: '100%'
+	});
 	
+	cfnOpenDaumAddr(daumZip);
+}
 </script>
 
 </html>

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailGiftcardHst.html

@@ -5,7 +5,7 @@
  * @source  : OrderDetailPointHst.html
  * @desc    : 주문상품 상세 상품권 이력 화면
  *============================================================================
- * Pastelmall
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailPointHst.html

@@ -5,7 +5,7 @@
  * @source  : OrderDetailPointHst.html
  * @desc    : 주문상품 상세 마일리지 이력 화면
  *============================================================================
- * Pastelmall
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailTmtbHst.html

@@ -5,7 +5,7 @@
  * @source  : OrderDetailPointHst.html
  * @desc    : 주문상품 상세 상품권 이력 화면
  *============================================================================
- * Pastelmall
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/order/OrderListForm.html

@@ -5,7 +5,7 @@
  * @source  : OrderListForm.html
  * @desc    : 주문목록 Page
  *============================================================================
- * SISUN
+ * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/order/OrderMemoRegistForm.html

@@ -5,7 +5,7 @@
  * @source  : OrderMemoRegistForm.html
  * @desc    : 주문메모 등록 화면
  *============================================================================
- * SISUN
+ * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html

@@ -5,7 +5,7 @@
  * @source  : OrderSellerListForm.html
  * @desc    : 입점업체미발주목록조회 Page
  *============================================================================
- * SISUN
+ * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION

+ 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
- *============================================================================
- * SISUN
- * 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>
+
+
+
+
+

+ 91 - 40
style24.admin/src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html

@@ -5,7 +5,7 @@
  * @source  : CancelRequestForm.html
  * @desc    : 반품요청 화면
  *============================================================================
- * Pastelmall
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
@@ -21,7 +21,7 @@
 		</div>
 			
 		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/order/cancel" method="post" target="hdFrameForOrderCancel">
+			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/orderChange/return" method="post" target="hdFrameForOrderCancel">
 				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
 				<input type="hidden" name="chgReason" value=""/>
 				<input type="hidden" name="chgReasonDesc" value=""/>
@@ -29,19 +29,17 @@
 				<h3>주문정보</h3>
 				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 
-				<h3>취소정보</h3>
+				<h3>반품정보</h3>
 				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 				
 				<h3>배송비정보</h3>
 				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
 				
+				<h3>회수지정보</h3>
+				<button type="button" style="margin-left:10px;" class="btn btnRight btn-base btn-sm off" id="btnUpdateOrderAddr">수정</button>
+				<div id="gridDelvRtnAddrInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<!-- 
-					<button type="button" class="btn btn-success" id="btnCancelRequestEscrow" onclick="fnCancelRequestEscrow();" style="display:none;">에스크로 결제생성</button>
-					<label th:if="${sessionInfo.userId == 'jsh77b'}">
-						<input type="checkbox" name="pgStats" value="N">PG 전문 미전송
-					</label>
-					 -->
 					<button type="button" class="btn btn-success" id="btnCancelRequestPartOk" onclick="fnCancelRequestPartOk();">요청</button>
 				</div>
 				
@@ -54,7 +52,7 @@
 					</colgroup>
 					<tbody>
 						<tr>
-							<th>취소사유 <i class="star"></i></th>
+							<th>반품사유 <i class="star"></i></th>
 							<td>
 								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
 									<option value="">[선택하세요]</option>
@@ -149,11 +147,12 @@ var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상
 var ordNo 					= [[${ordNo}]];									// 주문번호
 var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+var orderDelvRtnAddrInfo	= [[${orderDelvRtnAddrInfo}]];					// 주문배송정보
 
 var temp1 = true;
 var temp2 = false;
 
-// specify the columns
+// 1. 주문정보(반품대상)
 var columnCancelReqList = [
 	{
 		headerName	: "주문상세정보",
@@ -227,7 +226,7 @@ var columnCancelReqList = [
 				}
 			},
 			{
-				headerName		: "취소"		
+				headerName		: "반품"		
 				, field			: "ordCanChgQty"			
 				, width			: 100		
 				, cellClass		: 'text-center'
@@ -423,7 +422,7 @@ var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
 gridOptionsCancelReqList.suppressRowClickSelection = true;
 gridOptionsCancelReqList.rowSelection = 'multiple';
 
-//specify the columns
+// 2. 반품정보(환불정보)
 var columnCancelReqToBeList = [
 	{
 		headerName	: "주문상세정보",
@@ -672,7 +671,7 @@ var columnCancelReqToBeList = [
 ];
 var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
 
-//specify the columns
+// 3. 배송비정보(환불정보)
 var columnDelvCdList = [
 	{
 		headerName	: "배송코드기준금액",
@@ -778,7 +777,7 @@ var columnDelvCdList = [
 ];
 var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
 
-// 10. 무통장 환불정보
+// 4. 무통장 계좌정보
 var columnDefsRefundAccountInfo = [
 	{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: false, checkboxSelection: true, filter: false},
 	{headerName: "은행명"		, field: "bankNm"		, width: 140	, cellClass: 'text-center'},
@@ -789,6 +788,27 @@ var columnDefsRefundAccountInfo = [
 ];
 
 var gridOptionsRefundAccountInfo = orderAgGrid.getGridOptions(columnDefsRefundAccountInfo);
+
+// 5 .배송정보(회수지)
+var columnDefsDeliveryInfo = [
+	{headerName: "배송지번호"		, field: "delvAddrSq"	, width: 100, cellClass: 'text-center'},
+	{headerName: "받는분"			, field: "recipNm"		, width: 80, cellClass: 'text-left', editable: true},
+	{headerName: "핸드폰번호"		, field: "recipPhnno"	, width: 120, cellClass: 'text-left', editable: true},
+	{headerName: "전화번호"		, field: "recipTelno"	, width: 120, cellClass: 'text-left', editable: true},
+	{
+		headerName		: "우편번호"		
+		, field			: "recipZipNo"
+		, width			: 200
+		, cellClass		: 'text-left'
+		, cellRenderer	: function (params) {
+			return params.value + "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('grid');\">우편번호찾기</button>";
+		}
+	},
+	{headerName: "주소(기본)"		, field: "recipBaseAddr"	, width: 350, cellClass: 'text-left'},
+	{headerName: "주소(상세)"		, field: "recipDtlAddr"		, width: 200, cellClass: 'text-left', editable: true},
+	{headerName: "배송메모"		, field: "delvMemo"			, width: 280, cellClass: 'text-left', editable: true, hide: true}
+];
+var gridOptionsDelvRtnInfo = orderAgGrid.getGridOptions(columnDefsDeliveryInfo);
 </script>
 
 <!-- AgGrid 컬럼 세팅 -->
@@ -830,6 +850,9 @@ var orderAgGrid = {
 </script>
 
 <script>
+//현재 사유는 고객 입니다.
+var isCustomer = true;
+
 // 취소정보계산
 var fnCalculateRefundAmt = function (obj) {
 	// 취소정보담은목록
@@ -848,10 +871,16 @@ var fnCalculateRefundAmt = function (obj) {
 		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	}
 	
+	if (cancelRequestTargetList.length == 0) {
+		alert("요청 대상정보가 존재 하지 않습니다.");
+		uifnPopupClose('popupReturnRequestForm');
+		return false;
+	}
+	
 	// 환불금액계산호출
 	var jsonData = JSON.stringify(cancelRequestTargetList);
 	gagajf.ajaxJsonSubmit(
-		'/order/cancel/refundAmt'
+		'/orderChange/cancel/refundAmt'
 		, jsonData
 		, function(result) {
 			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
@@ -880,10 +909,19 @@ var fnCalculateRefundAmt = function (obj) {
 			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
 			
 			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
-			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//환불 배송 금액
+			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//취소 환불 배송 금액
 			
-			$("#spanTotRtnDelvFee").text(result.spanTotRtnDelvFee.addComma());		//환불 배송 금액
-			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//환불 배송 금액
+			$("#spanTotRtnDelvFee").text(result.spanTotRtnDelvFee.addComma());		//반품 환불 배송 금액
+			$("#spanTotExcDelvFee").text(result.spanTotExcDelvFee.addComma());		//교환 환불 배송 금액
+						
+			// 고객사유 : 환불금액게산 = (취소금액 + 배송비) - 추가배송비 - 반품배송비
+			if (isCustomer) {
+				result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee) - result.spanTotDeliveryFee - result.spanTotRtnDelvFee;
+			} 
+			// 회사사유 : 환불금액게산 = (취소금액 + 배송비)
+			else {
+				result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee);
+			}
 			
 			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
 		}
@@ -897,21 +935,21 @@ var fnChangeChgReason = function(reasonCd){
 	// 취소, 반품, 교환 사유 판단
 	if (arrREasonCd[0] == 'G686_10') {
 		$("#imputeReason").text("고객");
-		isImputationCustomers = true;
+		isCustomer = true;
 	} else {
 		$("#imputeReason").text("회사");
-		isImputationCustomers = false;
+		isCustomer = false;
 	}
 
 	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
 	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
-
-	//fnCalculateRefundAmt();			//환불예정금액 계산.
+	
+	//환불예정금액 계산.
+	fnCalculateRefundAmt();			
 }
 
-// 취소요청
+// 반품요청
 var fnCancelRequestPartOk = function () {
-	
 	var temp 		= false;
 	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat; 
 	var allCanYn 	= "N";
@@ -963,14 +1001,6 @@ var fnCancelRequestPartOk = function () {
 		accountNm 	= refundAccount[0].accountNm;
 		bankCd 		= refundAccount[0].bankCd;
 	}
-
-	// 5. PG 전송 여부
-	var pgStat = "N";
-	if ($('#cancelRequestFrm input:checkbox[name=pgStats]').is(":checked")) {
-		pgStat = "Y";
-	}
-	
-	$("#cancelRequestFrm input[name=pgStat]").val(pgStat);
 	
 	var jsonObj = {
 		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
@@ -981,22 +1011,23 @@ var fnCancelRequestPartOk = function () {
 		,"accountNm" 		: accountNm
 		,"bankCd" 			: bankCd
 		,"allCanYn" 		: allCanYn
+		,"isCustomer"		: isCustomer
 	}
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
 	var jsonData = JSON.stringify(jsonObj);
 	
-	mcxDialog.confirm('취소요청하시겠습니까?', {
-		cancelBtnText		: "취소",
+	mcxDialog.confirm('반품요청하시겠습니까?', {
+		cancelBtnText		: "반품",
 		sureBtnClick		: function(){
 			// 취소 실행
 			gagajf.ajaxJsonSubmit(
-				'/order/cancel/'
+				'/orderChange/return/'
 				, jsonData
 				, function() {
 					uifnPopupClose('popupOrderDetail');
 					fnReOpenOrderDetailPopup();
-					uifnPopupClose('popupCancelRequestForm');
+					uifnPopupClose('popupReturnRequestForm');
 				}
 			);
 		}
@@ -1005,14 +1036,14 @@ var fnCancelRequestPartOk = function () {
 
 // 환불계좌 등록
 var fnCreateOrderRfAccount = function () {	
-	var actionUrl = "/order/refund/account/create/form?ordNo=" + ordNo ;
+	var actionUrl = "/orderChange/refund/account/create/form?ordNo=" + ordNo ;
 	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
 };
 
 // 환불계좌 정보
 var fnBindOrderRfAccountInfo = function () {
 	gagaAgGrid.fetch(
-		"/order/refund/account/info/list?ordNo=" + ordNo
+		"/orderChange/refund/account/info/list?ordNo=" + ordNo
 		, gridOptionsRefundAccountInfo
 		, null
 		, function (result) {
@@ -1020,6 +1051,24 @@ var fnBindOrderRfAccountInfo = function () {
 	)
 };
 
+
+// DAUM을 이용한 우편번호 팝업 레이어 
+var fnOpenDaumAddr = function() {
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			// 우편번호와 주소 정보를 해당 필드에 넣는다.
+			$('#detailForm input[name=bizZipcode]').val(data.zonecode);
+			$('#detailForm input[name=bizBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#detailForm input[name=bizDtlAddr]').focus();
+			
+			cfnCloseDaumAddr();
+		},
+		width: '100%'
+	});
+	
+	cfnOpenDaumAddr(daumZip);
+}
+
 $(document).ready(function() {
 	// 1. Create a agGrid
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
@@ -1030,7 +1079,9 @@ $(document).ready(function() {
 	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
 	
 	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
-	//gridOptionsRefundAccountInfo.api.setRowData(orderRfAccountInfo);
+	
+	gagaAgGrid.createGrid('gridDelvRtnAddrInfo'				, gridOptionsDelvRtnInfo);				// 배송지정보
+	gridOptionsDelvRtnInfo.api.setRowData(orderDelvRtnAddrInfo);
 	
 	// 취소정보계산
 	fnCalculateRefundAmt(null);

+ 4 - 3
style24.admin/src/main/webapp/ux/js/admin.popup.js

@@ -729,12 +729,13 @@ var cfnOpenCompanyListPopup = function(callbackfn) {
  * <pre>
  *     cfnOpenTmtbSetPopup();
  * </pre>
+ * @param  : mode - 모드(N:신규, U:상세/수정, C:복사) 필수
  * @since  : 2020/12/29
  * @author : bin2107
  */
-var cfnOpenMorebetterSetPopup = function() {
-	var actionUrl = "/marketing/morebetterRegPopup/form?gbn=C";
-
+var cfnOpenMorebetterSetPopup = function(mode ,tmtbSeq) {
+	var actionUrl = "/marketing/morebetterRegPopup/form?mode="+mode;
+	if (typeof(tmtbSeq) != 'undefined') actionUrl += "&tmtbSeq=" + tmtbSeq;
 	uifnPopupClose('popupMorebetterReg');
 	cfnOpenModalPopup(actionUrl, 'popupMorebetterReg');
 }

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

@@ -0,0 +1,258 @@
+<?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" />
+  </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>

+ 7 - 7
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsWmsProductStockJob.java

@@ -75,10 +75,10 @@ public class TsbGoodsWmsProductStockJob extends TsbAbstractJob<IfProductSku, IfP
 			goodsService.deleteIfProductSku();
 
 			// TB_IF_PRODUCTSKU_TEMP 생성
-			Collection<IfProductSku> wmsIfProductSukList = wmsGoodsService.getWmsIfProductSukList();
+			Collection<IfProductSku> wmsIfProductSukList = wmsGoodsService.getWmsIfProductSukList();  //테스트 1000건
 
 			//대용량 : N
-			String byrow = "N";
+			String byrow = "Y";
 			if ("Y".equals(byrow)) {
 				for(IfProductSku ifProductSkuMap : wmsIfProductSukList) {
 					goodsService.createIfProductSkuByRow(ifProductSkuMap);
@@ -101,16 +101,16 @@ public class TsbGoodsWmsProductStockJob extends TsbAbstractJob<IfProductSku, IfP
 				}
 
 			}
-//
-//			// TB_IF_PRODUCTSKU_HST 생성
-//			//goodsService.createWmsProductSkuHst(jobdate);
+
+			// TB_IF_PRODUCTSKU_HST 생성
+			goodsService.createWmsProductSkuHst(jobdate);
 
 			//온라인 상품 재고 적용
-			//goodsService.saveGoodsStock();
+			goodsService.saveGoodsStock();
 		}
 
 		//온라인 전시 재고 작업
-		//goodsService.saveGoodsDispStock();
+		goodsService.saveGoodsDispStock();
 
 		return ifProductSku;
 	}

+ 1 - 1
style24.batch/src/main/java/com/style24/batch/biz/service/TsbCommonService.java

@@ -33,7 +33,7 @@ public class TsbCommonService {
 //	}
 
 	/**
-	 * ERP Sync 옵션
+	 * WMS Sync 옵션
 	 *
 	 * @return
 	 * @author eskim

+ 29 - 31
style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -1,9 +1,7 @@
 package com.style24.batch.biz.service;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -459,34 +457,34 @@ public class TsbGoodsService {
 	@Transactional("shopTxnManager")
 	public void createWmsProductSkuHst(String jobdate) {
 
-		// TB_IF_PRODUCTSKU_TEMP 작업
-		goodsDao.deleteIfProductSku();
-
-		// TB_IF_PRODUCTSKU_TEMP 생성
-		Collection<IfProductSku> wmsIfProductSukList = wmsGoodsService.getWmsIfProductSukList();
-		String byrow = "N";
-		if ("Y".equals(byrow)) {
-			for(IfProductSku ifProductSku : wmsIfProductSukList) {
-				goodsDao.createIfProductSkuByRow(ifProductSku);
-			}
-		}else {
-
-			List<IfProductSku> productSukList = new ArrayList<IfProductSku>();
-
-			GagaMap dataMap = new GagaMap();
-			int index = 0;
-			for(IfProductSku ifProductSku : wmsIfProductSukList) {
-
-				productSukList.add(ifProductSku);
-				index++;
-				if (index % 200 == 0 ||  wmsIfProductSukList.size() == index) {
-					dataMap.set("productSukList", productSukList);
-					goodsDao.createIfProductSku(dataMap);
-					productSukList.clear();
-				}
-			}
-
-		}
+//		// TB_IF_PRODUCTSKU_TEMP 작업
+//		goodsDao.deleteIfProductSku();
+//
+//		// TB_IF_PRODUCTSKU_TEMP 생성
+//		Collection<IfProductSku> wmsIfProductSukList = wmsGoodsService.getWmsIfProductSukList();
+//		String byrow = "N";
+//		if ("Y".equals(byrow)) {
+//			for(IfProductSku ifProductSku : wmsIfProductSukList) {
+//				goodsDao.createIfProductSkuByRow(ifProductSku);
+//			}
+//		}else {
+//
+//			List<IfProductSku> productSukList = new ArrayList<IfProductSku>();
+//
+//			GagaMap dataMap = new GagaMap();
+//			int index = 0;
+//			for(IfProductSku ifProductSku : wmsIfProductSukList) {
+//
+//				productSukList.add(ifProductSku);
+//				index++;
+//				if (index % 200 == 0 ||  wmsIfProductSukList.size() == index) {
+//					dataMap.set("productSukList", productSukList);
+//					goodsDao.createIfProductSku(dataMap);
+//					productSukList.clear();
+//				}
+//			}
+//
+//		}
 
 		// TB_IF_PRODUCTSKU_HST 2달 전 데이터 삭제
 		String delYyyymmdd = GagaDateUtil.getOffsetMonth(-2, "yyyyMMdd") + "000000";  //년월일시분초
@@ -625,7 +623,7 @@ public class TsbGoodsService {
 		goodsDao.createIfProductSku(dataMap);
 	}
 
-	
+
 	/**
 	 * TB_IF_PRODUCTSKU_HST 저장
 	 *

+ 5 - 4
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -1334,7 +1334,7 @@
 	<!-- TB_IF_PRODUCTSKU_TEMP 삭제 -->
 	<delete id="deleteIfProductSku"  timeout="300">
 		/* TsbGoods.deleteIfProductSku */
-		TRUNCATE TABLE TB_IF_PRODUCTSKU
+		DELETE FROM TB_IF_PRODUCTSKU
 	</delete>
 	
 	<!-- TB_IF_PRODUCTSKU_TEMP 저장 -->
@@ -1516,13 +1516,13 @@
 		HAVING Z.MIN_ORD_QTY <![CDATA[<=]]> MIN(Z.STOCK_QTY_ITEM)
 	</insert>
 	
-	<!-- ERP 재고 임시 테이블 삭제 -->
+	<!-- WMS 재고 임시 테이블 삭제 -->
 	<delete id="deleteTbOptionSyncTemp"   timeout="300">
 		/* TsbGoods.deleteTbOptionSyncTemp */
-		TRUNCATE TABLE TB_OPTION_SYNC_TEMP
+		DELETE FROM TB_OPTION_SYNC_TEMP
 	</delete>
 
-	<!--ERP 재고 임시 테이블 이관  -->
+	<!--WMS 재고 임시 테이블 이관  -->
 	<insert id="createTbOptionSyncTemp"   timeout="300">
 		/* TsbGoods.createTbOptionSyncTemp */
 		INSERT INTO TB_OPTION_SYNC_TEMP
@@ -1855,6 +1855,7 @@
 		/* TsbGoods.createTtbSellQtyByOrderDetail */
 		INSERT INTO TB_SELL_QTY (
 		      GOODS_CD
+		    , OPT_CD
 		    , SELL_GB
 		    , ORD_DTL_NO
 		    , AGENT_ORDER_ID

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

@@ -0,0 +1,185 @@
+<?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" />
+  </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$/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" />
+      <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>

+ 0 - 32
style24.front/.classpath

@@ -1,32 +0,0 @@
-<?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>

+ 43 - 42
style24.front/.project

@@ -1,42 +1,43 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>style24.front</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.wst.common.project.facet.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.wst.validation.validationbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.springframework.ide.eclipse.boot.validation.springbootbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
-		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
-		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>style24.front</name>
+	<comment></comment>
+	<projects>
+		<project>style24.core</project>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.springframework.ide.eclipse.boot.validation.springbootbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+	</natures>
+</projectDescription>

+ 0 - 13
style24.front/.settings/.jsdtscope

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="src/main/webapp"/>
-	<classpathentry kind="src" path="target/m2e-wtp/web-resources"/>
-	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
-		<attributes>
-			<attribute name="hide" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
-	<classpathentry kind="output" path=""/>
-</classpath>

+ 0 - 6
style24.front/.settings/org.eclipse.core.resources.prefs

@@ -1,6 +0,0 @@
-eclipse.preferences.version=1
-encoding//src/main/java=UTF-8
-encoding//src/main/resources=UTF-8
-encoding//src/test/java=UTF-8
-encoding//src/test/resources=UTF-8
-encoding/<project>=UTF-8

+ 0 - 12
style24.front/.settings/org.eclipse.jdt.core.prefs

@@ -1,12 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8

+ 0 - 4
style24.front/.settings/org.eclipse.m2e.core.prefs

@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1

+ 0 - 12
style24.front/.settings/org.eclipse.wst.common.component

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
-    <wb-module deploy-name="style24.front">
-        <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
-        <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
-        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
-        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
-        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/>
-        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources"/>
-        <property name="context-root" value="style24.front"/>
-        <property name="java-output-path" value="/style24.front/target/classes"/>
-    </wb-module>
-</project-modules>

+ 0 - 7
style24.front/.settings/org.eclipse.wst.common.project.facet.core.xml

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<faceted-project>
-  <fixed facet="wst.jsdt.web"/>
-  <installed facet="java" version="1.8"/>
-  <installed facet="jst.web" version="4.0"/>
-  <installed facet="wst.jsdt.web" version="1.0"/>
-</faceted-project>

+ 0 - 1
style24.front/.settings/org.eclipse.wst.jsdt.ui.superType.container

@@ -1 +0,0 @@
-org.eclipse.wst.jsdt.launching.baseBrowserLibrary

+ 0 - 1
style24.front/.settings/org.eclipse.wst.jsdt.ui.superType.name

@@ -1 +0,0 @@
-Window

+ 0 - 2
style24.front/.settings/org.eclipse.wst.validation.prefs

@@ -1,2 +0,0 @@
-disabled=06target
-eclipse.preferences.version=1

+ 0 - 2
style24.front/.settings/org.springframework.ide.eclipse.prefs

@@ -1,2 +0,0 @@
-boot.validation.initialized=true
-eclipse.preferences.version=1

+ 110 - 110
style24.front/pom.xml

@@ -1,111 +1,111 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>com.style24</groupId>
-		<artifactId>root</artifactId>
-		<version>0.0.1-SNAPSHOT</version>
-	</parent>
-	<groupId>com.style24.front</groupId>
-	<artifactId>style24.front</artifactId>
-	<packaging>war</packaging>
-	<name>style24.front</name>
-	<description>STYLE24 Front</description>
-	
-	<dependencies>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-security</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.security</groupId>
-			<artifactId>spring-security-test</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-mobile</artifactId>
-			<version>1.5.22.RELEASE</version>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-thymeleaf</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>nz.net.ultraq.thymeleaf</groupId>
-			<artifactId>thymeleaf-layout-dialect</artifactId>
-		</dependency>
-		
-		<dependency>
-			<groupId>servlets.com</groupId>
-			<artifactId>cos</artifactId>
-			<version>05Nov2002</version>
-		</dependency>
-		<dependency>
-			<groupId>commons-fileupload</groupId>
-			<artifactId>commons-fileupload</artifactId>
-			<version>1.4</version>
-		</dependency>
-		<dependency>
-			<groupId>commons-io</groupId>
-			<artifactId>commons-io</artifactId>
-			<version>2.6</version>
-		</dependency>
-		
-		<!-- /// WEB-INF lib -->
-		<dependency>
-			<groupId>com.gagaframework</groupId>
-			<artifactId>gagaframework-web-core</artifactId>
-			<version>1.7.1-RELEASE</version>
-			<scope>system</scope>
-			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-core-1.7.1-RELEASE.jar</systemPath>
-		</dependency>
-		<dependency>
-			<groupId>com.gagaframework</groupId>
-			<artifactId>gagaframework-web-security</artifactId>
-			<version>1.7.1-RELEASE</version>
-			<scope>system</scope>
-			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-security-1.7.1-RELEASE.jar</systemPath>
-		</dependency>
-		<dependency>
-			<groupId>com.gagaframework</groupId>
-			<artifactId>gagaframework-web-parameter</artifactId>
-			<version>1.7-RELEASE</version>
-			<scope>system</scope>
-			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-parameter-1.7-RELEASE.jar</systemPath>
-		</dependency>
-		<dependency>
-			<groupId>com.gagaframework</groupId>
-			<artifactId>gagaframework-web-rest</artifactId>
-			<version>1.7.1-RELEASE</version>
-			<scope>system</scope>
-			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-rest-1.7-RELEASE.jar</systemPath>
-		</dependency>
-		<dependency>
-			<groupId>com.gagaframework</groupId>
-			<artifactId>gagaframework-web-util</artifactId>
-			<version>1.7-RELEASE</version>
-			<scope>system</scope>
-			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar</systemPath>
-		</dependency>
-		<!-- \\\ WEB-INF lib -->
-	</dependencies>
-	
-	<build>
-		<finalName>${project.name}</finalName>
-		<resources>
-			<resource>
-				<directory>src/main/java</directory>
-				<includes>
-					<include>**/*.xml</include>
-				</includes>
-			</resource>
-			<resource>
-				<directory>src/main/resources</directory>
-				<includes>
-					<include>**/*</include>
-				</includes>
-			</resource>
-		</resources>
-	</build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>com.style24</groupId>
+		<artifactId>root</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+	<groupId>com.style24.front</groupId>
+	<artifactId>style24.front</artifactId>
+	<packaging>war</packaging>
+	<name>style24.front</name>
+	<description>STYLE24 Front</description>
+	
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-security</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.security</groupId>
+			<artifactId>spring-security-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-mobile</artifactId>
+			<version>1.5.22.RELEASE</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-thymeleaf</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>nz.net.ultraq.thymeleaf</groupId>
+			<artifactId>thymeleaf-layout-dialect</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>servlets.com</groupId>
+			<artifactId>cos</artifactId>
+			<version>05Nov2002</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-fileupload</groupId>
+			<artifactId>commons-fileupload</artifactId>
+			<version>1.4</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>2.6</version>
+		</dependency>
+		
+		<!-- /// WEB-INF lib -->
+		<dependency>
+			<groupId>com.gagaframework</groupId>
+			<artifactId>gagaframework-web-core</artifactId>
+			<version>1.7.1-RELEASE</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-core-1.7.1-RELEASE.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>com.gagaframework</groupId>
+			<artifactId>gagaframework-web-security</artifactId>
+			<version>1.7.1-RELEASE</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-security-1.7.1-RELEASE.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>com.gagaframework</groupId>
+			<artifactId>gagaframework-web-parameter</artifactId>
+			<version>1.7-RELEASE</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-parameter-1.7-RELEASE.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>com.gagaframework</groupId>
+			<artifactId>gagaframework-web-rest</artifactId>
+			<version>1.7.1-RELEASE</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-rest-1.7-RELEASE.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>com.gagaframework</groupId>
+			<artifactId>gagaframework-web-util</artifactId>
+			<version>1.7-RELEASE</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar</systemPath>
+		</dependency>
+		<!-- \\\ WEB-INF lib -->
+	</dependencies>
+	
+	<build>
+		<finalName>${project.name}</finalName>
+		<resources>
+			<resource>
+				<directory>src/main/java</directory>
+				<includes>
+					<include>**/*.xml</include>
+				</includes>
+			</resource>
+			<resource>
+				<directory>src/main/resources</directory>
+				<includes>
+					<include>**/*</include>
+				</includes>
+			</resource>
+		</resources>
+	</build>
 </project>

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfCartDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 장바구니 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfCartDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 장바구니 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfCartDao {
+
+}

+ 132 - 132
style24.front/src/main/java/com/style24/front/biz/dao/TsfCounselDao.java

@@ -1,132 +1,132 @@
-package com.style24.front.biz.dao;
-
-import java.util.Collection;
-
-import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.Counsel;
-
-/**
- * 상담(1:1문의) Dao
- * 
- * @author gagamel
- * @since 2020. 12. 28
- */
-@ShopDs
-public interface TsfCounselDao {
-
-	/**
-	 * 1:1문의 생성
-	 * @param counsel - 상담정보
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	void createOneToOneQna(Counsel counsel);
-
-	/**
-	 * 1:1문의(총,답변완료,처리중) 건수
-	 * @param counsel - 상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	Counsel getOneToOneQnaCountInfo(Counsel counsel);
-
-	/**
-	 * 1:1문의 총건수
-	 * @param counsel - 상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	int getOneToOneQnaTotalCount(Counsel counsel);
-
-	/**
-	 * 1:1문의 목록
-	 * @param counsel -상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	Collection<Counsel> getOneToOneQnaList(Counsel counsel);
-
-	/**
-	 * 1:1문의 삭제
-	 * @param counsel - 상담정보
-	 * @return 처리건수
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	int deleteOneToOneQna(Counsel counsel);
-
-	/**
-	 * 1:1문의 상세
-	 * @param counsel - 상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 24
-	 */
-	Counsel getOneToOneQna(Counsel counsel);
-
-	/**
-	 * 1:1문의 수정
-	 * @param counsel - 상담정보
-	 * @return 처리건수
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	int updateOneToOneQna(Counsel counsel);
-
-	/**
-	 * 1:1문의 이미지 삭제
-	 * @param counsel - 상담정보
-	 * @return 처리건수
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	int deleteOneToOneQnaImage(Counsel counsel);
-
-	/**
-	 * 상품문의 생성
-	 * @param counsel - 상담정보
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	void createGoodsQna(Counsel counsel);
-
-	/**
-	 * 상품문의(총,답변완료,처리중) 건수
-	 * @param counsel - 상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	Counsel getGoodsQnaCountInfo(Counsel counsel);
-
-	/**
-	 * 상품문의 총건수
-	 * @param counsel - 상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	int getGoodsQnaTotalCount(Counsel counsel);
-
-	/**
-	 * 상품문의 목록
-	 * @param counsel -상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	Collection<Counsel> getGoodsQnaList(Counsel counsel);
-
-	/**
-	 * 상품문의 삭제
-	 * @param counsel - 상담정보
-	 * @return 처리건수
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	int deleteGoodsQna(Counsel counsel);
-
-}
+package com.style24.front.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Counsel;
+
+/**
+ * 상담(1:1문의) Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 28
+ */
+@ShopDs
+public interface TsfCounselDao {
+
+	/**
+	 * 1:1문의 생성
+	 * @param counsel - 상담정보
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	void createOneToOneQna(Counsel counsel);
+
+	/**
+	 * 1:1문의(총,답변완료,처리중) 건수
+	 * @param counsel - 상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	Counsel getOneToOneQnaCountInfo(Counsel counsel);
+
+	/**
+	 * 1:1문의 총건수
+	 * @param counsel - 상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	int getOneToOneQnaTotalCount(Counsel counsel);
+
+	/**
+	 * 1:1문의 목록
+	 * @param counsel -상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	Collection<Counsel> getOneToOneQnaList(Counsel counsel);
+
+	/**
+	 * 1:1문의 삭제
+	 * @param counsel - 상담정보
+	 * @return 처리건수
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	int deleteOneToOneQna(Counsel counsel);
+
+	/**
+	 * 1:1문의 상세
+	 * @param counsel - 상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 24
+	 */
+	Counsel getOneToOneQna(Counsel counsel);
+
+	/**
+	 * 1:1문의 수정
+	 * @param counsel - 상담정보
+	 * @return 처리건수
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	int updateOneToOneQna(Counsel counsel);
+
+	/**
+	 * 1:1문의 이미지 삭제
+	 * @param counsel - 상담정보
+	 * @return 처리건수
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	int deleteOneToOneQnaImage(Counsel counsel);
+
+	/**
+	 * 상품문의 생성
+	 * @param counsel - 상담정보
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	void createGoodsQna(Counsel counsel);
+
+	/**
+	 * 상품문의(총,답변완료,처리중) 건수
+	 * @param counsel - 상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	Counsel getGoodsQnaCountInfo(Counsel counsel);
+
+	/**
+	 * 상품문의 총건수
+	 * @param counsel - 상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	int getGoodsQnaTotalCount(Counsel counsel);
+
+	/**
+	 * 상품문의 목록
+	 * @param counsel -상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	Collection<Counsel> getGoodsQnaList(Counsel counsel);
+
+	/**
+	 * 상품문의 삭제
+	 * @param counsel - 상담정보
+	 * @return 처리건수
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	int deleteGoodsQna(Counsel counsel);
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfCouponDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 쿠폰 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfCouponDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 쿠폰 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfCouponDao {
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 고객(회원) Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfCustomerDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 고객(회원) Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfCustomerDao {
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 전시 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfDisplayDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 전시 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfDisplayDao {
+
+}

+ 61 - 61
style24.front/src/main/java/com/style24/front/biz/dao/TsfFaqDao.java

@@ -1,61 +1,61 @@
-package com.style24.front.biz.dao;
-
-import java.util.Collection;
-
-import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.Faq;
-
-/**
- * FAQ Dao
- * 
- * @author gagamel
- * @since 2020. 12. 23
- */
-@ShopDs
-public interface TsfFaqDao {
-
-	/**
-	 * FAQ 자주 묻는 질문 목록 (10개)
-	 * @param siteCd - 사이트코드
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	Collection<Faq> getFaqLikesList(String siteCd);
-
-	/**
-	 * FAQ 총건수
-	 * @param faq - FAQ 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	int getFaqTotalCount(Faq faq);
-
-	/**
-	 * FAQ 목록
-	 * @param faq - FAQ 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	Collection<Faq> getFaqList(Faq faq);
-
-	/**
-	 * FAQ 조회수 Update
-	 * @param faqSq - FAQ일련번호
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	void updateFaqReadCount(Integer faqSq);
-
-	/**
-	 * FAQ 상세
-	 * @param faqSq - FAQ일련번호
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	Faq getFaq(Integer faqSq);
-
-}
+package com.style24.front.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Faq;
+
+/**
+ * FAQ Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 23
+ */
+@ShopDs
+public interface TsfFaqDao {
+
+	/**
+	 * FAQ 자주 묻는 질문 목록 (10개)
+	 * @param siteCd - 사이트코드
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	Collection<Faq> getFaqLikesList(String siteCd);
+
+	/**
+	 * FAQ 총건수
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	int getFaqTotalCount(Faq faq);
+
+	/**
+	 * FAQ 목록
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	Collection<Faq> getFaqList(Faq faq);
+
+	/**
+	 * FAQ 조회수 Update
+	 * @param faqSq - FAQ일련번호
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	void updateFaqReadCount(Integer faqSq);
+
+	/**
+	 * FAQ 상세
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	Faq getFaq(Integer faqSq);
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfGiftcardDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 상품권 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfGiftcardDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 상품권 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfGiftcardDao {
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 상품 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfGoodsDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 상품 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfGoodsDao {
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfOrderDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 주문 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfOrderDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 주문 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfOrderDao {
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 기획전 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfPlanningDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 기획전 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfPlanningDao {
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfPointDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 포인트 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfPointDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 포인트 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfPointDao {
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfReviewDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 상품평 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfReviewDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 상품평 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfReviewDao {
+
+}

+ 14 - 14
style24.front/src/main/java/com/style24/front/biz/dao/TsfWishlistDao.java

@@ -1,14 +1,14 @@
-package com.style24.front.biz.dao;
-
-import com.style24.core.support.annotation.ShopDs;
-
-/**
- * 위시리스트 Dao
- * 
- * @author gagamel
- * @since 2020. 12. 29
- */
-@ShopDs
-public interface TsfWishlistDao {
-
-}
+package com.style24.front.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 위시리스트 Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@ShopDs
+public interface TsfWishlistDao {
+
+}

+ 23 - 23
style24.front/src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -1,23 +1,23 @@
-package com.style24.front.biz.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.style24.front.biz.dao.TsfCartDao;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 장바구니 Service
- *
- * @author gagamel
- * @since 2020. 12. 29
- */
-@Service
-@Slf4j
-public class TsfCartService {
-
-	@Autowired
-	private TsfCartDao cartDao;
-
-}
+package com.style24.front.biz.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.style24.front.biz.dao.TsfCartDao;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 장바구니 Service
+ *
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@Service
+@Slf4j
+public class TsfCartService {
+
+	@Autowired
+	private TsfCartDao cartDao;
+
+}

+ 212 - 212
style24.front/src/main/java/com/style24/front/biz/service/TsfCounselService.java

@@ -1,212 +1,212 @@
-package com.style24.front.biz.service;
-
-import java.util.Collection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.style24.core.support.env.TscConstants;
-import com.style24.front.biz.dao.TsfCounselDao;
-import com.style24.front.support.security.session.TsfSession;
-import com.style24.persistence.domain.Counsel;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 상담(1:1문의) Service
- *
- * @author gagamel
- * @since 2020. 12. 28
- */
-@Service
-@Slf4j
-public class TsfCounselService {
-
-	@Autowired
-	private TsfCounselDao counselDao;
-
-	/**
-	 * 1:1문의 생성
-	 * @param counsel -상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	@Transactional("shopTxnManager")
-	public void createOneToOneQna(Counsel counsel) {
-		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
-		counsel.setCustNo(TsfSession.getInfo().getCustNo());
-		counsel.setEmail(TsfSession.getInfo().getEmail());
-		counsel.setRegNo(TsfSession.getInfo().getCustNo());
-		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
-		counselDao.createOneToOneQna(counsel);
-	}
-
-	/**
-	 * 1:1문의(총,답변완료,처리중) 건수
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	public Counsel getOneToOneQnaCountInfo() {
-		Counsel counsel = new Counsel();
-		counsel.setCustNo(TsfSession.getInfo().getCustNo());
-		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
-		return counselDao.getOneToOneQnaCountInfo(counsel);
-	}
-
-	/**
-	 * 1:1문의 총건수
-	 * @param counsel - 상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	public int getOneToOneQnaTotalCount(Counsel counsel) {
-		return counselDao.getOneToOneQnaTotalCount(counsel);
-	}
-
-	/**
-	 * 1:1문의 목록
-	 * @param counsel -상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	public Collection<Counsel> getOneToOneQnaList(Counsel counsel) {
-		return counselDao.getOneToOneQnaList(counsel);
-	}
-
-	/**
-	 * 1:1문의 삭제
-	 * @param counsel - 상담정보
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	@Transactional("shopTxnManager")
-	public void deleteOneToOneQna(Counsel counsel) {
-		counsel.setCustNo(TsfSession.getInfo().getCustNo());
-		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
-		int result = counselDao.deleteOneToOneQna(counsel);
-		if (result == 0) {
-			throw new IllegalStateException("답변이 완료되어 삭제할 수 없습니다.");
-		}
-	}
-
-	/**
-	 * 1:1문의 상세
-	 * @param counselSq - 상담일련번호
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 24
-	 */
-	public Counsel getOneToOneQna(Integer counselSq) {
-		Counsel counsel = new Counsel();
-		counsel.setCounselSq(counselSq);
-		counsel.setCustNo(TsfSession.getInfo().getCustNo());
-		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
-		return counselDao.getOneToOneQna(counsel);
-	}
-
-	/**
-	 * 1:1문의 수정
-	 * @param counsel - 상담정보
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	@Transactional("shopTxnManager")
-	public void updateOneToOneQna(Counsel counsel) {
-		counsel.setCustNo(TsfSession.getInfo().getCustNo());
-		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
-		int result = counselDao.updateOneToOneQna(counsel);
-		if (result == 0) {
-			throw new IllegalStateException("답변이 완료되어 수정할 수 없습니다.");
-		}
-	}
-
-	/**
-	 * 1:1문의 이미지 삭제
-	 * @param counsel - 상담정보
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	@Transactional("shopTxnManager")
-	public void deleteOneToOneQnaImage(Counsel counsel) {
-		counsel.setCustNo(TsfSession.getInfo().getCustNo());
-		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
-		int result = counselDao.deleteOneToOneQnaImage(counsel);
-		if (result == 0) {
-			throw new IllegalStateException("답변이 완료되어 삭제할 수 없습니다.");
-		}
-	}
-
-	/**
-	 * 상품문의 생성
-	 * @param counsel -상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	@Transactional("shopTxnManager")
-	public void createGoodsQna(Counsel counsel) {
-		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
-		counsel.setCustNo(TsfSession.getInfo().getCustNo());
-		counsel.setEmail(TsfSession.getInfo().getEmail());
-		counsel.setRegNo(TsfSession.getInfo().getCustNo());
-		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
-		counselDao.createGoodsQna(counsel);
-	}
-
-	/**
-	 * 상품문의(총,답변완료,처리중) 건수
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	public Counsel getGoodsQnaCountInfo() {
-		Counsel counsel = new Counsel();
-		counsel.setCustNo(TsfSession.getInfo().getCustNo());
-		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
-		return counselDao.getGoodsQnaCountInfo(counsel);
-	}
-
-	/**
-	 * 상품문의 총건수
-	 * @param counsel - 상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	public int getGoodsQnaTotalCount(Counsel counsel) {
-		return counselDao.getGoodsQnaTotalCount(counsel);
-	}
-
-	/**
-	 * 상품문의 목록
-	 * @param counsel -상담정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 24
-	 */
-	public Collection<Counsel> getGoodsQnaList(Counsel counsel) {
-		return counselDao.getGoodsQnaList(counsel);
-	}
-
-	/**
-	 * 상품문의 삭제
-	 * @param counsel - 상담정보
-	 * @author gagamel
-	 * @since 2020. 12. 28
-	 */
-	@Transactional("shopTxnManager")
-	public void deleteGoodsQna(Counsel counsel) {
-		counsel.setCustNo(TsfSession.getInfo().getCustNo());
-		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
-		int result = counselDao.deleteGoodsQna(counsel);
-		if (result == 0) {
-			throw new IllegalStateException("답변이 완료되어 삭제할 수 없습니다.");
-		}
-	}
-
-}
+package com.style24.front.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.core.support.env.TscConstants;
+import com.style24.front.biz.dao.TsfCounselDao;
+import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.domain.Counsel;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 상담(1:1문의) Service
+ *
+ * @author gagamel
+ * @since 2020. 12. 28
+ */
+@Service
+@Slf4j
+public class TsfCounselService {
+
+	@Autowired
+	private TsfCounselDao counselDao;
+
+	/**
+	 * 1:1문의 생성
+	 * @param counsel -상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	@Transactional("shopTxnManager")
+	public void createOneToOneQna(Counsel counsel) {
+		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
+		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setEmail(TsfSession.getInfo().getEmail());
+		counsel.setRegNo(TsfSession.getInfo().getCustNo());
+		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
+		counselDao.createOneToOneQna(counsel);
+	}
+
+	/**
+	 * 1:1문의(총,답변완료,처리중) 건수
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	public Counsel getOneToOneQnaCountInfo() {
+		Counsel counsel = new Counsel();
+		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
+		return counselDao.getOneToOneQnaCountInfo(counsel);
+	}
+
+	/**
+	 * 1:1문의 총건수
+	 * @param counsel - 상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	public int getOneToOneQnaTotalCount(Counsel counsel) {
+		return counselDao.getOneToOneQnaTotalCount(counsel);
+	}
+
+	/**
+	 * 1:1문의 목록
+	 * @param counsel -상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	public Collection<Counsel> getOneToOneQnaList(Counsel counsel) {
+		return counselDao.getOneToOneQnaList(counsel);
+	}
+
+	/**
+	 * 1:1문의 삭제
+	 * @param counsel - 상담정보
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	@Transactional("shopTxnManager")
+	public void deleteOneToOneQna(Counsel counsel) {
+		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
+		int result = counselDao.deleteOneToOneQna(counsel);
+		if (result == 0) {
+			throw new IllegalStateException("답변이 완료되어 삭제할 수 없습니다.");
+		}
+	}
+
+	/**
+	 * 1:1문의 상세
+	 * @param counselSq - 상담일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 24
+	 */
+	public Counsel getOneToOneQna(Integer counselSq) {
+		Counsel counsel = new Counsel();
+		counsel.setCounselSq(counselSq);
+		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
+		return counselDao.getOneToOneQna(counsel);
+	}
+
+	/**
+	 * 1:1문의 수정
+	 * @param counsel - 상담정보
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	@Transactional("shopTxnManager")
+	public void updateOneToOneQna(Counsel counsel) {
+		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
+		int result = counselDao.updateOneToOneQna(counsel);
+		if (result == 0) {
+			throw new IllegalStateException("답변이 완료되어 수정할 수 없습니다.");
+		}
+	}
+
+	/**
+	 * 1:1문의 이미지 삭제
+	 * @param counsel - 상담정보
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	@Transactional("shopTxnManager")
+	public void deleteOneToOneQnaImage(Counsel counsel) {
+		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
+		int result = counselDao.deleteOneToOneQnaImage(counsel);
+		if (result == 0) {
+			throw new IllegalStateException("답변이 완료되어 삭제할 수 없습니다.");
+		}
+	}
+
+	/**
+	 * 상품문의 생성
+	 * @param counsel -상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	@Transactional("shopTxnManager")
+	public void createGoodsQna(Counsel counsel) {
+		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
+		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setEmail(TsfSession.getInfo().getEmail());
+		counsel.setRegNo(TsfSession.getInfo().getCustNo());
+		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
+		counselDao.createGoodsQna(counsel);
+	}
+
+	/**
+	 * 상품문의(총,답변완료,처리중) 건수
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	public Counsel getGoodsQnaCountInfo() {
+		Counsel counsel = new Counsel();
+		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setSiteCd(TscConstants.Site.STYLE24.value());
+		return counselDao.getGoodsQnaCountInfo(counsel);
+	}
+
+	/**
+	 * 상품문의 총건수
+	 * @param counsel - 상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	public int getGoodsQnaTotalCount(Counsel counsel) {
+		return counselDao.getGoodsQnaTotalCount(counsel);
+	}
+
+	/**
+	 * 상품문의 목록
+	 * @param counsel -상담정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 24
+	 */
+	public Collection<Counsel> getGoodsQnaList(Counsel counsel) {
+		return counselDao.getGoodsQnaList(counsel);
+	}
+
+	/**
+	 * 상품문의 삭제
+	 * @param counsel - 상담정보
+	 * @author gagamel
+	 * @since 2020. 12. 28
+	 */
+	@Transactional("shopTxnManager")
+	public void deleteGoodsQna(Counsel counsel) {
+		counsel.setCustNo(TsfSession.getInfo().getCustNo());
+		counsel.setUpdNo(TsfSession.getInfo().getCustNo());
+		int result = counselDao.deleteGoodsQna(counsel);
+		if (result == 0) {
+			throw new IllegalStateException("답변이 완료되어 삭제할 수 없습니다.");
+		}
+	}
+
+}

+ 23 - 23
style24.front/src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -1,23 +1,23 @@
-package com.style24.front.biz.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.style24.front.biz.dao.TsfCouponDao;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 쿠폰 Service
- *
- * @author gagamel
- * @since 2020. 12. 29
- */
-@Service
-@Slf4j
-public class TsfCouponService {
-
-	@Autowired
-	private TsfCouponDao couponDao;
-
-}
+package com.style24.front.biz.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.style24.front.biz.dao.TsfCouponDao;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 쿠폰 Service
+ *
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@Service
+@Slf4j
+public class TsfCouponService {
+
+	@Autowired
+	private TsfCouponDao couponDao;
+
+}

+ 23 - 23
style24.front/src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -1,23 +1,23 @@
-package com.style24.front.biz.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.style24.front.biz.dao.TsfCustomerDao;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 고객(회원) Service
- *
- * @author gagamel
- * @since 2020. 12. 29
- */
-@Service
-@Slf4j
-public class TsfCustomerService {
-
-	@Autowired
-	private TsfCustomerDao customerDao;
-
-}
+package com.style24.front.biz.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.style24.front.biz.dao.TsfCustomerDao;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 고객(회원) Service
+ *
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@Service
+@Slf4j
+public class TsfCustomerService {
+
+	@Autowired
+	private TsfCustomerDao customerDao;
+
+}

+ 23 - 23
style24.front/src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -1,23 +1,23 @@
-package com.style24.front.biz.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.style24.front.biz.dao.TsfDisplayDao;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 전시 Service
- *
- * @author gagamel
- * @since 2020. 12. 29
- */
-@Service
-@Slf4j
-public class TsfDisplayService {
-
-	@Autowired
-	private TsfDisplayDao displayDao;
-
-}
+package com.style24.front.biz.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.style24.front.biz.dao.TsfDisplayDao;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 전시 Service
+ *
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@Service
+@Slf4j
+public class TsfDisplayService {
+
+	@Autowired
+	private TsfDisplayDao displayDao;
+
+}

+ 84 - 84
style24.front/src/main/java/com/style24/front/biz/service/TsfFaqService.java

@@ -1,84 +1,84 @@
-package com.style24.front.biz.service;
-
-import java.util.Collection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.style24.front.biz.dao.TsfFaqDao;
-import com.style24.persistence.domain.Faq;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * FAQ Service
- * 
- * @author gagamel
- * @since 2020. 12. 23
- */
-@Service
-@Slf4j
-public class TsfFaqService {
-
-	@Autowired
-	private TsfFaqDao faqDao;
-
-	/**
-	 * FAQ 자주 묻는 질문 목록 (10개)
-	 * @param siteCd - 사이트코드
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	public Collection<Faq> getFaqLikesList(String siteCd) {
-		return faqDao.getFaqLikesList(siteCd);
-	}
-
-	/**
-	 * FAQ 총건수
-	 * @param faq - FAQ 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	public int getFaqTotalCount(Faq faq) {
-		return faqDao.getFaqTotalCount(faq);
-	}
-
-	/**
-	 * FAQ 목록
-	 * @param faq - FAQ 정보
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	public Collection<Faq> getFaqList(Faq faq) {
-		return faqDao.getFaqList(faq);
-	}
-
-	/**
-	 * FAQ 조회수 Update
-	 * @param faqSq - FAQ일련번호
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	@Transactional("shopTxnManager")
-	public void updateFaqReadCount(Integer faqSq) {
-		faqDao.updateFaqReadCount(faqSq);
-	}
-
-	/**
-	 * FAQ 상세
-	 * @param faqSq - FAQ일련번호
-	 * @return
-	 * @author gagamel
-	 * @since 2020. 12. 23
-	 */
-	public Faq getFaq(Integer faqSq) {
-		this.updateFaqReadCount(faqSq);
-		return faqDao.getFaq(faqSq);
-	}
-
-}
+package com.style24.front.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.front.biz.dao.TsfFaqDao;
+import com.style24.persistence.domain.Faq;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * FAQ Service
+ * 
+ * @author gagamel
+ * @since 2020. 12. 23
+ */
+@Service
+@Slf4j
+public class TsfFaqService {
+
+	@Autowired
+	private TsfFaqDao faqDao;
+
+	/**
+	 * FAQ 자주 묻는 질문 목록 (10개)
+	 * @param siteCd - 사이트코드
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	public Collection<Faq> getFaqLikesList(String siteCd) {
+		return faqDao.getFaqLikesList(siteCd);
+	}
+
+	/**
+	 * FAQ 총건수
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	public int getFaqTotalCount(Faq faq) {
+		return faqDao.getFaqTotalCount(faq);
+	}
+
+	/**
+	 * FAQ 목록
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	public Collection<Faq> getFaqList(Faq faq) {
+		return faqDao.getFaqList(faq);
+	}
+
+	/**
+	 * FAQ 조회수 Update
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	@Transactional("shopTxnManager")
+	public void updateFaqReadCount(Integer faqSq) {
+		faqDao.updateFaqReadCount(faqSq);
+	}
+
+	/**
+	 * FAQ 상세
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	public Faq getFaq(Integer faqSq) {
+		this.updateFaqReadCount(faqSq);
+		return faqDao.getFaq(faqSq);
+	}
+
+}

+ 23 - 23
style24.front/src/main/java/com/style24/front/biz/service/TsfGiftcardService.java

@@ -1,23 +1,23 @@
-package com.style24.front.biz.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.style24.front.biz.dao.TsfGiftcardDao;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 상품권 Service
- *
- * @author gagamel
- * @since 2020. 12. 29
- */
-@Service
-@Slf4j
-public class TsfGiftcardService {
-
-	@Autowired
-	private TsfGiftcardDao giftcardDao;
-
-}
+package com.style24.front.biz.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.style24.front.biz.dao.TsfGiftcardDao;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 상품권 Service
+ *
+ * @author gagamel
+ * @since 2020. 12. 29
+ */
+@Service
+@Slf4j
+public class TsfGiftcardService {
+
+	@Autowired
+	private TsfGiftcardDao giftcardDao;
+
+}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio