merge master into develop - CscListRForm.jsp FAQ 아코디언 버그 수정

This commit is contained in:
jilee4unity
2026-05-28 23:34:06 +09:00
7250 changed files with 570509 additions and 25 deletions

View File

@@ -0,0 +1,29 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE9jAoBgoqhkiG9w0BDAEDMBoEFFvH6G3SXuphZHSeeCUXxFRrK+EYAgIIAASC
BMghqwqvkan1kJMkUHnr4qhOKVSHuKgYDYh1rOQDwXS0Ln78pEug3l+2ox5TgAHp
RscUP84VVYRt5RnLP7VzsopYEHUsbD5onrC2DEVelV2imToKy91DntXzmJ54xGUL
q8vYACGStPsvZGvYlmfkCpmz0fYW8pZfPddCS6QRNBlalWHomN/E3dT7XUmudTGa
GJTQRtCDbnSdXkvQv2BLx7Y+lwnDo591MoqnbZ+gwj+a8aGKQF58y4HwjNzR7DTv
fe4pCrMNUo3i5SvAajlALuhKBxL/wRvStpe8xF8B+YZai0RU5wSgEd/+OS5uz/wU
4UTPHE2RrP6yDFacKRKHx76JTcxHHfGbjB8Wd73yL20wW11/Sh7To/HkiDJhQD1M
QP2d4cmFKQoKL9XiHYH9igBYqmtTkupFmaine+gRqKQy65RhHAVZYoX074VNL/eI
eMH+QDv/7Yd1SwXytqM12OSdCQCfETbDDNIMkLkny+ku9SY/1cEWB6Is0IfMz/b2
FKZt1zTWIwrqbRP91CCiEBekWs2JScnQ1scwIMg6stCF8c4ORz14Apc/wLdGN3MY
nx0BuJpL5ACSlMl6KueaE26MHHn6KaSV2SHCO6xH/YXLT+Mc5gWi5ax4+GrD9k/3
/bP/ie8EZFpO7PNyvYvJVhT2CZPWZiyBX43mxqqHp9j7EyXEdlI2qHxWHfCTSrix
2jVb2HkjCsIdOTAd7BT6bCrCVww07V6Q5QYwi4+wLd8KK92850sKxKZi39zrQdvr
HktG8qC2sFMNCI8AHcEQ34XkC+GfgFJdJVlmddVAkrW61X/pnkk3IOmOvIW7y30M
2lFpNMzDLmwEFfxMQC1HBev1FLRvs0LHEatv+v8gvRw7GdK0C5GsemStQJCuxqTT
RjMdyCXOiS9q1hF8AfTuWWFiSVi8jLe4HBAjAr8uGBcTlb7dZEd3GaugFSKjOFuR
S8LGAOf6ZzCjm4K7zJ2k56zolPc7azMHLVWEnYMuDHEJH7HY+zyumOCROil2nab8
ngQmeWwviRM283CwjmikZUdUlWYg9eOVZHYPThDSEoCiOn7XwgT1LZzTo3o9eiBJ
8/VPTJ4xnfaL0/9/GUDLyL6NM6Z98SwySutqWWT4QXpTEVacu736m7+OwtOTs/gZ
do1uUXj1HnEdgBRhoW+Y/7n2aNkUm9d5tGKLMzfvmttNiLgDbN4y7fL8wtHLwOJy
nz8cQWBOOSBp1Kem+7Y679FsNis7AabD28VajhrndnWZd0KSPF2NPOFoBGxGo0lm
JJlTev5FBblIWCC9sbIkNQSeGhJoeS0pWbuOKFqXLC80nXBV3047b526ih/0ZsfP
Ztn6g62d2aOUkC3UFgpLqRgzOmjUfGjmXuCe9WoZvKIrmu2ZNxgYZc6sgyCt0HWZ
ufzz+ZUhE27fBd3fEElc2nutaZ3cNHWFldeVeFO2UzGFrUbqN9F9/IoJFRNMVbGw
PlBnHdlZ5C1ct17WW+SeWKwuDJmUPOEcPos+1V5g3HdrvkiTI46cggg6rbhmiFjg
X//1O+m2cpj7v4IZN1YNyle+zw3eSThES84olm1pdZWEl60Ls8suzWi0IldMEv88
mJEySEAzL/hYgScJTHV/d6JDR02ERNGaaig=
-----END ENCRYPTED PRIVATE KEY-----

View File

@@ -0,0 +1,457 @@
server:
port: 18500
error:
whitelabel:
enabled: false
management:
endpoints:
web:
exposure:
include: refresh
jwt:
access:
secretKey: YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ==YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ== # BASE64 encode(alleyslabTestBase64EncodeJwtSecretkey) *2
max-age: 3600 # 1시간 (초)
refresh:
secretKey: YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ==YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ== # BASE64 encode(alleyslabTestBase64EncodeJwtSecretkey) *2
max-age: 86400 # 24시간 (초)
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://172.31.21.12:18320/realms
client:
registration:
kakao:
client-id: babe84df407dcf2d58624fcf164b505e
client-secret: zl81Pb6a1hlEbrzI0PM5CnbSJa3tEz6s
client-name: Kakao
authorization-grant-type: authorization_code
client-authentication-method: client_secret_post
redirect-uri: "{baseUrl}/login/oauth2/code/kakao"
scope:
- profile_nickname,account_email,gender,birthyear,phone_number,name
naver:
provider: naver
client-id: YnCTvohpxT2LFv7DqNAG
client-secret: UmOZn0YHiw
scope: name,email,gender,mobile
client-name: Naver
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/naver"
provider:
kakao:
authorization-uri: https://kauth.kakao.com/oauth/authorize
token-uri: https://kauth.kakao.com/oauth/token
user-info-uri: https://kapi.kakao.com/v2/user/me
user-name-attribute: id
naver:
authorization-uri: https://nid.naver.com/oauth2.0/authorize
token-uri: https://nid.naver.com/oauth2.0/token
user-info-uri: https://openapi.naver.com/v1/nid/me
user-name-attribute: response
datasource:
gcone:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://115.68.231.30:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
username: sakeone
password: dnlfxjtm13@$
minimumIdle: 1
maximumPoolSize: 10
idleTimeout: 30000 #30초
maxLifetime: 1800000 #30분
connectionTimeout: 30000
poolName: SakeDevPool
sure:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://115.68.231.30:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
username: sakeone
password: dnlfxjtm13@$
minimumIdle: 1
maximumPoolSize: 10
idleTimeout: 30000 #30초
maxLifetime: 1800000 #30분
connectionTimeout: 30000
poolName: SureDevPool
jpa:
hibernate:
ddl-auto: update
show-sql: true
servlet:
multipart:
max-file-size: 15MB
max-request-size: -1
mybatis:
mapper-locations: classpath:/mybatis/xml/mapper/**/*.xml
config-location: classpath:/mybatis/xml/config/mapper-config.xml
logging:
level:
org.springframework.web: debug
org.springframework.security: debug
org.springframework.security.oauth2: debug
com.wb.domainserver: debug
root: info
sopmalfo:
common:
fileupload:
uploaddirs:
goods:
doc: /data/gcone/docFile
web: /data/gcone/webFile
phar: /data/gcone/phFile
rtrn: /data/gcone/rtrnFile
extensions:
images: .gif,.jpg,.jpeg,.png
cdnurl: https://19d28cf7178139ad.kinxzone.com
pagination:
page-unit: 10
page-size: 10
#kakao js test key
kakao:
keys:
CH: "b3f10109439ca225a9bda684e358a9b1"
TZ: "b3f10109439ca225a9bda684e358a9b1"
LF: "b3f10109439ca225a9bda684e358a9b1"
NC: "b3f10109439ca225a9bda684e358a9b1"
PL: "b3f10109439ca225a9bda684e358a9b1"
DT: "b3f10109439ca225a9bda684e358a9b1"
NB: "b3f10109439ca225a9bda684e358a9b1"
AF: "b3f10109439ca225a9bda684e358a9b1"
BD: "b3f10109439ca225a9bda684e358a9b1"
DL: "b3f10109439ca225a9bda684e358a9b1"
JM: "b3f10109439ca225a9bda684e358a9b1"
LR: "d1fa06d7edfb5178293ce9718cc82f5b"
#슈어엠 법인별 정보
surem:
sopmal:
#참다한홍삼
CH:
code: GC
data: (주)지씨바이오
erpcode: 01
userid: gcbio02
deptcode: KT-26E-ZS
yellowkey: cd51453ccf40ef714cadd5a7dd0506cd7340a986
#더작
TZ:
code: TB
data: (주)트래디스바이오
erpcode: 02
userid: tradithbio02
deptcode: FO-5SP-HZ
yellowkey: c3218d5cf0e60ffd7ac2e0ba3674f3d29acd258c
#라이프케어
LF:
code: TB
data: (주)트래디스바이오
erpcode: 02
userid: tradithbio02
deptcode: FO-5SP-HZ
yellowkey: 8e5470e841a36882e1a3db87e6a791bcfed5c8d2
#닥터린
DT:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: 43dcab2777006643bfac640186cfaeebe97c7aff
#자담유
NB:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: ecca3323e0aec27b514429c1934f50468b8b7cf2
#올프리
AF:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: b813ceaa0837e5e4b5e0a7b8b17524138299d798
#뉴트리코어
NC:
code: SL
data: (주)에스엘바이오텍
erpcode: 03
userid: slbiotech02
deptcode: AR-TYO-OK
yellowkey: 8e5470e841a36882e1a3db87e6a791bcfed5c8d2
#프로스랩
PL:
code: NP
data: (주)네이처풀
erpcode: 04
userid: naturefull02
deptcode: W1-R3C-3K
yellowkey: 31166680c84494e86ffcb34668bba26398e7dd1e
#바디닥터스
BD:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: e7fbc154eb51da9bc99df26f8a5618377b854c8c
#디디오랩
DL:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: 94fd52576d658b42320ad2083e73e9ccf5ee24d1
#저스트마이데이
JM:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: ccf01eaa7ea9edc95c52178282cfb60b04f1520f
IS:
code: IS
data: (주)아이엔에스 소프트
userid: inssoft02
deptcode: R8-S2A-JC
#POS 마일리지 적립 정보
pos-mileage:
NC:
point-except-arr: E07-000954,E07-000955,E7T-000509,E7T-000510,E7T-000725,E7T-000726,E7T-000734,E7T-000735,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,E7T-012:0.01,EX3-004:0.03,EX3-005:0.03
point-use-min: 1
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
ext-except-arr: E07-001258, E07-001259, E07-001260, E7T-000943, E7T-000944, E7T-000945, EX2-000904, EX2-000912, EX2-000913, EX3-000950, EX3-000955, EX3-000956
ext-goods-arr:
fix-point-arr:
E07-002045: 30000
E7T-001579: 30000
EX3-001509: 30000
E07-002046: 20000
E7T-001580: 20000
EX3-001511: 20000
E07-002047: 5000
E7T-001581: 5000
EX3-001512: 5000
E07-002048: 20000
E7T-001582: 20000
EX3-001510: 20000
ext-coupon-arr:
E07: "063"
E7T: "035"
EX3: "031"
CH:
point-except-arr: E07-000484,E07-000954,E07-000955,E07-000975,E07-000976,E07-000977,E07-000979,E7T-000734,E7T-000735,E7T-000725,E7T-000726
point-rate: 0.01
point-rate-arr: E07-001:0.03,E07-002:0.03,E07-019:0.01,E07-020:0.01,EX2-004:0.03,EX2-005:0.03,EX2-013:0.01
point-use-min: 1
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
ext-except-arr: E07-001258, E07-001259, E07-001260, E7T-000943, E7T-000944, E7T-000945, EX2-000904, EX2-000912, EX2-000913, EX3-000950, EX3-000955, EX3-000956
ext-goods-arr:
fix-point-arr:
E07-002045: 30000
E7T-001579: 30000
EX3-001509: 30000
E07-002046: 20000
E7T-001580: 20000
EX3-001511: 20000
E07-002047: 5000
E7T-001581: 5000
EX3-001512: 5000
E07-002048: 20000
E7T-001582: 20000
EX3-001510: 20000
ext-coupon-arr:
E07: "063"
E7T: "035"
EX3: "031"
PL:
point-except-arr: E07-000484,E7T-000509,E7T-000510,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,EX3-004:0.04,EX3-005:0.03
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
TZ:
point-rate: 0.01
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
NB:
point-except-arr: E07-000484,E7T-000509,E7T-000510,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,EX3-004:0.04,EX3-005:0.03
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
DT:
point-except-arr: E07-000484,E7T-000509,E7T-000510,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,EX3-004:0.04,EX3-005:0.03
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
AF:
point-rate: 0.02
BD:
point-rate: 0.01
JM:
point-rate: 0.05
LF:
point-rate: 0.01
DL:
point-rate: 0.01
OY:
point-rate: 0.01
VN:
point-rate: 0.01
CO:
point-rate: 0.01
NC2:
point-rate: 0.01
PL2:
point-rate: 0.01
CN:
point-rate: 0.01
SC:
point-rate: 0.01
ext-event-dv: brand
ext-event-stdt: 2024-04-26
ext-event-enddt: 2024-05-20
ext-event-except-sopmal: CH,TZ
ext-event-sopmal: NC,PL
mngrfo:
common:
board:
nc:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
ch:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
dl:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
fileupload:
uploaddirs:
goods: C:/file/temp
doc: /data/gcone/docFile
web: /data/gcone/webFile
extensions:
images: .gif,.jpg,.jpeg,.png
cdnurl: https://19d28cf7178139ad.kinxzone.com
subsvc:
dft-goods-optn-innb: 5
secret:
key: 1df5be2f7e90ae36
aciexpress:
apikey: DC94F29AFD5399F54AAE7FAA46045B65
host:
img: https://19d28cf7178139ad.kinxzone.com
naverpay:
order:
test-url: https://test-order.pay.naver.com
test-mobile-Url: https://test-m.pay.naver.com
real-url: https://order.pay.naver.com
real-mobile-Url: https://m.pay.naver.com
zzim:
test-url: https://test-pay.naver.com
real-url: https://pay.naver.com
mail:
host: 10.2.1.76
port: 587
username: custom@sake1jan.com
password: mail13@$
connectiontimeout: 10000
timeout: 10000
writetimeout: 10000
#이지웰페이 정보
easywell:
applc-hdqrtrs : E07, E7T #이지웰페이 적용 본부
server :
nc: #개발서버 (NC)
ip : 211.180.161.102
port : 3712
company-code : slbiotech #회사코드(띄어쓰기(1) 포함 10자)
brand-code : 10067521 #브랜드코드(띄어쓰기(2) 포함 10자)
cipher : AES/CBC/PKCS5Padding #블록 암호화 알고리즘 (as-is AES-128-CBC 동일)
key : 38a05be31b054a06 #암호화 키
iv : 38a05be31b054a06 # 초기화 벡터
other: #개발서버(기타 브랜드)
ip : 211.180.161.102
port : 3711
company-code : gcbio #회사코드(띄어쓰기(5) 포함 10자)
brand-code : "0012345" #브랜드코드(띄어쓰기(3) 포함 10자)
cipher : AES/CBC/PKCS5Padding #블록 암호화 알고리즘 (as-is AES-128-CBC 동일)
key : f0c4c9c0a6154552 #암호화 키
iv : f0c4c9c0a6154552 # 초기화 벡터
#뱅크다
bankda:
serviceType : premium
id: inssoft
pw: ITteam1!
#default css
css-cours : css/theme/themeAF.css
#선물하기 URL
presenturl : devsvc.soju1sake1.com
# 출고 택배사 구분 EXPORT, (택배사 구분코드 HDRYCPN)
# 송장번호 %INVCNB% 치환
# 한진택배는 운송번호 바로 조회 서비스 미제공함
ordr:
export:
hdrycpn:
code0: https://trace.cjlogistics.com/next/tracking.html?wblNo=%INVCNB%
code7: https://service.epost.go.kr/trace.RetrieveDomRigiTraceList.comm?sid1=%INVCNB%&displayHeader=
code9: https://www.hanjin.com/kor/CMS/DeliveryMgr/WaybillSch.do?mCode=MN038
code10: https://www.lotteglogis.com/home/reservation/tracking/linkView?InvNo=%INVCNB%
code29: https://ylis.yongmalogis.co.kr/cmm/modalDeliveryCargoTrace.do?ordno=%INVCNB%
# 서치어드바이저 소유권 코드
meta-content:
google:
LR: ""
naver:
LR: "5fcdb284f18ca08cf86af214a01998990c008e84"
facebook:
LR: ""
# 결제 api 사용 암호 key
api:
AES_KEY: "aMZV6RjCtE1iyuH8WyE+Hg=="
DATA_ENCRYPT_AES_KEY: "Z8zKbHyMKn+iwD3O0PLT9g=="
currency-unit:
default: 円
JP: 円
KR: 원

View File

@@ -0,0 +1,457 @@
server:
port: 18500
error:
whitelabel:
enabled: false
management:
endpoints:
web:
exposure:
include: refresh
jwt:
access:
secretKey: YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ==YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ== # BASE64 encode(alleyslabTestBase64EncodeJwtSecretkey) *2
max-age: 3600 # 1시간 (초)
refresh:
secretKey: YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ==YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ== # BASE64 encode(alleyslabTestBase64EncodeJwtSecretkey) *2
max-age: 86400 # 24시간 (초)
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://172.31.21.12:18320/realms
client:
registration:
kakao:
client-id: babe84df407dcf2d58624fcf164b505e
client-secret: zl81Pb6a1hlEbrzI0PM5CnbSJa3tEz6s
client-name: Kakao
authorization-grant-type: authorization_code
client-authentication-method: client_secret_post
redirect-uri: "{baseUrl}/login/oauth2/code/kakao"
scope:
- profile_nickname,account_email,gender,birthyear,phone_number,name
naver:
provider: naver
client-id: YnCTvohpxT2LFv7DqNAG
client-secret: UmOZn0YHiw
scope: name,email,gender,mobile
client-name: Naver
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/naver"
provider:
kakao:
authorization-uri: https://kauth.kakao.com/oauth/authorize
token-uri: https://kauth.kakao.com/oauth/token
user-info-uri: https://kapi.kakao.com/v2/user/me
user-name-attribute: id
naver:
authorization-uri: https://nid.naver.com/oauth2.0/authorize
token-uri: https://nid.naver.com/oauth2.0/token
user-info-uri: https://openapi.naver.com/v1/nid/me
user-name-attribute: response
datasource:
gcone:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://115.68.231.30:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
username: sakeone
password: dnlfxjtm13@$
minimumIdle: 1
maximumPoolSize: 10
idleTimeout: 30000 #30초
maxLifetime: 1800000 #30분
connectionTimeout: 30000
poolName: SakeDevPool
sure:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://115.68.231.30:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
username: sakeone
password: dnlfxjtm13@$
minimumIdle: 1
maximumPoolSize: 10
idleTimeout: 30000 #30초
maxLifetime: 1800000 #30분
connectionTimeout: 30000
poolName: SureDevPool
jpa:
hibernate:
ddl-auto: update
show-sql: true
servlet:
multipart:
max-file-size: 15MB
max-request-size: -1
mybatis:
mapper-locations: classpath:/mybatis/xml/mapper/**/*.xml
config-location: classpath:/mybatis/xml/config/mapper-config.xml
logging:
level:
org.springframework.web: debug
org.springframework.security: debug
org.springframework.security.oauth2: debug
com.wb.domainserver: debug
root: info
sopmalfo:
common:
fileupload:
uploaddirs:
goods:
doc: /data/gcone/docFile
web: /data/gcone/webFile
phar: /data/gcone/phFile
rtrn: /data/gcone/rtrnFile
extensions:
images: .gif,.jpg,.jpeg,.png
cdnurl: https://19d28cf7178139ad.kinxzone.com
pagination:
page-unit: 10
page-size: 10
#kakao js test key
kakao:
keys:
CH: "b3f10109439ca225a9bda684e358a9b1"
TZ: "b3f10109439ca225a9bda684e358a9b1"
LF: "b3f10109439ca225a9bda684e358a9b1"
NC: "b3f10109439ca225a9bda684e358a9b1"
PL: "b3f10109439ca225a9bda684e358a9b1"
DT: "b3f10109439ca225a9bda684e358a9b1"
NB: "b3f10109439ca225a9bda684e358a9b1"
AF: "b3f10109439ca225a9bda684e358a9b1"
BD: "b3f10109439ca225a9bda684e358a9b1"
DL: "b3f10109439ca225a9bda684e358a9b1"
JM: "b3f10109439ca225a9bda684e358a9b1"
LR: "d1fa06d7edfb5178293ce9718cc82f5b"
#슈어엠 법인별 정보
surem:
sopmal:
#참다한홍삼
CH:
code: GC
data: (주)지씨바이오
erpcode: 01
userid: gcbio02
deptcode: KT-26E-ZS
yellowkey: cd51453ccf40ef714cadd5a7dd0506cd7340a986
#더작
TZ:
code: TB
data: (주)트래디스바이오
erpcode: 02
userid: tradithbio02
deptcode: FO-5SP-HZ
yellowkey: c3218d5cf0e60ffd7ac2e0ba3674f3d29acd258c
#라이프케어
LF:
code: TB
data: (주)트래디스바이오
erpcode: 02
userid: tradithbio02
deptcode: FO-5SP-HZ
yellowkey: 8e5470e841a36882e1a3db87e6a791bcfed5c8d2
#닥터린
DT:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: 43dcab2777006643bfac640186cfaeebe97c7aff
#자담유
NB:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: ecca3323e0aec27b514429c1934f50468b8b7cf2
#올프리
AF:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: b813ceaa0837e5e4b5e0a7b8b17524138299d798
#뉴트리코어
NC:
code: SL
data: (주)에스엘바이오텍
erpcode: 03
userid: slbiotech02
deptcode: AR-TYO-OK
yellowkey: 8e5470e841a36882e1a3db87e6a791bcfed5c8d2
#프로스랩
PL:
code: NP
data: (주)네이처풀
erpcode: 04
userid: naturefull02
deptcode: W1-R3C-3K
yellowkey: 31166680c84494e86ffcb34668bba26398e7dd1e
#바디닥터스
BD:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: e7fbc154eb51da9bc99df26f8a5618377b854c8c
#디디오랩
DL:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: 94fd52576d658b42320ad2083e73e9ccf5ee24d1
#저스트마이데이
JM:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: ccf01eaa7ea9edc95c52178282cfb60b04f1520f
IS:
code: IS
data: (주)아이엔에스 소프트
userid: inssoft02
deptcode: R8-S2A-JC
#POS 마일리지 적립 정보
pos-mileage:
NC:
point-except-arr: E07-000954,E07-000955,E7T-000509,E7T-000510,E7T-000725,E7T-000726,E7T-000734,E7T-000735,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,E7T-012:0.01,EX3-004:0.03,EX3-005:0.03
point-use-min: 1
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
ext-except-arr: E07-001258, E07-001259, E07-001260, E7T-000943, E7T-000944, E7T-000945, EX2-000904, EX2-000912, EX2-000913, EX3-000950, EX3-000955, EX3-000956
ext-goods-arr:
fix-point-arr:
E07-002045: 30000
E7T-001579: 30000
EX3-001509: 30000
E07-002046: 20000
E7T-001580: 20000
EX3-001511: 20000
E07-002047: 5000
E7T-001581: 5000
EX3-001512: 5000
E07-002048: 20000
E7T-001582: 20000
EX3-001510: 20000
ext-coupon-arr:
E07: "063"
E7T: "035"
EX3: "031"
CH:
point-except-arr: E07-000484,E07-000954,E07-000955,E07-000975,E07-000976,E07-000977,E07-000979,E7T-000734,E7T-000735,E7T-000725,E7T-000726
point-rate: 0.01
point-rate-arr: E07-001:0.03,E07-002:0.03,E07-019:0.01,E07-020:0.01,EX2-004:0.03,EX2-005:0.03,EX2-013:0.01
point-use-min: 1
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
ext-except-arr: E07-001258, E07-001259, E07-001260, E7T-000943, E7T-000944, E7T-000945, EX2-000904, EX2-000912, EX2-000913, EX3-000950, EX3-000955, EX3-000956
ext-goods-arr:
fix-point-arr:
E07-002045: 30000
E7T-001579: 30000
EX3-001509: 30000
E07-002046: 20000
E7T-001580: 20000
EX3-001511: 20000
E07-002047: 5000
E7T-001581: 5000
EX3-001512: 5000
E07-002048: 20000
E7T-001582: 20000
EX3-001510: 20000
ext-coupon-arr:
E07: "063"
E7T: "035"
EX3: "031"
PL:
point-except-arr: E07-000484,E7T-000509,E7T-000510,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,EX3-004:0.04,EX3-005:0.03
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
TZ:
point-rate: 0.01
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
NB:
point-except-arr: E07-000484,E7T-000509,E7T-000510,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,EX3-004:0.04,EX3-005:0.03
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
DT:
point-except-arr: E07-000484,E7T-000509,E7T-000510,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,EX3-004:0.04,EX3-005:0.03
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
AF:
point-rate: 0.02
BD:
point-rate: 0.01
JM:
point-rate: 0.05
LF:
point-rate: 0.01
DL:
point-rate: 0.01
OY:
point-rate: 0.01
VN:
point-rate: 0.01
CO:
point-rate: 0.01
NC2:
point-rate: 0.01
PL2:
point-rate: 0.01
CN:
point-rate: 0.01
SC:
point-rate: 0.01
ext-event-dv: brand
ext-event-stdt: 2024-04-26
ext-event-enddt: 2024-05-20
ext-event-except-sopmal: CH,TZ
ext-event-sopmal: NC,PL
mngrfo:
common:
board:
nc:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
ch:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
dl:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
fileupload:
uploaddirs:
goods: C:/file/temp
doc: /data/gcone/docFile
web: /data/gcone/webFile
extensions:
images: .gif,.jpg,.jpeg,.png
cdnurl: https://19d28cf7178139ad.kinxzone.com
# upurl: https://www.soju1sake1.com
subsvc:
dft-goods-optn-innb: 5
secret:
key: 1df5be2f7e90ae36
aciexpress:
apikey: DC94F29AFD5399F54AAE7FAA46045B65
host:
img: https://19d28cf7178139ad.kinxzone.com
naverpay:
order:
test-url: https://test-order.pay.naver.com
test-mobile-Url: https://test-m.pay.naver.com
real-url: https://order.pay.naver.com
real-mobile-Url: https://m.pay.naver.com
zzim:
test-url: https://test-pay.naver.com
real-url: https://pay.naver.com
mail:
host: 10.2.1.76
port: 587
username: custom@sake1jan.com
password: mail13@$
connectiontimeout: 10000
timeout: 10000
writetimeout: 10000
#이지웰페이 정보
easywell:
applc-hdqrtrs : E07, E7T #이지웰페이 적용 본부
server :
nc: #개발서버 (NC)
ip : 211.180.161.102
port : 3712
company-code : slbiotech #회사코드(띄어쓰기(1) 포함 10자)
brand-code : 10067521 #브랜드코드(띄어쓰기(2) 포함 10자)
cipher : AES/CBC/PKCS5Padding #블록 암호화 알고리즘 (as-is AES-128-CBC 동일)
key : 38a05be31b054a06 #암호화 키
iv : 38a05be31b054a06 # 초기화 벡터
other: #개발서버(기타 브랜드)
ip : 211.180.161.102
port : 3711
company-code : gcbio #회사코드(띄어쓰기(5) 포함 10자)
brand-code : "0012345" #브랜드코드(띄어쓰기(3) 포함 10자)
cipher : AES/CBC/PKCS5Padding #블록 암호화 알고리즘 (as-is AES-128-CBC 동일)
key : f0c4c9c0a6154552 #암호화 키
iv : f0c4c9c0a6154552 # 초기화 벡터
#뱅크다
bankda:
serviceType : premium
id: inssoft
pw: ITteam1!
#default css
css-cours : css/theme/themeAF.css
#선물하기 URL
presenturl : devsvc.soju1sake1.com
# 출고 택배사 구분 EXPORT, (택배사 구분코드 HDRYCPN)
# 송장번호 %INVCNB% 치환
# 한진택배는 운송번호 바로 조회 서비스 미제공함
ordr:
export:
hdrycpn:
code0: https://trace.cjlogistics.com/next/tracking.html?wblNo=%INVCNB%
code7: https://service.epost.go.kr/trace.RetrieveDomRigiTraceList.comm?sid1=%INVCNB%&displayHeader=
code9: https://www.hanjin.com/kor/CMS/DeliveryMgr/WaybillSch.do?mCode=MN038
code10: https://www.lotteglogis.com/home/reservation/tracking/linkView?InvNo=%INVCNB%
code29: https://ylis.yongmalogis.co.kr/cmm/modalDeliveryCargoTrace.do?ordno=%INVCNB%
# 서치어드바이저 소유권 코드
meta-content:
google:
LR: ""
naver:
LR: "5fcdb284f18ca08cf86af214a01998990c008e84"
facebook:
LR: ""
# 결제 api 사용 암호 key
api:
AES_KEY: "aMZV6RjCtE1iyuH8WyE+Hg=="
DATA_ENCRYPT_AES_KEY: "Z8zKbHyMKn+iwD3O0PLT9g=="
currency-unit:
default: 円
JP: 円
KR: 원

View File

@@ -0,0 +1,457 @@
server:
port: 18500
error:
whitelabel:
enabled: false
management:
endpoints:
web:
exposure:
include: refresh
jwt:
access:
secretKey: YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ==YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ== # BASE64 encode(alleyslabTestBase64EncodeJwtSecretkey) *2
max-age: 3600 # 1시간 (초)
refresh:
secretKey: YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ==YWxsZXlzbGFiVGVzdEJhc2U2NEVuY29kZUp3dFNlY3JldGtleQ== # BASE64 encode(alleyslabTestBase64EncodeJwtSecretkey) *2
max-age: 86400 # 24시간 (초)
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://172.31.21.12:18320/realms
client:
registration:
kakao:
client-id: babe84df407dcf2d58624fcf164b505e
client-secret: zl81Pb6a1hlEbrzI0PM5CnbSJa3tEz6s
client-name: Kakao
authorization-grant-type: authorization_code
client-authentication-method: client_secret_post
redirect-uri: "{baseUrl}/login/oauth2/code/kakao"
scope:
- profile_nickname,account_email,gender,birthyear,phone_number,name
naver:
provider: naver
client-id: YnCTvohpxT2LFv7DqNAG
client-secret: UmOZn0YHiw
scope: name,email,gender,mobile
client-name: Naver
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/naver"
provider:
kakao:
authorization-uri: https://kauth.kakao.com/oauth/authorize
token-uri: https://kauth.kakao.com/oauth/token
user-info-uri: https://kapi.kakao.com/v2/user/me
user-name-attribute: id
naver:
authorization-uri: https://nid.naver.com/oauth2.0/authorize
token-uri: https://nid.naver.com/oauth2.0/token
user-info-uri: https://openapi.naver.com/v1/nid/me
user-name-attribute: response
datasource:
gcone:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://10.2.1.101:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
username: sakeone
password: dnlfxjtm13@$
minimumIdle: 10
maximumPoolSize: 50
idleTimeout: 30000 #30초
maxLifetime: 1800000 #30분
connectionTimeout: 30000
poolName: SakePool
sure:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://10.2.1.101:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false
username: sakeone
password: dnlfxjtm13@$
minimumIdle: 1
maximumPoolSize: 10
idleTimeout: 30000 #30초
maxLifetime: 1800000 #30분
connectionTimeout: 30000
poolName: SurePool
jpa:
hibernate:
ddl-auto: update
show-sql: true
servlet:
multipart:
max-file-size: 15MB
max-request-size: -1
mybatis:
mapper-locations: classpath:/mybatis/xml/mapper/**/*.xml
config-location: classpath:/mybatis/xml/config/mapper-config.xml
logging:
level:
org.springframework.web: debug
org.springframework.security: debug
org.springframework.security.oauth2: debug
com.wb.domainserver: debug
root: info
sopmalfo:
common:
fileupload:
uploaddirs:
goods:
doc: /data/gcone/docFile
web: /data/gcone/webFile
phar: /data/gcone/phFile
rtrn: /data/gcone/rtrnFile
extensions:
images: .gif,.jpg,.jpeg,.png
cdnurl: https://19b0bde6dcdc15ad.kinxzone.com
pagination:
page-unit: 10
page-size: 10
#kakao js test key
kakao:
keys:
CH: "b3f10109439ca225a9bda684e358a9b1"
TZ: "b3f10109439ca225a9bda684e358a9b1"
LF: "b3f10109439ca225a9bda684e358a9b1"
NC: "b3f10109439ca225a9bda684e358a9b1"
PL: "b3f10109439ca225a9bda684e358a9b1"
DT: "b3f10109439ca225a9bda684e358a9b1"
NB: "b3f10109439ca225a9bda684e358a9b1"
AF: "b3f10109439ca225a9bda684e358a9b1"
BD: "b3f10109439ca225a9bda684e358a9b1"
DL: "b3f10109439ca225a9bda684e358a9b1"
JM: "b3f10109439ca225a9bda684e358a9b1"
LR: "d1fa06d7edfb5178293ce9718cc82f5b"
#슈어엠 법인별 정보
surem:
sopmal:
#참다한홍삼
CH:
code: GC
data: (주)지씨바이오
erpcode: 01
userid: gcbio02
deptcode: KT-26E-ZS
yellowkey: cd51453ccf40ef714cadd5a7dd0506cd7340a986
#더작
TZ:
code: TB
data: (주)트래디스바이오
erpcode: 02
userid: tradithbio02
deptcode: FO-5SP-HZ
yellowkey: c3218d5cf0e60ffd7ac2e0ba3674f3d29acd258c
#라이프케어
LF:
code: TB
data: (주)트래디스바이오
erpcode: 02
userid: tradithbio02
deptcode: FO-5SP-HZ
yellowkey: 8e5470e841a36882e1a3db87e6a791bcfed5c8d2
#닥터린
DT:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: 43dcab2777006643bfac640186cfaeebe97c7aff
#자담유
NB:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: ecca3323e0aec27b514429c1934f50468b8b7cf2
#올프리
AF:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: b813ceaa0837e5e4b5e0a7b8b17524138299d798
#뉴트리코어
NC:
code: SL
data: (주)에스엘바이오텍
erpcode: 03
userid: slbiotech02
deptcode: AR-TYO-OK
yellowkey: 8e5470e841a36882e1a3db87e6a791bcfed5c8d2
#프로스랩
PL:
code: NP
data: (주)네이처풀
erpcode: 04
userid: naturefull02
deptcode: W1-R3C-3K
yellowkey: 31166680c84494e86ffcb34668bba26398e7dd1e
#바디닥터스
BD:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: e7fbc154eb51da9bc99df26f8a5618377b854c8c
#디디오랩
DL:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: 94fd52576d658b42320ad2083e73e9ccf5ee24d1
#저스트마이데이
JM:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: ccf01eaa7ea9edc95c52178282cfb60b04f1520f
IS:
code: IS
data: (주)아이엔에스 소프트
userid: inssoft02
deptcode: R8-S2A-JC
#POS 마일리지 적립 정보
pos-mileage:
NC:
point-except-arr: E07-000954,E07-000955,E7T-000509,E7T-000510,E7T-000725,E7T-000726,E7T-000734,E7T-000735,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,E7T-012:0.01,EX3-004:0.03,EX3-005:0.03
point-use-min: 1
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
ext-except-arr: E07-001258, E07-001259, E07-001260, E7T-000943, E7T-000944, E7T-000945, EX2-000904, EX2-000912, EX2-000913, EX3-000950, EX3-000955, EX3-000956
ext-goods-arr:
fix-point-arr:
E07-002045: 30000
E7T-001579: 30000
EX3-001509: 30000
E07-002046: 20000
E7T-001580: 20000
EX3-001511: 20000
E07-002047: 5000
E7T-001581: 5000
EX3-001512: 5000
E07-002048: 20000
E7T-001582: 20000
EX3-001510: 20000
ext-coupon-arr:
E07: "063"
E7T: "035"
EX3: "031"
CH:
point-except-arr: E07-000484,E07-000954,E07-000955,E07-000975,E07-000976,E07-000977,E07-000979,E7T-000734,E7T-000735,E7T-000725,E7T-000726
point-rate: 0.01
point-rate-arr: E07-001:0.03,E07-002:0.03,E07-019:0.01,E07-020:0.01,EX2-004:0.03,EX2-005:0.03,EX2-013:0.01
point-use-min: 1
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
ext-except-arr: E07-001258, E07-001259, E07-001260, E7T-000943, E7T-000944, E7T-000945, EX2-000904, EX2-000912, EX2-000913, EX3-000950, EX3-000955, EX3-000956
ext-goods-arr:
fix-point-arr:
E07-002045: 30000
E7T-001579: 30000
EX3-001509: 30000
E07-002046: 20000
E7T-001580: 20000
EX3-001511: 20000
E07-002047: 5000
E7T-001581: 5000
EX3-001512: 5000
E07-002048: 20000
E7T-001582: 20000
EX3-001510: 20000
ext-coupon-arr:
E07: "063"
E7T: "035"
EX3: "031"
PL:
point-except-arr: E07-000484,E7T-000509,E7T-000510,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,EX3-004:0.04,EX3-005:0.03
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
TZ:
point-rate: 0.01
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
NB:
point-except-arr: E07-000484,E7T-000509,E7T-000510,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,EX3-004:0.04,EX3-005:0.03
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
DT:
point-except-arr: E07-000484,E7T-000509,E7T-000510,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,EX3-004:0.04,EX3-005:0.03
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
point-use-min: 5000
AF:
point-rate: 0.02
BD:
point-rate: 0.01
JM:
point-rate: 0.05
LF:
point-rate: 0.01
DL:
point-rate: 0.01
OY:
point-rate: 0.01
VN:
point-rate: 0.01
CO:
point-rate: 0.01
NC2:
point-rate: 0.01
PL2:
point-rate: 0.01
CN:
point-rate: 0.01
SC:
point-rate: 0.01
ext-event-dv: brand
ext-event-stdt: 2024-04-26
ext-event-enddt: 2024-05-20
ext-event-except-sopmal: CH,TZ
ext-event-sopmal: NC,PL
mngrfo:
common:
board:
nc:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
ch:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
dl:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
fileupload:
uploaddirs:
goods: C:/file/temp
doc: /data/gcone/docFile
web: /data/gcone/webFile
extensions:
images: .gif,.jpg,.jpeg,.png
cdnurl: https://19b0bde6dcdc15ad.kinxzone.com
subsvc:
dft-goods-optn-innb: 1
secret:
key: 1df5be2f7e90ae36
aciexpress:
apikey: DC94F29AFD5399F54AAE7FAA46045B65
host:
img: https://19b0bde6dcdc15ad.kinxzone.com/
naverpay:
order:
test-url: https://test-order.pay.naver.com
test-mobile-Url: https://test-m.pay.naver.com
real-url: https://order.pay.naver.com
real-mobile-Url: https://m.pay.naver.com
zzim:
test-url: https://test-pay.naver.com
real-url: https://pay.naver.com
mail:
host: 10.2.1.76
port: 587
username: custom@sake1jan.com
password: mail13@$
connectiontimeout: 10000
timeout: 10000
writetimeout: 10000
#이지웰페이 정보
easywell:
applc-hdqrtrs : E07, E7T #이지웰페이 적용 본부
server :
nc: #개발서버 (NC)
ip : 211.180.161.102
port : 3712
company-code : slbiotech #회사코드(띄어쓰기(1) 포함 10자)
brand-code : 10067521 #브랜드코드(띄어쓰기(2) 포함 10자)
cipher : AES/CBC/PKCS5Padding #블록 암호화 알고리즘 (as-is AES-128-CBC 동일)
key : 38a05be31b054a06 #암호화 키
iv : 38a05be31b054a06 # 초기화 벡터
other: #개발서버(기타 브랜드)
ip : 211.180.161.102
port : 3711
company-code : gcbio #회사코드(띄어쓰기(5) 포함 10자)
brand-code : "0012345" #브랜드코드(띄어쓰기(3) 포함 10자)
cipher : AES/CBC/PKCS5Padding #블록 암호화 알고리즘 (as-is AES-128-CBC 동일)
key : f0c4c9c0a6154552 #암호화 키
iv : f0c4c9c0a6154552 # 초기화 벡터
#뱅크다
bankda:
serviceType : premium
id: inssoft
pw: ITteam1!
#default css
css-cours : css/theme/themeAF.css
#선물하기 URL
presenturl : svc.soju1sake1.com
# 출고 택배사 구분 EXPORT, (택배사 구분코드 HDRYCPN)
# 송장번호 %INVCNB% 치환
# 한진택배는 운송번호 바로 조회 서비스 미제공함
ordr:
export:
hdrycpn:
code0: https://trace.cjlogistics.com/next/tracking.html?wblNo=%INVCNB%
code7: https://service.epost.go.kr/trace.RetrieveDomRigiTraceList.comm?sid1=%INVCNB%&displayHeader=
code9: https://www.hanjin.com/kor/CMS/DeliveryMgr/WaybillSch.do?mCode=MN038
code10: https://www.lotteglogis.com/home/reservation/tracking/linkView?InvNo=%INVCNB%
code29: https://ylis.yongmalogis.co.kr/cmm/modalDeliveryCargoTrace.do?ordno=%INVCNB%
# 서치어드바이저 소유권 코드
meta-content:
google:
LR: ""
naver:
LR: "5fcdb284f18ca08cf86af214a01998990c008e84"
facebook:
LR: ""
# 결제 api 사용 암호 key
api:
AES_KEY: "aMZV6RjCtE1iyuH8WyE+Hg=="
DATA_ENCRYPT_AES_KEY: "Z8zKbHyMKn+iwD3O0PLT9g=="
currency-unit:
default: 円
JP: 円
KR: 원

View File

@@ -0,0 +1,318 @@
server:
port: 18500
management:
endpoints:
web:
exposure:
include: refresh
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://172.31.171.12:18320/realms
datasource:
gcone:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://172.31.16.11:3306/gcone?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=false&verifyServerCertificate=false
username: winbit
password: dnlsqlxm1!
minimumIdle: 2
maximumPoolSize: 20
idleTimeout: 30000 #30초
maxLifetime: 1800000 #30분
connectionTimeout: 30000
poolName: gconeboTestGconePool
sure:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://172.31.17.11:3306/nutricore
username: winbit
password: dnlsqlxm1!
minimumIdle: 20
maximumPoolSize: 500
idleTimeout: 30000 #30초10
maxLifetime: 1800000 #30분
connectionTimeout: 30000
poolName: gconeboTestSurePool
jpa:
hibernate:
ddl-auto: none
show-sql: true
servlet:
multipart:
max-file-size: 10MB
max-request-size: -1
mybatis:
mapper-locations: classpath:/mybatis/xml/mapper/**/*.xml
config-location: classpath:/mybatis/xml/config/mapper-config.xml
logging:
level:
org.springframework.web: info
org.springframework.security: info
org.springframework.security.oauth2: info
com.wb.domainserver: info
root: info
#Resource-server-url
url:
resource:
server:
product: http://127.0.0.1:18210
order: http://172.31.15.11:18220
payment: http://127.0.0.1:8092
delivery: http://127.0.0.1:8093
coupon-mlg: http://127.0.0.1:8094
review: http://127.0.0.1:8095
extlink: http://127.0.0.1:8096
pagination:
page-unit: 10
page-size: 10
#슈어엠 법인별 정보
surem:
sopmal:
#참다한홍삼
CH:
code: GC
data: (주)지씨바이오
erpcode: 01
userid: gcbio02
deptcode: KT-26E-ZS
yellowkey: cd51453ccf40ef714cadd5a7dd0506cd7340a986
#더작
TZ:
code: TB
data: (주)트래디스바이오
erpcode: 02
userid: tradithbio02
deptcode: FO-5SP-HZ
yellowkey: c3218d5cf0e60ffd7ac2e0ba3674f3d29acd258c
#라이프케어
LF:
code: TB
data: (주)트래디스바이오
erpcode: 02
userid: tradithbio02
deptcode: FO-5SP-HZ
yellowkey: 7ef337e0f1fce8440aa896e9ca4e01ec6aa86f35
#닥터린
DT:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: 43dcab2777006643bfac640186cfaeebe97c7aff
#자담유
NB:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: ecca3323e0aec27b514429c1934f50468b8b7cf2
#올프리
AF:
code: NP
data: (주)코스네이처
erpcode: 05
userid: cosnature02
deptcode: CQ-DSI-MO
yellowkey: b813ceaa0837e5e4b5e0a7b8b17524138299d798
#뉴트리코어
NC:
code: SL
data: (주)에스엘바이오텍
erpcode: 03
userid: slbiotech02
deptcode: AR-TYO-OK
yellowkey: 8e5470e841a36882e1a3db87e6a791bcfed5c8d2
#프로스랩
PL:
code: NP
data: (주)네이처풀
erpcode: 04
userid: naturefull02
deptcode: W1-R3C-3K
yellowkey: 31166680c84494e86ffcb34668bba26398e7dd1e
#바디닥터스
BD:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: e7fbc154eb51da9bc99df26f8a5618377b854c8c
#디디오랩
DL:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: 94fd52576d658b42320ad2083e73e9ccf5ee24d1
#저스트마이데이
JM:
code: DB
data: (주)디바인바이오
erpcode: 06
userid: divinebio02
deptcode: ZN-XCC-48
yellowkey: ccf01eaa7ea9edc95c52178282cfb60b04f1520f
IS:
code: IS
data: (주)아이엔에스 소프트
userid: inssoft02
deptcode: R8-S2A-JC
#POS 마일리지 적립 정보
pos-mileage:
NC:
point-except-arr: E07-000954,E07-000955,E7T-000509,E7T-000510,E7T-000725,E7T-000726,E7T-000734,E7T-000735,EX3-000007,EX3-000009,EX3-000061,EX3-000081,EX3-000126,EX3-000275,EX3-000277,EX3-000281,EX3-000316,EX3-000317,EX3-000427,EX3-000501,EX3-000502,EX3-000503,EX3-000504,EX3-000506,EX3-000507,EX3-000508,EX3-000568,EX3-000569,EX3-000570
point-rate: 0.01
point-rate-arr: E7T-003:0.03,E7T-004:0.03,E7T-012:0.01,EX3-004:0.03,EX3-005:0.03,E07-021:0.05
point-store-arr: EX3-000079
point-use-min: 1
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
ext-except-arr: E07-001258, E07-001259, E07-001260, E7T-000943, E7T-000944, E7T-000945, EX2-000904, EX2-000912, EX2-000913, EX3-000950, EX3-000955, EX3-000956, E07-000677, E07-000934, E07-000527, E07-000916, E7T-000037, E7T-000711, E7T-000060, E7T-000693, EX2-000089, EX2-000639, EX2-000082, EX2-000623, EX3-000089, EX3-000680, EX3-000082, EX3-000654, E07-000296, E07-000478, E07-000265, E7T-000063, E7T-000073, E7T-000025, EX2-000063, EX2-000016, EX2-000020, EX3-000063, EX3-000016, EX3-000020
ext-goods-arr:
fix-point-arr:
E07-002045: 30000
E7T-001579: 30000
EX3-001509: 30000
E07-002046: 20000
E7T-001580: 20000
EX3-001511: 20000
E07-002047: 5000
E7T-001581: 5000
EX3-001512: 5000
E07-002048: 20000
E7T-001582: 20000
EX3-001510: 20000
ext-coupon-arr:
E07: "076"
E7T: "048"
EX3: "013"
ext-event-dv: brand,prod
ext-event-sopmal: NC,FN
ext-event-stdt: 2025-07-21
ext-event-enddt: 2025-07-27
ext-store-event-stdt: 2025-06-18
ext-store-event-enddt: 2025-06-30
ext-prod-event-stdt: 2025-06-02
ext-prod-event-enddt: 2025-06-30
ext-test-arr: E7T000036
CH:
point-except-arr: E07-000484,E07-000954,E07-000955,E07-000975,E07-000976,E07-000977,E07-000979,E7T-000734,E7T-000735,E7T-000725,E7T-000726
point-rate: 0.01
point-rate-arr: E07-001:0.03,E07-002:0.03,E07-019:0.01,E07-020:0.01,EX2-004:0.03,EX2-005:0.03,EX2-013:0.01,E07-021:0.05
point-use-min: 1
sale-rate: 2:0.03,3:0.04,4:0.05,5:0.05
ext-except-arr: E07-001258, E07-001259, E07-001260, E7T-000943, E7T-000944, E7T-000945, EX2-000904, EX2-000912, EX2-000913, EX3-000950, EX3-000955, EX3-000956, E07-000677, E07-000934, E07-000527, E07-000916, E7T-000037, E7T-000711, E7T-000060, E7T-000693, EX2-000089, EX2-000639, EX2-000082, EX2-000623, EX3-000089, EX3-000680, EX3-000082, EX3-000654, E07-000296, E07-000478, E07-000265, E7T-000063, E7T-000073, E7T-000025, EX2-000063, EX2-000016, EX2-000020, EX3-000063, EX3-000016, EX3-000020
ext-goods-arr:
fix-point-arr:
E07-002045: 30000
E7T-001579: 30000
EX3-001509: 30000
E07-002046: 20000
E7T-001580: 20000
EX3-001511: 20000
E07-002047: 5000
E7T-001581: 5000
EX3-001512: 5000
E07-002048: 20000
E7T-001582: 20000
EX3-001510: 20000
ext-coupon-arr:
E07: "076"
E7T: "048"
EX3: "013"
ext-event-dv: brand,prod
ext-event-stdt: 2025-07-21
ext-event-enddt: 2025-07-27
ext-prod-event-stdt: 2025-06-02
ext-prod-event-enddt: 2025-06-30
ext-event-except-sopmal:
ext-event-sopmal: NC,FN
ext-test-arr: E7T000036
ext-store-event-stdt: 2025-06-18
ext-store-event-enddt: 2025-06-30
mngrfo:
common:
board:
nc:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
ch:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
dl:
ntcntalkSndngFormInnb01: 1
ntcntalkSndngFormInnb02: 2
fileupload:
uploaddirs:
goods: C:/file/temp
doc: /docFile
web: /webFile
extensions:
images: .gif,.jpg,.jpeg,.png
secret:
key: 1df5be2f7e90ae36
host:
img: http://dev.img.gcone.co.kr
naverpay:
order:
test-url: https://test-api.pay.naver.com
real-url: https://api.pay.naver.com
zzim:
test-url: https://test-pay.naver.com
real-url: https://pay.naver.com
mail:
host: 172.31.14.11
port: 25
#이지웰페이 정보
easywell:
applc-hdqrtrs : E07, E7T #이지웰페이 적용 본부
server :
nc: #개발서버 (NC)
ip : 211.180.161.102
port : 3712
company-code : slbiotech #회사코드(띄어쓰기(1) 포함 10자)
brand-code : 10067521 #브랜드코드(띄어쓰기(2) 포함 10자)
cipher : AES/CBC/PKCS5Padding #블록 암호화 알고리즘 (as-is AES-128-CBC 동일)
key : 38a05be31b054a06 #암호화 키
iv : 38a05be31b054a06 # 초기화 벡터
other: #개발서버(기타 브랜드)
ip : 211.180.161.102
port : 3711
company-code : gcbio #회사코드(띄어쓰기(5) 포함 10자)
brand-code : "0012345" #브랜드코드(띄어쓰기(3) 포함 10자)
cipher : AES/CBC/PKCS5Padding #블록 암호화 알고리즘 (as-is AES-128-CBC 동일)
key : f0c4c9c0a6154552 #암호화 키
iv : f0c4c9c0a6154552 # 초기화 벡터
#뱅크다
bankda:
serviceType : premium
id: inssoft
pw: ITteam1!
#default css
css-cours : css/theme/themeAF.css
#선물하기 URL
presenturl : dev.svc.gcone.co.kr

View File

@@ -0,0 +1,13 @@
{
"type": "service_account",
"project_id": "doctorleaneventapp",
"private_key_id": "3e5496cb84b583edde49b1a56f163c762e27e768",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC2mPSt5uteMuvq\nygikRImrIwkfQ6Wt6sZ6Eeb89sU5NP+OYzNS/5hUXwREiApHJVxFOi6akSNtVI1H\nC5ICjnsMncwIP8VBg3dm02Vfn+vxj2olTDsYODLTjIkrIQ+qJR0yNWqbzAUlkaOd\nj2UGRygSUGfX9N+kKvFQiBNcFFYVYeELAYUHwqqwdx7GGOdA78+n6NCJmDfaJaQS\nF3HztQRARRdi2JOtzpXNiISdf2h4DGvBJt3gzZKffg4y39BaBn98AWhUzD59NCj1\nKzutzRK8eesZaoW+TqG5CHt8phTV3uYUvVK9HcGkEPI0vS0RjGe1r7+7XOIjuevB\nLBiQC8thAgMBAAECggEAFSf3L3/yFNW3DlrOsgOr5Lt4NtpeY55wVRvmZLhNxRFO\nK8f0HiF1m47vvmX5tOEQBghV9nwq++OgQ9NEHU43VRCiX3FOEEdkafJDzFbJ3lDU\nxlIFBcsbHnYpvWjE+Rx4O8VDHx5+GSp858hBtv6/FpIg2f1p/QopsAA4KALGL49X\nx1RP4NrhKPdsDSutdq668Naclm6UGOf+LUmvFsBsnLx7jJGoc3QIhGQ3pZW2QZzQ\n+clIigY6D8HDg7RMGM5XobjvuqGJk4IYeCsLvcxP0dQIyNPmqsfVP0NBDVFiJ1Oz\nvuQ8hLfJfOKuJswjMiNYiVdf4fT6Lg7klNyS9IKYPQKBgQDdhnzfWF56EfxA1HgJ\nD5H9E+EuaCyMTErHnN6VYoQd+uS7rwp9v39Cap8/Vw1iTzlcp05k6l0QDgtqzZKa\n3NJRoHK1bmamrdV9PLztNVsbgQfMd9s5p+rBan/ZBB3DQehDarlITQ16T3zm2hFR\nkUJz54dOP4qmMvPf2B1QYuZknQKBgQDTA5eYkrebTeRVKZPme5k5BlpNjHdCJbeg\nh6sffe5tnpbbH46RSYhP5Bzgk+IWOu0vOiKQtDL2QkJXjopUuu2Vc1yM+CNsB9oh\n/T2vcjKlh5gYR9cTJ61UeV4V0B2Y88I1G1i1XruOc/gMNvMpwDWiOkPyTX6IvXvH\nKJyzDTVslQKBgFQU1tLDLODycKd+vazavxOq9v5xRe9eiceoMAfNY84pS6Y9MyM1\niyz/YUBeX1MgNOqJCkVde0M7wXOhYXLsO9wFpWRd6hJ7ypuFcUQry0/uMrKWD5yb\nsowFS09os49INctY98iMjoANKaBJxucJ1oo9p+q4TXz1vAELe1zmnQI1AoGBAKZT\nrIi9DTDDgvmF3mjMgAgs870wvUhMhqNojQAzuV56pRpvk2b9+Q5QFlsG9izjodWa\nE2jQQWNO8xAk8PC8r00gM5GCfhlHTy9/d8H1V+qWKNLqvaMBoWR2jizPcKUBbtGB\njrjXxSsSSjEGl0EPmrcXCjvRza1m/kwLvQh9nuDJAoGAJVTjo2MdQprx+cyty0ZT\nZzo+l1F2zk7LBLB80TXgXZO+BcYguFxb25cNlsydy5yzMldrzKlt/YeiiA8/Z8kG\nWDT9P/O2r0AubHfMMZ7cC1VH/0pxoOrFYDUsofJ1ySKX/jiFi8kuklZkly50Eu2T\nH/GxM9D1V3XxH1HCo8+xoRc=\n-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-ysdbz@doctorleaneventapp.iam.gserviceaccount.com",
"client_id": "104855938912009098248",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-ysdbz%40doctorleaneventapp.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}

View File

@@ -0,0 +1,13 @@
{
"type": "service_account",
"project_id": "nutricoreeventapp",
"private_key_id": "bd9d39ca9c3d3d15b11cafe3df474af1c23161ca",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDR9UkVOX8fGDai\nGLJdlBsv/sHkTDX+VXREXY1Hs4Ak7tyDKaUYvgDEfmPxQIgHa4lT6Q6xAi40tj/j\nYRc8Gt8f4PeZkOANIB5W5RUBis4Okj54Ly0NQITF0+UglwWzOz4K8fUQ2lBEZSWn\n72QCQQkQRyPVA3upDs75fyKvFC8+5lAxAJFuIRyB36IRohkbXdkIqwYj9CmWKutG\nu22E5Gy9X5Mpe9par2aji2T0TeIr0hnB/rvhewnoLVxB/kdWz5vBUS11JPATaQ41\nAkbehSzjyapM83IFNgqezNYNQE28uc8mykBUrMPi0oTyuDYuYBq4wqKf9+TmbvR8\n6NL6Flt3AgMBAAECggEAC/gHqoYUkRk4RBVUVbFTu3CybOlLSqxkbGFI5IV/EJvt\nRizhlH+AW7M4z0/2cTXYJkhq5fxR1f9ttPCb+nktrwuMEd0IaLckA6AbinL3PC1q\nEj/eOZsr9nsV3L2/PXBrIQSaC9PmL3/0nZYwBVDfy2XCzSndqs2FTwPIXmKwLs2n\n4EV17q5PnDzxpvxr2yby9wM2IidlVRdzPo/vYYLL9JH+iRBP04jllJlNGsvwpNkT\n9kHqfInLGMk+2v7+nqobrSW1V12lSBDYfZisWxA5e5gcP0Cp9Fu2MQKigO1eENdB\nuh+k4VrK35UB0vR+mUI20DALfHDN5Q7aj4EUI7n8AQKBgQDxb75kVWNcfBWZtG7z\nUKObALOKECAmMPnr4DoJeMThsX2suu/aZQctlfCgALxUFg0nES3dkzrYG1fYjzeI\nj1gFUZ3KVOprGFShgDXc+WZHytm8L4mfnVA8hG2B0FLKkA+uVgkJBg7EsLwcuaP5\nF7VdTruSvJc1DbWFyr056zkJNwKBgQDen3QvAW1I5JYZovNdL/LVd+ueyxbtKRyx\nJZozKQcMddJWmWJG9ZuJzqP4v2t+rpfxF3iPeUOCNLDPms3Cxt58LLpX0Imv5Ufq\nWJ/gmA/IVJRlHROsyRXexeVkcHcsr1CZUgf/31vs8WkV/6Kor42ucuBwD3x76n0o\npDdofS1fwQKBgQDEU4WSuQyvLAe0kVCXcr9XT96vKiW6aKER+ae4BAi1LktvpiNc\niEKqAv9EXNTH25aeag3N2+dBzBpG807JMSb2TEPvP9XPeF15ZnRmWDefsYgUyuMy\ndA3G6DjUEr8AEN1vem6mc9KWhtCw2xRHfcvxMBC/ZbPfZGJzhUUSUAB1SQKBgQCv\n75IxR85nSgd5sTblUWx22bQDJXsz6Ea9lPr9LZJdfYvCVqu9aoMGcKFTh2vbjP2V\nUjg8ItiAQUXue+fa47GWrv6BQdRehzPDd1C6fVITvwwbsNQIvE4lZX45V0xHqzFm\nSdb6lzmd0td6xDF3YG33DOBkj0iQ4asSAF2tnSfLwQKBgBLTZpfd+btX7932YtkG\nNmk7Tl7JRKj0rnRIyQom2UIIWNxJl1zotI02wE3y6/+MD9T1WX5KBRgi0jDPFBoP\niTDoOJ1lzqcHMc7BkUQiGlFOoWCOuj5AqWvo6YMkP7Q+scgc67I2yHFUPTJt5FEd\nlWr3Ul6VDP57cgPGdGyazIfS\n-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-iliil@nutricoreeventapp.iam.gserviceaccount.com",
"client_id": "117259015808547426598",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-iliil%40nutricoreeventapp.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}

View File

@@ -0,0 +1,125 @@
#\uBC84\uD2BC \uCD9C\uB825 \uBA54\uC2DC\uC9C0
button.list=\uB9AC\uC2A4\uD2B8 \uBC14\uB85C\uAC00\uAE30
button.catalog=\uBAA9\uB85D
button.search=\uAC80\uC0C9
button.view=\uC870\uD68C
button.viewAll=\uC804\uCCB4\uC870\uD68C
button.update=\uC218\uC815
button.insert=\uB4F1\uB85D
button.zipcode=\uC6B0\uD3B8\uBC88\uD638 \uCC3E\uAE30
button.copy=\uBCF5\uC0AC
button.copyInsert=\uBCF5\uC0AC\uC7AC\uB4F1\uB85D
button.save=\uC800\uC7A5
button.cancel=\uCDE8\uC18C
button.close=\uB2EB\uAE30
button.apply=\uC801\uC6A9
button.select.detail=\uC0C1\uC138
button.init=\uCD08\uAE30\uD654
button.ok=\uD655\uC778
button.choice=\uC120\uD0DD
button.reset=\uC7AC\uC124\uC815
button.reSendung=\uC7AC\uC804\uC1A1
button.sendung=\uC778\uC99D\uBC88\uD638 \uBC1C\uC1A1
button.certification=\uD734\uB300\uD3F0 \uC778\uC99D
button.certificationDone=\uC778\uC99D \uC644\uB8CC
button.certificationEmail=\uC778\uC99D
button.delete=\uC0AD\uC81C
button.duplication=\uC911\uBCF5 \uD655\uC778
button.doubleCheck=\uC911\uBCF5 \uD655\uC778
button.duplicate=\uC911\uBCF5 \uD655\uC778
button.add=\uCD94\uAC00
button.goods=\uC0C1\uD488
button.goodsReg=\uC0C1\uD488\uB4F1\uB85D
button.excelDownload=\uB2E4\uC6B4\uB85C\uB4DC
button.findId=\uC544\uC774\uB514 \uCC3E\uAE30
button.findPswd=\uD328\uC2A4\uC6CC\uB4DC \uCC3E\uAE30
button.yes=\uC608
button.no=\uC544\uB2C8\uC624
button.change=\uBCC0\uACBD
button.connectionHistory=\uC811\uC18D\uC774\uB825\uC870\uD68C
#\uC624\uB958 \uCD9C\uB825 \uBA54\uC2DC\uC9C0
error.internal-server=\uC2E4\uD589\uB3C4\uC911 \uC608\uAE30\uCE58 \uC54A\uC740 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD558\uC600\uC2B5\uB2C8\uB2E4.
errors.required={0}\uC740(\uB294) \uD544\uC218 \uC785\uB825\uAC12\uC785\uB2C8\uB2E4.
errors.minlength={0}\uC740(\uB294) {1}\uC790 \uC774\uC0C1 \uC785\uB825\uD574\uC57C \uD569\uB2C8\uB2E4.
errors.maxlength={0}\uC740(\uB294) {1}\uC790 \uC774\uC0C1 \uC785\uB825\uD560\uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
errors.invalid={0}\uC740(\uB294) \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uAC12\uC785\uB2C8\uB2E4.
errors.min={0}\uC740(\uB294) \uCD5C\uC18C {1} \uC774\uC0C1\uC758 \uAC12\uC744 \uC785\uB825\uD574\uC57C \uD569\uB2C8\uB2E4.
errors.max={0}\uC740(\uB294) \uCD5C\uC18C {1} \uC774\uD558\uC758 \uAC12\uC744 \uC785\uB825\uD574\uC57C \uD569\uB2C8\uB2E4.
errors.length={0}\uC740(\uB294) {1}\uC790 \uC774\uC0C1 {2}\uC790 \uC774\uD558\uB9CC \uC785\uB825\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
errors.numberWithHyphen={0}\uC740(\uB294) \uC22B\uC790\uC640 \uD558\uC774\uD508(-)\uB9CC \uC785\uB825\uD558\uC154\uC57C \uD569\uB2C8\uB2E4.
errors.size={0}\uC740(\uB294) {1}\uAC74 \uC774\uC0C1 {2}\uAC74 \uC774\uD558\uC5EC\uB9CC \uD569\uB2C8\uB2E4.
errors.minInteger={0}\uC740(\uB294) \uC720\uD6A8\uD55C \uAC12\uC774 \uC544\uB2D9\uB2C8\uB2E4. 1 \uC774\uC0C1\uC758 \uAC12\uC744 \uC785\uB825\uD574\uC57C \uD569\uB2C8\uB2E4.
errors.byte={0}\uC740(\uB294) byte\uD0C0\uC785\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
errors.short={0}\uC740(\uB294) short\uD0C0\uC785\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
errors.long={0}\uC740(\uB294) long \uD0C0\uC785\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
errors.float={0}\uC740(\uB294) \uC2E4\uC218 \uD0C0\uC785\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
errors.double={0}\uC740(\uB294) double \uD0C0\uC785\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
errors.date={0}\uC740(\uB294) \uB0A0\uC9DC \uC720\uD615\uC774 \uC544\uB2D9\uB2C8\uB2E4.
errors.range={0}\uC740(\uB294) {1}\uACFC {2} \uC0AC\uC774\uC758 \uAC12\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
errors.creditcard={0}\uC740(\uB294) \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC2E0\uC6A9\uCE74\uB4DC \uBC88\uD638\uC785\uB2C8\uB2E4.
errors.email={0}\uC740(\uB294) \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC774\uBA54\uC77C \uC8FC\uC18C\uC785\uB2C8\uB2E4.
errors.ihidnum=\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC8FC\uBBFC\uB4F1\uB85D\uBC88\uD638\uC785\uB2C8\uB2E4.
errors.korean={0}\uC740(\uB294) \uD55C\uAE00\uC744 \uC785\uB825\uD558\uC154\uC57C \uD569\uB2C8\uB2E4.
errors.english={0}\uC740(\uB294) \uC601\uBB38\uC744 \uC785\uB825\uD558\uC154\uC57C \uD569\uB2C8\uB2E4.
errors.integer={0}\uC740(\uB294) \uC22B\uC790(\uC815\uC218)\uB97C \uC785\uB825\uD558\uC154\uC57C \uD569\uB2C8\uB2E4.
errors.ip=\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 IP\uC8FC\uC18C\uC785\uB2C8\uB2E4.
errors.password1={0}\uC740(\uB294) 8~20\uC790 \uB0B4\uC5D0\uC11C \uC785\uB825\uD574\uC57C \uD569\uB2C8\uB2E4.
errors.password2={0}\uC740(\uB294) \uD55C\uAE00,\uD2B9\uC218\uBB38\uC790,\uB744\uC5B4\uC4F0\uAE30\uB294 \uD5C8\uC6A9\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
errors.password3={0}\uC740(\uB294) \uC21C\uCC28\uC801\uC778 \uC22B\uC790\uB97C 4\uAC1C\uC774\uC0C1 \uC5F0\uC18D\uD574\uC11C \uC0AC\uC6A9\uD560\uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
errors.password4={0}\uC740(\uB294) \uBC18\uBCF5\uB418\uB294 \uBB38\uC790\uB098 \uC22B\uC790\uB97C 4\uAC1C\uC774\uC0C1 \uC5F0\uC18D\uD574\uC11C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
errors.mngrPassword={0}\uC740(\uB294) \uC601\uBB38/\uC22B\uC790/\uD2B9\uC218\uBB38\uC790 \uC870\uD569 10~20\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.
errors.duplicate={0}\uC740(\uB294) \uC774\uBBF8 \uC0AC\uC6A9\uC911\uC785\uB2C8\uB2E4.
errors.id={0}\uC740(\uB294) \uC601\uBB38/\uC22B\uC790\uB9CC\uC73C\uB85C 6~20\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.
errors.boardId={0}\uC740(\uB294) \uC601\uBB38/\uC22B\uC790/\uC5B8\uB354\uC2A4\uCF54\uC5B4(_)/\uD558\uC774\uD508(-)\uB9CC \uC0AC\uC6A9\uD558\uC5EC 6~30\uC790\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.
error.ajax=Ajax \uC2E4\uD589\uB3C4\uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD558\uC600\uC2B5\uB2C8\uB2E4.
#\uC791\uC5C5 \uC131\uACF5\uC2DC \uCD9C\uB825 \uBA54\uC2DC\uC9C0
success.request.msg = \uC694\uCCAD\uCC98\uB9AC\uAC00 \uC131\uACF5\uC801\uC73C\uB85C \uC218\uD589\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.select=\uC815\uC0C1\uC801\uC73C\uB85C \uC870\uD68C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.insert=\uC815\uC0C1\uC801\uC73C\uB85C \uB4F1\uB85D\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.update=\uC815\uC0C1\uC801\uC73C\uB85C \uC218\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.copy=\uC815\uC0C1\uC801\uC73C\uB85C \uBCF5\uC0AC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.copyInsert=\uC815\uC0C1\uC801\uC73C\uB85C \uBCF5\uC0AC\uC7AC\uB4F1\uB85D\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.save=\uC815\uC0C1\uC801\uC73C\uB85C \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.delete=\uC815\uC0C1\uC801\uC73C\uB85C \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.apply=\uC815\uC0C1\uC801\uC73C\uB85C \uC2E0\uCCAD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.ordr=\uC815\uC0C1\uC801\uC73C\uB85C \uC8FC\uBB38 \uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.refund=\uC815\uC0C1\uC801\uC73C\uB85C \uBC18\uD488\uC2E0\uCCAD \uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.common.process=\uC815\uC0C1\uC801\uC73C\uB85C \uCC98\uB9AC \uB418\uC5C8\uC2B5\uB2C8\uB2E4.
success.duplicate={0}\uC740(\uB294) \uC0AC\uC6A9 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
#\uC791\uC5C5 \uC2E4\uD328\uC2DC \uCD9C\uB825 \uBA54\uC2DC\uC9C0
fail.common.apply = \uC2E0\uCCAD\uC5D0 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.insert = \uB4F1\uB85D\uC774 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.update = \uC218\uC815\uC774 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.copy = \uBCF5\uC0AC\uAC00 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.copyInsert = \uC815\uC0C1\uC801\uC73C\uB85C \uBCF5\uC0AC\uC7AC\uB4F1\uB85D\uC774 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.save = \uC800\uC7A5\uC774 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.delete = \uC0AD\uC81C\uAC00 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.delete.upperMenuExist = \uCC38\uC870\uB418\uB294 \uBA54\uB274\uAC00 \uC788\uC5B4 \uC0AD\uC81C\uAC00 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.select = \uC870\uD68C\uC5D0 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.login = \uB85C\uADF8\uC778 \uC815\uBCF4\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
fail.common.loginIncorrect = {0}\uD68C \uC774\uC0C1 \uB85C\uADF8\uC778 \uC811\uC18D\uC774 \uC2DC\uB3C4 \uB418\uC5B4 \uACC4\uC815\uC774 \uC7A0\uACA8\uC2B5\uB2C8\uB2E4!
fail.common.login.password = \uD328\uC2A4\uC6CC\uB4DC \uC790\uB9AC \uC218\uAC00 \uC77C\uCE58 \uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.(8\uC790\uB9AC \uC774\uC0C1 20\uC790\uB9AC \uC774\uD558)
fail.common.idsearch = \uC544\uC774\uB514\uB97C \uCC3E\uC744\uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
fail.common.pwsearch = \uBE44\uBC00\uBC88\uD638\uB97C \uCC3E\uC744\uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
fail.common.pwMatch = \uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
fail.request.msg = \uC694\uCCAD\uCC98\uB9AC\uB97C \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
fail.common.login.ip = \uB4F1\uB85D\uB41C IP\uAC00 \uC544\uB2C8\uBBC0\uB85C \uB85C\uADF8\uC778\uC774 \uAC70\uBD80\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
fail.common.ordr=\uC8FC\uBB38\uC774 \uC2E4\uD328\uD558\uC5C8\uC2B5\uB2C8\uB2E4.
fail.common.refund=\uBC18\uD488\uC2E0\uCCAD\uC774 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4.
#confirm \uACF5\uD1B5 \uBA54\uC2DC\uC9C0
confirm.common.predicate = \uB4F1\uB85D\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
confirm.common.insert = \uB4F1\uB85D\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
confirm.common.update = \uC218\uC815\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
confirm.common.save = \uC800\uC7A5\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
confirm.common.delete = \uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
confirm.common.apply = \uC2E0\uCCAD\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
confirm.common.copy = \uBCF5\uC0AC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
confirm.common.copyInsert = \uBCF5\uC0AC\uC7AC\uB4F1\uB85D\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
confirm.common.cancel = \uCDE8\uC18C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
#\uACF5\uD1B5\uBA54\uC2DC\uC9C0
common.nodata = \uC870\uD68C\uB41C \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--Mybatis 설정 -->
<settings>
<!-- 전통적인 데이터베이스 컬럼명 형태인 A_COLUMN을 CamelCase형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함 -->
<setting name="mapUnderscoreToCamelCase" value="true"></setting>
<!-- 파라미터에 Null 값이 있을 경우 에러 처리 -->
<setting name="jdbcTypeForNull" value="VARCHAR"></setting>
<setting name="callSettersOnNulls" value="true"/>
</settings>
<!-- Type Aliases 설정-->
<typeAliases>
<typeAlias alias="dataMap" type="com.wb.domainserver.util.dataaccess.DataMap" />
</typeAliases>
</configuration>

View File

@@ -0,0 +1,81 @@
<?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.wb.domainserver.domain.auth.mapper.AuthMapper">
<select id="selectUserAuthor" parameterType="com.wb.domainserver.domain.auth.vo.AuthVO">
SELECT COUNT(*)
FROM GC_AUTH GA
INNER JOIN GC_AUTH_FNCT GAF
ON GA.AUTHOR_ID = GAF.AUTHOR_ID
INNER JOIN GC_FNCT GF
ON GAF.FNCT_ID = GF.FNCT_ID
AND GF.USE_AT = 'Y'
AND GF.SYS_DV_CD = '01'
AND GF.FNCT_URI = #{uri}
WHERE 1 = 1
AND GA.SYS_DV_CD = '01'
AND GA.USE_AT = 'Y'
AND GA.AUTHOR_ID = 1 -- 사용자 권한 고정 셋팅 값
</select>
<!--관리자 > 접근 가능한 쇼핑몰 리스트 조회-->
<select id="selectAuthorSopmalList" parameterType="com.wb.domainserver.domain.auth.vo.AuthVO" resultType="java.lang.String">
SELECT DISTINCT GMA.SOPMAL_CD
FROM GC_MANAGER GM
INNER JOIN GC_MANAGER_AUTH GMA
ON GM.MNGR_INNB = GMA.MNGR_INNB
INNER JOIN GC_SHOP GS
ON GMA.SOPMAL_CD = GS.SOPMAL_CD
WHERE GM.MNGR_INNB = #{mngrInnb}
AND GM.MNGR_STTUS_CD = '01'
ORDER BY GMA.SOPMAL_CD ASC
</select>
<!--관리자 > 쇼핑몰 페이지 권한 여부-->
<select id="selectAuthorSiteAt" parameterType="com.wb.domainserver.domain.auth.vo.AuthVO" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM GC_MANAGER GM
INNER JOIN GC_MANAGER_AUTH GMA
ON GM.MNGR_INNB = GMA.MNGR_INNB
AND GMA.SOPMAL_CD = #{sopmalCd}
INNER JOIN GC_AUTH GA
ON GMA.AUTHOR_ID = GA.AUTHOR_ID
AND GA.USE_AT = 'Y'
INNER JOIN GC_AUTH_FNCT GAF
ON GA.AUTHOR_ID = GAF.AUTHOR_ID
INNER JOIN GC_FNCT GF
ON GAF.FNCT_ID = GF.FNCT_ID
AND GF.USE_AT = 'Y'
AND GF.SYS_DV_CD = #{sysDvCd}
AND GF.FNCT_URI = #{fnctUri}
WHERE GM.MNGR_INNB = #{mngrInnb}
AND GM.MNGR_STTUS_CD = '01'
</select>
<!--인트라넷 > 인트라넷 페이지 권한 여부-->
<select id="selectItrntAuthorSiteAt" parameterType="com.wb.domainserver.domain.auth.vo.AuthVO" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM GC_STORE GS
INNER JOIN GC_STR_AUTH GSA
ON GS.STR_INNB = GSA.STR_INNB
INNER JOIN GC_AUTH GA
ON GSA.AUTHOR_ID = GA.AUTHOR_ID
AND GA.USE_AT = 'Y'
INNER JOIN GC_AUTH_FNCT GAF
ON GA.AUTHOR_ID = GAF.AUTHOR_ID
INNER JOIN GC_FNCT GF
ON GAF.FNCT_ID = GF.FNCT_ID
AND GF.USE_AT = 'Y'
AND GF.SYS_DV_CD = #{sysDvCd}
AND GF.FNCT_URI = #{fnctUri}
WHERE 1=1
AND GS.STR_INNB = #{mngrInnb}
AND GS.REPRSNT_BRAND = #{reprsntBrand} -- 대표브랜드명
<if test="tentGroup == '02'">
AND GS.STR_OPER_DV = #{strOperDv} -- 매장운영구분
</if>
AND GS.TENT_GROUP = #{tentGroup} -- 본사(01) 입점사(02)구분
</select>
</mapper>

View File

@@ -0,0 +1,220 @@
<?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.wb.domainserver.domain.frstlogin.mapper.FrstLoginMapper">
<!--비회원 -> 회원 로그인시 장바구니 정보 조회-->
<select id="selectSpbkSesionToMbr" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
SELECT
CART_INNB,
OPTN_TY,
SOPMAL_CD,
GOODS_OPTN_INNB,
GOODS_INNB,
MBR_INNB,
SESION_ID,
CART_DV_CD,
AGENT_ID,
IP,
CNT,
REGUSR,
REGIST_DT,
MBR_DV_CD,
INPUT_OPTN_CN,
INPUT_OPTN_RELATE_NB
FROM
GC_CART GC
WHERE
1 = 1
AND GC.SOPMAL_CD = #{sopmalCd}
AND GC.SESION_ID = #{sesionId}
</select>
<!--회원 -> 장바구니 정보 조회-->
<select id="selectSpbkMbr" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
SELECT
CART_INNB,
OPTN_TY,
SOPMAL_CD,
GOODS_OPTN_INNB,
GOODS_INNB,
MBR_INNB,
SESION_ID,
CART_DV_CD,
AGENT_ID,
IP,
CNT,
REGUSR,
REGIST_DT,
MBR_DV_CD,
INPUT_OPTN_CN,
INPUT_OPTN_RELATE_NB
FROM
GC_CART GC
WHERE
1 = 1
AND GC.SOPMAL_CD = #{sopmalCd}
AND GC.MBR_INNB = #{mbrInnb}
AND GC.MBR_DV_CD = #{mbrDvCd}
</select>
<!--비회원 -> 회원 로그인시 장바구니 정보 등록-->
<insert id="insertSpbkSesionToMbr" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
<selectKey keyProperty="cartInnb" resultType="BigInteger" order="BEFORE">
SELECT IFNULL(MAX(CART_INNB), 0) + 1
FROM GC_CART
</selectKey>
INSERT INTO GC_CART
(
CART_INNB,
OPTN_TY,
SOPMAL_CD,
GOODS_OPTN_INNB,
GOODS_INNB,
MBR_INNB,
SESION_ID,
CART_DV_CD,
AGENT_ID,
IP,
CNT,
REGUSR,
REGIST_DT,
MBR_DV_CD,
INPUT_OPTN_CN,
INPUT_OPTN_RELATE_NB
)
VALUES(
#{cartInnb}
, #{optnTy}
, #{sopmalCd}
, #{goodsOptnInnb}
, #{goodsInnb}
, #{mbrInnb}
, ''
, #{cartDvCd}
, #{agentId}
, #{ip}
, #{cnt}
, #{regusr}
, SYSDATE()
, #{mbrDvCd}
, #{inputOptnCn}
, #{inputOptnRelateNb}
)
ON DUPLICATE KEY UPDATE UPDT_DT = SYSDATE(), UPDUSR = #{regusr}
</insert>
<!--비회원 -> 회원 로그인시 회원 선택구매상태 상품 장바구니로 변경-->
<update id="updatePurchsSpbkMbr" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
UPDATE
GC_CART GC
SET
GC.CART_DV_CD = '01'
WHERE
1 = 1
AND GC.SOPMAL_CD = #{sopmalCd}
AND GC.MBR_INNB = #{mbrInnb}
AND GC.CART_DV_CD = '03'
</update>
<!--비회원 -> 회원 로그인시 세션 장바구니 상품 삭제-->
<delete id="deletePurchsSpbkSesion" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
DELETE
FROM
GC_CART GC
WHERE
1 = 1
AND GC.SOPMAL_CD = #{sopmalCd}
AND GC.SESION_ID = #{sesionId}
</delete>
<!--비회원 -> 회원 로그인시 장바구니 회원 구매하기 상태 상품 삭제-->
<delete id="deletePurchsSpbkMbr" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
DELETE
FROM
GC_CART GC
WHERE
1 = 1
AND GC.SOPMAL_CD = #{sopmalCd}
AND GC.MBR_INNB = #{mbrInnb}
<if test="@ com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(cartDvCd)">
AND GC.CART_DV_CD = #{cartDvCd}
</if>
</delete>
<!--비회원 -> 회원 로그인시 비밀번호 변경일 기준 6개월 경과 회원 여부-->
<select id="selectPasswordChngDeAt" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
SELECT
COUNT(*)
FROM
GC_MEMBER GM
LEFT JOIN GC_MEMBER_GRAD_MAPPING GMGM
ON GM.MBR_INNB = GMGM.MBR_INNB
AND GM.MBR_DV_CD = GMGM.MBR_DV_CD
WHERE 1 = 1
AND GMGM.SOPMAL_CD = #{sopmalCd}
AND GM.MBR_INNB = #{mbrInnb}
AND GM.MBR_DV_CD = #{mbrDvCd}
AND GM.JOIN_MTH_CD = 'none' -- 일반회원가입 대상
AND CASE WHEN IFNULL(PASSWORD_CNFIRM_DE, '') = '' THEN -- 비밀번호 재확인일지가 빈값이면
CASE
WHEN GM.PASSWORD_CHNG_DE <![CDATA[<=]]> DATE_SUB(NOW(), INTERVAL #{passwordChngDe} MONTH) THEN 'Y' -- 비밀번호 변경일이 지났으면 비밀번호 변경해야함
ELSE 'N' END
ELSE
CASE
WHEN GM.PASSWORD_CHNG_DE <![CDATA[<=]]> DATE_SUB(NOW(), INTERVAL #{passwordChngDe} MONTH) -- 비밀번호 변경일도 지나고 비밀번호 재확인일자도 지났으면 변경해야함
AND PASSWORD_CNFIRM_DE <![CDATA[<=]]> NOW() THEN 'Y'
ELSE 'N' END
END = 'Y'
</select>
<!--쇼핑몰명 조회-->
<select id="selectshopmalName" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
SELECT
SOPMAL_NM
FROM
GC_SHOP GS
WHERE
1 = 1
AND GS.SOPMAL_CD = #{sopmalCd}
</select>
<insert id="insertMemberLogin" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
INSERT INTO GC_MEMBER_LOGIN (
CONECT_LOG_INNB,
MBR_INNB,
SOPMAL_CD,
MBR_DV_CD,
AGENT_ID,
SESION_ID,
IP,
CONECT_ENVRN_DV,
CONECT_DOMN,
JOIN_MTH_CD,
REGIST_DT
)
VALUES (
#{conectLogInnb},
#{mbrInnb},
#{sopmalCd},
#{mbrDvCd},
#{agentId},
#{sesionId},
#{ip},
#{conectEnvrnDv},
#{conectDomn},
#{joinMthCd},
NOW()
)
</insert>
<!--마케팅수신동의 여부 조회 -->
<select id="selectMemMarktAgree" parameterType="com.wb.domainserver.domain.frstlogin.vo.FrstLoginVO">
SELECT CASE WHEN COUNT(*) = 0 THEN 1 ELSE 0 END AS marktAgreAt
FROM GC_MARKETING_AGREE
WHERE 1 = 1
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
</select>
</mapper>

View File

@@ -0,0 +1,156 @@
<?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.wb.domainserver.domain.log.mapper.LogMapper">
<!-- 사용자 접속로그 등록 -->
<insert id="insertAccessLog" parameterType="com.wb.domainserver.domain.log.vo.AccessLogVO">
INSERT INTO GC_ACCESS_LOG2
(
SOPMAL_CD,
AGENT_ID,
SESION_ID,
MBR_INNB,
MENU_GROUP,
MENU,
REQST_MTH,
AD_TRACE_CD,
IP,
CONECT_ENVRN_DV,
CONECT_DOMN,
CONECT_URL,
REQST_DATA,
REFERER,
REFERER_DOMN,
CONECT_INTRCP,
REGIST_DE,
REGIST_HMS,
TEMP_COL1
)
VALUES(
#{sopmalCd}
,#{agentId}
,#{sesionId}
,#{mbrInnb}
,#{menuGroup}
,#{menu}
,#{reqstMth}
,#{adTraceCd}
,#{ip}
,#{conectEnvrnDv}
,#{conectDomn}
,#{conectUrl}
,#{reqstData}
,#{referer}
,#{refererDomn}
,#{conectIntrcp}
,CURDATE()
,CURTIME()
,#{userAgent}
)
</insert>
<!--일일 상품 조회 로그 등록-->
<insert id="insertGoodsInqireLog" parameterType="com.wb.domainserver.domain.log.vo.AccessLogVO">
INSERT INTO GC_GOODS_INQIRE_LOG
(
SOPMAL_CD,
GOODS_INNB,
GOODS_NM,
AGENT_ID,
SESION_ID,
IP,
MBR_INNB,
MBR_DV_CD,
AD_TRACE_CD,
REGIST_DT
)
VALUES
(
#{sopmalCd},
#{goodsInnb},
#{goodsNm},
#{agentId},
#{sesionId},
#{ip},
#{mbrInnb},
#{mbrDvCd},
#{adTraceCd},
SYSDATE()
)
</insert>
<!-- 관리자 접속로그 등록 -->
<insert id="insertMngrAccessLog" parameterType="com.wb.domainserver.domain.log.vo.MngrAccessLogVo">
INSERT INTO GC_MNGR_ACCESS_LOG
(
SOPMAL_CD,
AGENT_ID,
SESION_ID,
MNGR_TY_CD,
MNGR_INNB,
CONECT_LOG_DV_CD,
MENU_GROUP,
MENU,
REQST_MTH,
IP,
CONECT_ENVRN_DV,
CONECT_DOMN,
CONECT_URL,
REQST_DATA,
REGIST_DE,
REGIST_HMS
)
VALUES(
#{sopmalCd}
,#{agentId}
,#{sesionId}
,#{mngrTyCd}
,#{mngrInnb}
,#{conectLogDvCd}
,#{menuGroup}
,#{menu}
,#{reqstMth}
,#{ip}
,#{conectEnvrnDv}
,#{conectDomn}
,#{conectUrl}
,#{reqstData}
,CURDATE()
,CURTIME()
)
</insert>
<!-- API 호출 로그 -->
<insert id="insertMngrApiAccessLog">
INSERT INTO GC_API_ACCESS_LOG
(
SOPMAL_CD,
AGENT_ID,
SESION_ID,
REQST_MTH,
IP,
CONECT_ENVRN_DV,
CONECT_URL,
REQST_DATA,
SUCCESS_YN,
ERROR_CODE,
RESPONSE_DATA,
REGIST_DT
)
VALUES(
#{sopmalCd}
,#{agentId}
,#{sesionId}
,#{reqstMth}
,#{ip}
,#{conectEnvrnDv}
,#{conectUrl}
,#{reqstData}
,#{successYn}
,#{errorCode}
,#{responseData}
,NOW()
)
</insert>
</mapper>

View File

@@ -0,0 +1,23 @@
<?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.wb.domainserver.domain.sopmal.oauth.mapper.UserMapper">
<!--외부연동 조회-->
<select id="findExtrlUser" resultType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
SELECT GM.MBR_INNB AS USER_INNB
, GM.MBR_ID AS USER_ID
, GM.MBR_DV_CD
, GM.MBR_NM AS USER_NAME
, GM.MBTLNB
, GM.MBR_PASSWORD AS PASSWORD
, GM.MBR_DV_CD AS SOPMAL_CD
, '01' AS SYS_DV_CD
FROM GC_EXTRL_MEMBER GEM
INNER JOIN GC_MEMBER GM
ON GEM.MBR_INNB = GM.MBR_INNB
AND GEM.MBR_DV_CD = GM.MBR_DV_CD
WHERE GEM.EXTRL_INTRLCK_ID = #{id}
AND GEM.MBR_NM = #{name}
AND GEM.EXTRL_INTRLCK_DV_CD = #{extrlIntrlckDvCd}
</select>
</mapper>

View File

@@ -0,0 +1,14 @@
<?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.wb.domainserver.domain.oper.mapper.OperMapper">
<select id="selectMainOperAt" parameterType="com.wb.domainserver.domain.oper.vo.OperVO">
SELECT
OPER_AT,
CSC_TELNB,
RPLC_URL
FROM GC_SHOP GS
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
</select>
</mapper>

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2015-2022 the original author or authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wb.domainserver.security.user.SecurityUserMapper">
<!-- sopmal에 추가함-->
<!-- <select id="loadUserByUsername" parameterType="String" resultType="Map">-->
<!-- SELECT TB_USER.mbr_password as password, TB_AUTHORITY.role, TB_USER.mbr_innb as innb, TB_USER.MBR_NM as nm-->
<!-- FROM GC_MEMBER AS TB_USER INNER JOIN (-->
<!-- SELECT `user`, GROUP_CONCAT(name) AS 'role' FROM AUTHORITY GROUP BY user-->
<!-- ) AS TB_AUTHORITY ON TB_USER.mbr_innb = TB_AUTHORITY.`user`-->
<!-- WHERE TB_USER.mbr_id = #{username}-->
<!-- AND TB_USER.mbr_dv_cd = #{mbrDvCd}-->
<!-- </select>-->
<select id="loadUserByManagername" parameterType="String" resultType="Map">
SELECT TB_USER.password, TB_AUTHORITY.role, TB_USER.mngr_innb as innb, TB_USER.MNGR_NM as nm
FROM GC_MANAGER AS TB_USER INNER JOIN (
SELECT `user`, GROUP_CONCAT(name) AS 'role' FROM AUTHORITY GROUP BY user
) AS TB_AUTHORITY ON TB_USER.mngr_innb = TB_AUTHORITY.`user`
WHERE TB_USER.mngr_id = #{username}
</select>
<select id="getGrantType" parameterType="String" resultType="String">
SELECT authorization_grant_type, oidc_id_token_value
FROM OAUTH2_AUTHORIZATION
WHERE ACCESS_TOKEN_VALUE = #{token}
</select>
<select id="getAvailablePathList" parameterType="String" resultType="String">
SELECT B.FNCT_URL
FROM
(
SELECT FM.MNGR_ID ,FM.MNGR_INNB, FMA.MNGR_AUTHOR_INNB, FMA.AUTHOR_GROUP_CD
FROM GC_MANAGER FM
INNER JOIN GC_MANAGER_AUTH FMA
ON FM.MNGR_INNB = FMA.MNGR_INNB
INNER JOIN GC_AUTH_GROUP FAG
ON FMA.AUTHOR_GROUP_CD = FAG.AUTHOR_GROUP_CD
WHERE FAG.USE_AT = 'Y'
) A
INNER JOIN
(
SELECT FMF.FNCT_CD, FMF.FNCT_URL, FAF.AUTHOR_GROUP_CD
FROM GC_MENU_FNCT FMF
INNER JOIN GC_AUTH_FNCT FAF
ON FMF.FNCT_CD = FAF.FNCT_CD
INNER JOIN GC_AUTH_GROUP FAG
ON FAF.AUTHOR_GROUP_CD = FAG.AUTHOR_GROUP_CD
WHERE FAG.USE_AT = 'Y'
AND FMF.USE_AT = 'Y'
) B
ON A.AUTHOR_GROUP_CD = B.AUTHOR_GROUP_CD
WHERE A.MNGR_ID = #{username}
</select>
<select id="loadUsernameByToken" parameterType="Map" resultType="String">
SELECT MBR_ID
FROM OAUTH2_SINGLE_SGIN_ON
WHERE ACCESS_TOKEN_VALUE = #{token}
AND MBR_DV_CD = #{mbrDvCd}
</select>
<!-- sopmall 추가 시작-->
<select id="loadUserByUsername" parameterType="Map" resultType="Map">
SELECT TB_USER.MBR_PASSWORD AS PASSWORD
, TB_AUTHORITY.ROLE
FROM GC_MEMBER AS TB_USER
INNER JOIN (SELECT `user`, GROUP_CONCAT(NAME) AS 'role'
FROM authority
GROUP BY USER) AS TB_AUTHORITY
ON TB_USER.MBR_INNB = TB_AUTHORITY.`user`
WHERE TB_USER.MBR_ID = #{username}
AND TB_USER.MBR_DV_CD = #{mbrDvCd}
</select>
<select id="validateAccessToken" parameterType="com.wb.domainserver.security.jwt.vo.TokenInfo" resultType="java.lang.Boolean">
SELECT IF(COUNT(*) > 0, 0, 1) AS VALID_AT
FROM TOKEN
WHERE ACCESS_TOKEN = #{accessToken}
AND REALM = #{realm}
AND USER_INNB = #{userInnb}
</select>
<!-- sopmall 추가 종료-->
</mapper>

View File

@@ -0,0 +1,81 @@
<?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.wb.domainserver.security.jwt.mapper.TokenMapper">
<!--토큰정보조회-->
<select id="selectToken" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginUser"
resultType="com.wb.domainserver.security.jwt.vo.TokenInfo">
<![CDATA[
SELECT REALM
, USER_INNB
, ACCESS_TOKEN
, REFRESH_TOKEN
, CREATED_AT
, EXPIRES_AT AS REFRESH_EXPIRES_AT
, IF(EXPIRES_AT >= NOW(), 'N' , 'Y') AS EXPIRED_AT
, LAST_ACCESSED_TIME
FROM TOKEN
WHERE 1 = 1
AND USER_INNB = #{userInnb}
AND REALM = #{realm}
]]>
</select>
<!--refresh token 유효 여부 조회-->
<select id="selectRefreshToken" parameterType="com.wb.domainserver.security.jwt.vo.TokenInfo"
resultType="com.wb.domainserver.security.jwt.vo.TokenInfo">
<![CDATA[
SELECT REALM
, USER_INNB
, ACCESS_TOKEN
, REFRESH_TOKEN
, CREATED_AT
, EXPIRES_AT AS REFRESH_EXPIRES_AT
, IF(EXPIRES_AT >= NOW(), 'N' , 'Y') AS EXPIRED_AT
, LAST_ACCESSED_TIME
FROM TOKEN
WHERE 1 = 1
AND USER_INNB = #{userInnb}
AND REALM = #{realm}
AND REFRESH_TOKEN = #{refreshToken}
AND EXPIRES_AT >= NOW()
]]>
</select>
<!--토큰정보저장-->
<select id="insertToken" parameterType="com.wb.domainserver.security.jwt.vo.TokenInfo">
INSERT INTO TOKEN (
USER_INNB
, REALM
, ACCESS_TOKEN
, REFRESH_TOKEN
, CREATED_AT
, EXPIRES_AT
, LAST_ACCESSED_TIME
)
VALUES (
#{userInnb}
, #{realm}
, #{accessToken}
, #{refreshToken}
, NOW()
, #{refreshExpiresAt}
, NOW()
)
</select>
<!--토큰정보수정-->
<select id="updateToken" parameterType="com.wb.domainserver.security.jwt.vo.TokenInfo">
UPDATE TOKEN SET
ACCESS_TOKEN = #{accessToken}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(refreshToken)">
, REFRESH_TOKEN = #{refreshToken}
</if>
, EXPIRES_AT = #{refreshExpiresAt}
, LAST_ACCESSED_TIME = NOW()
WHERE 1=1
AND USER_INNB = #{userInnb}
AND REALM = #{realm}
</select>
</mapper>

View File

@@ -0,0 +1,890 @@
<?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.wb.domainserver.domain.admin.instcSle.mtng.mapper.BOMaMtngMapper">
<sql id = "mtngWhere">
<!-- 검색어 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStr)">
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'ID')">
AND FM.MBR_ID = #{srchStr}
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'NAME')">
AND FM.MBR_NM = #{srchStr}
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'ADRES')">
AND FMA.IDNTFC_INFO LIKE CONCAT('%',#{srchStr},'%')
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'AGENT')">
AND FMA.IDNTFC_INFO LIKE CONCAT('%',#{srchStr},'%')
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'MBTLNB')">
AND FMA.IDNTFC_INFO = HEX(AES_ENCRYPT(#{srchStr} , #{secretKey}))
</when>
</choose>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchIdntfcDvCd)">
AND FMA.IDNTFC_STDR_CD IN
<foreach item="srchIdntfcDvCd" collection="srchIdntfcDvCd" open="(" separator="," close=")">
#{srchIdntfcDvCd}
</foreach>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchShop)">
AND FMA.SOPMAL_CD = #{srchShop}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchAppn)">
AND FMA.APPN_DV_CD = #{srchAppn}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtRegDt)">
AND FMA.REGIST_DT <![CDATA[>=]]> #{srchStrtRegDt}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndRegDt)">
AND FMA.REGIST_DT <![CDATA[<]]> #{srchEndRegDt}
</if>
</sql>
<!--부정판매 회원 건수 조회-->
<select id="selectItcSleMtngTotCnt"
parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngSrchVO"
resultType="java.lang.Integer">
SELECT COUNT(1)
FROM(SELECT FMA.APPN_INNB
FROM GC_MEMBER_APPN FMA
LEFT JOIN GC_MEMBER FM
ON FMA.IDNTFC_INFO = FM.MBR_INNB
AND FMA.MBR_DV_CD = FM.MBR_DV_CD
AND FMA.IDNTFC_STDR_CD = 'mbr_innb'
LEFT JOIN GC_MEMBER_GRAD_MAPPING FMGM
ON FMGM.MBR_INNB = FM.MBR_INNB
AND FMGM.MBR_DV_CD = FM.MBR_DV_CD
AND FMGM.SOPMAL_CD = FMA.SOPMAL_CD
LEFT JOIN GC_MEMBER_GRAD FMG
ON FMG.MBR_GRAD_INNB = FMGM.MBR_GRAD_INNB
AND FMG.SOPMAL_CD = FMGM.SOPMAL_CD
WHERE 1=1
<include refid="mtngWhere"/>
) TB
</select>
<!--부정판매 회원 목록 조회-->
<select id="selectItcSleMtngList"
parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngSrchVO"
resultType="dataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,TB.*
FROM(SELECT DATE_FORMAT(FMA.REGIST_DT, '%Y-%m-%d %H:%i:%s')AS REGIST_DT
,FMA.SOPMAL_CD
,(SELECT FS.SOPMAL_NM FROM GC_SHOP FS WHERE FS.SOPMAL_CD = FMA.SOPMAL_CD)SOPMAL_NM
,fn_get_commcode_name("RSLR_APPN_DV",FMA.APPN_DV_CD)APPN_DV_CD_NM
,fn_get_commcode_name("IDNTFC_STDR",FMA.IDNTFC_STDR_CD)IDNTFC_STDR_CD_NM
,FMA.IDNTFC_STDR_CD
,fn_get_commcode_name("ORIGIN_DV",FMA.ORIGIN_DV_CD)ORIGIN_DV_CD_NM
,CASE
WHEN FMA.IDNTFC_STDR_CD = 'order_mbtlnb' THEN CAST(AES_DECRYPT(UNHEX(FMA.IDNTFC_INFO) , #{secretKey}) AS CHAR(50))
ELSE FMA.IDNTFC_INFO
END IDNTFC_INFO
,FM.MBR_ID
,FM.MBR_DV_CD
,FM.MBR_NM
,FMA.APPN_DV_CD
,FMA.ORIGIN_DV_CD
,FMA.MBR_IDNTFC_INFO
,FMA.APPN_INNB
FROM GC_MEMBER_APPN FMA
LEFT JOIN GC_MEMBER FM
ON FMA.IDNTFC_INFO = FM.MBR_INNB
AND FMA.MBR_DV_CD = FM.MBR_DV_CD
AND FMA.IDNTFC_STDR_CD = 'mbr_innb'
LEFT JOIN GC_MEMBER_GRAD_MAPPING FMGM
ON FMGM.MBR_INNB = FM.MBR_INNB
AND FMGM.MBR_DV_CD = FM.MBR_DV_CD
AND FMGM.SOPMAL_CD = FMA.SOPMAL_CD
LEFT JOIN GC_MEMBER_GRAD FMG
ON FMG.MBR_GRAD_INNB = FMGM.MBR_GRAD_INNB
AND FMG.SOPMAL_CD = FMGM.SOPMAL_CD
WHERE 1=1
<include refid="mtngWhere"/>
ORDER BY FMA.REGIST_DT DESC ,FMA.APPN_INNB DESC
) TB
WHERE (@rownum:=0)=0
) PV
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!--부정 판매 대상자 지정 이력 건수-->
<select id="selectBOItcSleMtngDtlTotCnt"
parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngVO"
resultType="java.lang.Integer">
SELECT COUNT(1)
FROM (SELECT MAL.APPN_INNB
FROM GC_MEMBER_APPN_LOG MAL
INNER JOIN GC_SHOP FS
ON FS.SOPMAL_CD = MAL.SOPMAL_CD
LEFT OUTER JOIN GC_MANAGER FM
ON FM.MNGR_INNB = MAL.REGUSR
WHERE MAL.MBR_IDNTFC_INFO=#{idntfcInfo})A
</select>
<!--부정 판매 대상자 지정 이력 -->
<select id="selectBOItcSleMtngDtlInqire"
parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,TB.*
FROM (SELECT MAL.APPN_INNB
,DATE_FORMAT(MAL.REGIST_DT, '%Y-%m-%d %H:%i:%S') AS REGIST_DT
,fn_get_commcode_name("RSLR_APPN_DV",MAL.APPN_DV_CD)AS APPN_DV_CD_NM
,MAL.APPN_MEMO
,FS.SOPMAL_NM
,IFNULL(FM.MNGR_NM,'시스템') AS MNGR_NM
,IFNULL(FM.MNGR_ID,'SYSTEM') AS MNGR_ID
FROM GC_MEMBER_APPN_LOG MAL
INNER JOIN GC_SHOP FS
ON FS.SOPMAL_CD = MAL.SOPMAL_CD
LEFT OUTER JOIN GC_MANAGER FM
ON FM.MNGR_INNB = MAL.UPDUSR
WHERE MAL.MBR_IDNTFC_INFO=#{idntfcInfo}
ORDER BY MAL.APPN_LOG_INNB DESC
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!--부정 판매 대상자 지정 이력 건수-->
<select id="selectBOItcSleOrdrInfoTotCnt"
parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngVO"
resultType="java.lang.Integer">
SELECT COUNT(1)
FROM (SELECT FO.ORDR_INNB
, fn_get_commcode_name("ORDR_STTUS", FO.ORDR_STTUS_CD) AS ORDR_STTUS_NM
, DATE_FORMAT(FO.ORDR_RCEPT_DT, '%Y-%m-%d %H:%i:%S') AS ORDR_RCEPT_DT
, fn_get_commcode_name("SLE_ENVRN", FO.SLE_ENVRN_CD) AS SLE_ENVRN_NM
, (FO.RL_SETLE_AMT + FO.ENURI_AMT) AS SETLE_AMT
, FS.SOPMAL_NM
, MAX(FOI.GOODS_NM) AS GOODS_NM
, COUNT(DISTINCT FOI.GOODS_INNB) AS CNT /*주문상품 동일 상품 중복 제거 종류 개수*/
, (COUNT(DISTINCT FOI.GOODS_INNB) - 1) AS MINUS_CNT
, SUM(FOIO.ORDR_QY) AS GOODS_SUM
FROM GC_ORDER FO
INNER JOIN GC_SHOP FS
ON FO.SOPMAL_CD = FS.SOPMAL_CD
INNER JOIN GC_ORDER_ITEM FOI
ON FO.SOPMAL_CD = FOI.SOPMAL_CD
AND FO.ORDR_INNB = FOI.ORDR_INNB
INNER JOIN GC_ORDER_ITEM_OPTION FOIO
ON FOI.SOPMAL_CD = FOIO.SOPMAL_CD
AND FOI.ORDR_GOODS_INNB = FOIO.ORDR_GOODS_INNB
WHERE FO.MBR_INNB = #{idntfcInfo}
AND FO.MBR_DV_CD = #{mbrDvCd}
AND !(FO.ORDR_STTUS_CD = '99' AND FO.USE_AT = 'Y')
GROUP BY FO.ORDR_INNB
, ORDR_STTUS_NM
, ORDR_RCEPT_DT
, SLE_ENVRN_NM
, SETLE_AMT
, FS.SOPMAL_NM
, FO.RL_SETLE_AMT
, FO.ENURI_AMT
, GOODS_NM) TB
</select>
<!--부정 판매 대상자 지정 이력 -->
<select id="selectBOItcSleOrdrInfoInqire"
parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,tb.*
FROM (SELECT FO.ORDR_INNB
,fn_get_commcode_name("ORDR_STTUS",FO.ORDR_STTUS_CD )AS ORDR_STTUS_NM
,DATE_FORMAT(FO.ORDR_RCEPT_DT, '%Y-%m-%d %H:%i:%S') AS ORDR_RCEPT_DT
,fn_get_commcode_name("SLE_ENVRN",FO.SLE_ENVRN_CD )AS SLE_ENVRN_NM
,(FO.RL_SETLE_AMT + FO.ENURI_AMT) AS SETLE_AMT
,FS.SOPMAL_NM
,MAX(FOI.GOODS_NM)AS GOODS_NM
,COUNT(DISTINCT FOI.GOODS_INNB) AS CNT /*주문상품 동일 상품 중복 제거 종류 개수*/
,(COUNT(DISTINCT FOI.GOODS_INNB)-1) AS MINUS_CNT
,SUM(FOIO.ORDR_QY) AS GOODS_SUM
FROM GC_ORDER FO
INNER JOIN GC_SHOP FS
ON FO.SOPMAL_CD = FS.SOPMAL_CD
INNER JOIN GC_ORDER_ITEM FOI
ON FO.SOPMAL_CD = FOI.SOPMAL_CD
AND FO.ORDR_INNB = FOI.ORDR_INNB
INNER JOIN GC_ORDER_ITEM_OPTION FOIO
ON FOI.SOPMAL_CD = FOIO.SOPMAL_CD
AND FOI.ORDR_GOODS_INNB = FOIO.ORDR_GOODS_INNB
WHERE FO.MBR_INNB = #{idntfcInfo}
AND FO.MBR_DV_CD = #{mbrDvCd}
AND !(FO.ORDR_STTUS_CD = '99' AND FO.USE_AT = 'Y')
GROUP BY FO.ORDR_INNB
,ORDR_STTUS_NM
,ORDR_RCEPT_DT
,SLE_ENVRN_NM
,SETLE_AMT
,FS.SOPMAL_NM
,FO.RL_SETLE_AMT
,FO.ENURI_AMT
,GOODS_NM
ORDER BY FO.ORDR_INNB DESC
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!--주문시 부정 판매 조회-->
<!-- <select id = "checkInstcSle" parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOInstcSleVO" -->
<!-- resultType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOInstcSleVO"> -->
<!-- SELECT CASE -->
<!-- <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrInnb) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrDvCd)"> -->
<!-- WHEN MBR_INNB_CHK <![CDATA[>]]> 0 THEN 'Y' -->
<!-- </if> -->
<!-- <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(agentId)"> -->
<!-- WHEN AGENT_CHK <![CDATA[>]]> 0 THEN 'Y' -->
<!-- </if> -->
<!-- <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrrMbtlnb)"> -->
<!-- WHEN MBTLNB_CHK <![CDATA[>]]> 0 THEN 'Y' -->
<!-- </if> -->
<!-- <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(adres)"> -->
<!-- WHEN ADRES_CHK <![CDATA[>]]> 0 THEN 'Y' -->
<!-- </if> -->
<!-- ELSE 'N' -->
<!-- END AS IS_INSTC_SLE -->
<!-- FROM (SELECT 1 -->
<!-- <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrInnb) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrDvCd)"> -->
<!-- ,SUM(CASE -->
<!-- WHEN GMA.IDNTFC_STDR_CD = 'mbr_innb' AND GMA.IDNTFC_INFO = #{mbrInnb} AND MBR_DV_CD = #{mbrDvCd} THEN 1 -->
<!-- ELSE 0 -->
<!-- END)MBR_INNB_CHK -->
<!-- </if> -->
<!-- <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(agentId)"> -->
<!-- ,SUM(CASE -->
<!-- WHEN GMA.IDNTFC_STDR_CD = 'agent_id' AND GMA.IDNTFC_INFO = #{agentId} THEN 1 -->
<!-- ELSE 0 -->
<!-- END) AGENT_CHK -->
<!-- </if> -->
<!-- <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrrMbtlnb)"> -->
<!-- ,SUM(CASE -->
<!-- WHEN GMA.IDNTFC_STDR_CD = 'order_mbtlnb' AND GMA.IDNTFC_INFO = HEX(AES_ENCRYPT( #{ordrrMbtlnb} , #{secretKey})) THEN 1 -->
<!-- ELSE 0 -->
<!-- END) MBTLNB_CHK -->
<!-- </if> -->
<!-- <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(adres)"> -->
<!-- ,SUM(CASE -->
<!-- WHEN GMA.IDNTFC_STDR_CD = 'adres' AND GMA.IDNTFC_INFO = #{adres} THEN 1 -->
<!-- ELSE 0 -->
<!-- END) ADRES_CHK -->
<!-- </if> -->
<!-- FROM GC_MEMBER_APPN GMA -->
<!-- WHERE (GMA.SOPMAL_CD = 'CM' OR GMA.SOPMAL_CD = #{sopmalCd}) -->
<!-- AND GMA.APPN_DV_CD = #{appnDvCd}) A -->
<!-- </select> -->
<!--주문시 부정 판매 조회-->
<select id = "checkInstcSle" parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOInstcSleVO"
resultType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOInstcSleVO">
SELECT CASE
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrInnb) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrDvCd)">
WHEN MBR_INNB_CHK <![CDATA[>]]> 0 THEN 'Y'
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(agentId)">
WHEN AGENT_CHK <![CDATA[>]]> 0 THEN 'Y'
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrrMbtlnb)">
WHEN MBTLNB_CHK <![CDATA[>]]> 0 THEN 'Y'
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(recpntMbtlnbArr)">
WHEN RECPNT_MBTLNB_CHK <![CDATA[>]]> 0 THEN 'Y'
</if>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(ordrTyCd, '01')
or @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(ordrTyCd, '03')
or @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(ordrTyCd, '06')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(adres)">
WHEN ADRES_CHK <![CDATA[>]]> 0 THEN 'Y'
</if>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(ordrTyCd, '05')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(adresMulti)">
WHEN ADRES_CHK <![CDATA[>]]> 0 THEN 'Y'
</if>
</when>
</choose>
ELSE 'N'
END AS IS_INSTC_SLE
FROM (SELECT 1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrInnb) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrDvCd)">
,SUM(CASE
WHEN GMA.IDNTFC_STDR_CD = 'mbr_innb' AND GMA.IDNTFC_INFO = #{mbrInnb} AND MBR_DV_CD = #{mbrDvCd} THEN 1
ELSE 0
END)MBR_INNB_CHK
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(agentId)">
,SUM(CASE
WHEN GMA.IDNTFC_STDR_CD = 'agent_id' AND GMA.IDNTFC_INFO = #{agentId} THEN 1
ELSE 0
END) AGENT_CHK
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrrMbtlnb)">
,SUM(CASE
WHEN GMA.IDNTFC_STDR_CD = 'order_mbtlnb' AND GMA.IDNTFC_INFO = HEX(AES_ENCRYPT( #{ordrrMbtlnb} , #{secretKey})) THEN 1
ELSE 0
END) MBTLNB_CHK
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(recpntMbtlnbArr)">
,SUM(CASE
<foreach collection="recpntMbtlnbArr" item="recpntMbtlnb">
WHEN GMA.IDNTFC_STDR_CD = 'order_mbtlnb' AND GMA.IDNTFC_INFO = HEX(AES_ENCRYPT( #{recpntMbtlnb} , #{secretKey})) THEN 1
</foreach>
ELSE 0
END) RECPNT_MBTLNB_CHK
</if>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(ordrTyCd, '01')
or @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(ordrTyCd, '03')
or @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(ordrTyCd, '06')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(adres)">
,SUM(CASE
WHEN GMA.IDNTFC_STDR_CD = 'adres' AND GMA.IDNTFC_INFO = #{adres} THEN 1
ELSE 0
END) ADRES_CHK
</if>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(ordrTyCd, '05')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(adresMulti)">
,SUM(
CASE
<foreach collection="adresMulti" item="adres">
WHEN GMA.IDNTFC_STDR_CD = 'adres' AND GMA.IDNTFC_INFO = #{adres} THEN 1
</foreach>
ELSE 0
END) ADRES_CHK
</if>
</when>
</choose>
FROM GC_MEMBER_APPN GMA
WHERE (GMA.SOPMAL_CD = 'CM' OR GMA.SOPMAL_CD = #{sopmalCd})
AND GMA.APPN_DV_CD = #{appnDvCd}) A
LIMIT 1
</select>
<!-- 주문 전 주문정보 재확인 -->
<select id="selectBOPreOrderValidation" parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOPreOrderValidVO" resultType="dataMap">
<![CDATA[
SELECT CASE WHEN GOODS.GOODS_STTUS_CD = '01' THEN 0 ELSE 1 END AS GOODS_STTUS -- 상품상태 정상 확인
, CASE
WHEN GOODS.PURCHS_QY_LMTT_DV_CD = '01'
THEN 0
ELSE CASE WHEN #{goodsTotalQy} BETWEEN GOODS.MUMM_PURCHS_QY AND GOODS.MXMM_PURCHS_QY THEN 0 ELSE 1 END
END AS PURCHS_QY_LMTT -- 상품별 최소 최대 구매수량제한여부
, CASE
WHEN GOODS.INVNTRY_POLICY_CD = '02' THEN 0
ELSE CASE
WHEN (OPTN.INVNTRY_QY - IFNULL(OPTN.USEFUL_INVNTRY_QY, 0)) >= #{qy} THEN 0
ELSE 1 END
END AS INVNTRY -- 각 옵션별 재고 유무
, CASE
WHEN GOODS.INVNTRY_POLICY_CD = '02' THEN 0
ELSE CASE
WHEN (IFNULL(GOODS.REST_INVNTRY_QY, 0) - IFNULL(GOODS.AVLINV_LMTT_QY, 0)) >= #{goodsTotalQy} THEN 0
ELSE 1 END
END AS INVNTRY_POLICY -- 상품별 옵션 수량합산 재고유무
, CASE WHEN IFNULL(OPTN.SLEPRIC, 0) = #{slepric} THEN 0 ELSE 1 END AS SELPRIC -- 판매가 변경여부
, CASE
WHEN OPTN.COMPNB_DSCNT_AT = #{compnbDscntAt} AND OPTN.SCTN_DSCNT_AT = #{sctnDscntAt} THEN 0
ELSE 1 END AS DSCNT_AT -- 구간,복수할인 정보 변경 여부
, CASE WHEN GOODS.DLVY_GROUP_INNB = #{dlvyGroupInnb} THEN 0 ELSE 1 END AS DLVY_GROUP -- 배송그룹 변경여부
, CASE
WHEN GOODS.PURCHS_TRGTER_LMTT_DV_CD = '01' THEN 0
ELSE
CASE
WHEN IFNULL(#{mbrInnb}, 0) = 0 AND GGTL.GOODS_TRGTER_DV_CD = '02' AND (GGTL.BUTTON_RPLC_WORDS_USE_AT = 'Y' OR GGTL.PRIC_RPLC_WORDS_USE_AT = 'Y') THEN 1 -- 비회원 제한 여부
WHEN IFNULL(#{mbrInnb}, 0) != 0 AND GGTL.GOODS_TRGTER_DV_CD = '01' AND GGTL.MBR_GRAD_INNB = 0 AND (GGTL.BUTTON_RPLC_WORDS_USE_AT = 'Y' OR GGTL.PRIC_RPLC_WORDS_USE_AT = 'Y') THEN 1 -- 회원 전체 제한
WHEN IFNULL(#{mbrInnb}, 0) != 0 AND GGTL.GOODS_TRGTER_DV_CD = '01' AND GGTL.MBR_GRAD_INNB = MBR.MBR_GRAD_INNB AND (GGTL.BUTTON_RPLC_WORDS_USE_AT = 'Y' OR GGTL.PRIC_RPLC_WORDS_USE_AT = 'Y') THEN 1 -- 회원 등급별 제한
ELSE 0 END
END AS PURCHS_TRGTER_LMTT -- 구매대상자 제한
, IFNULL(COUPON.COUPON_STTUS, 0) AS COUPON_STTUS -- 쿠폰 상태 확인
, IFNULL(COUPON.COUPON_USE_AT, 0) AS COUPON_USE_AT -- 쿠폰 회수여부 확인
, IFNULL(COUPON.COUPON_VALIDPD_DT, 0) AS COUPON_VALIDPD_DT -- 쿠폰 유효기간 확인
, CASE
WHEN IFNULL(#{evtInnb}, 0) = 0 THEN 0 -- 입력한 이벤트고유번호가 0 or null로 들어올경우 패스
ELSE CASE WHEN IFNULL(EVT.EVT_TRGET_AT, 0) = 1
THEN -- 이벤트 패스되었으나 이벤트구분과 옵션의 할인구분 체크
CASE WHEN (EVT.DSCNT_BNEF_DV_CD = '01' AND OPTN.COMPNB_DSCNT_AT = 'N') OR (EVT.DSCNT_BNEF_DV_CD = '02' AND OPTN.SCTN_DSCNT_AT = 'N') THEN 1 ELSE 0 END
ELSE 1
END
END AS EVT_TRGET_AT -- 이벤트 진행여부 이벤트 대상일경우 1을 반환함 = 정상 처리 0 이벤트 대상 아닐경우 1
, IFNULL(EVT_DUPL_COUPON.DPLCT_LMTT_COUPON, 0) AS DPLCT_LMTT_COUPON -- 이벤트 중복제한 쿠폰 존재여부
, CASE WHEN OPTN.OPTN_EXPSR_AT = 'Y' THEN 0 ELSE 1 END AS OPTN_EXPSR_AT
FROM (SELECT GG.GOODS_INNB -- 상품 고유번호
, GG.SOPMAL_CD -- 쇼핑몰코드
, GG.DLVY_GROUP_INNB -- 배송그룹고유번호
, GG.GOODS_KND_CD -- 상품구분 01 상품
, GG.GOODS_STTUS_CD -- 상품상태 01 정상
, GG.PURCHS_QY_LMTT_DV_CD -- 구매수량제한여부 02 제한
,GG.MUMM_PURCHS_QY -- 최소구매수량
,GG.MXMM_PURCHS_QY -- 최대구매수량
,GG.INVNTRY_POLICY_CD -- 재고정책 01 재고가 있으면 판매 02 재고없어도 판매
,GG.AVLINV_LMTT_QY -- 가용재고제한수량
,GG.PURCHS_TRGTER_LMTT_DV_CD -- 구매 대상자 제한 02 제한
,SUM(IFNULL(GGO.INVNTRY_QY, 0)) AS INVNTRY_QY -- 상품 재고수량 합계
,SUM(IFNULL(GGO.USEFUL_INVNTRY_QY, 0)) AS USEFUL_INVNTRY_QY -- 상품 사용 재고수량 합계
,SUM(IFNULL(GGO.INVNTRY_QY, 0)) - SUM(IFNULL(GGO.USEFUL_INVNTRY_QY, 0)) AS REST_INVNTRY_QY -- 잔여 재고수량 합계
FROM GC_GOODS GG
INNER JOIN GC_GOODS_OPTION GGO
ON GG.SOPMAL_CD = GGO.SOPMAL_CD
AND GG.GOODS_INNB = GGO.GOODS_INNB
AND GG.USE_AT = 'Y'
AND GGO.USE_AT = 'Y'
AND GGO.OPTN_TY IN('01', '02')
WHERE 1 = 1
AND GG.SOPMAL_CD = #{sopmalCd}
AND GG.GOODS_INNB = #{goodsInnb}
) GOODS
INNER JOIN GC_GOODS_OPTION OPTN
ON GOODS.SOPMAL_CD = OPTN.SOPMAL_CD
AND GOODS.GOODS_INNB = OPTN.GOODS_INNB
AND OPTN.USE_AT = 'Y'
AND OPTN.GOODS_OPTN_INNB = #{goodsOptnInnb}
LEFT JOIN GC_GOODS_TRGTER_LMTT GGTL
ON GOODS.SOPMAL_CD = GGTL.SOPMAL_CD
AND GOODS.GOODS_INNB = GGTL.GOODS_INNB
AND CASE
WHEN GOODS.PURCHS_TRGTER_LMTT_DV_CD = '01' THEN 1
ELSE
CASE
WHEN IFNULL(#{mbrInnb}, 0) = 0 THEN GGTL.GOODS_TRGTER_DV_CD = '02'
ELSE GGTL.GOODS_TRGTER_DV_CD = '01'
END
END
LEFT JOIN (
SELECT GM.MBR_INNB
, GM.MBR_DV_CD
, GMGM.SOPMAL_CD
, GMG.MBR_GRAD_INNB
FROM GC_MEMBER GM
INNER JOIN GC_MEMBER_GRAD_MAPPING GMGM
ON GM.MBR_INNB = GMGM.MBR_INNB
AND GM.MBR_DV_CD = GMGM.MBR_DV_CD
AND GM.USE_AT = 'Y'
INNER JOIN GC_MEMBER_GRAD GMG
ON GMGM.MBR_GRAD_INNB = GMG.MBR_GRAD_INNB
AND GMGM.SOPMAL_CD = GMG.SOPMAL_CD
AND GMG.USE_AT = 'Y'
WHERE 1 = 1
AND GMGM.SOPMAL_CD = #{sopmalCd}
AND GM.MBR_INNB = #{mbrInnb}) MBR
ON MBR.SOPMAL_CD = GOODS.SOPMAL_CD
LEFT JOIN (SELECT GG.GOODS_INNB
, GGO.SLEPRIC AS EVT_SLEPRIC
, FE.EVT_INNB
, FE.SOPMAL_CD
, FE.EVT_DV
, FE.EVTNM
, FE.EVT_BGN_DT
, FE.EVT_END_DT
, FE.EVT_TME_EXPSR_AT
, FE.DPLCT_LMTT_COUPON
, FE.DSCNT_BNEF_DV_CD
, FEB.MLG_ACCML_CD
, CASE
WHEN FEB.ADIT_DSCNT_CD = '01'
THEN CASE
WHEN IFNULL(GGO.SLEPRIC, 0) * (FEB.ADIT_DSCNT_AMT / 100) >
IFNULL(FEB.DSCNT_MXMM_AMT, 0) AND IFNULL(FEB.DSCNT_MXMM_AMT, 0) > 0
THEN IFNULL(FEB.DSCNT_MXMM_AMT, 0)
ELSE IFNULL(GGO.SLEPRIC, 0) * (FEB.ADIT_DSCNT_AMT / 100) END
ELSE ADIT_DSCNT_AMT
END AS ADIT_DSCNT_AMT
, CASE
WHEN FEB.MLG_ACCML_CD = '02'
THEN FEB.MLG_ACCML_AMT
ELSE IFNULL(GGO.SLEPRIC, 0) * (FEB.MLG_ACCML_AMT / 100)
END AS MLG_ACCML_AMT
, CASE
WHEN FE.EVT_TRGET_DV_CD = '01' THEN 1 --
WHEN FE.EVT_TRGET_DV_CD = '02'
THEN CASE WHEN IFNULL(#{mbrInnb}, 0) <> 0 THEN 1 ELSE 0 END -- 로그인했으면 통과
WHEN FE.EVT_TRGET_DV_CD = '03' THEN CASE
WHEN 0 < ( -- 등급제한시
SELECT COUNT(*)
FROM GC_EVENT_GRAD FEG
WHERE FEG.EVT_INNB = FE.EVT_INNB
AND FEG.SOPMAL_CD = FE.SOPMAL_CD
AND FEG.MBR_GRAD_INNB IN
(SELECT FMG.MBR_GRAD_INNB
FROM GC_MEMBER_GRAD FMG
LEFT JOIN GC_MEMBER_GRAD_MAPPING FMGM
ON FMGM.SOPMAL_CD =
FMG.SOPMAL_CD
AND
FMGM.MBR_GRAD_INNB =
FMG.MBR_GRAD_INNB
WHERE FMG.SOPMAL_CD = FE.SOPMAL_CD
AND FMGM.MBR_INNB = #{mbrInnb} -- 1325385
))
THEN 1
ELSE 0
END
ELSE 0
END EVT_TRGET_AT
FROM GC_GOODS GG
INNER JOIN GC_GOODS_OPTION GGO
ON GG.SOPMAL_CD = GGO.SOPMAL_CD
AND GG.GOODS_INNB = GGO.GOODS_INNB
AND GGO.STDR_DV_AT = 'Y'
INNER JOIN GC_EVENT FE
ON GG.SOPMAL_CD = FE.SOPMAL_CD
INNER JOIN GC_EVENT_BENEFITS FEB
ON FE.EVT_INNB = FEB.EVT_INNB
AND FE.SOPMAL_CD = FEB.SOPMAL_CD
AND FEB.USE_AT = 'Y'
WHERE 1 = 1
AND FE.USE_AT = 'Y'
AND FE.EVT_DV = 01
AND FE.SOPMAL_CD = #{sopmalCd} -- 'NC'
AND FE.EVT_INNB = #{evtInnb}
AND SYSDATE() BETWEEN FE.EVT_BGN_DT AND FE.EVT_END_DT
-- AND FE.EVT_TME_EXPSR_AT = 'Y'
AND CASE
WHEN IFNULL(FE.APPLC_DAY, '') = '' THEN 1
ELSE FE.APPLC_DAY LIKE CONCAT('%', CONCAT('0', DAYOFWEEK(SYSDATE())), '%')
END
AND CASE
WHEN IFNULL(FE.LMTT_BGNTME, '') = '' OR IFNULL(FE.LMTT_ENDTME, '') = '' THEN 1
ELSE DATE_FORMAT(NOW(), '%H%i') BETWEEN FE.LMTT_BGNTME AND FE.LMTT_ENDTME
END
AND CASE
WHEN FE.GOODS_APPLC_DV_CD = '01' THEN 1 -- 전체
WHEN FE.GOODS_APPLC_DV_CD = '02' -- 카테고리 포함
THEN CASE
WHEN 0 < (WITH RECURSIVE CATEGORY_INCLD AS (SELECT C1.CTGRY_ID
, C1.UPPER_CTGRY_ID
, C1.SOPMAL_CD
FROM GC_CATEGORY C1
WHERE C1.USE_AT = 'Y'
AND C1.SOPMAL_CD = FE.SOPMAL_CD
AND C1.CTGRY_ID IN
(SELECT CTGRY_ID
FROM GC_CATEGORY_LINK FCL
WHERE FCL.GOODS_INNB = GG.GOODS_INNB -- 728
AND FCL.SOPMAL_CD = C1.SOPMAL_CD)
UNION
SELECT C3.CTGRY_ID
, C3.UPPER_CTGRY_ID
, C3.SOPMAL_CD
FROM GC_CATEGORY AS C3
INNER JOIN CATEGORY_INCLD
ON C3.CTGRY_ID =
CATEGORY_INCLD.UPPER_CTGRY_ID AND
C3.SOPMAL_CD =
CATEGORY_INCLD.SOPMAL_CD
WHERE C3.USE_AT = 'Y')
SELECT COUNT(*)
FROM GC_EVENT_CHOICE FEC
WHERE FEC.SOPMAL_CD = FE.SOPMAL_CD
AND FEC.EVT_INNB = FE.EVT_INNB
AND FEC.CTGRY_ID IN (SELECT CTGRY_ID
FROM CATEGORY_INCLD))
THEN 1
ELSE 0
END
WHEN FE.GOODS_APPLC_DV_CD = '03' -- 상품 포함
THEN CASE
WHEN 0 < (SELECT COUNT(*)
FROM GC_EVENT_CHOICE FEC
WHERE FEC.SOPMAL_CD = FE.SOPMAL_CD
AND FEC.EVT_INNB = FE.EVT_INNB
AND FEC.GOODS_INNB = GG.GOODS_INNB -- 728
)
THEN 1
ELSE 0
END
WHEN FE.GOODS_APPLC_DV_CD = '04' -- 카테고리 제외
THEN CASE
WHEN 0 < (WITH RECURSIVE CATEGORY_INCLD AS (SELECT C1.CTGRY_ID
, C1.UPPER_CTGRY_ID
, C1.SOPMAL_CD
FROM GC_CATEGORY C1
WHERE C1.USE_AT = 'Y'
AND C1.SOPMAL_CD = FE.SOPMAL_CD
AND C1.CTGRY_ID IN
(SELECT CTGRY_ID
FROM GC_CATEGORY_LINK FCL
WHERE FCL.GOODS_INNB = GG.GOODS_INNB -- 728
AND FCL.SOPMAL_CD = C1.SOPMAL_CD)
UNION
SELECT C3.CTGRY_ID
, C3.UPPER_CTGRY_ID
, C3.SOPMAL_CD
FROM GC_CATEGORY AS C3
INNER JOIN CATEGORY_INCLD
ON C3.CTGRY_ID =
CATEGORY_INCLD.UPPER_CTGRY_ID AND
C3.SOPMAL_CD =
CATEGORY_INCLD.SOPMAL_CD
WHERE C3.USE_AT = 'Y')
SELECT COUNT(*)
FROM GC_EVENT_CHOICE FEC
WHERE FEC.SOPMAL_CD = FE.SOPMAL_CD
AND FEC.EVT_INNB = FE.EVT_INNB
AND FEC.CTGRY_ID IN (SELECT CTGRY_ID
FROM CATEGORY_INCLD))
THEN 0
ELSE 1
END
WHEN FE.GOODS_APPLC_DV_CD = '05' -- 상품 제외
THEN CASE
WHEN 0 < (SELECT COUNT(*)
FROM GC_EVENT_CHOICE FEC
WHERE FEC.SOPMAL_CD = FE.SOPMAL_CD
AND FEC.EVT_INNB = FE.EVT_INNB
AND FEC.GOODS_INNB = GG.GOODS_INNB -- 728
)
THEN 0
ELSE 1
END
END) EVT
ON GOODS.GOODS_INNB = EVT.GOODS_INNB
AND GOODS.SOPMAL_CD = EVT.SOPMAL_CD
]]>
LEFT JOIN(
WITH COUPON_STTUS_TB AS
(SELECT DWLD_COUPON_INNB
, CASE WHEN COUPON_STTUS_CD = '02' THEN 0 ELSE 1 END AS COUPON_STTUS -- 쿠폰 상태 확인
, CASE WHEN USE_AT = 'Y' THEN 0 ELSE 1 END AS COUPON_USE_AT -- 쿠폰 회수여부 확인
, CASE WHEN NOW() BETWEEN VALIDPD_BGN_DT AND VALIDPD_END_DT THEN 0 ELSE 1 END AS COUPON_VALIDPD_DT -- 쿠폰 유효기간 확인
, GD.SOPMAL_CD
, GD.MBR_INNB
, GD.MBR_DV_CD
FROM GC_DOWNLOAD GD
WHERE 1 = 1
AND GD.SOPMAL_CD = #{sopmalCd}
AND GD.MBR_INNB = #{mbrInnb}
AND GD.MBR_DV_CD = #{mbrDvCd}
AND DWLD_COUPON_INNB IN
<foreach collection="usedDwladCouponInnbList" item="usedDwladCouponInnb" separator="," open="(" close=")">
#{usedDwladCouponInnb}
</foreach>
)
SELECT COUPON_STTUS
, COUPON_USE_AT
, COUPON_VALIDPD_DT
, SOPMAL_CD
, MBR_INNB
, MBR_DV_CD
FROM COUPON_STTUS_TB
GROUP BY COUPON_STTUS
, COUPON_USE_AT
, COUPON_VALIDPD_DT
, SOPMAL_CD
, MBR_INNB
, MBR_DV_CD
UNION
SELECT 0 AS COUPON_STTUS, 0 AS COUPON_USE_AT, 0 AS COUPON_VALIDPD_DT, #{sopmalCd} AS SOPMAL_CD, #{mbrInnb} AS MBR_INNB, #{mbrDvCd} AS MBR_DV_CD FROM DUAL
) COUPON
ON MBR.SOPMAL_CD = COUPON.SOPMAL_CD
AND MBR.MBR_INNB = COUPON.MBR_INNB
AND MBR.MBR_DV_CD = COUPON.MBR_DV_CD
LEFT JOIN (
WITH RECURSIVE EVT_DUPLE_CP AS (SELECT DWLD_COUPON_INNB
, BNEF_DV_CD
, SOPMAL_CD
, MBR_INNB
, MBR_DV_CD
FROM GC_DOWNLOAD GD
WHERE 1 = 1
AND GD.SOPMAL_CD = #{sopmalCd}
AND GD.MBR_INNB = #{mbrInnb}
AND GD.MBR_DV_CD = #{mbrDvCd}
AND DWLD_COUPON_INNB IN
<foreach collection="usedDwladCouponInnbList" item="usedDwladCouponInnb" separator="," open="(" close=")">
#{usedDwladCouponInnb}
</foreach>
)
SELECT CASE WHEN IFNULL(GE.DPLCT_LMTT_COUPON, '') = ''
THEN 0
ELSE CASE WHEN GE.DPLCT_LMTT_COUPON LIKE CONCAT('%', BNEF_DV_CD, '%') THEN 1 -- 조회한 쿠폰의 혜택구분이 이벤트에 중복제한 쿠폰대상인지 확인 없으면 0
ELSE 0 END
END AS DPLCT_LMTT_COUPON
, EDC.SOPMAL_CD
, EDC.MBR_INNB
, EDC.MBR_DV_CD
FROM EVT_DUPLE_CP EDC
LEFT JOIN GC_EVENT GE ON EDC.SOPMAL_CD = GE.SOPMAL_CD
WHERE 1 = 1
AND GE.EVT_INNB = IFNULL(#{evtInnb}, 0)
UNION
SELECT 0 AS DPLCT_LMTT_COUPON, #{sopmalCd} AS SOPMAL_CD, #{mbrInnb} AS MBR_INNB, #{mbrDvCd} AS MBR_DV_CD FROM DUAL
) EVT_DUPL_COUPON
ON GOODS.SOPMAL_CD = EVT_DUPL_COUPON.SOPMAL_CD
AND MBR.MBR_INNB = EVT_DUPL_COUPON.MBR_INNB
AND MBR.MBR_DV_CD = EVT_DUPL_COUPON.MBR_DV_CD
WHERE 1 = 1
GROUP BY
GOODS_STTUS
, PURCHS_QY_LMTT
, INVNTRY
, INVNTRY_POLICY
, SELPRIC
, DSCNT_AT
, DLVY_GROUP
, PURCHS_TRGTER_LMTT
, COUPON_STTUS
, COUPON_USE_AT
, COUPON_VALIDPD_DT
, EVT_TRGET_AT
, DPLCT_LMTT_COUPON
, EVT.DSCNT_BNEF_DV_CD
, OPTN.COMPNB_DSCNT_AT
, OPTN.SCTN_DSCNT_AT
, OPTN.OPTN_EXPSR_AT
</select>
<!--주문 전 쿠폰번호 재확인-->
<select id="selectBOPreOrderValidationCouponList" parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOPreOrderValidVO">
SELECT DWLD_COUPON_INNB
FROM GC_DOWNLOAD GD
WHERE 1 = 1
AND GD.SOPMAL_CD = #{sopmalCd}
AND GD.MBR_INNB = #{mbrInnb}
AND GD.MBR_DV_CD = #{mbrDvCd}
</select>
<!--쇼핑몰 구매요청 재검증 확인 여부-->
<select id="selectPurchsValidUseAt">
SELECT PURCHS_REVALID_AT FROM GC_SHOP WHERE 1=1 AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 구독서비스 주문 전 주문정보 재확인 -->
<select id="selectBOSubsvcPreOrderValidation" parameterType="com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOPreOrderValidVO" resultType="dataMap">
<![CDATA[
SELECT
CASE
WHEN GOODS.SUBSVC_STTUS_CD = '01' THEN 0
ELSE 1
END AS GOODS_STTUS, -- 상품상태 정상 확인
CASE
WHEN GOODS.PURCHS_QY_LMTT_DV_CD = '01' OR GOODS.PURCHS_QY_LMTT_DV_CD IS NULL THEN 0
ELSE
CASE
WHEN #{goodsTotalQy} BETWEEN GOODS.MUMM_PURCHS_QY AND GOODS.MXMM_PURCHS_QY THEN 0
ELSE 1
END
END AS PURCHS_QY_LMTT, -- 상품별 최소 최대 구매수량제한여부
CASE
WHEN GOODS.INVNTRY_POLICY_CD = '02' THEN 0
ELSE
CASE
WHEN (GOODS.INVNTRY_QY - IFNULL(GOODS.USEFUL_INVNTRY_QY, 0)) >= #{qy} THEN 0
ELSE 1
END
END AS INVNTRY, -- 각 옵션별 재고 유무
CASE
WHEN GOODS.INVNTRY_POLICY_CD = '02' THEN 0
ELSE
CASE
WHEN (IFNULL(GOODS.REST_INVNTRY_QY, 0) - IFNULL(GOODS.AVLINV_LMTT_QY, 0)) >= #{goodsTotalQy} THEN 0
ELSE 1
END
END AS INVNTRY_POLICY, -- 상품별 옵션 수량합산 재고유무
CASE
WHEN IFNULL(GOODS.SUBSVC_CT, 0) = #{slepric} THEN 0
ELSE 1
END AS SELPRIC, -- 판매가 변경여부
0 AS DSCNT_AT, -- 구간,복수할인 정보 변경 여부
0 AS DLVY_GROUP, -- 배송그룹 변경여부
0 AS PURCHS_TRGTER_LMTT, -- 구매대상자 제한
0 AS COUPON_STTUS, -- 쿠폰 상태 확인
0 AS COUPON_USE_AT, -- 쿠폰 회수여부 확인
0 AS COUPON_VALIDPD_DT, -- 쿠폰 유효기간 확인
0 AS EVT_TRGET_AT, -- 이벤트 진행여부 이벤트 대상일경우 1을 반환함 = 정상 처리 0 이벤트 대상 아닐경우 1
0 AS DPLCT_LMTT_COUPON, -- 이벤트 중복제한 쿠폰 존재여부
0 AS OPTN_EXPSR_AT -- 상품옵션 노출여부
FROM (
SELECT
GS.SUBSVC_INNB, -- 구독서비스 고유번호
GG.GOODS_INNB, -- 상품 고유번호
GS.SOPMAL_CD, -- 쇼핑몰코드
GS.SUBSVC_CT, -- 구독료
GG.DLVY_GROUP_INNB, -- 배송그룹고유번호
GG.GOODS_KND_CD, -- 상품구분 01 상품
GS.SUBSVC_STTUS_CD, -- 상품상태 01 정상
GS.PURCHS_QY_LMTT_DV_CD, -- 구매수량제한여부 02 제한
GS.MUMM_PURCHS_QY, -- 최소구매수량
GS.MXMM_PURCHS_QY, -- 최대구매수량
GS.INVNTRY_POLICY_CD, -- 재고정책 01 재고가 있으면 판매 02 재고없어도 판매
GS.AVLINV_LMTT_QY, -- 가용재고제한수량
GG.PURCHS_TRGTER_LMTT_DV_CD, -- 구매 대상자 제한 02 제한
SUM(IFNULL(GS.INVNTRY_QY, 0)) AS INVNTRY_QY, -- 상품 재고수량 합계
SUM(IFNULL(GS.USEFUL_INVNTRY_QY, 0)) AS USEFUL_INVNTRY_QY, -- 상품 사용 재고수량 합계
SUM(IFNULL(GS.INVNTRY_QY, 0)) - SUM(IFNULL(GS.USEFUL_INVNTRY_QY, 0)) AS REST_INVNTRY_QY -- 잔여 재고수량 합계
FROM GC_SUBSVC GS
INNER JOIN GC_GOODS_OPTION GGO
ON GS.SOPMAL_CD = GGO.SOPMAL_CD
AND GS.DFT_GOODS_OPTN_INNB = GGO.GOODS_OPTN_INNB
AND GS.USE_AT = 'Y'
AND GGO.USE_AT = 'Y'
INNER JOIN GC_GOODS GG
ON GS.SOPMAL_CD = GG.SOPMAL_CD
AND GGO.GOODS_INNB = GG.GOODS_INNB
AND GG.USE_AT = 'Y'
WHERE 1 = 1
AND GS.SOPMAL_CD = #{sopmalCd}
AND GS.SUBSVC_INNB = #{subsvcInnb}
GROUP BY
GG.GOODS_INNB
) GOODS
LEFT JOIN (
SELECT
GM.MBR_INNB,
GM.MBR_DV_CD,
GMGM.SOPMAL_CD,
GMG.MBR_GRAD_INNB
FROM
GC_MEMBER GM
INNER JOIN GC_MEMBER_GRAD_MAPPING GMGM
ON GM.MBR_INNB = GMGM.MBR_INNB
AND GM.MBR_DV_CD = GMGM.MBR_DV_CD
AND GM.USE_AT = 'Y'
INNER JOIN GC_MEMBER_GRAD GMG
ON GMGM.MBR_GRAD_INNB = GMG.MBR_GRAD_INNB
AND GMGM.SOPMAL_CD = GMG.SOPMAL_CD
AND GMG.USE_AT = 'Y'
WHERE 1 = 1
AND GMGM.SOPMAL_CD = #{sopmalCd}
AND GM.MBR_INNB = #{mbrInnb}
) MBR
ON MBR.SOPMAL_CD = GOODS.SOPMAL_CD
WHERE 1 = 1
GROUP BY
GOODS_STTUS,
PURCHS_QY_LMTT,
INVNTRY,
INVNTRY_POLICY,
SELPRIC,
DSCNT_AT,
DLVY_GROUP,
PURCHS_TRGTER_LMTT,
COUPON_STTUS,
COUPON_USE_AT,
COUPON_VALIDPD_DT,
EVT_TRGET_AT,
DPLCT_LMTT_COUPON
]]>
</select>
</mapper>

View File

@@ -0,0 +1,15 @@
<?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.wb.domainserver.domain.admin.main.mapper.BOMaMainMapper">
<select id="selectBOMaMainAccessInqire"
resultType="dataMap">
SELECT
GM.MNGR_NM
, GM.MNGR_ID
, DATE_FORMAT(GM.LAST_CONECT_DT, '%Y-%m-%d %H:%i:%s') AS LAST_CONECT_DT
FROM
GC_MANAGER GM
WHERE 1=1
AND GM.MNGR_INNB = #{mngrInnb}
</select>
</mapper>

View File

@@ -0,0 +1,122 @@
<?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.wb.domainserver.domain.admin.ntcn.atmcsndng.mapper.BOMaAtmcSndngMapper">
<!-- 자동 발송 관리 목록 -->
<select id="selectBOAtmcSndngManageListInqire"
parameterType="com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo.BOMaAtmcSndngVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM GC_MESSAGE_SNDNG SNDNG
JOIN (
SELECT GROUPCODE.CD_NM AS GROUP_CD_NM, CODE.GROUP_CD, CODE.CD, CODE.CD_NM
FROM (
SELECT CD, CD_NM, USE_AT
FROM GC_CODE
WHERE GROUP_CD LIKE 'FORM_DV%'
) GROUPCODE
JOIN GC_CODE CODE
ON REPLACE(CODE.GROUP_CD, #{formDvCd}, '') = GROUPCODE.CD
AND CODE.USE_AT = 'Y'
) CODE
ON CODE.GROUP_CD = SNDNG.FORM_DV_CD
AND CODE.CD = SNDNG.FORM_DTL_DV_CD
WHERE 1=1
]]>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
AND SNDNG.SOPMAL_CD = #{sopmalCd}
</if>
<![CDATA[
AND SNDNG.EXPSR_AT = 'Y'
AND SNDNG.MNGR_DV = #{mngrDv}
ORDER BY SNDNG.FORM_DV_CD, SNDNG.FORM_DTL_DV_CD
]]>
</select>
<!-- 자동 발송 관리 수정 -->
<update id="updateBOAtmcSndngManageUpdt"
parameterType="com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo.BOMaAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_MESSAGE_SNDNG
SET
USE_AT = #{dto.useAt}
, EMAIL_USE_AT = #{dto.emailUseAt}
, SMS_USE_AT = #{dto.smsUseAt}
, NTCNTALK_USE_AT = #{dto.ntcntalkUseAt}
, MARKT_AT = #{dto.marktAt}
, SNDNG_STDR_DE = #{dto.sndngStdrDe}
, SNDNG_STDR_TME = #{dto.sndngStdrTme}
, UPDUSR = #{dto.updusr}
, UPDT_DT = SYSDATE()
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 이메일 템플릿 사용여부 수정 -->
<update id="updateBOEmailTmplatUseAt"
parameterType="com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo.BOMaAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_EMAIL_FORM
SET
USE_AT = #{dto.emailUseAt}
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 메시지 템플릿 사용여부 수정 -->
<update id="updateBOMssageTmplatUseAt"
parameterType="com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo.BOMaAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_SMS_FORM
SET
USE_AT = #{dto.smsUseAt}
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 알림톡 템플릿 사용여부 수정 -->
<update id="updateBOKakaoTmplatUseAt"
parameterType="com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo.BOMaAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_KAKAO_FORM
SET
USE_AT = #{dto.ntcntalkUseAt}
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 자동발송 가능 시간 조회 -->
<select id="selectBOShopAtmcSndngTme">
SELECT
LEFT(SMS_ATMC_SNDNG_LMTT_BGNTME, 2) AS SMS_ATMC_SNDNG_LMTT_BGNTME
, LEFT(SMS_ATMC_SNDNG_LMTT_ENDTME, 2) AS SMS_ATMC_SNDNG_LMTT_ENDTME
FROM GC_SHOP
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 통합관리자 자동발송관리 쇼핑몰 조회 -->
<select id="selectBOSopmalAtmcSndng">
SELECT
GMS.SOPMAL_CD
, GS.SOPMAL_NM
FROM GC_MESSAGE_SNDNG GMS
INNER JOIN GC_SHOP GS
ON GMS.SOPMAL_CD = GS.SOPMAL_CD
GROUP BY SOPMAL_CD
</select>
</mapper>

View File

@@ -0,0 +1,177 @@
<?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.wb.domainserver.domain.admin.ntcn.email.mapper.BOMaEmailMapper">
<sql id="emailSndngDtlsListFrom">
<![CDATA[
FROM GC_EMAIL_LOG FEL
]]>
</sql>
<sql id="emailSndngDtlsListWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStr)">
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'SJ')">
<![CDATA[
AND FEL.SJ LIKE CONCAT('%',#{srchStr},'%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'sndEml')">
<![CDATA[
AND AES_DECRYPT(UNHEX(FEL.SNDER), #{secretKey}) LIKE CONCAT('%',#{srchStr},'%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'rcvEml')">
<![CDATA[
AND AES_DECRYPT(UNHEX(FEL.RCVER), #{secretKey}) LIKE CONCAT('%',#{srchStr},'%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchType)">
<![CDATA[
AND (
FEL.SJ LIKE CONCAT('%',#{srchStr},'%')
OR AES_DECRYPT(UNHEX(FEL.SNDER), #{secretKey}) LIKE CONCAT('%',#{srchStr},'%')
OR AES_DECRYPT(UNHEX(FEL.RCVER), #{secretKey}) LIKE CONCAT('%',#{srchStr},'%')
)
]]>
</when>
</choose>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchShop)">
<![CDATA[
AND FEL.SOPMAL_CD = #{srchShop}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(atmcAt)">
<![CDATA[
AND FEL.ATMC_SNDNG_AT = #{atmcAt}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND FEL.REGIST_DT BETWEEN #{srchStrtSndngDt} ' 00:00:00' AND #{srchEndSndngDt} ' 23:59:59'
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)">
<![CDATA[
AND FEL.REGIST_DT >= #{srchStrtSndngDt} ' 00:00:00'
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND DATE(FEL.REGIST_DT) <= #{srchEndSndngDt} ' 23:59:59'
]]>
</if>
<![CDATA[
ORDER BY FEL.REGIST_DT DESC
]]>
</sql>
<!-- 이메일 발송 내역 조회 -->
<select id="selectBOMaEmailSndngDtlsListInqire"
parameterType="com.wb.domainserver.domain.admin.ntcn.email.vo.BOMaEmailSrchVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
, TB.*
FROM (
SELECT FEL.EMAIL_LOG_INNB
, FEL.SJ
, CAST(AES_DECRYPT(UNHEX(FEL.SNDER) , #{secretKey}) AS CHAR(50)) AS EMAIL
, CAST(AES_DECRYPT(UNHEX(FEL.RCVER) , #{secretKey}) AS CHAR(50)) AS SNDNG_EMAIL
, FEL.STTUS AS STTUS
, FN_GET_SOPMAL_NAME(FEL.SOPMAL_CD) AS SOPMAL_NM
, DATE_FORMAT(FEL.REGIST_DT,'%Y-%m-%d %H:%i:%S')AS REGIST_DT
]]>
<include refid="emailSndngDtlsListFrom"/>
<include refid="emailSndngDtlsListWhere"/>
<![CDATA[
) TB
WHERE (@rownum:=0)=0
) PV
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 이메일 발송 내역 건수 조회 (통합관리자) -->
<select id="selectBOMaEmailSndngDtlsListTotCnt"
parameterType="com.wb.domainserver.domain.admin.ntcn.email.vo.BOMaEmailSrchVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
]]>
<include refid="emailSndngDtlsListFrom"/>
<include refid="emailSndngDtlsListWhere"/>
</select>
<!-- 이메일 발송 상세 조회 (수신 정보) -->
<select id = "selectBOMaEmailSndngDtlInfo"
parameterType="com.wb.domainserver.domain.admin.ntcn.email.vo.BOMaEmailSrchVO"
resultType="dataMap">
<![CDATA[
SELECT CAST(AES_DECRYPT(UNHEX(FEL.SNDER) , #{secretKey}) AS CHAR(50)) AS SNDER
, DATE_FORMAT(FEL.REGIST_DT,'%Y-%m-%d %H:%i:%S')AS REGIST_DT
, FEL.SJ
, FEL.CN
]]>
<include refid="emailSndngDtlsListFrom"/>
<![CDATA[
WHERE 1=1
AND FEL.EMAIL_LOG_INNB = #{emailLogInnb}
]]>
</select>
<!-- 이메일 발송로그 등록 -->
<insert id="insertBOMaEmailSndngLog"
parameterType="java.util.List"
useGeneratedKeys="true"
keyProperty="emailLogInnb">
INSERT INTO GC_EMAIL_LOG (
SOPMAL_CD
, MBR_INNB
, ATMC_SNDNG_AT
, SNDNG_CNT
, SNDER
, RCVER
, SJ
, CN
, EMAIL_SNDNG_FORM_INNB
, ORDR_INNB
, STTUS
, REGIST_DT
)
VALUES
<foreach collection="list" item="dto" separator=",">
(
#{dto.sopmalCd}
, #{dto.mbrInnb}
, #{dto.atmcSndngAt}
, #{dto.sndngCnt}
, HEX(AES_ENCRYPT(#{dto.snder}, #{dto.secretKey}))
, HEX(AES_ENCRYPT(#{dto.rcver}, #{dto.secretKey}))
, #{dto.sj}
, #{dto.cn}
, #{dto.emailSndngFormInnb}
, #{dto.ordrInnb}
, #{dto.sttus}
, SYSDATE()
)
</foreach>
</insert>
<!-- 이메일 로그 상태 수정 -->
<update id="updateEmailLog">
<foreach collection="list" item="dto" index="index" separator=",">
UPDATE
GC_EMAIL_LOG
SET
STTUS = #{dto.sttus}
WHERE 1=1
AND EMAIL_LOG_INNB = #{dto.emailLogInnb}
</foreach>
</update>
</mapper>

View File

@@ -0,0 +1,211 @@
<?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.wb.domainserver.domain.admin.ntcn.mssage.mapper.BOMaMssageMapper">
<!-- sms 발송 관리 목록 조회 FROM 절 -->
<sql id = "SmsSndngDtlsListFrom">
FROM GC_SMS_TO SMSTO
INNER JOIN GC_SMS SMS
ON SMSTO.SOPMAL_CD = SMS.SOPMAL_CD
AND SMSTO.SMS_INNB = SMS.SMS_INNB
</sql>
<!-- sms 발송 관리 목록 조회 WHERE 절 -->
<sql id = "SmsSndngDtlsListWhere">
WHERE 1=1
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSmsInnb)">
<![CDATA[
AND SMS.SMS_INNB = #{srchSmsInnb}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSmsToInnb)">
<![CDATA[
AND SMSTO.SMS_TO_INNB = #{srchSmsToInnb}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRecptnNb)">
<![CDATA[
AND CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB), '1df5be2f7e90ae36') AS CHAR(50)) LIKE CONCAT('%', REPLACE(#{srchRecptnNb},'-',''), '%')
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)
and !@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchSopmalCd, 'ALL')">
<![CDATA[
AND SMS.SOPMAL_CD = #{srchSopmalCd}
AND SMSTO.SOPMAL_CD = #{srchSopmalCd}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStr)">
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'cn')">
<![CDATA[
AND (
SMS.CN LIKE CONCAT('%', #{srchStr}, '%')
OR SMSTO.SUBST_DATA LIKE CONCAT('%', #{srchStr}, '%')
)
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'recpntNb')">
<![CDATA[
AND CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB), '1df5be2f7e90ae36') AS CHAR(50)) LIKE CONCAT('%', REPLACE(#{srchStr},'-',''), '%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'sndngNb')">
<![CDATA[
AND SMS.SNDNG_NB LIKE CONCAT('%', #{srchStr}, '%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchType, 'cstmrIdnb')">
<![CDATA[
AND SMSTO.CSTMR_IDNB LIKE CONCAT('%', #{srchStr}, '%')
]]>
</when>
</choose>
</if>
<!-- 발송일 -->
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'sndngDt')">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.SNDNG_DT BETWEEN #{srchStrtSndngDt} ' 00:00:00' AND #{srchEndSndngDt} ' 23:59:59'
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)">
<![CDATA[
AND SMS.SNDNG_DT >= #{srchStrtSndngDt} ' 00:00:00'
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.SNDNG_DT <= #{srchEndSndngDt} ' 00:00:00'
]]>
</when>
</choose>
</if>
<!-- 등록일 -->
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'registDt')">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.REGIST_DT BETWEEN #{srchStrtSndngDt} ' 00:00:00' AND #{srchEndSndngDt} ' 23:59:59'
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)">
<![CDATA[
AND SMS.REGIST_DT >= #{srchStrtSndngDt} ' 00:00:00'
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.REGIST_DT <= #{srchEndSndngDt} ' 00:00:00'
]]>
</when>
</choose>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchDv)">
<![CDATA[
AND SMSTO.DV IN
]]>
<foreach collection="srchDv" item="dv" open="(" separator="," close=")">
<![CDATA[
#{dv}
]]>
</foreach>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSttus)">
<![CDATA[
AND SMSTO.STTUS IN
]]>
<foreach collection="srchSttus" item="sttus" open="(" separator="," close=")">
<![CDATA[
#{sttus}
]]>
</foreach>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sndngNb)">
<![CDATA[
AND SMS.SNDNG_NB = #{sndngNb}
AND SMSTO.RECPTN_NB = REPLACE(#{recptnNb},'-','')
]]>
</if>
</sql>
<select id = "selectBOSmsSndngDtlsListInqire"
parameterType="com.wb.domainserver.domain.admin.ntcn.mssage.vo.BOMaMssageSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER (ORDER BY SMS.SNDNG_DT ASC) AS RNUM
, SMS.SNDNG_NB
, SMSTO.DV
, DATE_FORMAT(SMS.REGIST_DT,'%Y-%m-%d %H:%i:%S')AS REGIST_DT
, DATE_FORMAT(SMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S')AS SNDNG_DT
, CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , #{secretKey}) AS CHAR(50)) AS RECPTN_NB
, SMS.HEAD
, SMS.CN
, SMS.TAIL
, SMS.SMS_INNB
, SMSTO.SMS_TO_INNB
, SMSTO.STTUS
, SMS.SUCCES_CNT
, SMS.FAILR_CNT
, SMS.CHR_STTUS
, SMS.SOPMAL_CD AS SOPMAL_CD
, SHOP.SOPMAL_NM
, SMSTO.SUBST_DATA
, SMSTO.RSLT_CD
]]>
<include refid="SmsSndngDtlsListFrom"/>
INNER JOIN GC_SHOP SHOP
ON SHOP.SOPMAL_CD = SMSTO.SOPMAL_CD
<include refid="SmsSndngDtlsListWhere"/>
<![CDATA[
ORDER BY ROW_NUMBER() OVER (ORDER BY SMS.SNDNG_DT ASC) DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!--sms 발송 관리 건수 조회 -->
<select id = "selectBOSmsSndngDtlsListTotCnt"
parameterType="com.wb.domainserver.domain.admin.ntcn.mssage.vo.BOMaMssageSrchVO"
resultType="Integer">
SELECT
COUNT(1)
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
</select>
<!--sms 발송 관리 발신 목록 성공, 실패 건수 -->
<select id = "selectBOSmsSndngresultSttusCnt"
parameterType="com.wb.domainserver.domain.admin.ntcn.mssage.vo.BOMaMssageSrchVO"
resultType="dataMap">
SELECT
<!-- SMSTO.STTUS -->
COUNT(CASE WHEN SMSTO.STTUS = 'OK' THEN 1 END) AS OKCNT
, COUNT(CASE WHEN SMSTO.STTUS = 'FAIL' THEN 1 END) AS FAILCNT
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
</select>
<!--sms 발송 상세 조회 -->
<select id = "selectBOSmsSndngDtlInfo"
parameterType="com.wb.domainserver.domain.admin.ntcn.mssage.vo.BOMaMssageSrchVO"
resultType="dataMap">
SELECT
SMS.SNDNG_NB
, SMSTO.DV
, DATE_FORMAT(SMS.REGIST_DT,'%Y-%m-%d %H:%i:%S')AS REGIST_DT
, DATE_FORMAT(SMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S')AS SNDNG_DT
, SMSTO.RSLT_CD
, CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , '1df5be2f7e90ae36') AS CHAR(50)) AS RECPTN_NB
, SMS.HEAD
, SMS.CN
, SMS.TAIL
, SMS.SMS_INNB
, SMSTO.SMS_TO_INNB
, SMSTO.STTUS
, SMS.SUCCES_CNT
, SMS.FAILR_CNT
, SMS.CHR_STTUS
, SMSTO.SUBST_DATA
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
</select>
</mapper>

View File

@@ -0,0 +1,33 @@
<?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.wb.domainserver.domain.admin.ntcn.stl.mapper.BOMaStlMssageMapper">
<!-- 매장 목록 조회 -->
<select id="selectBOMaStoreList"
resultType="dataMap">
SELECT
GS.STR_INNB
, GS.TENTCPN_ID
, GS.STR_OPER_DV
, CASE
WHEN GS.STR_INNB = 33 THEN '참다한홍삼 영등포점'
ELSE GS.TENTCPN_NM
END AS TENTCPN_NM
FROM GC_STORE GS
WHERE 1=1
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strInnb)">
AND GS.STR_INNB = #{strInnb}
</if>
AND GS.TENTCPN_ID != 'base'
AND GS.MRHST_AT = 'Y'
AND GS.REPRSNT_MNGR_AT = 'Y'
ORDER BY GS.STR_INNB DESC
</select>
<!-- <select id="selectBOMaStlMssageList"-->
<!-- resultType="dataMap">-->
<!-- SELECT-->
<!-- *-->
<!-- FROM -->
<!-- </select>-->
</mapper>

View File

@@ -0,0 +1,481 @@
<?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.wb.domainserver.domain.admin.ntcn.tmplt.mapper.BOMaTmpltMapper">
<!-- 이메일 템플릿 조회 조건 -->
<sql id="tmpltEmailListInqireWhere">
<![CDATA[
WHERE 1 = 1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
</sql>
<!-- 메시지 템플릿 조회 조건 -->
<sql id="tmpltMssageListInqireWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND FORM_DV_CD = #{formDvCd}
]]>
</if>
</sql>
<!-- 알림톡 템플릿 조회 조건 -->
<sql id="tmpltNtcntalkListInqireWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
</sql>
<!-- 공통코드 -->
<!-- 그룹코드, 양식구분 조회 -->
<select id="selectBOTmplatGroupCd"
parameterType="java.lang.String"
resultType="dataMap">
<![CDATA[
SELECT *
FROM GC_CODE
WHERE 1 = 1
AND GROUP_CD LIKE #{param}
]]>
</select>
<!-- 이메일 자동발송 발신주소 조회 -->
<select id="selectBOEmailAtmcSndngDsptchAdres"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO"
resultType="String">
<![CDATA[
SELECT
EMAIL_ATMC_SNDNG_DSPTCH_ADRES
FROM GC_SHOP
WHERE SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 이메일 템플릿 -->
<!-- 이메일 템플릿 조회 -->
<select id="selectBOEmailAtmcSndngTmplatInqireForm"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
EMAIL_SNDNG_FORM_INNB
, SOPMAL_CD
, FORM_DV_CD
, FORM_DTL_DV_CD
, EMAIL_SJ
FROM GC_EMAIL_FORM
]]>
<include refid = "tmpltEmailListInqireWhere"/>
<![CDATA[
ORDER BY FORM_DTL_DV_CD;
]]>
</select>
<!-- 이메일 템플릿 단건 조회 -->
<select id="selectBOEmailAtmcSndngTmplatOneInqireForm"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
EMAIL_SNDNG_FORM_INNB
, SOPMAL_CD
, EMAIL_SJ
, EMAIL_CN
FROM GC_EMAIL_FORM
]]>
<include refid = "tmpltEmailListInqireWhere"/>
</select>
<!-- 이메일 템플릿 등록(사용안함) -->
<insert id="insertBOEmailTmplat"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(EMAIL_SNDNG_FORM_INNB), 0)+1
FROM GC_EMAIL_FORM
]]>
</selectKey>
INSERT INTO GC_EMAIL_FORM (
EMAIL_SNDNG_FORM_INNB
, SOPMAL_CD
, EMAIL_FORM_DV
, EMAIL_SJ
, EMAIL_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, #{cnncUrl}
, #{popupMgWth}
, 'Y'
, #{regusr}
, NOW()
, #{updusr}
, NOW()
)
</insert>
<!-- 이메일 템플릿 수정 -->
<update id="updateBOEmailTmplat" parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO">
<![CDATA[
UPDATE GC_EMAIL_FORM
SET
EMAIL_SJ = #{emailSj}
, EMAIL_CN = #{emailCn}
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
]]>
<include refid = "tmpltEmailListInqireWhere"/>
</update>
<!-- 메시지 템플릿 -->
<!-- 메시지(SMS) 템플릿 조회 -->
<select id="selectBOMssageAtmcSndngTmplatInqireForm"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
FORM.SMS_SNDNG_FORM_INNB
, FORM.FORM_DV_CD
, FORM.FORM_DTL_DV_CD
, CODE.CD_NM
, FORM.SMS_CN
, FORM.SOPMAL_CD
FROM GC_SMS_FORM FORM
JOIN GC_CODE CODE
ON FORM.FORM_DV_CD = CODE.GROUP_CD
AND FORM.FORM_DTL_DV_CD = CODE.CD
]]>
<include refid = "tmpltMssageListInqireWhere"/>
<![CDATA[
ORDER BY FORM_DTL_DV_CD;
]]>
</select>
<!-- 메시지 템플릿 등록(사용안함) -->
<insert id="insertBOMssageTmplat"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(SMS_SNDNG_FORM_INNB), 0)+1
FROM GC_SMS_FORM
]]>
</selectKey>
INSERT INTO GC_SMS_FORM (
SMS_SNDNG_FORM_INNB
, SOPMAL_CD
, FORM_DV
, SMS_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 메시지 템플릿 수정 -->
<update id="updateBOMssageTmplat" parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_SMS_FORM
SET
SMS_CN = #{dto.smsCn}
, UPDUSR = #{dto.updusr}
, UPDT_DT = SYSDATE()
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 알림톡 템플릿 조회 -->
<select id="selectBONtcntalkAtmcSndngTmplatInqireForm"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
FORM.NTCNTALK_SNDNG_FORM_INNB
, FORM.FORM_DV_CD
, FORM.FORM_DTL_DV_CD
, CODE.CD_NM
, FORM.MSG
, FORM.SMS_RPLC_AT
, FORM.SMS_CN
FROM GC_KAKAO_FORM FORM
JOIN GC_CODE CODE
ON FORM.FORM_DV_CD = CODE.GROUP_CD
AND FORM.FORM_DTL_DV_CD = CODE.CD
]]>
<include refid = "tmpltNtcntalkListInqireWhere"/>
<![CDATA[
ORDER BY FORM_DTL_DV_CD;
]]>
</select>
<!-- 알림톡 템플릿 조회_팝업 -->
<select id="selectBONtcntalkAtmcSndngTmplatUpdtPopupForm"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
CODE.CD_NM
, FORM.MSG
, FORM.BTN_TYPE_01
, FORM.BTN_NM_01
, FORM.BTN_01_URL_01
, FORM.BTN_01_URL_02
, FORM.BTN_TYPE_02
, FORM.BTN_NM_02
, FORM.BTN_02_URL_01
, FORM.BTN_02_URL_02
, FORM.BTN_TYPE_03
, FORM.BTN_NM_03
, FORM.BTN_03_URL_01
, FORM.BTN_03_URL_02
, FORM.BTN_TYPE_04
, FORM.BTN_NM_04
, FORM.BTN_04_URL_01
, FORM.BTN_04_URL_02
, FORM.BTN_TYPE_05
, FORM.BTN_NM_05
, FORM.BTN_05_URL_01
, FORM.BTN_05_URL_02
, FORM.SMS_RPLC_AT
, FORM.SMS_CN
FROM GC_KAKAO_FORM FORM
JOIN GC_CODE CODE
ON FORM.FORM_DV_CD = CODE.GROUP_CD
AND FORM.FORM_DTL_DV_CD = CODE.CD
]]>
<include refid = "tmpltNtcntalkListInqireWhere"/>
</select>
<!-- 알림톡 템플릿 등록(사용안함) -->
<insert id="insertBOKakaoForm"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(NTCNTALK_SNDNG_FORM_INNB), 0)+1
FROM GC_KAKAO_FORM
]]>
</selectKey>
INSERT INTO GC_KAKAO_FORM (
NTCNTALK_SNDNG_FORM_INNB
, SOPMAL_CD
, KAKAO_CD
, FORM_DV
, SMS_RPLC_AT
, SMS_RPLC_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 알림톡 템플릿 등록_버튼(사용안함) -->
<insert id="insertBOKakaoFormButton"
parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(NTCNTALK_SNDNG_FORM_INNB), 0)+1
FROM GC_KAKAO_FORM_BUTTON
]]>
</selectKey>
INSERT INTO GC_KAKAO_FORM_BUTTON (
NTCNTALK_SNDNG_FORM_INNB
, BUTTON_INNB
, BUTTON_NM
, BUTTON_URL
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 알림톡 템플릿 수정 -->
<update id="updateBOKakaoForm" parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_KAKAO_FORM
SET
MSG = #{dto.msg}
, SMS_CN = #{dto.smsCn}
, SMS_RPLC_AT = #{dto.smsRplcAt}
, UPDUSR = #{dto.updusr}
, UPDT_DT = SYSDATE()
WHERE FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 알림톡 템플릿 수정_팝업 -->
<update id="updateBOKakaoFormPopup" parameterType="com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO">
<![CDATA[
UPDATE GC_KAKAO_FORM
SET
MSG = #{msg}
, BTN_TYPE_01 = #{btnType01}
, BTN_NM_01 = #{btnNm01}
, BTN_01_URL_01 = #{btn01Url01}
, BTN_01_URL_02 = #{btn01Url02}
, BTN_TYPE_02 = #{btnType02}
, BTN_NM_02 = #{btnNm02}
, BTN_02_URL_01 = #{btn02Url01}
, BTN_02_URL_02 = #{btn02Url02}
, BTN_TYPE_03 = #{btnType03}
, BTN_NM_03 = #{btnNm03}
, BTN_03_URL_01 = #{btn03Url01}
, BTN_03_URL_02 = #{btn03Url02}
, BTN_TYPE_04 = #{btnType04}
, BTN_NM_04 = #{btnNm04}
, BTN_04_URL_01 = #{btn04Url01}
, BTN_04_URL_02 = #{btn04Url02}
, BTN_TYPE_05 = #{btnType05}
, BTN_NM_05 = #{btnNm05}
, BTN_05_URL_01 = #{btn05Url01}
, BTN_05_URL_02 = #{btn05Url02}
, SMS_RPLC_AT = #{smsRplcAt}
, SMS_CN = #{smsCn}
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
WHERE FORM_DV_CD = #{formDvCd}
AND FORM_DTL_DV_CD = #{formDtlDvCd}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 통합관리자 자동발송관리 쇼핑몰 조회 -->
<select id="selectBOSopmalAtmcSndng">
SELECT
GMS.SOPMAL_CD
, GS.SOPMAL_NM
FROM GC_MESSAGE_SNDNG GMS
INNER JOIN GC_SHOP GS
ON GMS.SOPMAL_CD = GS.SOPMAL_CD
GROUP BY SOPMAL_CD
</select>
<!-- 템플릿 사용 그룹 조회 -->
<select id="selectBOTmplatGroup"
resultType="dataMap">
<![CDATA[
SELECT
*
FROM GC_CODE GC
INNER JOIN (
SELECT
SUBSTRING_INDEX(GMS.FORM_DV_CD, '_', 2) AS GROUP_CD
, SUBSTRING_INDEX(GMS.FORM_DV_CD, '_', -1) AS CD
FROM GC_MESSAGE_SNDNG GMS
WHERE 1=1
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '02'
AND GMS.SOPMAL_CD = #{sopmalCd}
GROUP BY GMS.FORM_DV_CD
) TB
ON GC.GROUP_CD = TB.GROUP_CD
AND GC.CD = TB.CD
]]>
</select>
<!-- 템플릿 사용 그룹 폼 조회 -->
<select id="selectBOTmplatFormGroup"
resultType="dataMap">
<![CDATA[
SELECT
*
FROM GC_CODE GC
INNER JOIN GC_MESSAGE_SNDNG GMS
ON GC.GROUP_CD = GMS.FORM_DV_CD
AND GC.CD = GMS.FORM_DTL_DV_CD
WHERE 1=1
AND GMS.SOPMAL_CD = #{sopmalCd}
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '02'
]]>
</select>
</mapper>

View File

@@ -0,0 +1,250 @@
<?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.wb.domainserver.domain.admin.stats.marktAnals.mapper.BOMaAdminStatsMapper">
<!--
회원 및 마일리지 표 건수 조회
-->
<select id="selectBOAdminMbrNdMlgTableCntInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT
COUNT(*)
FROM (
-- 1. 총 회원수
SELECT '1. 총 회원수' gubun, count(*) AS union_cust_cnt
, sum(CASE WHEN main_sopmal_cd = 'NC' THEN 1 ELSE 0 END ) AS NC_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'CH' THEN 1 ELSE 0 END ) AS CH_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'TZ' THEN 1 ELSE 0 END ) AS TZ_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'PL' THEN 1 ELSE 0 END ) AS PL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'NB' THEN 1 ELSE 0 END ) AS NB_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DT' THEN 1 ELSE 0 END ) AS DT_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DL' THEN 1 ELSE 0 END ) AS DL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'AF' THEN 1 ELSE 0 END ) AS AF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'BD' THEN 1 ELSE 0 END ) AS BD_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'LF' THEN 1 ELSE 0 END ) AS LF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'JM' THEN 1 ELSE 0 END ) AS JM_CU_CNT
FROM GC_MEMBER
WHERE 1=1
AND MBR_DV_CD = 'GC'
-- AND MAIN_SOPMAL_CD = 'NC'
AND USE_AT = 'Y'
UNION all
-- 2. 가입한 회원수(조회기간 가입회원수 기준 구매회원수 비율)
SELECT '2. 가입한 회원수(조회기간 가입회원수 기준 구매회원수 비율)' gubun, count(*) AS union_cust_cnt
, sum(CASE WHEN main_sopmal_cd = 'NC' THEN 1 ELSE 0 END ) AS NC_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'CH' THEN 1 ELSE 0 END ) AS CH_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'TZ' THEN 1 ELSE 0 END ) AS TZ_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'PL' THEN 1 ELSE 0 END ) AS PL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'NB' THEN 1 ELSE 0 END ) AS NB_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DT' THEN 1 ELSE 0 END ) AS DT_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DL' THEN 1 ELSE 0 END ) AS DL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'AF' THEN 1 ELSE 0 END ) AS AF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'BD' THEN 1 ELSE 0 END ) AS BD_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'LF' THEN 1 ELSE 0 END ) AS LF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'JM' THEN 1 ELSE 0 END ) AS JM_CU_CNT
FROM GC_MEMBER
WHERE 1=1
AND MBR_DV_CD = 'GC'
AND USE_AT = 'Y'
AND REGIST_DT BETWEEN '2025-04-01 00:00:00' AND '2025-04-30 23:59:59' /* 가입 기간 설정 */
UNION all
-- 3. 구매한 회원수(1회)
SELECT '3. 구매한 회원수(1회) ' gubun, count(*) AS union_cust_cnt
, sum(CASE WHEN main_sopmal_cd = 'NC' THEN 1 ELSE 0 END ) AS NC_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'CH' THEN 1 ELSE 0 END ) AS CH_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'TZ' THEN 1 ELSE 0 END ) AS TZ_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'PL' THEN 1 ELSE 0 END ) AS PL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'NB' THEN 1 ELSE 0 END ) AS NB_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DT' THEN 1 ELSE 0 END ) AS DT_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DL' THEN 1 ELSE 0 END ) AS DL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'AF' THEN 1 ELSE 0 END ) AS AF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'BD' THEN 1 ELSE 0 END ) AS BD_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'LF' THEN 1 ELSE 0 END ) AS LF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'JM' THEN 1 ELSE 0 END ) AS JM_CU_CNT
FROM GC_MEMBER MEM
JOIN (
#주문
SELECT MBR_INNB , MBR_DV_CD , SOPMAL_CD
, COUNT(*) AS ORD_CNT
, SUM(RL_SETLE_AMT) SUM_RL_SETLE_AMT
FROM GC_ORDER
WHERE 1=1
AND MBR_DV_CD = 'GC'
-- AND SOPMAL_CD = 'AF'
AND USE_AT = 'Y'
AND ordr_sttus_cd BETWEEN '25' AND '75'
AND SETLE_COMPT_DT BETWEEN '2025-04-01 00:00:00' AND '2025-05-31 23:59:59' /* 구매 기간 설정 */
GROUP BY 1,2,3 ) ORD
ON MEM.MBR_INNB = ORD.MBR_INNB
AND MEM.MAIN_SOPMAL_CD = ORD.SOPMAL_CD
WHERE 1=1
AND MEM.MBR_DV_CD = 'GC'
AND MEM.USE_AT = 'Y'
AND MEM.REGIST_DT BETWEEN '2025-04-01 00:00:00' AND '2025-04-30 23:59:59' /* 가입 기간 설정 */
) AS TEMP
]]>
</select>
<!--
회원 및 마일리지 표 조회
-->
<select id="selectBOAdminMbrNdMlgTableInqire"
parameterType = "com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO"
resultType="DataMap">
<![CDATA[
SELECT
*
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
-- 1. 총 회원수
SELECT '1. 총 회원수' gubun, count(*) AS union_cust_cnt
, sum(CASE WHEN main_sopmal_cd = 'NC' THEN 1 ELSE 0 END ) AS NC_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'CH' THEN 1 ELSE 0 END ) AS CH_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'TZ' THEN 1 ELSE 0 END ) AS TZ_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'PL' THEN 1 ELSE 0 END ) AS PL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'NB' THEN 1 ELSE 0 END ) AS NB_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DT' THEN 1 ELSE 0 END ) AS DT_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DL' THEN 1 ELSE 0 END ) AS DL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'AF' THEN 1 ELSE 0 END ) AS AF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'BD' THEN 1 ELSE 0 END ) AS BD_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'LF' THEN 1 ELSE 0 END ) AS LF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'JM' THEN 1 ELSE 0 END ) AS JM_CU_CNT
FROM GC_MEMBER
WHERE 1=1
AND MBR_DV_CD = 'GC'
-- AND MAIN_SOPMAL_CD = 'NC'
AND USE_AT = 'Y'
UNION all
-- 2. 가입한 회원수(조회기간 가입회원수 기준 구매회원수 비율)
SELECT '2. 가입한 회원수(조회기간 가입회원수 기준 구매회원수 비율)' gubun, count(*) AS union_cust_cnt
, sum(CASE WHEN main_sopmal_cd = 'NC' THEN 1 ELSE 0 END ) AS NC_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'CH' THEN 1 ELSE 0 END ) AS CH_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'TZ' THEN 1 ELSE 0 END ) AS TZ_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'PL' THEN 1 ELSE 0 END ) AS PL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'NB' THEN 1 ELSE 0 END ) AS NB_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DT' THEN 1 ELSE 0 END ) AS DT_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DL' THEN 1 ELSE 0 END ) AS DL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'AF' THEN 1 ELSE 0 END ) AS AF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'BD' THEN 1 ELSE 0 END ) AS BD_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'LF' THEN 1 ELSE 0 END ) AS LF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'JM' THEN 1 ELSE 0 END ) AS JM_CU_CNT
FROM GC_MEMBER
WHERE 1=1
AND MBR_DV_CD = 'GC'
AND USE_AT = 'Y'
AND REGIST_DT BETWEEN '2025-04-01 00:00:00' AND '2025-04-30 23:59:59' /* 가입 기간 설정 */
UNION all
-- 3. 구매한 회원수(1회)
SELECT '3. 구매한 회원수(1회) ' gubun, count(*) AS union_cust_cnt
, sum(CASE WHEN main_sopmal_cd = 'NC' THEN 1 ELSE 0 END ) AS NC_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'CH' THEN 1 ELSE 0 END ) AS CH_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'TZ' THEN 1 ELSE 0 END ) AS TZ_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'PL' THEN 1 ELSE 0 END ) AS PL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'NB' THEN 1 ELSE 0 END ) AS NB_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DT' THEN 1 ELSE 0 END ) AS DT_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'DL' THEN 1 ELSE 0 END ) AS DL_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'AF' THEN 1 ELSE 0 END ) AS AF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'BD' THEN 1 ELSE 0 END ) AS BD_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'LF' THEN 1 ELSE 0 END ) AS LF_CU_CNT
, sum(CASE WHEN main_sopmal_cd = 'JM' THEN 1 ELSE 0 END ) AS JM_CU_CNT
FROM GC_MEMBER MEM
JOIN (
#주문
SELECT MBR_INNB , MBR_DV_CD , SOPMAL_CD
, COUNT(*) AS ORD_CNT
, SUM(RL_SETLE_AMT) SUM_RL_SETLE_AMT
FROM GC_ORDER
WHERE 1=1
AND MBR_DV_CD = 'GC'
-- AND SOPMAL_CD = 'AF'
AND USE_AT = 'Y'
AND ordr_sttus_cd BETWEEN '25' AND '75'
AND SETLE_COMPT_DT BETWEEN '2025-04-01 00:00:00' AND '2025-05-31 23:59:59' /* 구매 기간 설정 */
GROUP BY 1,2,3 ) ORD
ON MEM.MBR_INNB = ORD.MBR_INNB
AND MEM.MAIN_SOPMAL_CD = ORD.SOPMAL_CD
WHERE 1=1
AND MEM.MBR_DV_CD = 'GC'
AND MEM.USE_AT = 'Y'
AND MEM.REGIST_DT BETWEEN '2025-04-01 00:00:00' AND '2025-04-30 23:59:59' /* 가입 기간 설정 */
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- &lt;!&ndash; 마일리지 통계 &ndash;&gt;-->
<!-- <select id="selectBOMaMlgStatList"-->
<!-- resultType="dataMap">-->
<!-- SELECT-->
<!-- *-->
<!-- FROM GC_MBR_MLG_MCLOS-->
<!-- WHERE 1=1-->
<!-- AND (( MTH = DATE_FORMAT(DATE_SUB(CONCAT(#{srchDt},'01')-->
<!-- , INTERVAL 1 MONTH), '%Y%m') AND S_GROUP = 'month balance' )-->
<!-- OR ( MTH = #{srchDt} ) )-->
<!-- ORDER BY 1,2,3,4,5,6-->
<!-- </select>-->
<!-- &lt;!&ndash; 마일리지 정산 목록 &ndash;&gt;-->
<!-- <select id="selectBOMaMlgStlList"-->
<!-- resultType="dataMap">-->
<!-- SELECT-->
<!-- '정산내역(사용 - 취소)' L_GROUP-->
<!-- , S_SEQ, S_GROUP-->
<!-- , SUM(SUM_CH) * -1 CH-->
<!-- , SUM(SUM_TZ) * -1 TZ-->
<!-- , SUM(SUM_NC) * -1 NC-->
<!-- , SUM(SUM_PL) * -1 PL-->
<!-- , SUM(SUM_NB) * -1 NB-->
<!-- , SUM(SUM_OY) * -1 OY-->
<!-- , SUM(SUM_KL) * -1 KL-->
<!-- , SUM(SUM_DT) * -1 DT-->
<!-- , SUM(SUM_CB) * -1 CB-->
<!-- , SUM(SUM_AP) * -1 AP-->
<!-- , SUM(SUM_LF) * -1 LF-->
<!-- , SUM(SUM_GC) * -1 GC-->
<!-- FROM GC_MBR_MLG_MCLOS-->
<!-- WHERE MTH = #{srchDt}-->
<!-- AND (L_SEQ, L_GROUP, M_SEQ) in ( (1, 'add_group', 2), (2, 'minus_group', 1) )-->
<!-- GROUP BY 1,2,3-->
<!-- ORDER BY 1,2,3-->
<!-- </select>-->
<!--
쇼핑몰 코드, 이름 조회
-->
<select id="selectBOAdminMbrNdMlgStats"
resultType="DataMap">
<![CDATA[
SELECT
SOPMAL_CD,
SOPMAL_NM
FROM (
SELECT
'GC' AS SOPMAL_CD,
'통합몰' AS SOPMAL_NM,
NULL AS SOPMAL_TY_CD
UNION ALL
SELECT
SOPMAL_CD,
IF(SOPMAL_TY_CD = '01', CONCAT('통합몰 ', SOPMAL_NM), CONCAT('독립몰 ', SOPMAL_NM)) AS SOPMAL_NM,
SOPMAL_TY_CD
FROM GC_SHOP
ORDER BY SOPMAL_TY_CD ASC
) A
]]>
</select>
</mapper>

View File

@@ -0,0 +1,253 @@
<?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.wb.domainserver.domain.admin.store.bsnm.mapper.BOBsnmMapper">
<!-- 검색어 -->
<sql id="srchStr">
<![CDATA[
LIKE CONCAT('%', #{srchStr}, '%')
]]>
</sql>
<sql id="selectBOBsnmListInqireWhere">
<![CDATA[
AND 1=1
]]>
<!-- 검색조건 별 검색 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStr)">
<choose>
<when test="srchType=='BSNM_NM'">
AND BSNM_NM <include refid ="srchStr"/>
</when>
<when test="srchType=='BIZRNB'">
AND BIZRNB <include refid ="srchStr"/>
</when>
<when test="srchType=='REPRSNTVNM'">
AND REPRSNTVNM <include refid ="srchStr"/>
</when>
<when test="srchType=='MOB_DCL_NB'">
AND MOB_DCL_NB <include refid ="srchStr"/>
</when>
</choose>
</if>
</sql>
<!-- 사업자 목록조회 조건절 -->
<sql id="selectBOBsnmListWhere">
<![CDATA[
WHERE 1=1
AND USE_AT = 'Y'
]]>
</sql>
<!-- 사업자 상세조회, 수정, 삭제 조건절-->
<sql id="selectBOBsnmKeyWhere">
<![CDATA[
WHERE 1=1
AND BSNM_INNB = #{bsnmInnb}
]]>
</sql>
<!-- 사업자 목록조회 From절 -->
<sql id="selectBOBsnmListFrom">
<![CDATA[
FROM GC_COMPANY
]]>
</sql>
<!-- 사업자 목록건수조회 -->
<select id="selectBOBsnmListCnt"
parameterType="com.wb.domainserver.domain.admin.store.bsnm.vo.BOBsnmVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
]]>
<include refid="selectBOBsnmListFrom"/>
<include refid="selectBOBsnmListWhere"/>
<include refid="selectBOBsnmListInqireWhere"/>
</select>
<!-- 사업자 목록 -->
<select id="selectBOBsnmList"
parameterType="com.wb.domainserver.domain.admin.store.bsnm.vo.BOBsnmVO"
resultType="datamap">
<![CDATA[
/*SET @ROWNUM = 0;*/
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,TB.*
FROM (
SELECT BSNM_INNB
, BSNM_NM
, BIZCND_CN
, ITEM_CN
, BIZRNB
, REPRSNTVNM
, TELNB
, MOB_DCL_NB
, BSN_DCL_NB
, REGIST_DT
, DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, UPDT_DT
, DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
]]>
<include refid="selectBOBsnmListFrom"/>
<include refid="selectBOBsnmListWhere"/>
<include refid="selectBOBsnmListInqireWhere"/>
<![CDATA[
ORDER BY REGIST_DT DESC , UPDT_DT DESC
) TB
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 사업자 등록 -->
<insert id="insertBOBsnm"
parameterType="com.wb.domainserver.domain.admin.store.bsnm.vo.BOBsnmVO">
<selectKey order="BEFORE" keyProperty="bsnmInnb" resultType="java.lang.String">
<![CDATA[
SELECT IFNULL(MAX(BSNM_INNB), 0)+1
FROM GC_COMPANY
]]>
</selectKey>
INSERT INTO GC_COMPANY (
BSNM_INNB
, BSNM_NM
, BIZCND_CN
, ITEM_CN
, BIZRNB
, MOB_DCL_NB
, REPRSNTVNM
, INDVDLINFO_PRTC_RSPNBER_NM
, TELNB
, FXNB
, EMAIL
, BSN_DCL_NB
, ZIP
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(lnbAdres)">
, LNB_ADRES
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(rnmAdres)">
, RNM_ADRES
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(dtlAdres)">
, DTL_ADRES
</if>
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{bsnmInnb}
, #{bsnmNm}
, #{bizcndCn}
, #{itemCn}
, #{bizrnb}
, #{mobDclNb}
, #{reprsntvnm}
, #{indvdlinfoPrtcRspnberNm}
, #{telnb}
, #{fxnb}
, #{email}
, #{bsnDclNb}
, #{zip}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(lnbAdres)">
, #{lnbAdres}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(rnmAdres)">
, #{rnmAdres}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(dtlAdres)">
, #{dtlAdres}
</if>
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 사업자 정보 상세 조회 -->
<select id="selectBOBsnmDtl"
parameterType="com.wb.domainserver.domain.admin.store.bsnm.vo.BOBsnmVO"
resultType="com.wb.domainserver.domain.admin.store.bsnm.vo.BOBsnmVO">
<![CDATA[
SELECT BSNM_INNB
, BSNM_NM
, BIZCND_CN
, ITEM_CN
, BIZRNB
, MOB_DCL_NB
, REPRSNTVNM
, INDVDLINFO_PRTC_RSPNBER_NM
, TELNB
, FXNB
, EMAIL
, BSN_DCL_NB
, ZIP
, LNB_ADRES
, RNM_ADRES
, DTL_ADRES
, USE_AT
-- , REGUSR
-- , REGIST_DT
-- , UPDUSR
-- , UPDT_DT
]]>
<include refid="selectBOBsnmListFrom"/>
<include refid="selectBOBsnmKeyWhere"/>
</select>
<!-- 사업자 수정 -->
<update id="updateBOBsnmUpdt" parameterType="com.wb.domainserver.domain.admin.store.bsnm.vo.BOBsnmVO">
<![CDATA[
UPDATE GC_COMPANY
SET
BSNM_NM = #{bsnmNm}
, BIZCND_CN = #{bizcndCn}
, ITEM_CN = #{itemCn}
, MOB_DCL_NB = #{mobDclNb}
, REPRSNTVNM = #{reprsntvnm}
, INDVDLINFO_PRTC_RSPNBER_NM = #{indvdlinfoPrtcRspnberNm}
, TELNB = #{telnb}
, FXNB = #{fxnb}
, EMAIL = #{email}
, BSN_DCL_NB = #{bsnDclNb}
, ZIP = #{zip}
, LNB_ADRES = #{lnbAdres}
, RNM_ADRES = #{rnmAdres}
, DTL_ADRES = #{dtlAdres}
, USE_AT = 'Y'
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
]]>
<include refid="selectBOBsnmKeyWhere"/>
</update>
<!-- 사업자 삭제 -->
<update id="deleteBOBsnm" parameterType="String">
<![CDATA[
UPDATE GC_COMPANY
SET USE_AT = 'N'
,UPDUSR = #{updusr}
,UPDT_DT = SYSDATE()
]]>
<include refid="selectBOBsnmKeyWhere"/>
</update>
<!-- 사업자번호 중복 조회 -->
<select id="selectBOBizrnbDplct" resultType="Integer">
SELECT COUNT(*)
<include refid="selectBOBsnmListFrom"/>
WHERE 1=1
AND BIZRNB = #{bizrnb}
</select>
</mapper>

View File

@@ -0,0 +1,261 @@
<?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.wb.domainserver.domain.admin.store.extlink.mapper.BOMaExtlinkMapper">
<!-- where절 -->
<sql id="srchExtrlNmwhere">
WHERE
1=1
AND
USE_AT = 'Y'
<if test="srchExtrlNm != null and srchExtrlNm != ''">
AND
UPPER(EXTRL_NM) LIKE CONCAT('%', UPPER(#{srchExtrlNm}), '%')
</if>
<if test="srchExtrlSystem != null and srchExtrlSystem != ''">
AND
EXTRL_SYSTEM = #{srchExtrlSystem}
</if>
</sql>
<!-- orderBy절 -->
<sql id="registDtorderby">
ORDER BY REGIST_DT ASC
</sql>
<!-- 페이징처리를 위한 연동목록 목록 총 개수 -->
<select id="selectBOextlinkTotCnt"
parameterType="com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO"
resultType="Integer">
SELECT
COUNT(1)
FROM (
SELECT
EXTRL_INNB,
EXTRL_NM,
EXTRL_SYSTEM,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DT
FROM
GC_EXTRL_KEY GEK
<include refid="srchExtrlNmwhere" />
) TOTAL
</select>
<!-- 외부연동 조회 -->
<select id="selectBOextlinkList"
parameterType="com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO"
resultType="DataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
EXTRL_INNB,
EXTRL_NM,
EXTRL_SYSTEM,
EXTRL_FUNCTION_LOGIN,
EXTRL_FUNCTION_BUY,
FN_GET_COMMCODE_NAME('EXTRL_SYSTEM_DV', EXTRL_SYSTEM) AS EXTRL_SYSTEM_NM,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DT
FROM
GC_EXTRL_KEY GEK
<include refid="srchExtrlNmwhere" />
ORDER BY
EXTRL_INNB DESC
) BM
WHERE
(@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 회원 등급 등록 -->
<insert id="insertBOExtLinkRegist"
parameterType="com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO">
<selectKey order="BEFORE" keyProperty="extrlInnb" resultType="java.lang.Integer">
SELECT
IFNULL(MAX(EXTRL_INNB), 0) + 1
FROM
GC_EXTRL_KEY GEK
</selectKey>
INSERT
INTO GC_EXTRL_KEY
(
EXTRL_INNB,
EXTRL_NM,
EXTRL_SYSTEM,
EXTRL_FUNCTION_LOGIN,
EXTRL_FUNCTION_BUY,
EXTRL_CLIENT_ID,
EXTRL_CLIENT_SECRET,
EXTRL_CLIENT_SECRET_KEY,
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES
(
#{extrlInnb},
#{extrlNm},
#{extrlSystem},
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(extrlFunctionLogin)">
#{extrlFunctionLogin},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(extrlFunctionLogin)">
null,
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(extrlFunctionBuy)">
#{extrlFunctionBuy},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(extrlFunctionBuy)">
null,
</if>
#{extrlClientId},
#{extrlClientSecret},
#{extrlClientSecretKey},
'Y',
#{regusr},
NOW(),
#{regusr},
NOW()
)
</insert>
<!-- 외부연동 수정 조회 -->
<select id="selectBOExtLinkUpdtForm"
parameterType="java.lang.String"
resultType="DataMap">
SELECT
EXTRL_INNB,
EXTRL_NM,
EXTRL_SYSTEM,
EXTRL_FUNCTION_LOGIN,
EXTRL_FUNCTION_BUY,
EXTRL_CLIENT_ID,
EXTRL_CLIENT_SECRET,
EXTRL_CLIENT_SECRET_KEY
FROM
GC_EXTRL_KEY
WHERE
1=1
AND
EXTRL_INNB = #{extrlInnb}
</select>
<!-- 외부연동 수정 -->
<update id="updateBOExtLinkUpdt"
parameterType="com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO">
UPDATE
GC_EXTRL_KEY
SET
EXTRL_NM = #{extrlNm},
EXTRL_SYSTEM = #{extrlSystem},
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(extrlFunctionLogin)">
EXTRL_FUNCTION_LOGIN = #{extrlFunctionLogin},
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(extrlFunctionLogin)">
EXTRL_FUNCTION_LOGIN = null,
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(extrlFunctionBuy)">
EXTRL_FUNCTION_BUY = #{extrlFunctionBuy},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(extrlFunctionBuy)">
EXTRL_FUNCTION_BUY = null,
</if>
EXTRL_CLIENT_ID = #{extrlClientId},
EXTRL_CLIENT_SECRET = #{extrlClientSecret},
EXTRL_CLIENT_SECRET_KEY = #{extrlClientSecretKey},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE
1=1
AND
EXTRL_INNB = #{extrlInnb}
</update>
<!-- 엑셀다운로드용 조회 -->
<select id="selectBOexcelFileDownload"
parameterType="com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO"
resultType="DataMap">
SELECT
EXTRL_INNB,
EXTRL_NM,
EXTRL_SYSTEM,
FN_GET_COMMCODE_NAME('EXTRL_SYSTEM_DV', EXTRL_SYSTEM) AS EXTRL_SYSTEM_NM,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DT
FROM
GC_EXTRL_KEY GEK
<include refid="srchExtrlNmwhere" />
ORDER BY
EXTRL_INNB DESC
</select>
<!-- 외부연동 삭제 -->
<update id="deleteBOExtLinkDel"
parameterType="com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO">
UPDATE
GC_EXTRL_KEY
SET
USE_AT = 'N',
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE
1=1
AND
EXTRL_INNB = #{extrlInnb}
</update>
<!-- system 목록 조회 -->
<select id="selectBOextlinkSystemList" resultType="DataMap">
SELECT
CD AS extlinkSystemCd,
CD_NM AS extlinkSystemNm
FROM
GC_CODE
WHERE
GROUP_CD = 'EXTRL_SYSTEM_DV'
ORDER BY
SORT_ORDR ASC
</select>
<!-- 회원 등급 조회 제한없음 -->
<select id="selectBOextlinkListNotLimit"
parameterType="com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO"
resultType="DataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
EXTRL_INNB,
EXTRL_NM,
EXTRL_SYSTEM,
FN_GET_COMMCODE_NAME('EXTRL_SYSTEM_DV', EXTRL_SYSTEM) AS EXTRL_SYSTEM_NM,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DT
FROM
GC_EXTRL_KEY GEK
<include refid="srchExtrlNmwhere" />
ORDER BY
EXTRL_INNB DESC
) BM
WHERE
(@ROWNUM:=0)=0
) PV
WHERE 1=1
</select>
<select id="selectBOextlinkShopCnt"
parameterType="java.lang.Integer"
resultType="java.lang.Integer">
SELECT COUNT(*)
FROM GC_SHOP_EXTRL
WHERE EXTRL_INNB = #{extrlInnb}
</select>
</mapper>

View File

@@ -0,0 +1,300 @@
<?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.wb.domainserver.domain.admin.store.mbrgrad.mapper.BOMaMbrgradMapper">
<!-- where절 -->
<sql id="srchMbrGradNmwhere">
WHERE 1=1
AND USE_AT = 'Y'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchMbrGradNm)">
AND MBR_GRAD_GROUP_NM LIKE CONCAT('%',#{srchMbrGradNm},'%') /* 회원등급 그룹명 */
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
AND SOPMAL_CD = #{srchSopmalCd} /* 쇼핑몰 코드 */
</if>
</sql>
<!--****************************************************************
회원 등급 그룹 관련
********************************************************************-->
<!-- 회원 등급 건수 (페이징 관련) -->
<select id="selectBOMbrGradTotCnt"
parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO"
resultType="Integer">
SELECT
COUNT(1)
FROM (
SELECT
MBR_GRAD_GROUP_INNB,
MBR_GRAD_GROUP_NM,
CALC_PD_MT_CNT,
GRAD_MDAT_STDR_MT,
GRAD_MDAT_STDR_DE,
GRAD_MDAT_CYCLE_MT_CNT
FROM
GC_MEMBER_GRAD_GROUP MGG
<include refid="srchMbrGradNmwhere" />
) TOTAL
</select>
<!-- 회원 등급 그룹 조회 -->
<select id="selectBOMbrGradDtl"
parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO"
resultType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO">
SELECT
MBR_GRAD_GROUP_INNB,
FN_GET_SOPMAL_NAME(SOPMAL_CD)SOPMAL_NM,
SOPMAL_CD,
MBR_GRAD_GROUP_NM,
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(serverDv)">
CONVERT(CALC_PD_MT_CNT, UNSIGNED) AS CALC_PD_MT_CNT,
</when>
<otherwise>
CALC_PD_MT_CNT,
</otherwise>
</choose>
GRAD_MDAT_STDR_MT,
GRAD_MDAT_STDR_DE,
GRAD_MDAT_CYCLE_MT_CNT
FROM
GC_MEMBER_GRAD_GROUP
where 1=1
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrGradGroupInnb)">
AND MBR_GRAD_GROUP_INNB = #{mbrGradGroupInnb}
</if>
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 회원 등급 그룹 상세 조회 -->
<select id="selectBOMbrGradList"
parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO"
resultType="DataMap">
SELECT *
FROM
(
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM,
BM.*
FROM (
SELECT
MBR_GRAD_GROUP_INNB,
MBR_GRAD_GROUP_NM,
FN_GET_SOPMAL_NAME(SOPMAL_CD)SOPMAL_NM,
SOPMAL_CD,
CALC_PD_MT_CNT,
FN_GET_COMMCODE_NAME('MT_CD', CALC_PD_MT_CNT) AS CALC_PD_MT_CNT_NM,
GRAD_MDAT_STDR_MT,
GRAD_MDAT_STDR_DE,
GRAD_MDAT_CYCLE_MT_CNT,
FN_GET_COMMCODE_NAME('MT_CD', GRAD_MDAT_CYCLE_MT_CNT) AS GRAD_MDAT_CYCLE_MT_CNT_NM,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DT
FROM
GC_MEMBER_GRAD_GROUP MGG
<include refid="srchMbrGradNmwhere" />
ORDER BY
MBR_GRAD_GROUP_INNB DESC
) BM
WHERE
(@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 회원등급 그룹 수정 -->
<update id="updateMbrGrad"
parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO">
UPDATE
GC_MEMBER_GRAD_GROUP
SET
MBR_GRAD_GROUP_NM = #{mbrGradGroupNm},
CALC_PD_MT_CNT = #{calcPdMtCnt},
GRAD_MDAT_STDR_MT = #{gradMdatStdrMt},
GRAD_MDAT_STDR_DE = #{gradMdatStdrDe},
GRAD_MDAT_CYCLE_MT_CNT = #{gradMdatCycleMtCnt},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE
MBR_GRAD_GROUP_INNB = #{mbrGradGroupInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 회원등급 그룹 등록 -->
<insert id="insertBOMbrGradGroup"
parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO">
<selectKey order="BEFORE" keyProperty="mbrGradGroupInnb" resultType="String">
SELECT
IFNULL(MAX(MBR_GRAD_GROUP_INNB), 0) + 1
FROM
GC_MEMBER_GRAD_GROUP
</selectKey>
INSERT INTO GC_MEMBER_GRAD_GROUP
(
MBR_GRAD_GROUP_INNB,
SOPMAL_CD,
MBR_GRAD_GROUP_NM,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES
(
#{mbrGradGroupInnb},
#{sopmalCd},
#{mbrGradGroupNm},
#{regusr},
NOW(),
#{updusr},
NOW()
)
</insert>
<!--****************************************************************
회원 등급 관련
********************************************************************-->
<!-- 그룹별 회원 등급 조회 -->
<select id="selectBOMbrGradStdrList"
parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMbrGradVO"
resultType="DataMap">
WITH SUBQUERY AS (
SELECT
GMG.MBR_GRAD_INNB,
GMG.MBR_GRAD_GROUP_INNB,
GMG.MBR_GRAD_NM,
GMG.MBR_GRAD_CND_CD,
GMG.MBR_GRAD_AMT,
GMG.MBR_GRAD_ORDR,
GMG.MBR_GRAD_ICON_COURS,
DATE_FORMAT(GMG.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT,
DATE_FORMAT(GMG.UPDT_DT, '%Y-%m-%d %H:%i:%s') AS UPDT_DT,
COUNT(GMGM.MBR_GRAD_INNB) AS MBR_GRAD_CNT,
GMG.USE_AT
FROM
GC_MEMBER_GRAD GMG
LEFT JOIN GC_MEMBER_GRAD_MAPPING GMGM
ON GMG.MBR_GRAD_INNB = GMGM.MBR_GRAD_INNB
AND GMG.SOPMAL_CD = GMGM.SOPMAL_CD
WHERE
GMG.MBR_GRAD_GROUP_INNB = #{mbrGradGroupInnb}
AND GMG.SOPMAL_CD = #{sopmalCd}
AND GMG.USE_AT = 'Y'
GROUP BY
GMG.MBR_GRAD_INNB,
GMG.MBR_GRAD_GROUP_INNB,
GMG.MBR_GRAD_NM,
GMG.MBR_GRAD_CND_CD,
GMG.MBR_GRAD_AMT,
GMG.MBR_GRAD_ORDR,
GMG.MBR_GRAD_ICON_COURS,
REGIST_DT,
UPDT_DT
),
TOTCOUNT AS (
SELECT
SUM(MBR_GRAD_CNT) AS TOTAL_CNT
FROM
SUBQUERY
)
SELECT
A.*,
IFNULL(ROUND((A.MBR_GRAD_CNT / T.TOTAL_CNT) * 100, 2),0) AS MBR_GRAD_INNB_PER
FROM
SUBQUERY A,
TOTCOUNT T
ORDER BY
A.MBR_GRAD_ORDR ASC
</select>
<!--회원등급 등록 -->
<insert id="insertBOMbrGradStdr"
parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMbrGradVO">
<selectKey order="BEFORE" keyProperty="mbrGradInnb" resultType="String">
SELECT
IFNULL(MAX(MBR_GRAD_INNB), 0) + 1
FROM
GC_MEMBER_GRAD
</selectKey>
INSERT
INTO GC_MEMBER_GRAD
(
MBR_GRAD_INNB,
MBR_GRAD_GROUP_INNB,
SOPMAL_CD,
MBR_GRAD_NM,
MBR_GRAD_CND_CD,
MBR_GRAD_AMT,
MBR_GRAD_ORDR,
MBR_GRAD_ICON_COURS,
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES
(
#{mbrGradInnb},
#{mbrGradGroupInnb},
#{sopmalCd},
#{mbrGradNm},
#{mbrGradCndCd},
REPLACE(#{mbrGradAmt},',',''),
#{mbrGradOrdr},
#{mbrGradIconCours},
'Y',
#{regusr},
SYSDATE(),
#{updusr},
SYSDATE()
)
</insert>
<!-- 회원등급 수정-->
<update id="updateBOMbrGradCnd" parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMbrGradVO">
UPDATE GC_MEMBER_GRAD
SET MBR_GRAD_NM = #{mbrGradNm},
MBR_GRAD_CND_CD = #{mbrGradCndCd},
MBR_GRAD_AMT = REPLACE(#{mbrGradAmt},',',''),
MBR_GRAD_ORDR = #{mbrGradOrdr},
MBR_GRAD_ICON_COURS = #{mbrGradIconCours},
USE_AT = #{useAt},
UPDUSR = #{updusr},
UPDT_DT = SYSDATE()
WHERE MBR_GRAD_INNB = #{mbrGradInnb}
</update>
<!-- 회원등급 삭제-->
<delete id="deleteBOMbrGradCnd" parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMbrGradVO">
DELETE FROM GC_MEMBER_GRAD WHERE MBR_GRAD_INNB = #{mbrGradInnb}
</delete>
<!-- 회원등급 권한 등록-->
<insert id="insertBOGradAuth" parameterType="com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMbrGradVO">
<selectKey order="BEFORE" keyProperty="gradAuthorInnb" resultType="String">
SELECT
IFNULL(MAX(GRAD_AUTHOR_INNB), 0) + 1
FROM
GC_GRAD_AUTH
</selectKey>
INSERT INTO GC_GRAD_AUTH
(
GRAD_AUTHOR_INNB,
SOPMAL_CD ,
MBR_GRAD_INNB ,
AUTHOR_ID ,
REGUSR ,
REGIST_DT
)
SELECT
#{gradAuthorInnb},
#{sopmalCd},
#{mbrGradInnb},
MIN(AUTHOR_ID)AUTHOR_ID,
0,
NOW()
FROM GC_AUTH
WHERE SYS_DV_CD = '01'
</insert>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,201 @@
<?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.wb.domainserver.domain.admin.store.sopthema.mapper.BOSopthemaMapper">
<!-- 검색어 -->
<sql id="selectBOSopThemaListInqireWhere">
AND 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchThemaNm)">
AND GT.THEMA_NM LIKE CONCAT('%', #{srchThemaNm}, '%')
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
AND GS.SOPMAL_CD = #{srchSopmalCd}
</if>
</sql>
<!-- 쇼핑몰 테마 상세조회, 수정, 삭제 조건절-->
<sql id="selectBOSopThemaKeyWhere">
<![CDATA[
WHERE 1=1
AND USE_AT = 'Y'
AND THEMA_INNB = #{themaInnb}
]]>
</sql>
<!-- 쇼핑몰 테마 목록조회 From절 -->
<sql id="selectBOSopThemaListFrom">
FROM GC_THEME GT
LEFT JOIN GC_SHOP GS ON GT.THEMA_INNB = GS.THEMA_INNB
WHERE 1=1
AND GT.USE_AT = 'Y'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(themaInnb)">
AND GT.THEMA_INNB = #{themaInnb}
</if>
</sql>
<!-- 쇼핑몰 테마 목록건수조회 -->
<select id="selectBOSopThemaTotCnt"
parameterType="com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
FROM GC_THEME GT
WHERE 1=1
AND GT.USE_AT = 'Y'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
AND EXISTS ( SELECT 'X'
FROM GC_SHOP GS
WHERE 1 = 1
AND GS.THEMA_INNB = GT.THEMA_INNB
AND GS.SOPMAL_CD = #{srchSopmalCd})
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchThemaNm)">
AND GT.THEMA_NM LIKE CONCAT('%', #{srchThemaNm}, '%')
</if>
</select>
<!-- 쇼핑몰 테마 목록 -->
<select id="selectBOSopThemaList"
parameterType="com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO"
resultType="dataMap">
<![CDATA[
/*SET @ROWNUM = 0;*/
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,TB.*
FROM (
SELECT GT.THEMA_INNB
, GT.THEMA_NM
, GT.CSS_COURS
, GT.DC_CN
, GT.USE_AT
, GT.REGIST_DT
, DATE_FORMAT(GT.REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, GT.UPDT_DT
, DATE_FORMAT(GT.UPDT_DT, '%Y-%m-%d') AS UPDT_DE
, GROUP_CONCAT(GS.SOPMAL_NM ORDER BY GS.SOPMAL_NM SEPARATOR ', ') AS SOPMAL_NM
]]>
<include refid="selectBOSopThemaListFrom"/>
<include refid="selectBOSopThemaListInqireWhere"/>
GROUP BY GT.THEMA_INNB, GT.THEMA_NM, GT.CSS_COURS, GT.DC_CN, GT.USE_AT, GT.REGIST_DT, GT.UPDT_DT
<![CDATA[
ORDER BY GT.UPDT_DT DESC
) TB
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 쇼핑몰 테마 등록 -->
<insert id="insertBOSopThema"
parameterType="com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO">
<selectKey order="BEFORE" keyProperty="themaInnb" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(THEMA_INNB), 0)+1
FROM GC_THEME
]]>
</selectKey>
INSERT INTO GC_THEME (
THEMA_INNB
, THEMA_NM
, CSS_COURS
, DC_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{themaInnb}
, #{themaNm}
, #{cssCours}
, #{dcCn}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 쇼핑몰 테마 정보 상세 조회 -->
<select id="selectBOSopThemaDtl"
parameterType="com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO"
resultType="com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO">
<![CDATA[
SELECT GT.THEMA_INNB
, GT.THEMA_NM
, GT.CSS_COURS
, GT.DC_CN
, GT.USE_AT
, GT.REGIST_DT
, GT.UPDT_DT
, GROUP_CONCAT(GS.SOPMAL_NM ORDER BY GS.SOPMAL_NM SEPARATOR ', ') AS SOPMAL_NM
]]>
<include refid="selectBOSopThemaListFrom"/>
GROUP BY GT.THEMA_INNB, GT.THEMA_NM, GT.CSS_COURS, GT.DC_CN, GT.USE_AT, GT.REGIST_DT, GT.UPDT_DT
</select>
<!-- 쇼핑몰 테마 수정 -->
<update id="updateBOSopThema" parameterType="com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO">
<![CDATA[
UPDATE GC_THEME
SET
THEMA_NM = #{themaNm}
, CSS_COURS = #{cssCours}
, DC_CN = #{dcCn}
, USE_AT = 'Y'
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
]]>
<include refid="selectBOSopThemaKeyWhere"/>
</update>
<!-- 쇼핑몰 테마 삭제 -->
<update id="deleteBOSopThema" parameterType="Integer">
<![CDATA[
UPDATE GC_THEME
SET USE_AT = 'N'
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
]]>
<include refid="selectBOSopThemaKeyWhere"/>
</update>
<!-- 쇼핑몰 테마 목록건수조회 -->
<select id="selectBOSopThemaReferCnt"
parameterType="com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO"
resultType="java.lang.Integer">
SELECT COUNT(1)
FROM GC_THEME GT
WHERE 1=1
AND GT.USE_AT = 'Y'
AND EXISTS ( SELECT 'X'
FROM GC_SHOP GS
WHERE 1 = 1
AND GS.THEMA_INNB = GT.THEMA_INNB )
AND GT.THEMA_INNB = #{themaInnb}
</select>
<!--사용자 > 쇼핑몰테마 상세조회-->
<select id="selectBOSopThemaDtlInfo" parameterType="com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO" resultType="dataMap">
SELECT
GS.SOPMAL_CD
,GS.THEMA_INNB
,GT.CSS_COURS
FROM
GC_SHOP GS
LEFT JOIN
GC_THEME GT
ON GS.THEMA_INNB = GT.THEMA_INNB
WHERE
1 = 1
AND SOPMAL_CD = #{sopmalCd}
</select>
</mapper>

View File

@@ -0,0 +1,378 @@
<?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.wb.domainserver.domain.admin.store.stplat.mapper.BOStplatMapper">
<resultMap id="BOStplatMap" type="dataMap">
<result property="sopmalNm" column="SOPMAL_NM"/>
</resultMap>
<sql id="selectBOStplatTotCntWhere">
<![CDATA[
WHERE (@rownum:=0)=0
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStplatNm)">
<![CDATA[
AND UPPER(STPLAT_NM) LIKE CONCAT('%', UPPER(#{srchStplatNm}), '%')
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStplatDvCd)">
<![CDATA[
AND STPLAT_DV_CD = #{srchStplatDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(nmbrPurchsAt)">
<![CDATA[
AND NMBR_PURCHS_AT = 'Y'
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
<![CDATA[
AND EXISTS (
SELECT 'X'
FROM GC_SHOP_CLAUSE
WHERE 1=1
AND GC_CLAUSE.STPLAT_INNB = GC_SHOP_CLAUSE.STPLAT_INNB
AND GC_SHOP_CLAUSE.SOPMAL_CD = #{srchSopmalCd}
)
]]>
</if>
</sql>
<!-- 약관 건수 조회 -->
<select id="selectBOStplatTotCnt"
parameterType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
FROM GC_CLAUSE
]]>
<include refid = "selectBOStplatTotCntWhere"/>
</select>
<!-- 약관 변경이력 건수 조회
<select id="selectBOStplatHistTotCnt"
parameterType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
FROM FM_CLAUSE_LOG
WHERE 1=1
AND STPLAT_INNB = #{stplatInnb}
]]>
</select>
-->
<!-- 약관 목록을 paging 처리하여 조회 -->
<select id="selectBOStplatList"
parameterType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM (
SELECT @ROWNUM:=@ROWNUM+1 AS RNUM, TB1.*
FROM (
SELECT
STPLAT_INNB,
STPLAT_NM,
STPLAT_DV_CD,
(
SELECT GROUP_CONCAT(SOPMAL_NM ORDER BY SOPMAL_NM SEPARATOR ', ')
FROM GC_SHOP_CLAUSE A
INNER JOIN GC_SHOP B ON B.SOPMAL_CD = A.SOPMAL_CD
WHERE A.STPLAT_INNB = GC_CLAUSE.STPLAT_INNB
)
AS SOPMAL_NM,
FN_GET_COMMCODE_NAME('STPLAT_DV',STPLAT_DV_CD) AS STPLAT_DV_NM,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DT,
DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE,
ESSNTL_AT,
CN_WRITNG_AT,
USE_AT
FROM GC_CLAUSE
]]>
<include refid = "selectBOStplatTotCntWhere"/>
<![CDATA[
ORDER BY UPDT_DT DESC
) TB1
) TB2
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<select id="selectBOStplatListExcelDwld"
parameterType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO"
resultType="dataMap">
<![CDATA[
SELECT @ROWNUM:=@ROWNUM+1 AS RNUM, TB1.*
FROM (
SELECT
STPLAT_INNB,
STPLAT_NM,
STPLAT_DV_CD,
(SELECT CD_NM
FROM GC_CODE
WHERE 1=1
AND GROUP_CD = 'STPLAT_DV'
AND CD = GC_CLAUSE.STPLAT_DV_CD
)
AS STPLAT_DV_CD_NM,
(
SELECT GROUP_CONCAT(SOPMAL_NM ORDER BY SOPMAL_NM SEPARATOR ', ')
FROM GC_SHOP_CLAUSE A
INNER JOIN GC_SHOP B ON B.SOPMAL_CD = A.SOPMAL_CD
WHERE A.STPLAT_INNB = GC_CLAUSE.STPLAT_INNB
)
AS SOPMAL_NM,
FN_GET_COMMCODE_NAME('STPLAT_DV',STPLAT_DV_CD) AS STPLAT_DV_NM,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DT,
DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
FROM GC_CLAUSE
]]>
<include refid = "selectBOStplatTotCntWhere"/>
<![CDATA[
ORDER BY UPDT_DT DESC
) TB1
]]>
</select>
<!-- 약관 검색 폼 - 등록 쇼핑몰 리스트 조회 -->
<select id="selectBOStplatSopmalListInqire">
SELECT
SC.SOPMAL_CD
, SHOP.SOPMAL_NM
FROM GC_SHOP_CLAUSE SC
INNER JOIN GC_SHOP SHOP
ON SC.SOPMAL_CD = SHOP.SOPMAL_CD
WHERE 1=1
GROUP BY
SC.SOPMAL_CD
</select>
<!-- 약관 등록 -->
<insert id="insertBOStplat">
<selectKey keyProperty="stplatInnb" resultType="java.lang.Integer" order="BEFORE">
SELECT IFNULL(MAX(STPLAT_INNB), 0) + 1
FROM GC_CLAUSE
</selectKey>
<![CDATA[
INSERT INTO GC_CLAUSE
(
STPLAT_INNB,
STPLAT_NM,
STPLAT_DV_CD,
STPLAT_CN,
IMPRTNC_STPLAT_CN,
ESSNTL_AT,
CN_WRITNG_AT,
JOIN_USE_AT,
NMBR_PURCHS_AT,
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES
(
#{stplatInnb},
#{stplatNm},
#{stplatDvCd},
#{stplatCn},
#{imprtncStplatCn},
#{essntlAt},
#{cnWritngAt},
#{nmbrPurchsAt},
#{joinUseAt},
'Y',
#{regusr},
SYSDATE(),
#{regusr},
SYSDATE()
)
]]>
</insert>
<!-- 약관 변경이력 등록 -->
<insert id="insertBOStplatHist">
<selectKey keyProperty="chngSnb" resultType="java.lang.Integer" order="BEFORE">
SELECT IFNULL(MAX(CHNG_SNB), 0) + 1
FROM GC_CLAUSE_LOG
WHERE STPLAT_INNB = #{stplatInnb}
</selectKey>
<![CDATA[
INSERT INTO GC_CLAUSE_LOG
(
CHNG_SNB,
STPLAT_INNB,
STPLAT_NM,
STPLAT_DV_CD,
STPLAT_CN,
IMPRTNC_STPLAT_CN,
CHNG_RESN_CN,
ESSNTL_AT,
CN_WRITNG_AT,
NMBR_PURCHS_AT,
JOIN_USE_AT,
REGUSR,
REGIST_DT
)
VALUES
(
#{chngSnb},
#{stplatInnb},
#{stplatNm},
#{stplatDvCd},
#{stplatCn},
#{imprtncStplatCn},
#{chngResnCn},
#{essntlAt},
#{cnWritngAt},
#{nmbrPurchsAt},
#{joinUseAt},
#{updusr},
SYSDATE()
)
]]>
</insert>
<!-- 약관 수정 -->
<update id="updateBOStplat"
parameterType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO">
UPDATE
GC_CLAUSE
SET
STPLAT_NM = #{stplatNm}
, STPLAT_DV_CD = #{stplatDvCd}
, STPLAT_CN = #{stplatCn}
, IMPRTNC_STPLAT_CN =#{imprtncStplatCn}
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
, ESSNTL_AT = #{essntlAt}
, CN_WRITNG_AT = #{cnWritngAt}
, JOIN_USE_AT = #{joinUseAt}
, NMBR_PURCHS_AT = #{nmbrPurchsAt}
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(useAt)">
, USE_AT = #{useAt}
</if>
WHERE 1=1
AND STPLAT_INNB = #{stplatInnb}
</update>
<!-- 약관 상세 조회 -->
<select id="selectBOStplatDtl"
parameterType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO">
<![CDATA[
SELECT
STPLAT_INNB,
STPLAT_NM,
STPLAT_DV_CD,
STPLAT_CN,
IMPRTNC_STPLAT_CN,
UPDUSR,
(
SELECT CD_NM
FROM GC_CODE
WHERE GROUP_CD = 'STPLAT_DV' AND CD = CL.STPLAT_DV_CD
)
AS STPLAT_DV_CD_NM,
(
SELECT GROUP_CONCAT(SOPMAL_NM ORDER BY SOPMAL_NM SEPARATOR ', ')
FROM GC_SHOP_CLAUSE A
INNER JOIN GC_SHOP B ON B.SOPMAL_CD = A.SOPMAL_CD
WHERE A.STPLAT_INNB = CL.STPLAT_INNB
)
AS SOPMAL_NM
, (
SELECT
GROUP_CONCAT(SC.SOPMAL_CD ORDER BY SC.SOPMAL_CD SEPARATOR ', ')
FROM
GC_SHOP_CLAUSE SC
INNER JOIN GC_SHOP B
ON B.SOPMAL_CD = SC.SOPMAL_CD
WHERE
SC.STPLAT_INNB = CL.STPLAT_INNB
) AS SRCH_SOPMAL_CD
, FN_GET_COMMCODE_NAME('STPLAT_DV', STPLAT_DV_CD) AS STPLAT_DV_NM
, DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DT
, CL.USE_AT
, CL.ESSNTL_AT
, CL.CN_WRITNG_AT
, CL.JOIN_USE_AT
, CL.NMBR_PURCHS_AT
FROM GC_CLAUSE CL
WHERE 1=1
AND STPLAT_INNB = #{stplatInnb}
ORDER BY UPDT_DT DESC
]]>
</select>
<!-- 약관 변경이력 상세 조회 -->
<select id="selectBOStplatHistDtl"
parameterType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO"
resultType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO">
<![CDATA[
SELECT CHNG_RESN_CN,
STPLAT_NM,
STPLAT_CN,
IMPRTNC_STPLAT_CN,
FN_GET_COMMCODE_NAME('STPLAT_DV',STPLAT_DV_CD) AS STPLAT_DV_NM
FROM GC_CLAUSE_LOG
WHERE 1=1
AND STPLAT_INNB = #{stplatInnb}
AND CHNG_SNB = #{chngSnb}
]]>
</select>
<!-- 약관 변경이력 목록 조회 -->
<select id="selectBOStplatHistList"
parameterType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO"
resultType="com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO">
<![CDATA[
SELECT
CHNG_SNB
, CHNG_RESN_CN
, STPLAT_INNB
, STPLAT_NM
, STPLAT_DV_CD
, STPLAT_CN
, FN_GET_COMMCODE_NAME('STPLAT_DV',STPLAT_DV_CD) AS STPLAT_DV_NM
, DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DT
, IMPRTNC_STPLAT_CN
, (SELECT MNGR_NM FROM GC_MANAGER WHERE MNGR_INNB = CL.REGUSR) AS MNGR_NM
FROM GC_CLAUSE_LOG CL
WHERE 1=1
AND STPLAT_INNB = #{stplatInnb}
ORDER BY CHNG_SNB DESC
]]>
</select>
<!-- 쇼핑몰 목록 조회 -->
<select id="selectBOStplatShopList" resultType="dataMap">
<![CDATA[
SELECT DISTINCT B.SOPMAL_NM as CD_NM, B.SOPMAL_CD as CD
FROM GC_SHOP_CLAUSE A
INNER JOIN GC_SHOP B ON B.SOPMAL_CD = A.SOPMAL_CD where B.OPER_AT='Y';
]]>
</select>
<!-- 약관 쇼핑몰관리 사용 여부 -->
<select id="selectBOStplatSopmalUse">
SELECT
*
FROM
GC_SHOP_CLAUSE
WHERE 1=1
AND SOPMAL_CD = #{srchSopmalCd}
AND STPLAT_INNB = #{stplatInnb}
</select>
<!-- 약관 사용여부 수정 -->
<update id="updateBOStplatUseAtUpd">
UPDATE
GC_CLAUSE
SET USE_AT = 'N'
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
WHERE STPLAT_INNB = #{stplatInnb}
</update>
</mapper>

View File

@@ -0,0 +1,159 @@
<?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.wb.domainserver.domain.admin.sys.authFnctMenu.mapper.BOMaAuthFnctMenuMapper">
<!-- 권한그룹메뉴 등록 -->
<insert id="insertBOAuthFnctMenu" parameterType="DataMap">
<selectKey order="BEFORE" keyProperty="authorMenuFnctInnb" resultType="String">
SELECT IFNULL(MAX(AUTHOR_MENU_FNCT_INNB),0) + 1
FROM GC_AUTH_FNCT_MENU
</selectKey>
INSERT
INTO GC_AUTH_FNCT_MENU
(
AUTHOR_MENU_FNCT_INNB,
<if test="authorGroupCd != null || authorGroupCd != ''">
AUTHOR_GROUP_CD,
</if>
<if test="url != null || url != ''">
URL,
</if>
<if test="fnctCd != null || fnctCd != ''">
FNCT_CD,
</if>
<if test="menuCd != null || menuCd != ''">
MENU_CD,
</if>
<if test="sopmalCd != null || sopmalCd != ''">
SOPMAL_CD,
</if>
REGUSR,
REGIST_DT
)
VALUES
(
#{authorMenuFnctInnb},
<if test="authorGroupCd != null || authorGroupCd != ''">
#{authorGroupCd},
</if>
<if test="url != null || url != ''">
#{url},
</if>
<if test="fnctCd != null || fnctCd != ''">
#{fnctCd},
</if>
<if test="menuCd != null || menuCd != ''">
#{menuCd},
</if>
<if test="sopmalCd != null || sopmalCd != ''">
#{sopmalCd},
</if>
#{regusr},
NOW()
)
</insert>
<!-- 권한그룹메뉴 변경 이력 등록 -->
<insert id="insertBOAuthFnctMenuLog" parameterType="DataMap">
<selectKey order="BEFORE" keyProperty="logSnb" resultType="String">
SELECT IFNULL(MAX(LOG_SNB),0) + 1
FROM GC_AUTH_FNCT_MENU_LOG
</selectKey>
INSERT
INTO GC_AUTH_FNCT_MENU_LOG
(
LOG_SNB,
AUTHOR_MENU_FNCT_INNB,
<if test="authorGroupCd != null || authorGroupCd != ''">
AUTHOR_GROUP_CD,
</if>
<if test="url != null || url != ''">
URL,
</if>
<if test="fnctCd != null || fnctCd != ''">
FNCT_CD,
</if>
<if test="menuCd != null || menuCd != ''">
MENU_CD,
</if>
<if test="sopmalCd != null || sopmalCd != ''">
SOPMAL_CD,
</if>
CHNG_DV_CD,
REGUSR,
REGIST_DT
)
VALUES
(
#{logSnb},
#{authorMenuFnctInnb},
<if test="authorGroupCd != null || authorGroupCd != ''">
#{authorGroupCd},
</if>
<if test="url != null || url != ''">
#{url},
</if>
<if test="fnctCd != null || fnctCd != ''">
#{fnctCd},
</if>
<if test="menuCd != null || menuCd != ''">
#{menuCd},
</if>
<if test="sopmalCd != null || sopmalCd != ''">
#{sopmalCd},
</if>
#{chngDvCd},
#{regusr},
NOW()
)
</insert>
<!-- 권한그룹메뉴 기능 삭제 -->
<delete id="deleteBOAuthFnctMenu" parameterType="Object">
DELETE
FROM
GC_AUTH_FNCT_MENU
WHERE
1=1
AND
AUTHOR_MENU_FNCT_INNB = #{authorMenuFnctInnb}
</delete>
<!-- 권한그룹메뉴 기능 조회 -->
<select id="selectBOAuthGrpFnctList" parameterType="dataMap" resultType="dataMap">
SELECT
AUTHOR_MENU_FNCT_INNB, FNCT_CD, MENU_CD, SOPMAL_CD, URL, AUTHOR_GROUP_CD
FROM
GC_AUTH_FNCT_MENU
WHERE
1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(authorGroupCd)">
AND
AUTHOR_GROUP_CD = #{authorGroupCd}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(fnctCd)">
AND
FNCT_CD = #{fnctCd}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(menuCd)">
AND
MENU_CD = #{menuCd}
AND
URL IS NOT NULL
</if>
</select>
<!-- 기능 URL 중복여부 조회 -->
<select id="selectBOFnctUrlDplct"
parameterType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO"
resultType = "Integer">
SELECT
COUNT(1)
FROM
GC_AUTH_FNCT_MENU GAFM
WHERE
1=1
AND
GAFM.URL = #{fnctUrl}
</select>
</mapper>

View File

@@ -0,0 +1,320 @@
<?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.wb.domainserver.domain.admin.sys.authgrp.mapper.BOMaAuthgrpMapper">
<sql id="srchWords">
WHERE 1=1
AND GA.USE_AT = 'Y'
<if test="srchAuthorNm != null and srchAuthorNm != ''">
AND UPPER(GA.AUTHOR_NM) LIKE CONCAT('%', UPPER(#{srchAuthorNm}), '%')
</if>
<if test="srchSysDvCd != null and srchSysDvCd != ''">
AND GA.SYS_DV_CD = #{srchSysDvCd}
</if>
</sql>
<!-- 페이징처리를 위한 권한그룹 목록 총 개수 -->
<select id="selectBOAuthGrpListCnt"
parameterType="com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO"
resultType="Integer">
SELECT COUNT(*)
FROM (
SELECT GA.AUTHOR_ID, /*권한ID*/
GA.AUTHOR_NM, /*권한명*/
GA.AUTHOR_DC, /*권한설명*/
DATE_FORMAT(GA.REGIST_DT, '%Y-%m-%d') AS REGIST_DT, /*등록일자*/
FN_GET_COMMCODE_NAME('SYS_DV', GA.SYS_DV_CD) AS SYS_DV_NM, /*시스템자구분명*/
SUM(CASE WHEN GF.FNCT_DV_CD = '01' THEN 1 ELSE 0 END) AS R, /*조회*/
SUM(CASE WHEN GF.FNCT_DV_CD = '02' THEN 1 ELSE 0 END) AS F, /*화면이동*/
SUM(CASE WHEN GF.FNCT_DV_CD = '03' THEN 1 ELSE 0 END) AS I, /*등록*/
SUM(CASE WHEN GF.FNCT_DV_CD = '04' THEN 1 ELSE 0 END) AS U, /*수정*/
SUM(CASE WHEN GF.FNCT_DV_CD = '05' THEN 1 ELSE 0 END) AS D /*삭제*/
FROM GC_AUTH GA
LEFT OUTER JOIN GC_AUTH_FNCT GAF ON GA.AUTHOR_ID = GAF.AUTHOR_ID
LEFT OUTER JOIN GC_FNCT GF ON GAF.FNCT_ID = GF.FNCT_ID AND GF.USE_AT = 'Y'
<include refid="srchWords"/>
GROUP BY GA.AUTHOR_ID, GA.AUTHOR_NM, GA.AUTHOR_DC, GA.REGIST_DT
) A
</select>
<!-- 권한그룹 목록 조회 -->
<select id="selectBOAuthGrpListInqire"
parameterType="com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO"
resultType="DataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT GA.AUTHOR_ID, /*권한ID*/
GA.AUTHOR_NM, /*권한명*/
GA.AUTHOR_DC, /*권한설명*/
DATE_FORMAT(GA.REGIST_DT, '%Y-%m-%d') AS REGIST_DT, /*등록일자*/
FN_GET_COMMCODE_NAME('SYS_DV', GA.SYS_DV_CD) AS SYS_DV_NM, /*시스템자구분명*/
SUM(CASE WHEN GF.FNCT_DV_CD = '01' THEN 1 ELSE 0 END) AS R, /*조회*/
SUM(CASE WHEN GF.FNCT_DV_CD = '02' THEN 1 ELSE 0 END) AS F, /*화면이동*/
SUM(CASE WHEN GF.FNCT_DV_CD = '03' THEN 1 ELSE 0 END) AS I, /*등록*/
SUM(CASE WHEN GF.FNCT_DV_CD = '04' THEN 1 ELSE 0 END) AS U, /*수정*/
SUM(CASE WHEN GF.FNCT_DV_CD = '05' THEN 1 ELSE 0 END) AS D /*삭제*/
FROM GC_AUTH GA
LEFT OUTER JOIN GC_AUTH_FNCT GAF ON GA.AUTHOR_ID = GAF.AUTHOR_ID
LEFT OUTER JOIN GC_FNCT GF ON GAF.FNCT_ID = GF.FNCT_ID AND GF.USE_AT = 'Y'
<include refid="srchWords" />
GROUP BY GA.AUTHOR_ID, GA.AUTHOR_NM, GA.AUTHOR_DC, GA.REGIST_DT
order by GA.REGIST_DT desc
) BM
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 페이징처리를 위한 게시판 목록 총 개수 -->
<select id="selectBOAuthFnctPopTotCnt"
parameterType="com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO" resultType="Integer">
SELECT count(*)
FROM (
SELECT GF.FNCT_ID,
GF.SYS_DV_CD,
FN_GET_COMMCODE_NAME('SYS_DV', GF.SYS_DV_CD) AS SYS_DV_NM,
GF.FNCT_NM,
GF.FNCT_DV_CD,
FN_GET_COMMCODE_NAME('FNCT_DV', GF.FNCT_DV_CD) AS FNCT_DV_NM,
GF.FNCT_URI,
GF.REGIST_DT
FROM GC_FNCT GF
<include refid="selectBOAuthFnctPopListInqireWhere" />
) BM
</select>
<!-- 권한그룹 기능 팝업 리스트 조회 -->
<select id="selectBOAuthFnctPopListInqire"
parameterType="com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO"
resultType="DataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT GF.FNCT_ID,
GF.SYS_DV_CD,
FN_GET_COMMCODE_NAME('SYS_DV', GF.SYS_DV_CD) AS SYS_DV_NM,
GF.FNCT_NM,
GF.FNCT_DV_CD,
FN_GET_COMMCODE_NAME('FNCT_DV', GF.FNCT_DV_CD) AS FNCT_DV_NM,
GF.FNCT_URI,
GF.REGIST_DT
FROM GC_FNCT GF
<include refid="selectBOAuthFnctPopListInqireWhere" />
ORDER BY REGIST_DT DESC
) BM
WHERE (@ROWNUM:=0)=0
) PV
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<sql id="selectBOAuthFnctPopListInqireWhere">
WHERE
1=1
AND
GF.USE_AT = 'Y'
<if test="srchFnctNm != null and srchFnctNm != ''">
AND
UPPER(GF.FNCT_NM) LIKE CONCAT('%', UPPER(#{srchFnctNm}), '%')
</if>
<if test="srchFnctUri != null and srchFnctUri != ''">
AND
UPPER(GF.FNCT_URI) LIKE CONCAT('%', UPPER(#{srchFnctUri}), '%')
</if>
<if test="srchFnctDv != null and srchFnctDv != ''">
AND
GF.FNCT_DV_CD = #{srchFnctDv}
</if>
<if test="srchSysDvCd != null and srchSysDvCd != ''">
AND
GF.SYS_DV_CD = #{srchSysDvCd}
</if>
</sql>
<!-- 권한그룹 등록 -->
<insert id="insertAuthGrp"
parameterType="com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO">
<selectKey order="BEFORE" keyProperty="authorId" resultType="String">
SELECT MAX(AUTHOR_ID)+1 FROM GC_AUTH
</selectKey>
INSERT INTO GC_AUTH (
AUTHOR_ID /*권한그룹ID*/
,SYS_DV_CD /*시스템자구분*/
,AUTHOR_NM /*권한그룹명 - 화면*/
,AUTHOR_DC /*권한그룹 설명 - 화면*/
,USE_AT
,REGUSR
,REGIST_DT
,UPDUSR
,UPDT_DT
)VALUES (
#{authorId}
,#{sysDvCd}
,#{authorNm}
,#{authorDc}
,'Y'
,#{regusr}
,SYSDATE()
,NULL
,NULL
);
</insert>
<!-- 권한그룹 목록 엑셀용 -->
<select id="selectBOAuthGrpExcelList"
parameterType="com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO"
resultType="DataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT GA.AUTHOR_ID, /*권한ID*/
GA.AUTHOR_NM, /*권한명*/
GA.AUTHOR_DC, /*권한설명*/
DATE_FORMAT(GA.REGIST_DT, '%Y-%m-%d') AS REGIST_DT, /*등록일자*/
FN_GET_COMMCODE_NAME('SYS_DV', GA.SYS_DV_CD) AS SYS_DV_NM, /*시스템자구분명*/
SUM(CASE WHEN GF.FNCT_DV_CD = '01' THEN 1 ELSE 0 END) AS R, /*조회*/
SUM(CASE WHEN GF.FNCT_DV_CD = '02' THEN 1 ELSE 0 END) AS F, /*화면이동*/
SUM(CASE WHEN GF.FNCT_DV_CD = '03' THEN 1 ELSE 0 END) AS I, /*등록*/
SUM(CASE WHEN GF.FNCT_DV_CD = '04' THEN 1 ELSE 0 END) AS U, /*수정*/
SUM(CASE WHEN GF.FNCT_DV_CD = '05' THEN 1 ELSE 0 END) AS D /*삭제*/
FROM GC_AUTH GA
LEFT OUTER JOIN GC_AUTH_FNCT GAF ON GA.AUTHOR_ID = GAF.AUTHOR_ID
LEFT OUTER JOIN GC_FNCT GF ON GAF.FNCT_ID = GF.FNCT_ID AND GF.USE_AT = 'Y'
<include refid="srchWords" />
GROUP BY GA.AUTHOR_ID, GA.AUTHOR_NM, GA.AUTHOR_DC, GA.REGIST_DT
order by GA.REGIST_DT desc
) BM
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
</select>
<!-- 권한그룹 상세 조회 -->
<select id="selectBOAuthGrpUpdtForm"
parameterType="com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO"
resultType="DataMap">
SELECT GA.AUTHOR_ID, /*권한ID*/
GA.AUTHOR_NM, /*권한명*/
GA.AUTHOR_DC, /*권한설명*/
DATE_FORMAT(GA.REGIST_DT, '%Y-%m-%d') AS REGIST_DT, /*등록일자*/
GA.SYS_DV_CD, /*시스템구분 코드*/
GROUP_CONCAT(GAF.FNCT_ID SEPARATOR '$') AS FNCT_IDS_ARR /*등록된 권한기능 배열*/
FROM GC_AUTH GA
LEFT OUTER JOIN GC_AUTH_FNCT GAF ON GA.AUTHOR_ID = GAF.AUTHOR_ID
LEFT OUTER JOIN GC_FNCT GF ON GAF.FNCT_ID = GF.FNCT_ID AND GF.USE_AT = 'Y'
WHERE 1=1
AND GA.USE_AT = 'Y'
AND GA.AUTHOR_ID = #{authorId}
GROUP BY GA.AUTHOR_ID, GA.AUTHOR_NM, GA.AUTHOR_DC, GA.REGIST_DT
ORDER BY GA.REGIST_DT DESC
</select>
<!-- 권한그룹 기능 상세 조회 -->
<select id="selectBOAuthGrpFnctUpdtForm" resultType="DataMap">
SELECT FNCT_ID /*기능ID*/
, SYS_DV_CD /*시스템자구분코드*/
, FNCT_DV_CD /*기능구분코드*/
, FN_GET_COMMCODE_NAME('FNCT_DV', FNCT_DV_CD) AS FNCT_DV_NM
, FNCT_URI /*url*/
, FNCT_NM /*기능명*/
, FNCT_DC /*기능설명*/
FROM GC_FNCT
WHERE FNCT_ID IN(
SELECT FNCT_ID
FROM GC_AUTH_FNCT
WHERE AUTHOR_ID = #{authorId}
AND USE_AT = 'Y'
)
AND USE_AT = 'Y'
</select>
<!-- 권한그룹 수정 -->
<update id="updateBOAuthGrpUpdt" parameterType="com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO">
UPDATE GC_AUTH
SET SYS_DV_CD = #{sysDvCd}
,AUTHOR_NM = #{authorNm}
,AUTHOR_DC = #{authorDc}
,UPDUSR = #{updusr}
,UPDT_DT = NOW()
WHERE AUTHOR_ID = #{authorId};
</update>
<!--삭제log쿼리-->
<insert id="insertDelAuthFnctLog" parameterType="com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO">
INSERT INTO GC_AUTH_FNCT_LOG (LOG_SNB, AUTHOR_FNCT_INNB, AUTHOR_ID, FNCT_ID, LOG_CHNG_DV_CD, REGUSR, REGIST_DT)
SELECT (SELECT COALESCE(MAX(LOG_SNB),0) FROM GC_AUTH_FNCT_LOG) + @ROWNUM := @ROWNUM + 1,
GAF.AUTHOR_FNCT_INNB,
GAF.AUTHOR_ID,
GAF.FNCT_ID,
'D' AS LOG_CHNG_DV_CD,
#{updusr} AS REGUSR,
NOW() AS REGIST_DT
FROM GC_AUTH_FNCT GAF
WHERE GAF.AUTHOR_ID = #{authorId}
<if test="arrFnctId != null and arrFnctId.size() > 0">
AND FNCT_ID NOT IN
<foreach collection="arrFnctId" item="fnctId" index="idx" open="(" separator=", " close=")">
#{fnctId}
</foreach>
</if>
AND (@ROWNUM := 0) = 0
</insert>
<!--GC_AUTH_FNCT 삭제쿼리-->
<delete id="deleteAuthFnct">
DELETE
FROM GC_AUTH_FNCT GAF
WHERE GAF.AUTHOR_ID = #{authorId}
<if test="arrFnctId != null and arrFnctId.size() > 0">
AND FNCT_ID NOT IN
<foreach collection="arrFnctId" item="fnctId" index="idx" open="(" separator=", " close=")">
#{fnctId}
</foreach>
</if>
</delete>
<!--GC_AUTH_FNCT insert-->
<insert id="insertAuthFnct" parameterType="DataMap">
<selectKey order="BEFORE" keyProperty="authorFnctInnb" resultType="String">
<![CDATA[
SELECT IFNULL(MAX(AUTHOR_FNCT_INNB), 0) + 1
FROM GC_AUTH_FNCT
]]>
</selectKey>
INSERT INTO GC_AUTH_FNCT (AUTHOR_FNCT_INNB, AUTHOR_ID, FNCT_ID, REGUSR, REGIST_DT)
SELECT #{authorFnctInnb}, #{authorId}, #{fnctId}, #{updusr}, NOW()
WHERE NOT EXISTS (SELECT 1 FROM GC_AUTH_FNCT WHERE AUTHOR_ID = #{authorId} AND FNCT_ID = #{fnctId})
</insert>
<!--log insert-->
<insert id="insertInsAuthFnctLog" parameterType="java.util.List">
INSERT INTO GC_AUTH_FNCT_LOG (LOG_SNB, AUTHOR_FNCT_INNB, AUTHOR_ID, FNCT_ID, LOG_CHNG_DV_CD, REGUSR, REGIST_DT)
SELECT (SELECT COALESCE(MAX(LOG_SNB),0) FROM GC_AUTH_FNCT_LOG) + @ROWNUM := @ROWNUM + 1,
AUTHOR_FNCT_INNB,
AUTHOR_ID,
FNCT_ID,
'I' AS LOG_CHNG_DV_CD,
REGUSR,
REGIST_DT
FROM GC_AUTH_FNCT GMA
WHERE AUTHOR_FNCT_INNB IN
<foreach collection="arrAuthorFnctInnb" item="authorFnctInnb" index="idx" open="(" separator=", " close=")">
#{authorFnctInnb}
</foreach>
AND (@ROWNUM := 0) = 0
</insert>
<!-- 권한그룹 삭제 -->
<update id="updateBOAuthGrpDel"
parameterType = "com.wb.domainserver.domain.admin.sys.authgrp.vo.BOMaAuthgrpVO">
UPDATE GC_AUTH
SET USE_AT = 'N'
,UPDUSR = #{updusr}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND AUTHOR_ID = #{authorId}
</update>
</mapper>

View File

@@ -0,0 +1,509 @@
<?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.wb.domainserver.domain.admin.sys.author.mapper.BOMaAuthorMapper">
<!-- 페이징처리를 위한 권한그룹 목록 총 개수 -->
<select id="selectBOAuthorListCnt"
parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO"
resultType="Integer">
SELECT COUNT(*)
FROM (
SELECT
M.MNGR_INNB
FROM GC_MANAGER M
LEFT JOIN GC_MANAGER_AUTH MA
ON M.MNGR_INNB = MA.MNGR_INNB
LEFT JOIN GC_MANAGER MM
ON MM.MNGR_INNB = coalesce(M.UPDUSR, M.UPDUSR)
LEFT JOIN GC_AUTH GAG
ON MA.AUTHOR_ID = GAG.AUTHOR_ID
<include refid="selectBOAuthorListWhere" />
group by M.MNGR_INNB,M.MNGR_NM,M.MNGR_ID,M.PARTNM,M.MNGR_DV, MM.MNGR_NM
) BM
</select>
<!-- 권한 목록 조회 -->
<select id="selectBOAuthorListInqire"
parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO"
resultType="DataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
M.MNGR_INNB,
M.MNGR_NM,
M.MNGR_ID,
M.PARTNM,
M.MNGR_DV,
FN_GET_COMMCODE_NAME('MNGR_DV', M.MNGR_DV) AS MNGR_DV_NM,
MM.MNGR_NM AS UPD_MNGR_NM,
ROW_NUMBER() OVER (PARTITION BY M.MNGR_INNB) as AUTH_RN,
CASE
WHEN COUNT(MA.AUTHOR_ID) = 1 THEN MAX(GAG.AUTHOR_NM)
WHEN COUNT(MA.AUTHOR_ID) > 1 THEN CONCAT(MAX(GAG.AUTHOR_NM) , ' 외 ', COUNT(MA.AUTHOR_ID) - 1 , '개 ')
ELSE '권한 없음' END AS AUTH_GRP_MAIN_TITLE,
DATE_FORMAT(MAX(coalesce(M.UPDT_DT, M.REGIST_DT)), '%Y-%m-%d %H:%i:%S') AS MA_REGIST_DT
FROM GC_MANAGER M
LEFT JOIN GC_MANAGER_AUTH MA
ON M.MNGR_INNB = MA.MNGR_INNB
LEFT JOIN GC_MANAGER MM
ON MM.MNGR_INNB = coalesce(M.UPDUSR, M.UPDUSR)
LEFT JOIN GC_AUTH GAG
ON MA.AUTHOR_ID = GAG.AUTHOR_ID
<include refid="selectBOAuthorListWhere" />
group by M.MNGR_INNB,M.MNGR_NM,M.MNGR_ID,M.PARTNM,M.MNGR_DV, MM.MNGR_NM
ORDER BY MA_REGIST_DT DESC
) BM
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<sql id="selectBOAuthorListWhere">
WHERE M.MNGR_STTUS_CD != '03'
<!-- 검색타입별 검색 -->
<if test="srchStr != null and srchStr != ''">
<choose>
<when test="srchType eq 'MNGR_NM'.toString()">
AND UPPER(M.MNGR_NM) LIKE CONCAT('%', UPPER(#{srchStr}), '%')
</when>
<when test="srchType eq 'MNGR_ID'.toString()">
AND UPPER(M.MNGR_ID) LIKE CONCAT('%', UPPER(#{srchStr}), '%')
</when>
<when test="srchType eq 'EMAIL'.toString()">
AND UPPER(M.EMAIL) LIKE CONCAT('%', UPPER(#{srchStr}), '%')
</when>
<when test="srchType eq 'MBTLNB'.toString()">
AND UPPER(M.MBTLNB) LIKE CONCAT('%', UPPER(#{srchStr}), '%')
</when>
<when test="srchType eq 'PARTNM'.toString()">
AND UPPER(M.PARTNM) LIKE CONCAT('%', UPPER(#{srchStr}), '%')
</when>
<when test="srchType eq 'ALL'.toString()">
AND(
UPPER(M.MNGR_NM) LIKE CONCAT('%', UPPER(#{srchStr}), '%') OR
UPPER(M.MNGR_ID) LIKE CONCAT('%', UPPER(#{srchStr}), '%') OR
UPPER(M.EMAIL) LIKE CONCAT('%', UPPER(#{srchStr}), '%') OR
UPPER(M.MBTLNB) LIKE CONCAT('%', UPPER(#{srchStr}), '%') OR
UPPER(M.PARTNM) LIKE CONCAT('%', UPPER(#{srchStr}), '%')
)
</when>
</choose>
</if>
<!-- 사용자 구분 -->
<if test="srchMngrDv != null and srchMngrDv != ''">
AND M.MNGR_DV = #{srchMngrDv}
</if>
</sql>
<!-- 권한 상세 조회 -->
<select id="selectBOAuthorUpdtForm"
parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO" resultType="DataMap">
SELECT
MNGR_INNB,
MNGR_NM,
MNGR_ID,
PARTNM,
MNGR_DV,
FN_GET_COMMCODE_NAME('MNGR_DV', MNGR_DV) AS MNGR_DV_NM
FROM
GC_MANAGER
WHERE
1=1
AND
MNGR_INNB = #{mngrInnb}
</select>
<!-- 권한 상세 기능 조회 -->
<select id="selectBOAuthorUpdtFormFnctList"
parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO" resultType="DataMap">
SELECT
BB.AUTHOR_ID
,BB.AUTHOR_NM
,BB.AUTHOR_DC
,GROUP_CONCAT(CONCAT(BB.SOPMAL_CD, ',',BB.SOPMAL_NM,',',BB.CHK ) ORDER BY AUTHOR_ID, SOPMAL_NM SEPARATOR '|') AS SOPMAL_INFO
FROM
(
SELECT
GA.AUTHOR_ID,
GA.AUTHOR_NM,
GA.AUTHOR_DC,
GS.SOPMAL_CD,
GS.SOPMAL_NM,
CASE
WHEN GMA.MNGR_AUTHOR_INNB IS NULL THEN FALSE
ELSE TRUE
END AS CHK
FROM
GC_AUTH GA
INNER JOIN GC_SHOP GS
LEFT OUTER JOIN GC_MANAGER_AUTH GMA
ON GMA.SOPMAL_CD = GS.SOPMAL_CD
AND GMA.AUTHOR_ID = GA.AUTHOR_ID
AND GMA.MNGR_INNB = #{mngrInnb}
WHERE
GA.USE_AT = 'Y'
AND GA.SYS_DV_CD NOT IN ('01', '02')
) BB
GROUP BY
1, 2, 3
UNION ALL
SELECT
AA.AUTHOR_ID
,AA.AUTHOR_NM
,AA.AUTHOR_DC
,GROUP_CONCAT(CONCAT(AA.SOPMAL_CD, ',',AA.SOPMAL_NM,',',AA.CHK ) ORDER BY AUTHOR_ID, SOPMAL_NM SEPARATOR '|') AS SOPMAL_INFO
FROM (
SELECT
GA.AUTHOR_ID,
GA.AUTHOR_NM,
GA.AUTHOR_DC,
GS.SOPMAL_CD,
GS.SOPMAL_NM,
CASE
WHEN GMA.MNGR_AUTHOR_INNB IS NULL THEN FALSE
ELSE TRUE
END AS CHK
FROM
GC_AUTH GA
INNER JOIN (
SELECT
'SYS' AS SOPMAL_CD,
'통합관리자시스템' AS SOPMAL_NM) GS
LEFT OUTER JOIN GC_MANAGER_AUTH GMA
ON
GMA.AUTHOR_ID = GA.AUTHOR_ID
AND GMA.SOPMAL_CD = GS.SOPMAL_CD
AND GMA.MNGR_INNB = #{mngrInnb}
WHERE
GA.USE_AT = 'Y'
AND GA.SYS_DV_CD = #{mngrDv}
AND '02' = #{mngrDv}
ORDER BY
AUTHOR_ID,
SOPMAL_NM
) AA
GROUP BY
1, 2, 3
</select>
<!-- 권한별 기능 조회 -->
<select id="selectBOMenuFnctListInqire"
parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO" resultType="DataMap">
SELECT GF.FNCT_ID,
GF.FNCT_NM,
GF.FNCT_DV_CD,
FN_GET_COMMCODE_NAME('FNCT_DV', GF.FNCT_DV_CD) AS FNCT_DV_NM,
GF.FNCT_URI
FROM GC_FNCT GF
INNER JOIN GC_AUTH_FNCT GAF ON GF.FNCT_ID = GAF.FNCT_ID
WHERE GF.USE_AT = 'Y'
AND GAF.AUTHOR_ID = #{authorId}
ORDER BY GF.FNCT_NM ASC
</select>
<!-- 관리 쇼핑몰 등록 -->
<insert id="insertBOMngrMall" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO">
<selectKey order="BEFORE" keyProperty="logSnb" resultType="String">
<![CDATA[
SELECT IFNULL(MAX(LOG_SNB), 0) + 1
FROM GC_MANAGER_MALL
]]>
</selectKey>
INSERT
INTO
GC_MANAGER_MALL (
LOG_SNB,
MNGR_INNB,
SOPMAL_CD,
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES (
#{logSnb},
#{mngrInnb},
#{sopmalCd},
'Y',
#{regusr},
SYSDATE(),
#{regusr},
SYSDATE()
)
</insert>
<!-- 관리 쇼핑몰 N 처리 -->
<update id="updateBOMngrMallDel" parameterType="DataMap">
UPDATE
GC_MANAGER_MALL
SET
<if test="mngrInnb != null and mngrInnb != ''">
MNGR_INNB = #{mngrInnb},
</if>
<if test="sopmalCd != null and sopmalCd != ''">
SOPMAL_CD = #{sopmalCd},
</if>
USE_AT = #{useAt},
UPDUSR = #{updusr},
UPDT_DT = SYSDATE()
WHERE
1=1
AND
MNGR_INNB = #{mngrInnb}
AND
SOPMAL_CD = #{sopmalCd}
</update>
<!-- 관리 쇼핑몰 수정 -->
<update id="updateBOMngrMall" parameterType="DataMap">
UPDATE
GC_MANAGER_MALL
SET
MNGR_INNB = #{mngrInnb},
SOPMAL_CD = #{sopmalCd},
USE_AT = #{useAt},
UPDUSR = #{updusr},
UPDT_DT = SYSDATE()
WHERE
1=1
AND
MNGR_INNB = #{mngrInnb}
AND
SOPMAL_CD = #{sopmalCd}
</update>
<!-- 관리자별 권한 등록-->
<insert id="insertBOMngrAuthor" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO">
<selectKey order="BEFORE" keyProperty="mngrAuthorInnb" resultType="String">
<![CDATA[
SELECT IFNULL(MAX(MNGR_AUTHOR_INNB), 0) + 1
FROM GC_MANAGER_AUTH
]]>
</selectKey>
INSERT
INTO
GC_MANAGER_AUTH (
MNGR_AUTHOR_INNB,
MNGR_INNB,
AUTHOR_GROUP_CD,
REGUSR,
REGIST_DT
)
VALUES (
#{mngrAuthorInnb},
#{mngrInnb},
#{authorGroupCd},
#{regusr},
SYSDATE()
)
</insert>
<!-- 관리자별 변경 이력 등록 -->
<insert id="insertBOMngrAuthLog" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO">
<selectKey order="BEFORE" keyProperty="logSnb" resultType="String">
<![CDATA[
SELECT IFNULL(MAX(LOG_SNB), 0) + 1
FROM GC_MANAGER_AUTH_LOG
]]>
</selectKey>
INSERT
INTO
GC_MANAGER_AUTH_LOG (
LOG_SNB,
MNGR_AUTHOR_INNB,
MNGR_INNB,
AUTHOR_GROUP_CD,
CHNG_DV_CD,
REGUSR,
REGIST_DT
)
VALUES (
#{logSnb},
#{mngrAuthorInnb},
#{mngrInnb},
#{authorGroupCd},
#{chngDvCd},
#{regusr},
SYSDATE()
)
</insert>
<!-- 쇼핑몰 목록 조회 -->
<select id="selectBOShopListInqire" resultType="DataMap">
SELECT
SOPMAL_CD,
SOPMAL_NM
FROM
GC_SHOP
WHERE
1=1
AND
OPER_AT = 'Y'
</select>
<!-- 권한 삭제 로그 INSERT -->
<insert id="insertDelMngrAuthorLog" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO">
INSERT INTO GC_MANAGER_AUTH_LOG (LOG_SNB, MNGR_AUTHOR_INNB, SOPMAL_CD, MNGR_INNB, AUTHOR_ID, LOG_CHNG_DV_CD, REGUSR, REGIST_DT)
SELECT (SELECT COALESCE(MAX(LOG_SNB),0) FROM GC_MANAGER_AUTH_LOG) + @ROWNUM := @ROWNUM + 1,
MNGR_AUTHOR_INNB,
SOPMAL_CD,
MNGR_INNB,
AUTHOR_ID,
'D',
#{updusr},
now()
FROM GC_MANAGER_AUTH GMA
WHERE MNGR_INNB = #{mngrInnb}
<if test="arrAuthSpomal != null and arrAuthSpomal.length > 0">
AND CONCAT(AUTHOR_ID,'_',SOPMAL_CD) NOT IN
<foreach collection="arrAuthSpomal" item="authSpomal" index="idx" open="(" separator=", " close=")">
#{authSpomal}
</foreach>
</if>
AND (@ROWNUM := 0) = 0
</insert>
<!-- 권한 등록 로그 INSERT -->
<insert id="insertInsMngrAuthorLog" parameterType="java.util.List">
INSERT INTO GC_MANAGER_AUTH_LOG (LOG_SNB, MNGR_AUTHOR_INNB, SOPMAL_CD, MNGR_INNB, AUTHOR_ID, LOG_CHNG_DV_CD, REGUSR, REGIST_DT)
SELECT (SELECT COALESCE(MAX(LOG_SNB),0) FROM GC_MANAGER_AUTH_LOG) + @ROWNUM := @ROWNUM + 1,
MNGR_AUTHOR_INNB,
SOPMAL_CD,
MNGR_INNB,
AUTHOR_ID,
'I',
REGUSR,
REGIST_DT
FROM GC_MANAGER_AUTH GMA
WHERE MNGR_AUTHOR_INNB IN
<foreach collection="arrMngrAuthorInnb" item="mngrAuthorInnb" index="idx" open="(" separator=", " close=")">
#{mngrAuthorInnb}
</foreach>
AND (@ROWNUM := 0) = 0
</insert>
<!-- 권한 삭제 -->
<delete id="deteteBOAuthGrp" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO">
DELETE
FROM GC_MANAGER_AUTH
WHERE MNGR_INNB = #{mngrInnb}
<if test="arrAuthSpomal != null and arrAuthSpomal.length > 0">
AND CONCAT(AUTHOR_ID,'_',SOPMAL_CD) NOT IN
<foreach collection="arrAuthSpomal" item="authSpomal" index="idx" open="(" separator=", " close=")">
#{authSpomal}
</foreach>
</if>
</delete>
<!-- 권한 등록 -->
<insert id="insertMngrauth" parameterType="DataMap">
<selectKey order="BEFORE" keyProperty="mngrAuthorInnb" resultType="String">
<![CDATA[
SELECT IFNULL(MAX(MNGR_AUTHOR_INNB), 0) + 1
FROM GC_MANAGER_AUTH
]]>
</selectKey>
INSERT INTO GC_MANAGER_AUTH (MNGR_AUTHOR_INNB, SOPMAL_CD, MNGR_INNB, AUTHOR_ID, REGUSR, REGIST_DT)
SELECT #{mngrAuthorInnb},
A.SOPMAL_CD,
#{mngrInnb} AS MNGR_INNB,
A.AUTHOR_ID,
#{updusr} AS REGUSR,
NOW() AS REGIST_DT
FROM (SELECT GS.SOPMAL_CD, GA.AUTHOR_ID, GMA.AUTHOR_ID CHK
FROM (SELECT G.SOPMAL_CD
FROM GC_SHOP G
UNION ALL
SELECT 'SYS' AS SOPMAL_CD) GS
INNER JOIN GC_AUTH GA
LEFT OUTER JOIN GC_MANAGER_AUTH GMA ON GMA.MNGR_INNB = #{mngrInnb} AND GMA.AUTHOR_ID = GA.AUTHOR_ID AND GMA.SOPMAL_CD = GS.SOPMAL_CD
) A
WHERE CHK IS NULL
AND CONCAT(AUTHOR_ID,'_',SOPMAL_CD) = #{authSopmal}
</insert>
<!-- 사용자별 권한조회 엑셀다운로드-->
<select id="selectBOAuthorExcelList"
parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO"
resultType="DataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
M.MNGR_INNB,
M.MNGR_NM,
M.MNGR_ID,
M.PARTNM,
M.MNGR_DV,
FN_GET_COMMCODE_NAME('MNGR_DV', M.MNGR_DV) AS MNGR_DV_NM,
MM.MNGR_NM AS UPD_MNGR_NM,
ROW_NUMBER() OVER (PARTITION BY M.MNGR_INNB) as AUTH_RN,
CASE
WHEN SUM(CASE WHEN MA.AUTHOR_ID IS NOT NULL AND GAG.USE_AT = 'Y' THEN 1 ELSE 0 END) = 0 THEN '권한 없음'
WHEN SUM(CASE WHEN MA.AUTHOR_ID IS NOT NULL AND GAG.USE_AT = 'Y' THEN 1 ELSE 0 END) = 1 THEN MAX(CASE WHEN MA.AUTHOR_ID IS NOT NULL AND GAG.USE_AT = 'Y' THEN GAG.AUTHOR_NM ELSE NULL END)
WHEN SUM(CASE WHEN MA.AUTHOR_ID IS NOT NULL AND GAG.USE_AT = 'Y' THEN 1 ELSE 0 END) > 1 THEN CONCAT(MAX(CASE WHEN MA.AUTHOR_ID IS NOT NULL AND GAG.USE_AT = 'Y' THEN GAG.AUTHOR_NM ELSE NULL END), ' 외 ', (SUM(CASE WHEN MA.AUTHOR_ID IS NOT NULL AND GAG.USE_AT = 'Y' THEN 1 ELSE 0 END) -1), '개')
END AS AUTH_GRP_MAIN_TITLE,
DATE_FORMAT(MAX(coalesce(M.UPDT_DT, M.REGIST_DT)), '%Y-%m-%d %H:%i:%S') AS MA_REGIST_DT
FROM GC_MANAGER M
LEFT JOIN GC_MANAGER_AUTH MA
ON M.MNGR_INNB = MA.MNGR_INNB
LEFT JOIN GC_MANAGER MM
ON MM.MNGR_INNB = coalesce(M.UPDUSR, M.UPDUSR)
LEFT JOIN GC_AUTH GAG
ON MA.AUTHOR_ID = GAG.AUTHOR_ID
<include refid="selectBOAuthorListWhere" />
group by M.MNGR_INNB,M.MNGR_NM,M.MNGR_ID,M.PARTNM,M.MNGR_DV, MM.MNGR_NM
ORDER BY MA_REGIST_DT DESC
) BM
WHERE (@ROWNUM:=0)=0
AND
AUTH_RN = 1
) PV
</select>
<select id="selectAuthInfo" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO" resultType="DataMap">
SELECT GA.AUTHOR_ID,
FN_GET_COMMCODE_NAME('SYS_DV', GA.SYS_DV_CD) AS SYS_DV_NM,
GA.SYS_DV_CD,
GA.AUTHOR_NM,
GA.AUTHOR_DC
FROM GC_AUTH GA
WHERE GA.AUTHOR_ID = #{authorId}
</select>
<!--관리자 > 권한 있는 사이트 조회-->
<select id="selectBOAuthorSiteList" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO" resultType="DataMap">
SELECT DISTINCT GMA.SOPMAL_CD, GS.SOPMAL_NM, GD.TOP_FIL_COURS ,GD.TOP_SYS_FIL_NM
FROM GC_MANAGER GM
INNER JOIN GC_MANAGER_AUTH GMA
ON GM.MNGR_INNB = GMA.MNGR_INNB
INNER JOIN GC_SHOP GS
ON GMA.SOPMAL_CD = GS.SOPMAL_CD
LEFT JOIN GC_DESIGN GD
ON GS.SOPMAL_CD = GD.SOPMAL_CD
AND GD.SETUP_DV_CD = '01'
AND GD.USE_AT = 'Y'
WHERE GM.MNGR_INNB = #{mngrInnb}
AND GM.MNGR_STTUS_CD = '01'
</select>
<!--관리자 > 권한 있는 사이트 조회 1개만 조회-->
<select id="selectBOAuthorSite" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO" resultType="DataMap">
SELECT DISTINCT GMA.SOPMAL_CD, SOPMAL_NM
FROM GC_MANAGER GM
INNER JOIN GC_MANAGER_AUTH GMA
ON GM.MNGR_INNB = GMA.MNGR_INNB
INNER JOIN GC_SHOP GS
ON GMA.SOPMAL_CD = GS.SOPMAL_CD
WHERE GM.MNGR_INNB = #{mngrInnb}
AND GM.MNGR_STTUS_CD = '01'
LIMIT 1
</select>
</mapper>

View File

@@ -0,0 +1,275 @@
<?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.wb.domainserver.domain.admin.sys.comncd.mapper.BOMaComncdMapper">
<!-- 검색어 -->
<sql id="srchStr">
<![CDATA[
LIKE CONCAT('%', #{srchStr}, '%')
]]>
</sql>
<sql id="selectBOCommcdListInqireWhere">
<![CDATA[
AND 1=1
]]>
<!-- 검색조건 별 검색 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStr)">
<choose>
<when test="srchType=='GROUP_CD_NM'">
AND GRP.GROUP_CD_NM <include refid ="srchStr"/>
</when>
<when test="srchType=='GROUP_CD'">
AND GRP.GROUP_CD <include refid ="srchStr"/>
</when>
<when test="srchType=='CD_NM'">
AND GCD.CD_NM <include refid ="srchStr"/>
</when>
<when test="srchType=='CD'">
AND GCD.CD <include refid ="srchStr"/>
</when>
</choose>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchUseAt)">
AND GCD.USE_AT = #{srchUseAt}
</if>
</sql>
<!-- 상세코드 목록 조회 -->
<select id="selectBOCommcdDetailList"
parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO"
resultType="dataMap">
SELECT GROUP_CD
, CD
, CD_NM
, CD_DC
, CD_DV
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
FROM GC_CODE
WHERE 1=1
AND USE_AT = 'Y'
AND GROUP_CD = #{groupCd}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(cdDv)">
AND CD_DV = #{cdDv}
</if>
ORDER BY SORT_ORDR ASC
</select>
<!-- 상세코드 조회 -->
<select id="selectBOCommcdDetail"
parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdDetailVO"
resultType="dataMap">
<![CDATA[
SELECT GROUP_CD
, CD
, CD_NM
, CD_DC
, CD_DV
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
FROM GC_CODE
WHERE 1=1
AND USE_AT = 'Y'
AND GROUP_CD = #{groupCd}
AND CD = #{cd}
]]>
</select>
<!-- 공통코드 목록 조회 -->
<select id="selectBOCmmnCodeList"
parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO"
resultType="dataMap">
<![CDATA[
/*SET @ROWNUM = 0;*/
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,TB.*
FROM (
SELECT GRP.GROUP_CD_NM
, GRP.GROUP_CD
, GRP.GROUP_CD_DC
, GCD.CD
, GCD.CD_NM
, GCD.CD_DC
, GCD.USE_AT
, GCD.REGUSR
, GCD.REGIST_DT
, DATE_FORMAT(GCD.REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, GCD.UPDUSR
, GCD.UPDT_DT
, DATE_FORMAT(GCD.UPDT_DT, '%Y-%m-%d') AS UPDT_DE
FROM GC_CODE_GROUP GRP
INNER JOIN GC_CODE GCD
ON GCD.GROUP_CD = GRP.GROUP_CD
WHERE 1=1
AND GRP.GROUP_CD = GCD.GROUP_CD
]]>
<include refid="selectBOCommcdListInqireWhere"/>
<![CDATA[
) TB
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 공통코드 목록 건수 -->
<select id="selectBOCmmnCodeTotCnt"
parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
FROM GC_CODE_GROUP GRP
INNER JOIN GC_CODE GCD
ON GCD.GROUP_CD = GRP.GROUP_CD
WHERE 1=1
AND GRP.GROUP_CD = GCD.GROUP_CD
]]>
<include refid="selectBOCommcdListInqireWhere"/>
</select>
<!-- 코드그룹 저장 -->
<update id="saveBOCmmnCodeGroup"
parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO">
INSERT INTO GC_CODE_GROUP (
GROUP_CD
, GROUP_CD_NM
, GROUP_CD_DC
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(groupUseAt)">
, USE_AT
</if>
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
) VALUES (
#{groupCd}
, #{groupCdNm}
, #{groupCdDc}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(groupUseAt)">
, #{groupUseAt}
</if>
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
) ON DUPLICATE KEY UPDATE
GROUP_CD_NM = VALUES(GROUP_CD_NM)
, GROUP_CD_DC = VALUES(GROUP_CD_DC)
, USE_AT = VALUES(USE_AT)
, UPDUSR = VALUES(UPDUSR)
, UPDT_DT = VALUES(UPDT_DT)
</update>
<!-- 코드 저장 -->
<update id="saveBOCmmnCode"
parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO">
INSERT INTO GC_CODE (
GROUP_CD
, CD
, CD_NM
, CD_DC
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(useAt)">
, USE_AT
</if>
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
, SORT_ORDR
) VALUES (
#{groupCd}
, #{cd}
, #{cdNm}
, #{cdDc}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(useAt)">
, #{useAt}
</if>
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
, #{sortOrdr}
) ON DUPLICATE KEY UPDATE
CD_NM = VALUES(CD_NM)
, CD_DC = VALUES(CD_DC)
, USE_AT = VALUES(USE_AT)
, UPDUSR = VALUES(UPDUSR)
, UPDT_DT = VALUES(UPDT_DT)
, SORT_ORDR = VALUES(SORT_ORDR)
</update>
<!-- 코드그룹 ID 중복 조회-->
<select id="selectBOCmmnCodeGrpIdDplctInqire" resultType="Integer">
SELECT COUNT(*)
FROM GC_CODE_GROUP
WHERE 1=1
AND GROUP_CD = #{groupCd}
</select>
<!-- 상세코드 목록 조회 -->
<select id="selectBOCmmnCodeGroupDetail"
parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO"
resultType="dataMap">
<![CDATA[
SELECT GROUP_CD
, GROUP_CD_NM
, GROUP_CD_DC
, USE_AT
FROM GC_CODE_GROUP
WHERE GROUP_CD = #{groupCd}
]]>
</select>
<!--모든 코드 조회-->
<select id="selectBOCommcdDetailAllList"
parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO"
resultType="dataMap">
<![CDATA[
SELECT GROUP_CD
, CD
, CD_NM
, CD_DC
, USE_AT
FROM GC_CODE
WHERE 1=1
AND GROUP_CD = #{groupCd}
ORDER BY SORT_ORDR ASC
]]>
</select>
<!-- 코드그룹 삭제 -->
<update id="deleteBOCmmnCodeGroup" parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO">
<![CDATA[
UPDATE GC_CODE_GROUP
SET USE_AT = 'N'
,UPDUSR = #{updusr}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND GROUP_CD = #{groupCd}
]]>
</update>
<!-- 코드 삭제 -->
<update id="deleteBOCmmnCode" parameterType="com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO">
<![CDATA[
UPDATE GC_CODE
SET USE_AT = 'N'
,UPDUSR = #{updusr}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND GROUP_CD = #{groupCd}
]]>
</update>
</mapper>

View File

@@ -0,0 +1,426 @@
<?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.wb.domainserver.domain.admin.sys.ctgry.mapper.BOMaCtgryMapper">
<!-- 카테고리 목록 조회-->
<select id="selectBOCtgryManage"
parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO"
resultType="dataMap">
SELECT
CTGRY_ID
, UPPER_CTGRY_ID
, SOPMAL_CD
, CTGRY_NM
, CTGRY_DEPTH AS DEPTH
, SORT_ORDR
, CTGRY_DV_CD
, GOODS_CTGRY_EXPSR_AT
, MENU_EXPSR_AT
, GNB_EXPSR_AT
, PGE_EXPSR_AT
, EXPSR_CD
, DATE_FORMAT(EXPSR_BGN_DT, '%Y-%m-%d') AS EXPSR_BGN_DT
, DATE_FORMAT(EXPSR_END_DT, '%Y-%m-%d') AS EXPSR_END_DT
, URL_DV_CD
, URL
, ORGINL_FIL_NM
, SYS_FIL_NM
, FIL_MG
, FIL_TY
, FIL_COURS
, USE_AT
, CONCAT(SOPMAL_CD,'_',CTGRY_ID) AS ID
, CTGRY_NM AS TEXT
, (CASE WHEN CTGRY_DEPTH = 1 THEN '#'
ELSE CONCAT(SOPMAL_CD,'_',UPPER_CTGRY_ID)
END) AS PARENT
, BANNER_URL
, MENU_CHR_COLOR
FROM GC_CATEGORY GC
WHERE USE_AT = 'Y'
AND (
GC.UPPER_CTGRY_ID IS NULL OR
(
SELECT PARENT.USE_AT
FROM GC_CATEGORY PARENT
WHERE CONCAT(PARENT.SOPMAL_CD,'_',PARENT.CTGRY_ID) = CONCAT(GC.SOPMAL_CD,'_',GC.UPPER_CTGRY_ID)
) = 'Y')
ORDER BY SORT_ORDR ASC
</select>
<!-- 카테고리 상세 조회-->
<select id="selectBOCtgry"
parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM GC_CATEGORY
WHERE 1=1
]]>
</select>
<!-- 카테고리 저장-->
<insert id="insertBOCtgryManage"
parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO">
INSERT INTO GC_CATEGORY (
CTGRY_ID
, UPPER_CTGRY_ID
, SOPMAL_CD
, CTGRY_NM
, CTGRY_DEPTH
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sortOrdr)">
, SORT_ORDR
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ctgryDvCd)">
, CTGRY_DV_CD
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(goodsCtgryExpsrAt)">
, GOODS_CTGRY_EXPSR_AT
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(menuExpsrAt)">
, MENU_EXPSR_AT
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(gnbExpsrAt)">
, GNB_EXPSR_AT
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pgeExpsrAt)">
, PGE_EXPSR_AT
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrCd)">
, EXPSR_CD
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrBgnDt)">
, EXPSR_BGN_DT
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrEndDt)">
, EXPSR_END_DT
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(urlDvCd)">
, URL_DV_CD
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(url)">
, URL
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(orginlFilNm)">
, ORGINL_FIL_NM /*원본파일명*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sysFilNm)">
, SYS_FIL_NM /*시스템파일명*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(filMg)">
, FIL_MG /*파일크기*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(filTy)">
, FIL_TY /*파일타입*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(filCours)">
, FIL_COURS /*파일경로*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(bannerUrl)">
, BANNER_URL
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(menuChrColor)">
,MENU_CHR_COLOR
</if>
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
) VALUES (
#{ctgryId}
, #{upperCtgryId}
, #{sopmalCd}
, #{ctgryNm}
, #{ctgryDepth}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sortOrdr)">
, #{sortOrdr}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ctgryDvCd)">
, #{ctgryDvCd}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(goodsCtgryExpsrAt)">
, #{goodsCtgryExpsrAt}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(menuExpsrAt)">
, #{menuExpsrAt}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(gnbExpsrAt)">
, #{gnbExpsrAt}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pgeExpsrAt)">
, #{pgeExpsrAt}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrCd)">
, #{expsrCd}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrBgnDt)">
, #{expsrBgnDt}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrEndDt)">
, #{expsrEndDt}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(urlDvCd)">
, #{urlDvCd}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(url)">
, #{url}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(orginlFilNm)">
, #{orginlFilNm} /*원본파일명*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sysFilNm)">
, #{sysFilNm} /*시스템파일명*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(filMg)">
, #{filMg} /*파일크기*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(filTy)">
, #{filTy} /*파일타입*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(filCours)">
, #{filCours} /*파일경로*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(bannerUrl)">
, #{bannerUrl}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(menuChrColor)">
, #{menuChrColor} /*메뉴 글자색*/
</if>
, 'Y'
, #{regusr}
, NOW()
, #{regusr}
, NOW()
)
</insert>
<!-- 카테고리 저장-->
<update id="updateBOCtgryManage"
parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO">
UPDATE GC_CATEGORY
SET
CTGRY_NM = #{ctgryNm}, /*카테고리명*/
SORT_ORDR = #{sortOrdr}, /*순서*/
CTGRY_DV_CD = #{ctgryDvCd}, /*카테고리구분코드*/
GOODS_CTGRY_EXPSR_AT = #{goodsCtgryExpsrAt}, /*상품카테고리노출여부*/
MENU_EXPSR_AT = #{menuExpsrAt}, /*메뉴노출여부*/
GNB_EXPSR_AT = #{gnbExpsrAt}, /*GNB 노출여부*/
PGE_EXPSR_AT = #{pgeExpsrAt}, /*페이지 노출여부*/
EXPSR_CD = #{expsrCd}, /*노출구분*/
MENU_CHR_COLOR = #{menuChrColor},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrBgnDt)">
EXPSR_BGN_DT = #{expsrBgnDt}, /*노출구분 시작일자*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrEndDt)">
EXPSR_END_DT = #{expsrEndDt}, /*노출구분 종료자*/
</if>
<choose>
<when test="fileUse == 'new'">
ORGINL_FIL_NM = #{orginlFilNm},
SYS_FIL_NM = #{sysFilNm},
FIL_MG = #{filMg},
FIL_TY = #{filTy},
FIL_COURS = #{filCours},
</when>
<when test="fileUse == 'none'">
ORGINL_FIL_NM = NULL,
SYS_FIL_NM = NULL,
FIL_MG = NULL,
FIL_TY = NULL,
FIL_COURS = NULL,
</when>
<otherwise>
</otherwise>
</choose>
BANNER_URL = #{bannerUrl},
URL_DV_CD = #{urlDvCd},
URL = #{url}, /*URL*/
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE CTGRY_ID = #{ctgryId}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 정렬순서 업데이트 -->
<update id="updateBOCtgrySortOrdr" parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO">
UPDATE GC_CATEGORY
SET SORT_ORDR = #{sortOrdr},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE CTGRY_ID = #{ctgryId}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 카테고리 삭제 -->
<update id="deleteBOCtgryManage" parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO">
<![CDATA[
UPDATE GC_CATEGORY
SET USE_AT = 'N'
, UPDUSR = #{updusr}
, UPDT_DT = NOW()
WHERE 1=1
AND CTGRY_ID = #{ctgryId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<select id="selectCtgryId" parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO" resultType="java.lang.Integer">
SELECT IFNULL(MAX(CTGRY_ID), 0)+1
FROM GC_CATEGORY
WHERE SOPMAL_CD = #{sopmalCd}
</select>
<!--관리자 > 카테고리 조회-->
<select id="selectGoodsCategoryList" parameterType="com.wb.domainserver.domain.gcone.goods.goods.vo.BOGoodsVO" resultType="dataMap">
SELECT GC.CTGRY_ID
, IFNULL(GC.UPPER_CTGRY_ID, 0) AS UPPER_CTGRY_ID
, GC.CTGRY_DEPTH
, GC.CTGRY_NM
FROM GC_CATEGORY GC
WHERE 1=1
AND GC.USE_AT = 'Y'
AND GC.GOODS_CTGRY_EXPSR_AT = 'Y'
AND GC.SOPMAL_CD = #{sopmalCd}
AND IFNULL(GC.UPPER_CTGRY_ID, 0) = #{upperCtgryId}
ORDER BY GC.CTGRY_ID
, GC.CTGRY_DEPTH
, GC.UPPER_CTGRY_ID
, GC.SORT_ORDR
</select>
<!--사용자 > 카테고리 상품 목록조회-->
<select id="selectGoodsSopmalCatgryList" parameterType="com.wb.domainserver.domain.gcone.goods.goods.vo.BOGoodsVO" resultType="dataMap">
WITH RECURSIVE CATEGORY_PATH AS (
SELECT
FC.CTGRY_DEPTH,
FC.CTGRY_ID AS BASE_CTGRY_ID,
FC.CTGRY_NM AS BASE_CTGRY_NM,
FC.CTGRY_ID,
FC.UPPER_CTGRY_ID,
FC.CTGRY_NM,
FC.SOPMAL_CD,
FC.SORT_ORDR
FROM GC_CATEGORY FC
WHERE
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ctgryId)">
FC.CTGRY_ID = #{ctgryId}
</when>
<otherwise>
FC.CTGRY_CD = #{code}
</otherwise>
</choose>
AND FC.SOPMAL_CD = #{sopmalCd}
AND FC.USE_AT = 'Y'
AND FC.PGE_EXPSR_AT = 'Y'
UNION ALL
SELECT
C.CTGRY_DEPTH,
P.BASE_CTGRY_ID,
P.BASE_CTGRY_NM,
C.CTGRY_ID,
C.UPPER_CTGRY_ID,
C.CTGRY_NM,
C.SOPMAL_CD,
C.SORT_ORDR
FROM GC_CATEGORY C
INNER JOIN CATEGORY_PATH P
ON C.UPPER_CTGRY_ID = P.CTGRY_ID
AND C.SOPMAL_CD = P.SOPMAL_CD
WHERE C.SOPMAL_CD = #{sopmalCd}
AND C.PGE_EXPSR_AT = 'Y'
AND C.USE_AT = 'Y'
)
SELECT
P.CTGRY_DEPTH,
P.CTGRY_ID,
P.UPPER_CTGRY_ID,
P.CTGRY_NM,
P.SOPMAL_CD,
P.BASE_CTGRY_NM,
P.BASE_CTGRY_ID,
P.SORT_ORDR
FROM
CATEGORY_PATH P
WHERE 1=1
AND P.CTGRY_ID != '2'
AND P.UPPER_CTGRY_ID = 2 OR P.UPPER_CTGRY_ID = #{ctgryId} OR P.CTGRY_ID = #{ctgryId}
ORDER BY
CTGRY_DEPTH, SORT_ORDR ASC
</select>
<!--사용자 > 상품 목록 > 카테고리 배너 조회-->
<select id="selectGoodsSopmalCatgryBanner" parameterType="com.wb.domainserver.domain.gcone.goods.goods.vo.BOGoodsVO" resultType="dataMap">
SELECT
GC.SOPMAL_CD
,GC.FIL_COURS
,GC.ORGINL_FIL_NM
,GC.SYS_FIL_NM
,BANNER_URL
FROM
GC_CATEGORY GC
WHERE
1 = 1
AND GC.USE_AT = 'Y'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ctgryId)">
AND GC.CTGRY_ID = #{ctgryId}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(code)">
AND GC.CTGRY_CD = #{code}
</if>
AND GC.SOPMAL_CD = #{sopmalCd}
</select>
<select id="selectBOCtgryOrdrCnt" parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO" resultType="java.lang.Integer">
SELECT CTGRY_ID
FROM GC_CATEGORY
WHERE SOPMAL_CD = #{sopmalCd}
AND USE_AT = 'Y'
AND UPPER_CTGRY_ID = #{upperCtgryId}
AND SORT_ORDR = #{sortOrdr};
</select>
<update id="updateBOCtgryOrdr" parameterType="dataMap">
<selectKey keyProperty="sortOrdr" resultType="java.lang.Integer" order="BEFORE">
SELECT IFNULL(MAX(SORT_ORDR),0) + 1
FROM GC_CATEGORY
WHERE SOPMAL_CD = #{sopmalCd}
AND USE_AT = 'Y'
AND UPPER_CTGRY_ID = #{upperCtgryId}
</selectKey>
UPDATE GC_CATEGORY
SET SORT_ORDR = #{sortOrdr}
WHERE SOPMAL_CD = #{sopmalCd}
AND CTGRY_ID = #{ctgryId}
</update>
<select id="selectBOCtgryGoodsListInqurePopup" parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO" resultType="dataMap">
SELECT GCL.GOODS_INNB, GCL.GOODS_ORDR, GG.GOODS_NM, GCL.CTGRY_GOODS_ESNTL_NB
FROM GC_CATEGORY_LINK GCL
LEFT JOIN GC_GOODS GG
ON GCL.GOODS_INNB = GG.GOODS_INNB AND GCL.SOPMAL_CD = GG.SOPMAL_CD
WHERE GCL.SOPMAL_CD = #{sopmalCd}
AND GCL.CTGRY_ID = #{ctgryId}
ORDER BY GOODS_ORDR ASC
</select>
<!-- 카테고리 상품 조회 -->
<update id="updateBOCtgryGoodsOrdr" parameterType="com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO">
UPDATE GC_CATEGORY_LINK
SET GOODS_ORDR = #{goodsOrdr}
WHERE 1=1
AND CTGRY_GOODS_ESNTL_NB = #{ctgryGoodsEsntlNb}
</update>
<!-- 쇼핑몰 카테고리 리스트 -->
<select id="selectBOSopmalCtgry" parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO" resultType="dataMap">
SELECT
CTGRY_ID, SOPMAL_CD, CTGRY_NM
FROM GC_CATEGORY
WHERE USE_AT = 'Y'
AND CTGRY_DEPTH = '2'
AND SOPMAL_CD = #{sopmalCd}
</select>
</mapper>

View File

@@ -0,0 +1,210 @@
<?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.wb.domainserver.domain.admin.sys.fnct.mapper.BOFnctMapper">
<sql id="srchFnctNmAsrchfnctDvAsrchFnctUrlWhere">
WHERE
1=1
AND
MF.USE_AT = 'Y'
<if test="srchFnctNm != null and srchFnctNm != ''">
AND
UPPER(MF.FNCT_NM) LIKE CONCAT('%', UPPER(#{srchFnctNm}), '%')
</if>
<if test="srchFnctDv != null and srchFnctDv != ''">
AND
MF.FNCT_DV_CD= #{srchFnctDv}
</if>
<if test="srchFnctUrl != null and srchFnctUrl != ''">
AND
UPPER(MF.FNCT_URI) LIKE CONCAT('%', UPPER(#{srchFnctUrl}), '%')
</if>
<if test="srchSysDvCd != null and srchSysDvCd != ''">
AND
MF.SYS_DV_CD = #{srchSysDvCd}
</if>
</sql>
<!-- 페이징처리를 위한 게시판 목록 총 개수 -->
<select id="selectBOFnctTotCnt"
parameterType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO"
resultType = "Integer">
SELECT COUNT(*)
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
MF.FNCT_ID,
MF.REGIST_DT AS REGIST_ORD
FROM GC_FNCT MF
<include refid="srchFnctNmAsrchfnctDvAsrchFnctUrlWhere" />
and MF.FNCT_URI IS NOT NULL
ORDER BY
REGIST_ORD DESC
) BM
WHERE
(@ROWNUM:=0)=0
) PV
WHERE 1=1
</select>
<!-- 기능 목록 조회 -->
<select id="selectBOFnctList"
parameterType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO"
resultType = "DataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
MF.FNCT_ID,
MF.SYS_DV_CD,
FN_GET_COMMCODE_NAME('SYS_DV', MF.SYS_DV_CD) AS SYS_DV_CD_NM,
MF.FNCT_NM,
MF.FNCT_DV_CD,
FN_GET_COMMCODE_NAME('FNCT_DV', MF.FNCT_DV_CD) AS FNCT_DV_NM,
MF.FNCT_URI,
MF.FNCT_DC,
MF.USE_AT,
MF.REGUSR,
DATE_FORMAT(MF.REGIST_DT, '%Y-%m-%d') AS REGIST_DT,
MF.UPDUSR,
DATE_FORMAT(MF.UPDT_DT, '%Y-%m-%d') AS UPDT_DT,
MF.REGIST_DT AS REGIST_ORD
FROM GC_FNCT MF
<include refid="srchFnctNmAsrchfnctDvAsrchFnctUrlWhere" />
AND MF.FNCT_URI IS NOT NULL
ORDER BY REGIST_ORD DESC
) BM
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 기능 상세 조회 -->
<select id="selectBOFnctDetail"
parameterType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO"
resultType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO">
SELECT
FNCT_ID,
SYS_DV_CD,
FN_GET_COMMCODE_NAME('MNGR_DV', SYS_DV_CD) AS SYS_DV_CD_NM,
FNCT_NM,
FNCT_DV_CD,
FNCT_URI,
FNCT_DC,
USE_AT,
REGUSR,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DT,
UPDUSR,
DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DT
FROM GC_FNCT MF
WHERE 1=1
AND USE_AT = 'Y'
AND FNCT_ID = #{fnctId}
</select>
<!-- 기능 URL 중복여부 조회 -->
<select id="selectBOFnctUrlDplct"
parameterType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO"
resultType = "Integer">
SELECT COUNT(1)
FROM GC_FNCT
WHERE 1=1
AND FNCT_URI = #{fnctUri}
AND SYS_DV_CD = #{sysDvCd}
AND USE_AT = 'Y'
</select>
<!-- 기능 등록 -->
<insert id="insertBOFnct"
parameterType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO">
<selectKey order="BEFORE" keyProperty="fnctId" resultType="java.lang.String">
SELECT CAST(IFNULL(COUNT(FNCT_ID), 0) AS UNSIGNED)+1
FROM GC_FNCT
</selectKey>
INSERT INTO GC_FNCT
(
FNCT_ID,
SYS_DV_CD,
FNCT_DV_CD,
FNCT_URI,
FNCT_NM,
FNCT_DC,
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES
(
#{fnctId},
#{sysDvCd},
#{fnctDvCd},
#{fnctUri},
#{fnctNm},
#{fnctDc},
#{useAt},
#{regusr},
NOW(),
null,
null
)
</insert>
<!-- 기능 수정 -->
<update id="updateBOFnct"
parameterType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO">
UPDATE GC_FNCT
SET SYS_DV_CD = #{sysDvCd},
FNCT_NM = #{fnctNm},
FNCT_DV_CD = #{fnctDvCd},
FNCT_DC = #{fnctDc},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE 1=1
AND FNCT_ID = #{fnctId}
</update>
<!-- 기능 삭제 -->
<update id="deleteBOFnct"
parameterType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO">
UPDATE GC_FNCT
SET USE_AT = 'N',
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE FNCT_ID = #{fnctId}
</update>
<!-- 기능 목록 엑셀 -->
<select id="selectBOFnctExcelList"
parameterType = "com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO"
resultType = "DataMap">
SELECT
MF.FNCT_ID,
MF.SYS_DV_CD,
FN_GET_COMMCODE_NAME('SYS_DV', MF.SYS_DV_CD) AS SYS_DV_CD_NM,
MF.FNCT_NM,
MF.FNCT_DV_CD,
FN_GET_COMMCODE_NAME('FNCT_DV', MF.FNCT_DV_CD) AS FNCT_DV_NM,
MF.FNCT_URI,
MF.FNCT_DC,
MF.USE_AT,
MF.REGUSR,
DATE_FORMAT(MF.REGIST_DT, '%Y-%m-%d') AS REGIST_DT,
MF.UPDUSR,
DATE_FORMAT(MF.UPDT_DT, '%Y-%m-%d') AS UPDT_DT,
MF.REGIST_DT AS REGIST_ORD
FROM GC_FNCT MF
<include refid="srchFnctNmAsrchfnctDvAsrchFnctUrlWhere" />
AND MF.FNCT_URI IS NOT NULL
ORDER BY REGIST_ORD DESC
</select>
</mapper>

View File

@@ -0,0 +1,459 @@
<?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.wb.domainserver.domain.admin.sys.menu.mapper.BOMaMenuMapper">
<!-- 메뉴 목록 조회-->
<select id="selectBOMenuManage"
parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO"
resultType="dataMap">
SELECT
MENU_CD
, SOPMAL_CD
, UPPER_MENU_CD
, UPMOST_MENU_CD
, MENU_NM
, MENU_DC
, MENU_DEPTH AS DEPTH
, SORT_ORDR
, URL
, EXPSR_LC_DV_CD
, MENU_CD AS ID
, MENU_NM AS TEXT
, (CASE WHEN MENU_DEPTH = 0 THEN '#'
ELSE UPPER_MENU_CD
END) AS PARENT
FROM GC_MANAGER_MENU MM
WHERE USE_AT = 'Y'
AND (
MM.UPPER_MENU_CD IS NULL OR
(
SELECT PARENT.USE_AT
FROM GC_MANAGER_MENU PARENT
WHERE PARENT.MENU_CD = MM.UPPER_MENU_CD
) = 'Y')
ORDER BY SORT_ORDR ASC
</select>
<!-- 메뉴 상세 조회-->
<select id="selectBOMenu"
parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM GC_MANAGER_MENU
WHERE 1=1
]]>
</select>
<!-- 메뉴 저장-->
<update id="updateBOMenuManage" parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO">
UPDATE GC_MANAGER_MENU
SET MENU_NM = #{menuNm}, /*메뉴명*/
EXPSR_LC_DV_CD = #{expsrLcDvCd}, /*노출 여부*/
URL = #{url}, /*URL*/
MENU_DC = #{menuDc}, /*메뉴 설명*/
UPDUSR = #{updusr}, /*수정자*/
UPDT_DT = NOW() /*수정일시*/
WHERE MENU_CD = #{menuCd}
AND SOPMAL_CD = #{sopmalCd}
</update>
<insert id="insertBOMenuManage" parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO">
<selectKey order="BEFORE" keyProperty="menuCd" resultType="String">
SELECT CONCAT(#{upmostMenuCd}, '_', MAX(CAST(REGEXP_REPLACE(MENU_CD, '[^0-9]', '') AS UNSIGNED))+1) AS MENU_CD
FROM GC_MANAGER_MENU
WHERE UPMOST_MENU_CD = #{upmostMenuCd}
</selectKey>
INSERT
INTO GC_MANAGER_MENU
(
MENU_CD,
SOPMAL_CD,
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(upperMenuCd)">
UPPER_MENU_CD,
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(upmostMenuCd)">
UPMOST_MENU_CD,
</if>
MENU_NM,
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(menuDc)">
MENU_DC,
</if>
MENU_DEPTH,
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sortOrdr)">
SORT_ORDR,
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(url)">
URL,
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrLcDvCd)">
EXPSR_LC_DV_CD,
</if>
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES
(
#{menuCd},
#{sopmalCd},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(upperMenuCd)">
#{upperMenuCd},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(upmostMenuCd)">
#{upmostMenuCd},
</if>
#{menuNm},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(menuDc)">
#{menuDc},
</if>
#{menuDepth},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sortOrdr)">
#{sortOrdr},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(url)">
#{url},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrLcDvCd)">
#{expsrLcDvCd},
</if>
'Y',
#{regusr},
NOW(),
#{regusr},
NOW()
)
</insert>
<!-- 메뉴 삭제 -->
<update id="deleteBOMenuManage" parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO">
UPDATE GC_MANAGER_MENU
SET USE_AT = 'N',
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE MENU_CD = #{menuCd}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 기능 팝업 셀렉트박스 상위메뉴 조회 -->
<select id="selectTopMenuList" resultType="DataMap">
SELECT
MENU_CD,
UPPER_MENU_CD,
MENU_NM,
MENU_DEPTH AS LEVEL,
UPMOST_MENU_CD,
MENU_DC
FROM
GC_MANAGER_MENU
WHERE
1=1
AND
USE_AT = 'Y'
AND
UPPER_MENU_CD IS NULL
ORDER BY
SORT_ORDR
</select>
<!-- 기능 팝업 셀렉트박스 하위메뉴 조회 -->
<select id="selectSubMenuList" parameterType="String" resultType="DataMap">
SELECT
MENU_CD,
UPPER_MENU_CD,
MENU_NM,
MENU_DEPTH AS LEVEL,
UPMOST_MENU_CD,
MENU_DC
FROM
GC_MANAGER_MENU
WHERE
1=1
AND
USE_AT = 'Y'
AND
UPPER_MENU_CD = #{upperMenuCd}
ORDER BY
SORT_ORDR
</select>
<!-- 쇼핑몰 목록 조회 -->
<select id="selectBOsopmalList" parameterType="String" resultType="DataMap">
SELECT
MENU_CD,
MENU_NM,
SOPMAL_CD
FROM
GC_MANAGER_MENU
WHERE
MENU_DEPTH = '1'
AND
UPPER_MENU_CD = 'adm'
AND
USE_AT = 'Y'
</select>
<!-- 선택된 메뉴리스트 조회 -->
<select id="selectBOMenuListInqire" parameterType="String" resultType="DataMap">
SELECT
AFM.MENU_CD,
MM.MENU_NM
FROM
GC_AUTH_FNCT_MENU AFM
INNER JOIN
GC_MANAGER_MENU MM
ON
AFM.MENU_CD = MM.MENU_CD
AND
AFM.AUTHOR_GROUP_CD = #{authorGroupCd}
</select>
<!-- 정렬순서 중복 조회 -->
<select id="selectBOMenuSortOrdrCheck"
parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO" resultType="int">
SELECT
COUNT(MENU_CD)
FROM
GC_MANAGER_MENU MM
WHERE
1=1
AND
MENU_DEPTH = #{menuDepth}
AND
UPPER_MENU_CD = #{upperMenuCd}
AND
SORT_ORDR = #{sortOrdr}
AND
USE_AT = 'Y'
</select>
<select id="selectBOSortOrdrByMenuCd"
parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO" resultType="String">
SELECT
MENU_CD
FROM
GC_MANAGER_MENU MM
WHERE
1=1
AND
MENU_DEPTH = #{menuDepth}
AND
UPPER_MENU_CD = #{upperMenuCd}
AND
SORT_ORDR = #{sortOrdr}
AND
USE_AT = 'Y'
</select>
<!-- 정렬순서 업데이트 -->
<update id="updateBOMenuSortOrdr" parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO">
<foreach collection="moveMenuCd" item="menuCd" index="index" separator=";">
UPDATE GC_MANAGER_MENU
SET SORT_ORDR = #{index} +1
WHERE MENU_CD = #{menuCd}
AND SOPMAL_CD = #{sopmalCd}
</foreach>
</update>
<!-- 쇼핑몰별 등급 조회 -->
<select id="selectBOSopmalGrad"
parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO"
resultType="dataMap">
SELECT GMG.MBR_GRAD_INNB, GMG.MBR_GRAD_NM
FROM GC_SHOP_MEMBER_GRAD_GROUP GSMGG
LEFT JOIN GC_MEMBER_GRAD GMG
ON GSMGG.MBR_GRAD_GROUP_INNB = GMG.MBR_GRAD_GROUP_INNB
WHERE GSMGG.SOPMAL_CD = ${sopmalCd}
</select>
<!-- 통합관리자/관리자 TOP 메뉴 조회 -->
<select id="selectBOTopMenuListInqire" parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO" resultType="DataMap">
<![CDATA[
WITH RECURSIVE MENU_INCLD AS
(
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
, M1.MENU_CD
, M1.SOPMAL_CD
, M1.UPPER_MENU_CD
, M1.MENU_NM
, M1.MENU_DEPTH
, M1.SORT_ORDR
, M1.URL
, CONCAT(IF(LENGTH(M1.SORT_ORDR)=1,'0',''), M1.SORT_ORDR, M1.MENU_NM) FULL_PATH
FROM GC_MANAGER_MENU M1
WHERE (@ROWNUM:=0)=0
AND M1.USE_AT = 'Y'
AND M1.SOPMAL_CD = #{sopmalCd}
AND M1.UPMOST_MENU_CD = #{upmostMenuCd}
AND CASE WHEN IFNULL(#{upperMenuCd},'') <> '' THEN M1.UPPER_MENU_CD = #{upperMenuCd}
ELSE M1.UPPER_MENU_CD = #{upmostMenuCd}
END
UNION
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
, M2.MENU_CD
, M2.SOPMAL_CD
, M2.UPPER_MENU_CD
, M2.MENU_NM
, M2.MENU_DEPTH
, M2.SORT_ORDR
, M2.URL
, CONCAT(MENU_INCLD.FULL_PATH , ' > ', M2.SORT_ORDR, M2.MENU_NM ) AS FULL_PATH
FROM GC_MANAGER_MENU M2
INNER JOIN MENU_INCLD ON M2.UPPER_MENU_CD = MENU_INCLD.MENU_CD AND M2.SOPMAL_CD = MENU_INCLD.SOPMAL_CD
WHERE (@ROWNUM:=0)=0
AND M2.USE_AT = 'Y'
)
SELECT RNUM,MENU_CD
, SOPMAL_CD
, UPPER_MENU_CD
, MENU_NM
, MENU_DEPTH
, SORT_ORDR
, URL
, FULL_PATH
, CASE
WHEN MENU_DEPTH = #{nextDeptCd2} AND LEAD(MENU_DEPTH) OVER (ORDER BY FULL_PATH) = #{nextDeptCd1} THEN 1
ELSE 0
END AS NEXT_DEPTH_2
, CASE
WHEN MENU_DEPTH = #{nextDeptCd1} AND LEAD(MENU_DEPTH) OVER (ORDER BY FULL_PATH) = #{nextDeptCd2} THEN 1
ELSE 0
END AS NEXT_DEPTH_3
FROM MENU_INCLD
WHERE 1 = 1
AND CASE WHEN IFNULL(#{upperMenuCd},'') = '' THEN MENU_DEPTH = #{topMenuCd}
ELSE 1
END
ORDER BY FULL_PATH
]]>
</select>
<!-- 쇼핑몰 메뉴 조회 -->
<select id="selectBOSopmalTopMenuListInqire" parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO" resultType="DataMap">
<![CDATA[
WITH RECURSIVE CTGRY_INCLD AS
(
SELECT 1 AS RNUM
, C1.CTGRY_ID
, C1.SOPMAL_CD
, C1.UPPER_CTGRY_ID
, C1.CTGRY_NM
, C1.CTGRY_DEPTH
, C1.SORT_ORDR
, C1.CTGRY_DV_CD
, C1.URL
, C1.MENU_EXPSR_AT
, C1.GNB_EXPSR_AT
, CONCAT(C1.SOPMAL_CD, ' > ', C1.SORT_ORDR, C1.CTGRY_NM) FULL_PATH
, C1.MENU_CHR_COLOR
FROM GC_CATEGORY C1
WHERE 1=1
AND C1.USE_AT = 'Y'
AND C1.SOPMAL_CD = #{sopmalCd}
AND C1.UPPER_CTGRY_ID = 1
UNION
SELECT RNUM+1
, C2.CTGRY_ID
, C2.SOPMAL_CD
, C2.UPPER_CTGRY_ID
, C2.CTGRY_NM
, C2.CTGRY_DEPTH
, C2.SORT_ORDR
, C2.CTGRY_DV_CD
, CASE WHEN C2.URL_DV_CD = '01' THEN CONCAT('/sopmal/goods/selectGoodsListForm?ctgryId=',C2.CTGRY_ID)
ELSE C2.URL
END URL
, C2.MENU_EXPSR_AT
, C2.GNB_EXPSR_AT
, CONCAT(CTGRY_INCLD.FULL_PATH, ' > ', LPAD(IFNULL(C2.SORT_ORDR, '0'), 3, '0'), C2.CTGRY_NM) AS FULL_PATH
, C2.MENU_CHR_COLOR
FROM GC_CATEGORY C2
INNER JOIN CTGRY_INCLD ON C2.UPPER_CTGRY_ID = CTGRY_INCLD.CTGRY_ID AND C2.SOPMAL_CD = CTGRY_INCLD.SOPMAL_CD
WHERE 1 = 1
AND C2.USE_AT = 'Y'
AND C2.CTGRY_DEPTH < 5
AND CASE WHEN C2.EXPSR_CD = '01' THEN 1
WHEN EXPSR_CD = '03' AND DATE_FORMAT(SYSDATE(), '%Y-%m-%d') BETWEEN DATE_FORMAT(EXPSR_BGN_DT, '%Y-%m-%d') AND DATE_FORMAT(EXPSR_END_DT, '%Y-%m-%d') THEN 1
ELSE 0
END
)
SELECT FULL_PATH
, RNUM
, MENU_EXPSR_AT
, GNB_EXPSR_AT
, SORT_ORDR
, CTGRY_DV_CD
, CTGRY_ID
, SOPMAL_CD
, UPPER_CTGRY_ID
, CTGRY_NM
, CTGRY_DEPTH
, URL
, MENU_CHR_COLOR
, IF(LOCATE('bbsId=', url) > 0, SUBSTRING_INDEX(SUBSTRING(url, LOCATE('bbsId=', url) + 6), '&', 1), '') AS BBS_ID
, CASE WHEN RNUM IN ('2','3') AND LEAD(RNUM) OVER (ORDER BY FULL_PATH) = '3' THEN 1
ELSE 0
END AS NEXT_DEPTH_2
, CASE WHEN RNUM IN ('3','4') AND LEAD(RNUM) OVER (ORDER BY FULL_PATH) = '4' THEN 1
ELSE 0
END AS NEXT_DEPTH_3
FROM CTGRY_INCLD
WHERE RNUM > 1
ORDER BY FULL_PATH
]]>
</select>
<!--crm header left menu 조회-->
<select id="selectBOCrmMenuListInqire" parameterType="com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO" resultType="DataMap">
WITH RECURSIVE MENU_INCLD AS
(
SELECT 1 AS RNUM
, M1.MENU_CD
, M1.SOPMAL_CD
, M1.UPPER_MENU_CD
, M1.MENU_NM
, M1.MENU_DEPTH
, M1.SORT_ORDR
, M1.URL
, M1.EXPSR_LC_DV_CD
, CONCAT(M1.SORT_ORDR, M1.MENU_NM) FULL_PATH
FROM GC_MANAGER_MENU M1
WHERE 1 = 1
AND M1.USE_AT = 'Y'
AND M1.SOPMAL_CD = #{sopmalCd}
AND M1.UPMOST_MENU_CD = #{upmostMenuCd}
AND CASE WHEN IFNULL(#{upmostMenuCd},'') <![CDATA[<>]]> '' THEN M1.UPPER_MENU_CD = 'crm'
ELSE M1.UPPER_MENU_CD = 'crm'
END
UNION
SELECT RNUM+1
, M2.MENU_CD
, M2.SOPMAL_CD
, M2.UPPER_MENU_CD
, M2.MENU_NM
, M2.MENU_DEPTH
, M2.SORT_ORDR
, M2.URL
, M2.EXPSR_LC_DV_CD
, CONCAT(MENU_INCLD.FULL_PATH , ' > ', M2.SORT_ORDR, M2.MENU_NM ) AS FULL_PATH
FROM GC_MANAGER_MENU M2
INNER JOIN MENU_INCLD ON M2.UPPER_MENU_CD = MENU_INCLD.MENU_CD AND M2.SOPMAL_CD = MENU_INCLD.SOPMAL_CD
WHERE 1 = 1
AND M2.USE_AT = 'Y'
)
SELECT RNUM
,MENU_CD
, SOPMAL_CD
, UPPER_MENU_CD
, MENU_NM
, MENU_DEPTH
, SORT_ORDR
, URL
, EXPSR_LC_DV_CD
, FULL_PATH
FROM MENU_INCLD
WHERE 1 = 1
ORDER BY SORT_ORDR
</select>
</mapper>

View File

@@ -0,0 +1,541 @@
<?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.wb.domainserver.domain.admin.user.mngr.mapper.BOJobUserMapper">
<!-- 목록 조회 WHERE(검색조건) -->
<!-- 검색어 -->
<sql id="selectBOJobUserListInqireWhere">
WHERE
1=1
AND
MNGR_STTUS_CD != '03'
<!-- 검색타입별 검색 -->
<if test="srchStr != null and srchStr != ''">
<choose>
<when test="srchType eq 'MNGR_NM'.toString()">
AND MNGR_NM LIKE CONCAT('%', #{srchStr}, '%')
</when>
<when test="srchType eq 'MNGR_ID'.toString()">
AND MNGR_ID LIKE CONCAT('%', #{srchStr}, '%')
</when>
<when test="srchType eq 'EMAIL'.toString()">
AND CAST(AES_DECRYPT(UNHEX(EMAIL) , #{secretKey}) AS CHAR(50)) LIKE CONCAT('%', #{srchStr}, '%')
</when>
<when test="srchType eq 'MBTLNB'.toString()">
AND CAST(AES_DECRYPT(UNHEX(MBTLNB) , #{secretKey}) AS CHAR(50)) LIKE CONCAT('%', #{srchStr}, '%')
</when>
<when test="srchType eq 'PARTNM'.toString()">
AND PARTNM LIKE CONCAT('%', #{srchStr}, '%')
</when>
<when test="srchType eq 'ALL'.toString()">
AND(
MNGR_NM LIKE CONCAT('%', #{srchStr}, '%') OR
MNGR_ID LIKE CONCAT('%', #{srchStr}, '%') OR
CAST(AES_DECRYPT(UNHEX(EMAIL) , #{secretKey}) AS CHAR(50)) LIKE CONCAT('%', #{srchStr}, '%') OR
CAST(AES_DECRYPT(UNHEX(MBTLNB) , #{secretKey}) AS CHAR(50)) LIKE CONCAT('%', #{srchStr}, '%') OR
PARTNM LIKE CONCAT('%', #{srchStr}, '%')
)
</when>
</choose>
</if>
<!-- 사용자타입검색 -->
<if test="srchMngrDv != null and srchMngrDv != ''">
AND MNGR_DV = #{srchMngrDv}
</if>
<!-- 최근접속날자검색 -->
<if test="srchStartDate != null and srchStartDate != '' and srchEndDate != null and srchEndDate != ''">
AND
LAST_CONECT_DT BETWEEN CONCAT(#{srchStartDate}, ' 00:00:00') AND CONCAT(#{srchEndDate}, ' 23:59:59')
</if>
</sql>
<!-- 업무 사용자 목록 건수 조회 -->
<select id="selectBOJobUserTotCnt"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType = "java.lang.Integer">
SELECT
COUNT(1)
FROM
GC_MANAGER JOBUSER
<include refid = "selectBOJobUserListInqireWhere"/>
</select>
<!-- 업무 사용자 목록 조회 -->
<select id="selectBOJobUserList"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType = "dataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT
MNGR_INNB,
MNGR_NM,
PARTNM,
MNGR_ID,
CAST(AES_DECRYPT(UNHEX(EMAIL) , #{secretKey}) AS CHAR(50)) AS EMAIL,
CAST(AES_DECRYPT(UNHEX(TELNB) , #{secretKey}) AS CHAR(50)) AS TELNB,
CAST(AES_DECRYPT(UNHEX(MBTLNB) , #{secretKey}) AS CHAR(50)) AS MBTLNB,
MNGR_DV,
FN_GET_COMMCODE_NAME('MNGR_DV', MNGR_DV) AS MNGR_DV_NM,
MBLPHON_CRTFC_AT,
LMTT_IP,
DATE_FORMAT(LAST_CONECT_DT, '%Y-%m-%d %H:%i:%s') AS LAST_CONECT_DT,
MNGR_STTUS_CD
FROM
GC_MANAGER
<include refid = "selectBOJobUserListInqireWhere"/>
ORDER BY
LAST_CONECT_DT DESC
) TB
WHERE
(@ROWNUM:=0)=0
) PV
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 업무사용자 등록 -->
<insert id="insertBOJobUser" parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO">
<selectKey order="BEFORE" keyProperty="mngrInnb" resultType="java.math.BigInteger">
<![CDATA[
SELECT IFNULL(MAX(MNGR_INNB), 0)+1
FROM GC_MANAGER
]]>
</selectKey>
INSERT INTO GC_MANAGER (
MNGR_INNB,
MNGR_NM,
MNGR_ID,
PASSWORD,
PARTNM,
EMAIL,
TELNB,
MBTLNB,
MNGR_DV,
LAST_CONECT_DT,
<if test="lmttIp != null and lmttIp != ''">
LMTT_IP,
</if>
MBLPHON_CRTFC_AT,
MNGR_STTUS_CD,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES (
#{mngrInnb},
#{mngrNm},
#{mngrId},
#{password},
#{partnm},
HEX(AES_ENCRYPT(#{email}, #{secretKey})),
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(telnb)">
HEX(AES_ENCRYPT(#{telnb}, #{secretKey})),
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(telnb)">
'',
</if>
HEX(AES_ENCRYPT(#{mbtlnb}, #{secretKey})),
#{mngrDv},
NOW(),
<if test="lmttIp != null and lmttIp != ''">
#{lmttIp},
</if>
#{mblphonCrtfcAt},
'01',
#{regusr},
NOW(),
#{regusr},
NOW()
)
</insert>
<!-- 로그 목록 조회 -->
<select id="selectBOLogVOList"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType = "com.wb.domainserver.domain.admin.user.mngr.vo.LogVO">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM,
MPL.*
FROM (
SELECT
UPDT_RCODE_INNB,
MNGR_INNB,
CONECT_IP,
PROCS_CD,
FN_GET_COMMCODE_NAME('CGN041', PROCS_CD) AS PROCS_CD_NM,
PROCS_CN,
RM,
REGUSR,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DE
FROM
GC_MANAGER_PROCS_LOG
WHERE
MNGR_INNB = #{mngrInnb}
ORDER BY
REGIST_DT DESC
) MPL
WHERE
(@ROWNUM:=0)=0
) PV
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 업무사용자 상세조회 -->
<select id="selectBOJobUserDetail"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType = "dataMap">
SELECT
MNGR_NM,
MNGR_ID,
PARTNM,
CAST(AES_DECRYPT(UNHEX(EMAIL) , #{secretKey}) AS CHAR(50)) AS EMAIL,
CAST(AES_DECRYPT(UNHEX(TELNB) , #{secretKey}) AS CHAR(50)) AS TELNB,
CAST(AES_DECRYPT(UNHEX(MBTLNB) , #{secretKey}) AS CHAR(50)) AS MBTLNB,
MNGR_DV,
LMTT_IP,
MBLPHON_CRTFC_AT,
DATE_FORMAT(LAST_CONECT_DT, '%Y-%m-%d %H:%i:%s') AS LAST_CONECT_DT,
MNGR_INNB,
UPDUSR,
MNGR_STTUS_CD
FROM
GC_MANAGER
WHERE
MNGR_INNB = #{mngrInnb}
</select>
<!-- 업무사용자 id 중복확인 -->
<select id="selectBOJobUserByMngrId" parameterType = "String" resultType = "Integer">
SELECT
COUNT(1)
FROM
GC_MANAGER
WHERE
MNGR_ID = #{mngrId}
</select>
<!-- 업무사용자 기록history where절 -->
<sql id="selectHistoryWhere">
WHERE
GMCL.MNGR_INNB = #{mngrInnb}
<if test="srchStartDate != null and srchStartDate != '' and srchEndDate != null and srchEndDate != ''">
AND
GMCL.CONECT_DT BETWEEN CONCAT(#{srchStartDate}, ' 00:00:00') AND CONCAT(#{srchEndDate}, ' 23:59:59')
</if>
</sql>
<!-- 업무사용자 활동log where절 -->
<sql id="selectLogWhere">
WHERE
GMPL.MNGR_INNB = #{mngrInnb}
<if test="srchStartDate != null and srchStartDate != '' and srchEndDate != null and srchEndDate != ''">
AND
GMPL.REGIST_DT BETWEEN CONCAT(#{srchStartDate}, ' 00:00:00') AND CONCAT(#{srchEndDate}, ' 23:59:59')
</if>
</sql>
<!-- 업무사용자 접속 내역목록 조회 -->
<select id="selectBOJobUserConnHistTotCnt"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType = "java.lang.Integer">
SELECT
COUNT(1)
FROM
GC_MANAGER_CONECT_LOG GMCL
<include refid = "selectHistoryWhere"/>
</select>
<select id="selectBOJobUserConnHistList"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType = "dataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM,
TB.*
FROM (
SELECT
GMCL.CONECT_RCORD_SNB,
GMCL.MNGR_INNB,
JOBUSER.MNGR_NM,
GMCL.CONECT_IP,
GMCL.CONECT_BRWSR,
DATE_FORMAT(GMCL.CONECT_DT, '%Y-%m-%d %H:%i:%s') AS CONECT_DT
FROM GC_MANAGER_CONECT_LOG GMCL
LEFT JOIN
GC_MANAGER JOBUSER
ON JOBUSER.MNGR_INNB = GMCL.MNGR_INNB
<include refid = "selectHistoryWhere"/>
ORDER BY GMCL.CONECT_DT DESC
) TB
WHERE
(@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 업무사용자 처리 내역목록 조회 -->
<select id="selectBOJobUserLogTotCnt"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO" resultType = "java.lang.Integer">
SELECT
COUNT(1)
FROM
GC_MANAGER_PROCS_LOG GMPL
<include refid = "selectLogWhere"/>
</select>
<!-- 업무사용자 처리 내역목록 수정폼 -->
<select id="selectBOJobUserLogTotUpdCnt"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO" resultType = "java.lang.Integer">
SELECT
COUNT(1)
FROM
GC_MANAGER_PROCS_LOG GMPL
WHERE
GMPL.MNGR_INNB = #{mngrInnb}
</select>
<!-- 로그 목록 조회 -->
<select id="selectBOLogVOUpdList"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType = "com.wb.domainserver.domain.admin.user.mngr.vo.LogVO">
SELECT
UPDT_RCODE_INNB,
MNGR_INNB,
CONECT_IP,
PROCS_CD,
FN_GET_COMMCODE_NAME('MNGR_PROCS_CD', PROCS_CD) AS PROCS_CD_NM,
PROCS_CN,
RM,
REGUSR,
DATE_FORMAT(REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DE
FROM
GC_MANAGER_PROCS_LOG
WHERE
MNGR_INNB = #{mngrInnb}
ORDER BY
REGIST_DT DESC
</select>
<!-- 로그목록 조회 -->
<select id="selectBOJobUserLogList"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO" resultType = "dataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM,
TB.*
FROM (
SELECT
GMPL.UPDT_RCODE_INNB,
GMPL.MNGR_INNB,
JOBUSER.MNGR_NM,
GMPL.CONECT_IP,
GMPL.PROCS_CD,
GMPL.PROCS_CN,
FN_GET_COMMCODE_NAME('CGN041', GMPL.PROCS_CD) AS PROCS_CD_NM,
GMPL.RM,
GMPL.REGUSR,
DATE_FORMAT(GMPL.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DE
FROM GC_MANAGER_PROCS_LOG GMPL
LEFT JOIN GC_MANAGER JOBUSER ON JOBUSER.MNGR_INNB = GMPL.MNGR_INNB
<include refid = "selectLogWhere"/>
ORDER BY GMPL.REGIST_DT DESC
) TB
WHERE
(@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 업무사용자 비밀번호 조회 -->
<select id="selectBOJobUserPasswordInqire"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType="String">
SELECT PASSWORD
FROM GC_MANAGER
WHERE MNGR_INNB = #{mngrInnb}
</select>
<!-- 업무사용자 비밀번호 초기화 -->
<update id="updateBOJobUserPswdInitl"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO">
UPDATE GC_MANAGER
SET
PASSWORD = #{password},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE MNGR_INNB = #{mngrInnb}
</update>
<!-- 업무사용자 비밀번호 등록 -->
<update id="updateBOJobUserPw" parameterType="com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO">
UPDATE GC_MANAGER
SET PASSWORD = #{password},
UPDUSR = #{regusr},
UPDT_DT = NOW()
WHERE MNGR_INNB = #{mngrInnb}
</update>
<!-- 업무사용자 접속권한 비활성 -->
<update id="updateBOJobUserActvty"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO">
UPDATE GC_MANAGER
SET
MNGR_STTUS_CD = '01',
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE MNGR_INNB = #{mngrInnb}
</update>
<!-- 업무사용자 접속권한 비활성 -->
<update id="updateBOJobUserInactvty"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO">
UPDATE GC_MANAGER
SET
MNGR_STTUS_CD = '02',
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE MNGR_INNB = #{mngrInnb}
</update>
<!-- 업무사용자 수정 -->
<update id="updateBOJobUserUpdt">
UPDATE GC_MANAGER
SET
MNGR_NM = #{mngrNm},
PARTNM = #{partnm},
EMAIL = HEX(AES_ENCRYPT(#{email}, #{secretKey})),
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(telnb)">
TELNB = HEX(AES_ENCRYPT(#{telnb}, #{secretKey})),
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(telnb)">
TELNB = '',
</if>
MBTLNB = HEX(AES_ENCRYPT(#{mbtlnb}, #{secretKey})),
MNGR_DV = #{mngrDv},
<choose>
<when test="lmttIp != null and lmttIp != ''">
LMTT_IP = #{lmttIp},
</when>
<otherwise>
LMTT_IP = NULL,
</otherwise>
</choose>
MBLPHON_CRTFC_AT = #{mblphonCrtfcAt},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE MNGR_INNB = #{mngrInnb}
</update>
<!-- 업무사용자 퇴사처리 -->
<update id="updateBOJobUserResign"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO">
UPDATE GC_MANAGER
SET
MNGR_NM = #{mngrNm},
EMAIL = NULL,
PASSWORD = NULL,
TELNB = NULL,
MBTLNB = NULL,
MBLPHON_CRTFC_AT= 'N',
MNGR_STTUS_CD = '03',
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE MNGR_INNB = #{mngrInnb}
</update>
<!-- 연관쇼핑몰 이름 리스트조회 -->
<select id="selectBOJabUserMallNmaeList" parameterType="String" resultType = "String">
SELECT
SOPMAL_NM
FROM
GC_MANAGER_MALL MMGRMALL
LEFT JOIN
GC_SHOP MALL
ON MMGRMALL.SOPMAL_CD = MALL.SOPMAL_CD
WHERE
MMGRMALL.MNGR_INNB = #{mngrInnb}
</select>
<!-- 연관쇼핑몰 이름 리스트조회 -->
<select id="selectBOJobUserMallTotCnt" parameterType="String" resultType = "Integer">
SELECT
COUNT(1)
FROM
GC_MANAGER_MALL MMGRMALL
LEFT JOIN GC_SHOP MALL ON MMGRMALL.SOPMAL_CD = MALL.SOPMAL_CD
WHERE
MMGRMALL.MNGR_INNB = #{mngrInnb}
</select>
<!-- 업무 사용자 목록 엑셀용 -->
<select id="selectBOJobUserExcelList"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType = "dataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT
MNGR_INNB,
MNGR_NM,
PARTNM,
MNGR_ID,
CAST(AES_DECRYPT(UNHEX(EMAIL) , #{secretKey}) AS CHAR(50)) AS EMAIL,
CAST(AES_DECRYPT(UNHEX(TELNB) , #{secretKey}) AS CHAR(50)) AS TELNB,
CAST(AES_DECRYPT(UNHEX(MBTLNB) , #{secretKey}) AS CHAR(50)) AS MBTLNB,
MNGR_DV,
FN_GET_COMMCODE_NAME('MNGR_DV', MNGR_DV) AS MNGR_DV_NM,
MBLPHON_CRTFC_AT,
LMTT_IP,
DATE_FORMAT(LAST_CONECT_DT, '%Y-%m-%d %H:%i:%s') AS LAST_CONECT_DT
FROM
GC_MANAGER
<include refid = "selectBOJobUserListInqireWhere"/>
ORDER BY
LAST_CONECT_DT DESC
) TB
WHERE
(@ROWNUM:=0)=0
) PV
</select>
<!-- 인증테이블이 저장 -->
<insert id = "saveAuthentication"
parameterType="Map">
INSERT INTO OAUTH2_AUTHORIZATION_CONSENT (
REGISTERED_CLIENT_ID,
PRINCIPAL_NAME,
AUTHORITIES
)
VALUES (
'0d498299-3ab0-40d7-a8f4-70b3edb6add0',
#{principalName},
'SCOPE_openid,SCOPE_message.read,SCOPE_message.write,SCOPE_profile'
)
</insert>
<!-- 권한테이블에 저장 -->
<insert id = "saveAuthority"
parameterType="Map">
INSERT INTO AUTHORITY
(
NAME,
USER,
CODE
)
VALUES
(
#{name},
#{user},
'MM'
)
</insert>
<select id="selectBOJobUserCrtfcInfo"
parameterType = "com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO"
resultType = "dataMap">
SELECT LMTT_IP,
MBLPHON_CRTFC_AT,
MNGR_NM,
CAST(AES_DECRYPT(UNHEX(MBTLNB) , #{secretKey}) AS CHAR(50)) AS MBTLNB
FROM GC_MANAGER
WHERE MNGR_ID = #{mngrId}
</select>
</mapper>

View File

@@ -0,0 +1,21 @@
<?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.wb.domainserver.domain.admin.user.mngr.mapper.BOMaMngrMapper">
<!-- 관리자구분 조회 -->
<select id="selectBOMngrDvList" resultType="DataMap">
SELECT
MNGR_DV,
FN_GET_COMMCODE_NAME('MNGR_DV', MNGR_DV) AS MNGR_DV_NM
FROM
GC_MANAGER
WHERE
1=1
AND
MNGR_DV IS NOT NULL
GROUP BY
MNGR_DV
</select>
</mapper>

View File

@@ -0,0 +1,210 @@
<?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.wb.domainserver.domain.extra.ntcn.agree.mapper.BONmbrAgreeMapper">
<!--1. SEND TO 정보 조회-->
<select id = "selectNmbrInfoFromSendTo" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO" resultType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO">
SELECT
SMS_TO_INNB,
SOPMAL_CD,
RECPTN_NB,
CAST(AES_DECRYPT(UNHEX(RECPTN_NB), #{secretKey}) AS CHAR(50)) AS MBTLNB,
SMS_INNB,
FN_GET_SOPMAL_NAME(SOPMAL_CD) AS BRAND,
#{registIp} AS REGIST_IP,
#{secretKey} AS SECRET_KEY,
NOW() AS SYS_AGRE_DT,
DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') AS AGRE_DT,
CSTMR_NM AS NM
FROM GC_SEND_TO
WHERE SMS_TO_INNB = #{smsToInnb}
</select>
<!--2. 비회원 수신 동의 존재 여부 체크-->
<select id="selectBONmbrMarketingAgree" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO" resultType="Integer">
SELECT COUNT(1)
FROM GC_NMBR_AGREE
WHERE SOPMAL_CD = #{sopmalCd}
AND MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb}, '-', ''), #{secretKey}))
</select>
<!--3.정보 없으면(send_to 사용)-->
<insert id = "insertBONmbrMarketingAgree" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO">
INSERT INTO GC_NMBR_AGREE
(SOPMAL_CD,
MBTLNB,
AGREE_DV_CD,
NM,
MEMO,
LOG,
SMS_SEND_DT,
REGIST_DT,
UPDT_DT
)
SELECT SOPMAL_CD,
RECPTN_NB,
'01',
CSTMR_NM,
NULL,
CONCAT('[',#{agreDt},']', #{registIp} '(send:',#{smsToInnb},')'),
SNDNG_DT,
#{sysAgreDt},
#{sysAgreDt}
FROM GC_SEND_TO
WHERE SMS_TO_INNB = #{smsToInnb}
</insert>
<!--정보 없으면 (api)-->
<insert id ="insertBONmbrMarketingAgreeApi" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO">
INSERT INTO GC_NMBR_AGREE
(SOPMAL_CD,
MBTLNB,
AGREE_DV_CD,
NM,
ADRES,
MEMO,
LOG,
SMS_SEND_DT,
REGIST_DT,
UPDT_DT
)
VALUES
(#{sopmalCd},
HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey})),
'02',
#{nm},
#{adres},
NULL,
CONCAT('[',DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'),']', #{registIp} '(send:'')'),
NULL,
NOW(),
NOW()
)
</insert>
<!--정보 있으면-->
<update id = "updateBONmbrMarketingAgree" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO">
UPDATE GC_NMBR_AGREE
SET UPDT_DT = <choose><when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sysAgreDt)">#{sysAgreDt}</when><otherwise>NOW()</otherwise></choose>,
LOG = CONCAT(LOG,#{registIp}<choose><when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(smsToInnb)">,'[',#{agreDt},']','send:',#{smsToInnb}</when><otherwise>,DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')</otherwise></choose>)
WHERE SOPMAL_CD = #{sopmalCd}
AND MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))
</update>
<!--비회원 수신 동의 로그 등록-->
<insert id = "insertBONmbrMarketingAgreeLog" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO">
<selectKey order="BEFORE" keyProperty="nmbrAgreeLogInnb" resultType="String">
SELECT IFNULL(MAX(NMBR_AGREE_LOG_INNB), 0)+1
FROM GC_NMBR_AGREE_LOG
</selectKey>
INSERT INTO GC_NMBR_AGREE_LOG
(NMBR_AGREE_LOG_INNB,
SOPMAL_CD,
MBTLNB,
AGREE_DV_CD,
NM,
ADRES,
MEMO,
LOG_CHNG_DV_CD,
LOG,
SMS_SEND_DT,
REGIST_DT,
REGIST_IP)
SELECT #{nmbrAgreeLogInnb},
SOPMAL_CD,
MBTLNB,
AGREE_DV_CD,
NM,
ADRES,
MEMO,
#{logChngDvCd},
LOG,
SMS_SEND_DT,
NOW(),
#{registIp}
FROM GC_NMBR_AGREE
WHERE MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))
AND SOPMAL_CD = #{sopmalCd}
</insert>
<!--SEND TO 상태 변경-->
<update id="updateSentToSttus" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO">
UPDATE GC_SEND_TO
SET AGRE_STTUS = 'Y',
AGRE_DT = NOW()
WHERE 1=1
AND SMS_TO_INNB = #{smsToInnb}
AND AGRE_STTUS != 'Y'
</update>
<!--SEND 수량 변경-->
<update id="updateSendCnt" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO">
UPDATE GC_SEND GNS , (SELECT COUNT(1) AS AGREE_CNT FROM GC_SEND_TO WHERE SMS_INNB = #{smsInnb} AND AGRE_STTUS = 'Y') B
SET GNS.AGRE_CNT = B.AGREE_CNT
WHERE GNS.SMS_INNB = #{smsInnb}
</update>
<!-- 비회원 수신 동의 삭제 -->
<delete id="deleteBONmbrMarketingAgree" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO">
DELETE FROM GC_NMBR_AGREE
WHERE MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))
AND SOPMAL_CD = #{sopmalCd}
</delete>
<!--POS 가입 회원(SEND TO) 정보 조회-->
<select id = "selectBOPosJoinMbrInfo" parameterType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO" resultType="com.wb.domainserver.domain.extra.ntcn.agree.vo.BONmbrAgreeVO">
SELECT CAST(AES_DECRYPT(UNHEX(RECPTN_NB) , #{secretKey}) AS CHAR(50)) AS MBTLNB,
CSTMR_NM AS NM,
REPLACE(JSON_EXTRACT(SUBST_DATA, '$.sex'), '"', '') AS SEX ,
REPLACE(JSON_EXTRACT(SUBST_DATA, '$.birthYear'), '"', '') AS BIRTH_YEAR,
REPLACE(JSON_EXTRACT(SUBST_DATA, '$.birthMonth'), '"', '') AS BIRTH_MONTH
FROM GC_SEND_TO
WHERE SMS_TO_INNB = #{smsToInnb}
</select>
<!--관리자 POS 가입 회원(SEND TO) Url 조회 -->
<select id="selectBOPosJoinMbrUrl" parameterType="com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO" resultType="dataMap">
SELECT *
FROM (
SELECT TB.*
, CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
FROM (
SELECT
GST.CSTMR_NM AS MBR_NM
,REPLACE(CONCAT(JSON_EXTRACT(GST.SUBST_DATA, '$.mbrjoin_short_url'), '?storeCode=',JSON_EXTRACT(GST.SUBST_DATA, '$.storeCode'), '&amp;code=', GST.CODE,''), '"','') AS MBR_JOIN_URL
,FN_GET_COMMCODE_NAME('CHR_STTUS',GST.STTUS) AS STTUS
,DATE_FORMAT(GS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT
FROM GC_SEND GS
INNER JOIN GC_SEND_TO GST
ON GS.SOPMAL_CD = GST.SOPMAL_CD
AND GS.SMS_INNB = GST.SMS_INNB
WHERE 1=1
<include refid="BOPosJoinMbrUrlWhere"/>
) TB
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!--관리자 POS 가입 회원(SEND TO) Url 갯수 조회 -->
<select id="selectBOPosJoinMbrUrlCnt" parameterType="com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO" resultType="java.lang.Integer">
SELECT
COUNT(*)
FROM GC_SEND GS
INNER JOIN GC_SEND_TO GST
ON GS.SOPMAL_CD = GST.SOPMAL_CD
AND GS.SMS_INNB = GST.SMS_INNB
WHERE 1=1
<include refid="BOPosJoinMbrUrlWhere"/>
</select>
<!--관리자 POS 가입 회원(SEND TO) Url 조건 -->
<sql id="BOPosJoinMbrUrlWhere">
AND GS.SOPMAL_CD = #{sopmalCd}
AND GST.CSTMR_NM = REPLACE(#{mbrNm}, ' ','')
AND GST.RECPTN_NB = HEX(AES_ENCRYPT(REPLACE(#{telnb}, '-',''), #{secretKey}))
AND GST.SEND_TYPE_CD = 'POS'
AND GST.CODE <![CDATA[<>]]> ''
ORDER BY GST.SMS_TO_INNB DESC
</sql>
</mapper>

View File

@@ -0,0 +1,117 @@
<?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.wb.domainserver.domain.extra.ntcn.smsDeny.mapper.BOSmsDenyMapper">
<!--수신거부 조회-->
<select id = "selectBOSmsDenyCnt" parameterType="com.wb.domainserver.domain.extra.ntcn.smsDeny.vo.BOSmsDenyVO">
SELECT COUNT(1)
FROM GC_SMS_DENY
WHERE SOPMAL_CD = #{sopmalCd}
AND MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))
</select>
<!--수신거부 등록-->
<insert id="insertBOSmsDeny" parameterType="com.wb.domainserver.domain.extra.ntcn.smsDeny.vo.BOSmsDenyVO">
INSERT INTO GC_SMS_DENY
(
SOPMAL_CD,
MBTLNB,
REJECT_TELNB,
MEMO,
REGUSR,
REGIST_DT
)
VALUES
(
#{sopmalCd},
HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey})),
REPLACE(#{rejectTelnb},'-',''),
#{memo, jdbcType=VARCHAR},
0,
NOW()
) ON DUPLICATE KEY UPDATE
REGIST_DT = SYSDATE()
</insert>
<!--수신거부 해제-->
<delete id="deleteBOSmsDeny">
DELETE FROM GC_SMS_DENY
WHERE 1=1
AND MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))
AND SOPMAL_CD = #{sopmalCd}
</delete>
<!--수신거부 로그 등록-->
<insert id="insertBOSmsDenyLog">
<selectKey order="BEFORE" keyProperty="smsDenyLogInnb" resultType="String">
SELECT IFNULL(MAX(SMS_DENY_LOG_INNB), 0)+1
FROM GC_SMS_DENY_LOG
</selectKey>
INSERT INTO GC_SMS_DENY_LOG
(SMS_DENY_LOG_INNB,
SOPMAL_CD,
MBTLNB,
REJECT_TELNB,
MEMO,
LOG_CHNG_DV_CD,
REGUSR,
REGIST_DT
)
SELECT
#{smsDenyLogInnb},
SOPMAL_CD,
MBTLNB,
REJECT_TELNB,
MEMO,
#{logChngDvCd},
0,
NOW()
FROM GC_SMS_DENY
WHERE 1=1
AND MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))
AND SOPMAL_CD = #{sopmalCd}
</insert>
<!--회원 광고수신동의 거부 혹은 동의 수정-->
<update id = "updateBOSmsDenyMbrMarketingAgree">
UPDATE GC_MARKETING_AGREE GMA
JOIN (SELECT MBR_INNB, MBR_DV_CD FROM GC_MEMBER WHERE MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))) AS GM
ON GMA.MBR_INNB = GM.MBR_INNB
AND GMA.MBR_DV_CD = GM.MBR_DV_CD
SET
GMA.MARKT_RECPTN_AGRE_AT = #{marktRecptnAgreAt},
GMA.SMS_RECPTN_AT = #{marktRecptnAgreAt},
GMA.EMAIL_RECPTN_AT = #{marktRecptnAgreAt}
WHERE GMA.SOPMAL_CD = #{sopmalCd}
</update>
<!--회원 광고수신동의 로그 등록-->
<insert id = "insertBOSmsDenyMbrMarketingAgree">
INSERT INTO GC_MARKETING_AGREE_LOG
(MARKT_AGREE_INNB,
MBR_INNB,
MBR_DV_CD,
SOPMAL_CD,
MARKT_RECPTN_AGRE_AT,
MARKT_RECPTN_AGRE_UPDT_DT,
REGUSR,
REGIST_DT)
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS MARKT_AGREE_INNB ,
MA.MBR_INNB,
MA.MBR_DV_CD,
MA.SOPMAL_CD,
MA.MARKT_RECPTN_AGRE_AT,
MA.MARKT_RECPTN_AGRE_UPDT_DT,
0,
NOW()
FROM
GC_MARKETING_AGREE MA
INNER JOIN GC_MEMBER GM
ON GM.MBR_INNB = MA.MBR_INNB
AND GM.MBR_DV_CD = MA.MBR_DV_CD
WHERE (@ROWNUM:=(SELECT IFNULL(MAX(S.MARKT_AGREE_INNB), 0) FROM GC_MARKETING_AGREE_LOG S)) >= 0
AND MA.SOPMAL_CD = #{sopmalCd}
AND GM.MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))
</insert>
</mapper>

View File

@@ -0,0 +1,41 @@
<?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.wb.domainserver.domain.gcone.alarm.mapper.BOAlarmMapper">
<select id="selectAnswerCount">
SELECT
'게시판' as menuName,
T1.BBS_ID,
COUNT(T1.BBSCTT_INNB) AS cnt
FROM GC_BOARDDATA T1
LEFT JOIN GC_BOARDDATA T2 ON (T2.SOPMAL_CD = T1.SOPMAL_CD AND T2.BBS_ID = T1.BBS_ID AND T2.PARNTS_BBSCTT_INNB = T1.BBSCTT_INNB)
WHERE T1.SOPMAL_CD = #{sopmalCd}
AND T1.BBS_ID IN ('goods_qna','propose_bbs')
AND T1.REGIST_DT >= DATE_ADD(NOW(),INTERVAL - 30 DAY)
AND T1.USE_AT = 'Y'
AND T1.EXPSR_AT = 'Y'
AND T1.PARNTS_BBSCTT_INNB IS NULL
AND T2.BBSCTT_INNB IS NULL
GROUP BY T1.BBS_ID
</select>
<select id = "selectRefundCount">
SELECT
'주문' as menuName,
COUNT(ORDR_INNB) AS cnt
FROM GC_ORDER_REFUND
WHERE SOPMAL_CD = #{sopmalCd}
AND REFUND_REQST_DT >= DATE_ADD(NOW(),INTERVAL - 30 DAY)
AND (REFUND_PROCS_STTUS_CD = '01' OR RETURN_PROCS_STTUS_CD = '01')
AND USE_AT = 'Y'
</select>
</mapper>

View File

@@ -0,0 +1,208 @@
<?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.wb.domainserver.domain.gcone.analytics.mapper.BOAnalyticsMapper">
<!-- ERP 제상품 조회 WHERE 절 -->
<sql id="selectErpGoodsListWhere">
<![CDATA[
WHERE 1=1
AND analysis_order_history_innb BETWEEN #{firstIndex} AND #{lastIndex}
]]>
<if test="brandCd != null and brandCd != ''">
<![CDATA[
AND sopmal_cd = #{brandCd}
]]>
</if>
<if test="barcode != null and barcode != ''">
<![CDATA[
AND barcode = #{barcode}
]]>
</if>
<if test="goodsName != null and goodsName != ''">
<![CDATA[
AND goods_nm LIKE CONCAT('%', #{goodsName}, '%')
]]>
</if>
</sql>
<sql id="selectErpSetGoodsListWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="brandCd != null and brandCd != ''">
<![CDATA[
AND sopmal_cd = #{brandCd}
]]>
</if>
<if test="setCode != null and setCode != ''">
<![CDATA[
AND set_code = #{setCode}
]]>
</if>
<if test="barcode != null and barcode != ''">
<![CDATA[
AND barcode = #{barcode}
]]>
</if>
<if test="setGoodsName != null and setGoodsName != ''">
<![CDATA[
AND set_goods_nm LIKE CONCAT('%', #{setGoodsName}, '%')
]]>
</if>
<if test="goodsName != null and goodsName != ''">
<![CDATA[
AND goods_nm LIKE CONCAT('%', #{goodsName}, '%')
]]>
</if>
</sql>
<sql id="selectOrderHistoryListWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="brandCd != null and brandCd != ''">
<![CDATA[
AND sopmal_cd = #{brandCd}
]]>
</if>
</sql>
<select id="selectErpGoodsList"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER(ORDER BY analysis_erp_goods_innb DESC) AS rnum,
analysis_erp_goods_innb as analysisErpGoodsInnb,
barcode as barcode,
sopmal_cd as sopmalCd,
goods_nm as goodsNm,
goods_qy as goodsQy,
goods_ea as goodsEa,
goods_same_code as goodsSameCode,
goods_manager as goodsManager
FROM
GC_ANALYSIS_ERP_GOODS
]]>
<include refid = "selectErpGoodsListWhere"/>
<![CDATA[
ORDER BY analysis_erp_goods_innb DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<select id="selectErpGoodsListCnt"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO">
<![CDATA[
SELECT
count(*)
FROM
GC_ANALYSIS_ERP_GOODS
]]>
<include refid = "selectErpGoodsListWhere"/>
</select>
<select id="selectErpSetGoodsList"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER(ORDER BY analysis_erp_set_goods_innb DESC) AS rnum,
set_code as setCode,
barcode as barcode,
sopmal_cd as sopmalCd,
barcode_qy as barcodeQy,
goods_nm as goodsNm,
set_goods_nm as setGoodsNm,
gift_yn as giftYn
FROM
GC_ANALYSIS_ERP_SET_GOODS
]]>
<include refid = "selectErpSetGoodsListWhere"/>
<![CDATA[
ORDER BY analysis_erp_set_goods_innb DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<select id="selectErpSetGoodsListCnt"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO">
<![CDATA[
SELECT
count(*)
FROM
GC_ANALYSIS_ERP_SET_GOODS
]]>
<include refid = "selectErpSetGoodsListWhere"/>
</select>
<select id="selectSopmalCd">
<![CDATA[
SELECT
SOPMAL_CD as sopmalCd ,SOPMAL_NM as sopmalNm
FROM GC_SHOP
]]>
</select>
<update id="updateErpGoods">
<foreach collection="jsonData" item="item" index="index" separator=";">
UPDATE GC_ANALYSIS_ERP_GOODS SET
goods_ea = #{item.goodsEa},
goods_same_code = #{item.goodsSameCode},
goods_manager = #{item.goodsManager}
WHERE analysis_erp_goods_innb = #{item.id}
</foreach>
</update>
<select id="selectOrderHistoryList"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
analysis_order_history_innb as rnum,
SHOP_SET_CD as shopSetCd,
barcode as barcode,
sopmal_cd as sopmalCd,
barcode_qy as barcodeQy,
goods_nm as goodsNm,
ordr_innb as ordrInnb,
rl_setle_amt as rlSetleAmt,
CASE WHEN ordr_sttus_cd = '25' THEN '결제확인'
WHEN ordr_sttus_cd = '65' THEN '배송중'
WHEN ordr_sttus_cd = '75' THEN '배송완료'
WHEN ordr_sttus_cd = '85' THEN '취소'
ELSE '주문상태 확인 필요' END
as ordrSttusCd,
goods_qy as goods_qy,
payment_dt as paymentDt,
sopmal_dv as sopmalDv
FROM
GC_ANALYSIS_ORDER_HISTORY
]]>
<include refid = "selectOrderHistoryListWhere"/>
<![CDATA[
ORDER BY analysis_order_history_innb
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<select id="selectOrderHistoryListCnt"
parameterType="com.wb.domainserver.domain.gcone.analytics.vo.BOAnanlyticsErpGoodsSrchVO">
<![CDATA[
SELECT
count(*)
FROM
GC_ANALYSIS_ORDER_HISTORY
]]>
<include refid = "selectOrderHistoryListWhere"/>
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,173 @@
<?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.wb.domainserver.domain.gcone.app.mapper.BOAppMapper">
<!-- 앱 실행시 디바이스 정보 등록 -->
<insert id="insertBOAppDeviceInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO"
useGeneratedKeys="true"
keyProperty="mbrDeviceInnb">
<![CDATA[
INSERT INTO GC_MEMBER_DEVICE_INFO (
SOPMAL_CD,
FCM_TOKEN,
PUSH_AGRE_AT,
PHAC_AGRE_AT,
DEVICE_ID,
DEVICE_OS_NM,
DEVICE_OS_VER,
DEVICE_APP_VER,
REGIST_DT,
UPDT_DT
) VALUES (
#{sopmalCd},
#{fcmToken},
#{pushAgreAt},
#{phacAgreAt},
#{deviceId},
#{deviceOsNm},
#{deviceOsVer},
#{deviceAppVer},
NOW(),
NOW()
)
]]>
</insert>
<!-- 앱 실행시 디바이스 정보 수정 -->
<update id="updateBOAppDeviceInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO">
<![CDATA[
UPDATE GC_MEMBER_DEVICE_INFO
SET FCM_TOKEN = #{fcmToken},
DEVICE_OS_NM = #{deviceOsNm},
DEVICE_OS_VER = #{deviceOsVer},
DEVICE_APP_VER = #{deviceAppVer},
UPDT_DT = NOW()
WHERE DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 앱 로그인시 회원-디바이스 정보 등록 -->
<insert id="insertBOAppMbrDvcInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO"
useGeneratedKeys="true"
keyProperty="mbrDeviceInnb">
<![CDATA[
INSERT INTO GC_MEMBER_DEVICE_INFO (
SOPMAL_CD,
MBR_INNB,
MBR_DV_CD,
MBR_ID,
FCM_TOKEN,
PUSH_AGRE_AT,
PHAC_AGRE_AT,
DEVICE_ID,
DEVICE_OS_NM,
DEVICE_OS_VER,
DEVICE_APP_VER,
REGIST_DT,
UPDT_DT
) VALUES (
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
#{mbrId},
#{fcmToken},
#{pushAgreAt},
#{phacAgreAt},
#{deviceId},
#{deviceOsNm},
#{deviceOsVer},
#{deviceAppVer},
NOW(),
NOW()
)
]]>
</insert>
<!-- 앱 로그인시 회원-디바이스 정보 수정 -->
<update id="updateBOAppMbrDvcInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO">
<![CDATA[
UPDATE GC_MEMBER_DEVICE_INFO
SET MBR_INNB = #{mbrInnb},
MBR_DV_CD = #{mbrDvCd},
MBR_ID = #{mbrId},
FCM_TOKEN = #{fcmToken},
DEVICE_OS_NM = #{deviceOsNm},
DEVICE_OS_VER = #{deviceOsVer},
DEVICE_APP_VER = #{deviceAppVer},
UPDT_DT = NOW()
WHERE DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 앱 알림동의 선택시 수정 -->
<update id="updateBOAppMbrDvcPushAgre"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO">
<![CDATA[
UPDATE GC_MEMBER_DEVICE_INFO
SET PUSH_AGRE_AT = #{pushAgreAt},
UPDT_DT = NOW()
WHERE DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 앱 신체활동접근동의 선택시 수정 -->
<update id="updateBOAppMbrDvcPhacAgre"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO">
<![CDATA[
UPDATE GC_MEMBER_DEVICE_INFO
SET PHAC_AGRE_AT = #{phacAgreAt},
UPDT_DT = NOW()
WHERE DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 디바이스 정보 조회 -->
<select id="selectBOAppMbrDvcInfo"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO"
resultType="dataMap">
<![CDATA[
SELECT gmdi.SOPMAL_CD,
gmdi.MBR_INNB,
gmdi.MBR_DV_CD,
gmdi.MBR_ID,
gmdi.FCM_TOKEN,
gmdi.PUSH_AGRE_AT,
gmdi.DEVICE_ID,
gmdi.DEVICE_OS_NM,
gmdi.DEVICE_OS_VER,
gmdi.DEVICE_APP_VER,
gmdi.REGIST_DT,
gmdi.UPDT_DT
FROM GC_MEMBER_DEVICE_INFO gmdi
LEFT JOIN GC_MEMBER gm ON gm.MBR_INNB = gmdi.MBR_INNB AND gm.MBR_DV_CD = gmdi.MBR_DV_CD
WHERE 1 = 1
AND gmdi.SOPMAL_CD = #{sopmalCd}
AND gmdi.MBR_INNB = #{mbrInnb}
AND gmdi.MBR_DV_CD = #{mbrDvCd}
AND gmdi.DEVICE_ID = #{deviceId}
]]>
</select>
<!-- 디바이스 정보 중복 조회 -->
<select id="selectBOAppMbrDvcDplct"
parameterType="com.wb.domainserver.domain.gcone.app.vo.BOAppMbrDvcVO"
resultType="Integer">
<![CDATA[
SELECT COUNT(*)
FROM GC_MEMBER_DEVICE_INFO
WHERE 1 = 1
AND DEVICE_ID = #{deviceId}
AND SOPMAL_CD = #{sopmalCd}
]]>
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,369 @@
<?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.wb.domainserver.domain.gcone.bbs.cm.mapper.BOCmMapper">
<!-- 댓글 목록 조회 -->
<select id = "selectBOBCmListCnt"
parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="Integer">
<![CDATA[
SELECT
COUNT(1)
FROM
GC_BOARDCOMMENT FBC
WHERE 1 = 1
AND FBC.DEPTH = 0
AND FBC.SOPMAL_CD = #{sopmalCd}
AND (FBC.USE_AT = 'Y' OR (FBC.USE_AT = 'N' && 0 < (SELECT
COUNT(FBC2.CM_INNB)
FROM
GC_BOARDCOMMENT FBC2
WHERE
1 = 1
AND FBC2.USE_AT = 'Y'
AND FBC2.DEPTH = 1
AND FBC2.PARNTS_CM_INNB = FBC.CM_INNB
AND FBC2.SOPMAL_CD = FBC.SOPMAL_CD
AND FBC2.BBSCTT_INNB = FBC.BBSCTT_INNB
LIMIT 1)))
AND FBC.BBSCTT_INNB = #{bbscttInnb}
]]>
</select>
<!-- 댓글 목록 조회 -->
<select id = "selectBOCmListInqire"
parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="DataMap">
<![CDATA[
SELECT FBC.CM_INNB
, FBC.BBSCTT_INNB
, FBC.PARNTS_CM_INNB
, FBC.SOPMAL_CD
, FBC.CN
, FBC.SECRET_BBSCTT_AT
, FBC.USE_AT
, FBC.REGUSR_DV_CD
, FBC.IP
, FBC.PASSWORD
, FBC.DEPTH
, FBC.REGUSR
, FBC.REGUSR_ID
, FBC.REGUSR_NM
, DATE_FORMAT(FBC.REGIST_DT, '%Y.%m.%d. %H:%i') REGIST_DT
, CONCAT(SUBSTRING(FBC.REGUSR_ID, 1, 4), '***') MASKING_REGUSR_ID
, CONCAT(SUBSTRING(FBC.REGUSR_NM, 1, 1), '*',
SUBSTRING(FBC.REGUSR_NM, CHAR_LENGTH(FBC.REGUSR_NM), 1)) MASKING_REGUSR_NM
, IFNULL(FBC.RECOMEND_CNT, 0) RECOMEND_CNT
, IFNULL(FBC.NONRECOMEND_CNT, 0) NONRECOMEND_CNT
, CASE
WHEN DATE_ADD(FBC.REGIST_DT, INTERVAL FBM.NEW_NTT_STDR_DE_CNT DAY) > SYSDATE() THEN 'Y'
ELSE 'N'
END NEW_AT
, FBM.WRTER_INDICT_TY_CD
, IFNULL(FBM.MNGR_NM, '관리자') AS MNGR_NM
, FMG.MBR_GRAD_NM
, GM.JOIN_MTH_CD
, GM.MBR_DV_CD
, GM.MBR_INNB
FROM GC_BOARDCOMMENT FBC
INNER JOIN GC_BOARDDATA FB
ON FBC.BBSCTT_INNB = FB.BBSCTT_INNB
AND FBC.SOPMAL_CD = FB.SOPMAL_CD
INNER JOIN GC_BOARDMANAGER FBM
ON FB.BBS_ID = FBM.BBS_ID
AND FBM.SOPMAL_CD = FBC.SOPMAL_CD
LEFT JOIN GC_MEMBER_GRAD_MAPPING FMGM
ON FBC.SOPMAL_CD = FMGM.SOPMAL_CD
AND FBC.REGUSR = FMGM.MBR_INNB
LEFT JOIN GC_MEMBER GM
ON GM.MBR_DV_CD = FMGM.MBR_DV_CD
AND GM.MBR_INNB = FMGM.MBR_INNB
LEFT JOIN GC_MEMBER_GRAD FMG
ON FMGM.MBR_GRAD_INNB = FMG.MBR_GRAD_INNB
AND FMG.SOPMAL_CD = FBC.SOPMAL_CD
WHERE 1=1
AND FBC.DEPTH = 0
AND (FBC.USE_AT = 'Y' OR (FBC.USE_AT = 'N' && 0 < (SELECT
COUNT(FBC2.CM_INNB)
FROM
GC_BOARDCOMMENT FBC2
WHERE
1 = 1
AND FBC2.USE_AT = 'Y'
AND FBC2.DEPTH = 1
AND FBC2.PARNTS_CM_INNB = FBC.CM_INNB
AND FBC2.SOPMAL_CD = FBC.SOPMAL_CD
AND FBC2.BBSCTT_INNB = FBC.BBSCTT_INNB
LIMIT 1)))
AND FBC.SOPMAL_CD = #{sopmalCd}
AND FBC.BBSCTT_INNB = #{bbscttInnb}
ORDER BY FBC.CM_INNB DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 대댓글 목록 조회 -->
<select id = "selectBOCmAnswListInqire"
parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="DataMap">
SELECT FBC.CM_INNB
,FBC.BBSCTT_INNB
,FBC.SOPMAL_CD
,FBC.CN
,DATE_FORMAT(FBC.REGIST_DT,'%Y-%m-%d')REGIST_DT
,CONCAT(SUBSTRING(FBC.REGUSR_ID, 1, 4), '***')MASKING_REGUSR_ID
,CONCAT(SUBSTRING(FBC.REGUSR_NM, 1, 1),'*',SUBSTRING(FBC.REGUSR_NM,CHAR_LENGTH(FBC.REGUSR_NM),1))MASKING_REGUSR_NM
,FBC.PARNTS_CM_INNB
,FBC.SECRET_BBSCTT_AT
,FBC.USE_AT
,FBC.REGUSR_DV_CD
,FBC.IP
,FBC.PASSWORD
,FBC.DEPTH
,FBC.REGUSR
,FBC.REGUSR_ID
,FBC.REGUSR_NM
,IFNULL(FBC.RECOMEND_CNT, 0) RECOMEND_CNT
,IFNULL(FBC.NONRECOMEND_CNT, 0) NONRECOMEND_CNT
,CASE
WHEN DATE_ADD(FBC.REGIST_DT, INTERVAL FBM.NEW_NTT_STDR_DE_CNT DAY) > SYSDATE() THEN 'Y'
ELSE 'N'
END NEW_AT
,FBM.WRTER_INDICT_TY_CD
,FBM.MNGR_NM
,FMG.MBR_GRAD_NM
,GM.JOIN_MTH_CD
,GM.MBR_DV_CD
,GM.MBR_INNB
FROM GC_BOARDCOMMENT FBC
INNER JOIN GC_BOARDDATA FB
ON FBC.BBSCTT_INNB = FB.BBSCTT_INNB
AND FBC.SOPMAL_CD = FB.SOPMAL_CD
INNER JOIN GC_BOARDMANAGER FBM
ON FB.BBS_ID = FBM.BBS_ID
AND FBM.SOPMAL_CD = FBC.SOPMAL_CD
LEFT JOIN GC_MEMBER_GRAD_MAPPING FMGM
ON FBC.SOPMAL_CD = FMGM.SOPMAL_CD
AND FBC.REGUSR = FMGM.MBR_INNB
LEFT JOIN GC_MEMBER GM
ON GM.MBR_DV_CD = FMGM.MBR_DV_CD
AND GM.MBR_INNB = FMGM.MBR_INNB
LEFT JOIN GC_MEMBER_GRAD FMG
ON FMGM.MBR_GRAD_INNB = FMG.MBR_GRAD_INNB
AND FMG.SOPMAL_CD = FBC.SOPMAL_CD
WHERE 1=1
AND FBC.DEPTH = 1
AND FBC.USE_AT = 'Y'
AND FBC.SOPMAL_CD = #{sopmalCd}
AND FBC.PARNTS_CM_INNB IN
<foreach collection="cmInnbArr" item="cmInnbArr" open="(" close=")" separator=",">
#{cmInnbArr}
</foreach>
AND FBC.BBSCTT_INNB = #{bbscttInnb}
</select>
<select id="selectBOCmWrter" parameterType="com.wb.domainserver.domain.gcone.bbs.gnrlbbsctt.vo.BOGnrlbbscttVO"
resultType="dataMap">
SELECT
CONCAT(SUBSTRING(BB.REGUSR_ID, 1, 3), REPEAT('*', CHAR_LENGTH(BB.REGUSR_ID) - 3))MNGR_REGUSR_ID,
BB.REGUSR_ID,
BB.REGUSR,
BB.MBR_GRAD_NM,
CONCAT(SUBSTRING(BB.REGUSR_NM, 1, 1), REPEAT('*', CHAR_LENGTH(BB.REGUSR_NM) - 2),SUBSTRING(BB.REGUSR_NM,CHAR_LENGTH(BB.REGUSR_NM),1))REGUSR_NM,
BB.WRTER_INDICT_TY_CD,
BB.MNGR_NM,
BB.REGUSR_DV_CD
FROM(SELECT
AA.*,
(SELECT
BB.MBR_GRAD_NM
FROM
(SELECT
FMG.MBR_GRAD_NM
FROM
GC_MEMBER_GRAD_MAPPING FMGMG
LEFT OUTER JOIN GC_MEMBER_GRAD FMG
on FMGMG.MBR_GRAD_INNB = FMG.MBR_GRAD_INNB
AND FMGMG.SOPMAL_CD = FMG.SOPMAL_CD
WHERE FMGMG.SOPMAL_CD= AA.SOPMAL_CD
AND FMGMG.MBR_INNB = AA.REGUSR)BB) AS MBR_GRAD_NM
FROM
(SELECT FBC.REGUSR_DV_CD
,FBC.REGUSR_NM
,FBC.REGUSR_ID
,FBC.REGUSR
,FBC.SOPMAL_CD
,FBC.DEPTH
,FBM.WRTER_INDICT_TY_CD
,IFNULL(FBM.MNGR_NM,'관리자')MNGR_NM
FROM
GC_BOARDCOMMENT FBC
INNER JOIN GC_BOARDDATA FB
ON FBC.SOPMAL_CD = FB.SOPMAL_CD
AND FBC.BBSCTT_INNB = FB.BBSCTT_INNB
INNER JOIN GC_BOARDMANAGER FBM
ON FB.SOPMAL_CD = FBM.SOPMAL_CD
AND FB.BBS_ID = FBM.BBS_ID
WHERE 1 = 1
AND FBC.CM_INNB = #{cmInnbInt}
AND FB.SOPMAL_CD = #{sopmalCd})AA
)BB
</select>
<!-- 게시글 상세 조회 가능 여부 판단 -->
<select id="selectBOCmRegusrCnfirm"
parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="dataMap">
SELECT
CASE
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '01'
<if test = "!@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(crudDv, 'R')"> /* 수정, 삭제일 경우 */
AND GB.REGUSR = #{mbrInnb}
</if> THEN 'YES' /* 회원이 쓴 글이고 작성자가 본인일 시 */
<if test = "!@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(crudDv, 'R')"> /* 회원이 쓴 글이고 작성자가 본인이 아닐 시 (수정, 삭제시) */
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '01' AND GB.REGUSR <![CDATA[<>]]> #{mbrInnb} AND 0 <![CDATA[<]]> #{mbrInnb} THEN 'OTHER'
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '01' AND 0 = #{mbrInnb} THEN 'LOGIN' /* 회원이 쓴 글이고 접속자가 비회원일 경우 로그인 유도 */
</if>
<choose>
<when test="!@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(crudDv, 'R')">
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '02' THEN 'PW' /* 관리자가 쓴 글 */
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '99' THEN 'PW' /* 비회원 수정, 삭제일 경우 */
</when>
<otherwise>
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '02' THEN 'YES' /* 관리자가 쓴 글 */
WHEN GB.SECRET_BBSCTT_AT = 'N' AND GB.REGUSR_DV_CD = '99' THEN 'YES' /* 비회원 읽기 일 경우 */
</otherwise>
</choose>
WHEN GB.SECRET_BBSCTT_AT = 'Y' AND GB.REGUSR_DV_CD <![CDATA[<>]]> '01' THEN 'PW' /* 작성자 구분이 회원이 아닐경우 비밀번호 입력 */
WHEN GB.SECRET_BBSCTT_AT = 'Y' AND GB.REGUSR_DV_CD = '01' AND GB.REGUSR = #{mbrInnb} THEN 'YES' /* 회원이 쓴 글이고 작성자가 본인인 경우 */
WHEN GB.SECRET_BBSCTT_AT = 'Y' AND GB.REGUSR_DV_CD = '01' AND GB.REGUSR <![CDATA[<>]]> #{mbrInnb} AND 0 <![CDATA[<]]> #{mbrInnb} THEN 'OTHER' /* 회원이 쓴 글이고 작성자가 본인이 아니고 현재 접속자가 회원인 경우 */
WHEN GB.SECRET_BBSCTT_AT = 'Y' AND GB.REGUSR_DV_CD = '01' AND 0 = #{mbrInnb} THEN 'LOGIN' /* 회원이 쓴 글이고 접속자가 비회원일 경우 로그인 유도 */
END MOVE_AT
FROM GC_BOARDCOMMENT GB
WHERE GB.BBSCTT_INNB = #{bbscttInnb}
AND GB.SOPMAL_CD = #{sopmalCd}
AND GB.CM_INNB = #{cmInnb}
</select>
<!-- 댓글 조회 -->
<select id="selectBOCmCn" parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="dataMap">
SELECT FBC.CN
,FBC.CM_INNB
,FBC.PASSWORD
,FBC.SECRET_BBSCTT_AT
,IFNULL(FBC.RECOMEND_CNT,0)RECOMEND_CNT
,IFNULL(FBC.NONRECOMEND_CNT,0)NONRECOMEND_CNT
,FBC.REGUSR_NM
FROM GC_BOARDCOMMENT FBC
WHERE FBC.BBSCTT_INNB = #{bbscttInnb}
AND FBC.SOPMAL_CD = #{sopmalCd}
AND FBC.CM_INNB = #{cmInnb}
</select>
<!-- 댓글 등록 -->
<insert id="insertBOCmRegist">
INSERT INTO GC_BOARDCOMMENT (
SOPMAL_CD,
BBSCTT_INNB,
PARNTS_CM_INNB,
REGUSR_DV_CD,
REGUSR_ID,
REGUSR_NM,
DEPTH,
PASSWORD,
CN,
SECRET_BBSCTT_AT,
INQIRE_CNT,
RECOMEND_CNT,
NONRECOMEND_CNT,
AGENT_ID,
IP,
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES (
#{sopmalCd},
#{bbscttInnb},
#{parntsCmInnb},
#{regusrDvCd},
#{regusrId},
#{regusrNm},
#{depth},
MD5(#{password}),
#{cn},
#{secretBbscttAt},
0,
0,
0,
#{agentId},
#{ip},
'Y',
#{regusr},
NOW(),
#{updusr},
NOW()
)
</insert>
<!-- 댓글 수정 -->
<update id="updateBOCmUpdt" parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO">
UPDATE GC_BOARDCOMMENT
SET CN = #{cn},
UPDUSR = #{updusr},
UPDT_DT = NOW(),
SECRET_BBSCTT_AT = #{secretBbscttAt}
WHERE CM_INNB = #{cmInnb}
AND BBSCTT_INNB = #{bbscttInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 댓글 논리삭제 -->
<update id="updateBOCmDel" parameterType="DataMap">
UPDATE GC_BOARDCOMMENT
SET USE_AT = #{useAt},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE BBSCTT_INNB = #{bbscttInnb}
AND SOPMAL_CD = #{sopmalCd}
AND CM_INNB = #{cmInnb}
</update>
<!-- 비밀번호 체크 -->
<select id = "selectBOComparPassword" parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO"
resultType="Integer">
SELECT COUNT(*)
FROM GC_BOARDCOMMENT FB
WHERE 1=1
AND FB.PASSWORD = MD5(#{password})
AND FB.CM_INNB = #{cmInnb}
AND FB.SOPMAL_CD = #{sopmalCd}
</select>
<!--추천 비추천 업데이트-->
<update id="updateBOCmRecomendUpdt" parameterType="com.wb.domainserver.domain.gcone.bbs.cm.vo.BOCmVO">
UPDATE GC_BOARDCOMMENT FBC, (
SELECT
IFNULL(MAX(RECOMEND_CNT), 0) + 1 AS RECOMEND_CNT
,IFNULL(MAX(NONRECOMEND_CNT), 0) + 1 AS NONRECOMEND_CNT
,BBSCTT_INNB
,SOPMAL_CD
,CM_INNB
FROM
GC_BOARDCOMMENT
WHERE
1 = 1
AND BBSCTT_INNB = #{bbscttInnb}
AND SOPMAL_CD = #{sopmalCd}
AND CM_INNB = #{cmInnb})FBC2
SET
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(recomendDv, 'recommend')">
FBC.RECOMEND_CNT = FBC2.RECOMEND_CNT
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(recomendDv, 'nonrecommend')">
FBC.NONRECOMEND_CNT = FBC2.NONRECOMEND_CNT
</if>
WHERE 1=1
AND FBC.BBSCTT_INNB = #{bbscttInnb}
AND FBC.SOPMAL_CD = #{sopmalCd}
AND FBC.CM_INNB = #{cmInnb}
</update>
</mapper>

View File

@@ -0,0 +1,348 @@
<?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.wb.domainserver.domain.gcone.bbs.cnslt.mapper.BOCnsltMapper">
<!-- 상담 목록 조회 WHERE 절 -->
<sql id="cnsltListInqireWhere">
WHERE 1=1
AND CNSLT.SOPMAL_CD = #{sopmalCd}
<!-- 검색어 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchKeyword)">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchKeywordDv, 'keywordName')">
AND MBR.MBR_NM LIKE CONCAT('%', #{srchKeyword}, '%')
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchKeywordDv, 'keywordId')">
AND MBR.MBR_ID LIKE CONCAT('%', #{srchKeyword}, '%')
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchKeywordDv, 'keywordPhone')">
AND CNSLT.TELNB = HEX(AES_ENCRYPT(REPLACE(#{srchKeyword},'-',''), #{secretKey}))
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchKeywordDv)">
AND (
MBR.MBR_NM LIKE CONCAT('%', #{srchKeyword}, '%')
OR MBR.MBR_ID LIKE CONCAT('%', #{srchKeyword}, '%')
OR CNSLT.TELNB = HEX(AES_ENCRYPT(REPLACE(#{srchKeyword},'-',''), #{secretKey}))
OR MBR.EMAIL LIKE CONCAT('%', #{srchKeyword}, '%')
)
</when>
</choose>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchMngrNm)">
AND CNSLT.MNGR_NM LIKE CONCAT('%', #{srchMngrNm}, '%')
</if>
<!-- 처리 상태 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchProcsSttusCd)">
AND CNSLT.PROCS_STTUS_CD IN
<foreach collection="srchProcsSttusCd" item="srchProcsSttusCd" open="(" close=")" separator=",">
#{srchProcsSttusCd}
</foreach>
</if>
<!-- 등록일 -->
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'cnstlDt')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
AND CNSLT.REGIST_DT <![CDATA[>=]]> #{srchStartDate} ' 00:00:00'
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
AND CNSLT.REGIST_DT <![CDATA[<=]]> #{srchEndDate} ' 23:59:59'
</if>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'procsDt')">
<![CDATA[
AND CNSLT.PROCS_DT IS NOT NULL
]]>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchEndDate)">
AND CNSLT.PROCS_DT BETWEEN #{srchStartDate} ' 00:00:00' AND SYSDATE()
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchStartDate)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
AND CNSLT.PROCS_DT <![CDATA[<]]> #{srchEndDate} ' 23:59:59'
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
AND CNSLT.PROCS_DT BETWEEN #{srchStartDate} ' 00:00:00' AND #{srchEndDate} ' 23:59:59'
</when>
</choose>
</when>
</choose>
<!-- 관련번호 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRelateNm)">
<choose>
<!-- 주문코드 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'relateOrdrnb')">
AND CNSLT.ORDR_INNB = #{srchRelateNm}
</when>
<!-- 출고코드 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'dlivyCd')">
AND CNSLT.DLIVY_CD_NB = #{srchRelateNm}
</when>
<!-- 환불코드 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'refndCd')">
AND CNSLT.REFUND_CD_NB = #{srchRelateNm}
</when>
<!-- 상품문의 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'relateGoodsInqry')">
AND CNSLT.GOODS_INQRY_BBSCTT_NB = #{srchRelateNm}
</when>
<!-- 컬럼추가후 '상품후기' 코드로 변경 -->
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchRelateDv, 'goodsRvwBbscttNb')">
AND CNSLT.GOODS_RVW_BBSCTT_NB = #{srchRelateNm}
</when>
</choose>
</if>
<!-- 상담내용 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchCnsltCn)">
AND CNSLT.CNSLT_CN LIKE CONCAT('%', #{srchCnsltCn}, '%')
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrInnb)">
AND (CNSLT.MBR_DV_CD = #{mbrDvCd} AND CNSLT.MBR_INNB = #{mbrInnb} || CNSLT.TELNB = HEX(AES_ENCRYPT(REPLACE(
#{mbtlnb},'-',''), #{secretKey})))
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbtlnb) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(mbrTyCd, '02')">
AND CNSLT.TELNB = HEX(AES_ENCRYPT(REPLACE(#{mbtlnb},'-',''), #{secretKey}))
AND CNSLT.MBR_INNB = 0
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(cnsltDtlsInnb)">
<![CDATA[
AND CNSLT.CNSLT_DTLS_INNB = #{cnsltDtlsInnb}
]]>
</if>
</sql>
<!-- 상담 목록 조회 FROM 절 -->
<sql id="cnsltListInqireFrom">
FROM GC_COUNSEL CNSLT
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(crmAt)">
LEFT JOIN GC_MEMBER MBR
ON CNSLT.MBR_INNB = MBR.MBR_INNB
AND CNSLT.MBR_DV_CD = MBR.MBR_DV_CD
LEFT JOIN GC_MEMBER_GRAD_MAPPING FMGM
ON FMGM.MBR_DV_CD = CNSLT.MBR_DV_CD
AND FMGM.SOPMAL_CD = CNSLT.SOPMAL_CD
AND FMGM.MBR_INNB = CNSLT.MBR_INNB
LEFT JOIN GC_MEMBER_GRAD FMG
ON FMG.SOPMAL_CD = CNSLT.SOPMAL_CD
AND FMGM.MBR_GRAD_INNB = FMG.MBR_GRAD_INNB
</if>
</sql>
<!-- 상담 목록 건수 조회 -->
<select id="selectBOCnsltListCnt"
parameterType="com.wb.domainserver.domain.gcone.bbs.cnslt.vo.BOCnsltVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
]]>
<include refid="cnsltListInqireFrom"/>
<include refid="cnsltListInqireWhere"/>
</select>
<!-- 상담 목록 조회 with Pagination -->
<select id="selectBOCnsltListInqire"
parameterType="com.wb.domainserver.domain.gcone.bbs.cnslt.vo.BOCnsltVO"
resultType="dataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,TB.*
,IF(TB.DLIVY_INFO IS NOT NULL,SUBSTRING_INDEX(TB.DLIVY_INFO,',',1),NULL) AS DLIVY_ORDR_INNB
,IF(TB.DLIVY_INFO IS NOT NULL,SUBSTRING_INDEX(TB.DLIVY_INFO,',',-1),NULL) AS DLIVY_INNB
,IF(TB.RETURN_REFUND_INFO IS NOT NULL,SUBSTRING_INDEX(TB.RETURN_REFUND_INFO,',',1),NULL) AS REFUND_ORDR_INNB
,IF(TB.RETURN_REFUND_INFO IS NOT NULL,SUBSTRING_INDEX(TB.RETURN_REFUND_INFO,',',-1),NULL) AS ORDER_REFUND_INNB
FROM (
SELECT
CNSLT.CNSLT_DTLS_INNB
,CNSLT.MBR_INNB
,CNSLT.MBR_DV_CD
,CNSLT.MNGR_INNB
,CNSLT.MNGR_NM
,CNSLT.ORDR_INNB
,CNSLT.DLIVY_CD_NB
,CNSLT.RETURN_CD_NB
,CNSLT.REFUND_CD_NB
,CNSLT.GOODS_INQRY_BBSCTT_NB
,CNSLT.GOODS_RVW_BBSCTT_NB
,CNSLT.PROCS_STTUS_CD
,CNSLT.CNSLT_CN
,CNSLT.TELNB_DV_CD
,CNSLT.LRGE_CL_CD
,CNSLT.MIDDL_CL_CD
,CNSLT.RECRD_KY
,CAST(AES_DECRYPT(UNHEX(CNSLT.TELNB) , #{secretKey}) AS CHAR(50)) AS TELNB
,CNSLT.REGUSR
,CNSLT.UPDUSR
,CNSLT.UPDT_DT
,DATE_FORMAT(CNSLT.PROCS_DT, '%Y-%m-%d %H:%i:%s') AS PROCS_DT
,DATE_FORMAT(CNSLT.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT
,fn_get_commcode_name('COUNSEL_PROCS_STTUS', PROCS_STTUS_CD) AS PROCS_STTUS_CD_NM
,fn_get_commcode_name('LRGE_CL', LRGE_CL_CD) AS LRGE_CL_NM
,fn_get_commcode_name(CONCAT('MIDDL_CL_',REPLACE(LRGE_CL_CD,'0','')), MIDDL_CL_CD) AS MIDDL_CL_NM
,CASE
WHEN IFNULL(CNSLT.DLIVY_CD_NB,'') <![CDATA[<>]]> ''
THEN (SELECT
CONCAT(GGE.ORDR_INNB, ',', GGE.DLIVY_INNB)
FROM
GC_GOODS_EXPORT GGE
WHERE GGE.SOPMAL_CD = CNSLT.SOPMAL_CD
AND GGE.DLIVY_CD_NB = CNSLT.DLIVY_CD_NB)
END DLIVY_INFO
,CASE
WHEN IFNULL(CNSLT.REFUND_CD_NB,'') <![CDATA[<>]]> ''
THEN (SELECT
CONCAT(GOR.ORDR_INNB,',',GOR.ORDER_REFUND_INNB)
FROM
GC_ORDER_REFUND GOR
WHERE
GOR.SOPMAL_CD = CNSLT.SOPMAL_CD
AND (GOR.REFUND_CD = CNSLT.REFUND_CD_NB
OR GOR.RETURN_CD = CNSLT.RETURN_CD_NB))
END RETURN_REFUND_INFO
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(crmAt)">
,MBR.MBR_ID
,MBR.MBR_NM
,MBR.JOIN_MTH_CD
,FMG.MBR_GRAD_NM AS GRAD_NM
</if>
<include refid="cnsltListInqireFrom"/>
<include refid="cnsltListInqireWhere"/>
ORDER BY CNSLT.REGIST_DT DESC
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 상담 상세 내역 조회 -->
<select id="selectBOCnsltDtlUpdtInqirePopup"
parameterType="com.wb.domainserver.domain.gcone.bbs.cnslt.vo.BOCnsltVO"
resultType="dataMap">
<![CDATA[
SELECT CNSLT.CNSLT_DTLS_INNB
, CNSLT.MBR_INNB
, CNSLT.MNGR_INNB
, CNSLT.MNGR_NM
, CNSLT.ORDR_INNB
, CNSLT.DLIVY_CD_NB
, CNSLT.RETURN_CD_NB
, CNSLT.REFUND_CD_NB
, CNSLT.GOODS_INQRY_BBSCTT_NB
, CNSLT.GOODS_RVW_BBSCTT_NB
, CNSLT.PROCS_STTUS_CD
, CNSLT.PROCS_DT
, CNSLT.CNSLT_CN
, CNSLT.TELNB_DV_CD
, CNSLT.LRGE_CL_CD
, CNSLT.MIDDL_CL_CD
, CNSLT.RECRD_KY
, CAST(AES_DECRYPT(UNHEX(CNSLT.TELNB), #{secretKey}) AS CHAR(50)) AS MBTLNB
, CNSLT.REGUSR
, DATE_FORMAT(CNSLT.REGIST_DT, '%Y-%m-%d') AS REGIST_DT
, CNSLT.UPDUSR
, CNSLT.UPDT_DT
FROM GC_COUNSEL CNSLT
WHERE CNSLT.CNSLT_DTLS_INNB = #{cnsltDtlsInnb}
AND CNSLT.SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 상담 수정 -->
<update id="updateBOCnsltUpdt">
<![CDATA[
UPDATE GC_COUNSEL SET
ORDR_INNB = #{ordrNb}
,DLIVY_CD_NB = #{dlivyInnb}
,RETURN_CD_NB = #{rtngudCdNb}
,REFUND_CD_NB = #{refndCdNb}
,GOODS_INQRY_BBSCTT_NB = #{goodsInqryBbscttNb}
,GOODS_RVW_BBSCTT_NB = #{goodsRvwBbscttNb}
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(procsSttusCd, '03')">
<![CDATA[
,PROCS_DT = SYSDATE()
]]>
</if>
<![CDATA[
,PROCS_STTUS_CD = #{procsSttusCd}
,CNSLT_CN = #{cnsltCn}
,UPDUSR = #{updusr}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND CNSLT_DTLS_INNB = #{cnsltDtlsInnb} AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 상담 등록 -->
<insert id="insertBOCnsltRegist">
INSERT INTO GC_COUNSEL (
SOPMAL_CD,
MBR_INNB,
MBR_DV_CD,
MNGR_INNB,
MNGR_NM,
ORDR_INNB,
DLIVY_CD_NB,
RETURN_CD_NB,
REFUND_CD_NB,
GOODS_INQRY_BBSCTT_NB,
GOODS_RVW_BBSCTT_NB,
PROCS_STTUS_CD,
PROCS_DT,
CNSLT_CN,
TELNB_DV_CD,
LRGE_CL_CD,
MIDDL_CL_CD,
RECRD_KY,
TELNB,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
SELECT #{sopmalCd},
IFNULL(#{mbrInnb}, 0),
IFNULL(#{mbrDvCd}, ''),
#{mngrInnb},
GM.MNGR_NM,
#{ordrNb},
#{dlivyInnb},
#{rtngudCdNb},
#{refndCdNb},
#{goodsInqryBbscttNb},
#{goodsRvwBbscttNb},
#{procsSttusCd},
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(procsSttusCd, '03')">
<![CDATA[
SYSDATE(),
]]>
</when>
<otherwise>
<![CDATA[
#{procsDt},
]]>
</otherwise>
</choose>
#{cnsltCn},
#{telnbDvCd},
#{lrgeCl},
#{middlCl},
#{customer_record_key},
HEX(AES_ENCRYPT(REPLACE(#{telnb},'-',''), #{secretKey})),
#{regusr},
SYSDATE(),
#{updusr},
SYSDATE()
FROM GC_MANAGER GM
WHERE MNGR_INNB = #{regusr}
</insert>
</mapper>

View File

@@ -0,0 +1,85 @@
<?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.wb.domainserver.domain.gcone.bbs.prom.mapper.BOPromMapper">
<select id="selectPromInfo" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT *
FROM GC_PROM
WHERE PROM_INNB = #{promInnb}
LIMIT 1
</select>
<select id="selectPromJoinInfo" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT *
FROM GC_PROM_JOIN
WHERE MBR_INNB = #{mbrInnb}
AND PROM_INNB = #{promInnb}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(joinDt)">
AND JOIN_DT = #{joinDt}
</if>
LIMIT 1
</select>
<select id="countPromJoin" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="int">
SELECT COUNT(*)
FROM GC_PROM_JOIN
WHERE PROM_INNB = #{promInnb}
</select>
<select id="selectPromRewardList" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PROM_REWARD_INNB as promRewardInnb,
PROM_INNB as promInnb,
SORT_ORDR as sortOrdr,
PROBABILITY as probability,
REWARD_TY as rewardTy,
ACCMLMNY_AMT as accmlmnyAmt,
MLG_APPLC_RESN as mlgApplcResn,
COUPON_INNB as couponInnb,
COUPON_SNDNG_INNB as couponSndngInnb,
REWARD_DC as rewardDc,
EXPIRE_DT as expireDt
FROM GC_PROM_REWARD
WHERE PROM_INNB = #{promInnb}
ORDER BY SORT_ORDR ASC
</select>
<select id="countRewardWinners" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
SORT_ORDR as sortOrdr,
COUNT(*) as winnerCount
FROM GC_PROM_JOIN
WHERE PROM_INNB = #{promInnb}
AND SORT_ORDR IS NOT NULL
GROUP BY SORT_ORDR
</select>
<insert id="insertPromJoin" parameterType="com.wb.domainserver.domain.gcone.bbs.prom.vo.BOPromVO">
INSERT INTO GC_PROM_JOIN (
PROM_INNB,
SOPMAL_CD,
MBR_INNB,
JOIN_DT,
SORT_ORDR,
REWARD_TY,
ACCMLMNY_AMT,
COUPON_INNB,
COUPON_SNDNG_INNB,
REWARD_DC,
REGIST_DT
) VALUES (
#{promInnb},
#{sopmalCd},
#{mbrInnb},
NOW(),
#{sortOrdr},
#{rewardTy},
#{accmlmnyAmt},
#{couponInnb},
#{couponSndngInnb},
#{rewardDc},
NOW()
)
</insert>
</mapper>

View File

@@ -0,0 +1,292 @@
<?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.wb.domainserver.domain.gcone.bnft.atend.mapper.BOAtendMapper">
<!-- 혜택 화면 설정 정보 조회 -->
<select id="selectBOBenefitScreenInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 고유 번호
b.USE_AT, -- 사용여부
b.SCR_REPRSNT_IMG, -- 화면 대표 이미지 경로
b.SCR_REPRSNT_LINK_URL, -- 화면 대표 이미지 링크 URL
b.SCR_RWD_IMG, -- 보상 이미지 경로
b.SCR_RWD_LINK_URL, -- 보상 이미지 링크 URL
b.BNF_WORDS_CN, -- 혜택 안내 문구
b.BNF_BGN_DT, -- 진행기간 시작일시
b.BNF_END_DT, -- 진행기간 종료일시
r.MLG_RWD_AMT -- 마일리지 보상 금액
FROM
GC_BENEFIT b
LEFT JOIN GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_DV_CD = '010' -- 출석체크 혜택 구분 코드
AND b.USE_AT = 'Y'
AND r.BNF_RWD_CATE_DV_CD = '01010'
AND DATE(NOW()) BETWEEN DATE(b.BNF_BGN_DT) AND DATE(b.BNF_END_DT)
AND b.SOPMAL_CD = #{sopmalCd}
ORDER BY
b.BNF_INNB -- 혜택 고유 번호로 정렬
]]>
</select>
<!-- 출석 보상 정보 조회 -->
<select id="selectAttendanceRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB, -- 쿠폰 고유 번호
br.ITM_NM AS ITM_NM, -- 보상 상품 이름
br.RWD_CND_CNT, -- 보상 조건 횟수
CASE
WHEN br.BNF_RWD_CATE_DV_CD = '01010' THEN '매일'
WHEN br.BNF_RWD_CATE_DV_CD IN ('01020', '01030') THEN CONCAT('누적 ', br.RWD_CND_CNT, '회')
WHEN br.BNF_RWD_CATE_DV_CD = '01040' THEN '100% 출석'
ELSE ''
END AS reward_condition -- 보상 조건 설명
from GC_BENEFIT gb
LEFT JOIN
GC_BENEFIT_REWARD br
ON gb.BNF_INNB = br.BNF_INNB
WHERE
br.BNF_INNB = #{bnfInnb}
AND gb.SOPMAL_CD = #{sopmalCd}
ORDER BY
br.RWD_CND_CNT;
]]>
</select>
<!-- 월간 출석 현황 조회 -->
<select id="selectMonthlyAttendance" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
DATE_FORMAT(BNF_PRT_DT, '%Y-%m-%d') AS attendanceDate -- 출석 날짜
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND DATE_FORMAT(BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 현재 월 조건
]]>
</select>
<!-- 일일 출석 보상 정보 조회 -->
<select id="selectDailyAttendanceReward" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
ITM_NM -- 표시명
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND BNF_RWD_CATE_DV_CD = '01010' -- 일일 출석 보상 코드
]]>
</select>
<!-- 누적 출석 보상 정보 조회 -->
<select id="selectCumulativeAttendanceReward" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS ITM_NM, -- 쿠폰 이름 (쿠폰발송명 우선, 없으면 표시명)
br.RWD_CND_CNT -- 보상 조건 횟수
FROM
GC_BENEFIT_REWARD br
LEFT JOIN GC_COUPON_SNDNG cs ON br.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
br.BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND br.BNF_RWD_CATE_DV_CD IN ('01020', '01030', '01040') -- 누적 출석 보상 코드들
ORDER BY
br.RWD_CND_CNT -- 보상 조건 횟수 기준 정렬
]]>
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '010' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 출석체크 참여 -->
<insert id="participateAttendanceCheck" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" useGeneratedKeys="true" keyProperty="bnfPrtInnb" keyColumn="BNF_PRT_INNB">
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 고유 번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유 번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
)
SELECT
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt},
#{regusr},
NOW()
WHERE
NOT EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
)
]]>
</insert>
<!-- 마일리지 적립 (일일/누적 보상 구분) -->
<insert id="insertMileageReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT
(
BNF_RCV_INNB, -- 혜택 보상수령 고유 번호
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
)
VALUES
(
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{regusr},
NOW()
)
]]>
</insert>
<!-- 이번 달 출석 횟수 조회 -->
<select id="selectCurrentMonthAttendanceCount" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COUNT(*) AS currentMonthAttendanceCount -- 이번 달 출석 횟수
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND DATE_FORMAT(BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 현재 월 조건
]]>
</select>
<!-- 누적 출석 마일리지 조회 -->
<select id="selectTotalAttendanceMileage" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COALESCE(SUM(r.MLG_RWD_AMT), 0) AS totalAttendanceMileage -- 누적 출석 마일리지
FROM
GC_BENEFIT_RECEIPT r
JOIN
GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE
p.MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND r.MLG_RWD_AMT IS NOT NULL
AND r.MLG_RWD_AMT > 0
AND DATE_FORMAT(p.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
]]>
</select>
<!-- 오늘 출석체크 참여 정보 조회 -->
<select id="selectTodayAttendance" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT *
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND DATE(BNF_PRT_DT) = CURDATE() -- 오늘 날짜 조건
]]>
</select>
<!-- 알림 상태 조회 -->
<select id="selectNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
AGRE_AT -- 동의 여부
FROM
GC_BENEFIT_AGREE
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '010' -- 혜택 구분 코드 (출석체크)
AND BNF_AGRE_DV_CD = '010' -- 혜택 동의 구분 코드 (알림동의)
]]>
</select>
<!-- 알림 신청 -->
<insert id="insertNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO">
<![CDATA[
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
AGRE_AT, -- 동의 여부
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
'010', -- 출석체크 혜택 구분 코드
'010', -- 알림동의 구분 코드
'Y', -- 동의함
#{regusr},
NOW()
)
]]>
</insert>
<!-- 알림 on off -->
<update id="updateAtendNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO">
<![CDATA[
UPDATE GC_BENEFIT_AGREE
SET
AGRE_AT = #{agreAt},
REGIST_DT = NOW()
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '010'
AND BNF_AGRE_DV_CD = '010'
]]>
</update>
</mapper>

View File

@@ -0,0 +1,367 @@
<?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.wb.domainserver.domain.gcone.bnft.bnftMain.mapper.BOBnftMainMapper">
<!-- 혜택 메인 메뉴 목록 조회 -->
<select id="selectBnftMainList" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
m.BNF_DV_CD,
m.SOPMAL_CD,
m.MENU_SJ_1,
m.MENU_SJ_2,
m.SORT_ORDR,
CASE
WHEN m.BNF_DV_CD = '120' THEN 'Y'
WHEN m.BNF_DV_CD = '140' THEN 'Y'
WHEN m.BNF_DV_CD = '020' AND (
SELECT COALESCE(d.PHAC_AGRE_AT, 'N')
FROM GC_MEMBER_DEVICE_INFO d
WHERE d.MBR_INNB = #{mbrInnb}
AND d.MBR_DV_CD = #{mbrDvCd}
AND d.SOPMAL_CD = #{sopmalCd}
AND d.DEVICE_ID = #{deviceId}
LIMIT 1
) = 'Y' AND EXISTS (
SELECT 1
FROM GC_BENEFIT b
WHERE b.BNF_DV_CD = m.BNF_DV_CD
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW())
) THEN 'Y'
WHEN EXISTS (
SELECT 1
FROM GC_BENEFIT b
WHERE b.BNF_DV_CD = m.BNF_DV_CD
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW())
) THEN 'Y'
ELSE 'N'
END AS AVAL_AT,
CASE
WHEN m.BNF_DV_CD = '100' AND EXISTS (
SELECT 1
FROM GC_BENEFIT b
JOIN GC_BENEFIT_NTKCHL n ON b.BNF_INNB = n.BNF_INNB
WHERE b.BNF_DV_CD = '100'
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.USE_AT = 'Y'
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.DEL_AT = 'N'
) THEN 'Y'
ELSE 'N'
END AS NTK_CHL_AT,
(
SELECT b.BNF_INNB
FROM GC_BENEFIT b
JOIN GC_BENEFIT_NTKCHL n ON b.BNF_INNB = n.BNF_INNB
WHERE b.BNF_DV_CD = '100'
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW())
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.DEL_AT = 'N'
ORDER BY n.REGIST_DT DESC
LIMIT 1
) AS NTK_BNF_INNB,
CASE
WHEN m.BNF_DV_CD = '050' AND EXISTS (
SELECT
gbcs.BNF_STTUS_INNB,
gbcs.PROGRS_AT,
gbcs.BNF_INNB
from
GC_BENEFIT gb
left join
GC_BENEFIT_CPSLMKN_STTUS gbcs
on gb.BNF_INNB = gbcs.BNF_INNB
WHERE
gbcs.MBR_INNB = #{mbrInnb}
AND gbcs.MBR_DV_CD = #{mbrDvCd}
AND gbcs.PROGRS_AT = 'Y'
AND gb.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND USE_AT = 'Y'
) THEN 'Y'
ELSE 'N'
END AS CPSL_PROGRS_AT,
(
SELECT s.BNF_INNB
FROM GC_BENEFIT_CPSLMKN_STTUS s
JOIN GC_BENEFIT b ON s.BNF_INNB = b.BNF_INNB
WHERE s.MBR_INNB = #{mbrInnb}
AND s.MBR_DV_CD = #{mbrDvCd}
AND s.PROGRS_AT = 'Y'
AND b.SOPMAL_CD = m.SOPMAL_CD
AND b.BNF_DV_CD = '050'
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW())
ORDER BY s.REGIST_DT DESC
LIMIT 1
) AS CPSL_BNF_INNB,
CASE
WHEN EXISTS (
SELECT 1
FROM GC_BENEFIT b2
JOIN GC_BENEFIT_INTEREST bi ON b2.BNF_INNB = bi.BNF_INNB
WHERE b2.BNF_DV_CD = m.BNF_DV_CD
AND b2.SOPMAL_CD = m.SOPMAL_CD
AND bi.USE_AT = 'Y'
AND bi.DEL_AT = 'N'
) THEN 'Y'
ELSE 'N'
END AS INTRST_AVAL_AT,
CASE
WHEN m.BNF_DV_CD = '040' THEN (
COALESCE(
(SELECT SUM(CHG_CNT) FROM GC_BENEFIT_CHARGE
WHERE MBR_INNB = #{mbrInnb} AND BNF_DV_CD = '040')
, 0)
-
COALESCE(
(SELECT COUNT(*) FROM GC_BENEFIT_PARTCPTN BP
INNER JOIN GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE BP.MBR_INNB = #{mbrInnb}
AND B.BNF_DV_CD = '040')
, 0)
)
ELSE 0
END AS ROULETTE_REMAINING_CNT
FROM
GC_BENEFIT_MANAGE_MENU m
WHERE
m.INDICT_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
m.SORT_ORDR asc
]]>
</select>
<!-- 디바이스 권한 조회 -->
<select id="selectDevicePermission" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
PHAC_AGRE_AT
FROM
GC_MEMBER_DEVICE_INFO
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND DEVICE_ID = #{deviceId}
]]>
</select>
<!-- 배너 목록 조회 -->
<select id="selectBannerList" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_BANNER_INNB, -- 혜택 배너 고유번호
SOPMAL_CD, -- 쇼핑몰코드
BANNER_SJ, -- 배너 제목
LINK_URL, -- 링크 URL
IMG_FIL_COURS, -- 이미지 파일 경로
IMG_FIL_NM, -- 이미지 파일명
SORT_ORDR -- 정렬 순서
FROM
GC_BENEFIT_MANAGE_BANNER
WHERE
SOPMAL_CD = #{sopmalCd} -- 파라미터로 받은 쇼핑몰 코드
AND USE_AT = 'Y' -- 사용 여부가 'Y'인 배너만
AND DEL_AT = 'N' -- 삭제되지 않은 배너만
ORDER BY
SORT_ORDR ASC -- 정렬 순서대로 조회
]]>
</select>
<!-- 마케팅동의 여부 조회 -->
<select id="selectMbrMarktAgreeAt" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
MARKT_RECPTN_AGRE_AT
FROM
GC_MARKETING_AGREE
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 현재 방영 중인 라이브쇼핑 확인 쿼리 -->
<select id="selectCurrentLiveShopping" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
CASE
WHEN EXISTS (
SELECT 1
FROM GC_BENEFIT b
JOIN GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
WHERE b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND b.BNF_DV_CD = '070' -- 라이브쇼핑 혜택 구분 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만
AND c.CN_BGN_DT <= NOW() -- 현재 시간이 방송 시작 시간 이후
AND c.CN_END_DT >= NOW() -- 현재 시간이 방송 종료 시간 이전
) THEN 'Y'
ELSE 'N'
END AS IS_LIVE_ON_AIR -- 라이브쇼핑 방영 중 여부
]]>
</select>
<!-- 새로 시작한 비상시적 이벤트 조회 쿼리 -->
<select id="selectNewEvents" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 설정 고유번호
b.BNF_DV_CD, -- 혜택 구분 코드
b.BNF_SJ, -- 혜택 제목
b.BNF_BGN_DT, -- 혜택 시작 일시
b.BNF_END_DT -- 혜택 종료 일시
FROM
GC_BENEFIT b
WHERE
b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만
AND b.BNF_DV_CD NOT IN ('010', '020') -- 출석체크, 만보기 제외
AND b.BNF_BGN_DT <= NOW() -- 현재 시간이 혜택 시작 시간 이후
AND b.BNF_END_DT >= NOW() -- 현재 시간이 혜택 종료 시간 이전
AND DATEDIFF(NOW(), b.BNF_BGN_DT) <= 1 -- 시작한지 7일 이내의 이벤트
ORDER BY
b.BNF_BGN_DT DESC -- 최근에 시작한 순으로 정렬
]]>
</select>
<!-- 참여했거나 혜택 지급 완료된 이벤트 조회 쿼리 -->
<select id="selectParticipatedEvents" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT DISTINCT
b.BNF_INNB, -- 혜택 설정 고유번호
b.BNF_DV_CD, -- 혜택 구분 코드
b.BNF_SJ, -- 혜택 제목
p.BNF_PRT_DT, -- 혜택 참여 일시
CASE
WHEN r.BNF_RCV_INNB IS NOT NULL THEN 'Y'
ELSE 'N'
END AS REWARD_RECEIVED -- 보상 수령 여부
FROM
GC_BENEFIT b
JOIN
GC_BENEFIT_PARTCPTN p ON b.BNF_INNB = p.BNF_INNB
LEFT JOIN
GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
WHERE
b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND p.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND p.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND b.BNF_DV_CD != '020' -- 만보기 제외 (참여완료 의미 없음)
AND b.BNF_DV_CD != '040' -- 룰렛 제외 (참여완료 의미 없음)
AND b.BNF_END_DT >= NOW() -- 아직 종료되지 않은 이벤트만
AND DATE(p.BNF_PRT_DT) = CURRENT_DATE() -- 모든 혜택에 대해 오늘 참여한 것만 포함
ORDER BY
p.BNF_PRT_DT DESC -- 최근 참여 순으로 정렬
]]>
</select>
<!-- QR 이벤트 혜택 설정 조회 -->
<select id="selectQrEventBenefit" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 고유 번호
b.BNF_SJ, -- 혜택 제목
b.USE_AT, -- 사용여부
b.BNF_WORDS_CN, -- 혜택 안내 문구
b.BNF_BGN_DT, -- 진행기간 시작일시
b.BNF_END_DT -- 진행기간 종료일시
FROM
GC_BENEFIT b
WHERE
b.BNF_DV_CD = '150' -- QR코드 이벤트 혜택 구분 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만
AND b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT <= NOW()) -- 시작일 체크
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT >= NOW()) -- 종료일 체크
ORDER BY
b.BNF_INNB DESC -- 최신 혜택 우선
]]>
</select>
<!-- QR 이벤트 참여 정보 저장 -->
<insert id="insertQrEventParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" useGeneratedKeys="true" keyProperty="bnfPrtInnb" keyColumn="BNF_PRT_INNB">
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 고유 번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유 번호
MBR_DV_CD, -- 회원 구분 코드
STR_INNB, -- 매장 고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
)
VALUES (
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{strInnb},
#{mbrInnb},
NOW()
)
</insert>
<!-- QR 이벤트 보상 정보 조회 -->
<select id="selectQrEventReward" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS ITM_NM -- 쿠폰 이름 (쿠폰발송명 우선, 없으면 표시명)
FROM
GC_BENEFIT_REWARD br
LEFT JOIN GC_COUPON_SNDNG cs ON br.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
<if test="bnfInnb != null and bnfInnb != ''">
br.BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
</if>
AND br.BNF_RWD_CATE_DV_CD = '15010' -- QR코드 이벤트 보상 코드
ORDER BY
br.MLG_RWD_AMT DESC -- 마일리지 높은 순으로 정렬
</select>
<!-- QR 이벤트 보상 영수증 저장 -->
<insert id="insertQrEventRewardReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.bnftMain.vo.BOBnftMainVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT
(
BNF_RCV_INNB, -- 혜택 보상수령 고유 번호
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
)
VALUES
(
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{mbrInnb},
NOW()
)
</insert>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,201 @@
<?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.wb.domainserver.domain.gcone.bnft.conrev.mapper.BOConrevMapper">
<!-- 베스트 리뷰 목록 조회 -->
<select id="selectBestReviewList" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
b.BNF_INNB,
b.BNF_SJ,
b.BNF_WORDS_CN,
b.USE_AT,
b.BNF_BGN_DT,
b.BNF_END_DT,
c.CN_SJ,
c.CN_DC,
c.LINK_URL,
c.IMG_FIL_COURS,
c.IMG_FIL_NM,
c.TME_SECND,
CONCAT(SUBSTRING(c.MBR_NM, 1, 4), '***') MBR_NM,
c.WORDS_CN,
r.MLG_RWD_AMT
FROM
GC_BENEFIT b
JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
JOIN
GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_DV_CD = '090' -- 베스트 리뷰보기 코드
AND b.USE_AT = 'Y'
AND (b.BNF_BGN_DT IS NULL OR b.BNF_BGN_DT &lt;= NOW())
AND (b.BNF_END_DT IS NULL OR b.BNF_END_DT &gt;= NOW())
AND b.SOPMAL_CD = #{sopmalCd}
ORDER BY
b.BNF_INNB DESC
<!-- LIMIT #{pageSize} OFFSET #{offset} -->
</select>
<!-- 리뷰 상세 정보 조회 -->
<select id="selectReviewDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
b.BNF_INNB,
b.BNF_SJ,
c.CN_SJ AS GOODS_NM,
c.CN_DC AS REVIEW_CONTENT,
c.LINK_URL AS REVIEW_LINK,
c.IMG_FIL_COURS,
c.IMG_FIL_NM,
c.TME_SECND,
c.MBR_NM AS REVIEWER_NAME,
r.MLG_RWD_AMT
FROM
GC_BENEFIT b
JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
JOIN
GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_INNB = #{bnfInnb}
</select>
<!-- 베스트 리뷰 보기 마일리지 적립 여부 확인 -->
<select id="checkConrevMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="int">
<![CDATA[
SELECT
COUNT(*) -- 적립 건수
FROM
GC_BENEFIT_PARTCPTN p
JOIN
GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
WHERE
p.BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
AND
p.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND
p.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
]]>
</select>
<!-- 베스트 리뷰 보기 보상 정보 조회 -->
<select id="selectConrevRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="java.lang.Integer">
<![CDATA[
SELECT
MLG_RWD_AMT -- 마일리지 보상 금액
FROM
GC_BENEFIT gb
LEFT JOIN GC_BENEFIT_REWARD gbr
ON gb.BNF_INNB = gbr.BNF_INNB
WHERE
BNF_RWD_CATE_DV_CD = '09010' -- 베스트리뷰보기 보상 코드
AND gb.BNF_INNB = #{bnfInnb}
AND gb.USE_AT = 'Y'
]]>
</select>
<!-- 리뷰 시간 정보 조회 -->
<select id="selectReviewTime" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="java.lang.Integer">
<![CDATA[
SELECT
TME_SECND -- 시간(초)
FROM
GC_BENEFIT_CONTENT
WHERE
BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
]]>
</select>
<!-- 베스트 리뷰 보기 참여 정보 삽입 -->
<insert id="insertReviewParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt},
#{regusr},
NOW()
)
]]>
</insert>
<!-- 초록잎 지급량 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '090' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 베스트 리뷰 보기 마일리지 적립 정보 삽입 -->
<insert id="insertMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
SELECT
#{bnfRcvInnb},
latest_participation.BNF_PRT_INNB,
'09010', -- 베스트리뷰보기 보상 코드
'010', -- 마일리지 보상 상품 코드
#{mlgRwdAmt},
#{mbrInnb},
NOW()
FROM (
SELECT BNF_PRT_INNB
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
ORDER BY BNF_PRT_DT DESC
LIMIT 1
) AS latest_participation
]]>
</insert>
<!-- 베스트리뷰 안내문 조회 -->
<select id="selectBestReviewGuidance" parameterType="com.wb.domainserver.domain.gcone.bnft.conrev.vo.BOConrevVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_GDCC_INNB, -- 혜택 안내문 고유번호
BNF_DV_CD, -- 혜택 구분코드
SOPMAL_CD, -- 쇼핑몰코드
WORDS_CN_1, -- 안내문 1
WORDS_CN_2, -- 안내문 2
WORDS_CN_3 -- 안내문 3
FROM
GC_BENEFIT_GDCC
WHERE
BNF_DV_CD = '090' -- 베스트리뷰 구분코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰코드
]]>
</select>
</mapper>

View File

@@ -0,0 +1,644 @@
<?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.wb.domainserver.domain.gcone.bnft.cpslmkn.mapper.BOCpslmknMapper">
<!-- 캡슐만들기 제품목록 조회 -->
<select id="selectRewardProductList" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
b.BNF_INNB, -- 혜택 설정 고유번호
c.CN_SJ, -- 제품명
c.CN_DC, -- 제품 한줄소개
c.LINK_URL, -- 구매 URL
c.IMG_FIL_COURS, -- 썸네일 이미지 파일 경로
c.IMG_FIL_NM, -- 썸네일 이미지 파일명
r.RWD_CND_CNT, -- 필요한 초록잎 개수
b.USE_AT, -- 사용 여부
c.VALID_DT, -- 유효 날짜
r.MLG_RWD_AMT, -- 마일리지 보상 금액
r.COUPON_INNB, -- 쿠폰 고유번호
#{sopmalCd} -- 쇼핑몰 코드
FROM
GC_BENEFIT b
INNER JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
INNER JOIN
GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_DV_CD = '050' -- 캡슐만들기 혜택 구분 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만 조회
AND b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
ORDER BY
c.CN_SJ ASC -- 제품명 기준 오름차순 정렬
</select>
<!-- 캡슐만들기 게임 안내 조회 -->
<select id="selectImportantNotice" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
WORDS_CN_1 AS NOTICE_1,
WORDS_CN_2 AS NOTICE_2,
WORDS_CN_3 AS NOTICE_3
FROM GC_BENEFIT_GDCC
WHERE BNF_DV_CD = '050' -- 캡슐만들기의 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!--이전 진행 상황 체크 -->
<select id="checkPreviousProgress" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
gbcs.BNF_STTUS_INNB, -- 상태 고유번호 반환
gbcs.PROGRS_AT,
gbcs.BNF_INNB,
gbcs.PROGRS_STEP, -- 현재 단계도 반환
gbcs.TOT_USE_LEAF_CNT -- 사용된 초록잎도 반환
FROM
GC_BENEFIT gb
LEFT JOIN
GC_BENEFIT_CPSLMKN_STTUS gbcs
ON gb.BNF_INNB = gbcs.BNF_INNB
WHERE
gbcs.MBR_INNB = #{mbrInnb}
AND gbcs.MBR_DV_CD = #{mbrDvCd}
AND gbcs.PROGRS_AT = 'Y' -- 진행 중인 게임만
AND gb.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND gb.USE_AT = 'Y'
AND gb.BNF_INNB = #{bnfInnb} -- 현재 혜택만 조회
ORDER BY gbcs.REGIST_DT DESC -- 최신 게임 우선
LIMIT 1 -- 하나만 조회
</select>
<!--필요한 초록잎 개수 조회 -->
<select id="selectProductInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
r.RWD_CND_CNT -- 필요한 초록잎 개수
FROM
GC_BENEFIT_REWARD r
WHERE
r.BNF_INNB = #{bnfInnb}
</select>
<!-- 게임 진행 현황 -->
<select id="selectCpslmknGameStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PROGRS_STEP, -- 진행 단계
TOT_USE_LEAF_CNT, -- 총 사용 초록잎 개수
BNF_STTUS_INNB -- 게임 상태 고유번호
FROM
GC_BENEFIT_CPSLMKN_STTUS
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND BNF_STTUS_INNB = #{bnfSttusInnb}
AND PROGRS_AT = 'Y'
</select>
<!-- 보유 초록잎 조회 -->
<select id="selectOwnedLeafCount" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="int">
SELECT
COALESCE(
(SELECT SUM(PRT_LEAF_CNT)
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}),
0
) -
COALESCE(
(SELECT SUM(USE_LEAF_CNT)
FROM GC_BENEFIT_CPSLMKN_USELEAF
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}),
0
) AS owned_leaf_count
</select>
<!-- 진행 상태 업데이트 -->
<update id="updateProgressStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
UPDATE GC_BENEFIT_CPSLMKN_STTUS
SET
PROGRS_STEP = #{progrsStep}, -- 진행 단계
TOT_USE_LEAF_CNT = #{totUseLeafCnt},-- 총 사용 초록잎 개수
UPDT_DT = NOW() -- 수정 일시
WHERE
BNF_STTUS_INNB = #{bnfSttusInnb} -- 고유번호만으로 조건 단순화
AND PROGRS_AT = 'Y' -- 진행 중인 게임만 (안전장치)
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
</update>
<!-- 진행 상태 삽입 -->
<insert id="insertProgressStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
INSERT INTO GC_BENEFIT_CPSLMKN_STTUS (
BNF_INNB, -- 혜택 설정 고유번호
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PROGRS_AT, -- 진행 여부
PROGRS_STEP, -- 진행 단계
TOT_USE_LEAF_CNT, -- 총 사용 초록잎 개수
REGIST_DT, -- 등록 일시
UPDT_DT -- 수정 일시
) VALUES (
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
'Y',
#{progrsStep},
#{totUseLeafCnt},
NOW(),
NOW()
)
</insert>
<!-- 초록잎 사용 내역 저장 -->
<insert id="insertLeafUsage" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
INSERT INTO GC_BENEFIT_CPSLMKN_USELEAF (
BNF_INNB, -- 혜택 설정 고유번호
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
USE_LEAF_CNT, -- 사용 초록잎 개수
PROGRS_STEP, -- 진행 단계
REGIST_DT -- 등록 일시
) VALUES (
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
#{useLeafCnt},
#{progrsStep},
NOW()
)
</insert>
<!-- 진행 상태 저장 또는 업데이트 -->
<insert id="upsertProgressStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
INSERT INTO GC_BENEFIT_CPSLMKN_STTUS (
BNF_INNB, -- 혜택 설정 고유번호
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PROGRS_AT, -- 진행 여부
PROGRS_STEP, -- 진행 단계
TOT_USE_LEAF_CNT, -- 총 사용 초록잎 개수
REGIST_DT, -- 등록 일시
UPDT_DT -- 수정 일시
) VALUES (
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
'Y',
#{progrsStep},
#{totUseLeafCnt},
NOW(),
NOW()
) ON DUPLICATE KEY UPDATE
PROGRS_STEP = #{progrsStep},
TOT_USE_LEAF_CNT = #{totUseLeafCnt},
UPDT_DT = NOW()
</insert>
<!-- 현재 진행 상태와 선택한 보상 확인 -->
<select id="selectCurrentProgress" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
s.PROGRS_STEP, -- 현재 단계
s.TOT_USE_LEAF_CNT, -- 총 사용 초록잎 개수
r.BNF_RWD_GODS_DV_CD, -- 선택한 보상 상품 구분 코드
c.CN_SJ, -- 제품명
c.CN_DC, -- 제품 설명
b.BNF_WORDS_CN -- 중요 사항 안내
FROM
GC_BENEFIT_CPSLMKN_STTUS s
JOIN
GC_BENEFIT_REWARD r ON s.BNF_INNB = r.BNF_INNB
JOIN
GC_BENEFIT_CONTENT c ON s.BNF_INNB = c.BNF_INNB
JOIN
GC_BENEFIT b ON s.BNF_INNB = b.BNF_INNB
WHERE
s.MBR_INNB = #{mbrInnb}
AND
s.MBR_DV_CD = #{mbrDvCd}
AND
s.BNF_INNB = #{bnfInnb}
AND s.PROGRS_AT = 'Y'
</select>
<!-- 모달 데이터 조회 -->
<select id="selectProgressModalData" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
s.PROGRS_STEP, -- 현재 진행 단계
s.TOT_USE_LEAF_CNT, -- 총 사용된 초록잎 개수
r.RWD_CND_CNT, -- 필요한 총 초록잎 개수
c.CN_SJ, -- 선물 제목
c.CN_DC, -- 선물 설명
c.IMG_FIL_COURS, -- 선물 이미지 URL
b.BNF_WORDS_CN -- 중요 공지사항
FROM
GC_BENEFIT_CPSLMKN_STTUS s
JOIN GC_BENEFIT_REWARD r ON s.BNF_INNB = r.BNF_INNB
JOIN GC_BENEFIT_CONTENT c ON s.BNF_INNB = c.BNF_INNB
JOIN GC_BENEFIT b ON s.BNF_INNB = b.BNF_INNB
WHERE
s.MBR_INNB = #{mbrInnb}
AND s.MBR_DV_CD = #{mbrDvCd}
AND s.BNF_INNB = #{bnfInnb}
AND s.PROGRS_AT = 'Y'
</select>
<!-- 캡슐 만들기 알림 설정 정보 조회 -->
<select id="selectCpslmknSettingsInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
AGRE_AT, -- 동의 여부
BNF_INNB -- 혜택 설정 고유번호
FROM
GC_BENEFIT_AGREE
WHERE
MBR_INNB = #{mbrInnb}
AND
MBR_DV_CD = #{mbrDvCd}
AND
BNF_DV_CD = '050' -- 캡슐만들기(050) 혜택 코드
AND
BNF_AGRE_DV_CD = '010' -- 알림동의(010) 코드
AND
SOPMAL_CD = #{sopmalCd}
</select>
<!-- 알림 설정 저장 -->
<insert id="upsertNotificationSetting" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰 코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
BNF_INNB, -- 혜택 설정 고유번호
AGRE_AT, -- 동의 여부
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
'050', -- 캡슐만들기(050) 혜택 코드
'010', -- 알림동의(010) 코드
#{bnfInnb},
#{agreAt},
#{mbrInnb},
NOW()
) ON DUPLICATE KEY UPDATE
AGRE_AT = #{agreAt},
REGUSR = #{mbrInnb},
REGIST_DT = NOW()
</insert>
<!-- 초록잎 생성, 사용 내역 조회 (최근 6개월) -->
<select id="selectLeafHistory" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT * FROM (
-- 초록잎 생성 내역 (혜택 참여)
SELECT
'CREATE' AS action_type,
CASE b.BNF_DV_CD
WHEN '010' THEN '출석체크'
WHEN '020' THEN '만보기'
WHEN '030' THEN '행운복권'
WHEN '040' THEN '룰렛게임'
WHEN '050' THEN '캡슐만들기 (퍼즐맞추기)'
WHEN '060' THEN '이벤트보기'
WHEN '070' THEN '라이브쇼핑 참여'
WHEN '080' THEN '할인소식 공유'
WHEN '090' THEN '베스트 리뷰보기'
WHEN '100' THEN '섭취챌린지'
WHEN '110' THEN 'GCpay 가입'
WHEN '120' THEN '관심건강분야 설정'
WHEN '130' THEN 'OX퀴즈'
WHEN '140' THEN '모바일스탬프'
WHEN '150' THEN 'QR코드 이벤트'
WHEN '900' THEN '구매확정'
ELSE '기타'
END AS event_name,
DATE_FORMAT(p.BNF_PRT_DT, '%Y-%m-%d %H:%i') AS action_datetime,
p.PRT_LEAF_CNT AS leaf_count,
p.REGIST_DT AS reg_datetime
FROM
GC_BENEFIT_PARTCPTN p
JOIN
GC_BENEFIT b ON p.BNF_INNB = b.BNF_INNB
WHERE
p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.PRT_LEAF_CNT &gt; 0
AND p.BNF_PRT_DT &gt;= DATE_SUB(NOW(), INTERVAL 6 MONTH)
UNION ALL
-- 초록잎 사용 내역 (캡슐 만들기)
SELECT
'USE' AS action_type,
'넣기' AS event_name,
DATE_FORMAT(u.REGIST_DT, '%Y-%m-%d %H:%i') AS action_datetime,
(u.USE_LEAF_CNT * -1) AS leaf_count, -- 사용은 음수로 표시
u.REGIST_DT AS reg_datetime
FROM
GC_BENEFIT_CPSLMKN_USELEAF u
WHERE
u.MBR_INNB = #{mbrInnb}
AND u.MBR_DV_CD = #{mbrDvCd}
AND u.REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 6 MONTH)
) history
ORDER BY
reg_datetime DESC
LIMIT
#{offset}, #{limit}
</select>
<!-- 혜택 고유번호로 보상 정보 조회 -->
<select id="selectRewardInfoByBnfInnb" parameterType="long" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB -- 쿠폰고유번호
-- 필요하다면 다른 보상 관련 컬럼도 추가 (예: ITM_NM)
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb}
-- 캡슐 만들기 관련 보상은 하나만 존재한다고 가정.
-- 만약 여러 개가 있을 수 있다면 추가적인 조건이나 LIMIT 필요
</select>
<!-- 캡슐만들기 5단계 완료 시 혜택 참여 정보 기록 -->
<insert id="insertBenefitParticipationOnCompletion" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시 (완료 시점)
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
REGIST_DT -- 등록 일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
NOW()
)
</insert>
<!-- 캡슐만들기 완료 후 보상 수령 내역 기록 -->
<insert id="insertBenefitReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰 고유번호
GOODS_INNB, -- 상품 고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{goodsInnb},
#{regusr},
NOW()
)
</insert>
<!-- 특정 혜택의 현재 사용 가능 여부 확인 -->
<select id="checkBenefitAvailability" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="int">
SELECT
COUNT(*)
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '050'
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건 추가
AND (BNF_BGN_DT IS NULL OR BNF_BGN_DT &lt;= NOW()) -- 시작일이 없거나 시작일 이후
AND (BNF_END_DT IS NULL OR BNF_END_DT &gt;= NOW()) -- 종료일이 없거나 종료일 이전
</select>
<!-- 같은 날짜의 기존 참여 정보 조회 -->
<select id="selectTodayParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_PRT_INNB,
PRT_LEAF_CNT
FROM
GC_BENEFIT_PARTCPTN
WHERE
BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = DATE(NOW())
ORDER BY BNF_PRT_DT DESC
LIMIT 1
</select>
<!-- 참여 정보 업데이트 (초록잎 추가) -->
<update id="updateBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
UPDATE GC_BENEFIT_PARTCPTN
SET
PRT_LEAF_CNT = PRT_LEAF_CNT + #{useLeafCnt},
STEP_CNT = #{progrsStep},
UPDUSR = #{regusr}, <!-- 명시적으로 updusr 사용 -->
UPDT_DT = NOW()
WHERE
BNF_PRT_INNB = #{bnfPrtInnb}
</update>
<!-- 새 참여 정보 삽입 -->
<insert id="insertBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" useGeneratedKeys="true" keyProperty="bnfPrtInnb">
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
STEP_CNT, -- 걸음수
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{useLeafCnt},
#{progrsStep}, <!-- 현재 진행 단계를 걸음수로 사용 -->
#{regusr}, <!-- 명시적으로 regusr 사용 -->
NOW()
)
</insert>
<!-- 보상 정보 조회 -->
<select id="selectRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
r.MLG_RWD_AMT, -- 마일리지 금액
r.COUPON_INNB -- 쿠폰 고유번호
FROM
GC_BENEFIT_REWARD r
WHERE
r.BNF_INNB = #{bnfInnb}
LIMIT 1
</select>
<!-- 캡슐만들기 정보 조회 - 진행 상태가 없어도 기본 안내 정보 반환 -->
<select id="selectCapsuleGameInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
COALESCE(s.PROGRS_STEP, 0) AS currentProgressStep, -- 현재 진행 단계 (없으면 0)
c.CN_SJ AS rewardProductName, -- 현재 리워드 제품 명
c.IMG_FIL_COURS AS productImagePath, -- 제품 이미지 경로
g.WORDS_CN_1 AS notice1, -- 캡슐만들기 게임 안내 1
g.WORDS_CN_2 AS notice2, -- 캡슐만들기 게임 안내 2
g.WORDS_CN_3 AS notice3 -- 캡슐만들기 게임 안내 3
FROM
GC_BENEFIT b
INNER JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
LEFT JOIN
GC_BENEFIT_GDCC g ON b.BNF_DV_CD = g.BNF_DV_CD AND b.SOPMAL_CD = g.SOPMAL_CD
LEFT JOIN
GC_BENEFIT_CPSLMKN_STTUS s ON b.BNF_INNB = s.BNF_INNB
AND s.MBR_INNB = #{mbrInnb}
AND s.MBR_DV_CD = #{mbrDvCd}
AND s.PROGRS_AT = 'Y'
WHERE
b.BNF_DV_CD = '050' -- 캡슐만들기 혜택 구분 코드
AND b.USE_AT = 'Y' -- 사용 중인 혜택만 조회
AND b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (#{bnfInnb} IS NULL OR b.BNF_INNB = #{bnfInnb}) -- 특정 혜택 번호가 있으면 해당 혜택만
LIMIT 1
</select>
<!-- 캡슐 만들기 게임 리셋 : 진행 중인 게임만 리셋 (중간에 그만두고 다시 할 때) -->
<update id="resetCapsuleGame" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
UPDATE GC_BENEFIT_CPSLMKN_STTUS
SET
PROGRS_AT = 'N',
UPDT_DT = NOW()
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND PROGRS_AT = 'Y' -- 진행 중인 게임만
AND BNF_STTUS_INNB = #{bnfSttusInnb} -- 정확한 게임 식별
AND ( -- 완료되지 않은 게임만 리셋 가능
PROGRS_STEP &lt; 5
OR TOT_USE_LEAF_CNT &lt; (
SELECT RWD_CND_CNT
FROM GC_BENEFIT_REWARD
WHERE BNF_INNB = #{bnfInnb}
)
)
</update>
<!-- 초록잎을 받을 수 있는 이벤트 목록 조회 -->
<select id="selectLeafEventList" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
MAX(b.BNF_INNB) AS BNF_INNB, -- 혜택 설정 고유번호 (최신)
b.BNF_DV_CD, -- 혜택 구분 코드
b.SOPMAL_CD, -- 쇼핑몰 코드
MAX(cp.PYMNT_CNT) AS PYMNT_CNT, -- 지급 초록잎 개수
MAX(cp.SPECIAL_AT) AS SPECIAL_AT, -- 스페셜 여부 (Y/N)
MAX(m.MENU_SJ_1) AS BNF_SJ, -- 메뉴 제목 1
MAX(m.MENU_SJ_2) AS MENU_SJ_2, -- 메뉴 제목 2
MAX(m.SORT_ORDR) AS SORT_ORDR -- 정렬순서
FROM
GC_BENEFIT b
INNER JOIN
GC_BENEFIT_CPSLMKN cp ON b.BNF_DV_CD = cp.BNF_DV_CD AND b.SOPMAL_CD = cp.SOPMAL_CD
LEFT JOIN
GC_BENEFIT_MANAGE_MENU m ON b.BNF_DV_CD = m.BNF_DV_CD AND b.SOPMAL_CD = m.SOPMAL_CD
WHERE
b.SOPMAL_CD = #{sopmalCd}
AND (b.BNF_DV_CD = '120' OR b.USE_AT = 'Y') -- 관심분야설정은 USE_AT 체크 제외
AND cp.INDICT_AT = 'Y'
AND (b.BNF_DV_CD = '120' OR (b.BNF_BGN_DT &lt;= NOW() AND b.BNF_END_DT &gt;= NOW())) -- 관심분야설정은 기간 체크 제외
AND (m.INDICT_AT IS NULL OR m.INDICT_AT = 'Y')
GROUP BY
b.BNF_DV_CD, b.SOPMAL_CD -- BNF_DV_CD 기준으로만 그룹핑
ORDER BY
MAX(cp.SPECIAL_AT) DESC, -- 스페셜 이벤트를 먼저 표시
MAX(m.SORT_ORDR) ASC, -- 메뉴 정렬순서 적용
MAX(b.BNF_INNB) -- 그 다음 일반 순서대로
</select>
<!-- 초록잎 이벤트 총 지급 개수 조회 -->
<select id="selectTotalLeafEventPaymentCount" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="int">
SELECT
COALESCE(SUM(cp.PYMNT_CNT), 0) AS totalPaymentCount
FROM
GC_BENEFIT b
INNER JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
INNER JOIN
GC_BENEFIT_CPSLMKN cp ON b.BNF_DV_CD = cp.BNF_DV_CD AND b.SOPMAL_CD = cp.SOPMAL_CD
WHERE
b.SOPMAL_CD = #{sopmalCd}
AND b.USE_AT = 'Y'
AND cp.INDICT_AT = 'Y'
AND b.BNF_BGN_DT &lt;= NOW() AND b.BNF_END_DT &gt;= NOW()
</select>
<!-- 캡슐 게임 완료 처리 전용 메소드 -->
<update id="completeGame" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO">
UPDATE GC_BENEFIT_CPSLMKN_STTUS
SET
PROGRS_AT = 'N', -- 완료 상태로 변경
PROGRS_STEP = 5, -- 완료 단계로 명시적 설정
UPDT_DT = NOW()
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND PROGRS_AT = 'Y' -- 진행 중인 게임만
AND BNF_STTUS_INNB = #{bnfSttusInnb} -- 정확한 게임 식별
AND PROGRS_STEP &gt;= 5 -- 5단계 이상
AND TOT_USE_LEAF_CNT &gt;= ( -- 필요한 초록잎을 모두 사용한 경우만
SELECT RWD_CND_CNT
FROM GC_BENEFIT_REWARD
WHERE BNF_INNB = #{bnfInnb}
)
</update>
<!-- 완료된 게임 확인 (새 게임 시작 가능 여부 판단용) -->
<select id="checkCompletedGame" parameterType="com.wb.domainserver.domain.gcone.bnft.cpslmkn.vo.BOCpslmknVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
gbcs.BNF_STTUS_INNB,
gbcs.PROGRS_AT,
gbcs.BNF_INNB,
gbcs.PROGRS_STEP,
gbcs.TOT_USE_LEAF_CNT,
gbcs.REGIST_DT
FROM
GC_BENEFIT gb
LEFT JOIN
GC_BENEFIT_CPSLMKN_STTUS gbcs ON gb.BNF_INNB = gbcs.BNF_INNB
WHERE
gbcs.MBR_INNB = #{mbrInnb}
AND gbcs.MBR_DV_CD = #{mbrDvCd}
AND gb.SOPMAL_CD = #{sopmalCd}
AND gb.USE_AT = 'Y'
AND gb.BNF_DV_CD = '050' -- 캡슐만들기 혜택
ORDER BY gbcs.REGIST_DT DESC
LIMIT 1
</select>
</mapper>

View File

@@ -0,0 +1,129 @@
<?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.wb.domainserver.domain.gcone.bnft.discshar.mapper.BODiscsharMapper">
<!-- 할인소식 공유 혜택 정보 조회 -->
<select id="selectDiscsharBenefitInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 설정 고유번호
b.SOPMAL_CD, -- 쇼핑몰코드
b.BNF_DV_CD, -- 혜택 구분 코드
b.BNF_SJ, -- 혜택 제목
b.BNF_BGN_DT, -- 진행기간 시작일시
b.BNF_END_DT, -- 진행기간 종료일시
b.SCR_REPRSNT_IMG, -- 화면 대표 이미지
b.SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
b.BNF_WORDS_CN, -- 혜택 안내
c.CN_SJ, -- 내용 제목 (상품명)
c.CN_DC, -- 내용 설명
c.LINK_URL, -- 링크 (구매 링크)
c.IMG_FIL_COURS, -- 이미지파일경로
c.IMG_FIL_NM, -- 이미지파일명
c.VALID_DT, -- 유효일시 (할인 유효기간)
c.TME_SECND, -- 시간(초)
c.DSCNT_UNIT_DV_CD, -- 할인구분코드
c.DSCNT_AMT, -- 할인금액
c.DSCNT_RT, -- 할인율
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.MLG_RWD_AMT -- 마일리지정보
FROM
GC_BENEFIT b
LEFT JOIN GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
LEFT JOIN GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
WHERE
b.BNF_DV_CD = '080' -- 할인소식 공유 혜택 구분 코드
AND b.USE_AT = 'Y'
ORDER BY
c.VALID_DT ASC -- 유효일시 기준 오름차순 정렬
]]>
</select>
<!-- 할인소식 공유 혜택 참여 정보 삽입 -->
<insert id="insertDiscsharBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN
(
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
VALUES
(
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{mbrInnb},
NOW()
)
]]>
</insert>
<!-- 할인소식 공유 마일리지 적립 정보 삽입 -->
<insert id="insertDiscsharMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO">
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT
(
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
VALUES
(
(SELECT BNF_PRT_INNB FROM GC_BENEFIT_PARTCPTN WHERE BNF_INNB = #{bnfInnb} AND MBR_INNB = #{mbrInnb} ORDER BY BNF_PRT_DT DESC LIMIT 1),
'08010', -- 할인소식공유 보상 코드
'010', -- 마일리지 보상 상품 코드
(SELECT MLG_RWD_AMT FROM fm_benefit_reward WHERE BNF_INNB = #{bnfInnb} AND BNF_RWD_CATE_DV_CD = '08010'),
#{mbrInnb},
NOW()
)
]]>
</insert>
<!-- 할인소식 공유 마일리지 적립 여부 확인 -->
<select id="checkMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO" resultType="int">
<![CDATA[
SELECT
COUNT(*) -- 적립 건수
FROM
GC_BENEFIT_RECEIPT r
JOIN
GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE
p.BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
AND
p.MBR_INNB = #{mbrInnb} -- 회원 고유번호
]]>
</select>
<!-- 할인소식 공유 링크 정보 조회 -->
<select id="getDiscsharLinkInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.discshar.vo.BODiscsharVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 설정 고유번호
b.SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
c.LINK_URL, -- 상품 구매 링크
c.VALID_DT -- 유효일시 (할인 유효기간)
FROM
GC_BENEFIT b
JOIN
GC_BENEFIT_CONTENT c ON b.BNF_INNB = c.BNF_INNB
WHERE
b.BNF_INNB = #{bnfInnb}
AND b.USE_AT = 'Y'
AND b.BNF_DV_CD = '080' -- 할인소식 공유 혜택 구분 코드
]]>
</select>
</mapper>

View File

@@ -0,0 +1,175 @@
<?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.wb.domainserver.domain.gcone.bnft.evntview.mapper.BOEvntViewMapper">
<!-- 이벤트 보기 혜택 기본 정보 및 보상 정보 통합 조회 -->
<select id="selectEventViewBenefitInfoAndContent" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
a.BNF_INNB, -- 혜택 설정 고유번호
b.CN_DC AS EVENT_DESC, -- 내용 설명
DATE_FORMAT(b.CN_BGN_DT, '%Y-%m-%d %H:%i:%s') AS CN_BGN_DT, -- 시작일시
DATE_FORMAT(b.CN_END_DT, '%Y-%m-%d %H:%i:%s') AS CN_END_DT, -- 종료일시
b.WORDS_CN AS EVENT_DETAIL, -- 안내내용
b.IMG_FIL_COURS AS EVENT_IMG_PATH, -- 이미지파일경로
b.IMG_FIL_NM AS EVENT_IMG_NAME, -- 이미지파일명
b.TME_SECND AS LOADING_TIME, -- 시간(초)
b.LINK_URL AS EVENT_LINK_URL, -- 링크
b.CN_SJ AS EVENT_LINK_TITLE, -- 내용 제목
b.CN_DC AS EVENT_LINK_DESC, -- 내용 설명
-- 보상 정보 추가
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
r.MLG_RWD_AMT, -- 마일리지 금액
r.COUPON_INNB, -- 쿠폰고유번호
r.ITM_NM, -- 표시명
CASE
WHEN EXISTS (
SELECT 1
FROM GC_BENEFIT_RECEIPT rcpt
JOIN GC_BENEFIT_PARTCPTN p ON rcpt.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.BNF_INNB = a.BNF_INNB
AND p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
) THEN 'Y'
ELSE 'N'
END AS ACCUMULATED_YN -- 적립 완료 여부
FROM
GC_BENEFIT a -- 혜택 기본 정보 테이블
LEFT JOIN
GC_BENEFIT_CONTENT b ON a.BNF_INNB = b.BNF_INNB -- 혜택 내용설정 정보 테이블
LEFT JOIN
GC_BENEFIT_REWARD r ON a.BNF_INNB = r.BNF_INNB
AND r.BNF_RWD_CATE_DV_CD = '06010' /* 이벤트보기 보상 코드 */
WHERE
a.BNF_DV_CD = '060' /* 이벤트보기 혜택 코드 */
AND a.USE_AT = 'Y' -- 사용여부
AND NOW() BETWEEN b.CN_BGN_DT AND b.CN_END_DT -- gc_benefit_content 테이블의 기간으로 변경
AND a.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
<if test="bnfInnb != null">
AND a.BNF_INNB = #{bnfInnb} -- 특정 혜택 번호 조건
</if>
ORDER BY
a.REGIST_DT DESC -- 등록일시 기준 내림차순 정렬
</select>
<!-- 이벤트 보기 안내문 조회 -->
<select id="selectEventViewInstruction" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
WORDS_CN_2 AS WORDS_CN
FROM
GC_BENEFIT_GDCC
WHERE
BNF_DV_CD = 060
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 초록잎 지급량 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '060' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 이벤트 보기 혜택 참여 정보 삽입 -->
<insert id="insertEventViewBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원고유번호
MBR_DV_CD, -- 회원구분코드
PRT_LEAF_CNT, -- 참여 초록잎 개수 추가
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb}, -- 혜택 설정 고유번호 파라미터
NOW(), -- 현재 시간
#{mbrInnb}, -- 회원고유번호 파라미터
#{mbrDvCd}, -- 회원구분코드 파라미터
#{paidLeafCnt}, -- 초록잎 개수 파라미터 추가
#{regusr}, -- 등록자 파라미터
NOW() -- 현재 시간
)
</insert>
<!-- 이벤트 보기 혜택 보상 정보 조회 -->
<select id="selectEventViewBenefitRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
r.BNF_INNB, -- 혜택 설정 고유번호
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
r.MLG_RWD_AMT, -- 마일리지 금액
r.COUPON_INNB, -- 쿠폰고유번호
r.ITM_NM -- 표시명
FROM
GC_BENEFIT_REWARD r -- 혜택 보상설정 정보 테이블
JOIN
GC_BENEFIT b ON r.BNF_INNB = b.BNF_INNB -- 혜택 기본 정보 테이블과 조인 추가
WHERE
r.BNF_INNB = #{bnfInnb} -- 특정 혜택 번호 조건
AND r.BNF_RWD_CATE_DV_CD = '06010' /* 이벤트보기 보상 코드 */
AND b.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건 추가
</select>
<!-- 이벤트 보기 마일리지 적립 여부 확인 -->
<select id="checkMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="int">
SELECT
COUNT(1) -- 행 수 카운트
FROM
GC_BENEFIT_RECEIPT r -- 혜택 보상수령 내역 테이블
JOIN
GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB -- 혜택 참여 정보 테이블
WHERE
p.BNF_INNB = #{bnfInnb} -- 특정 혜택 번호 조건
AND p.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND p.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 조건
AND r.BNF_RWD_CATE_DV_CD = '06010' -- 이벤트보기 보상 코드
</select>
<!-- 이벤트 보기 마일리지 적립 정보 삽입 -->
<insert id="insertEventViewMileageAccumulation" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO">
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb}, -- 혜택 참여 고유번호 파라미터
'06010', /* 이벤트보기 보상 코드 */
'010', -- 보상 상품 구분 코드
#{mlgRwdAmt}, -- 마일리지 금액 파라미터
#{regusr}, -- 등록자 파라미터
NOW() -- 현재 시간
)
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
<!-- 이벤트 유효성 검증 (날짜 체크) -->
<select id="checkEventValidation" parameterType="com.wb.domainserver.domain.gcone.bnft.evntview.vo.BOEvntViewVO" resultType="int">
SELECT
COUNT(1) -- 유효한 이벤트 수
FROM
GC_BENEFIT a -- 혜택 기본 정보 테이블
JOIN
GC_BENEFIT_CONTENT b ON a.BNF_INNB = b.BNF_INNB -- 혜택 내용설정 정보 테이블
WHERE
a.BNF_INNB = #{bnfInnb} -- 특정 혜택 번호 조건
AND a.BNF_DV_CD = '060' /* 이벤트보기 혜택 코드 */
AND a.USE_AT = 'Y' -- 사용여부
AND NOW() BETWEEN b.CN_BGN_DT AND b.CN_END_DT -- gc_benefit_content 테이블의 기간으로 변경
AND a.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
</mapper>

View File

@@ -0,0 +1,292 @@
<?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.wb.domainserver.domain.gcone.bnft.hlthset.mapper.BOHlthsetMapper">
<!-- 관심건강분야 설정 기본 정보 조회 -->
<select id="selectHealthInterestBasicInfo" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
b.BNF_INNB,
r.MLG_RWD_AMT, -- 관심분야 리워드
b.BNF_WORDS_CN, -- 관심분야 안내문구
COALESCE(a.AGRE_AT, 'N') AS AGRE_AT -- 정보받기 동의 여부 (기본값: N)
FROM
GC_BENEFIT b
JOIN GC_BENEFIT_REWARD r ON b.BNF_INNB = r.BNF_INNB
AND r.BNF_RWD_CATE_DV_CD = '12010'
AND r.BNF_RWD_GODS_DV_CD = '010'
LEFT JOIN GC_BENEFIT_AGREE a ON b.BNF_INNB = a.BNF_INNB
AND a.SOPMAL_CD = #{sopmalCd}
AND a.MBR_INNB = #{mbrInnb}
AND a.MBR_DV_CD = #{mbrDvCd}
AND a.BNF_DV_CD = '120'
AND a.BNF_AGRE_DV_CD = '010'
WHERE
b.BNF_DV_CD = '120'
AND b.SOPMAL_CD = #{sopmalCd}
</select>
<!-- 관심분야 목록 조회 -->
<select id="selectInterestAreas"
parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
i.BNF_INTRST_INNB, -- 관심분야 ID
i.INTRST_NM, -- 관심분야명
i.BFE_IMG_FIL_COURS, -- 관심분야 이미지 경로
CASE WHEN pi.CHOISE_AT = 'Y' THEN 'Y' ELSE 'N' END AS CHOISE_AT -- 선택여부
FROM
GC_BENEFIT_INTEREST i
LEFT JOIN GC_BENEFIT_PARTCPTN_INTEREST pi
ON i.BNF_INTRST_INNB = pi.BNF_INTRST_INNB
AND pi.BNF_PRT_INNB = (
SELECT BNF_PRT_INNB
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
ORDER BY BNF_PRT_DT DESC
LIMIT 1
)
WHERE
i.BNF_INNB = #{bnfInnb}
AND i.USE_AT = 'Y'
ORDER BY
i.SORT_ORDR
</select>
<!-- 사용자 기존 관심분야 삭제 -->
<delete id="deleteUserInterestAreas" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<![CDATA[
DELETE FROM GC_BENEFIT_PARTCPTN_INTEREST
WHERE BNF_PRT_INNB = (
SELECT BNF_PRT_INNB
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
ORDER BY BNF_PRT_DT DESC
LIMIT 1
)
]]>
</delete>
<!-- 새로운 사용자 관심분야 저장 -->
<insert id="insertUserInterestAreas" parameterType="java.util.List">
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN_INTEREST (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INTRST_INNB, -- 혜택 관심분야 고유번호
CHOISE_AT -- 선택여부
) VALUES
]]>
<foreach collection="list" item="item" separator=",">
(
#{item.bnfPrtInnb},
#{item.bnfIntrstInnb},
'Y'
)
</foreach>
</insert>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '120' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 혜택 참여 정보 삽입 (gc_benefit_partcptn) -->
<insert id="insertBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt},
#{regusr},
NOW()
)
]]>
</insert>
<!-- 사용자 관심분야 정보 수신 동의 저장 (insert 또는 update) -->
<insert id="insertUserInterestAgreement" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<![CDATA[
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰 코드 (예: NC, DT)
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드 (예: GC, DT)
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드 (예: '010' : 알림동의)
BNF_INNB, -- 혜택 설정 고유번호
AGRE_AT, -- 동의 여부 (Y/N)
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
'120',
'010',
#{bnfInnb},
#{agreAt},
#{regusr},
NOW()
)
ON DUPLICATE KEY UPDATE
AGRE_AT = VALUES(AGRE_AT),
REGUSR = VALUES(REGUSR),
REGIST_DT = NOW()
]]>
</insert>
<!-- 마일리지 적립 내역 저장 -->
<insert id="insertMileageReward" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfRcvInnb},
#{bnfPrtInnb},
'12010', -- 관심건강분야 보상 코드
'010', -- 보상상품 마일리지 코드
#{mlgRwdAmt},
#{regusr},
NOW()
)
]]>
</insert>
<!-- 사용자 관심분야 조회 -->
<select id="selectUserInterests" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
i.BNF_INTRST_INNB,
i.INTRST_NM
FROM
GC_BENEFIT_PARTCPTN_INTEREST pi
JOIN
GC_BENEFIT_INTEREST i ON pi.BNF_INTRST_INNB = i.BNF_INTRST_INNB
WHERE
pi.BNF_PRT_INNB = (
SELECT BNF_PRT_INNB
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
ORDER BY BNF_PRT_DT DESC
LIMIT 1
)
]]>
</select>
<!-- 해당 월에 마일리지 보상을 받았는지 확인 (수정된 버전) -->
<select id="hasMonthlyMileageReward" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="boolean">
<![CDATA[
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_RECEIPT r
JOIN GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND r.BNF_RWD_CATE_DV_CD = '12010' -- 관심건강분야 보상 코드
AND DATE_FORMAT(r.REGIST_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
)
]]>
</select>
<!-- 사용자 관심분야 저장 상태 및 마일리지 적립 여부 조회 (수정된 버전) -->
<select id="selectUserInterestSaveStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
CASE WHEN COUNT(DISTINCT pi.BNF_INTRST_INNB) > 0 THEN 'Y' ELSE 'N' END AS saved_yn,
CASE WHEN SUM(r.MLG_RWD_AMT) > 0 THEN 'Y' ELSE 'N' END AS mileage_accumulated_yn,
COALESCE(SUM(r.MLG_RWD_AMT), 0) AS MLG_RWD_AMT
FROM
GC_BENEFIT_PARTCPTN p
LEFT JOIN GC_BENEFIT_PARTCPTN_INTEREST pi ON p.BNF_PRT_INNB = pi.BNF_PRT_INNB
LEFT JOIN GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
AND r.BNF_RWD_CATE_DV_CD = '12010'
AND DATE_FORMAT(r.REGIST_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
WHERE
p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND DATE_FORMAT(p.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
]]>
</select>
<!-- 마지막 관심분야 참여 월 조회 -->
<select id="selectLastInterestParticipationMonth" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT DATE_FORMAT(MAX(BNF_PRT_DT), '%Y-%m') AS last_month
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN_INTEREST pi
WHERE pi.BNF_PRT_INNB = GC_BENEFIT_PARTCPTN.BNF_PRT_INNB
)
]]>
</select>
<!-- 월별 관심분야 초기화 (관심분야 데이터만 삭제) -->
<delete id="resetMonthlyInterestAreas" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO">
<![CDATA[
DELETE pi FROM GC_BENEFIT_PARTCPTN_INTEREST pi
JOIN GC_BENEFIT_PARTCPTN p ON pi.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND DATE_FORMAT(p.BNF_PRT_DT, '%Y-%m') < DATE_FORMAT(NOW(), '%Y-%m')
]]>
</delete>
<!-- 현재 월 참여 정보 조회 -->
<select id="selectCurrentMonthParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.hlthset.vo.BOHlthsetVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_PRT_INNB,
BNF_PRT_DT
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND DATE_FORMAT(BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
ORDER BY BNF_PRT_DT DESC
LIMIT 1
]]>
</select>
</mapper>

View File

@@ -0,0 +1,950 @@
<?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.wb.domainserver.domain.gcone.bnft.intakchl.mapper.BOIntakchlMapper">
<!-- 혜택 화면 설정 정보 조회 -->
<select id="selectIntakchlScreenInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 고유 번호
SCR_REPRSNT_IMG, -- 화면 대표 이미지 경로
SCR_REPRSNT_LINK_URL, -- 화면 대표 이미지 링크 URL
SCR_RWD_IMG, -- 보상 이미지 경로
SCR_RWD_LINK_URL, -- 보상 이미지 링크 URL
BNF_WORDS_CN -- 혜택 안내 문구
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '100' -- 출석체크 혜택 구분 코드
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
BNF_INNB -- 혜택 고유 번호로 정렬
]]>
</select>
<!-- 선택된 제품 추가 -->
<insert id="insertSelectedProducts" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
INSERT INTO GC_BENEFIT_NTKCHL (
BNF_INNB,
MBR_INNB,
MBR_DV_CD,
GOODS_INNB,
SOPMAL_CD,
BNF_NTK_STTUS_DV_CD,
NTK_CNT,
DEL_AT,
REGUSR,
REGIST_DT
)
VALUES
<foreach collection="products" item="product" separator=",">
(
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
#{product.goodsInnb},
#{sopmalCd},
'010', -- 섭취중 상태
0,
'N',
#{regusr},
NOW()
)
</foreach>
</insert>
<!-- 선택한 날짜의 전체 섭취 기록 및 총 섭취율 조회 -->
<select id="selectDailyTotalIntakeRecord" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COALESCE(total_actual, 0) AS TOTAL_ACTUAL_INTAKE, -- 실제 섭취 횟수 합계
COALESCE(total_target, 0) AS TOTAL_TARGET_INTAKE, -- 목표 섭취 횟수 합계
COALESCE(
CASE
WHEN total_target = 0 THEN 0
ELSE ROUND(total_actual * 100.0 / total_target)
END,
0
) AS OVERALL_INTAKE_RATE_PERCENTAGE -- 전체 섭취율 백분율 (NULL 방지)
FROM (
SELECT
SUM(actual_count) AS total_actual, -- 실제 섭취 횟수 합계
SUM(NTK_CNT) AS total_target -- 목표 섭취 횟수 합계
FROM (
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.NTK_CNT, -- 목표 섭취 횟수
COUNT(p.BNF_PRT_INNB) AS actual_count -- 실제 섭취 횟수
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN GC_BENEFIT_PARTCPTN_NTKCHL nt
ON n.BNF_NTK_INNB = nt.BNF_NTK_INNB
LEFT JOIN GC_BENEFIT_PARTCPTN p
ON nt.BNF_PRT_INNB = p.BNF_PRT_INNB
AND DATE(p.BNF_PRT_DT) = replace(#{selectedDate}, '-', '') -- 날짜 필터링
WHERE n.DEL_AT = 'N' -- 삭제되지 않은 데이터만 조회
AND n.MBR_INNB = #{mbrInnb} -- 회원 고유번호 필터링 추가
AND n.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 필터링 추가
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태만 조회
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb}) -- 혜택 설정 고유번호 필터링 추가
AND DATE(n.REGIST_DT) <= replace(#{selectedDate}, '-', '') -- 제품 등록일이 선택된 날짜 이전이거나 같은 경우만
GROUP BY n.BNF_NTK_INNB, n.NTK_CNT
) AS product_intake -- 제품별 섭취 정보
) AS totals
]]>
</select>
<!-- 선택한 날짜의 섭취 기록 상세 조회 (제품별) -->
<select id="selectDailyIntakeRecordsDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.GOODS_INNB, -- 상품 고유번호
n.NTK_CNT AS target_intake_count, -- 목표 섭취 횟수
COUNT(p.BNF_PRT_INNB) AS today_intake_count, -- 오늘 실제 섭취 횟수
CASE
WHEN COUNT(p.BNF_PRT_INNB) >= n.NTK_CNT THEN 'Y'
ELSE 'N'
END AS goal_achieved -- 목표 달성 여부 ('Y': 달성, 'N': 미달성)
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN GC_BENEFIT_PARTCPTN_NTKCHL nt ON n.BNF_NTK_INNB = nt.BNF_NTK_INNB
LEFT JOIN GC_BENEFIT_PARTCPTN p ON nt.BNF_PRT_INNB = p.BNF_PRT_INNB
AND DATE(p.BNF_PRT_DT) = #{selectedDate}
WHERE n.DEL_AT = 'N'
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb})
AND n.SOPMAL_CD = #{sopmalCd}
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태만 조회 (추가)
GROUP BY n.BNF_NTK_INNB, n.GOODS_INNB, n.NTK_CNT
ORDER BY n.BNF_NTK_INNB
]]>
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '100' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 마일리지 보상 금액 조회 -->
<select id="getMileageRewardAmount" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="java.lang.Double">
SELECT CAST(MLG_RWD_AMT AS DECIMAL(12,2)) -- 마일리지 금액
FROM GC_BENEFIT_REWARD
WHERE BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
AND BNF_RWD_CATE_DV_CD = '10010' -- 보상 항목 구분 코드 (섭취챌린지 1일 보상)
AND BNF_RWD_GODS_DV_CD = '010' -- 보상 상품 구분 코드 (마일리지)
</select>
<!-- 오늘 이미 마일리지를 적립했는지 확인 -->
<select id="checkMileageAlreadyAwarded" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_RECEIPT r
JOIN GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호
AND p.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND p.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND DATE(p.BNF_PRT_DT) = CURDATE() -- 혜택 참여 일시
AND r.BNF_RWD_CATE_DV_CD = '10010' -- 보상 항목 구분 코드 (섭취챌린지 1일 보상)
)
</select>
<!-- 일일 섭취 목표 달성 여부 확인 -->
<select id="checkDailyGoalAchievement" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT
CASE
WHEN COALESCE(SUM(daily_actual), 0) &gt;= COALESCE(SUM(daily_target), 0)
AND COALESCE(SUM(daily_target), 0) &gt; 0 THEN true
ELSE false
END AS goal_achieved
FROM (
SELECT
n.BNF_NTK_INNB,
n.NTK_CNT AS daily_target,
COUNT(p.BNF_PRT_INNB) AS daily_actual
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN GC_BENEFIT_PARTCPTN_NTKCHL nt ON n.BNF_NTK_INNB = nt.BNF_NTK_INNB
LEFT JOIN GC_BENEFIT_PARTCPTN p ON nt.BNF_PRT_INNB = p.BNF_PRT_INNB
AND DATE(p.BNF_PRT_DT) = CURDATE()
WHERE n.BNF_INNB = #{bnfInnb}
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.SOPMAL_CD = #{sopmalCd}
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태만
AND n.DEL_AT = 'N'
GROUP BY n.BNF_NTK_INNB, n.NTK_CNT
) AS intake_summary
</select>
<!-- 마일리지 적립 처리 -->
<insert id="awardIntakeChallengesMileage" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
SELECT
#{bnfRcvInnb},
(SELECT MAX(BNF_PRT_INNB)
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
),
'10010', -- 섭취챌린지 1일 보상 코드
'010', -- 마일리지 보상 상품 코드
#{mlgRwdAmt},
#{mbrInnb},
NOW()
WHERE NOT EXISTS (
SELECT 1
FROM GC_BENEFIT_RECEIPT r
JOIN GC_BENEFIT_PARTCPTN p ON r.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE p.BNF_INNB = #{bnfInnb}
AND p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND DATE(p.BNF_PRT_DT) = CURDATE()
AND r.BNF_RWD_CATE_DV_CD = '10010'
)
</insert>
<!-- 날짜별 상태 정보 조회 -->
<select id="selectStatsDateClasses" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
WITH RECURSIVE DateRange AS (
-- 날짜 범위 생성 (최근 30일)
SELECT DATE_SUB(CURDATE(), INTERVAL 29 DAY) AS date
UNION ALL
SELECT DATE_ADD(date, INTERVAL 1 DAY)
FROM DateRange
WHERE date < CURDATE()
),
DailyIntakeStatus AS (
SELECT
DATE(p.BNF_PRT_DT) AS participation_date,
n.BNF_NTK_INNB,
n.NTK_CNT AS target_count,
COUNT(pn.BNF_PRT_NTK_INNB) AS actual_count,
CASE
WHEN COUNT(pn.BNF_PRT_NTK_INNB) >= n.NTK_CNT THEN 'DONE'
WHEN COUNT(pn.BNF_PRT_NTK_INNB) > 0 THEN 'ING'
ELSE 'NONE'
END AS daily_status
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN GC_BENEFIT_PARTCPTN_NTKCHL pn ON n.BNF_NTK_INNB = pn.BNF_NTK_INNB
LEFT JOIN GC_BENEFIT_PARTCPTN p ON pn.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.BNF_INNB = #{bnfInnb}
AND n.SOPMAL_CD = #{sopmalCd}
AND n.DEL_AT = 'N'
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태만
AND p.BNF_PRT_DT >= DATE_SUB(CURDATE(), INTERVAL 29 DAY)
GROUP BY DATE(p.BNF_PRT_DT), n.BNF_NTK_INNB, n.NTK_CNT
),
ConsecutiveStatus AS (
SELECT
participation_date,
COUNT(CASE WHEN daily_status = 'DONE' THEN 1 END) AS done_count,
COUNT(CASE WHEN daily_status = 'ING' THEN 1 END) AS ing_count,
ROW_NUMBER() OVER (ORDER BY participation_date DESC) AS days_ago
FROM DailyIntakeStatus
GROUP BY participation_date
),
ConsecutiveDays AS (
SELECT
participation_date,
done_count,
ing_count,
@consecutive := CASE
WHEN done_count > 0 THEN @consecutive + 1
ELSE 0
END AS consecutive_days
FROM ConsecutiveStatus
CROSS JOIN (SELECT @consecutive := 0) AS vars
ORDER BY participation_date
)
SELECT
dr.date,
COALESCE(cs.done_count, 0) AS done_count,
COALESCE(cs.ing_count, 0) AS ing_count,
CASE
WHEN COALESCE(cs.done_count, 0) > 0 THEN 'stats_done'
WHEN COALESCE(cs.ing_count, 0) > 0 THEN 'stats_ing'
ELSE ''
END AS stats_done,
CASE
WHEN COALESCE(cs.done_count, 0) > 0 THEN 'stats_done'
WHEN COALESCE(cs.ing_count, 0) > 0 THEN 'stats_ing'
ELSE ''
END AS stats_ing,
CASE
WHEN cd.consecutive_days >= 30 THEN 'stats_30done'
ELSE ''
END AS stats_30done
FROM DateRange dr
LEFT JOIN ConsecutiveStatus cs ON dr.date = cs.participation_date
LEFT JOIN ConsecutiveDays cd ON dr.date = cd.participation_date
ORDER BY dr.date DESC
]]>
</select>
<!-- 현재 챌린지 중인 제품을 조회-->
<select id="selectCurrentChallengeProducts" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.BNF_INNB, -- 혜택 설정 고유번호
n.MBR_INNB, -- 회원 고유번호
n.GOODS_INNB AS productId,-- 상품 고유번호
g.GOODS_NM AS productName,-- 상품명
FN_GET_GOODS_IMAGE(g.SOPMAL_CD, g.GOODS_INNB, '03') AS imageUrl, -- 상품 썸네일 이미지
n.NTK_CNT AS dailyIntakeCount, -- 1일 섭취 횟수
n.BNF_NTK_STTUS_DV_CD, -- 섭취상태 구분코드 (010: 섭취중, 020: 일시중단, 030: 종료)
n.MEMO, -- 메모
n.REGIST_DT, -- 등록일시
(
SELECT COUNT(pn.BNF_PRT_NTK_INNB)
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn
JOIN GC_BENEFIT_PARTCPTN p ON pn.BNF_PRT_INNB = p.BNF_PRT_INNB
WHERE pn.BNF_NTK_INNB = n.BNF_NTK_INNB
AND DATE(p.BNF_PRT_DT) = CASE
WHEN #{selectedDate} IS NOT NULL THEN #{selectedDate}
ELSE CURDATE()
END
) AS todayIntakeCount -- 오늘 섭취 횟수
FROM
GC_BENEFIT_NTKCHL n
LEFT JOIN
GC_GOODS g ON n.GOODS_INNB = g.GOODS_INNB AND n.SOPMAL_CD = g.SOPMAL_CD
WHERE
n.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND n.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb}) -- 혜택 설정 고유번호
AND n.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 필터링 추가
AND n.BNF_NTK_STTUS_DV_CD = '010' -- 섭취중 상태
AND n.DEL_AT = 'N' -- 삭제되지 않은 데이터
AND (#{selectedDate} IS NULL OR DATE(n.REGIST_DT) <= #{selectedDate}) -- 제품 등록일이 선택된 날짜 이전이거나 같은 경우만
ORDER BY
n.REGIST_DT DESC -- 등록일시 기준 내림차순 정렬
]]>
</select>
<!-- 섭취챌린지 제품 상세 정보 조회 -->
<select id="selectIntakeChallengeProductDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.BNF_INNB, -- 혜택 설정 고유번호
n.MBR_INNB, -- 회원 고유번호
n.GOODS_INNB, -- 상품 고유번호
g.GOODS_NM, -- 상품명
FN_GET_GOODS_IMAGE(g.SOPMAL_CD, g.GOODS_INNB, '03') AS thumbnail, -- 상품 썸네일 이미지
n.NTK_CNT, -- 목표 섭취 횟수
n.BNF_NTK_STTUS_DV_CD, -- 섭취상태 구분코드 (010: 섭취중, 020: 일시중단, 030: 종료)
CASE
WHEN n.BNF_NTK_STTUS_DV_CD = '010' THEN '섭취중'
WHEN n.BNF_NTK_STTUS_DV_CD = '020' THEN '일시중단'
WHEN n.BNF_NTK_STTUS_DV_CD = '030' THEN '종료'
ELSE ''
END AS status_name, -- 섭취상태 이름
n.MEMO, -- 메모
g.SRT_DC AS intake_instructions, -- 섭취방법 (간략설명)
n.REGIST_DT AS start_date, -- 섭취 시작일자 추가
(
SELECT GROUP_CONCAT(
JSON_OBJECT(
'id', c.CTGRY_ID,
'name', c.CTGRY_NM
)
)
FROM GC_CATEGORY_LINK cl
JOIN GC_CATEGORY c ON cl.CTGRY_ID = c.CTGRY_ID AND cl.SOPMAL_CD = c.SOPMAL_CD
WHERE cl.GOODS_INNB = n.GOODS_INNB
AND cl.SOPMAL_CD = n.SOPMAL_CD
) AS categories -- 카테고리 정보 (JSON 형식)
FROM
GC_BENEFIT_NTKCHL n
JOIN
GC_GOODS g ON n.GOODS_INNB = g.GOODS_INNB AND n.SOPMAL_CD = g.SOPMAL_CD
WHERE
n.BNF_NTK_INNB = #{bnfNtkInnb}
AND n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.DEL_AT = 'N'
]]>
</select>
<!-- 일일 섭취 횟수 및 메모 업데이트 -->
<insert id="upsertIntakeChallengeInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
INSERT INTO GC_BENEFIT_NTKCHL (
BNF_NTK_INNB,
BNF_INNB,
MBR_INNB,
MBR_DV_CD,
GOODS_INNB,
SOPMAL_CD,
BNF_NTK_STTUS_DV_CD,
NTK_CNT,
MEMO,
DEL_AT,
REGUSR,
REGIST_DT
) VALUES (
#{bnfNtkInnb},
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
#{goodsInnb},
#{sopmalCd},
#{bnfNtkSttusDvCd},
#{ntkCnt},
#{memo},
'N',
#{regusr},
NOW()
)
ON DUPLICATE KEY UPDATE
NTK_CNT = #{ntkCnt},
MEMO = #{memo},
BNF_NTK_STTUS_DV_CD = #{bnfNtkSttusDvCd},
UPDUSR = #{mbrInnb},
UPDT_DT = NOW()
</insert>
<!-- 섭취챌린지 제품 삭제 (논리적 삭제) -->
<update id="deleteIntakeChallengeProduct" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
UPDATE GC_BENEFIT_NTKCHL
SET
DEL_AT = 'Y', -- 삭제 여부를 'Y'로 설정
UPDUSR = #{mbrInnb}, -- 수정자 (회원 고유번호)
UPDT_DT = NOW() -- 수정일시
WHERE
BNF_NTK_INNB = #{bnfNtkInnb} -- 혜택 섭취챌린지 고유번호
AND MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 필터링 추가
AND DEL_AT = 'N' -- 현재 삭제되지 않은 상태인 경우에만 업데이트
</update>
<!-- 모든 상태의 섭취챌린지 제품 목록 조회 (완료여부 Y/N 포함) -->
<select id="selectAllIntakeChallengeProducts" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
WITH ProductConsecutiveDays AS (
SELECT
n.BNF_NTK_INNB,
n.GOODS_INNB,
MAX(consecutive_days) as max_consecutive_days
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN (
SELECT
pn.BNF_NTK_INNB,
MAX(consec.consecutive_days) as consecutive_days
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn
JOIN GC_BENEFIT_PARTCPTN p ON pn.BNF_PRT_INNB = p.BNF_PRT_INNB
JOIN (
SELECT
pn2.BNF_NTK_INNB,
DATE(p2.BNF_PRT_DT) as participation_date,
@consecutive := CASE
WHEN @prev_date = DATE_SUB(DATE(p2.BNF_PRT_DT), INTERVAL 1 DAY)
AND @prev_product = pn2.BNF_NTK_INNB
THEN @consecutive + 1
ELSE 1
END as consecutive_days,
@prev_date := DATE(p2.BNF_PRT_DT),
@prev_product := pn2.BNF_NTK_INNB
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn2
JOIN GC_BENEFIT_PARTCPTN p2 ON pn2.BNF_PRT_INNB = p2.BNF_PRT_INNB
CROSS JOIN (SELECT @consecutive := 0, @prev_date := '', @prev_product := 0) as vars
ORDER BY pn2.BNF_NTK_INNB, DATE(p2.BNF_PRT_DT)
) consec ON pn.BNF_NTK_INNB = consec.BNF_NTK_INNB
GROUP BY pn.BNF_NTK_INNB
) consecutive_data ON n.BNF_NTK_INNB = consecutive_data.BNF_NTK_INNB
WHERE n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb})
AND n.SOPMAL_CD = #{sopmalCd}
AND n.DEL_AT = 'N'
GROUP BY n.BNF_NTK_INNB, n.GOODS_INNB
)
SELECT
n.BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
n.BNF_INNB, -- 혜택 설정 고유번호
n.MBR_INNB, -- 회원 고유번호
n.GOODS_INNB AS productId, -- 상품 고유번호
g.GOODS_NM AS productName, -- 상품명
FN_GET_GOODS_IMAGE(g.SOPMAL_CD, g.GOODS_INNB, '03') AS imageUrl, -- 상품 썸네일 이미지
n.NTK_CNT AS dailyIntakeCount, -- 1일 섭취 횟수
n.BNF_NTK_STTUS_DV_CD, -- 원본 섭취상태 구분코드
CASE
WHEN n.BNF_NTK_STTUS_DV_CD = '010' THEN 'ACTIVE' -- 섭취중
ELSE 'INACTIVE' -- 기타(일시중단, 종료)
END AS challengeStatus, -- 새로운 챌린지 상태
CASE
WHEN COALESCE(pcd.max_consecutive_days, 0) >= 30 THEN 'Y' -- 30일 완료
ELSE 'N'
END AS isCompleted, -- 30일 완료 여부 (Y/N)
CASE
WHEN COALESCE(pcd.max_consecutive_days, 0) >= 30 THEN '완료'
WHEN n.BNF_NTK_STTUS_DV_CD = '010' THEN '섭취중'
WHEN n.BNF_NTK_STTUS_DV_CD = '020' THEN '일시중단'
WHEN n.BNF_NTK_STTUS_DV_CD = '030' THEN '종료'
ELSE ''
END AS statusName, -- 새로운 상태 이름
n.REGIST_DT AS addedDate, -- 챌린지 추가일
COALESCE(pcd.max_consecutive_days, 0) AS maxConsecutiveDays -- 최대 연속 일수
FROM
GC_BENEFIT_NTKCHL n
LEFT JOIN
GC_GOODS g ON n.GOODS_INNB = g.GOODS_INNB AND n.SOPMAL_CD = g.SOPMAL_CD
LEFT JOIN
ProductConsecutiveDays pcd ON n.BNF_NTK_INNB = pcd.BNF_NTK_INNB
WHERE
n.MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND n.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb}) -- 혜택 설정 고유번호
AND n.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 필터링
AND n.DEL_AT = 'N' -- 삭제되지 않은 데이터
ORDER BY
n.REGIST_DT DESC -- 등록일시 기준 내림차순 정렬(최근 추가순)
]]>
</select>
<!-- 섭취챌린지 전체 현황 조회 (전체, 섭취중, 완료로 분류) -->
<select id="selectIntakeChallengeCount" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
WITH ProductConsecutiveDays AS (
SELECT
n.BNF_NTK_INNB,
n.BNF_NTK_STTUS_DV_CD,
MAX(consecutive_days) as max_consecutive_days
FROM GC_BENEFIT_NTKCHL n
LEFT JOIN (
SELECT
pn.BNF_NTK_INNB,
MAX(consec.consecutive_days) as consecutive_days
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn
JOIN GC_BENEFIT_PARTCPTN p ON pn.BNF_PRT_INNB = p.BNF_PRT_INNB
JOIN (
SELECT
pn2.BNF_NTK_INNB,
DATE(p2.BNF_PRT_DT) as participation_date,
@consecutive := CASE
WHEN @prev_date = DATE_SUB(DATE(p2.BNF_PRT_DT), INTERVAL 1 DAY)
AND @prev_product = pn2.BNF_NTK_INNB
THEN @consecutive + 1
ELSE 1
END as consecutive_days,
@prev_date := DATE(p2.BNF_PRT_DT),
@prev_product := pn2.BNF_NTK_INNB
FROM GC_BENEFIT_PARTCPTN_NTKCHL pn2
JOIN GC_BENEFIT_PARTCPTN p2 ON pn2.BNF_PRT_INNB = p2.BNF_PRT_INNB
CROSS JOIN (SELECT @consecutive := 0, @prev_date := '', @prev_product := 0) as vars
ORDER BY pn2.BNF_NTK_INNB, DATE(p2.BNF_PRT_DT)
) consec ON pn.BNF_NTK_INNB = consec.BNF_NTK_INNB
GROUP BY pn.BNF_NTK_INNB
) consecutive_data ON n.BNF_NTK_INNB = consecutive_data.BNF_NTK_INNB
WHERE n.MBR_INNB = #{mbrInnb}
AND n.MBR_DV_CD = #{mbrDvCd}
AND (#{bnfInnb} IS NULL OR n.BNF_INNB = #{bnfInnb})
AND n.SOPMAL_CD = #{sopmalCd}
AND n.DEL_AT = 'N'
GROUP BY n.BNF_NTK_INNB, n.BNF_NTK_STTUS_DV_CD
)
SELECT
COUNT(*) AS totalCount, -- 전체 제품 수
SUM(CASE
WHEN COALESCE(max_consecutive_days, 0) >= 30 THEN 0 -- 완료된 제품은 섭취중에서 제외
WHEN BNF_NTK_STTUS_DV_CD = '010' THEN 1
ELSE 0
END) AS activeCount, -- 섭취중인 제품 수 (완료 제외)
SUM(CASE
WHEN COALESCE(max_consecutive_days, 0) >= 30 THEN 1
ELSE 0
END) AS completedCount -- 30일 완료한 제품 수
FROM
ProductConsecutiveDays
]]>
</select>
<!-- 누적 보상 정보 조회 -->
<select id="selectCumulativeRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
SUM(CASE WHEN r.BNF_RWD_CATE_DV_CD = '10010' THEN r.MLG_RWD_AMT ELSE 0 END) AS dailyRewardTotal,
SUM(CASE WHEN r.BNF_RWD_CATE_DV_CD = '10020' THEN r.MLG_RWD_AMT ELSE 0 END) AS consecutiveRewardTotal,
COUNT(CASE WHEN r.BNF_RWD_CATE_DV_CD = '10020' AND r.BNF_RWD_GODS_DV_CD = '020' THEN r.COUPON_INNB ELSE NULL END) AS couponCount
FROM
GC_BENEFIT_RECEIPT rec
JOIN
GC_BENEFIT_PARTCPTN p ON rec.BNF_PRT_INNB = p.BNF_PRT_INNB
JOIN
GC_BENEFIT_REWARD r ON p.BNF_INNB = r.BNF_INNB AND rec.BNF_RWD_CATE_DV_CD = r.BNF_RWD_CATE_DV_CD
WHERE
p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
</select>
<!-- 연속 성공 기간 조회 -->
<select id="selectConsecutiveSuccessDays" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
WITH DateRange AS (
SELECT
ADDDATE('1970-01-01', t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) as date
FROM
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t0,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4
WHERE
ADDDATE('1970-01-01', t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) BETWEEN
(SELECT MIN(REGIST_DT) FROM GC_BENEFIT_NTKCHL WHERE MBR_INNB = #{mbrInnb} AND MBR_DV_CD = #{mbrDvCd} AND BNF_INNB = #{bnfInnb} AND SOPMAL_CD = #{sopmalCd} AND DEL_AT = 'N')
AND CURDATE()
),
SuccessDates AS (
SELECT DISTINCT DATE(p.BNF_PRT_DT) as success_date
FROM GC_BENEFIT_PARTCPTN p
WHERE p.MBR_INNB = #{mbrInnb} AND p.MBR_DV_CD = #{mbrDvCd} AND p.BNF_INNB = #{bnfInnb}
),
DateStatus AS (
SELECT
d.date,
CASE WHEN s.success_date IS NOT NULL THEN 1 ELSE 0 END as is_success,
CASE WHEN @consec := IF(s.success_date IS NOT NULL, @consec + 1, 0) THEN @consec ELSE 0 END as consecutive_count
FROM
DateRange d
LEFT JOIN
SuccessDates s ON d.date = s.success_date
CROSS JOIN
(SELECT @consec := 0) as vars
ORDER BY
d.date
),
ConsecutiveGroups AS (
SELECT
date,
consecutive_count,
@group_id := IF(consecutive_count = 0, @group_id + 1, @group_id) as group_id
FROM
DateStatus
CROSS JOIN
(SELECT @group_id := 0) as vars
ORDER BY
date
),
ConsecutivePeriods AS (
SELECT
group_id,
MIN(date) as start_date,
MAX(date) as end_date,
MAX(consecutive_count) as consecutive_days
FROM
ConsecutiveGroups
WHERE
consecutive_count > 0
GROUP BY
group_id
)
SELECT
start_date,
end_date,
consecutive_days,
CASE WHEN end_date = CURDATE() THEN 'Y' ELSE 'N' END as is_today_completion,
CASE WHEN consecutive_days >= 30 THEN 'Y' ELSE 'N' END as is_30days_completed,
CASE
WHEN consecutive_days >= 30 THEN CEILING(consecutive_days / 30)
ELSE 0
END as completed_cycles,
CASE
WHEN consecutive_days >= 30 THEN consecutive_days % 30
ELSE consecutive_days
END as current_cycle_days
FROM
ConsecutivePeriods
WHERE
(end_date = CURDATE() OR CURDATE() BETWEEN start_date AND end_date)
ORDER BY
end_date DESC
LIMIT 1
]]>
</select>
<!-- 현재 챌린지 상태 종합 정보 조회 -->
<select id="selectChallengeStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
CASE
WHEN EXISTS (
SELECT 1 FROM GC_BENEFIT_NTKCHL
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND SOPMAL_CD = #{sopmalCd}
AND BNF_NTK_STTUS_DV_CD = '020'
AND DEL_AT = 'N'
) THEN '020' -- 중단 상태
WHEN EXISTS (
SELECT 1 FROM GC_BENEFIT_PARTCPTN p
JOIN GC_BENEFIT_NTKCHL n ON p.MBR_INNB = n.MBR_INNB AND p.BNF_INNB = n.BNF_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND DATE(p.BNF_PRT_DT) = CURDATE()
AND n.BNF_NTK_STTUS_DV_CD = '010'
AND n.MBR_DV_CD = #{mbrDvCd}
AND n.SOPMAL_CD = #{sopmalCd}
AND n.DEL_AT = 'N'
) THEN '100' -- 오늘 성공
ELSE '010' -- 진행중
END as challenge_status,
(
SELECT COUNT(DISTINCT DATE(BNF_PRT_DT))
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
) as total_success_days,
(
SELECT DATEDIFF(CURDATE(), MIN(REGIST_DT)) + 1
FROM GC_BENEFIT_NTKCHL
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND SOPMAL_CD = #{sopmalCd}
AND BNF_NTK_STTUS_DV_CD = '010'
AND DEL_AT = 'N'
) as total_challenge_days
FROM dual
</select>
<!-- 섭취챌린지 알림설정 조회 -->
<select id="selectIntakeChallengeNotifications" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_NTK_NTCN_INNB, -- 혜택 섭취챌린지 알림 고유번호
NULL AS BNF_NTK_INNB, -- 혜택 섭취챌린지 고유번호
NTCN_TME, -- 알림 시간
USE_AT, -- 사용 여부
REGIST_DT -- 등록일시
FROM
GC_BENEFIT_NTKCHL_NTCN
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
ORDER BY
NTCN_TME ASC
</select>
<!-- 기본 알림 설정 생성 쿼리 (신규 사용자) -->
<insert id="insertDefaultNotificationTimes" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
INSERT INTO GC_BENEFIT_NTKCHL_NTCN (
BNF_INNB,
MBR_INNB,
MBR_DV_CD,
NTCN_TME,
USE_AT,
REGUSR,
REGIST_DT
)
SELECT
#{bnfInnb}, #{mbrInnb}, #{mbrDvCd}, '07:00:00', 'N', #{regusr}, NOW()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb} AND BNF_INNB = #{bnfInnb} AND MBR_DV_CD = #{mbrDvCd} AND NTCN_TME = '07:00:00'
)
UNION ALL
SELECT
#{bnfInnb}, #{mbrInnb}, #{mbrDvCd}, '12:00:00', 'N', #{regusr}, NOW()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb} AND BNF_INNB = #{bnfInnb} AND MBR_DV_CD = #{mbrDvCd} AND NTCN_TME = '12:00:00'
)
UNION ALL
SELECT
#{bnfInnb}, #{mbrInnb}, #{mbrDvCd}, '19:00:00', 'N', #{regusr}, NOW()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb} AND BNF_INNB = #{bnfInnb} AND MBR_DV_CD = #{mbrDvCd} AND NTCN_TME = '19:00:00'
)
</insert>
<!-- 섭취시간 알림 설정 업데이트 -->
<update id="updateIntakeChallengeNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
UPDATE GC_BENEFIT_NTKCHL_NTCN
SET
NTCN_TME = #{ntcnTme},
USE_AT = #{useAt}
WHERE
BNF_NTK_NTCN_INNB = #{bnfNtkNtcnInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
</update>
<!-- 섭취챌린지 미완료 알림 설정 조회 -->
<select id="selectIntakeChallengeIncompleteNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
ps.BNF_PUSH_EVT_SETUP_INNB,
ps.PUSH_SJ,
ps.PUSH_CN,
ps.USE_AT
FROM
GC_BENEFIT_PUSH_EVT_SETUP ps
WHERE
ps.BNF_PUSH_CND_DV_CD = '10020' -- 섭취챌린지 미완료시
AND ps.SOPMAL_CD = #{sopmalCd}
</select>
<!-- 미완료 알림 설정 업데이트 -->
<update id="updateIntakeChallengeIncompleteNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
UPDATE GC_BENEFIT_PUSH_EVT_SETUP
SET
USE_AT = #{useAt}
WHERE
BNF_PUSH_EVT_SETUP_INNB = #{bnfPushEvtSetupInnb}
AND BNF_PUSH_CND_DV_CD = '10020' -- 섭취챌린지 미완료시
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 섭취챌린지 알림설정 조회 -->
<select id="checkUserNotificationSettings" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
)
</select>
<!-- 특정 유저의 모든 알림 설정 삭제 -->
<delete id="deleteAllNotifications" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
DELETE FROM GC_BENEFIT_NTKCHL_NTCN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
</delete>
<!-- 특정 알림 설정 삭제 -->
<delete id="deleteNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
DELETE FROM GC_BENEFIT_NTKCHL_NTCN
WHERE BNF_NTK_NTCN_INNB = #{bnfNtkNtcnInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
</delete>
<!-- 오늘 참여기록 확인 -->
<select id="selectTodayParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_PRT_INNB,
PRT_LEAF_CNT,
BNF_PRT_DT
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
</select>
<!-- 오늘 참여기록 생성 (첫 참여시에만) -->
<insert id="insertTodayParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB,
BNF_INNB,
MBR_INNB,
MBR_DV_CD,
BNF_PRT_DT,
REGUSR,
REGIST_DT
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
#{mbrInnb},
#{mbrDvCd},
NOW(),
#{regusr},
NOW()
)
</insert>
<!-- 개별 섭취 기록 추가 -->
<insert id="insertIntakeRecord" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
<selectKey keyProperty="bnfPrtNtkInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_NTK_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN_NTKCHL
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN_NTKCHL (
BNF_PRT_NTK_INNB,
BNF_PRT_INNB,
BNF_NTK_INNB
) VALUES (
#{bnfPrtNtkInnb},
#{bnfPrtInnb},
#{bnfNtkInnb}
)
</insert>
<!-- 오늘 보상 지급 여부 확인 -->
<select id="checkTodayRewardAwarded" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
AND (PRT_LEAF_CNT IS NOT NULL AND PRT_LEAF_CNT > 0)
)
</select>
<!-- 오늘 보상 업데이트 (마일리지 + 초록잎) -->
<update id="updateTodayRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO">
UPDATE GC_BENEFIT_PARTCPTN
SET PRT_LEAF_CNT = #{paidLeafCnt},
UPDUSR = #{updusr},
UPDT_DT = NOW()
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
</update>
<!-- 초록잎 지급 여부 확인 -->
<select id="checkLeafAlreadyAwarded" parameterType="com.wb.domainserver.domain.gcone.bnft.intakchl.vo.BOIntakchlVO" resultType="boolean">
SELECT EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN p
WHERE p.BNF_INNB = #{bnfInnb}
AND p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND DATE(p.BNF_PRT_DT) = CURDATE()
AND p.PRT_LEAF_CNT IS NOT NULL
AND p.PRT_LEAF_CNT &gt; 0
)
</select>
</mapper>

View File

@@ -0,0 +1,250 @@
<?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.wb.domainserver.domain.gcone.bnft.lucklott.mapper.BOLucklottMapper">
<!-- 행운복권 혜택 기본 정보 조회 -->
<select id="selectLucklottBenefitInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 설정 고유번호
USE_AT, -- 사용여부
SOPMAL_CD, -- 쇼핑몰코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_SJ, -- 혜택 제목
SCR_REPRSNT_IMG, -- 화면 대표 이미지
SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
SCR_RWD_IMG, -- 화면 보상 이미지
SCR_RWD_LINK_URL, -- 화면 보상 링크 URL
BNF_BGN_DT, -- 진행기간 시작일시
BNF_END_DT, -- 진행기간 종료일시
BNF_WORDS_CN -- 혜택 안내
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '030' -- 행운복권 혜택 구분 코드 (문자열로 수정)
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
AND DATE(NOW()) BETWEEN DATE(BNF_BGN_DT) AND DATE(BNF_END_DT)
ORDER BY BNF_INNB DESC
]]>
</select>
<!-- 행운복권 혜택 보상 및 쿠폰 정보 조회 -->
<select id="selectLucklottBenefitRewardsAndCoupons" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
R.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
R.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
R.ITM_NM, -- 표시명
R.MLG_RWD_AMT, -- 마일리지 보상 금액
C.COUP_NM, -- 쿠폰명
C.COUPON_DC -- 쿠폰설명
FROM
GC_BENEFIT B
LEFT JOIN GC_BENEFIT_REWARD R ON B.BNF_INNB = R.BNF_INNB
LEFT JOIN GC_COUPON C ON R.COUPON_INNB = C.COUPON_INNB
AND C.USE_AT = 'Y'
WHERE
B.BNF_DV_CD = '030' -- 행운복권 혜택 구분 코드
AND B.USE_AT = 'Y'
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건 추가
]]>
</select>
<!-- 행운복권 혜택 보상 정보 조회 -->
<select id="selectLucklottBenefitRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
R.BNF_INNB, -- 혜택 설정 고유번호
R.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
R.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
R.MLG_RWD_AMT, -- 마일리지 금액
R.COUPON_INNB, -- 쿠폰 고유번호
R.ITM_NM, -- 표시명
R.PRZWIN_QY, -- 당첨수량
R.PRZWIN_PRC, -- 당첨확률
R.DSCNT_AMT, -- 할인금액
C.COUP_NM, -- 쿠폰명
C.COUPON_DC -- 쿠폰설명
FROM
GC_BENEFIT_REWARD R
LEFT JOIN GC_COUPON C ON R.COUPON_INNB = C.COUPON_INNB
AND C.USE_AT = 'Y'
WHERE
R.BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호 조건
AND R.PRZWIN_QY > 0 -- 수량이 있는 경우만
ORDER BY R.BNF_RWD_CATE_DV_CD ASC -- 등수 순서대로 정렬 (03010, 03020, 03030, 03040)
]]>
</select>
<!-- 오늘 참여 횟수 조회 -->
<select id="selectTodayParticipationCount" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="int">
<![CDATA[
SELECT IFNULL(COUNT(*), 0)
FROM GC_BENEFIT_PARTCPTN
WHERE BNF_INNB = #{bnfInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE(BNF_PRT_DT) = CURDATE()
]]>
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '030' -- 혜택 구분 코드 (행운복권)
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 행운복권 혜택 참여 정보 삽입 (초록잎 적립 포함) -->
<insert id="insertLucklottBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN
(
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수 (추가)
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
VALUES
(
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt}, -- 초록잎 지급량
#{regusr},
NOW()
)
]]>
</insert>
<!-- 행운복권 혜택 보상 수령 정보 삽입 -->
<insert id="insertLucklottBenefitReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰고유번호
GOODS_INNB, -- 상품고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb}, -- 혜택 참여 고유번호 (파라미터)
#{bnfRwdCateDvCd}, -- 보상 항목 구분 코드 (파라미터)
#{bnfRwdGodsDvCd}, -- 보상 상품 구분 코드 (파라미터)
#{mlgRwdAmt}, -- 마일리지 금액 (파라미터, 해당 없으면 NULL)
#{couponInnb}, -- 쿠폰고유번호 (파라미터, 해당 없으면 NULL)
#{goodsInnb}, -- 상품고유번호 (파라미터, 해당 없으면 NULL)
#{regUsr}, -- 등록자 번호 (파라미터)
NOW() -- 현재 시간
)
]]>
</insert>
<!-- 특정 상품의 당첨된 수량 조회 -->
<select id="selectIssuedGoodsQuantity" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="int">
<![CDATA[
SELECT
COUNT(brec.BNF_RCV_INNB) AS issuedGoodsQuantity -- 당첨된 수량
FROM
GC_BENEFIT_REWARD br -- 혜택 보상설정 정보 테이블
LEFT JOIN
GC_BENEFIT_PARTCPTN bp ON br.BNF_INNB = bp.BNF_INNB -- 혜택 참여 정보 테이블과 조인
LEFT JOIN
GC_BENEFIT_RECEIPT brec ON bp.BNF_PRT_INNB = brec.BNF_PRT_INNB -- 혜택 보상수령 내역 테이블과 조인
AND br.BNF_RWD_CATE_DV_CD = brec.BNF_RWD_CATE_DV_CD
AND br.BNF_RWD_GODS_DV_CD = brec.BNF_RWD_GODS_DV_CD
WHERE
br.BNF_INNB = #{bnfInnb} -- 특정 혜택 설정 번호 선택
AND br.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 특정 보상 항목 구분 코드 선택
AND br.BNF_RWD_GODS_DV_CD = #{bnfRwdGodsDvCd} -- 특정 보상 상품 구분 코드 선택
GROUP BY
br.BNF_INNB, br.BNF_RWD_CATE_DV_CD, br.BNF_RWD_GODS_DV_CD, br.ITM_NM
]]>
</select>
<!-- 특정 상품의 남은 수량 조회 -->
<select id="selectRemainingGoodsQuantity" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="int">
<![CDATA[
SELECT
br.PRZWIN_QY - COALESCE(COUNT(brec.BNF_RCV_INNB), 0) AS remainingGoodsQuantity -- 남은 당첨 수량
FROM
GC_BENEFIT_REWARD br -- 혜택 보상설정 정보 테이블
LEFT JOIN
GC_BENEFIT_PARTCPTN bp ON br.BNF_INNB = bp.BNF_INNB -- 혜택 참여 정보 테이블과 조인
LEFT JOIN
GC_BENEFIT_RECEIPT brec ON bp.BNF_PRT_INNB = brec.BNF_PRT_INNB -- 혜택 보상수령 내역 테이블과 조인
AND br.BNF_RWD_CATE_DV_CD = brec.BNF_RWD_CATE_DV_CD
AND br.BNF_RWD_GODS_DV_CD = brec.BNF_RWD_GODS_DV_CD
WHERE
br.BNF_INNB = #{bnfInnb} -- 특정 혜택 설정 번호
AND br.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 특정 보상 항목 구분 코드로 검색
GROUP BY
br.BNF_INNB, br.BNF_RWD_CATE_DV_CD, br.BNF_RWD_GODS_DV_CD, br.ITM_NM, br.PRZWIN_QY -- 그룹화 기준
ORDER BY
br.BNF_INNB, br.BNF_RWD_CATE_DV_CD, br.BNF_RWD_GODS_DV_CD -- 정렬 기준
]]>
</select>
<!-- 모든 등수 상품의 수량 체크 -->
<select id="selectAllRewardsQuantityStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.ITM_NM, -- 상품명
br.PRZWIN_QY, -- 총 당첨수량
COALESCE(COUNT(brec.BNF_RCV_INNB), 0) AS issuedQuantity, -- 지급된 수량
br.PRZWIN_QY - COALESCE(COUNT(brec.BNF_RCV_INNB), 0) AS remainingQuantity, -- 남은 수량
CASE
WHEN br.PRZWIN_QY - COALESCE(COUNT(brec.BNF_RCV_INNB), 0) > 0 THEN 'Y'
ELSE 'N'
END AS hasStock -- 재고 여부
FROM
GC_BENEFIT_REWARD br
LEFT JOIN GC_BENEFIT_PARTCPTN bp ON br.BNF_INNB = bp.BNF_INNB
LEFT JOIN GC_BENEFIT_RECEIPT brec ON bp.BNF_PRT_INNB = brec.BNF_PRT_INNB
AND br.BNF_RWD_CATE_DV_CD = brec.BNF_RWD_CATE_DV_CD
AND br.BNF_RWD_GODS_DV_CD = brec.BNF_RWD_GODS_DV_CD
WHERE
br.BNF_INNB = #{bnfInnb}
GROUP BY
br.BNF_RWD_CATE_DV_CD, br.BNF_RWD_GODS_DV_CD, br.ITM_NM, br.PRZWIN_QY
ORDER BY
br.BNF_RWD_CATE_DV_CD
]]>
</select>
<!-- 보상 수량 감소 쿼리 제거 -->
<!--
<update id="updateRewardQuantity" parameterType="com.wb.domainserver.domain.gcone.bnft.lucklott.vo.BOLucklottVO">
<![CDATA[
UPDATE GC_BENEFIT_REWARD
SET PRZWIN_QY = PRZWIN_QY - 1
WHERE BNF_INNB = #{bnfInnb}
AND BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd}
AND BNF_RWD_GODS_DV_CD = #{bnfRwdGodsDvCd}
AND PRZWIN_QY > 0
]]>
</update>
-->
</mapper>

View File

@@ -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.wb.domainserver.domain.gcone.bnft.lvshop.mapper.BOLvshopMapper">
<!-- 현재 진행중인 라이브 쇼핑 정보 조회 -->
<select id="selectCurrentLiveShoppingInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB AS BNF_INNB, -- 혜택 고유번호
BC.CN_SJ AS BENEFIT_TITLE, -- 혜택 제목 (방송명)
BC.IMG_FIL_COURS AS THUMBNAIL_IMAGE_URL,-- 방송 썸네일 이미지 URL
BG.WORDS_CN_2 AS BENEFIT_DESC_2, -- 혜택 안내문 2 (이벤트 설명)
BC.WORDS_CN AS BROADCAST_DESC, -- 방송 안내
BC.CN_DC AS CONTENT_DESC, -- 내용 설명 (방송 소개)
BC.TME_SECND AS REQUIRED_WATCH_TIME,-- 필수 시청 시간(초)
BC.LINK_URL AS PARTICIPATION_URL, -- 참여 링크 URL 추가
TIMESTAMPDIFF(SECOND, BC.CN_BGN_DT, NOW()) AS ELAPSED_TIME_IN_SECONDS, -- 방송 경과 시간(초)
BR.MLG_RWD_AMT AS MILEAGE_REWARD -- 마일리지 보상 금액
FROM
GC_BENEFIT B -- 혜택 기본 정보 테이블
INNER JOIN
GC_BENEFIT_CONTENT BC ON B.BNF_INNB = BC.BNF_INNB -- 혜택 내용설정 정보 테이블 조인
LEFT JOIN
GC_BENEFIT_REWARD BR ON B.BNF_INNB = BR.BNF_INNB AND BR.BNF_RWD_CATE_DV_CD = '07010' -- 혜택 보상설정 정보 테이블 조인 (라이브 쇼핑 참여 보상)
LEFT JOIN
GC_BENEFIT_GDCC BG ON B.BNF_DV_CD = BG.BNF_DV_CD AND B.SOPMAL_CD = BG.SOPMAL_CD -- 혜택 안내문 정보 테이블 조인
WHERE
B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건
AND B.BNF_DV_CD = '070' -- 혜택 구분 코드 (라이브 쇼핑) 조건
AND B.USE_AT = 'Y' -- 사용 여부 조건
AND NOW() BETWEEN BC.CN_BGN_DT AND BC.CN_END_DT -- 현재 진행 중인 방송 조건
LIMIT 1 -- 가장 최근 1건 조회
</select>
<!-- 다음 방송 예고 목록 조회 -->
<select id="selectUpcomingLiveShoppingList" parameterType="string" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB AS BNF_INNB, -- 혜택 고유번호
B.BNF_SJ AS BENEFIT_TITLE, -- 방송명
BC.IMG_FIL_COURS AS THUMBNAIL_IMAGE_URL, -- 방송 썸네일 이미지 URL
BC.CN_DC AS CONTENT_DESC, -- 방송소개
BC.WORDS_CN AS BROADCAST_DESC, -- 방송 안내
BC.CN_BGN_DT AS BROADCAST_START_TIME, -- 방송 시작 시간 추가
BG.WORDS_CN_1 AS BENEFIT_DESC_1, -- 혜택 안내문 1
BG.WORDS_CN_2 AS BENEFIT_DESC_2, -- 혜택 안내문 2
BG.WORDS_CN_3 AS BENEFIT_DESC_3, -- 혜택 안내문 3
TIMESTAMPDIFF(SECOND, NOW(), BC.CN_BGN_DT) AS REMAINING_TIME -- 방송 시작까지 남은 시간 (초)
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_CONTENT BC ON B.BNF_INNB = BC.BNF_INNB
LEFT JOIN
GC_BENEFIT_GDCC BG ON B.BNF_DV_CD = BG.BNF_DV_CD AND B.SOPMAL_CD = BG.SOPMAL_CD -- 혜택 안내문 정보 테이블 조인
WHERE
B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 (문자열 파라미터)
AND B.BNF_DV_CD = '070' -- 혜택 구분 코드 (라이브쇼핑)
AND B.USE_AT = 'Y' -- 사용 여부
AND NOW() &lt; BC.CN_BGN_DT -- 아직 방송 시작 전인 경우 (예고 방송)
ORDER BY
B.BNF_BGN_DT ASC -- 방송 시작 시간이 빠른 순 정렬
</select>
<!-- 라이브 쇼핑 알림 신청 상태 조회 -->
<select id="selectLiveShoppingNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="string">
SELECT
AGRE_AT -- 동의 여부
FROM
GC_BENEFIT_AGREE -- 혜택 동의 내역 테이블
WHERE
SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건
AND MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 조건
AND BNF_DV_CD = '070' -- 혜택 구분 코드 (라이브 쇼핑) 조건
AND BNF_AGRE_DV_CD = '010' -- 혜택 동의 구분 코드 (알림동의) 조건
</select>
<!-- 라이브 쇼핑 알림 신청 정보 삽입 (중복 시 업데이트) -->
<insert id="insertLiveShoppingNotification" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO">
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰 코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
AGRE_AT, -- 동의 여부
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{sopmalCd}, -- 쇼핑몰 코드
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
'070', -- 혜택 구분 코드 (라이브 쇼핑)
'010', -- 혜택 동의 구분 코드 (알림 동의)
#{agreAt}, -- 동의 여부
#{regusr}, -- 등록자 (회원 고유번호)
NOW() -- 현재 시간
)
ON DUPLICATE KEY UPDATE
BNF_DV_CD = #{bnfDvCd},
BNF_AGRE_DV_CD = #{bnfAgreDvCd},
AGRE_AT = #{agreAt}, -- 동의 여부 업데이트
REGUSR = #{regusr}, -- 수정자 (회원 고유번호)
REGIST_DT = NOW() -- 수정 시간 (현재 시간)
</insert>
<!-- 라이브쇼핑 알림 상태 조회 (기존 쿼리 - 필요시 유지) -->
<select id="getLvshopNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="string">
SELECT
AGRE_AT -- 동의 여부
FROM
GC_BENEFIT_AGREE -- 혜택 동의 내역 테이블
WHERE
SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건
AND MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 조건
AND BNF_INNB = #{bnfInnb} -- 혜택 고유번호 조건
AND BNF_DV_CD = '070' -- 혜택 구분 코드 (라이브 쇼핑) 조건
AND BNF_AGRE_DV_CD = '010'; -- 혜택 동의 구분 코드 (알림 동의) 조건
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '070' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 라이브쇼핑 혜택 참여 정보 삽입 -->
<insert id="insertLvshopBenefitParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 고유번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfPrtInnb}, -- 혜택 참여 고유번호
#{bnfInnb}, -- 혜택 고유번호
NOW(), -- 현재 시간
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
#{paidLeafCnt}, -- 참여 초록잎 개수
#{regusr}, -- 등록자 (회원 고유번호)
NOW() -- 현재 시간
)
</insert>
<!-- 라이브쇼핑 마일리지 적립 여부 확인 -->
<select id="checkLiveShoppingRewardReceived" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO" resultType="int">
SELECT COUNT(1)
FROM GC_BENEFIT_RECEIPT R
JOIN GC_BENEFIT_PARTCPTN P ON P.BNF_PRT_INNB = R.BNF_PRT_INNB
JOIN GC_BENEFIT B ON B.BNF_INNB = P.BNF_INNB
WHERE B.BNF_DV_CD = '070' <!-- 라이브쇼핑 혜택 -->
<!-- 회원 고유번호 -->
AND P.MBR_INNB = #{mbrInnb}
<!-- 회원 구분 코드 -->
AND P.MBR_DV_CD = #{mbrDvCd}
<!-- 쇼핑몰 코드 -->
<if test="sopmalCd != null and sopmalCd != ''">
AND B.SOPMAL_CD = #{sopmalCd}
</if>
<!-- 특정 혜택(방송)만 점검하고 싶을 때 -->
<if test="bnfInnb != null">
AND P.BNF_INNB = #{bnfInnb}
</if>
</select>
<!-- 라이브쇼핑 마일리지 적립 정보 삽입 -->
<insert id="insertLiveShoppingRewardReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
REGUSR, -- 등록자
REGIST_DT -- 등록 시간
) VALUES (
#{bnfRcvInnb}, -- 혜택 보상수령 고유번호
#{bnfPrtInnb}, -- 혜택 참여 고유번호
'07010', -- 보상 항목 구분 코드 (라이브 쇼핑 참여 보상)
'010', -- 보상 상품 구분 코드 (마일리지)
#{mlgRwdAmt}, -- 마일리지 금액
#{regusr}, -- 등록자 (회원 고유번호)
NOW() -- 현재 시간
)
</insert>
<!-- 라이브쇼핑 혜택 정보 조회 (기존 쿼리 - 필요시 유지) -->
<select id="selectLvshopInfo" parameterType="long" resultType="com.wb.domainserver.domain.gcone.bnft.lvshop.vo.BOLvshopVO">
SELECT
BNF_INNB, -- 혜택 고유번호
SOPMAL_CD, -- 쇼핑몰 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_SJ, -- 혜택 제목
USE_AT, -- 사용 여부
BNF_BGN_DT, -- 혜택 시작 일시
BNF_END_DT -- 혜택 종료 일시
-- 필요한 컬럼 추가
FROM
GC_BENEFIT -- 혜택 기본 정보 테이블
WHERE
BNF_INNB = #{bnfInnb}; -- 혜택 고유번호 조건
</select>
</mapper>

View File

@@ -0,0 +1,344 @@
<?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.wb.domainserver.domain.gcone.bnft.oxquiz.mapper.BOOxquizMapper">
<!-- OX 퀴즈 기본 정보 조회 -->
<select id="selectOxquizBasicInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 설정 고유번호
BNF_SJ, -- 혜택 제목
SCR_REPRSNT_IMG, -- 화면 대표 이미지
BNF_BGN_DT, -- 진행기간 시작일시
BNF_END_DT, -- 진행기간 종료일시
BNF_WORDS_CN -- 혜택 안내
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '130' -- OX 퀴즈 혜택 구분 코드
AND USE_AT = 'Y'
AND DATE(NOW()) BETWEEN DATE(BNF_BGN_DT) AND DATE(BNF_END_DT)
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
]]>
</select>
<select id="selectOxquizDetailInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_QUIZ_INNB, -- 퀴즈 고유번호
QUIZ_CN, -- 퀴즈 내용
QUIZ_CNSR, -- 퀴즈 정답
HINT_URL, -- 힌트 url
QUIZ_SEQ -- 퀴즈 순서
FROM (
SELECT
c.*,
ROW_NUMBER() OVER (PARTITION BY c.BNF_INNB ORDER BY c.BNF_QUIZ_INNB) as QUIZ_SEQ
FROM
GC_BENEFIT_OXQUIZ c
WHERE
c.DEL_AT = 'N'
) numbered
WHERE
BNF_INNB = #{bnfInnb}
ORDER BY
QUIZ_SEQ ASC
]]>
</select>
<!-- 사용자의 OX 퀴즈 참여 정보 조회 -->
<select id="selectUserOxquizParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
p.BNF_INNB, -- 혜택 설정 고유번호
po.BNF_QUIZ_INNB, -- 퀴즈 고유번호
po.ANSW_CN AS USER_ANSWER, -- 사용자 답변
CASE
WHEN po.ANSW_CN = c.QUIZ_CNSR THEN 'O'
WHEN po.ANSW_CN IS NOT NULL THEN 'X'
ELSE NULL
END AS IS_CORRECT -- 정답 여부
FROM
GC_BENEFIT_PARTCPTN p
JOIN GC_BENEFIT_PARTCPTN_OXQUIZ po ON p.BNF_PRT_INNB = po.BNF_PRT_INNB
JOIN GC_BENEFIT_OXQUIZ c ON po.BNF_QUIZ_INNB = c.BNF_QUIZ_INNB
WHERE
p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
]]>
</select>
<!-- 사용자 당일 참여 조회 -->
<select id="selectTodayParticipationCount" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="int">
<![CDATA[
SELECT COUNT(*)
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb}
AND DATE(BNF_PRT_DT) = CURDATE()
]]>
</select>
<!-- 사용자가 맞춘 정답 수 조회 -->
<select id="selectUserCorrectAnswerCount" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="int">
<![CDATA[
SELECT COUNT(*)
FROM GC_BENEFIT_PARTCPTN p
JOIN GC_BENEFIT_PARTCPTN_OXQUIZ po ON p.BNF_PRT_INNB = po.BNF_PRT_INNB
JOIN GC_BENEFIT_OXQUIZ o ON po.BNF_QUIZ_INNB = o.BNF_QUIZ_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND po.ANSW_CN = o.QUIZ_CNSR
]]>
</select>
<!-- 특정 보상 코드에 해당하는 보상 정보 조회 -->
<select id="selectRewardInfoByCode" parameterType="map" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB -- 쿠폰 고유번호
FROM
GC_BENEFIT_REWARD
WHERE
BNF_RWD_CATE_DV_CD = #{rewardCode}
AND BNF_INNB = #{bnfInnb}
]]>
</select>
<!-- 현재 퀴즈 개수 조회 -->
<select id="selectCurrentQuizCount" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="int">
<![CDATA[
SELECT COUNT(*)
FROM GC_BENEFIT_OXQUIZ A
JOIN GC_BENEFIT B ON A.BNF_INNB = B.BNF_INNB
WHERE A.BNF_INNB = #{bnfInnb}
AND A.DEL_AT = 'N'
AND B.SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 특정 번호의 퀴즈 조회 -->
<select id="selectCurrentOxquiz" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_QUIZ_INNB, -- 혜택 퀴즈 고유번호
QUIZ_CN, -- 퀴즈 내용
QUIZ_CNSR, -- 퀴즈 정답
HINT_URL -- 힌트보기 링크
FROM
GC_BENEFIT_OXQUIZ
WHERE
BNF_INNB = #{bnfInnb}
AND BNF_QUIZ_INNB = #{bnfQuizInnb}
]]>
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '130' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- OX 퀴즈 참여 정보 저장 (초록잎 적립 포함) -->
<insert id="insertOxquizParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
BNF_PRT_DT, -- 혜택 참여일시
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
PRT_LEAF_CNT, -- 참여 초록잎 개수 (추가)
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfPrtInnb},
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{paidLeafCnt}, -- 초록잎 지급량 (추가)
#{regusr},
NOW()
)
]]>
</insert>
<!-- OX 퀴즈 현재 퀴즈 번호 -->
<select id="selectCurrentQuizNumber" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="int">
<![CDATA[
SELECT
CASE
WHEN MIN(not_participated.QUIZ_SEQ) IS NULL THEN
(SELECT MAX(QUIZ_SEQ) FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY o.BNF_INNB ORDER BY o.BNF_QUIZ_INNB) as QUIZ_SEQ
FROM GC_BENEFIT_OXQUIZ o
WHERE o.BNF_INNB = #{bnfInnb} AND o.DEL_AT = 'N'
) all_quiz)
ELSE MIN(not_participated.QUIZ_SEQ)
END as current_quiz
FROM (
SELECT
o.*,
ROW_NUMBER() OVER (PARTITION BY o.BNF_INNB ORDER BY o.BNF_QUIZ_INNB) as QUIZ_SEQ
FROM
GC_BENEFIT_OXQUIZ o
WHERE
o.BNF_INNB = #{bnfInnb}
AND o.DEL_AT = 'N'
AND NOT EXISTS (
SELECT 1
FROM GC_BENEFIT_PARTCPTN p
JOIN GC_BENEFIT_PARTCPTN_OXQUIZ po ON p.BNF_PRT_INNB = po.BNF_PRT_INNB
WHERE p.MBR_INNB = #{mbrInnb}
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb}
AND po.BNF_QUIZ_INNB = o.BNF_QUIZ_INNB
)
) not_participated
]]>
</select>
<!-- OX 퀴즈 참여 상세 정보 저장 -->
<insert id="insertOxquizParticipationDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO">
<selectKey keyProperty="bnfPrtQuizInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_QUIZ_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN_OXQUIZ
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN_OXQUIZ (
BNF_PRT_QUIZ_INNB, -- 혜택 참여 OX퀴즈 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_QUIZ_INNB, -- 혜택 퀴즈 고유번호
ANSW_CN, -- 답변내용
CNSR_AT -- 정답여부
) VALUES (
#{bnfPrtQuizInnb},
#{bnfPrtInnb},
#{bnfQuizInnb},
#{answCn},
#{cnsrAt}
)
]]>
</insert>
<!-- 알림 상태 조회 -->
<select id="selectNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
AGRE_AT -- 동의여부
FROM
GC_BENEFIT_AGREE
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '130' -- OX 퀴즈 혜택 구분 코드
AND BNF_AGRE_DV_CD = '010' -- 알림동의 구분 코드
]]>
</select>
<!-- 알림 상태 변경 -->
<update id="updateNotificationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO">
<![CDATA[
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
BNF_INNB, -- 혜택 설정 고유번호
AGRE_AT, -- 동의여부
REGUSR, -- 등록자
REGIST_DT -- 등록일시
)
SELECT
#{sopmalCd},
#{mbrInnb},
#{mbrDvCd},
'130', -- OX 퀴즈 혜택 구분 코드
'010', -- 알림동의 구분 코드
#{bnfInnb},
#{agreAt},
#{regusr},
NOW()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1
FROM GC_BENEFIT_AGREE
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '130'
AND BNF_AGRE_DV_CD = '010'
);
UPDATE GC_BENEFIT_AGREE
SET
AGRE_AT = #{agreAt},
REGUSR = #{regusr},
REGIST_DT = NOW()
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '130'
AND BNF_AGRE_DV_CD = '010';
]]>
</update>
<!-- 보상 정보 조회 -->
<select id="selectRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB -- 쿠폰 고유번호
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb}
AND BNF_RWD_CATE_DV_CD IN ('13010', '13020', '13030') -- OX 퀴즈 보상 코드
]]>
</select>
<!-- 보상 지급 -->
<insert id="insertReward" parameterType="com.wb.domainserver.domain.gcone.bnft.oxquiz.vo.BOOxquizVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰 고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록일시
) VALUES (
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{regusr},
NOW()
)
]]>
</insert>
</mapper>

View File

@@ -0,0 +1,933 @@
<?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.wb.domainserver.domain.gcone.bnft.purstmp.mapper.BOPurstmpStampMapper">
<!-- gc_order 테이블에서 매장 구매 정보 조회 (스탬프 적립/차감 처리용) -->
<select id="selectStoreOrdersForStamp"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- gc_order 테이블에서 매장 구매 정보 조회 (디바이스 등록일 기준 조회기간 적용)
SELECT
O.ORDR_INNB AS ORDR_INNB, -- 주문 고유번호
O.STR_INNB AS STR_INNB, -- 매장 고유번호
O.RL_SETLE_AMT AS RL_SETLE_AMT, -- 실 결제금액
CASE
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
ELSE CONCAT('매장_', O.STR_INNB)
END AS STR_NM, -- 매장명
DATE_FORMAT(O.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS SETLE_COMPT_DT, -- 결제완료일시
O.SLE_ENVRN_CD AS SLE_ENVRN_CD, -- 판매환경코드
O.SKN_ENVRN_CD AS SKN_ENVRN_CD, -- 스킨환경코드
O.ORDR_STTUS_CD AS ORDR_STTUS_CD, -- 주문상태코드 추가
CASE
WHEN O.ORDR_STTUS_CD IN ('25', '30', '35', '40', '45', '50', '55', '60', '65', '70', '75', '80') THEN 'ACCUMULATE'
WHEN O.ORDR_STTUS_CD IN ('85', '95', '99') THEN 'DEDUCT'
ELSE 'IGNORE'
END AS STAMP_ACTION -- 스탬프 처리 액션 (적립/차감/무시)
FROM
GC_ORDER O
LEFT JOIN
GC_STORE ST ON O.STR_INNB = ST.STR_INNB
LEFT JOIN
GC_BENEFIT_STMP BS ON O.ORDR_INNB = BS.ORDR_INNB
AND O.MBR_INNB = BS.MBR_INNB
AND O.SOPMAL_CD = BS.SOPMAL_CD
-- 회원 디바이스 정보 JOIN 추가 (조회 기간 산정용)
LEFT JOIN
GC_MEMBER_DEVICE_INFO MDI ON O.MBR_INNB = MDI.MBR_INNB
AND O.MBR_DV_CD = MDI.MBR_DV_CD
AND O.SOPMAL_CD = MDI.SOPMAL_CD
WHERE
O.MBR_INNB = #{mbrInnb}
AND O.MBR_DV_CD = #{mbrDvCd}
AND O.SOPMAL_CD = #{sopmalCd}
AND O.USE_AT = 'Y'
AND (
-- 스탬프 적립 대상 (정상 결제완료 상태)
O.ORDR_STTUS_CD IN ('25', '30', '35', '40', '45', '50', '55', '60', '65', '70', '75', '80')
OR
-- 스탬프 차감 대상 (결제취소/주문무효/결제실패)
O.ORDR_STTUS_CD IN ('85')
)
AND (
-- gc_order 참고사항: 매장 구매금액 조건
O.SLE_ENVRN_CD IN ('S1', 'S2', 'S3')
OR O.SKN_ENVRN_CD = 'POS'
)
-- 차감 대상은 이미 처리된 주문도 포함
AND (
(O.ORDR_STTUS_CD IN ('25', '30', '35', '40', '45', '50', '55', '60', '65', '70', '75', '80') AND BS.ORDR_INNB IS NULL) -- 적립: 미처리만
OR
(O.ORDR_STTUS_CD IN ('85') AND BS.ORDR_INNB IS NOT NULL AND BS.REFUND_AT = 'N') -- 차감: 이미 적립된 것만
)
<if test="strInnb != null and strInnb != '' and strInnb != 'null'">
AND O.STR_INNB = #{strInnb}
</if>
AND O.SETLE_COMPT_DT IS NOT NULL
-- 디바이스 등록일부터 현재까지 조회 (디바이스 정보 없으면 전체 조회)
<if test="true">
AND (MDI.REGIST_DT IS NULL OR O.SETLE_COMPT_DT &gt;= DATE(MDI.REGIST_DT))
</if>
AND O.SETLE_COMPT_DT &lt;= NOW() -- 현재까지
ORDER BY
O.SETLE_COMPT_DT DESC
</select>
<!-- 매장별 적립카드 조회 (유효기간 내, 교환권 포함) - 정렬 수정 -->
<select id="selectStampCards" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 매장별 진행 중인 스탬프 적립카드와 교환권 정보 조회 (쿠폰 정보 포함, 매장명 개선)
SELECT
SE.BNF_EXTIKET_INNB AS BNF_EXTIKET_INNB, -- 교환권 고유번호
SE.SOPMAL_CD AS SOPMAL_CD, -- 쇼핑몰코드
SE.STR_INNB AS STR_INNB, -- 매장 고유번호
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', SE.STR_INNB)
END AS STR_NM, -- 매장명 (gc_store 테이블 연동)
SE.MBR_INNB AS MBR_INNB, -- 회원 고유번호
SE.MBR_DV_CD AS MBR_DV_CD, -- 회원 구분코드
SE.EXTIKET_STMP_CNT AS EXTIKET_STMP_CNT, -- 교환권 스탬프 수
DATE_FORMAT(SE.STMP_VALID_DT, '%Y-%m-%d') AS STMP_VALID_DT, -- 스탬프 유효일시
SE.EXCHNG_AT AS EXCHNG_AT, -- 교환여부
SE.COUPON_INNB AS COUPON_INNB, -- 쿠폰고유번호
DATE_FORMAT(SE.REGIST_DT, '%Y-%m-%d') AS REGIST_DT, -- 등록일시
CASE
WHEN SE.EXCHNG_AT = 'Y' THEN 'COMPLETED'
WHEN NOW() &gt; SE.STMP_VALID_DT THEN 'EXPIRED'
ELSE 'ACTIVE'
END AS STATUS,
CASE
WHEN SE.COUPON_INNB IS NOT NULL THEN 'Y'
ELSE 'N'
END AS HAS_COUPON
FROM
GC_BENEFIT_STMP_EXTIKET SE
LEFT JOIN
GC_STORE ST ON SE.STR_INNB = ST.STR_INNB
WHERE
SE.MBR_INNB = #{mbrInnb}
AND SE.MBR_DV_CD = #{mbrDvCd}
AND SE.SOPMAL_CD = #{sopmalCd}
<if test="strInnb != null and strInnb != '' and strInnb > 0">
AND SE.STR_INNB = #{strInnb}
</if>
AND (
-- 유효기간 내의 카드이거나 교환권 발급 완료된 카드
(NOW() &lt;= SE.STMP_VALID_DT OR SE.EXCHNG_AT = 'Y')
)
ORDER BY
-- 교환되지 않은 카드를 먼저 표시
CASE WHEN SE.EXCHNG_AT = 'N' THEN 0 ELSE 1 END ASC,
SE.REGIST_DT ASC
</select>
<!-- 보유한 적립카드 개수 조회 (교환권 발급 완료 건도 포함) -->
<select id="selectTotalCardCount" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO" resultType="int">
-- 보유한 적립카드 개수 조회 (교환권 발급 완료 건도 포함)
SELECT
COUNT(*) AS CARD_COUNT
FROM
GC_BENEFIT_STMP_EXTIKET SE
WHERE
SE.MBR_INNB = #{mbrInnb}
AND SE.MBR_DV_CD = #{mbrDvCd}
AND SE.SOPMAL_CD = #{sopmalCd}
AND NOW() &lt;= SE.STMP_VALID_DT
</select>
<!-- 스탬프 적립 내역 조회 -->
<select id="selectRecentPurchasesWithStamps"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 최근 스탬프 적립 내역 조회 (매장명 연동)
SELECT
BS.BNF_STMP_INNB AS BNF_STMP_INNB,
BS.ORDR_INNB AS ORDR_INNB,
BS.REFUND_AT AS REFUND_AT,
BS.PURCHS_AMT AS PURCHS_AMT,
BS.RL_SETLE_AMT AS RL_SETLE_AMT,
BS.STMP_CNT AS STMP_CNT,
BS.AMT_FOR_CHG AS AMT_FOR_CHG,
DATE_FORMAT(BS.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS SETLE_COMPT_DT,
DATE_FORMAT(BS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT,
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', BS.STR_INNB)
END AS BRANCH_NAME -- 매장명 (gc_store 테이블 연동)
FROM
GC_BENEFIT_STMP BS
LEFT JOIN
GC_STORE ST ON BS.STR_INNB = ST.STR_INNB
WHERE
BS.MBR_INNB = #{mbrInnb}
AND BS.MBR_DV_CD = #{mbrDvCd}
AND BS.SOPMAL_CD = #{sopmalCd}
AND (BS.REFUND_AT IS NULL OR BS.REFUND_AT != 'Y') -- 환불된 건 제외
<if test="strInnb != null and strInnb != ''">
AND BS.STR_INNB = #{strInnb}
</if>
AND BS.REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 12 MONTH)
ORDER BY
BS.REGIST_DT DESC
LIMIT 20
</select>
<!-- 스탬프 적립 내역 추가 로딩 (스크롤 시 20개 추가) - 컬럼 추가 -->
<select id="selectMorePurchasesWithStamps"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 스크롤 시 추가 로딩할 스탬프 적립 내역 조회
SELECT
BS.BNF_STMP_INNB AS BNF_STMP_INNB,
BS.ORDR_INNB AS ORDR_INNB,
BS.REFUND_AT AS REFUND_AT,
BS.PURCHS_AMT AS PURCHS_AMT,
BS.RL_SETLE_AMT AS RL_SETLE_AMT,
BS.STMP_CNT AS STMP_CNT,
BS.AMT_FOR_CHG AS AMT_FOR_CHG,
DATE_FORMAT(BS.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS SETLE_COMPT_DT,
DATE_FORMAT(BS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT,
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', BS.STR_INNB)
END AS BRANCH_NAME
FROM
GC_BENEFIT_STMP BS
LEFT JOIN
GC_STORE ST ON BS.STR_INNB = ST.STR_INNB
WHERE
BS.MBR_INNB = #{mbrInnb}
AND BS.MBR_DV_CD = #{mbrDvCd}
AND BS.SOPMAL_CD = #{sopmalCd}
AND (BS.REFUND_AT IS NULL OR BS.REFUND_AT != 'Y') -- 환불된 건 제외
<if test="strInnb != null and strInnb != ''">
AND BS.STR_INNB = #{strInnb}
</if>
AND BS.REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 12 MONTH)
<if test="lastStmpInnb != null and lastStmpInnb &gt; 0">
AND BS.REGIST_DT &lt; (
SELECT REGIST_DT
FROM GC_BENEFIT_STMP
WHERE BNF_STMP_INNB = #{lastStmpInnb}
)
</if>
ORDER BY
BS.REGIST_DT DESC
LIMIT 20
</select>
<!-- 새로운 스탬프 적립 기록 추가 -->
<insert id="insertNewPurchase" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- 새로운 구매 기록 추가 및 스탬프 적립
INSERT INTO GC_BENEFIT_STMP (
SOPMAL_CD, -- 쇼핑몰코드
STR_INNB, -- 매장고유번호
ORDR_INNB, -- 주문 고유번호
REFUND_AT, -- 환불여부
MBR_INNB, -- 회원고유번호
MBR_DV_CD, -- 회원구분코드
PURCHS_INNB, -- 구매식별 고유번호
PURCHS_AMT, -- 구매금액
RL_SETLE_AMT, -- 실 결제금액
SETLE_COMPT_DT, -- 결제완료일시
STMP_CNT, -- 적립 스탬프 수
AMT_FOR_CHG, -- 충전필요금액
REGIST_DT -- 등록일시
) VALUES (
#{sopmalCd},
#{strInnb},
#{ordrInnb},
IFNULL(#{refundAt}, 'N'),
#{mbrInnb},
#{mbrDvCd},
#{purchsInnb},
#{purchsAmt},
#{rlSetleAmt},
#{setleCmptDt},
#{stmpCnt},
#{amtForChg},
NOW()
)
</insert>
<!-- 새로운 적립카드(교환권) 생성 -->
<insert id="insertExchangeTicket"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
useGeneratedKeys="true"
keyProperty="bnfExtiketInnb">
-- 새로운 교환권(스탬프 적립카드) 생성
INSERT INTO GC_BENEFIT_STMP_EXTIKET (
SOPMAL_CD,
STR_INNB,
MBR_INNB,
MBR_DV_CD,
EXTIKET_STMP_CNT,
STMP_VALID_DT,
EXCHNG_AT,
REGIST_DT
) VALUES (
#{sopmalCd},
#{strInnb},
#{mbrInnb},
#{mbrDvCd},
#{extiketStmpCnt},
<choose>
<when test="stmpValidDt != null">
#{stmpValidDt}
</when>
<otherwise>
DATE_ADD(NOW(), INTERVAL 12 MONTH) -- 기본: 현재시점으로부터 12개월
</otherwise>
</choose>,
IFNULL(#{exchngAt}, 'N'),
NOW()
)
</insert>
<!-- Step 1: 교환권 완료 대상 PK 조회 -->
<select id="selectExchangeTicketForComplete"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="Long">
-- 교환권 완료 처리 대상 PK 조회
SELECT
BNF_EXTIKET_INNB
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'N'
AND EXTIKET_STMP_CNT = #{requiredStampCnt}
AND NOW() &lt;= STMP_VALID_DT
ORDER BY
REGIST_DT ASC
LIMIT 1
</select>
<!-- Step 2: PK 기준 교환권 완료 처리 (쿠폰 포함) -->
<update id="completeExchangeTicketWithCoupon"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- PK 기준 교환권 완료 처리 (쿠폰 정보 포함)
UPDATE
GC_BENEFIT_STMP_EXTIKET
SET
EXCHNG_AT = 'Y',
EXCHNG_DT = NOW(),
COUPON_INNB = #{couponInnb},
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- ✅ 새로 추가: 쿠폰 번호만 업데이트하는 쿼리 -->
<update id="updateExchangeTicketCouponOnly"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- 교환권에 쿠폰 번호만 업데이트
UPDATE
GC_BENEFIT_STMP_EXTIKET
SET
COUPON_INNB = #{couponInnb},
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND EXCHNG_AT = 'Y' -- 이미 완료된 상태에서만 업데이트
-- 추가 조건 제거하여 업데이트 확률 높임
</update>
<!-- 교환권 사용 완료 후 적립카드 삭제 처리 -->
<update id="deleteCompletedExchangeTicket" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- 교환권 사용 완료 후 적립카드 삭제 처리
DELETE FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND EXCHNG_AT = 'Y'
</update>
<!-- 총 미교환 스탬프 수 조회 -->
<select id="selectTotalUnexchangedStamps"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
-- ✅ 수정: 실제 사용 가능한 스탬프 수 조회 (완료된 교환권의 스탬프만 제외)
SELECT
GREATEST(0,
(
-- 총 적립된 스탬프 수
SELECT IFNULL(SUM(STMP_CNT), 0)
FROM GC_BENEFIT_STMP
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND REFUND_AT = 'N'
) - (
-- 완료된 교환권의 스탬프만 차감 (진행 중인 것은 제외)
SELECT IFNULL(SUM(EXTIKET_STMP_CNT), 0)
FROM GC_BENEFIT_STMP_EXTIKET
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'Y' -- 완료된 교환권만 차감
)
) AS AVAILABLE_STAMPS
</select>
<!-- 잔액 조회 수정 (동적 스탬프 기준 금액 적용) -->
<select id="selectRemainingAmount"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="java.lang.Double">
-- 간단한 잔액 조회 (0으로 고정 - 매번 새로운 구매로 처리)
SELECT 0.0 AS REMAINING_AMOUNT
</select>
<!-- 교환권 갯수 조회 -->
<select id="selectTotalRowCountFromBenefitExtiket"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
-- 특정 회원의 유효한 교환권 개수 조회
SELECT
COUNT(*) AS TOTAL_COUNT
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
<if test="strInnb != null and strInnb != ''">
AND STR_INNB = #{strInnb}
</if>
AND NOW() &lt;= STMP_VALID_DT
</select>
<!-- 스탬프 화면 정보 조회 (gc_benefit_content 테이블 연동) -->
<select id="selectPurstmpScreenInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 스탬프 적립 이벤트의 화면 정보 조회
SELECT
B.BNF_INNB AS BNF_INNB, -- 혜택 설정 고유번호
BC.CN_SJ AS CN_SJ, -- 컨텐츠 제목
BC.IMG_FIL_COURS AS IMG_FIL_COURS, -- 이미지 파일 경로
BC.WORDS_CN AS WORDS_CN -- 안내 내용
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_CONTENT BC ON B.BNF_INNB = BC.BNF_INNB
WHERE
B.BNF_DV_CD = '140' -- 스탬프 적립 이벤트 코드 (140)
AND B.SOPMAL_CD = #{sopmalCd}
ORDER BY
B.BNF_INNB DESC
LIMIT 1
</select>
<!-- 관리자 설정 이달의 선물 정보 조회 -->
<select id="selectMonthlyGiftInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB AS BNF_INNB, -- 혜택 설정 고유번호
BC.COUPON_INNB AS COUPON_INNB -- 쿠폰 고유번호
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_REWARD BC ON B.BNF_INNB = BC.BNF_INNB
WHERE
B.BNF_DV_CD = '140' -- 스탬프 적립 이벤트 코드 (140)
AND B.SOPMAL_CD = #{sopmalCd}
ORDER BY
B.BNF_INNB DESC
</select>
<!-- selectCurrentExchangeTicket 수정 -->
<select id="selectCurrentExchangeTicket"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_EXTIKET_INNB AS bnfExtiketInnb,
EXTIKET_STMP_CNT AS extiketStmpCnt
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'N'
AND EXTIKET_STMP_CNT &lt; 10
AND NOW() &lt;= STMP_VALID_DT
ORDER BY
REGIST_DT ASC
LIMIT 1
</select>
<!-- 교환권 스탬프 수 업데이트 -->
<update id="updateExchangeTicketStampCount">
-- 교환권의 스탬프 수를 업데이트
UPDATE
GC_BENEFIT_STMP_EXTIKET
SET
EXTIKET_STMP_CNT = EXTIKET_STMP_CNT + #{newStampCount},
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{extiketInnb}
</update>
<!-- 쿠폰(교환권) 목록 조회 - 정렬 수정 -->
<select id="selectCouponList"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 회원의 쿠폰(교환권) 목록 조회 (쿠폰 정보 포함, 매장명 개선)
SELECT
SE.BNF_EXTIKET_INNB AS bnfExtiketInnb,
SE.SOPMAL_CD AS sopmalCd,
SE.STR_INNB AS strInnb,
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', SE.STR_INNB)
END AS branchName, -- 매장명 (gc_store 테이블 연동)
SE.MBR_INNB AS mbrInnb,
SE.MBR_DV_CD AS mbrDvCd,
SE.EXTIKET_STMP_CNT AS extiketStmpCnt,
DATE_FORMAT(SE.STMP_VALID_DT, '%Y-%m-%d %H:%i:%s') AS stmpValidDt,
SE.EXCHNG_AT AS exchngAt,
DATE_FORMAT(SE.EXCHNG_DT, '%Y-%m-%d %H:%i:%s') AS exchngDt,
DATE_FORMAT(SE.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS registDt,
DATE_FORMAT(SE.UPDT_DT, '%Y-%m-%d %H:%i:%s') AS updtDt,
SE.COUPON_INNB AS couponInnb,
CASE
WHEN SE.EXCHNG_AT = 'N' AND NOW() &lt;= SE.STMP_VALID_DT AND SE.EXTIKET_STMP_CNT >= 10 THEN 'Y'
ELSE 'N'
END AS exchangeable,
CASE
WHEN SE.COUPON_INNB IS NOT NULL THEN 'Y'
ELSE 'N'
END AS hasCoupon
FROM
GC_BENEFIT_STMP_EXTIKET SE
LEFT JOIN
GC_STORE ST ON SE.STR_INNB = ST.STR_INNB
WHERE
SE.MBR_INNB = #{mbrInnb}
AND SE.MBR_DV_CD = #{mbrDvCd}
AND SE.SOPMAL_CD = #{sopmalCd}
<if test="strInnb != null and strInnb != ''">
AND SE.STR_INNB = #{strInnb}
</if>
ORDER BY
-- 교환되지 않은 쿠폰을 먼저 표시
CASE WHEN SE.EXCHNG_AT = 'N' THEN 0 ELSE 1 END ASC,
-- 교환되지 않은 쿠폰들은 최신순으로, 교환된 쿠폰들도 최신순으로
SE.REGIST_DT DESC
</select>
<!-- 특정 교환권 정보 조회 -->
<select id="selectSpecificVoucherInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 특정 교환권의 상세 정보 조회
SELECT
SE.BNF_EXTIKET_INNB AS bnfExtiketInnb,
SE.SOPMAL_CD AS sopmalCd,
SE.STR_INNB AS strInnb,
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', SE.STR_INNB)
END AS branchName,
SE.MBR_INNB AS mbrInnb,
SE.MBR_DV_CD AS mbrDvCd,
SE.EXTIKET_STMP_CNT AS extiketStmpCnt,
DATE_FORMAT(SE.STMP_VALID_DT, '%Y-%m-%d %H:%i:%s') AS stmpValidDt,
SE.EXCHNG_AT AS exchngAt,
DATE_FORMAT(SE.EXCHNG_DT, '%Y-%m-%d %H:%i:%s') AS exchngDt,
DATE_FORMAT(SE.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS registDt,
DATE_FORMAT(SE.UPDT_DT, '%Y-%m-%d %H:%i:%s') AS updtDt
FROM
GC_BENEFIT_STMP_EXTIKET SE
LEFT JOIN
GC_STORE ST ON SE.STR_INNB = ST.STR_INNB
WHERE
SE.BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND SE.MBR_INNB = #{mbrInnb}
AND SE.MBR_DV_CD = #{mbrDvCd}
AND SE.SOPMAL_CD = #{sopmalCd}
</select>
<!-- 기존 구매 데이터 개수 조회 (더 정확한 조건) -->
<select id="countExistingPurchaseData"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
-- 특정 회원의 기존 구매 데이터 개수 확인
SELECT
COUNT(*) AS PURCHASE_COUNT
FROM
GC_BENEFIT_STMP
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 6 MONTH) -- 최근 6개월 데이터만 확인
</select>
<!-- 기존 교환권 데이터 개수 조회 (더 정확한 조건) -->
<select id="countExistingTicketData"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
-- 특정 회원의 기존 교환권 데이터 개수 확인
SELECT
COUNT(*) AS TICKET_COUNT
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND REGIST_DT &gt;= DATE_SUB(NOW(), INTERVAL 6 MONTH) -- 최근 6개월 데이터만 확인
</select>
<!-- 스탬프 교환 보상 정보 조회 (gc_benefit_reward에서) -->
<select id="selectStampExchangeReward"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 스탬프 교환 보상 정보 조회 (쿠폰/마일리지)
SELECT
br.BNF_RWD_CATE_DV_CD AS BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD AS BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT AS MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB AS COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS ITM_NM -- 쿠폰 이름
FROM
GC_BENEFIT_REWARD br
LEFT JOIN
GC_COUPON_SNDNG cs ON br.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
br.BNF_INNB = #{bnfInnb}
AND br.BNF_RWD_CATE_DV_CD LIKE '14%' -- 모바일스탬프(140) 관련 보상
ORDER BY
br.BNF_RWD_CATE_DV_CD
LIMIT 1
</select>
<!-- 스탬프 혜택 참여 정보 저장 -->
<insert id="insertStampParticipation"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
useGeneratedKeys="true"
keyProperty="bnfPrtInnb"
keyColumn="BNF_PRT_INNB">
-- 스탬프 적립 시 혜택 참여 정보 저장
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 고유 번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유 번호
MBR_DV_CD, -- 회원 구분 코드
STR_INNB, -- 매장 고유번호 (스탬프용)
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{strInnb},
#{regusr},
NOW()
)
</insert>
<!-- 스탬프 혜택 설정 정보 조회 -->
<select id="selectStampBenefitInfo"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
-- 스탬프 혜택 설정 정보 조회
SELECT
BNF_INNB, -- 혜택 고유 번호
USE_AT, -- 사용여부
BNF_BGN_DT, -- 진행기간 시작일시
BNF_END_DT, -- 진행기간 종료일시
SCR_REPRSNT_IMG, -- 화면 대표 이미지 경로
SCR_RWD_IMG, -- 보상 이미지 경로
BNF_WORDS_CN -- 혜택 안내 문구
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '140' -- 모바일스탬프 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
BNF_INNB DESC
LIMIT 1
]]>
</select>
<!-- 혜택 보상 영수증 저장 수정 -->
<insert id="insertMileageReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
useGeneratedKeys="true" keyProperty="bnfRcvInnb" keyColumn="BNF_RCV_INNB">
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{regusr},
NOW()
)
</insert>
<!-- Step 2: PK 기준 교환권 완료 처리 -->
<update id="completeExchangeTicketByPk"
parameterType="Long">
-- PK 기준 교환권 완료 처리
UPDATE
GC_BENEFIT_STMP_EXTIKET
SET
EXCHNG_AT = 'Y',
EXCHNG_DT = NOW(),
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
</update>
<!-- 스탬프 적립 기준 금액 조회 (gc_benefit_chg_config에서) -->
<select id="selectStampAccumulationAmount"
parameterType="String"
resultType="java.lang.Double">
-- 스탬프 적립 기준 금액 조회 (gc_benefit_chg_config 테이블에서)
SELECT
AMT_FOR_CHG AS AMT_FOR_CHG
FROM
GC_BENEFIT_CHG_CONFIG
WHERE
SOPMAL_CD = #{sopmalCd}
AND BNF_DV_CD = '140' -- 모바일스탬프 구분 코드
LIMIT 1
</select>
<!-- 아직 스탬프 적립되지 않은 구매건만 조회 -->
<select id="selectUnprocessedStoreOrders"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 아직 스탬프 적립되지 않은 매장 구매건만 조회
SELECT
O.ORDR_INNB AS ordrInnb, -- 주문 고유번호
O.STR_INNB AS strInnb, -- 매장 고유번호
O.RL_SETLE_AMT AS rlSetleAmt, -- 실 결제금액
CASE
WHEN ST.STR_NM IS NOT NULL THEN ST.STR_NM
WHEN ST.TENTCPN_NM IS NOT NULL THEN ST.TENTCPN_NM
ELSE CONCAT('매장_', O.STR_INNB)
END AS strNm, -- 매장명
DATE_FORMAT(O.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS setleComptDt, -- 결제완료일시
O.SLE_ENVRN_CD AS sleEnvrnCd, -- 판매환경코드
O.SKN_ENVRN_CD AS sknEnvrnCd -- 스킨환경코드
FROM
GC_ORDER O
LEFT JOIN
GC_STORE ST ON O.STR_INNB = ST.STR_INNB
LEFT JOIN
GC_BENEFIT_STMP BS ON O.ORDR_INNB = BS.PURCHS_INNB
AND O.MBR_INNB = BS.MBR_INNB
AND O.MBR_DV_CD = BS.MBR_DV_CD
AND O.SOPMAL_CD = BS.SOPMAL_CD
WHERE
O.MBR_INNB = #{mbrInnb}
AND O.MBR_DV_CD = #{mbrDvCd}
AND O.SOPMAL_CD = #{sopmalCd}
AND O.USE_AT = 'Y'
AND O.ORDR_STTUS_CD IN ('25', '30', '35', '40', '45', '50', '55', '60', '65', '70', '75', '80') -- 결제완료 이후 상태만
AND (
-- gc_order 참고사항: 매장 구매금액 조건
O.SLE_ENVRN_CD IN ('S1', 'S2', 'S3')
OR O.SKN_ENVRN_CD = 'POS'
)
<if test="strInnb != null and strInnb != '' and strInnb != 'null'">
AND O.STR_INNB = #{strInnb}
</if>
AND O.SETLE_COMPT_DT IS NOT NULL
AND O.SETLE_COMPT_DT &gt;= DATE_SUB(NOW(), INTERVAL 12 MONTH) -- 최근 12개월 데이터만
AND BS.BNF_STMP_INNB IS NULL -- 아직 스탬프 적립 기록이 없는 주문만
ORDER BY
O.SETLE_COMPT_DT DESC
</select>
<!-- 첫 스탬프 적립일 조회 -->
<select id="selectFirstStampAccumulationDate"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="java.sql.Date">
-- 해당 매장의 첫 스탬프 적립일 조회
SELECT
MIN(DATE(REGIST_DT)) AS FIRST_STAMP_DATE
FROM
GC_BENEFIT_STMP
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
</select>
<!-- 특정 주문으로 적립된 스탬프 기록 조회 -->
<select id="selectStampsByPurchaseOrder"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_STMP_INNB,
STMP_CNT,
REFUND_AT, -- EXCHNG_AT 대신 REFUND_AT 사용
ORDR_INNB
FROM
GC_BENEFIT_STMP
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
AND STR_INNB = #{strInnb}
AND REFUND_AT = 'N' -- 환불되지 않은 기록만 조회
</select>
<!-- 스탬프 기록 삭제 → 환불 처리로 변경 -->
<update id="updateStampRefundStatus" parameterType="Long">
-- 스탬프 환불 처리 (삭제 대신 상태 변경)
UPDATE GC_BENEFIT_STMP
SET
REFUND_AT = 'Y',
REGIST_DT = NOW()
WHERE
BNF_STMP_INNB = #{bnfStmpInnb}
AND REFUND_AT = 'N'
</update>
<!-- 환불 처리 시 스탬프 차감용 UPDATE 쿼리 추가 -->
<update id="updateRefundStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
-- 환불 처리 시 스탬프 차감
UPDATE GC_BENEFIT_STMP
SET
REFUND_AT = 'Y',
UPDT_DT = NOW()
WHERE
ORDR_INNB = #{ordrInnb}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND REFUND_AT = 'N'
</update>
<!-- 특정 주문의 스탬프 정보 조회 -->
<select id="selectStampByOrder"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
-- 주문번호로 스탬프 정보 조회
SELECT
BS.BNF_STMP_INNB AS BNF_STMP_INNB,
BS.ORDR_INNB AS ORDR_INNB,
BS.REFUND_AT AS REFUND_AT,
BS.PURCHS_AMT AS PURCHS_AMT,
BS.RL_SETLE_AMT AS RL_SETLE_AMT,
BS.STMP_CNT AS STMP_CNT,
BS.AMT_FOR_CHG AS AMT_FOR_CHG,
DATE_FORMAT(BS.SETLE_COMPT_DT, '%Y-%m-%d %H:%i:%s') AS SETLE_COMPT_DT,
DATE_FORMAT(BS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT
FROM
GC_BENEFIT_STMP BS
WHERE
BS.ORDR_INNB = #{ordrInnb}
AND BS.MBR_INNB = #{mbrInnb}
AND BS.MBR_DV_CD = #{mbrDvCd}
AND BS.SOPMAL_CD = #{sopmalCd}
</select>
<!-- 주문 처리 여부 확인 쿼리 추가 -->
<select id="countProcessedOrder"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="int">
SELECT COUNT(*)
FROM GC_BENEFIT_STMP
WHERE SOPMAL_CD = #{sopmalCd}
AND MBR_INNB = #{mbrInnb}
AND ORDR_INNB = #{purchsInnb}
</select>
<!-- 환불로 인해 영향받은 교환권 삭제 -->
<delete id="deleteAffectedExchangeTickets"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
<![CDATA[
-- 환불된 스탬프로 인해 유효하지 않은 교환권 삭제
DELETE FROM GC_BENEFIT_STMP_EXTIKET
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'N' -- 미교환 교환권만
AND EXTIKET_STMP_CNT > (
-- 현재 유효한 스탬프 수보다 교환권 스탬프가 많으면 삭제
SELECT IFNULL(SUM(STMP_CNT), 0)
FROM GC_BENEFIT_STMP
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND REFUND_AT = 'N'
)
]]>
</delete>
<!-- 교환안된 교환권 조회 (오래된 순) -->
<select id="selectUnexchangedTicketsForDeduction"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO"
resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_EXTIKET_INNB,
EXTIKET_STMP_CNT
FROM
GC_BENEFIT_STMP_EXTIKET
WHERE
MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND SOPMAL_CD = #{sopmalCd}
AND STR_INNB = #{strInnb}
AND EXCHNG_AT = 'N' -- 교환안된 것만
ORDER BY
REGIST_DT ASC -- 오래된 것부터 처리
</select>
<!-- 교환권 스탬프 수 감소 -->
<update id="reduceExchangeTicketStamps"
parameterType="com.wb.domainserver.domain.gcone.bnft.purstmp.vo.BOPurstmpStampVO">
UPDATE GC_BENEFIT_STMP_EXTIKET
SET
EXTIKET_STMP_CNT = EXTIKET_STMP_CNT - #{deductStampCnt},
UPDT_DT = NOW()
WHERE
BNF_EXTIKET_INNB = #{bnfExtiketInnb}
AND EXTIKET_STMP_CNT >= #{deductStampCnt}
</update>
<!-- 특정 교환권 삭제 -->
<delete id="deleteSpecificExchangeTicket" parameterType="Long">
DELETE FROM GC_BENEFIT_STMP_EXTIKET
WHERE BNF_EXTIKET_INNB = #{bnfExtiketInnb}
</delete>
</mapper>

View File

@@ -0,0 +1,234 @@
<?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.wb.domainserver.domain.gcone.bnft.qrevnt.mapper.BOQREvntMapper">
<!-- QR이벤트 혜택 정보 조회 -->
<select id="selectQREventBenefitInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
b.BNF_INNB, -- 혜택 고유 번호
b.BNF_SJ, -- 혜택 제목
b.USE_AT, -- 사용여부
b.BNF_BGN_DT, -- 진행기간 시작일시
b.BNF_END_DT, -- 진행기간 종료일시
b.SCR_REPRSNT_IMG, -- 화면 대표 이미지
b.SCR_REPRSNT_IMG_NM, -- 화면 대표 이미지명
b.SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
b.SCR_RWD_IMG, -- 화면 보상 이미지
b.SCR_RWD_IMG_NM, -- 화면 보상 이미지명
b.SCR_RWD_LINK_URL, -- 화면 보상 링크 URL
b.BNF_WORDS_CN, -- 혜택 안내
gd.WORDS_CN_1, -- 안내문 1 (이벤트 설명)
gd.WORDS_CN_2, -- 안내문 2 (쿠폰 사용법)
gd.WORDS_CN_3 -- 안내문 3 (기타 안내)
FROM
GC_BENEFIT b
LEFT JOIN GC_BENEFIT_GDCC gd ON b.BNF_DV_CD = gd.BNF_DV_CD
AND b.SOPMAL_CD = gd.SOPMAL_CD
WHERE
b.BNF_DV_CD = '150' -- QR이벤트 혜택 구분 코드
AND b.USE_AT = 'Y'
AND DATE(NOW()) BETWEEN DATE(b.BNF_BGN_DT) AND DATE(b.BNF_END_DT)
AND b.SOPMAL_CD = #{sopmalCd}
ORDER BY
b.BNF_INNB
]]>
</select>
<!-- QR이벤트 보상 정보 조회 -->
<select id="selectQREventRewardInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
br.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
br.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
br.MLG_RWD_AMT, -- 마일리지 보상 금액
br.COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS ITM_NM, -- 쿠폰 이름
br.PRZWIN_QY, -- 당첨수량
br.PRZWIN_PRC, -- 당첨확률
cs.DWLD_BGN_DT, -- 다운로드 시작일 (사용유효시작일 대체)
cs.DWLD_END_DT, -- 다운로드 종료일 (사용유효종료일 대체)
cs.COUPON_SNDNG_DC -- 쿠폰 설명 (사용조건내용 대체)
FROM
GC_BENEFIT_REWARD br
LEFT JOIN GC_COUPON_SNDNG cs ON br.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
br.BNF_INNB = #{bnfInnb}
ORDER BY
br.PRZWIN_PRC DESC
]]>
</select>
<!-- 매장별 참여 여부 확인 -->
<select id="selectStoreParticipationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COUNT(*) AS participationCount -- 참여 횟수
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND STR_INNB = #{strInnb} -- 매장 고유 번호
AND DATE(BNF_PRT_DT) BETWEEN DATE(#{bnfBgnDt}) AND DATE(#{bnfEndDt}) -- 이벤트 기간 내
]]>
</select>
<!-- 전체 참여 여부 확인 (아이디당 1회) -->
<select id="selectTotalParticipationStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COUNT(*) AS totalParticipationCount -- 전체 참여 횟수
FROM
GC_BENEFIT_PARTCPTN
WHERE
MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
AND DATE(BNF_PRT_DT) BETWEEN DATE(#{bnfBgnDt}) AND DATE(#{bnfEndDt}) -- 이벤트 기간 내
]]>
</select>
<!-- 매장 정보 조회 -->
<select id="selectStoreInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
STR_INNB, -- 매장 고유번호
STR_NM, -- 매장명
STR_CD, -- 매장 코드
STR_ADRES, -- 매장 주소
STR_RNM_ADRES, -- 매장 도로명 주소
STR_TELNB, -- 매장 전화번호
CTY_DO, -- 시도
CTY_GUN_GU -- 시군구
FROM
GC_STORE
WHERE
STR_INNB = #{strInnb}
AND TENT_STTUS = '02' -- 개점 상태
]]>
</select>
<!-- QR이벤트 참여 처리 -->
<insert id="participateQREvent" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" useGeneratedKeys="true" keyProperty="bnfPrtInnb" keyColumn="BNF_PRT_INNB">
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB, -- 혜택 고유 번호
BNF_PRT_DT, -- 혜택 참여 일시
MBR_INNB, -- 회원 고유 번호
MBR_DV_CD, -- 회원 구분 코드
STR_INNB, -- 매장 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfInnb},
NOW(),
#{mbrInnb},
#{mbrDvCd},
#{strInnb},
#{regusr},
NOW()
)
]]>
</insert>
<!-- QR이벤트 당첨 결과 처리 (쿠폰 발급) -->
<insert id="insertQREventReward" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유 번호
BNF_PRT_INNB, -- 혜택 참여 고유 번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 보상 금액
COUPON_INNB, -- 쿠폰 고유 번호
GOODS_INNB, -- 상품 고유 번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfRcvInnb},
#{bnfPrtInnb},
#{bnfRwdCateDvCd},
#{bnfRwdGodsDvCd},
#{mlgRwdAmt},
#{couponInnb},
#{goodsInnb},
#{regusr},
NOW()
)
]]>
</insert>
<!-- QR이벤트 참여 내역 조회 -->
<select id="selectQREventParticipationHistory" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
p.BNF_PRT_INNB, -- 혜택 참여 고유 번호
p.BNF_PRT_DT, -- 혜택 참여 일시
p.STR_INNB, -- 매장 고유 번호
s.STR_NM, -- 매장명
s.STR_ADRES, -- 매장 주소
r.BNF_RCV_INNB, -- 보상 수령 고유 번호 (당첨 여부 확인용)
r.BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
r.BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
r.MLG_RWD_AMT, -- 마일리지 보상 금액
r.COUPON_INNB, -- 쿠폰 고유 번호
COALESCE(cs.COUPON_SNDNG_NM, br.ITM_NM) AS couponName, -- 쿠폰명
cs.DWLD_BGN_DT, -- 다운로드 시작일 (사용유효시작일 대체)
cs.DWLD_END_DT, -- 다운로드 종료일 (사용유효종료일 대체)
cs.COUPON_SNDNG_DC -- 쿠폰 설명 (사용조건내용 대체)
FROM
GC_BENEFIT_PARTCPTN p
LEFT JOIN GC_STORE s ON p.STR_INNB = s.STR_INNB
LEFT JOIN GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
LEFT JOIN GC_BENEFIT_REWARD br ON p.BNF_INNB = br.BNF_INNB
AND r.BNF_RWD_CATE_DV_CD = br.BNF_RWD_CATE_DV_CD
AND r.BNF_RWD_GODS_DV_CD = br.BNF_RWD_GODS_DV_CD
LEFT JOIN GC_COUPON_SNDNG cs ON r.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
WHERE
p.MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND p.MBR_DV_CD = #{mbrDvCd}
AND p.BNF_INNB = #{bnfInnb} -- 혜택 고유 번호
ORDER BY
p.BNF_PRT_DT DESC
]]>
</select>
<!-- QR이벤트 당첨 정보 상세 조회 -->
<select id="selectQREventWinningDetail" parameterType="com.wb.domainserver.domain.gcone.bnft.qrevnt.vo.BOQREvntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
p.BNF_PRT_INNB, -- 혜택 참여 고유 번호
p.BNF_PRT_DT, -- 혜택 참여 일시
s.STR_NM, -- 참여 매장명
s.STR_ADRES, -- 매장 주소
r.BNF_RCV_INNB, -- 보상 수령 고유 번호
r.COUPON_INNB AS couponNb, -- 쿠폰 번호 (발송 고유번호로 대체)
cs.COUPON_SNDNG_NM AS couponName, -- 쿠폰명
cs.COUPON_SNDNG_DC AS useCndtnCn, -- 쿠폰 설명 (사용조건으로 사용)
br.DSCNT_AMT AS dscntAmt, -- 할인 금액
br.DSCNT_RT AS dscntRt, -- 할인 율
DATE_FORMAT(cs.DWLD_END_DT, '%Y-%m-%d') AS expiryDateTime -- 유효기간
FROM
GC_BENEFIT_PARTCPTN p
INNER JOIN GC_STORE s ON p.STR_INNB = s.STR_INNB
INNER JOIN GC_BENEFIT_RECEIPT r ON p.BNF_PRT_INNB = r.BNF_PRT_INNB
INNER JOIN GC_COUPON_SNDNG cs ON r.COUPON_INNB = cs.COUPON_SNDNG_INNB
AND cs.SOPMAL_CD = #{sopmalCd}
INNER JOIN GC_BENEFIT_REWARD br ON p.BNF_INNB = br.BNF_INNB
AND r.BNF_RWD_CATE_DV_CD = br.BNF_RWD_CATE_DV_CD
AND r.BNF_RWD_GODS_DV_CD = br.BNF_RWD_GODS_DV_CD
WHERE
p.BNF_PRT_INNB = #{bnfPrtInnb} -- 혜택 참여 고유 번호
AND p.MBR_INNB = #{mbrInnb} -- 회원 고유 번호
AND p.MBR_DV_CD = #{mbrDvCd}
]]>
</select>
</mapper>

View File

@@ -0,0 +1,297 @@
<?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.wb.domainserver.domain.gcone.bnft.rougame.mapper.BORougameMapper">
<!-- 룰렛 혜택 기본 정보 조회 -->
<select id="selectRougameBenefitInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 설정 고유번호
BNF_DV_CD, -- 혜택 구분 코드
USE_AT, -- 사용여부
BNF_BGN_DT, -- 진행기간 시작일시
BNF_END_DT, -- 진행기간 종료일시
SCR_REPRSNT_IMG, -- 화면 대표 이미지
SCR_REPRSNT_LINK_URL, -- 화면 대표 링크 URL
SCR_RWD_IMG, -- 화면 보상 이미지
SCR_RWD_LINK_URL, -- 화면 보상 링크 URL
BNF_WORDS_CN -- 혜택 안내
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '040' -- 룰렛 혜택 구분 코드
AND USE_AT = 'Y'
AND DATE(NOW()) BETWEEN DATE(BNF_BGN_DT) AND DATE(BNF_END_DT)
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
]]>
</select>
<!-- 남은 게임 참여 기회 횟수 조회 수정 -->
<select id="selectRemainingGameChances" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
#{mbrInnb} as MBR_INNB, -- 회원 고유번호
'040' as BNF_DV_CD, -- 혜택 구분 코드
(
-- 할당된 총 기회 계산
COALESCE(
(SELECT SUM(CHG_CNT) FROM GC_BENEFIT_CHARGE
WHERE MBR_INNB = #{mbrInnb} AND BNF_DV_CD = '040' AND SOPMAL_CD = #{sopmalCd} AND MBR_DV_CD = #{mbrDvCd})
, 0)
-
-- 사용한 기회 계산
COALESCE(
(SELECT COUNT(*) FROM GC_BENEFIT_PARTCPTN BP
INNER JOIN GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE BP.MBR_INNB = #{mbrInnb}
AND B.BNF_DV_CD = '040' AND B.SOPMAL_CD = #{sopmalCd} AND BP.MBR_DV_CD = #{mbrDvCd})
, 0)
) as remainingGameChances, -- 남아있는 게임 횟수
-- 실제 GC_BENEFIT_CHARGE 테이블에 레코드가 있는지 확인
(
SELECT COUNT(*) FROM GC_BENEFIT_CHARGE
WHERE MBR_INNB = #{mbrInnb} AND BNF_DV_CD = '040' AND SOPMAL_CD = #{sopmalCd} AND MBR_DV_CD = #{mbrDvCd}
) as hasChargeRecord
]]>
</select>
<!-- 룰렛 보상 정보 조회 -->
<select id="selectRougameRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
BNF_INNB, -- 혜택 설정 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰 고유번호
ITM_NM, -- 표시명
PRZWIN_QY, -- 당첨수량
PRZWIN_PRC, -- 당첨확률
DSCNT_AMT, -- 할인금액
DSCNT_RT -- 할인비율
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb} -- 혜택 설정 고유번호 조건
]]>
</select>
<!-- 초록잎 지급량 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.atend.vo.BOAtendVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '040' -- 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 룰렛 참여 정보 저장 (초록잎 적립 포함) -->
<insert id="insertRougameParticipation" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<selectKey keyProperty="bnfPrtInnb" resultType="java.lang.Long" order="BEFORE">
SELECT IFNULL(MAX(BNF_PRT_INNB), 0) + 1 FROM GC_BENEFIT_PARTCPTN
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_INNB, -- 혜택 설정 고유번호
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_PRT_DT, -- 혜택 참여 일시
PRT_LEAF_CNT, -- 참여 초록잎 개수 (추가)
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfPrtInnb}, -- 혜택 참여 고유번호
#{bnfInnb}, -- 혜택 설정 고유번호
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
NOW(), -- 혜택 참여 일시 (현재 시간)
#{paidLeafCnt}, -- 초록잎 지급량 (추가)
#{regusr}, -- 등록자
NOW() -- 등록 일시 (현재 시간)
)
]]>
</insert>
<!-- 마지막으로 삽입된 참여 고유번호 조회 -->
<select id="selectLastInsertedParticipationId" resultType="long">
<![CDATA[
SELECT LAST_INSERT_ID()
]]>
</select>
<!-- 혜택 보상 수령 정보 저장 -->
<insert id="insertRougameReceipt" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
<![CDATA[
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유번호
BNF_PRT_INNB, -- 혜택 참여 고유번호
BNF_RWD_CATE_DV_CD, -- 보상 항목 구분 코드
BNF_RWD_GODS_DV_CD, -- 보상 상품 구분 코드
MLG_RWD_AMT, -- 마일리지 금액
COUPON_INNB, -- 쿠폰고유번호
GOODS_INNB, -- 상품고유번호
REGUSR, -- 등록자
REGIST_DT -- 등록 일시
) VALUES (
#{bnfRcvInnb}, -- 혜택 보상수령 고유번호
#{bnfPrtInnb}, -- 혜택 참여 고유번호
#{bnfRwdCateDvCd}, -- 보상 항목 구분 코드
#{bnfRwdGodsDvCd}, -- 보상 상품 구분 코드
#{mlgRwdAmt}, -- 마일리지 금액
#{couponInnb}, -- 쿠폰고유번호
#{goodsInnb}, -- 상품고유번호
#{regusr}, -- 등록자
NOW() -- 등록 일시 (현재 시간)
)
]]>
</insert>
<!-- 보상 당첨 수량 차감 -->
<update id="decrementRewardQuantity" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<![CDATA[
UPDATE GC_BENEFIT_REWARD
SET PRZWIN_QY = CASE
WHEN PRZWIN_QY > 0 THEN PRZWIN_QY - 1
ELSE 0
END
WHERE BNF_INNB = #{bnfInnb}
AND BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd}
]]>
</update>
<!-- 혜택 충전 설정 정보 조회 -->
<select id="selectBenefitChgConfig" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
AMT_FOR_CHG -- 기회 제공 기준 금액
FROM
GC_BENEFIT_CHG_CONFIG
WHERE
BNF_DV_CD = '040' -- 룰렛 혜택 구분 코드
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 추가
]]>
</select>
<!-- 게임 기회 신규 등록 -->
<insert id="insertGameChances" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<![CDATA[
INSERT INTO GC_BENEFIT_CHARGE (
BNF_PURCHS_RCV_LOG_INNB, -- 혜택 구매확정 수신 로그 고유번호
SOPMAL_CD, -- 쇼핑몰 코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드 추가
BNF_DV_CD, -- 혜택 구분 코드
CHG_CNT, -- 충전 횟수
REGIST_DT -- 등록 일시
) VALUES (
0, -- 혜택 구매확정 수신 로그 고유번호
#{sopmalCd}, -- 쇼핑몰 코드
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
'040', -- 혜택 구분 코드 (룰렛)
#{remainingGameChances}, -- 계산된 게임 기회
NOW() -- 등록 일시 (현재 시간)
)
]]>
</insert>
<!-- 게임 기회 업데이트 -->
<update id="updateGameChances" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO">
<![CDATA[
UPDATE GC_BENEFIT_CHARGE
SET CHG_CNT = #{remainingGameChances},
REGIST_DT = NOW()
WHERE
SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드 조건 추가
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드 추가
AND BNF_DV_CD = '040'
]]>
</update>
<!-- 전체 보상 수량 상태 조회 -->
<select id="selectAllRewardsQuantityStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
COUNT(*) as totalRewards, -- 전체 보상 종류 수
COUNT(CASE WHEN PRZWIN_QY > 0 THEN 1 END) as availableRewards, -- 수량이 있는 보상 수
SUM(PRZWIN_QY) as totalQuantity -- 전체 남은 수량 합계
FROM
GC_BENEFIT_REWARD
WHERE
BNF_INNB = #{bnfInnb}
]]>
</select>
<!-- 실제 남은 수량을 계산하는 보상 조회 -->
<select id="selectAvailableRewards" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
r.BNF_INNB,
r.BNF_RWD_CATE_DV_CD,
r.BNF_RWD_GODS_DV_CD,
r.MLG_RWD_AMT,
r.COUPON_INNB,
r.ITM_NM,
r.PRZWIN_QY, -- 설정된 당첨 수량
r.PRZWIN_PRC,
r.DSCNT_AMT,
r.DSCNT_RT,
-- 실제 당첨된 수량 계산
COALESCE(
(SELECT COUNT(*)
FROM GC_BENEFIT_RECEIPT rcpt
INNER JOIN GC_BENEFIT_PARTCPTN part ON rcpt.BNF_PRT_INNB = part.BNF_PRT_INNB
WHERE part.BNF_INNB = r.BNF_INNB
AND rcpt.BNF_RWD_CATE_DV_CD = r.BNF_RWD_CATE_DV_CD), 0
) as ISSUED_QY, -- 실제 당첨된 수량
-- 남은 수량 계산
(r.PRZWIN_QY - COALESCE(
(SELECT COUNT(*)
FROM GC_BENEFIT_RECEIPT rcpt
INNER JOIN GC_BENEFIT_PARTCPTN part ON rcpt.BNF_PRT_INNB = part.BNF_PRT_INNB
WHERE part.BNF_INNB = r.BNF_INNB
AND rcpt.BNF_RWD_CATE_DV_CD = r.BNF_RWD_CATE_DV_CD), 0
)) as REMAINING_QY -- 남은 수량
FROM
GC_BENEFIT_REWARD r
WHERE
r.BNF_INNB = #{bnfInnb}
-- 남은 수량이 0보다 큰 보상만 조회
AND (r.PRZWIN_QY - COALESCE(
(SELECT COUNT(*)
FROM GC_BENEFIT_RECEIPT rcpt
INNER JOIN GC_BENEFIT_PARTCPTN part ON rcpt.BNF_PRT_INNB = part.BNF_PRT_INNB
WHERE part.BNF_INNB = r.BNF_INNB
AND rcpt.BNF_RWD_CATE_DV_CD = r.BNF_RWD_CATE_DV_CD), 0
)) > 0
ORDER BY r.PRZWIN_PRC DESC
]]>
</select>
<!-- 회원 디바이스 등록일 조회 -->
<select id="selectMemberDeviceRegistDate" parameterType="com.wb.domainserver.domain.gcone.bnft.rougame.vo.BORougameVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
<![CDATA[
SELECT
DATE_FORMAT(MDI.REGIST_DT, '%Y-%m-%d') as DEVICE_REGIST_DT
FROM
GC_MEMBER_DEVICE_INFO MDI
INNER JOIN
GC_MEMBER M ON MDI.MBR_INNB = M.MBR_INNB
AND MDI.MBR_DV_CD = M.MBR_DV_CD
WHERE
MDI.SOPMAL_CD = #{sopmalCd}
AND MDI.MBR_INNB = #{mbrInnb}
AND MDI.MBR_DV_CD = #{mbrDvCd}
ORDER BY MDI.REGIST_DT ASC
LIMIT 1
]]>
</select>
</mapper>

View File

@@ -0,0 +1,431 @@
<?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.wb.domainserver.domain.gcone.bnft.stepcnt.mapper.BOStepcntMapper">
<!-- 현재 회원의 최신 걸음 수 조회 -->
<select id="selectCurrentStepCount" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BP.BNF_PRT_INNB as BNF_PRT_INNB, -- 혜택 참여 고유번호
BP.STEP_CNT as STEP_CNT, -- 현재 걸음 수
BP.BNF_PRT_DT as participationDate, -- 참여 일시
BP.MBR_INNB as memberNo -- 회원 고유번호
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND BP.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE(BP.BNF_PRT_DT) = CURDATE() -- 오늘 날짜 기준
ORDER BY
BP.BNF_PRT_DT DESC -- 최신 정보 우선
LIMIT 1
</select>
<!-- 이번 달 만보 달성 현황 조회 -->
<select id="selectMonthlyStepCountAchievement" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
DATE(BP.BNF_PRT_DT) as achievementDate, -- 달성 일자
MAX(BP.STEP_CNT) as stepCount, -- 일별 최대 걸음 수
CASE WHEN MAX(BP.STEP_CNT) &gt;= 10000 THEN 'Y' ELSE 'N' END as isAchieved -- 만보 달성 여부
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND BP.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 이번 달 필터링
GROUP BY
DATE(BP.BNF_PRT_DT) -- 일자별 그룹화
ORDER BY
DATE(BP.BNF_PRT_DT) -- 날짜순 정렬
</select>
<!-- 이번 달 만보 달성 횟수 조회 -->
<select id="selectMonthlyStepCountAchievementCount" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="int">
SELECT
COUNT(DISTINCT DATE(BP.BNF_PRT_DT)) as achievementCount -- 만보 달성한 날짜 수
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND BP.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 이번 달 필터링
AND BP.STEP_CNT &gt;= 10000 -- 만보 이상 조건
</select>
<!-- 선택한 달의 일별 걸음 수 내역 조회 -->
<select id="selectDailyStepCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
DATE(BP.BNF_PRT_DT) as recordDate, -- 기록 일자
MAX(BP.STEP_CNT) as stepCount, -- 일별 최대 걸음 수
CASE
WHEN MAX(BP.STEP_CNT) &gt;= 10000 THEN 100
ELSE FLOOR(MAX(BP.STEP_CNT) * 100 / 10000)
END as achievementRate, -- 달성률(%) 계산
CASE
WHEN MAX(BP.STEP_CNT) &gt;= 10000 THEN 4 -- 만보 달성
WHEN MAX(BP.STEP_CNT) &gt;= 7500 THEN 3 -- 7500 이상
WHEN MAX(BP.STEP_CNT) &gt;= 5000 THEN 2 -- 5000 이상
WHEN MAX(BP.STEP_CNT) &gt;= 2500 THEN 1 -- 2500 이상
ELSE 0 -- 2500 미만
END as achievementLevel -- 달성 레벨(0~4)
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb} -- 회원 고유번호 조건
AND BP.MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = #{yearMonth} -- 선택한 년월 기준
GROUP BY
DATE(BP.BNF_PRT_DT) -- 일자별 그룹화
ORDER BY
DATE(BP.BNF_PRT_DT) -- 날짜순 정렬
</select>
<!-- 이번 달 만보기 사용 통계 조회 -->
<select id="selectMonthlyStepCountStats" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
ROUND((SELECT AVG(STEP_CNT)
FROM GC_BENEFIT_PARTCPTN
WHERE MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND DATE_FORMAT(BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
), 0) as avgStepCount, -- 하루 평균 걸음 수 (조인 영향 없이 계산)
rewardStats.surpriseGiftCount, -- 깜짝선물 획득 수
rewardStats.totalMileage -- 획득한 마일리지 합계
FROM (
SELECT
COUNT(CASE WHEN BR.BNF_RWD_CATE_DV_CD IN ('02030','02031','02032','02033','02034','02035','02036') THEN 1 END) as surpriseGiftCount,
SUM(CASE WHEN BR.BNF_RWD_GODS_DV_CD = '010' THEN BR.MLG_RWD_AMT ELSE 0 END) as totalMileage
FROM
GC_BENEFIT_PARTCPTN BP
LEFT JOIN
GC_BENEFIT_RECEIPT BR ON BR.BNF_PRT_INNB = BP.BNF_PRT_INNB
LEFT JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB AND B.BNF_DV_CD = '020'
WHERE
BP.MBR_INNB = #{mbrInnb}
AND BP.MBR_DV_CD = #{mbrDvCd}
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
) rewardStats
</select>
<!-- 보상 정보 조회 -->
<select id="selectStepCountReward" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB as bnfInnb, -- 혜택 고유번호
BR.BNF_RWD_CATE_DV_CD as rewardCategoryCode, -- 보상 항목 구분 코드
BR.BNF_RWD_GODS_DV_CD as rewardGoodsCode, -- 보상 상품 구분 코드
BR.MLG_RWD_AMT as mileageAmount, -- 마일리지 보상 금액
BR.COUPON_INNB as couponNo, -- 쿠폰 고유번호
BR.RWD_CND_CNT as rewardConditionCount -- 보상 조건 걸음 수
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_REWARD BR ON B.BNF_INNB = BR.BNF_INNB
WHERE
B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND B.USE_AT = 'Y' -- 사용 여부 체크
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (B.BNF_BGN_DT IS NULL OR B.BNF_BGN_DT &lt;= NOW()) -- 시작일 체크
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT &gt;= NOW()) -- 종료일 체크
AND BR.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 요청한 보상 카테고리
</select>
<!-- 깜짝 선물 위치 정보 조회 (요일에 따라 변경) -->
<select id="selectSurpriseGiftPosition" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB as bnfInnb, -- 혜택 고유번호
BR.BNF_RWD_CATE_DV_CD as rewardCategoryCode, -- 보상 항목 구분 코드
BR.RWD_CND_CNT as surprisePosition -- 깜짝 선물 위치 (테이블에 정의된 값)
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_REWARD BR ON B.BNF_INNB = BR.BNF_INNB
WHERE
B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND B.USE_AT = 'Y' -- 사용 여부 체크
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (B.BNF_BGN_DT IS NULL OR B.BNF_BGN_DT &lt;= NOW()) -- 시작일 체크
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT &gt;= NOW()) -- 종료일 체크
AND BR.BNF_RWD_CATE_DV_CD = CONCAT('0203', WEEKDAY(NOW())) -- 요일에 맞는 깜짝선물 코드
LIMIT 1
</select>
<!-- 초록잎 지급 개수 조회 -->
<select id="selectLeafCounts" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
PYMNT_CNT, -- 지급 초록잎 개수
SPECIAL_CNT -- 스페셜 지급 초록잎 개수
FROM
GC_BENEFIT_CPSLMKN
WHERE
BNF_DV_CD = '020' -- 만보기 혜택 구분 코드로 수정
AND SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
</select>
<!-- 걸음수 정보 저장/업데이트 -->
<insert id="insertOrUpdateStepCount" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO">
INSERT INTO GC_BENEFIT_PARTCPTN (
BNF_INNB,
BNF_PRT_DT,
MBR_INNB,
MBR_DV_CD,
STEP_CNT,
REGIST_DT,
PRT_LEAF_CNT,
REGUSR
) VALUES (
#{bnfInnb}, -- 혜택 고유번호
NOW(), -- 현재 시간
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
#{stepCnt}, -- 걸음 수
NOW(), -- 등록 시간
#{paidLeafCnt}, -- 적립된 초록잎 개수
#{regusr} -- 등록자
) ON DUPLICATE KEY UPDATE
STEP_CNT = #{stepCnt}, -- 걸음 수 업데이트
UPDT_DT = NOW(), -- 수정 시간
UPDUSR = #{updusr}, -- 수정자
PRT_LEAF_CNT = CASE
WHEN #{stepCnt} &gt;= 10000 AND STEP_CNT &lt; 10000 THEN #{paidLeafCnt}
WHEN #{stepCnt} &gt;= 10000 THEN PRT_LEAF_CNT
ELSE PRT_LEAF_CNT
END -- 만보 최초 달성 시에만 초록잎 추가
</insert>
<!-- 보상 수령 내역 저장 -->
<insert id="insertStepCountReward" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO">
<selectKey keyProperty="bnfRcvInnb" resultType="java.math.BigInteger" order="BEFORE">
SELECT IFNULL(MAX(BNF_RCV_INNB), 0) + 1 FROM GC_BENEFIT_RECEIPT
</selectKey>
INSERT INTO GC_BENEFIT_RECEIPT (
BNF_RCV_INNB, -- 혜택 보상수령 고유 번호
BNF_PRT_INNB,
BNF_RWD_CATE_DV_CD,
BNF_RWD_GODS_DV_CD,
MLG_RWD_AMT,
COUPON_INNB,
REGUSR,
REGIST_DT
) VALUES (
#{bnfRcvInnb}, -- 생성된 고유 번호
#{bnfPrtInnb}, -- 혜택 참여 고유번호
#{bnfRwdCateDvCd}, -- 보상 항목 구분 코드
#{bnfRwdGodsDvCd}, -- 보상 상품 구분 코드
#{mlgRwdAmt}, -- 마일리지 금액
#{couponInnb}, -- 쿠폰 고유번호
#{regusr}, -- 등록자(회원)
NOW() -- 등록 시간
)
</insert>
<!-- 10회 달성 시 추가 보상 대상 상품 정보 조회 -->
<select id="selectMonthlyAchievementReward" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB as bnfInnb, -- 혜택 고유번호
B.BNF_SJ as bnfTitle, -- 혜택 제목
B.SCR_RWD_IMG as rewardImageUrl, -- 보상 이미지 URL
B.SCR_RWD_LINK_URL as rewardLinkUrl, -- 보상 링크 URL
BR.MLG_RWD_AMT as mileageAmount, -- 마일리지 보상 금액
BR.ITM_NM as itemName -- 표시명
FROM
GC_BENEFIT B
INNER JOIN
GC_BENEFIT_REWARD BR ON B.BNF_INNB = BR.BNF_INNB
WHERE
B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND B.USE_AT = 'Y' -- 사용 여부 체크
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (B.BNF_BGN_DT IS NULL OR B.BNF_BGN_DT &lt;= NOW()) -- 시작일 체크
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT &gt;= NOW()) -- 종료일 체크
AND BR.BNF_RWD_CATE_DV_CD = '02020' -- 만보기 월누적10회 코드
LIMIT 1
</select>
<!-- 만보기 동의 상태 조회 -->
<select id="selectStepcntAgreement" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
AGRE_AT
FROM
GC_BENEFIT_AGREE
WHERE
SOPMAL_CD = #{sopmalCd}
AND MBR_INNB = #{mbrInnb}
AND MBR_DV_CD = #{mbrDvCd}
AND BNF_DV_CD = '020'
AND BNF_AGRE_DV_CD = '020'
</select>
<!-- 만보기 동의 정보 저장/업데이트 -->
<insert id="insertStepcntAgreement" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO">
INSERT INTO GC_BENEFIT_AGREE (
SOPMAL_CD, -- 쇼핑몰 코드
MBR_INNB, -- 회원 고유번호
MBR_DV_CD, -- 회원 구분 코드
BNF_DV_CD, -- 혜택 구분 코드
BNF_AGRE_DV_CD, -- 혜택 동의 구분 코드
BNF_INNB, -- 혜택 고유번호
AGRE_AT, -- 동의 여부
REGUSR, -- 등록자
REGIST_DT -- 등록 시간
) VALUES (
#{sopmalCd}, -- 쇼핑몰 코드
#{mbrInnb}, -- 회원 고유번호
#{mbrDvCd}, -- 회원 구분 코드
'020', -- 혜택 구분 코드(만보기)
'020', -- 혜택 동의 구분 코드(만보기)
#{bnfInnb}, -- 혜택 고유번호
#{agreeYn}, -- 동의 여부
#{regusr}, -- 등록자(회원)
NOW() -- 등록 시간
)
</insert>
<!-- 만보기 동의 정보 업데이트 -->
<update id="updateStepcntAgreement" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO">
UPDATE GC_BENEFIT_AGREE
SET AGRE_AT = #{agreeYn}, -- 동의 여부
REGIST_DT = NOW(), -- 등록 시간
REGUSR = #{regusr} -- 등록자(회원)
WHERE SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND MBR_INNB = #{mbrInnb} -- 회원 고유번호
AND MBR_DV_CD = #{mbrDvCd} -- 회원 구분 코드
AND BNF_DV_CD = '020' -- 혜택 구분 코드(만보기)
AND BNF_AGRE_DV_CD = '020' -- 혜택 동의 구분 코드(만보기)
</update>
<!-- 만보기 화면의 기본 정보 조회 -->
<select id="selectStepcntBaseInfo" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
B.BNF_INNB as BNF_INNB, -- 혜택 고유번호
B.BNF_SJ as BNF_TITLE, -- 혜택 제목
B.BNF_WORDS_CN as BNF_GUIDANCE, -- 혜택 안내
B.SCR_RWD_IMG as REWARD_IMG, -- 화면 대표 이미지
B.SCR_REPRSNT_LINK_URL as REPRESENT_LINK_URL, -- 화면 대표 링크 URL
B.SCR_RWD_LINK_URL as REWARD_LINK_URL, -- 화면 보상 링크 URL
(
SELECT BCT.CN_DC
FROM GC_BENEFIT_CONTENT BCT
WHERE BCT.BNF_INNB = B.BNF_INNB
LIMIT 1
) as CONTENT_DESCRIPTION, -- 내용 설명
(
SELECT GROUP_CONCAT(BR.BNF_RWD_CATE_DV_CD)
FROM GC_BENEFIT_REWARD BR
WHERE BR.BNF_INNB = B.BNF_INNB
) as REWARD_CATEGORIES, -- 보상 항목 구분 코드 목록
(
SELECT BR.ITM_NM
FROM GC_BENEFIT_REWARD BR
WHERE BR.BNF_INNB = B.BNF_INNB
AND BR.BNF_RWD_CATE_DV_CD = '02020' -- 만보기 월누적10회 코드
LIMIT 1
) as MONTHLY_REWARD_NAME, -- 10회 달성 시 받을 제품 이름
(
SELECT BR.MLG_RWD_AMT
FROM GC_BENEFIT_REWARD BR
WHERE BR.BNF_INNB = B.BNF_INNB
AND BR.BNF_RWD_CATE_DV_CD = '02020' -- 만보기 월누적10회 코드
LIMIT 1
) as MONTHLY_REWARD_MILEAGE -- 10회 달성 시 받을 마일리지
FROM
GC_BENEFIT B
WHERE
B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND B.USE_AT = 'Y' -- 사용 여부 체크
AND B.SOPMAL_CD = #{sopmalCd} -- 쇼핑몰 코드
AND (B.BNF_BGN_DT IS NULL OR B.BNF_BGN_DT &lt;= NOW()) -- 시작일 체크
AND (B.BNF_END_DT IS NULL OR B.BNF_END_DT &gt;= NOW()) -- 종료일 체크
LIMIT 1
</select>
<!-- 이번 달 깜짝선물 획득 횟수 조회 -->
<select id="selectMonthlySurpriseGiftCount" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="int">
SELECT
COUNT(BR.BNF_RCV_INNB) as surpriseGiftCount
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT_RECEIPT BR ON BR.BNF_PRT_INNB = BP.BNF_PRT_INNB
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb}
AND BP.MBR_DV_CD = #{mbrDvCd}
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE_FORMAT(BP.BNF_PRT_DT, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') -- 이번 달 필터링
AND BR.BNF_RWD_CATE_DV_CD IN ('02030','02031','02032','02033','02034','02035','02036') -- 깜짝선물 카테고리 코드들
</select>
<!-- 오늘 깜짝선물 수령 여부 확인 -->
<select id="selectTodayGiftReceiptStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
COUNT(BR.BNF_RCV_INNB) as receiptCount,
CASE WHEN COUNT(BR.BNF_RCV_INNB) > 0 THEN 'Y' ELSE 'N' END as isReceived
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT_RECEIPT BR ON BR.BNF_PRT_INNB = BP.BNF_PRT_INNB
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb}
AND BP.MBR_DV_CD = #{mbrDvCd}
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE(BP.BNF_PRT_DT) = CURDATE() -- 오늘 날짜 기준
AND BR.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 오늘의 깜짝선물 카테고리
</select>
<!-- 오늘 마일리지 수령 여부 확인 -->
<select id="selectTodayMileageReceiptStatus" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
COUNT(BR.BNF_RCV_INNB) as receiptCount,
CASE WHEN COUNT(BR.BNF_RCV_INNB) > 0 THEN 'Y' ELSE 'N' END as isReceived
FROM
GC_BENEFIT_PARTCPTN BP
INNER JOIN
GC_BENEFIT_RECEIPT BR ON BR.BNF_PRT_INNB = BP.BNF_PRT_INNB
INNER JOIN
GC_BENEFIT B ON BP.BNF_INNB = B.BNF_INNB
WHERE
BP.MBR_INNB = #{mbrInnb}
AND BP.MBR_DV_CD = #{mbrDvCd}
AND B.BNF_DV_CD = '020' -- 만보기 혜택 코드
AND DATE(BP.BNF_PRT_DT) = CURDATE() -- 오늘 날짜 기준
AND BR.BNF_RWD_CATE_DV_CD = #{bnfRwdCateDvCd} -- 보상 카테고리 (02010: 일일만보, 02020: 월누적10회)
</select>
<!-- 만보기 참여 안내 조회-->
<select id="selectStepcntGuide" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_WORDS_CN
FROM
GC_BENEFIT
WHERE
BNF_INNB = #{bnfInnb}
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- BNF_INNB 조회 -->
<select id="selectBnfInnb" parameterType="com.wb.domainserver.domain.gcone.bnft.stepcnt.vo.BOStepcntVO" resultType="com.wb.domainserver.util.dataaccess.DataMap">
SELECT
BNF_INNB
FROM
GC_BENEFIT
WHERE
BNF_DV_CD = '020'
AND SOPMAL_CD = #{sopmalCd}
AND USE_AT = 'Y'
</select>
</mapper>

View File

@@ -0,0 +1,336 @@
<?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.wb.domainserver.domain.gcone.common.mapper.BOCommonMapper">
<!-- 이미지 정보 수정 -->
<update id="updateBOFileInfo" parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO">
<!-- 인트라넷 게시판 첨부파일 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'ITRB')">
<![CDATA[
DELETE FROM GC_INTRANET_BOARDDATA_FILE A
WHERE A.SOPMAL_CD = #{shopCd} AND A.BBSCTT_ATCHMNFIL_INNB = #{fileSeq}
]]>
</if>
<!-- 게시판 첨부파일 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BDFL')">
<![CDATA[
DELETE FROM GC_BOARDDATA_FILE A
WHERE A.SOPMAL_CD = #{shopCd} AND A.BBSCTT_ATCHMNFIL_INNB = #{fileSeq}
]]>
</if>
<!-- 게시판 대표이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BDIG')">
<![CDATA[
UPDATE GC_BOARDDATA
SET REPRSNT_IMG_ORGINL_FIL_NM=null, REPRSNT_IMG_SYS_FIL_NM=null
WHERE SOPMAL_CD = #{shopCd} AND BBSCTT_INNB = #{fileSeq}
]]>
</if>
<!-- 배너관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BANR')">
<![CDATA[
UPDATE GC_GOODS_BANNER
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND BANNER_INNB = #{fileSeq}
]]>
</if>
<!-- 회원관리 등급이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MBRG')">
<![CDATA[
UPDATE GC_MEMBER_GRAD
SET MBR_GRAD_ICON_COURS = null
WHERE SOPMAL_CD = #{shopCd} AND MBR_GRAD_INNB = #{fileSeq}
]]>
</if>
<!-- 팝업관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'POUP')">
<![CDATA[
UPDATE GC_DESIGN_POPUP
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND POPUP_INNB = #{fileSeq}
]]>
</if>
<!-- 이벤트관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'EVNT')">
<![CDATA[
UPDATE GC_EVENT
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND EVT_INNB = #{fileSeq}
]]>
</if>
<!-- 메인화면관리(상단) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANT')">
<![CDATA[
UPDATE GC_DESIGN
SET TOP_ORGINL_FIL_NM=null, TOP_SYS_FIL_NM=null, TOP_FIL_MG=null, TOP_FIL_TY=null, TOP_FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND MAIN_SITE_INNB = #{fileSeq}
]]>
</if>
<!-- 메인화면관리(하단) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANB')">
<![CDATA[
UPDATE GC_DESIGN
SET FOOTER_ORGINL_FIL_NM=null, FOOTER_SYS_FIL_NM=null, FOOTER_FIL_MG=null, FOOTER_FIL_TY=null, FOOTER_FIL_COURS=null
WHERE SOPMAL_CD = #{shopCd} AND MAIN_SITE_INNB = #{fileSeq}
]]>
</if>
<!-- 메인컨텐츠관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANC')">
<![CDATA[
UPDATE GC_DESIGN_CONTENTS_ITEM
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE MAIN_SETUP_ITEM_INNB = #{fileSeq}
]]>
</if>
<!-- 메시지관리(인트라넷) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSI')">
<![CDATA[
DELETE FROM GC_INTRANET_SMS_FILE A
WHERE A.F_SEQ = #{fileSeq}
]]>
</if>
<!-- 메시지관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSF')">
<![CDATA[
DELETE FROM GC_SMS_FILE A
WHERE A.SMS_FILE_INNB = #{fileSeq}
]]>
</if>
<!-- 대용량메시지관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSQ')">
<![CDATA[
UPDATE GC_LGQY_SMS
SET ORGINL_FIL_NM=null, SYS_FIL_NM=null, FIL_MG=null, FIL_TY=null, FIL_COURS=null
WHERE SMS_LGQY_SNDNG_INNB = #{fileSeq}
]]>
</if>
<!-- 매장관리(대표이미지) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'STOR')">
<![CDATA[
UPDATE GC_STORE
SET STR_REPRSNT_IMG=null
WHERE STR_INNB = #{fileSeq}
]]>
</if>
</update>
<!-- 상품 이미지 정보 수정 -->
<!-- 상품정보 조회 -->
<select id="selectGoodsInfo"
parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO"
resultType="dataMap">
<![CDATA[
SELECT A.CUT_NB, A.GOODS_INNB FROM GC_GOODS_IMAGE A WHERE A.GOODS_IMG_INNB = #{fileSeq} AND A.SOPMAL_CD = #{shopCd}
]]>
</select>
<delete id="updateBOGoodsFileInfo" parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO">
<![CDATA[
DELETE FROM GC_GOODS_IMAGE
WHERE SOPMAL_CD = #{shopCd} and GOODS_INNB = #{goodsInnb} and CUT_NB = #{cutNb}
]]>
</delete>
<!-- 이미지 경로 조회 -->
<select id = "selectBOFileInfo"
parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO"
resultType="dataMap">
<!-- 인트라넷 게시판 첨부파일 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'ITRB')">
<![CDATA[
SELECT concat(A.FIL_COURS , CASE WHEN RIGHT(FIL_COURS, 1) = '/' THEN '' ELSE '/' END , A.SYS_FIL_NM) AS FILE_FULL_PATH
, FIL_DV_CD, ORGINL_FIL_NM
FROM GC_INTRANET_BOARDDATA_FILE A
WHERE A.SOPMAL_CD = #{shopCd} AND A.BBSCTT_ATCHMNFIL_INNB = #{fileSeq}
]]>
</if>
<!-- 게시판 첨부파일 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BDFL')">
<![CDATA[
SELECT concat(A.FIL_COURS , CASE WHEN RIGHT(FIL_COURS, 1) = '/' THEN '' ELSE '/' END , A.SYS_FIL_NM) AS FILE_FULL_PATH
, FIL_DV_CD, ORGINL_FIL_NM
FROM GC_BOARDDATA_FILE A
WHERE A.SOPMAL_CD = #{shopCd} AND A.BBSCTT_ATCHMNFIL_INNB = #{fileSeq}
]]>
</if>
<!-- 게시판 대표이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BDIG')">
<![CDATA[
SELECT REPRSNT_IMG_SYS_FIL_NM AS FILE_FULL_PATH
, '01' FIL_DV_CD , '' ORGINL_FIL_NM
FROM GC_BOARDDATA
WHERE SOPMAL_CD = #{shopCd} AND BBSCTT_INNB = #{fileSeq}
]]>
</if>
<!-- 배너관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'BANR')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_GOODS_BANNER A
WHERE SOPMAL_CD = #{shopCd} AND BANNER_INNB = #{fileSeq}
]]>
</if>
<!-- 회원관리 등급이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MBRG')">
<![CDATA[
SELECT MBR_GRAD_ICON_COURS AS FILE_FULL_PATH
, '01' FIL_DV_CD , '' ORGINL_FIL_NM
FROM GC_MEMBER_GRAD
WHERE MBR_GRAD_INNB = #{fileSeq}
AND SOPMAL_CD = #{shopCd}
]]>
</if>
<!-- 상품 이미지 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'GDIG')">
<![CDATA[
SELECT IMG AS FILE_FULL_PATH
, '01' FIL_DV_CD , '' ORGINL_FIL_NM
FROM GC_GOODS_IMAGE A
WHERE A.SOPMAL_CD = 'NC' AND A.GOODS_IMG_INNB = #{fileSeq}
]]>
</if>
<!-- 팝업관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'POUP')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM ) AS FILE_FULL_PATH
, '01' FIL_DV_CD, ORGINL_FIL_NM
FROM GC_DESIGN_POPUP A
WHERE A.POPUP_INNB = #{fileSeq}
]]>
</if>
<!-- 이벤트관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'EVNT')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_EVENT A
WHERE SOPMAL_CD = #{shopCd} AND EVT_INNB = #{fileSeq}
]]>
</if>
<!-- 메인화면관리(상단) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANT')">
<![CDATA[
SELECT concat(A.TOP_FIL_COURS ,'/', A.TOP_SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , TOP_ORGINL_FIL_NM AS ORGINL_FIL_NM
FROM GC_DESIGN A
WHERE SOPMAL_CD = #{shopCd} AND MAIN_SITE_INNB = #{fileSeq}
]]>
</if>
<!-- 메인화면관리(하단) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANB')">
<![CDATA[
SELECT concat(A.FOOTER_FIL_COURS ,'/', A.FOOTER_SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , FOOTER_ORGINL_FIL_NM AS ORGINL_FIL_NM
FROM GC_DESIGN A
WHERE SOPMAL_CD = #{shopCd} AND MAIN_SITE_INNB = #{fileSeq}
]]>
</if>
<!-- 메인컨텐츠관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'MANC')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_DESIGN_CONTENTS_ITEM A
WHERE MAIN_SETUP_ITEM_INNB = #{fileSeq}
]]>
</if>
<!-- 메시지관리(인트라넷) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSI')">
<![CDATA[
SELECT CONCAT(A.F_COURSE ,'/', A.F_NAME) AS FILE_FULL_PATH
, '01' FIL_DV_CD , F_NAME_ORG AS ORGINL_FIL_NM
FROM GC_INTRANET_SMS_FILE A
WHERE A.F_SEQ = #{fileSeq}
]]>
</if>
<!-- 메시지관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSF')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_SMS_FILE A
WHERE A.SMS_FILE_INNB = #{fileSeq}
]]>
</if>
<!-- 대용량메시지관리 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'SMSQ')">
<![CDATA[
SELECT concat(A.FIL_COURS ,'/', A.SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_LGQY_SMS A
WHERE A.SMS_LGQY_SNDNG_INNB = #{fileSeq}
]]>
</if>
<!-- 카테고리조회 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'CTGY')">
<![CDATA[
SELECT concat(FIL_COURS ,'/', SYS_FIL_NM) AS FILE_FULL_PATH
, '01' FIL_DV_CD , ORGINL_FIL_NM
FROM GC_CATEGORY
WHERE CTGRY_ID = #{fileSeq}
AND SOPMAL_CD = #{shopCd}
]]>
</if>
<!-- 매장관리(대표이미지) -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(menuGb, 'STOR')">
<![CDATA[
SELECT STR_REPRSNT_IMG AS FILE_FULL_PATH
, '01' FIL_DV_CD
FROM GC_STORE
WHERE STR_INNB = #{fileSeq}
]]>
</if>
</select>
<select id = "selectEncptKey"
parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO"
resultType = "java.lang.String">
<![CDATA[
SELECT ENCPT_KEY
FROM GC_ENCPT_KEY A
WHERE ENCPT_KEY_DV_CD = #{encptKeyDvCd}
AND IDNTFC_INNB = #{idntfcInnb}
]]>
</select>
<insert id="insertEncptKey" parameterType="com.wb.domainserver.domain.gcone.common.vo.BOCommonVO">
<selectKey order="BEFORE" keyProperty="encptKeyInnb" resultType="java.lang.String">
<![CDATA[
SELECT IFNULL(MAX(ENCPT_KEY_INNB), 0)+1
FROM GC_ENCPT_KEY
]]>
</selectKey>
<![CDATA[
INSERT INTO GC_ENCPT_KEY (
ENCPT_KEY_INNB,
ENCPT_KEY_DV_CD,
IDNTFC_INNB,
ENCPT_KEY,
REGUSR,
REGIST_DT
)
VALUES (
#{encptKeyInnb},
#{encptKeyDvCd},
#{idntfcInnb},
#{encptKey},
${regusr},
SYSDATE()
)
]]>
</insert>
</mapper>

View File

@@ -0,0 +1,376 @@
<?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.wb.domainserver.domain.gcone.goods.banner.mapper.BOBannerMapper">
<!-- 배너 상세조회, 수정, 삭제 조건절-->
<sql id="selectBOMapperKeyWhere">
<![CDATA[
WHERE 1=1
AND BANNER_INNB = #{bannerInnb}
]]>
</sql>
<!-- 배너목록 카운트 -->
<select id="selectBOBannerListCnt"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT count(*)
FROM (SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
, TB.*
FROM (SELECT BANNER_INNB
, BANNER_NM
, EXPSRLC_DV
, EXPSRLC_DV_CD
, DATE_FORMAT(EXPSR_BGN_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_BGN_DT
, DATE_FORMAT(EXPSR_END_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_END_DT
, REGUSR
, REGIST_DT
, DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, UPDUSR
, UPDT_DT
, DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
, (SELECT COUNT(1) FROM GC_SHOP_GOODS_BANNER FSGB WHERE FSGB.BANNER_INNB = FGB.BANNER_INNB) AS GOODS_CNT
FROM GC_GOODS_BANNER FGB
WHERE 1=1
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
BANNER_INNB DESC ) TB
WHERE (@ROWNUM:=0) = 0 ) PV
WHERE 1=1
]]>
</select>
<!-- 배너 목록 조회 -->
<select id="selectBOBannerList"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM (SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
, TB.*
FROM (SELECT BANNER_INNB
, BANNER_NM
, EXPSRLC_DV
, EXPSRLC_DV_CD
, DATE_FORMAT(EXPSR_BGN_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_BGN_DT
, DATE_FORMAT(EXPSR_END_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_END_DT
, REGUSR
, REGIST_DT
, DATE_FORMAT(REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, UPDUSR
, UPDT_DT
, DATE_FORMAT(UPDT_DT, '%Y-%m-%d') AS UPDT_DE
, (SELECT COUNT(FSGB.GOODS_INNB) FROM GC_SHOP_GOODS_BANNER FSGB WHERE FSGB.BANNER_INNB = FGB.BANNER_INNB) AS GOODS_CNT
, (SELECT COUNT(FSGB.CTGRY_ID) FROM GC_SHOP_GOODS_BANNER FSGB WHERE FSGB.BANNER_INNB = FGB.BANNER_INNB) AS CTGRY_CNT
FROM GC_GOODS_BANNER FGB
WHERE 1=1
AND USE_AT = 'Y'
AND SOPMAL_CD = #{sopmalCd}
ORDER BY
BANNER_INNB DESC ) TB
WHERE (@ROWNUM:=0) = 0 ) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 배너 등록 -->
<insert id="insertBOBanner"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO">
<selectKey order="BEFORE" keyProperty="bannerInnb" resultType="java.lang.Integer">
SELECT IFNULL(MAX(BANNER_INNB), 0)+1
FROM GC_GOODS_BANNER
</selectKey>
INSERT INTO GC_GOODS_BANNER (
BANNER_INNB
, SOPMAL_CD
, BANNER_NM
, EXPSRLC_DV
, EXPSRLC_DV_CD
, EXPSR_BGN_DT
, EXPSR_END_DT
, GOODS_APPLC_DV_CD
, BANNER_URL
, ORGINL_FIL_NM
, SYS_FIL_NM
, FIL_MG
, FIL_TY
, FIL_COURS
, BANNER_ORDR
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{bannerInnb}
, #{sopmalCd}
, #{bannerNm}
, #{expsrlcDv}
, #{expsrlcDvCd}
<if test="expsrlcDvCd != '03'">
, NULL
, NULL
</if>
<if test="expsrlcDvCd == '03'">
, #{expsrBgnDt}
, #{expsrEndDt}
</if>
,#{goodsApplcDvCd}
,#{bannerUrl}
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(orginlFilNm)">
, #{orginlFilNm}
, #{sysFilNm}
, #{filMg}
, #{filTy}
, #{filCours}
</when>
<otherwise>
, NULL
, NULL
, NULL
, NULL
, NULL
</otherwise>
</choose>
, '99' -- 새로 등록한 배너 순서 맨뒤 지정
, 'Y'
, #{regusr}
, now()
, #{updusr}
, now()
)
</insert>
<!-- 배너 연결 상품 등록 -->
<insert id="insertBOBannerIncludeGoods"
parameterType="DataMap">
<selectKey order="BEFORE" keyProperty="shopGoodsBannerInnb" resultType="java.lang.Integer">
SELECT IFNULL(MAX(SHOP_GOODS_BANNER_INNB), 0)+1
FROM GC_SHOP_GOODS_BANNER
</selectKey>
INSERT INTO GC_SHOP_GOODS_BANNER (
SHOP_GOODS_BANNER_INNB
, GOODS_INNB
, SOPMAL_CD
, BANNER_INNB
, REGUSR
, REGIST_DT
)
VALUES (
#{shopGoodsBannerInnb}
, #{goodsInnb}
, #{sopmalCd}
, #{bannerInnb}
, #{regusr}
, now()
)
</insert>
<!-- 배너 연결 상품 카테고리ID 등록 -->
<insert id="insertBOBannerIncludeGoodsCtgryId"
parameterType="DataMap">
<selectKey order="BEFORE" keyProperty="shopGoodsBannerInnb" resultType="java.lang.Integer">
SELECT IFNULL(MAX(SHOP_GOODS_BANNER_INNB), 0)+1
FROM GC_SHOP_GOODS_BANNER
</selectKey>
INSERT INTO GC_SHOP_GOODS_BANNER (
SHOP_GOODS_BANNER_INNB
, CTGRY_ID
, SOPMAL_CD
, BANNER_INNB
, REGUSR
, REGIST_DT
)
VALUES (
#{shopGoodsBannerInnb}
, #{ctgryId}
, #{sopmalCd}
, #{bannerInnb}
, #{regusr}
, now()
)
</insert>
<!-- 배너수정 -->
<update id="updateBOBannerDtl" parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO">
UPDATE GC_GOODS_BANNER
SET
BANNER_NM = #{bannerNm}
, EXPSRLC_DV = #{expsrlcDv}
, EXPSRLC_DV_CD = #{expsrlcDvCd}
<if test="expsrlcDvCd == '03'">
, EXPSR_BGN_DT = #{expsrBgnDt}
, EXPSR_END_DT = #{expsrEndDt}
</if>
<if test="expsrlcDvCd != '03'">
, EXPSR_BGN_DT = NULL
, EXPSR_END_DT = NULL
</if>
<choose>
<when test="fileUse == 'new'">
, ORGINL_FIL_NM = #{orginlFilNm}
, SYS_FIL_NM = #{sysFilNm}
, FIL_MG = #{filMg}
, FIL_TY = #{filTy}
, FIL_COURS = #{filCours}
</when>
<when test="fileUse == 'none'">
, ORGINL_FIL_NM = NULL
, SYS_FIL_NM = NULL
, FIL_MG = NULL
, FIL_TY = NULL
, FIL_COURS = NULL
</when>
<otherwise>
</otherwise>
</choose>
, BANNER_URL = #{bannerUrl}
, GOODS_APPLC_DV_CD = #{goodsApplcDvCd}
, UPDUSR = #{updusr}
, UPDT_DT = now()
<include refid="selectBOMapperKeyWhere"/>
</update>
<!-- 배너 삭제 -->
<update id="deleteBOBanner" parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO">
<![CDATA[
UPDATE GC_GOODS_BANNER
SET USE_AT = 'N'
, UPDUSR = #{updusr}
, UPDT_DT = now()
]]>
<include refid="selectBOMapperKeyWhere"/>
</update>
<!-- 배너 상세 조회 -->
<select id="selectBOBannerDtlForm"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="dataMap">
<![CDATA[
SELECT GGB.BANNER_INNB
, GGB.SOPMAL_CD
, GGB.BANNER_NM
, GGB.EXPSRLC_DV
, GGB.EXPSRLC_DV_CD
, DATE_FORMAT(GGB.EXPSR_BGN_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_BGN_DT
, DATE_FORMAT(GGB.EXPSR_END_DT, '%Y-%m-%d %h:%i:%s') AS EXPSR_END_DT
, DATE_FORMAT(GGB.EXPSR_BGN_DT, '%Y-%m-%d') AS EXPSR_BGN_YMD
, DATE_FORMAT(GGB.EXPSR_END_DT, '%Y-%m-%d') AS EXPSR_END_YMD
, DATE_FORMAT(GGB.EXPSR_BGN_DT, '%h:%i') AS EXPSR_BGN_TIME
, DATE_FORMAT(GGB.EXPSR_END_DT, '%h:%i') AS EXPSR_END_TIME
, GGB.BANNER_URL
, GGB.ORGINL_FIL_NM
, GGB.SYS_FIL_NM
, GGB.FIL_MG
, GGB.FIL_TY
, GGB.FIL_COURS
, GGB.REGUSR
, GGB.REGIST_DT
, DATE_FORMAT(GGB.REGIST_DT, '%Y-%m-%d') AS REGIST_DE
, GGB.UPDUSR
, GGB.UPDT_DT
, DATE_FORMAT(GGB.UPDT_DT, '%Y-%m-%d') AS UPDT_DE
, GGB.GOODS_APPLC_DV_CD
FROM GC_GOODS_BANNER GGB
WHERE 1=1
AND GGB.BANNER_INNB =#{bannerInnb}
AND GGB.SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 배너 연결 상품 조회 -->
<select id="selectBOBannerIncludeGoods"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="String">
SELECT GOODS_INNB
FROM GC_SHOP_GOODS_BANNER
WHERE 1=1
AND SOPMAL_CD =#{sopmalCd}
AND BANNER_INNB = #{bannerInnb}
</select>
<!--배너 카테고리 정보 조회-->
<select id="selectBOBannerCtgry" parameterType="dataMap" resultType="dataMap">
WITH RECURSIVE category AS (
SELECT CTGRY_ID, CTGRY_NM, UPPER_CTGRY_ID, SOPMAL_CD, CTGRY_NM as full_path
FROM GC_CATEGORY
where SOPMAL_CD = #{sopmalCd}
AND UPPER_CTGRY_ID = 2
UNION ALL
SELECT c.CTGRY_ID, c.CTGRY_NM, c.UPPER_CTGRY_ID, c.SOPMAL_CD, CONCAT(ch.full_path , ' > ', c.CTGRY_NM ) AS full_path
FROM GC_CATEGORY c
INNER JOIN category ch
ON c.UPPER_CTGRY_ID = ch.CTGRY_ID
AND c.sopmal_cd = ch.sopmal_cd
)
SELECT
cc.CTGRY_ID,
cc.CTGRY_NM,
cc.UPPER_CTGRY_ID,
cc.SOPMAL_CD,
cc.full_path,
GSGB.GOODS_INNB
FROM category cc
JOIN GC_SHOP_GOODS_BANNER GSGB
where GSGB.SOPMAL_CD = cc.sopmal_cd
AND GSGB.CTGRY_ID = cc.CTGRY_ID
AND GSGB.sopmal_cd = #{sopmalCd}
AND GSGB.BANNER_INNB = #{bannerInnb}
ORDER BY CTGRY_ID;
</select>
<!-- 배너 연결 상품 삭제 -->
<delete id="deleteBOBannerIncludeGoods"
parameterType="java.lang.Integer">
DELETE FROM GC_SHOP_GOODS_BANNER
WHERE 1=1
AND BANNER_INNB = #{bannerInnb}
</delete>
<!-- 배너 연결 상품 조회 -->
<select id="selectBOBannerIncludeGoodsCnt"
parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO"
resultType="java.lang.Integer">
SELECT count(1)
FROM GC_SHOP_GOODS_BANNER
WHERE 1=1
AND BANNER_INNB = #{bannerInnb}
</select>
<!--배너 순서지정팝업조회-->
<select id="selectBOBannerOrdrPopup" parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO" resultType="dataMap">
SELECT
GGB.BANNER_INNB,
GGB.SOPMAL_CD,
GGB.BANNER_NM,
GGB.EXPSRLC_DV, -- 상단, 하단
GGB.BANNER_ORDR
FROM
GC_GOODS_BANNER GGB
WHERE
1 = 1
AND GGB.USE_AT = 'Y'
AND GGB.SOPMAL_CD = #{sopmalCd}
AND(CASE WHEN GGB.EXPSRLC_DV_CD = '01' THEN 'Y'
WHEN GGB.EXPSRLC_DV_CD = '03' AND DATE_FORMAT(SYSDATE(), '%Y-%m-%d') BETWEEN GGB.EXPSR_BGN_DT AND GGB.EXPSR_END_DT THEN 'Y'
ELSE 'N' END )='Y' -- 노출구분이 01 이거나 노출예약이면서 노출기간이 오늘 기준안에 있으면 Y 미노출이면 N)
ORDER BY GGB.BANNER_ORDR ASC
</select>
<!--배너순서수정-->
<update id="updateBOBannerOrdr" parameterType="com.wb.domainserver.domain.gcone.goods.banner.vo.BOBannerVO">
UPDATE
GC_GOODS_BANNER GGB
SET
GGB.BANNER_ORDR = #{bannerOrdr},
GGB.UPDUSR = #{updusr},
GGB.UPDT_DT = SYSDATE()
WHERE 1=1
AND GGB.SOPMAL_CD = #{sopmalCd}
AND GGB.BANNER_INNB = #{bannerInnb}
</update>
</mapper>

View File

@@ -0,0 +1,108 @@
<?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.wb.domainserver.domain.gcone.goods.cmnuse.mapper.BOCmnuseMapper">
<!-- 상품 공용정보 목록 조회 -->
<select id="selectBOCmnuseInfoList"
parameterType = "com.wb.domainserver.domain.gcone.goods.cmnuse.vo.BOCmnuseVO" >
SELECT
ROW_NUMBER() OVER(ORDER BY i.REGIST_DT ASC) RNUM
,i.CMNUSE_INFO_INNB as CMNUSE_INFO_INNB
,i.CMNUSE_INFO_SJ as CMNUSE_INFO_SJ
,DATE_FORMAT(i.REGIST_DT, '%Y-%m-%d %H:%i') as REGIST_DT
, IFNULL(fg.LINKGOODS, 0) as LINKGOODS
FROM GC_GOODS_INFO i
LEFT JOIN
(
SELECT
CMNUSE_INFO_INNB
,COUNT(GOODS_INNB) as LINKGOODS
,SOPMAL_CD
FROM GC_GOODS
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
GROUP BY CMNUSE_INFO_INNB
) fg
ON i.CMNUSE_INFO_INNB = fg.CMNUSE_INFO_INNB
WHERE 1=1
AND i.SOPMAL_CD =#{sopmalCd}
AND i.USE_AT ='Y'
ORDER BY REGIST_DT DESC
</select>
<!-- 상품 공용정보 상세 조회 -->
<select id="selectBOCmnuseInfoDtl">
SELECT
CMNUSE_INFO_INNB,
SOPMAL_CD,
CMNUSE_INFO_SJ,
INFO_CN
FROM GC_GOODS_INFO
WHERE 1=1
AND CMNUSE_INFO_INNB = #{cmnuseInfoInnb}
AND USE_AT ='Y'
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 상품 공용정보 등록 -->
<insert id="insertBOCmnuseInfo"
parameterType = "com.wb.domainserver.domain.gcone.goods.cmnuse.vo.BOCmnuseVO" >
<selectKey keyProperty="cmnuseInfoInnb" resultType="String" order="BEFORE">
SELECT IFNULL(MAX(CMNUSE_INFO_INNB), 0) + 1
FROM GC_GOODS_INFO
</selectKey>
INSERT INTO GC_GOODS_INFO
(
CMNUSE_INFO_INNB,
SOPMAL_CD,
<if test="bsnmInnb != null and bsnmInnb != ''">
BSNM_INNB,
</if>
<if test="cmnuseInfoSj != null and cmnuseInfoSj != ''">
CMNUSE_INFO_SJ,
</if>
<if test="infoCn != null and infoCn != ''">
INFO_CN,
</if>
USE_AT,
REGUSR,
REGIST_DT
)
VALUES (
#{cmnuseInfoInnb},
#{sopmalCd},
<if test="bsnmInnb != null and bsnmInnb != ''">
#{bsnmInnb},
</if>
<if test="cmnuseInfoSj != null and cmnuseInfoSj != ''">
#{cmnuseInfoSj},
</if>
<if test="infoCn != null and infoCn != ''">
#{infoCn},
</if>
'Y',
#{regusr},
SYSDATE()
)
</insert>
<!-- 상품 공용정보 수정 -->
<update id="updateBOCmnuseInfoDtl">
UPDATE GC_GOODS_INFO
SET CMNUSE_INFO_SJ = #{cmnuseInfoSj},
INFO_CN = #{infoCn},
UPDUSR = #{updusr},
UPDT_DT = now()
WHERE CMNUSE_INFO_INNB = #{cmnuseInfoInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 상품 공용정보 삭제 -->
<update id="deleteBOCmnuseInfo">
update GC_GOODS_INFO
SET USE_AT = 'N'
WHERE CMNUSE_INFO_INNB = #{cmnuseInfoInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
</mapper>

View File

@@ -0,0 +1 @@
<?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.wb.domainserver.domain.gcone.goods.ctgry.mapper.BOCtgryMapper"></mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,298 @@
<?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.wb.domainserver.domain.gcone.goods.goodsinfo.mapper.BOGoodsinfoMapper">
<!-- 상품 정보 목록 조회 -->
<select id="selectBOGoodsInfoList"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO"
resultType = "com.wb.domainserver.util.dataaccess.DataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
GOODS_EXPSR_INFO_INNB,
GOODS_INFO_SETUP_SJ,
GOODS_NM_EXPSR_AT,
GOODS_NM_EXPSR_ORDR,
REPRSNT_DC_EXPSR_AT,
REPRSNT_DC_EXPSR_ORDR,
PRIC_EXPSR_AT,
PRIC_EXPSR_ORDR,
DLVY_EXPSR_AT,
DLVY_EXPSR_ORDR,
RVW_EVL_SCRE_EXPSR_AT,
RVW_EVL_SCRE_EXPSR_ORDR,
ICON_EXPSR_AT,
ICON_EXPSR_ORDR,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
FROM
GC_GOODS_EXPSR_INFO
WHERE
USE_AT = 'Y'
) BM
WHERE
(@ROWNUM:=0)=0
ORDER BY RNUM DESC
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<select id="selectBOGoodsInfoListCnt"
parameterType="com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO" resultType="Integer">
SELECT
COUNT(1)
FROM
GC_GOODS_EXPSR_INFO
WHERE
USE_AT = 'Y'
</select>
<select id="selectBOGoodsInfoDtl"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO"
resultType = "com.wb.domainserver.util.dataaccess.DataMap">
SELECT
GOODS_EXPSR_INFO_INNB,
GOODS_INFO_SETUP_SJ,
GOODS_NM_EXPSR_AT,
GOODS_NM_EXPSR_ORDR,
REPRSNT_DC_EXPSR_AT,
REPRSNT_DC_EXPSR_ORDR,
PRIC_EXPSR_AT,
PRIC_EXPSR_ORDR,
DLVY_EXPSR_AT,
DLVY_EXPSR_ORDR,
RVW_EVL_SCRE_EXPSR_AT,
RVW_EVL_SCRE_EXPSR_ORDR,
ICON_EXPSR_AT,
ICON_EXPSR_ORDR,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
FROM
GC_GOODS_EXPSR_INFO
WHERE
1=1
AND
SOPMAL_CD = #{sopmalCd}
</select>
<!-- 상품 정보 등록 -->
<insert id="insertBOGoodsInfo"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO" >
<selectKey keyProperty = "goodsExpsrInfoInnb" resultType = "String" order="BEFORE">
SELECT IFNULL(MAX(GOODS_EXPSR_INFO_INNB),0) + 1
FROM GC_GOODS_EXPSR_INFO
</selectKey>
INSERT
INTO
GC_GOODS_EXPSR_INFO (
GOODS_EXPSR_INFO_INNB,
SOPMAL_CD,
GOODS_INFO_SETUP_SJ,
<if test="goodsNmExpsrAt != null and goodsNmExpsrAt != ''">
GOODS_NM_EXPSR_AT,
</if>
<if test="goodsNmExpsrOrdr != null and goodsNmExpsrOrdr != ''">
GOODS_NM_EXPSR_ORDR,
</if>
<if test="reprsntDcExpsrAt != null and reprsntDcExpsrAt != ''">
REPRSNT_DC_EXPSR_AT,
</if>
<if test="reprsntDcExpsrOrdr != null and reprsntDcExpsrOrdr != ''">
REPRSNT_DC_EXPSR_ORDR,
</if>
<if test="pricExpsrAt != null and pricExpsrAt != ''">
PRIC_EXPSR_AT,
</if>
<if test="pricExpsrOrdr != null and pricExpsrOrdr != ''">
PRIC_EXPSR_ORDR,
</if>
<if test="dlvyExpsrAt != null and dlvyExpsrAt != ''">
DLVY_EXPSR_AT,
</if>
<if test="dlvyExpsrOrdr != null and dlvyExpsrOrdr != ''">
DLVY_EXPSR_ORDR,
</if>
<if test="rvwEvlScreExpsrAt != null and rvwEvlScreExpsrAt != ''">
RVW_EVL_SCRE_EXPSR_AT,
</if>
<if test="rvwEvlScreExpsrOrdr != null and rvwEvlScreExpsrOrdr != ''">
RVW_EVL_SCRE_EXPSR_ORDR,
</if>
<if test="iconExpsrAt != null and iconExpsrAt != ''">
ICON_EXPSR_AT,
</if>
<if test="iconExpsrOrdr != null and iconExpsrOrdr != ''">
ICON_EXPSR_ORDR,
</if>
USE_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
)
VALUES (
#{goodsExpsrInfoInnb},
#{sopmalCd},
#{goodsInfoSetupSj},
<if test="goodsNmExpsrAt != null and goodsNmExpsrAt != ''">
#{goodsNmExpsrAt},
</if>
<if test="goodsNmExpsrOrdr != null and goodsNmExpsrOrdr != ''">
#{goodsNmExpsrOrdr},
</if>
<if test="reprsntDcExpsrAt != null and reprsntDcExpsrAt != ''">
#{reprsntDcExpsrAt},
</if>
<if test="reprsntDcExpsrOrdr != null and reprsntDcExpsrOrdr != ''">
#{reprsntDcExpsrOrdr},
</if>
<if test="pricExpsrAt != null and pricExpsrAt != ''">
#{pricExpsrAt},
</if>
<if test="pricExpsrOrdr != null and pricExpsrOrdr != ''">
#{pricExpsrOrdr},
</if>
<if test="dlvyExpsrAt != null and dlvyExpsrAt != ''">
#{dlvyExpsrAt},
</if>
<if test="dlvyExpsrOrdr != null and dlvyExpsrOrdr != ''">
#{dlvyExpsrOrdr},
</if>
<if test="rvwEvlScreExpsrAt != null and rvwEvlScreExpsrAt != ''">
#{rvwEvlScreExpsrAt},
</if>
<if test="rvwEvlScreExpsrOrdr != null and rvwEvlScreExpsrOrdr != ''">
#{rvwEvlScreExpsrOrdr},
</if>
<if test="iconExpsrAt != null and iconExpsrAt != ''">
#{iconExpsrAt},
</if>
<if test="iconExpsrOrdr != null and iconExpsrOrdr != ''">
#{iconExpsrOrdr},
</if>
#{useAt},
#{regusr},
now(),
#{regusr},
now()
)
</insert>
<!-- 상품 정보 수정 -->
<update id="updateBOGoodsInfoDtl"
parameterType = "com.wb.domainserver.domain.gcone.bbs.bbs.vo.BOBbsVO">
UPDATE
GC_GOODS_EXPSR_INFO
SET
GOODS_INFO_SETUP_SJ = #{goodsInfoSetupSj},
<if test="goodsNmExpsrAt != null and goodsNmExpsrAt != ''">
GOODS_NM_EXPSR_AT = #{goodsNmExpsrAt},
</if>
<if test="goodsNmExpsrOrdr != null and goodsNmExpsrOrdr != ''">
GOODS_NM_EXPSR_ORDR = #{goodsNmExpsrOrdr},
</if>
<if test="reprsntDcExpsrAt != null and reprsntDcExpsrAt != ''">
REPRSNT_DC_EXPSR_AT = #{reprsntDcExpsrAt},
</if>
<if test="reprsntDcExpsrOrdr != null and reprsntDcExpsrOrdr != ''">
REPRSNT_DC_EXPSR_ORDR = #{reprsntDcExpsrOrdr},
</if>
<if test="pricExpsrAt != null and pricExpsrAt != ''">
PRIC_EXPSR_AT = #{pricExpsrAt},
</if>
<if test="pricExpsrOrdr != null and pricExpsrOrdr != ''">
PRIC_EXPSR_ORDR = #{pricExpsrOrdr},
</if>
<if test="dlvyExpsrAt != null and dlvyExpsrAt != ''">
DLVY_EXPSR_AT = #{dlvyExpsrAt},
</if>
<if test="dlvyExpsrOrdr != null and dlvyExpsrOrdr != ''">
DLVY_EXPSR_ORDR = #{dlvyExpsrOrdr},
</if>
<if test="rvwEvlScreExpsrAt != null and rvwEvlScreExpsrAt != ''">
RVW_EVL_SCRE_EXPSR_AT = #{rvwEvlScreExpsrAt},
</if>
<if test="rvwEvlScreExpsrOrdr != null and rvwEvlScreExpsrOrdr != ''">
RVW_EVL_SCRE_EXPSR_ORDR = #{rvwEvlScreExpsrOrdr},
</if>
<if test="iconExpsrAt != null and iconExpsrAt != ''">
ICON_EXPSR_AT = #{iconExpsrAt},
</if>
<if test="iconExpsrOrdr != null and iconExpsrOrdr != ''">
ICON_EXPSR_ORDR = #{iconExpsrOrdr},
</if>
UPDUSR = #{updusr},
UPDT_DT = now()
WHERE
1=1
AND
GOODS_EXPSR_INFO_INNB = #{goodsExpsrInfoInnb}
</update>
<!-- 상품정보 삭제 -->
<update id="updateBOGoodsInfoDel"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO">
UPDATE
GC_GOODS_EXPSR_INFO
SET
USE_AT = 'N'
WHERE
1=1
AND
GOODS_EXPSR_INFO_INNB = #{goodsExpsrInfoInnb}
</update>
<!-- 상품정보 삭제 -->
<!-- <delete id="deleteBOGoodsInfo"
parameterType = "com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO">
DELETE FROM
GC_GOODS_EXPSR_INFO
WHERE
1=1
AND
GOODS_EXPSR_INFO_INNB = #{goodsExpsrInfoInnb}
</delete> -->
<select id="selectBOGoodsInfoListNotLimit" resultType = "DataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, BM.*
FROM (
SELECT
GOODS_EXPSR_INFO_INNB,
GOODS_INFO_SETUP_SJ,
GOODS_NM_EXPSR_AT,
GOODS_NM_EXPSR_ORDR,
REPRSNT_DC_EXPSR_AT,
REPRSNT_DC_EXPSR_ORDR,
PRIC_EXPSR_AT,
PRIC_EXPSR_ORDR,
DLVY_EXPSR_AT,
DLVY_EXPSR_ORDR,
RVW_EVL_SCRE_EXPSR_AT,
RVW_EVL_SCRE_EXPSR_ORDR,
ICON_EXPSR_AT,
ICON_EXPSR_ORDR,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
FROM
GC_GOODS_EXPSR_INFO
WHERE
USE_AT = 'Y'
) BM
WHERE
(@ROWNUM:=0)=0
ORDER BY RNUM DESC
) PV
WHERE 1=1
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,400 @@
<?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.wb.domainserver.domain.gcone.goods.subsvc.mapper.BOSubsvcMapper">
<!-- 구독서비스 목록 조회 -->
<select id="selectBOSubsvcList"
parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO"
resultType="dataMap">
<![CDATA[
SELECT GS.SUBSVC_INNB
, SUBSVC_STTUS_CD
, CONCAT(GS.SUBSVC_NM, ' (', GS.SUBSVC_GNR_NM, ')') AS SUBSVC_CONCAT_NM
FROM GC_SUBSVC GS
WHERE GS.SOPMAL_CD = 'SK'
AND GS.SUBSVC_STTUS_CD != '03'
AND GS.EXPSR_DV_CD IN ('01','03')
AND
CASE
WHEN EXPSR_DV_CD = '03'
THEN NOW() BETWEEN GS.EXPSR_BGN_DT AND GS.EXPSR_END_DT
ELSE 1=1
END
AND GS.USE_AT = 'Y'
]]>
</select>
<!-- 구독서비스 상세 조회 -->
<select id="selectBOSubsvcDetail"
parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO"
resultType="dataMap">
<![CDATA[
SELECT GS.SUBSVC_INNB
, GS.SOPMAL_CD
, GS.SUBSVC_NM
, GS.SUB_PD /*구독기간*/
, GS.SUBSVC_GNR /*기수*/
, (SELECT MAX(A.SUBSVC_GNR) + 1 FROM GC_SUBSVC A WHERE A.SOPMAL_CD = GS.SOPMAL_CD AND A.SUBSVC_NM = GS.SUBSVC_NM) AS SUBSVC_NEXT_GNR /*다음기수*/
, GS.SUBSVC_GNR_NM /*기수명*/
, CONCAT(GS.SUBSVC_NM, ' (', GS.SUBSVC_GNR_NM, ')') AS SUBSVC_CONCAT_NM
, GS.DLVY_CNT /*배송횟수*/
, GS.DLVY_CYCLE /*배송주기*/
, GS.SUBSVC_CT /*구독료*/
, GS.TME_DLVY_AMT /*1회배송비*/
, GS.CNSMRPRIC /*소비자가*/
, GS.SUBSVC_CT + (TME_DLVY_AMT * DLVY_CNT) as SLEPRIC /*실판매가=구독료+(1회배송비X배송횟수)*/
, ROUND((GS.CNSMRPRIC - (GS.SUBSVC_CT + (TME_DLVY_AMT * DLVY_CNT))) / NULLIF(GS.CNSMRPRIC, 0) * 100, 0) AS DSCNT_RAITO
, GS.INVNTRY_QY /*재고수량*/
, GS.USEFUL_INVNTRY_QY /*판매재고수량*/
, GS.INVNTRY_QY - GS.USEFUL_INVNTRY_QY AS AVAIL_QT /*가용제고*/
, GS.SUBSVC_STTUS_CD /*상태코드*/
, FN_GET_COMMCODE_NAME('GOODS_STTUS', GS.SUBSVC_STTUS_CD) AS SUBSVC_STTUS
, FN_GET_COMMCODE_NAME('EXPSR_DV', GS.EXPSR_DV_CD) AS EXPSR_DV
, GS.EXPSR_DV_CD /*노출구분코드*/
, GS.EXPSR_BGN_DT /*노출시작일시*/
, GS.EXPSR_END_DT /*노출종료일시*/
, GS.INVNTRY_POLICY_CD /*재고정책코드*/
, GS.AVLINV_LMTT_QY /*가용재고제한수량*/
, GS.SUBSVC_DC /*구독서비스 설명*/
, GS.IMG /*섬네일 이미지*/
, GS.MBL_SUBSVC_DC /*모바일 구독서비스 설명*/
, GS.MBL_SUBSVC_DC_PC_SAME_AT /*모바일 구독서비스 설명 PC동일여부*/
, GS.LAST_PROCS_ODR /*최종차수*/
, GS.DFT_GOODS_OPTN_INNB /*기본상품옵션고유번호*/
, 1 AS QY /*구독서비스 결제 수량*/
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrInnb)">
, #{mbrInnb} AS mbrInnb /*회원 고유번호*/
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(mbrDvCd)">
, #{mbrDvCd} AS mbrDvCd /*회원구분코드*/
</if>
<![CDATA[
FROM GC_SUBSVC GS
WHERE GS.SOPMAL_CD = #{sopmalCd}
AND GS.SUBSVC_INNB = #{subsvcInnb}
]]>
</select>
<!-- 관리자 구독서비스 목록 조회 -->
<select id="selectBOMngrSubsvcList" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" resultType="dataMap">
SELECT *
FROM (
SELECT TB.*
, CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
FROM (
SELECT COUNT(*) OVER() AS TOT_CNT
, GS.SUBSVC_INNB
, GS.SOPMAL_CD
, CONCAT(GS.SUBSVC_NM, ' (', GS.SUBSVC_GNR_NM, ')') AS SUBSVC_CONCAT_NM
, GS.SUBSVC_NM
, GS.SUBSVC_GNR
, GS.SUBSVC_GNR_NM
, GS.DLVY_CNT
, GS.INVNTRY_QY
, GS.INVNTRY_QY - GS.USEFUL_INVNTRY_QY AS AVAIL_QT /*가용제고*/
, GS.SUBSVC_STTUS_CD
, FN_GET_COMMCODE_NAME('GOODS_STTUS', GS.SUBSVC_STTUS_CD) AS SUBSVC_STTUS /*구독서비스 상태*/
, FN_GET_COMMCODE_NAME('EXPSR_DV', GS.EXPSR_DV_CD) AS EXPSR_DV /*노출구분*/
, GS.SUBSVC_CT /*구독료*/
, GS.TME_DLVY_AMT /*1회배송비*/
, GS.CNSMRPRIC /*소비자가*/
, GS.SUBSVC_CT + (TME_DLVY_AMT * DLVY_CNT) as SELPRIC /*실판매가=구독료+(1회배송비X배송횟수)*/
, GS.IMG /*섬네일 이미지*/
, GS.LAST_PROCS_ODR /*최종차수*/
FROM GC_SUBSVC GS
WHERE GS.USE_AT = 'Y'
AND GS.SOPMAL_CD = #{sopmalCd}
<if test="srchSelSubsvcNm != null and srchSelSubsvcNm != ''">
AND GS.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
</if>
<if test="srchSelSubsvcGnr != null and srchSelSubsvcGnr != ''">
AND GS.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
</if>
<if test="srchSubsvcNm != null and srchSubsvcNm != ''">
AND GS.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
</if>
<if test="srchSubsvcGnrNm != null and srchSubsvcGnrNm != ''">
AND GS.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
</if>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchArrSubsvcSttusCd)">
/*판매상태*/
AND GS.SUBSVC_STTUS_CD IN
<foreach collection="srchArrSubsvcSttusCd" item="subsvcSttusCd" open="(" close=")" separator=",">
#{subsvcSttusCd}
</foreach>
</when>
</choose>
<if test="srchExpsrDvCd != null and srchExpsrDvCd != ''">
AND GS.EXPSR_DV_CD = #{srchExpsrDvCd} /*노출여부*/
</if>
ORDER BY
<choose>
<when test="sortDv == 'subsvcGnrAsc'">
GS.SUBSVC_NM ASC, SUBSVC_GNR ASC,
</when>
<otherwise>
GS.SUBSVC_NM DESC, SUBSVC_GNR DESC,
</otherwise>
</choose>
GS.SUBSVC_INNB ASC
) TB
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 관리자 구독서비스 조회조건 구독서비스 -->
<select id="selectBOMngrSrchSubsvcList" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" resultType="dataMap">
SELECT GC.SUBSVC_NM, MIN(GC.SUBSVC_INNB) SUBSVC_INNB
FROM GC_SUBSVC GC
WHERE GC.SOPMAL_CD = #{sopmalCd}
AND GC.USE_AT = 'Y'
GROUP BY GC.SUBSVC_NM
ORDER BY SUBSVC_INNB ASC
</select>
<!-- 관리자 구독서비스 조회조건 구독서비스별 기수 -->
<select id="selectBOMngrSrchSubsvcGnrList" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" resultType="dataMap">
<![CDATA[
SELECT GC.SUBSVC_GNR, CONCAT(GC.SUBSVC_GNR , '기 (', GC.SUBSVC_GNR_NM, ')') SUBSVC_GNR_NM
FROM GC_SUBSVC GC
WHERE GC.SUBSVC_NM = #{srchSelSubsvcNm}
AND GC.SOPMAL_CD = #{sopmalCd}
AND GC.USE_AT = 'Y'
GROUP BY GC.SUBSVC_GNR, GC.SUBSVC_GNR_NM
ORDER BY GC.SUBSVC_GNR ASC
]]>
</select>
<!--선택된 구독서비스 삭제(사용여부N처리)-->
<update id="deleteBOMngrSubsvc" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
UPDATE GC_SUBSVC
SET USE_AT = 'N'
,UPDUSR = #{updusr}
,UPDT_DT = NOW()
WHERE SOPMAL_CD = #{sopmalCd}
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(arrSubsvcInnb)">
AND SUBSVC_INNB IN
<foreach collection="arrSubsvcInnb" item="subsvcInnb" open="(" separator="," close=")">
#{subsvcInnb}
</foreach>
</when>
<otherwise>
AND 1=2
</otherwise>
</choose>
</update>
<!--선택된 구독서비스 수정-->
<update id="updateBOMngrSubsvc" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
UPDATE GC_SUBSVC
SET SOPMAL_CD = #{sopmalCd}
, SUBSVC_NM = #{subsvcNm}
, SUB_PD = #{subPd}
, SUBSVC_GNR_NM = #{subsvcGnrNm}
, DLVY_CNT = REPLACE(#{dlvyCnt},',','')
, DLVY_CYCLE = #{dlvyCycle}
, SUBSVC_CT = REPLACE(#{subsvcCt},',','')
, TME_DLVY_AMT = REPLACE(#{tmeDlvyAmt},',','')
, CNSMRPRIC = REPLACE(#{cnsmrpric},',','')
, INVNTRY_QY = REPLACE(#{invntryQy},',','')
, INVNTRY_POLICY_CD = #{invntryPolicyCd}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(usefulInvntryQyInit, 'Y')">
, USEFUL_INVNTRY_QY = 0
</if>
, AVLINV_LMTT_QY = #{avlinvLmttQy}
, SUBSVC_STTUS_CD = #{subsvcSttusCd}
, EXPSR_DV_CD = #{expsrDvCd}
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrBgnDt)">
, EXPSR_BGN_DT = #{expsrBgnDt}
</when>
<otherwise>
, EXPSR_BGN_DT = null
</otherwise>
</choose>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrEndDt)">
, EXPSR_END_DT = #{expsrEndDt}
</when>
<otherwise>
, EXPSR_END_DT = null
</otherwise>
</choose>
, SUBSVC_DC = #{subsvcDc}
, MBL_SUBSVC_DC = #{mblSubsvcDc}
, MBL_SUBSVC_DC_PC_SAME_AT = #{mblSubsvcDcPcSameAt}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(img)">
, IMG = #{img}
</if>
, UPDUSR = #{updusr}
, UPDT_DT = NOW()
WHERE SUBSVC_INNB = #{subsvcInnb}
</update>
<!-- 구독서비스 등록 -->
<insert id="insertBOMngrSubsvc" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" useGeneratedKeys="true" keyProperty="subsvcInnb" keyColumn="SUBSVC_INNB">
INSERT INTO GC_SUBSVC (SOPMAL_CD
, SUBSVC_NM
, SUB_PD
, SUBSVC_GNR
, SUBSVC_GNR_NM
, DLVY_CNT
, DLVY_CYCLE
, SUBSVC_CT
, TME_DLVY_AMT
, CNSMRPRIC
, INVNTRY_QY
, USEFUL_INVNTRY_QY
, INVNTRY_POLICY_CD
, AVLINV_LMTT_QY
, SUBSVC_STTUS_CD
, EXPSR_DV_CD
, EXPSR_BGN_DT
, EXPSR_END_DT
, SUBSVC_DC
, MBL_SUBSVC_DC
, MBL_SUBSVC_DC_PC_SAME_AT
, IMG
, DFT_GOODS_OPTN_INNB
, USE_AT
, REGUSR
, REGIST_DT)
VALUES (#{sopmalCd}
, #{subsvcNm}
, #{subPd}
, #{subsvcGnr}
, #{subsvcGnrNm}
, REPLACE(#{dlvyCnt},',','')
, #{dlvyCycle}
, REPLACE(#{subsvcCt},',','')
, REPLACE(#{tmeDlvyAmt},',','')
, REPLACE(#{cnsmrpric},',','')
, REPLACE(#{invntryQy},',','')
, 0
, #{invntryPolicyCd}
, #{avlinvLmttQy}
, #{subsvcSttusCd}
, #{expsrDvCd}
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrBgnDt)">
, #{expsrBgnDt}
</when>
<otherwise>
, null
</otherwise>
</choose>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(expsrEndDt)">
, #{expsrEndDt}
</when>
<otherwise>
, null
</otherwise>
</choose>
, #{subsvcDc}
, #{mblSubsvcDc}
, #{mblSubsvcDcPcSameAt}
, #{img}
, #{dftGoodsOptnInnb}
, 'Y'
, #{regusr}
, NOW()
)
</insert>
<!-- 구독서비스명 중복체크 -->
<select id="selectBOMngrSubsvcNmDupCheck" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO" resultType="int">
SELECT COUNT(*) CNT
FROM GC_SUBSVC GS
WHERE GS.SOPMAL_CD = #{sopmalCd}
AND GS.SUBSVC_NM = #{subsvcNm}
</select>
<!-- 구독서비스 주문에 따른 판매재고수량 수정 -->
<update id="updateSubsvcOrdrUsefulInvntryQy" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
<![CDATA[
UPDATE GC_SUBSVC GS
INNER JOIN (
SELECT
GO.SUBSVC_INNB,
COUNT(*) AS ORDR_QY
FROM GC_ORDER GO
WHERE GO.SOPMAL_CD = #{sopmalCd}
AND GO.ORDR_INNB = #{ordrInnb}
GROUP BY
GO.SUBSVC_INNB
) SUBQUERY
ON GS.SUBSVC_INNB = SUBQUERY.SUBSVC_INNB
SET GS.USEFUL_INVNTRY_QY = IFNULL(GS.USEFUL_INVNTRY_QY, 0) + SUBQUERY.ORDR_QY
WHERE GS.SUBSVC_INNB = SUBQUERY.SUBSVC_INNB
]]>
</update>
<!-- 구독서비스 환불에 따른 판매재고수량 수정 -->
<update id="updateSubsvcRefundUsefulInvntryQy" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
<![CDATA[
UPDATE GC_SUBSVC GS
INNER JOIN (
SELECT
GO.SUBSVC_INNB,
SUM(CASE WHEN GOR.REFUND_TY_CD = '01' THEN 1 ELSE 0 END) AS REFUND_QY
FROM GC_ORDER GO
INNER JOIN GC_ORDER_REFUND GOR
ON GO.ORDR_INNB = GOR.ORDR_INNB
WHERE GO.SOPMAL_CD = #{sopmalCd}
AND GO.ORDR_INNB = #{ordrInnb}
GROUP BY
GO.SUBSVC_INNB
) SUBQUERY
ON GS.SUBSVC_INNB = SUBQUERY.SUBSVC_INNB
SET GS.USEFUL_INVNTRY_QY = IFNULL(GS.USEFUL_INVNTRY_QY, 0) - SUBQUERY.REFUND_QY
WHERE GS.SUBSVC_INNB = SUBQUERY.SUBSVC_INNB
]]>
</update>
<!-- 구독서비스 주문무효에 따른 판매재고수량 수정 -->
<update id="updateSubsvcCancelOrderUsefulInvntryQy" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
<![CDATA[
UPDATE GC_SUBSVC GS
INNER JOIN (
SELECT
GO.SUBSVC_INNB,
COUNT(*) AS ORDR_QY
FROM GC_ORDER GO
WHERE GO.SOPMAL_CD = #{sopmalCd}
AND GO.ORDR_INNB = #{ordrInnb}
GROUP BY
GO.SUBSVC_INNB
) SUBQUERY
ON GS.SUBSVC_INNB = SUBQUERY.SUBSVC_INNB
SET GS.USEFUL_INVNTRY_QY = IFNULL(GS.USEFUL_INVNTRY_QY, 0) - SUBQUERY.ORDR_QY
WHERE GS.SUBSVC_INNB = SUBQUERY.SUBSVC_INNB
]]>
</update>
<!-- 판매재고수량 변경에 따른 구독서비스 상태 수정 -->
<update id="updateInvntryPolicySubsvcSttusChng" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
<![CDATA[
UPDATE GC_SUBSVC
SET SUBSVC_STTUS_CD =
CASE
WHEN INVNTRY_POLICY_CD = '02' THEN SUBSVC_STTUS_CD
ELSE
CASE
WHEN (INVNTRY_QY - IFNULL(USEFUL_INVNTRY_QY, 0)) > IFNULL(AVLINV_LMTT_QY, 0)
AND SUBSVC_STTUS_CD <> '03' THEN '01'
WHEN (INVNTRY_QY - IFNULL(USEFUL_INVNTRY_QY, 0)) <= IFNULL(AVLINV_LMTT_QY, 0)
AND SUBSVC_STTUS_CD <> '03' THEN '02'
ELSE SUBSVC_STTUS_CD
END
END
WHERE SUBSVC_INNB = #{subsvcInnb}
AND SOPMAL_CD = #{sopmalCd}
AND USE_AT = 'Y'
]]>
</update>
</mapper>

View File

@@ -0,0 +1,87 @@
<?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.wb.domainserver.domain.gcone.login.mapper.LoginMapper">
<!--회원 정보조회-->
<select id="selectMbrInfo" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginRequest" resultType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
SELECT GM.MBR_INNB AS USER_INNB
, GM.MBR_ID AS USER_ID
, GM.MBR_DV_CD
, GM.MBR_NM AS USER_NAME
, GM.MBTLNB
, GM.MBR_PASSWORD AS PASSWORD
, #{sopmalCd} AS SOPMAL_CD
, '01' AS SYS_DV_CD
FROM GC_MEMBER GM
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(username)">
AND GM.MBR_ID = #{username}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(userInnb) and userInnb != 0 ">
AND GM.MBR_INNB = #{userInnb}
</if>
AND GM.USE_AT = 'Y'
AND GM.MBR_DV_CD = #{mbrDvCd}
</select>
<!--회원 마지막 로그인일시 업데이트 -->
<update id="updateMbrLastLoginDt" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
UPDATE GC_MEMBER_SITE
SET VISIT_CNT = VISIT_CNT+1
, LAST_LOGIN_DT = NOW()
, FRST_LOGIN_DT = CASE WHEN FRST_LOGIN_DT IS NULL THEN NOW() ELSE FRST_LOGIN_DT END
WHERE MBR_INNB = #{userInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!--관리자 정보조회-->
<select id="selectMngrInfo" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginRequest" resultType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
SELECT
MNGR_INNB AS USER_INNB
,MNGR_NM AS USER_NAME
,MNGR_ID AS USER_ID
,PASSWORD
,PARTNM
,EMAIL
,TELNB
,MBTLNB
, MNGR_DV
,(SELECT SYS_DV_CD FROM site WHERE URL = #{accessUrl}) AS SYS_DV_CD
,#{sopmalCd} AS SOPMAL_CD
FROM GC_MANAGER
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(username)">
AND MNGR_ID = #{username}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(userInnb) and userInnb != 0 ">
AND MNGR_INNB = #{userInnb}
</if>
AND MNGR_STTUS_CD = '01'
</select>
<!--관리자 마지막 로그인일시 업데이트 -->
<update id="updateMngrLastLoginDt" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
UPDATE GC_MANAGER
SET LAST_CONECT_DT = NOW()
WHERE MNGR_ID = #{userId}
</update>
<!--관리자 접속이력 저장-->
<insert id="insertMngrConectLog" parameterType="com.wb.domainserver.domain.gcone.login.vo.LoginUser">
INSERT INTO
GC_MANAGER_CONECT_LOG
(MNGR_INNB
, CONECT_IP
, CONECT_BRWSR
, CONECT_DT)
VALUES (
#{userInnb} -- 관리자 고유번호
, #{conectIp} -- 접속IP
, #{conectBrwsr} -- 접속 브라우저
,NOW() -- 접속일시
)
</insert>
</mapper>

View File

@@ -0,0 +1 @@
<?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.wb.domainserver.domain.gcone.markt.markt.mapper.BOMarktMapper"></mapper>

View File

@@ -0,0 +1,40 @@
<?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.wb.domainserver.domain.gcone.match.mapper.BOMatchMemberMapper">
<resultMap id="matchMemberResultMap" type="com.wb.domainserver.domain.gcone.match.vo.BOMatchMemberVO">
<result property="mbtlnb" column="MBTLNB"/>
<result property="mbrInnb" column="MBR_INNB"/>
<result property="cnt" column="cnt"/>
<result property="joinMthCd" column="JOIN_MTH_CD"/>
</resultMap>
<select id="selectMatchMember" resultMap="matchMemberResultMap">
SELECT
MBTLNB,
MIN(MBR_INNB) AS MBR_INNB,
SUM(cnt) AS cnt
FROM (
SELECT REPLACE(AES_DECRYPT(UNHEX(M.MBTLNB), #{secretKey}), '-', '') AS MBTLNB,
M.MBR_INNB AS MBR_INNB,
COUNT(O.ORDR_INNB) AS cnt
FROM GC_MEMBER M
LEFT JOIN GC_ORDER O
ON O.MBR_INNB = M.MBR_INNB
AND O.MBR_DV_CD = (SELECT CASE WHEN SOPMAL_TY_CD = '02' THEN SOPMAL_CD ELSE 'GC' END FROM GC_SHOP WHERE SOPMAL_CD = #{sopmalCd})
AND O.ORDR_STTUS_CD BETWEEN 25 AND 75
WHERE M.USE_AT = 'Y'
AND M.MBTLNB IN
<foreach item="item" collection="telnbList" open="(" separator="," close=")">
HEX(AES_ENCRYPT(REPLACE(#{item}, '-', ''), #{secretKey}))
</foreach>
AND M.MBR_DV_CD = (SELECT CASE WHEN SOPMAL_TY_CD = '02' THEN SOPMAL_CD ELSE 'GC' END FROM GC_SHOP WHERE SOPMAL_CD = #{sopmalCd})
GROUP BY MBTLNB, MBR_INNB
) T
GROUP BY MBTLNB
</select>
</mapper>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,443 @@
<?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.wb.domainserver.domain.gcone.mngrstr.mapper.BOMngrStrMapper">
<!-- 공통코드 조회 -->
<select id = "selectBOMngrStrComnCd"
parameterType="java.lang.String"
resultType = "dataMap">
<![CDATA[
SELECT CD,
CD_NM,
CD_DV
FROM GC_CODE
WHERE GROUP_CD = #{param}
]]>
</select>
<!-- 매장 검색 조건 WHERE -->
<sql id="mngrStrListWhere">
<![CDATA[
WHERE 1 = 1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(manageCpr)">
<![CDATA[
AND gs.MANAGE_CPR = #{manageCpr}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(reprsntBrand)">
<![CDATA[
AND gs.REPRSNT_BRAND = #{reprsntBrand}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(trtmntBrand)">
<![CDATA[
AND (
]]>
<foreach collection="trtmntBrand" item="trtmntBrand" open="" separator="OR" close="">
<![CDATA[
gs.TRTMNT_BRAND LIKE CONCAT('%', #{trtmntBrand}, '%')
]]>
</foreach>
<![CDATA[
)
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strEstblDvCd)">
<![CDATA[
AND gs.STR_ESTBL_DV_CD IN
]]>
<foreach collection="strEstblDvCd" item="strEstblDvCd" open="(" separator="," close=")">
<![CDATA[
#{strEstblDvCd}
]]>
</foreach>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strOperDv)">
<![CDATA[
AND gs.STR_OPER_DV IN
]]>
<foreach collection="strOperDv" item="strOperDv" open="(" separator="," close=")">
<![CDATA[
#{strOperDv}
]]>
</foreach>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(tentSttus)">
<![CDATA[
AND gs.TENT_STTUS IN
]]>
<foreach collection="tentSttus" item="tentSttus" open="(" separator="," close=")">
<![CDATA[
#{tentSttus}
]]>
</foreach>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(posCdDvVal)">
<![CDATA[
AND gs.POS_CD_DV_VAL = #{posCdDvVal}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(posCdPassivInputVal)">
<![CDATA[
AND gs.pos_Cd_Passiv_Input_Val = #{posCdPassivInputVal}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(tentcpnNm)">
<![CDATA[
AND gs.TENTCPN_NM like CONCAT('%', #{tentcpnNm}, '%')
]]>
</if>
</sql>
<!-- 매장 개수 조회 -->
<select id = "selectBOMngrStrListCnt"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO"
resultType = "java.lang.Integer">
<![CDATA[
SELECT COUNT(1)
FROM GC_STORE gs
]]>
<include refid="mngrStrListWhere"/>
</select>
<!-- 매장 목록 조회 -->
<select id = "selectBOMngrStrListInqire"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO"
resultType = "dataMap">
<![CDATA[
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM,
TB.*
FROM (
SELECT gs.STR_INNB,
FN_GET_COMMCODE_NAME('MANAGE_CPR', gs.MANAGE_CPR) AS MANAGE_CPR,
FN_GET_COMMCODE_NAME('REPRSNT_BRAND', gs.REPRSNT_BRAND) AS REPRSNT_BRAND,
GROUP_CONCAT(gc.CD_NM ORDER BY FIND_IN_SET(gc.CD, REPLACE(gs.TRTMNT_BRAND, '/', ',')) SEPARATOR '/') AS TRTMNT_BRAND,
FN_GET_COMMCODE_NAME('STR_DV', gs.STR_OPER_DV) AS STR_OPER_DV,
TENT_STTUS AS TENT_STTUS_CD,
FN_GET_COMMCODE_NAME('TENT_STTUS', gs.TENT_STTUS) AS TENT_STTUS,
DATE_FORMAT(gs.OPBIZ_DE, '%Y-%m-%d') AS OPBIZ_DE,
DATE_FORMAT(gs.CLSTR_DE, '%Y-%m-%d') AS CLSTR_DE,
gs.POS_CD_DV_VAL,
gs.POS_CD_PASSIV_INPUT_VAL,
gs.TENTCPN_ID,
gs.TENTCPN_NM,
gs.REGIST_DT
FROM GC_STORE gs
LEFT JOIN GC_CODE gc
ON FIND_IN_SET(gc.CD, REPLACE(gs.TRTMNT_BRAND, '/', ',')) > 0
AND gc.GROUP_CD = 'TRTMNT_BRAND'
]]>
<include refid="mngrStrListWhere"/>
<![CDATA[
GROUP BY gs.STR_INNB,
MANAGE_CPR,
REPRSNT_BRAND,
gs.TRTMNT_BRAND,
STR_OPER_DV,
TENT_STTUS_CD,
TENT_STTUS,
OPBIZ_DE,
CLSTR_DE,
gs.POS_CD_DV_VAL,
gs.POS_CD_PASSIV_INPUT_VAL,
gs.TENTCPN_ID,
gs.TENTCPN_NM
) TB
WHERE (@rownum:=0)=0
ORDER BY
]]>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(sortDv)">
<![CDATA[
TB.REGIST_DT DESC
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sortDv, 'registDt')">
<![CDATA[
TB.REGIST_DT DESC
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sortDv, 'tentcpnNm')">
<![CDATA[
TB.TENTCPN_NM ASC
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sortDv, 'tentcpnId')">
<![CDATA[
TB.TENTCPN_ID ASC
]]>
</when>
</choose>
<![CDATA[
) PV
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 매장 상세 조회 -->
<select id = "selectBOMngrStrDtlInqire"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO"
resultType = "dataMap">
<![CDATA[
SELECT gs.STR_INNB,
-- 기본정보
DATE_FORMAT(gs.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT,
DATE_FORMAT(gs.LAST_LOGIN_DT, '%Y-%m-%d %H:%i:%s') AS LAST_LOGIN_DT,
FN_GET_COMMCODE_NAME('MANAGE_CPR', gs.MANAGE_CPR) AS MANAGE_CPR,
gs.MANAGE_CPR AS MANAGE_CPR_CD,
FN_GET_COMMCODE_NAME('REPRSNT_BRAND', gs.REPRSNT_BRAND) AS REPRSNT_BRAND,
gs.REPRSNT_BRAND AS REPRSNT_BRAND_CD,
GROUP_CONCAT(gc.CD_NM ORDER BY FIND_IN_SET(gc.CD, REPLACE(gs.TRTMNT_BRAND, '/', ',')) SEPARATOR ' ■') AS TRTMNT_BRAND,
FN_GET_COMMCODE_NAME('POS_HDQRTRS', gs.POS_CD_DV_VAL) AS POS_HDQRTRS,
gs.POS_CD_DV_VAL,
gs.POS_CD_PASSIV_INPUT_VAL,
gs.STR_CD,
FN_GET_COMMCODE_NAME('STR_ESTBL_DV', gs.STR_ESTBL_DV_CD) AS STR_ESTBL_DV_CD,
FN_GET_COMMCODE_NAME('STR_DV', gs.STR_OPER_DV) AS STR_OPER_DV,
FN_GET_COMMCODE_NAME('STR_KND', gs.DV) AS DV,
FN_GET_COMMCODE_NAME('STR_KND_STTUS', gs.STR_KND_DTL) AS STR_KND_DTL,
gs.SITE_EXPSR_AT,
FN_GET_COMMCODE_NAME('TENT_STTUS', gs.TENT_STTUS) AS TENT_STTUS,
DATE_FORMAT(gs.OPBIZ_DE, '%Y-%m-%d') AS OPBIZ_DE,
DATE_FORMAT(gs.CLSTR_DE, '%Y-%m-%d') AS CLSTR_DE,
gs.AW_LOGIN_AT,
gs.TENTCPN_NM,
gs.STR_NM,
gs.TENTCPN_ID,
gs.TENTCPN_PASSWORD,
-- 매장정보
gs.CHR_DSPTCH_NB,
gs.STR_TELNB,
gs.LOC,
gs.CTY_DO,
gs.CTY_GUN_GU,
gs.STR_ADRES_DV,
gs.STR_ZIP,
gs.STR_ADRES,
gs.STR_RNM_ADRES,
gs.STR_DTL_ADRES,
-- 지도
gs.LA,
gs.LO,
gs.HTGH_PBTRNSP,
gs.HTGH_PVTCAR,
gs.HVOF_DE,
gs.HVOF_DE_ADIT,
gs.BSN_TME,
-- 매장이미지
gs.STR_REPRSNT_IMG,
gs.STR_DTL_IMG,
-- 사업자정보
gs.ENTRPS_NM,
gs.BSNM_NB,
gs.REPRSNTVNM,
FN_GET_COMMCODE_NAME('INDVDL_CPR_DV', gs.INDVDL_CPR_DV) AS INDVDL_CPR_DV,
gs.BIZCND_INDUTY,
gs.SVC,
-- 사업자등록증 사본
gs.ADRES_DV,
gs.ENTRPS_ZIP,
gs.ENTRPS_ADRES,
gs.RNM_ADRES,
gs.ENTRPS_DTL_ADRES,
gs.COMM_SLE_DCL_NB,
gs.SELER_TELNB,
gs.SELER_EMAIL,
gs.SELER_FAX,
-- 대표자정보
gs.REPRSNTV_INFO_REPRSNTVNM,
gs.REPRSNTV_INFO_TELNB,
gs.REPRSNTV_INFO_ADRES_DV,
gs.REPRSNTV_INFO_ZIP,
gs.REPRSNTV_INFO_ADRES,
gs.REPRSNTV_INFO_RNM_ADRES,
gs.REPRSNTV_INFO_DTL_ADRES,
-- 고정지출비용
gs.FIXING_EXPNDTR_RNTCHRG,
gs.FIXING_EXPNDTR_MANAGECT,
gs.FIXING_EXPNDTR_RYALTY,
gs.FIXING_EXPNDTR_SYS_RNTFEE,
gs.FIXING_EXPNDTR_LBCT,
gs.FIXING_EXPNDTR_CARD_FEE,
gs.FIXING_EXPNDTR_PRCT,
gs.FIXING_EXPNDTR_STR_OPERCT,
-- 처리내역
gs.UPDT_DTLS
FROM GC_STORE gs
LEFT JOIN GC_CODE gc
ON FIND_IN_SET(gc.CD, REPLACE(gs.TRTMNT_BRAND, '/', ',')) > 0
AND gc.GROUP_CD = 'TRTMNT_BRAND'
WHERE 1 = 1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strInnb)">
<![CDATA[
AND gs.STR_INNB = #{strInnb}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(posCdPassivInputVal)">
<![CDATA[
AND CONCAT(gs.POS_CD_DV_VAL, gs.POS_CD_PASSIV_INPUT_VAL) = #{posCdPassivInputVal}
]]>
</if>
<![CDATA[
GROUP BY gs.STR_INNB,
-- 기본정보
REGIST_DT,
LAST_LOGIN_DT,
MANAGE_CPR,
REPRSNT_BRAND,
TRTMNT_BRAND,
POS_HDQRTRS,
gs.POS_CD_DV_VAL,
gs.POS_CD_PASSIV_INPUT_VAL,
gs.STR_CD,
STR_ESTBL_DV_CD,
STR_OPER_DV,
DV,
STR_KND_DTL,
gs.SITE_EXPSR_AT,
TENT_STTUS,
OPBIZ_DE,
CLSTR_DE,
gs.AW_LOGIN_AT,
gs.TENTCPN_NM,
gs.STR_NM,
gs.TENTCPN_ID,
-- 매장정보
gs.CHR_DSPTCH_NB,
gs.STR_TELNB,
gs.LOC,
gs.CTY_DO,
gs.CTY_GUN_GU,
gs.STR_ADRES_DV,
gs.STR_ZIP,
gs.STR_ADRES,
gs.STR_RNM_ADRES,
gs.STR_DTL_ADRES,
-- 지도
gs.LA,
gs.LO,
gs.HTGH_PBTRNSP,
gs.HTGH_PVTCAR,
gs.HVOF_DE,
gs.HVOF_DE_ADIT,
gs.BSN_TME,
-- 매장이미지
gs.STR_REPRSNT_IMG,
gs.STR_DTL_IMG,
-- 사업자정보
gs.ENTRPS_NM,
gs.BSNM_NB,
gs.REPRSNTVNM,
INDVDL_CPR_DV,
gs.BIZCND_INDUTY,
gs.SVC,
-- 사업자등록증 사본
gs.ADRES_DV,
gs.ENTRPS_ZIP,
gs.ENTRPS_ADRES,
gs.RNM_ADRES,
gs.ENTRPS_DTL_ADRES,
gs.COMM_SLE_DCL_NB,
gs.SELER_TELNB,
gs.SELER_EMAIL,
gs.SELER_FAX,
-- 대표자정보
gs.REPRSNTV_INFO_REPRSNTVNM,
gs.REPRSNTV_INFO_TELNB,
gs.REPRSNTV_INFO_ADRES_DV,
gs.REPRSNTV_INFO_ZIP,
gs.REPRSNTV_INFO_ADRES,
gs.REPRSNTV_INFO_RNM_ADRES,
gs.REPRSNTV_INFO_DTL_ADRES,
-- 고정지출비용
gs.FIXING_EXPNDTR_RNTCHRG,
gs.FIXING_EXPNDTR_MANAGECT,
gs.FIXING_EXPNDTR_RYALTY,
gs.FIXING_EXPNDTR_SYS_RNTFEE,
gs.FIXING_EXPNDTR_LBCT,
gs.FIXING_EXPNDTR_CARD_FEE,
gs.FIXING_EXPNDTR_PRCT,
gs.FIXING_EXPNDTR_STR_OPERCT,
-- 처리내역
gs.UPDT_DTLS
]]>
</select>
<!--매장 아이디 중복 조회 -->
<select id = "selectBOIdDplctCnfirm"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO"
resultType = "Integer">
<![CDATA[
SELECT
COUNT(1)
FROM
GC_STORE
WHERE 1 = 1
AND TENTCPN_ID = #{tentcpnId}
]]>
</select>
<!-- 매장 상세 수정 -->
<update id="updateBOMngrStrDtlU"
parameterType="com.wb.domainserver.domain.gcone.mngrstr.vo.BOMngrStrVO">
<![CDATA[
UPDATE
GC_STORE
SET
SITE_EXPSR_AT = #{siteExpsrAt},
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(awLoginAt)">
<![CDATA[
AW_LOGIN_AT = #{awLoginAt},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(changeIdAt, 'Y')">
<![CDATA[
TENTCPN_ID = #{tentcpnId},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(changePasswordAt, 'Y')">
<![CDATA[
TENTCPN_PASSWORD = #{newPassword},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(chrDsptchNb)">
<![CDATA[
CHR_DSPTCH_NB = #{chrDsptchNb},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(strReprsntImg)">
<![CDATA[
STR_REPRSNT_IMG = null,
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strReprsntImg)">
<![CDATA[
STR_REPRSNT_IMG = #{strReprsntImg},
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(strDtlImg)">
<![CDATA[
STR_DTL_IMG = null,
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(strDtlImg)">
<![CDATA[
STR_DTL_IMG = #{strDtlImg},
]]>
</if>
<![CDATA[
HVOF_DE = #{hvofDe},
HVOF_DE_ADIT = #{hvofDeAdit},
BSN_TME = #{bsnTme},
UPDUSR = #{updusr},
UPDT_DT = SYSDATE()
WHERE 1 = 1
AND STR_INNB = #{strInnb}
]]>
</update>
</mapper>

View File

@@ -0,0 +1,353 @@
<?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.wb.domainserver.domain.gcone.ntcn.atmcsndng.mapper.BOAtmcSndngMapper">
<!-- sms 발송 관리 목록 조회 FROM 절 -->
<sql id = "SmsSndngDtlsListFrom">
FROM GC_SMS_TO SMSTO
INNER JOIN GC_SMS SMS
ON SMSTO.SMS_INNB = SMS.SMS_INNB
AND SMSTO.SOPMAL_CD = SMS.SOPMAL_CD
</sql>
<!-- sms 발송 관리 목록 조회 WHERE 절 -->
<sql id = "SmsSndngDtlsListWhere">
<![CDATA[
WHERE 1=1
]]>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SMS.SOPMAL_CD = #{sopmalCd}
AND SMSTO.SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
<![CDATA[
AND SMS.SOPMAL_CD = #{srchSopmalCd}
AND SMSTO.SOPMAL_CD = #{srchSopmalCd}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSmsInnb)">
<![CDATA[
AND SMS.SMS_INNB = #{srchSmsInnb}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSmsToInnb)">
<![CDATA[
AND SMSTO.SMS_TO_INNB = #{srchSmsToInnb}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRecptnNb)">
<![CDATA[
AND CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , '1df5be2f7e90ae36') AS CHAR(50)) = REPLACE(#{srchRecptnNb},'-','')
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStr)">
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchNbDv, 'recpntNb')">
<![CDATA[
AND CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , '1df5be2f7e90ae36') AS CHAR(50)) LIKE CONCAT('%', REPLACE(#{srchStr},'-',''), '%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchNbDv, 'sndngNb')">
<![CDATA[
AND SMS.SNDNG_NB LIKE CONCAT('%', #{srchStr}, '%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchNbDv, 'cstmrIdnb')">
<![CDATA[
AND SMSTO.CSTMR_IDNB LIKE CONCAT('%', #{srchStr}, '%')
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchNbDv, 'cn')">
<![CDATA[
AND (
SMS.CN LIKE CONCAT('%', #{srchStr}, '%')
OR SMSTO.SUBST_DATA LIKE CONCAT('%', #{srchStr}, '%')
)
]]>
</when>
</choose>
</if>
<!-- 발송일 -->
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'sndngDt')">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)">
<![CDATA[
AND SMS.SNDNG_DT >= #{srchStrtSndngDt} ' 00:00:00'
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.SNDNG_DT <= #{srchEndSndngDt} ' 00:00:00'
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.SNDNG_DT BETWEEN #{srchStrtSndngDt} ' 00:00:00' AND #{srchEndSndngDt} ' 23:59:59'
]]>
</when>
</choose>
</if>
<!-- 등록일 -->
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDtDv, 'registDt')">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)">
<![CDATA[
AND SMS.REGIST_DT >= #{srchStrtSndngDt} ' 00:00:00'
]]>
</when>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.REGIST_DT <= #{srchEndSndngDt} ' 00:00:00'
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtSndngDt)
and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndSndngDt)">
<![CDATA[
AND SMS.REGIST_DT BETWEEN #{srchStrtSndngDt} ' 00:00:00' AND #{srchEndSndngDt} ' 23:59:59'
]]>
</when>
</choose>
</if>
<choose>
<when test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchDv)">
<![CDATA[
AND SMSTO.DV IN
]]>
<foreach collection="srchDv" item="dv" open="(" separator="," close=")">
<![CDATA[
#{dv}
]]>
</foreach>
</when>
<otherwise>
AND SMSTO.DV != 'AT'
AND SMSTO.DV != 'AI'
</otherwise>
</choose>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSttus)">
<![CDATA[
AND SMSTO.STTUS IN
]]>
<foreach collection="srchSttus" item="sttus" open="(" separator="," close=")">
<![CDATA[
#{sttus}
]]>
</foreach>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRegusrDv)">
<![CDATA[
AND SMS.REGUSR_DV = #{srchRegusrDv}
]]>
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sndngNb)">
<![CDATA[
AND SMS.SNDNG_NB = #{sndngNb}
AND SMSTO.RECPTN_NB = REPLACE(#{recptnNb},'-','')
]]>
</if>
</sql>
<!-- 자동 발송 관리 목록 -->
<select id="selectBOAtmcSndngManageListInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM GC_MESSAGE_SNDNG SNDNG
JOIN (
SELECT GROUPCODE.CD_NM AS GROUP_CD_NM, CODE.GROUP_CD, CODE.CD, CODE.CD_NM
FROM (
SELECT CD, CD_NM, USE_AT
FROM GC_CODE
WHERE GROUP_CD LIKE 'FORM_DV%'
) GROUPCODE
JOIN GC_CODE CODE
ON REPLACE(CODE.GROUP_CD, #{formDvCd}, '') = GROUPCODE.CD
AND CODE.USE_AT = 'Y'
) CODE
ON CODE.GROUP_CD = SNDNG.FORM_DV_CD
AND CODE.CD = SNDNG.FORM_DTL_DV_CD
WHERE SNDNG.SOPMAL_CD = #{sopmalCd}
AND SNDNG.EXPSR_AT = 'Y'
AND SNDNG.MNGR_DV = #{mngrDv}
ORDER BY SNDNG.FORM_DV_CD, SNDNG.FORM_DTL_DV_CD
]]>
</select>
<!-- 자동 발송 관리 수정 -->
<update id="updateBOAtmcSndngManageUpdt" parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_MESSAGE_SNDNG
SET
USE_AT = #{dto.useAt}
, EMAIL_USE_AT = #{dto.emailUseAt}
, SMS_USE_AT = #{dto.smsUseAt}
, NTCNTALK_USE_AT = #{dto.ntcntalkUseAt}
, MARKT_AT = #{dto.marktAt}
, SNDNG_STDR_DE = #{dto.sndngStdrDe}
, SNDNG_STDR_TME = #{dto.sndngStdrTme}
, UPDUSR = #{dto.updusr}
, UPDT_DT = SYSDATE()
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 이메일 템플릿 사용여부 수정 -->
<update id="updateBOEmailTmplatUseAt" parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_EMAIL_FORM
SET
USE_AT = #{dto.emailUseAt}
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 메시지 템플릿 사용여부 수정 -->
<update id="updateBOMssageTmplatUseAt" parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_SMS_FORM
SET
USE_AT = #{dto.smsUseAt}
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 알림톡 템플릿 사용여부 수정 -->
<update id="updateBOKakaoTmplatUseAt" parameterType="com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_KAKAO_FORM
SET
USE_AT = #{dto.ntcntalkUseAt}
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- sms 발송 목록 조회 -->
<select id = "selectBOSmsSndngDtlsListInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
ROW_NUMBER() OVER (ORDER BY SMS.SNDNG_DT, SMSTO.SMS_TO_INNB ASC) AS RNUM,
SMS.SNDNG_NB,
SMSTO.DV,
DATE_FORMAT(SMS.REGIST_DT,'%Y-%m-%d %H:%i:%S') AS REGIST_DT,
CASE
WHEN SMS.RESVE_DT IS NULL THEN DATE_FORMAT(SMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S')
ELSE DATE_FORMAT(SMS.RESVE_DT, '%Y-%m-%d %H:%i:%S')
END AS SNDNG_DT, -- 예약날짜가 있을경우 예약날짜로 발송시간 표출
CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , '1df5be2f7e90ae36') AS CHAR(50)) AS RECPTN_NB,
SMS.CN AS CN,
SMS.SMS_INNB,
SMSTO.SMS_TO_INNB,
SMSTO.STTUS,
SMS.SUCCES_CNT,
SMS.FAILR_CNT,
SMS.CHR_STTUS,
SMS.SOPMAL_CD ,
SMSTO.RSLT_SJ,
SMSTO.SUBST_DATA,
SHOP.SOPMAL_NM
]]>
<include refid="SmsSndngDtlsListFrom"/>
INNER JOIN GC_SHOP SHOP
ON SMS.SOPMAL_CD = SHOP.SOPMAL_CD
<include refid="SmsSndngDtlsListWhere"/>
<![CDATA[
-- ) TB
ORDER BY RNUM DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!--sms 발송 상세 조회 -->
<select id = "selectBOSmsSndngDtlInfo"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
SMS.SNDNG_NB,
SMSTO.DV,
DATE_FORMAT(SMS.REGIST_DT,'%Y-%m-%d %H:%i:%S')AS REGIST_DT ,
DATE_FORMAT(SMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S')AS SNDNG_DT,
CAST(AES_DECRYPT(UNHEX(SMSTO.RECPTN_NB) , '1df5be2f7e90ae36') AS CHAR(50)) AS RECPTN_NB,
SMS.CN AS CN,
SMS.SMS_INNB,
SMSTO.SMS_TO_INNB,
SMSTO.STTUS,
SMS.SUCCES_CNT,
SMS.FAILR_CNT,
SMS.CHR_STTUS,
SMSTO.RSLT_SJ,
SMSTO.SUBST_DATA
]]>
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
</select>
<!--sms 발송 관리 건수 조회 -->
<select id = "selectBOSmsSndngDtlsListTotCnt"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="Integer">
<![CDATA[
SELECT COUNT(1)
]]>
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
</select>
<!--sms 발송 관리 발신 목록 성공 건수 -->
<select id = "selectBOSmsSndngresultOkCnt"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
COUNT(SMSTO.STTUS) OKCNT
]]>
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
<![CDATA[
AND SMSTO.STTUS IN ('OK')
]]>
</select>
<!--sms 발송 관리 발신 목록 실패 건수 -->
<select id = "selectBOSmsSndngresultFailCnt"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO"
resultType="dataMap">
<![CDATA[
SELECT
COUNT(SMSTO.STTUS) FAILCNT
]]>
<include refid="SmsSndngDtlsListFrom"/>
<include refid="SmsSndngDtlsListWhere"/>
<![CDATA[
AND SMSTO.STTUS IN ('FAIL')
]]>
</select>
<!-- 자동발송 가능 시간 조회 -->
<select id="selectBOShopAtmcSndngTme">
SELECT
LEFT(SMS_ATMC_SNDNG_LMTT_BGNTME, 2) AS SMS_ATMC_SNDNG_LMTT_BGNTME
, LEFT(SMS_ATMC_SNDNG_LMTT_ENDTME, 2) AS SMS_ATMC_SNDNG_LMTT_ENDTME
FROM GC_SHOP
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
</select>
</mapper>

View File

@@ -0,0 +1,99 @@
<?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.wb.domainserver.domain.gcone.ntcn.email.mapper.BOEmailMapper">
<!-- 이메일 발송내역 등록 -->
<insert id="insertBOEmailSndngDtls"
parameterType="com.wb.domainserver.domain.gcone.ntcn.email.vo.BOEmailVO"
useGeneratedKeys="true"
keyProperty="emailSndngInnb">
INSERT INTO GC_EMAIL (
SOPMAL_CD
, SNDNG_LC
, SJ
, CN
, SNDR_EMAIL
, RECPTN_RJCT_URL
, REGUSR_DV
, REGUSR
, REGIST_DT
)
VALUES (
#{sopmalCd}
, #{sndngLc}
, #{sj}
, #{cn}
, HEX(AES_ENCRYPT(#{sndrEmail}, #{secretKey}))
, #{recptnRjctUrl}
, #{regusrDv}
, #{regusr}
, SYSDATE()
)
</insert>
<!-- 이메일 발송대상 등록 -->
<insert id="insertBOEmailSndngTo"
parameterType="java.util.List"
useGeneratedKeys="true"
keyProperty="trgetSnb">
INSERT INTO GC_EMAIL_TO (
EMAIL_SNDNG_INNB
, MBR_INNB
, RECPNT_EMAIL
, RECPNT_NM
, STTUS
, SNDNG_DT
, RSLT_CD
)
VALUES
<foreach collection="list" item="dto" separator=",">
(
#{dto.emailSndngInnb}
, #{dto.mbrInnb}
, HEX(AES_ENCRYPT(#{dto.recpntEmail}, #{dto.secretKey}))
, #{dto.recpntNm}
, #{dto.sttus}
, #{dto.sndngDt}
, #{dto.rsltCd}
)
</foreach>
</insert>
<!-- 이메일 발송대상 순번 조회 -->
<select id = "selectBOEmailSndngTrgetSnb"
parameterType="java.lang.Integer"
resultType="java.lang.Integer">
<![CDATA[
SELECT TRGET_SNB
FROM GC_EMAIL_TO
WHERE EMAIL_SNDNG_INNB = #{emailSndngInnb}
]]>
</select>
<!-- 이메일 발신자명(쇼핑몰 이름) 조회 -->
<select id = "selectBOEmailSopmalNm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.email.vo.BOEmailVO"
resultType="java.lang.String">
<![CDATA[
SELECT SOPMAL_NM
FROM GC_SHOP
WHERE SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 이메일 발송여부 업데이트 -->
<update id="updateBOEmailSndng"
parameterType="com.wb.domainserver.domain.gcone.ntcn.email.vo.BOEmailVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_EMAIL_TO
SET
STTUS = #{dto.sttus}
, SNDNG_DT = SYSDATE()
, RSLT_CD = #{dto.rsltCd}
WHERE EMAIL_SNDNG_INNB = #{dto.emailSndngInnb}
AND TRGET_SNB = #{dto.trgetSnb}
]]>
</foreach>
</update>
</mapper>

View File

@@ -0,0 +1,512 @@
<?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.wb.domainserver.domain.gcone.ntcn.lgqymssage.mapper.BOLgqyMssageMapper">
<!-- 대량 발송 관리 목록 조회 WHERE 절 -->
<sql id="MssageLgqySndngDtlsListWhere">
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSmsLgqySndngInnb)">
<![CDATA[
AND LGQYSMS.SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchBrandCd)">
<![CDATA[
AND LGQYSMS.BRAND_CD = #{srchBrandCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
<![CDATA[
AND LGQYSMS.SOPMAL_CD = #{srchSopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngCn)">
<![CDATA[
AND LGQYSMS.SNDNG_CN LIKE CONCAT('%', #{srchSndngCn}, '%')
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStrtRegistDt)">
<![CDATA[
AND DATE_FORMAT(LGQYSMS.REGIST_DT ,'%Y-%m-%d') >= #{srchStrtRegistDt}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndRegistDt)">
<![CDATA[
AND DATE_FORMAT(LGQYSMS.REGIST_DT ,'%Y-%m-%d') <= #{srchEndRegistDt}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngSttus)">
<![CDATA[
AND LGQYSMS.SNDNG_STTUS = #{srchSndngSttus}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngReqstDt)">
<![CDATA[
AND LGQYSMS.SNDNG_REQST_DT = #{srchSndngReqstDt}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngDvCd)">
<![CDATA[
AND LGQYSMS.SNDNG_DV_CD = #{srchSndngDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchSndngDvCd)">
<![CDATA[
AND LGQYSMS.SNDNG_DV_CD <> '02' -- 소멸예정 마일리지 제외
]]>
</if>
</sql>
<!-- 대량메시지 쇼핑몰 정보 조회 -->
<select id="selectBOShopInfoInqire" resultType="DataMap">
SELECT *
FROM GC_SHOP
WHERE 1 = 1
AND SOPMAL_CD = #{srchSopmalCd}
</select>
<!-- 쇼핑몰 리스트 조회 -->
<select id="selectBOShopListInqire" resultType="DataMap">
SELECT SOPMAL_CD,
SOPMAL_NM
FROM GC_SHOP
WHERE 1 = 1
AND OPER_AT = 'Y'
</select>
<!--대량 메시지 발송 관리 건수 조회 -->
<select id="selectBOMssageLgqySndngListTotCnt"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOLgqyMssageSrchVO"
resultType="Integer">
SELECT
COUNT(1)
FROM GC_LGQY_SMS LGQYSMS
<include refid="MssageLgqySndngDtlsListWhere"/>
</select>
<!--대량 메시지 발송 내역 조회 -->
<select id="selectBOMssageLgqySndngListInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT
*
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
, TB.*
FROM (
SELECT
LGQYSMS.SMS_LGQY_SNDNG_INNB,
FN_GET_SOPMAL_NAME(LGQYSMS.SOPMAL_CD) AS BRAND_CD,
LGQYSMS.SOPMAL_CD,
LGQYSMS.SNDNG_SJ,
DATE_FORMAT(LGQYSMS.REGIST_DT,'%Y-%m-%d %H:%i:%S') AS REGIST_DT,
DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%Y-%m-%d %H:%i:%S') AS SNDNG_REQST_DT,
DATE_FORMAT(LGQYSMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S') AS SNDNG_DT,
CONCAT(LEFT(LGQYSMS.SNDNG_CN, 30),'...') SNDNG_CN,
LGQYSMS.ALL_CNT,
LGQYSMS.SUCCES_CNT,
LGQYSMS.SNDNG_STTUS,
LGQYSMS.SNDNG_PROCS_DV_CD
FROM GC_LGQY_SMS LGQYSMS
<include refid="MssageLgqySndngDtlsListWhere"/>
) TB
WHERE (@ROWNUM:=0)=0
) PV
ORDER BY RNUM DESC
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 대량 메시지 상세 조회 -->
<select id="selectBOMssageLgqySndngDtlInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT
LGQYSMS.SMS_LGQY_SNDNG_INNB
, LGQYSMS.SOPMAL_CD
, LGQYSMS.BRAND_CD
, LGQYSMS.SNDNG_SJ
, LGQYSMS.SNDNG_CN
, LGQYSMS.LINK_URL1
, LGQYSMS.LINK_URL2
, LGQYSMS.LINK_URL3
, LGQYSMS.SNDNG_CND_PARAM
, LGQYSMS.SNDNG_TRGET_QRY
, DATE_FORMAT(LGQYSMS.REGIST_DT,'%Y-%m-%d %H:%i:%S') AS REGIST_DT
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%Y-%m-%d %H:%i:%S') AS SNDNG_REQST_DT
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%Y-%m-%d') AS SNDNG_REQST
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%H') AS SNDNG_REQST_HOUR
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%i') AS SNDNG_REQST_MINUTE
, DATE_FORMAT(LGQYSMS.SNDNG_REQST_DT ,'%S') AS SNDNG_REQST_SEC
, DATE_FORMAT(LGQYSMS.SNDNG_DT ,'%Y-%m-%d %H:%i:%S') AS SNDNG_DT
, LGQYSMS.SNDNG_CN
, LGQYSMS.ALL_CNT
, LGQYSMS.SUCCES_CNT
, LGQYSMS.SNDNG_STTUS
, LGQYSMS.REQUSR_NM
, LGQYSMS.SNDNG_DV_CD
, LGQYSMS.FIL_COURS
, LGQYSMS.ORGINL_FIL_NM
, LGQYSMS.SYS_FIL_NM
, LGQYSMS.LANDING_TY
, LGQYSMS.LANDING_USE_AT
, LGQYSMS.LANDING_POSITION
, LGQYSMS.RECPNT_DV
, (SELECT REPLACE(MBL_DOMN_ADRES, 'http://', '') FROM GC_SHOP SHOP WHERE SHOP.SOPMAL_CD = LGQYSMS.SOPMAL_CD) AS URL
, FN_GET_COMMCODE_NAME('SNDNG_DV', LGQYSMS.SNDNG_DV_CD) AS SNDNG_DV_CD_NM
FROM GC_LGQY_SMS LGQYSMS
WHERE LGQYSMS.SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
</select>
<!-- 대량 메시지 대상 조회 -->
<select id="selectBOMssageLgqySndngToInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT SMS_LGQY_SNDNG_INNB
, LGQY_SNDNG_TRGET_INNB
, MNGR_INNB
, CAST(AES_DECRYPT(UNHEX(MBTLNB), '1df5be2f7e90ae36') AS CHAR(50)) AS MBTLNB
, NM
, MBR_ID
, STTUS
, SUBST_CHR_1
, SUBST_CHR_2
, SUBST_CHR_3
, SUBST_CHR_4
, SUBST_CHR_5
FROM GC_LGQY_SMS_TO LGQYSMSTO
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
</select>
<!-- 대량 메시지 발송내역 등록 -->
<insert id="insertBOMssageLgqySndngRegist"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageVO"
keyProperty="smsLgqySndngInnb" useGeneratedKeys="true">
INSERT INTO GC_LGQY_SMS (
SOPMAL_CD
, BRAND_CD
, SNDNG_SJ
, SNDNG_CN
, SNDNG_PROCS_DV_CD
, SNDNG_CND_PARAM
, SNDNG_TRGET_QRY
, RECPNT_DV
, CALL_PGE_USE_AT
, LINK_URL1
, LINK_URL2
, LINK_URL3
, SNDNG_REQST_DT
, SNDNG_DT
, ALL_CNT
, SUCCES_CNT
, SNDNG_STTUS
, LANDING_USE_AT
, REQUSR_NM
, REGUSR
, REGIST_DT
, SNDNG_DV_CD
, UPDUSR
, UPDT_DT
)
VALUES (
#{sopmalCd}
, #{brandCd}
, #{sndngSj}
, #{sndngCn}
, '00'
, #{sndngCndParam}
, #{sndngTrgetQry}
, #{recpntDv}
, #{callPgeUseAt}
, #{linkUrl1}
, #{linkUrl2}
, #{linkUrl3}
, #{sndngReqstDt}
, #{sndngDt}
, #{allCnt}
, #{succesCnt}
, 'SAVE'
, #{landingUseAt}
, #{requsrNm}
, #{regusr}
, NOW()
, #{sndngDvCd}
, #{regusr}
, NOW()
)
</insert>
<!-- 대량 메시지 발송대상 등록 -->
<insert id="insertBOMssageLgqySndngToRegist"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageVO">
INSERT INTO GC_LGQY_SMS_TO (
SMS_LGQY_SNDNG_INNB
, MNGR_INNB
, MBTLNB
, NM
, MBR_ID
, CHOISE_DT
, STTUS
, MEMO
, SUBST_CHR_1
, SUBST_CHR_2
, SUBST_CHR_3
, SUBST_CHR_4
, SUBST_CHR_5
, LINK_AT
, REGUSR
, REGIST_DT
)
VALUES
<foreach collection="list" item="lgqyTo" index="index" separator=",">
(
#{lgqyTo.smsLgqySndngInnb}
, #{lgqyTo.mngrInnb}
, HEX(AES_ENCRYPT( #{lgqyTo.mbtlnb} , #{lgqyTo.secretKey}))
, #{lgqyTo.nm}
, #{lgqyTo.mbrId}
, #{lgqyTo.choiseDt}
, #{lgqyTo.sttus}
, #{lgqyTo.memo}
, #{lgqyTo.substChr1}
, #{lgqyTo.substChr2}
, #{lgqyTo.substChr3}
, #{lgqyTo.substChr4}
, #{lgqyTo.substChr5}
, #{lgqyTo.linkAt}
, #{lgqyTo.regusr}
, NOW()
)
</foreach>
</insert>
<!-- 상태 변경-->
<update id="updateBOMssageLgqySttusUpdate">
UPDATE
GC_LGQY_SMS GLS
SET
SNDNG_PROCS_DV_CD = #{sndngProcsDvCd}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sndngSttus)">
,SNDNG_STTUS = #{sndngSttus}
</if>
WHERE 1=1
AND SMS_LGQY_SNDNG_INNB = #{smsLgqySndngInnb}
AND SOPMAL_CD = #{sopmalCd}
</update>
<!-- 대량 메시지 상세 - 발송요청현황 확인 -->
<select id="selectBOMssageLgqySndngReqInqire"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT SNDNG_REQST_DT
, BRAND_CD
, SNDNG_STTUS
, SNDNG_DV_CD
FROM GC_LGQY_SMS
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
</select>
<!--수정 가능 여부 체크-->
<update id="updateBOMssageLgqySmsUpdt">
UPDATE
GC_LGQY_SMS
SET SNDNG_SJ = #{sndngSj}
, SNDNG_CN = #{sndngCn}
, LINK_URL1 = #{linkUrl1}
, LINK_URL2 = #{linkUrl2}
, LINK_URL3 = #{linkUrl3}
, SNDNG_REQST_DT = #{sndngReqstDt}
, UPDUSR = #{updusr}
, UPDT_DT = NOW()
, SNDNG_DV_CD = #{sndngDvCd}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(orginlFilNm)">
, ORGINL_FIL_NM = #{orginlFilNm}
, SYS_FIL_NM = #{sysFilNm}
, FIL_MG = #{filMg}
, FIL_TY = #{filTy}
, FIL_COURS = #{filCours}
, LANDING_TY = 1/*#{landingTy}*/
</if>
, LANDING_USE_AT = #{landingUseAt}
, LANDING_POSITION = #{landingPosition}
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sndngTrgetQry)">
, SNDNG_TRGET_QRY = #{sndngTrgetQry}
</if>
, SNDNG_CND_PARAM = #{sndngCndParam}
, BRAND_CD = #{brandCd}
<if test="(@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sndngDvCd, '04') and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sndngSttus, 'SAVE'))
or(@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sndngDvCd, '03') and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(sndngSttus, 'REG'))">
,ALL_CNT = #{allCnt}
</if>
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{smsLgqySndngInnb}
</update>
<!-- lgqy_sms 수정-->
<select id="selectBOMssageLgqySndngUpdtAt" resultType="String"> /*처리 중이거나 요청, 완료상태는 수정 못함*/
SELECT CASE
WHEN SNDNG_PROCS_DV_CD IN ('P', '02') THEN 'N'
ELSE 'Y'
END AS UPDT_AT
FROM GC_LGQY_SMS
WHERE SMS_LGQY_SNDNG_INNB = #{smsLgqySndngInnb}
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 대상 삭제 -->
<delete id="deleteBoMssageLgqySmsToDelete">
DELETE
FROM GC_LGQY_SMS_TO
WHERE SMS_LGQY_SNDNG_INNB = #{smsLgqySndngInnb}
</delete>
<!-- 클릭 수 통계 -->
<select id="selectBOMssageLgqyClickStat" resultType="dataMap">
SELECT COUNT(*) AS TOT_CNT
, COUNT(DISTINCT GLSTL.LGQY_SNDNG_TRGET_INNB) AS CLICK_CNT
, IFNULL(COUNT(DISTINCT GLSTL.LGQY_SNDNG_TRGET_INNB)
/ NULLIF((SELECT GLM.SUCCES_CNT
FROM GC_LGQY_SMS GLM
WHERE GLM.SMS_LGQY_SNDNG_INNB = GLSTL.SMS_LGQY_SNDNG_INNB), 0) * 100,
0) AS CLICK_RATE
FROM GC_LGQY_SMS_TO_LINK GLSTL
WHERE 1 = 1
AND GLSTL.SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
</select>
<!-- url 별 클릭 수 통계 -->
<select id="selectBOMssageLgqyUrlClickStat"
resultType="dataMap">
SELECT SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) AS URL1_CNT1
, ROUND(SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL1_CNT1_RT
, SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) AS URL1_CNT2
, ROUND(SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL1_CNT2_RT
, SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) AS URL1_CNT3
, ROUND(SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '1' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL1_CNT3_RT
, SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) AS URL2_CNT1
, ROUND(SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL2_CNT1_RT
, SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) AS URL2_CNT2
, ROUND(SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL2_CNT2_RT
, SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) AS URL2_CNT3
, ROUND(SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '2' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL2_CNT3_RT
, SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) AS URL3_CNT1
, ROUND(SUM(CASE WHEN A.CNT = 1 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL3_CNT1_RT
, SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) AS URL3_CNT2
, ROUND(SUM(CASE WHEN A.CNT = 2 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL3_CNT2_RT
, SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) AS URL3_CNT3
, ROUND(SUM(CASE WHEN A.CNT >= 3 AND A.LINK_NB = '3' THEN 1 ELSE 0 END) / COUNT(*), 2) *
100 AS URL3_CNT3_RT
FROM (SELECT COUNT(*) CNT
, GLSTL.LINK_NB AS LINK_NB
FROM GC_LGQY_SMS_TO_LINK GLSTL
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
GROUP BY LGQY_SNDNG_TRGET_INNB, LINK_NB) A
</select>
<!-- 시간별 클릭 통계 -->
<select id="selectBOMssageLgqyClickStatList"
resultType="dataMap"
parameterType="com.wb.domainserver.domain.gcone.ntcn.lgqymssage.vo.BOLgqyMssageSrchVO">
SELECT DATE_FORMAT(REGIST_DT, '%Y-%m-%d') DAY
, CONCAT(DATE_FORMAT(REGIST_DT, '%H:'), LPAD(FLOOR(MINUTE(REGIST_DT) / 10) * 10, 2, '0')) AS HOUR
, SUM(IF(LINK_NB = 1, IF(LGQY_SNDNG_TRGET_INNB IS NOT NULL, 1, 0), 0)) CNT1
, SUM(IF(LINK_NB = 2, IF(LGQY_SNDNG_TRGET_INNB IS NOT NULL, 1, 0), 0)) CNT2
, SUM(IF(LINK_NB = 3, IF(LGQY_SNDNG_TRGET_INNB IS NOT NULL, 1, 0), 0)) CNT3
, SUM(IF(LINK_NB = 3, IF(ETC = 'r', 1, 0), 0)) R_CNT1
, SUM(IF(LINK_NB = 3, IF(ETC = 'r', 1, 0), 0)) R_CNT2
, SUM(IF(LINK_NB = 3, IF(ETC = 'r', 1, 0), 0)) R_CNT3
, COUNT(DISTINCT LGQY_SNDNG_TRGET_INNB) P_CNT
FROM GC_LGQY_SMS_TO_LINK
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb}
GROUP BY DAY, HOUR
</select>
<!-- 출생년도별 클릭 통계 -->
<select id="selectBOMssageLgqySndngBirthStat" resultType="dataMap">
<![CDATA[
SELECT A.BIRTH
, A.SEX
, SUM(A.CNT) PCNT
FROM (SELECT CASE
WHEN LEFT(M.BRTH_DE, 4) > YEAR(NOW()) THEN 'none'
WHEN LEFT(M.BRTH_DE, 4) <= '1900' THEN 'none'
ELSE LEFT(M.BRTH_DE, 4)
END BIRTH,
IF(M.SEX = '', 'none', M.SEX) SEX,
COUNT(1) CNT
FROM GC_MEMBER M
WHERE M.MBTLNB IN (SELECT CAST(AES_DECRYPT(UNHEX(MBTLNB), '1df5be2f7e90ae36') AS CHAR(50)) AS MBTLNB
FROM GC_LGQY_SMS_TO
WHERE 1 = 1
AND SMS_LGQY_SNDNG_INNB = #{srchSmsLgqySndngInnb})
AND M.SEX <> 'none'
AND M.SEX > ''
GROUP BY M.BRTH_DE, M.SEX
ORDER BY LEFT(M.BRTH_DE, 4) DESC) A
WHERE 1 = 1
AND A.BIRTH <> 'none'
AND A.SEX <> 'none'
GROUP BY A.BIRTH, A.SEX
]]>
</select>
<!-- 클릭자 중 구매자수 통계 -->
<select id="selectBOMssageLgqySndngOrdrStat" resultType="dataMap">
SELECT IF(O.DIFF > 0, O.DIFF * 3, O.DIFF) DIFF,
O.CNT
FROM (SELECT FLOOR(DIFF / 3) DIFF
, COUNT(MOBILE) CNT
FROM (
SELECT
CAST(AES_DECRYPT(UNHEX(FO.ORDRR_MBTLNB), '1df5be2f7e90ae36') AS CHAR(50)) AS MOBILE
, TIMESTAMPDIFF(HOUR, #{sndngDt}, FO.ORDR_RCEPT_DT) DIFF
FROM GC_ORDER FO
LEFT JOIN GC_ORDER_ITEM FOI
ON FOI.ORDR_INNB = FO.ORDR_INNB
LEFT JOIN GC_ORDER_ITEM_OPTION FOIO
ON FOIO.ORDR_INNB = FO.ORDR_INNB
WHERE 1 = 1
AND FOIO.ORDR_STTUS_CD BETWEEN 25 AND 75
AND FO.MBR_INNB > 0
AND FO.ORDR_RCEPT_DT BETWEEN #{sndngDt} AND DATE_ADD(#{sndngDt}, INTERVAL +7 DAY)
AND FO.mbtlnb IN (HEX(AES_ENCRYPT(#{mbtlnb}), #{secretKey}))
)
GROUP BY FLOOR(DIFF / 3)
) O
</select>
<!-- 대량 메시지 달력 조회 -->
<select id="selectBOMssageLgqySndngReqstCldr"
parameterType="com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOLgqyMssageSrchVO"
resultType="dataMap">
SELECT
LGQYSMS.SMS_LGQY_SNDNG_INNB,
LGQYSMS.SNDNG_REQST_DT,
FN_GET_SOPMAL_NAME(LGQYSMS.SOPMAL_CD) AS BRAND_NM
FROM
GC_LGQY_SMS LGQYSMS
WHERE 1=1
AND LGQYSMS.SNDNG_REQST_DT BETWEEN #{srchStrtRegistDt} ' 00:00:00' AND #{srchEndRegistDt} ' 23:59:59'
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSndngSttus)">
AND SNDNG_STTUS = #{srchSndngSttus}
</when>
<otherwise>
AND SNDNG_STTUS IN ('S','I','Y','SAVE','REG','END')
</otherwise>
</choose>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSopmalCd)">
AND SOPMAL_CD = #{srchSopmalCd}
</if>
ORDER BY LGQYSMS.SNDNG_REQST_DT DESC
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,509 @@
<?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.wb.domainserver.domain.gcone.ntcn.tmplt.mapper.BOTmpltMapper">
<!-- 이메일 템플릿 조회 조건 -->
<sql id="tmpltEmailListInqireWhere">
<![CDATA[
WHERE 1 = 1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
</sql>
<!-- 메시지 템플릿 조회 조건 -->
<sql id="tmpltMssageListInqireWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND FORM_DV_CD = #{formDvCd}
]]>
</if>
</sql>
<!-- 알림톡 템플릿 조회 조건 -->
<sql id="tmpltNtcntalkListInqireWhere">
<![CDATA[
WHERE 1=1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
</sql>
<!-- 공통코드 -->
<!-- 그룹코드, 양식구분 조회 -->
<select id="selectBOTmplatGroupCd"
parameterType="java.lang.String"
resultType="dataMap">
<![CDATA[
SELECT *
FROM GC_CODE
WHERE 1 = 1
AND GROUP_CD LIKE #{param}
]]>
</select>
<!-- 이메일 자동발송 발신주소 조회 -->
<select id="selectBOEmailAtmcSndngDsptchAdres"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="String">
<![CDATA[
SELECT
EMAIL_ATMC_SNDNG_DSPTCH_ADRES
FROM GC_SHOP
WHERE SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 이메일 템플릿 -->
<!-- 이메일 템플릿 조회 -->
<select id="selectBOEmailAtmcSndngTmplatInqireForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
EMAIL_SNDNG_FORM_INNB
, SOPMAL_CD
, FORM_DV_CD
, FORM_DTL_DV_CD
, EMAIL_SJ
FROM GC_EMAIL_FORM
]]>
<include refid = "tmpltEmailListInqireWhere"/>
<![CDATA[
ORDER BY FORM_DTL_DV_CD;
]]>
</select>
<!-- 이메일 템플릿 단건 조회 -->
<select id="selectBOEmailAtmcSndngTmplatOneInqireForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
EMAIL_SNDNG_FORM_INNB
, SOPMAL_CD
, EMAIL_SJ
, EMAIL_CN
FROM GC_EMAIL_FORM
]]>
<include refid = "tmpltEmailListInqireWhere"/>
</select>
<!-- 이메일 템플릿 등록(사용안함) -->
<insert id="insertBOEmailTmplat"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(EMAIL_SNDNG_FORM_INNB), 0)+1
FROM GC_EMAIL_FORM
]]>
</selectKey>
INSERT INTO GC_EMAIL_FORM (
EMAIL_SNDNG_FORM_INNB
, SOPMAL_CD
, EMAIL_FORM_DV
, EMAIL_SJ
, EMAIL_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, #{cnncUrl}
, #{popupMgWth}
, 'Y'
, #{regusr}
, NOW()
, #{updusr}
, NOW()
)
</insert>
<!-- 이메일 템플릿 수정 -->
<update id="updateBOEmailTmplat" parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<![CDATA[
UPDATE GC_EMAIL_FORM
SET
EMAIL_SJ = #{emailSj}
, EMAIL_CN = #{emailCn}
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
]]>
<include refid = "tmpltEmailListInqireWhere"/>
</update>
<!-- 메시지 템플릿 -->
<!-- 메시지(SMS) 템플릿 조회 -->
<select id="selectBOMssageAtmcSndngTmplatInqireForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
FORM.SMS_SNDNG_FORM_INNB
, FORM.FORM_DV_CD
, FORM.FORM_DTL_DV_CD
, CODE.CD_NM
, FORM.SMS_CN
FROM GC_SMS_FORM FORM
INNER JOIN GC_MESSAGE_SNDNG GMS
ON FORM.FORM_DV_CD = GMS.FORM_DV_CD
AND FORM.FORM_DTL_DV_CD = GMS.FORM_DTL_DV_CD
AND FORM.SOPMAL_CD = GMS.SOPMAL_CD
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '01'
JOIN GC_CODE CODE
ON FORM.FORM_DV_CD = CODE.GROUP_CD
AND FORM.FORM_DTL_DV_CD = CODE.CD
WHERE 1=1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND GMS.SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND GMS.FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND GMS.FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
<![CDATA[
ORDER BY GMS.FORM_DTL_DV_CD;
]]>
</select>
<!-- 메시지 템플릿 등록(사용안함) -->
<insert id="insertBOMssageTmplat"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(SMS_SNDNG_FORM_INNB), 0)+1
FROM GC_SMS_FORM
]]>
</selectKey>
INSERT INTO GC_SMS_FORM (
SMS_SNDNG_FORM_INNB
, SOPMAL_CD
, FORM_DV
, SMS_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 메시지 템플릿 수정 -->
<update id="updateBOMssageTmplat" parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_SMS_FORM
SET
SMS_CN = #{dto.smsCn}
, UPDUSR = #{dto.updusr}
, UPDT_DT = SYSDATE()
WHERE SOPMAL_CD = #{dto.sopmalCd}
AND FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 알림톡 템플릿 조회 -->
<select id="selectBONtcntalkAtmcSndngTmplatInqireForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
FORM.NTCNTALK_SNDNG_FORM_INNB
, FORM.FORM_DV_CD
, FORM.FORM_DTL_DV_CD
, CODE.CD_NM
, FORM.MSG
, FORM.SMS_RPLC_AT
, FORM.SMS_CN
FROM GC_KAKAO_FORM FORM
INNER JOIN GC_MESSAGE_SNDNG GMS
ON FORM.FORM_DV_CD = GMS.FORM_DV_CD
AND FORM.FORM_DTL_DV_CD = GMS.FORM_DTL_DV_CD
AND FORM.SOPMAL_CD = GMS.SOPMAL_CD
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '01'
JOIN GC_CODE CODE
ON FORM.FORM_DV_CD = CODE.GROUP_CD
AND FORM.FORM_DTL_DV_CD = CODE.CD
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
<![CDATA[
AND GMS.SOPMAL_CD = #{sopmalCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDvCd)">
<![CDATA[
AND GMS.FORM_DV_CD = #{formDvCd}
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(formDtlDvCd)">
<![CDATA[
AND GMS.FORM_DTL_DV_CD = #{formDtlDvCd}
]]>
</if>
<![CDATA[
ORDER BY GMS.FORM_DTL_DV_CD;
]]>
</select>
<!-- 알림톡 템플릿 조회_팝업 -->
<select id="selectBONtcntalkAtmcSndngTmplatUpdtPopupForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO"
resultType="dataMap">
<![CDATA[
SELECT
CODE.CD_NM
, FORM.MSG
, FORM.BTN_TYPE_01
, FORM.BTN_NM_01
, FORM.BTN_01_URL_01
, FORM.BTN_01_URL_02
, FORM.BTN_TYPE_02
, FORM.BTN_NM_02
, FORM.BTN_02_URL_01
, FORM.BTN_02_URL_02
, FORM.BTN_TYPE_03
, FORM.BTN_NM_03
, FORM.BTN_03_URL_01
, FORM.BTN_03_URL_02
, FORM.BTN_TYPE_04
, FORM.BTN_NM_04
, FORM.BTN_04_URL_01
, FORM.BTN_04_URL_02
, FORM.BTN_TYPE_05
, FORM.BTN_NM_05
, FORM.BTN_05_URL_01
, FORM.BTN_05_URL_02
, FORM.SMS_RPLC_AT
, FORM.SMS_CN
FROM GC_KAKAO_FORM FORM
JOIN GC_CODE CODE
ON FORM.FORM_DV_CD = CODE.GROUP_CD
AND FORM.FORM_DTL_DV_CD = CODE.CD
]]>
<include refid = "tmpltNtcntalkListInqireWhere"/>
</select>
<!-- 알림톡 템플릿 등록(사용안함) -->
<insert id="insertBOKakaoForm"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(NTCNTALK_SNDNG_FORM_INNB), 0)+1
FROM GC_KAKAO_FORM
]]>
</selectKey>
INSERT INTO GC_KAKAO_FORM (
NTCNTALK_SNDNG_FORM_INNB
, SOPMAL_CD
, KAKAO_CD
, FORM_DV
, SMS_RPLC_AT
, SMS_RPLC_CN
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 알림톡 템플릿 등록_버튼(사용안함) -->
<insert id="insertBOKakaoFormButton"
parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<selectKey order="BEFORE" keyProperty="//////////////" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(NTCNTALK_SNDNG_FORM_INNB), 0)+1
FROM GC_KAKAO_FORM_BUTTON
]]>
</selectKey>
INSERT INTO GC_KAKAO_FORM_BUTTON (
NTCNTALK_SNDNG_FORM_INNB
, BUTTON_INNB
, BUTTON_NM
, BUTTON_URL
, USE_AT
, REGUSR
, REGIST_DT
, UPDUSR
, UPDT_DT
)
VALUES (
#{popupInnb}
, #{popupNm}
, #{popupExpsrBgnDt}
, #{popupExpsrEndDt}
, 'Y'
, #{regusr}
, SYSDATE()
, #{updusr}
, SYSDATE()
)
</insert>
<!-- 알림톡 템플릿 수정 -->
<update id="updateBOKakaoForm" parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<foreach collection="list" item="dto" separator=";">
<![CDATA[
UPDATE GC_KAKAO_FORM
SET
MSG = #{dto.msg}
, SMS_CN = #{dto.smsCn}
, SMS_RPLC_AT = #{dto.smsRplcAt}
, UPDUSR = #{dto.updusr}
, UPDT_DT = SYSDATE()
WHERE FORM_DV_CD = #{dto.formDvCd}
AND FORM_DTL_DV_CD = #{dto.formDtlDvCd}
]]>
</foreach>
</update>
<!-- 알림톡 템플릿 수정_팝업 -->
<update id="updateBOKakaoFormPopup" parameterType="com.wb.domainserver.domain.gcone.ntcn.tmplt.vo.BOTmpltVO">
<![CDATA[
UPDATE GC_KAKAO_FORM
SET
MSG = #{msg}
, BTN_TYPE_01 = #{btnType01}
, BTN_NM_01 = #{btnNm01}
, BTN_01_URL_01 = #{btn01Url01}
, BTN_01_URL_02 = #{btn01Url02}
, BTN_TYPE_02 = #{btnType02}
, BTN_NM_02 = #{btnNm02}
, BTN_02_URL_01 = #{btn02Url01}
, BTN_02_URL_02 = #{btn02Url02}
, BTN_TYPE_03 = #{btnType03}
, BTN_NM_03 = #{btnNm03}
, BTN_03_URL_01 = #{btn03Url01}
, BTN_03_URL_02 = #{btn03Url02}
, BTN_TYPE_04 = #{btnType04}
, BTN_NM_04 = #{btnNm04}
, BTN_04_URL_01 = #{btn04Url01}
, BTN_04_URL_02 = #{btn04Url02}
, BTN_TYPE_05 = #{btnType05}
, BTN_NM_05 = #{btnNm05}
, BTN_05_URL_01 = #{btn05Url01}
, BTN_05_URL_02 = #{btn05Url02}
, SMS_RPLC_AT = #{smsRplcAt}
, SMS_CN = #{smsCn}
, UPDUSR = #{updusr}
, UPDT_DT = SYSDATE()
WHERE FORM_DV_CD = #{formDvCd}
AND FORM_DTL_DV_CD = #{formDtlDvCd}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 템플릿 사용 그룹 조회 -->
<select id="selectBOTmplatGroup"
resultType="dataMap">
<![CDATA[
SELECT
*
FROM GC_CODE GC
INNER JOIN (
SELECT
SUBSTRING_INDEX(GMS.FORM_DV_CD, '_', 2) AS GROUP_CD
, SUBSTRING_INDEX(GMS.FORM_DV_CD, '_', -1) AS CD
FROM GC_MESSAGE_SNDNG GMS
WHERE GMS.SOPMAL_CD = #{sopmalCd}
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '01'
GROUP BY GMS.FORM_DV_CD
) TB
ON GC.GROUP_CD = TB.GROUP_CD
AND GC.CD = TB.CD
]]>
</select>
<!-- 템플릿 사용 그룹별 폼 조회 -->
<select id="selectBOTmplatFormGroup"
resultType="dataMap">
<![CDATA[
SELECT
*
FROM GC_CODE GC
INNER JOIN GC_MESSAGE_SNDNG GMS
ON GC.GROUP_CD = GMS.FORM_DV_CD
AND GC.CD = GMS.FORM_DTL_DV_CD
WHERE 1=1
AND GMS.SOPMAL_CD = #{sopmalCd}
AND GMS.EXPSR_AT = 'Y'
AND GMS.MNGR_DV = '01'
]]>
</select>
</mapper>

View File

@@ -0,0 +1,517 @@
<?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.wb.domainserver.domain.gcone.ordr.atmcrcpmny.mapper.BOAtmcrcpmnyMapper">
<!-- 입금내역 목록 조회 FROM 절 -->
<sql id="selectBOAtmcRcpmnyDtlsListInqireFrom">
<![CDATA[
FROM TBLBANK T
LEFT JOIN GC_ORDER_SETLE S
ON T.SOPMAL_CD = S.SOPMAL_CD
AND T.ORDR_INNB = S.ORDR_INNB
LEFT JOIN GC_ORDER O
ON T.SOPMAL_CD = O.SOPMAL_CD
AND T.ORDR_INNB = O.ORDR_INNB
LEFT JOIN GC_MEMO M
ON T.SOPMAL_CD = M.SOPMAL_CD
AND T.Bkcode = M.BK_CODE
]]>
</sql>
<!-- 입금내역 목록 조회 WHERE 절 -->
<sql id="selectBOAtmcRcpmnyDtlsListInqireWhere">
<![CDATA[
WHERE 1=1
AND T.SOPMAL_CD = #{sopmalCd}
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(searchWord)">
<![CDATA[
AND (
T.BKJUKYO LIKE CONCAT('%', #{searchWord}, '%') OR
T.BKNAME LIKE CONCAT('%', #{searchWord}, '%') OR
T.BKINPUT LIKE CONCAT('%', #{searchWord}, '%') OR
T.ORDR_INNB LIKE CONCAT('%', #{searchWord}, '%')
)
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(searchAccount)">
<choose>
<when test="searchAccount=='all'">
AND T.BKACCTNO LIKE CONCAT('%', '', '%')
</when>
<otherwise>
AND T.BKACCTNO LIKE CONCAT('%', #{searchAccount}, '%')
</otherwise>
</choose>
</if>
<if test='@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)'>
AND T.BKDATE BETWEEN REPLACE(#{srchStartDate}, '-', '') AND REPLACE(#{srchEndDate}, '-', '')
</if>
<!-- 입금 확인 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStatus)">
<![CDATA[
AND
]]>
<foreach collection="srchStatus" item="srchStatus" open="(" close=")" separator="OR">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchStatus, 'N')">
<![CDATA[
O.AUTODEPOSIT_TY IS NULL
]]>
</when>
<otherwise>
<![CDATA[
O.AUTODEPOSIT_TY = #{srchStatus}
]]>
</otherwise>
</choose>
</foreach>
</if>
ORDER BY BKDATE DESC , BKTIME DESC
</sql>
<!-- 입금내역 목록 건수 조회 -->
<select id = "selectBOAtmcRcpmnyDtlsListCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="java.lang.Integer">
SELECT COUNT(1)
FROM (
SELECT
T.BKDATE
<include refid = "selectBOAtmcRcpmnyDtlsListInqireFrom"/>
<include refid = "selectBOAtmcRcpmnyDtlsListInqireWhere"/>
) AS A
</select>
<!-- 입금내역 목록 조회 -->
<select id="selectBOAtmcRcpmnyDtlsListInqire"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType = "dataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT
T.BKID,
T.BKDATE,
T.BKNAME,
T.BKACCTNO,
T.BKJUKYO,
T.BKINPUT,
T.BKTIME,
T.SOPMAL_CD,
T.ORDR_INNB,
T.BKCODE,
S.SETLE_DT,
S.MEMOR_SETLE_AT,
M.MEMO_CN,
O.AUTODEPOSIT_TY,
S.SETLE_AMT,
S.BNNK_NM,
S.DPSTR_NM,
S.RCPMNY_ACNTNB,
S.RCPMNYER_NM
<include refid = "selectBOAtmcRcpmnyDtlsListInqireFrom"/>
<include refid = "selectBOAtmcRcpmnyDtlsListInqireWhere"/>
<![CDATA[
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 자동입금확인 메모 테이블 글 유무 조회 -->
<select id="selectBORcpmnyDtlsMngrMemoRegistCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmMemoVO"
resultType="java.lang.Integer">
SELECT COUNT(*)
FROM GC_MEMO
WHERE 1=1
AND BK_CODE = #{bkcode}
AND SOPMAL_CD = #{sopmalCd}
</select>
<!-- 자동입금확인 메모 글 작성 insert or update -->
<insert id="insertBORcpmnyDtlsMngrMemoRegist"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmMemoVO">
<choose>
<when test="insertOrUpdate > 0">
<![CDATA[
UPDATE GC_MEMO
SET MEMO_CN = TRIM(#{memoCn}),
UPDT_DT = SYSDATE()
WHERE 1=1
AND BK_CODE = #{bkcode}
AND SOPMAL_CD = #{sopmalCd}
]]>
</when>
<otherwise>
<![CDATA[
INSERT INTO GC_MEMO (
MEMO_SNB,
SOPMAL_CD,
BK_CODE,
MEMO_CN,
UPDT_DT)
SELECT
COALESCE(MAX(MEMO_SNB), 0) + 1,
#{sopmalCd},
#{bkcode},
TRIM(#{memoCn}),
SYSDATE()
FROM GC_MEMO
]]>
</otherwise>
</choose>
</insert>
<!-- 입금내역 추가 -->
<insert id="insertBORcpmnyDtlsColct"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<selectKey order="BEFORE" keyProperty="bkid" resultType="java.lang.Integer">
<![CDATA[
SELECT IFNULL(MAX(BKID), 0)+1
FROM TBLBANK
]]>
</selectKey>
<![CDATA[
INSERT INTO TBLBANK (
BKID,
BKACCTNO,
BKDATE,
BKJUKYO,
BKINPUT,
BKOUTPUT,
BKCODE,
MID,
BKNAME,
BKTIME,
BKCONTENT,
BKETC,
BKJANGO,
BKXFERDATETIME,
ORDR_INNB,
ORDR_SETLE_INNB
)
VALUES (
#{bkid},
#{bkacctno},
#{bkdate},
#{bkjukyo},
#{bkinput},
#{bkoutput},
#{bkcode},
#{mid},
#{bkname},
#{bktime},
#{bkcontent},
#{bketc},
#{bkjango},
DATE_FORMAT(SYSDATE(), '%Y%m%d%H%i%s'),
"0",
"0"
)
]]>
</insert>
<!-- 입금내역 자동 매칭 될 데이터 리스트 조회 -->
<select id="selectBORcpmnyCnfirmExecut"
parameterType="com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
SELECT
BKID,
BKACCTNO,
BKDATE,
BKJUKYO,
BKINPUT,
BKTIME,
SOPMAL_CD
FROM TBLBANK
WHERE 1=1
AND ORDR_SETLE_INNB = 0
AND BKDATE >= DATE_SUB(SYSDATE(), INTERVAL 1 WEEK)
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(sopmalCd)">
AND SOPMAL_CD = #{sopmalCd}
</if>
</select>
<!-- 입금내역 자동 매칭 될 데이터 조회 -->
<select id="selectBORcpmnyCnfirmTrget"
parameterType="com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
SELECT
FOS.SOPMAL_CD,
FOS.ORDR_INNB,
FOS.ORDR_SETLE_INNB,
FO.ORDR_RCEPT_DT,
FO.ORDR_STTUS_CD AS CURR_ORDR_STTUS_CD
FROM GC_ORDER_SETLE FOS
INNER JOIN GC_ORDER FO
ON FOS.ORDR_INNB = FO.ORDR_INNB
AND FOS.SOPMAL_CD = FO.SOPMAL_CD
WHERE 1=1
AND FOS.SOPMAL_CD = #{sopmalCd}
AND FOS.SETLE_TY_CD = '02'
AND FOS.SETLE_COMPT_AT = 'N'
AND FO.ORDR_STTUS_CD = '15'
AND FO.AUTODEPOSIT_TY IS NULL
AND FO.ORDR_RCEPT_DT >= DATE_SUB(SYSDATE(), INTERVAL 1 WEEK)
AND FO.ORDR_RCEPT_DT <= STR_TO_DATE(CONCAT(#{bkdate}, #{bktime}), '%Y%m%d%H%i%s')
AND FOS.RCPMNYER_NM = #{bkjukyo}
AND REPLACE(FOS.RCPMNY_ACNTNB, '-', '') = ${bkacctno}
AND FOS.SETLE_AMT = #{bkinput}
ORDER BY FOS.ORDR_SETLE_INNB ASC
LIMIT 1
]]>
</select>
<!-- 수동 매칭 입금내역 업데이트 -->
<update id="updateBORcpmnyCnfirmExecutRcpmny"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
UPDATE TBLBANK
SET ORDR_INNB = #{ordrInnb}
,ORDR_SETLE_INNB = #{ordrSetleInnb}
WHERE 1=1
AND BKID = #{bkid}
]]>
</update>
<!-- 수동 매칭 주문 업데이트 -->
<update id="updateBORcpmnyCnfirmExecutOrdr"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
UPDATE GC_ORDER
SET AUTODEPOSIT_TY = #{autodepositTy}
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
]]>
</update>
<!-- 수동 매칭 주문결제 업데이트 -->
<update id="updateBORcpmnyCnfirmExecutOrdrSetle"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
UPDATE GC_ORDER_SETLE
SET SETLE_COMPT_AT = #{setleComptAt}
,SETLE_DT = STR_TO_DATE(CONCAT(#{bkdate}, #{bktime}), '%Y%m%d%H%i%s')
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_SETLE_INNB = #{ordrSetleInnb}
]]>
</update>
<!-- 수동 매칭 뱅크다 데이터 유무 조회 -->
<select id="selectBORcpmnyDtlsLastVal" resultType="String">
<![CDATA[
SELECT max(Bkcode)
FROM TBLBANK
WHERE 1=1
]]>
</select>
<!-- 주문조회 팝업 목록 조회 where절 -->
<sql id="selectBOAtmcRcpmnyOrdrInqireWhere">
WHERE 1=1
AND FOS.SOPMAL_CD = #{sopmalCd}
<!-- 은행명 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchBnnkNm)">
<![CDATA[
AND FOS.BNNK_NM LIKE CONCAT('%', #{srchBnnkNm}, '%')
]]>
</if>
<!-- 입금자명 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRcpmnyerNm)">
<![CDATA[
AND FOS.RCPMNYER_NM LIKE CONCAT('%', #{srchRcpmnyerNm}, '%')
]]>
</if>
<!-- 계좌번호 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRcpmnyAcntnb)">
<![CDATA[
AND REPLACE(FOS.RCPMNY_ACNTNB, '-', '') = #{srchRcpmnyAcntnb}
]]>
</if>
<!-- 입금금액1 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSetleAmt1)">
<![CDATA[
AND FOS.SETLE_AMT >= #{srchSetleAmt1}
]]>
</if>
<!-- 입금금액2 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchSetleAmt2)">
<![CDATA[
AND FOS.SETLE_AMT <= #{srchSetleAmt2}
]]>
</if>
<!-- 주문일1 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
<![CDATA[
AND FO.ORDR_RCEPT_DT >= #{srchStartDate} ' 00:00:00'
]]>
</if>
<!-- 주문일2 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
<![CDATA[
AND FO.ORDR_RCEPT_DT <= #{srchEndDate} ' 23:59:59'
]]>
</if>
<!-- 입금미확인만 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.AUTODEPOSIT_TY IS NULL
]]>
</if>
<!-- 입금확인 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.AUTODEPOSIT_TY IS NOT NULL
]]>
</if>
<!-- 주문무효 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.ORDR_STTUS_CD = '95'
]]>
</if>
<!-- 입금미확인, 입금확인 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.ORDR_STTUS_CD BETWEEN '15' AND '75'
]]>
</if>
<!-- 입금확인, 주문무효 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND (FO.AUTODEPOSIT_TY IS NOT NULL OR FO.ORDR_STTUS_CD = '95')
]]>
</if>
<!-- 입금미확인, 주문무효 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND (FO.AUTODEPOSIT_TY IS NULL OR FO.ORDR_STTUS_CD = '95')
]]>
</if>
<!-- 입금미확인, 입금확인, 주문무효 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd2) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchOrdrSttusCd3)">
<![CDATA[
AND FO.ORDR_STTUS_CD BETWEEN '15' AND '95'
]]>
</if>
</sql>
<!-- 주문조회 팝업 목록 주문조회 from절 -->
<sql id="selectBOAtmcRcpmnyOrdrInqireFrom">
FROM GC_ORDER_SETLE FOS
INNER JOIN GC_ORDER FO
ON FOS.ORDR_INNB = FO.ORDR_INNB
AND FOS.SOPMAL_CD = FO.SOPMAL_CD
</sql>
<!-- 주문조회 팝업 목록 주문조회 건수 -->
<select id = "selectBOAtmcRcpmnyOrdrInqireCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="java.lang.Integer">
SELECT COUNT(*)
<include refid = "selectBOAtmcRcpmnyOrdrInqireFrom" />
<include refid = "selectBOAtmcRcpmnyOrdrInqireWhere" />
</select>
<!-- 주문조회 팝업 목록 주문조회 -->
<select id = "selectBOAtmcRcpmnyOrdrInqire"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="dataMap">
<![CDATA[
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM
,TB.*
FROM (
SELECT
FOS.ORDR_SETLE_INNB,
FOS.ORDR_INNB,
FOS.SOPMAL_CD,
FOS.BNNK_NM,
FOS.RCPMNY_ACNTNB,
FOS.DPSTR_NM,
FOS.RCPMNYER_NM,
FOS.SETLE_AMT,
FOS.SETLE_DT,
FO.ORDR_RCEPT_DT,
FO.ORDRR_NM,
FO.ORDR_STTUS_CD,
FN_GET_COMMCODE_NAME('ORDR_STTUS',FO.ORDR_STTUS_CD) AS ORDR_STTUS_CD_NM,
FO.AUTODEPOSIT_TY
]]>
<include refid = "selectBOAtmcRcpmnyOrdrInqireFrom" />
<include refid = "selectBOAtmcRcpmnyOrdrInqireWhere" />
ORDER BY ORDR_RCEPT_DT DESC
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 입금내역 테이블 계좌번호 조회 -->
<select id = "selectRcpmnyDtlsAcntnbList"
resultType="dataMap">
<![CDATA[
SELECT
BKACCTNO
FROM TBLBANK
WHERE 1=1
AND SOPMAL_CD IS NULL
GROUP BY BKACCTNO
]]>
</select>
<!-- 입금내역 테이블 쇼핑몰코드 추가 -->
<update id="updateBORcpmnyDtlsColct"
parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO">
<![CDATA[
UPDATE TBLBANK SET
SOPMAL_CD = #{sopmalCd}
WHERE 1=1
AND SOPMAL_CD IS NULL
AND BKACCTNO = #{bkacctno}
]]>
</update>
<!-- 현재 주문상태 조회 -->
<select id = "selectCurrOrdrSttusCd" parameterType = "com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO"
resultType="String">
<![CDATA[
SELECT ORDR_STTUS_CD
FROM GC_ORDER
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
]]>
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,47 @@
<?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.wb.domainserver.domain.gcone.ordr.npay.mapper.BoIfLogMapper">
<!-- if 로그 등록 -->
<insert id = "insertBoIfLog"
parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BOIfLogVO">
<selectKey keyProperty="ifSeq" resultType = "String" order="BEFORE">
SELECT IFNULL(MAX(CAST(IF_SEQ AS UNSIGNED)), 0) + 1
FROM GC_NPAY_IF_LOG
WHERE SOPMAL_CD = #{sopmalCd}
AND IF_KND_CD = #{ifKndCd}
</selectKey>
INSERT INTO GC_NPAY_IF_LOG (
SOPMAL_CD,
IF_KND_CD,
IF_SEQ,
IF_STTUS_CD,
SEND_PARAM,
RECEIVE_PARAM,
REGIST_DT,
TRAN_STTUS_CD,
ERROR_MESSAGE,
REQUEST_ID
)VALUES(
#{sopmalCd},
#{ifKndCd},
#{ifSeq},
#{ifSttusCd},
#{sendParam},
#{receiveParam},
SYSDATE(),
#{tranSttusCd},
#{errorMessage},
#{requestId}
)
</insert>
</mapper>

View File

@@ -0,0 +1,105 @@
<?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.wb.domainserver.domain.gcone.ordr.npay.mapper.BONpayConfigMapper">
<!-- insert GC_NPAY_CONFIG SQL -->
<insert id="insertNpayConfig" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
INSERT INTO GC_NPAY_CONFIG(
SOPMAL_CD
, SHOP_ID
, CERTIFICATION_KEY
, ACCESS_LICENSE
, SECRET_KEY
, BUTTON_KEY
, COMMON_CERTI_KEY
, REGIST_DT
, REGUSR
, UPDT_DT
, UPDUSR
) VALUES (
#{sopmalCd}
, #{shopId}
, #{certificationKey}
, #{accessLicense}
, #{secretKey}
, #{buttonKey}
, #{commonCertiKey}
, SYSDATE()
, #{regusr}
, SYSDATE()
, #{updusr}
)
</insert>
<!-- Update GC_NPAY_CONFIG SQL -->
<update id="updateNpayConfig" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
UPDATE GC_NPAY_CONFIG SET
SHOP_ID = #{shopId}
, CERTIFICATION_KEY = #{certificationKey}
, ACCESS_LICENSE = #{accessLicense}
, SECRET_KEY = #{secretKey}
, BUTTON_KEY = #{buttonKey}
, COMMON_CERTI_KEY = #{commonCertiKey}
, UPDT_DT = SYSDATE()
, UPDUSR = #{updusr}
WHERE
SOPMAL_CD = #{sopmalCd}
</update>
<!-- Delete GC_NPAY_CONFIG SQL -->
<delete id="deleteNpayConfig" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
DELETE FROM GC_NPAY_CONFIG
WHERE
SOPMAL_CD = #{sopmalCd}
</delete>
<!-- Select Detail GC_NPAY_CONFIG SQL -->
<select id="selectNpayConfigDetail" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO" resultType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
SELECT
SOPMAL_CD
,SHOP_ID
,CERTIFICATION_KEY
,ACCESS_LICENSE
,SECRET_KEY
,BUTTON_KEY
,COMMON_CERTI_KEY
,ENVRN
,DATE_FORMAT(REGIST_DT, '%Y.%m.%d %H:%i:%s') AS REGIST_DE
,REGIST_DT
,REGUSR
,DATE_FORMAT(UPDT_DT, '%Y.%m.%d %H:%i:%s') AS UPDT_DE
,UPDT_DT
,UPDUSR
FROM
GC_NPAY_CONFIG
WHERE
SOPMAL_CD = #{sopmalCd}
</select>
<!-- Select List GC_NPAY_CONFIG SQL -->
<select id="selectNpayConfigList" parameterType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO" resultType="com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO">
SELECT
SOPMAL_CD
,SHOP_ID
,CERTIFICATION_KEY
,ACCESS_LICENSE
,SECRET_KEY
,BUTTON_KEY
,COMMON_CERTI_KEY
,DATE_FORMAT(REGIST_DT, '%Y.%m.%d %H:%i:%s') AS REGIST_DE
,REGIST_DT
,REGUSR
,DATE_FORMAT(UPDT_DT, '%Y.%m.%d %H:%i:%s') AS UPDT_DE
,UPDT_DT
,UPDUSR
FROM
GC_NPAY_CONFIG
WHERE
SOPMAL_CD = #{sopmalCd}
</select>
</mapper>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,730 @@
<?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.wb.domainserver.domain.gcone.ordr.selngpruf.mapper.BOSelngprufMapper">
<!-- 매출증빙 목록 조회 FROM 절 -->
<sql id="selectBOSelngPrufListInqireFrom">
<![CDATA[
FROM GC_SALES FS
LEFT JOIN GC_ORDER_SETLE FOS
ON FS.ORDR_SETLE_INNB = FOS.ORDR_SETLE_INNB
INNER JOIN GC_ORDER FO
ON FOS.ORDR_INNB = FO.ORDR_INNB
AND FOS.SOPMAL_CD = FO.SOPMAL_CD
LEFT JOIN GC_ORDER_REFUND FOR1
ON FO.ORDR_INNB = FOR1.ORDR_INNB
AND FO.SOPMAL_CD = FOR1.SOPMAL_CD
LEFT JOIN GC_MEMBER FM
ON FO.MBR_INNB = FM.MBR_INNB
AND FO.MBR_DV_CD = FM.MBR_DV_CD
]]>
</sql>
<!-- 매출증빙 목록 조회 WHERE 절 -->
<sql id="selectBOSelngPrufListInqireWhere">
WHERE 1=1
AND FO.SOPMAL_CD = #{sopmalCd}
AND FO.ORDR_STTUS_CD NOT IN ('0', '95', '99')
<!-- AND fo.ORDR_RCEPT_DT between '2022-07-19' and '2022-07-25' -->
<!-- 검색어 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchWord)">
AND (
FO.ORDRR_NM LIKE CONCAT('%', #{srchWord}, '%') OR
FO.ORDR_INNB LIKE CONCAT('%', #{srchWord}, '%')
)
</if>
<!-- 날짜 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchDate)">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDate, '1')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
<![CDATA[
AND FO.ORDR_RCEPT_DT >= #{srchStartDate} ' 00:00:00'
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
<![CDATA[
AND FO.ORDR_RCEPT_DT <= #{srchEndDate} ' 23:59:59'
]]>
</if>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDate, '2')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
<![CDATA[
AND FS.REGIST_DT >= #{srchStartDate} ' 00:00:00'
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
<![CDATA[
AND FS.REGIST_DT <= #{srchEndDate} ' 23:59:59'
]]>
</if>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDate, '3')">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStartDate)">
<![CDATA[
AND FS.UPDT_DT >= #{srchStartDate} ' 00:00:00'
]]>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchEndDate)">
<![CDATA[
AND FS.UPDT_DT <= #{srchEndDate} ' 23:59:59'
]]>
</if>
</when>
</choose>
</if>
<!-- 증빙서류 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchReqst)">
<![CDATA[
AND FS.REQST_DV_CD IN
]]>
<foreach collection="srchReqst" item="srchReqst" open="(" close=")" separator=",">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchReqst, '02')">
<![CDATA[
'02', '03'
]]>
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchReqst, '04')">
#{srchReqst}
</when>
</choose>
</foreach>
</if>
<!-- 결제여부 입금 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRcpmny1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchRcpmny2)">
<![CDATA[
AND FO.ORDR_STTUS_CD > 15
]]>
</if>
<!-- 결제여부 미입금 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchRcpmny1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRcpmny2)">
<![CDATA[
AND FO.ORDR_STTUS_CD = 15
]]>
</if>
<!-- 환불유무 있음 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRefund1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchRefund2)">
<![CDATA[
AND FOR1.ORDER_REFUND_INNB IS NOT NULL
]]>
</if>
<!-- 환불유무 없음 체크 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(srchRefund1) and @com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchRefund2)">
<![CDATA[
AND FOR1.ORDER_REFUND_INNB IS NULL
]]>
</if>
<!-- 상태 -->
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchStatus)">
<![CDATA[
AND
]]>
<foreach collection="srchStatus" item="srchStatus" open="(" close=")" separator="OR">
<![CDATA[
FS.ISSU_STTUS_CD = #{srchStatus}
]]>
</foreach>
</if>
</sql>
<!-- 매출증빙 목록 조회 GROUP BY 절 -->
<sql id="selectBOSelngPrufListInqireGroupBy">
GROUP BY FO.ORDR_INNB
,FO.ORDR_RCEPT_DT
,FO.ORDRR_NM
,FM.MBR_ID
,FOS.SETLE_TY_CD
,FOS.SETLE_AMT
,FO.ORDR_STTUS_CD
,FS.REGIST_DT
,FS.REQST_DV_CD
,FS.SPLPRIC
,FS.VAT_AMT
,FS.AMT
,FS.CANCL_AMT
,FS.ISSU_DT
,FS.ISSU_STTUS_CD
,FS.MNGR_MEMO_CN
,FS.SELNG_PRUF_INNB
ORDER BY FO.ORDR_INNB DESC
</sql>
<!-- 매출증빙 목록 건수 조회 -->
<select id = "selectBOSelngPrufListCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="java.lang.Integer">
SELECT
COUNT(*)
FROM (
SELECT FO.ORDR_INNB
<include refid = "selectBOSelngPrufListInqireFrom"/>
<include refid = "selectBOSelngPrufListInqireWhere"/>
<include refid = "selectBOSelngPrufListInqireGroupBy"/>
) AS TEMP
</select>
<!-- 매출증빙 목록 조회 -->
<select id = "selectBOSelngPrufListInqire"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
SELECT *
FROM (
SELECT
CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM, TB.*
FROM (
SELECT FO.ORDR_INNB
,FO.ORDR_RCEPT_DT
,FO.ORDRR_NM
,FM.MBR_ID
,FOS.SETLE_TY_CD
,FOS.SETLE_AMT
,FO.ORDR_STTUS_CD AS ORDR_STTUS_CD
,FN_GET_COMMCODE_NAME('ORDR_STTUS',FO.ORDR_STTUS_CD) AS ORDR_STTUS_CD_NM
,FS.REGIST_DT
,FS.REQST_DV_CD AS REQST_DV_CD
,FN_GET_COMMCODE_NAME('REQST_DV', FS.REQST_DV_CD) AS REQST_DV_CD_NM
,FS.SPLPRIC
,FS.VAT_AMT
,FS.AMT
,FS.CANCL_AMT
,FS.ISSU_DT
,FS.ISSU_STTUS_CD AS ISSU_STTUS_CD
,FN_GET_COMMCODE_NAME('ISSU_STTUS', FS.ISSU_STTUS_CD) AS ISSU_STTUS_CD_NM
,FS.MNGR_MEMO_CN
,FO.SOPMAL_CD
,GROUP_CONCAT(FOR1.ORDER_REFUND_INNB) AS ORDER_REFUND_INNB
,FS.SELNG_PRUF_INNB
,FS.ORDR_SETLE_INNB
,FS.CSH_RCIPT_DELNG_NB
,FS.CRTNB
,FOS.PG_CMPNY_NM
,FOS.PG_INNB
,FS.UPDT_DT
<include refid = "selectBOSelngPrufListInqireFrom"/>
<include refid = "selectBOSelngPrufListInqireWhere"/>
<include refid = "selectBOSelngPrufListInqireGroupBy"/>
<![CDATA[
) TB
WHERE (@rownum:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
]]>
</select>
<!-- 매출증빙 관리자 메모 조회 -->
<select id = "selectBOSelngPrufMngrMemoRegistPopupForm"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
<![CDATA[
SELECT DISTINCT
ORDR_INNB,
SOPMAL_CD,
MNGR_MEMO_CN,
SELNG_PRUF_INNB
FROM GC_SALES
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 매출증빙 관리자 메모 등록, 수정 -->
<update id = "updateBOSelngPrufMngrMemoRegistPopup"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
UPDATE GC_SALES
SET MNGR_MEMO_CN = TRIM(#{mngrMemoCn})
,UPDUSR = #{updusr}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 매출증빙 전송로그 건수 조회 -->
<select id = "selectBOSelngPrufTrnsmisLogInqireCnt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="java.lang.Integer">
<![CDATA[
SELECT
COUNT(*)
FROM GC_SALES_LOG
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
]]>
</select>
<!-- 매출증빙 전송로그 조회 -->
<select id = "selectBOSelngPrufTrnsmisLogInqire"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
<![CDATA[
SELECT
*
FROM GC_SALES_LOG
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
]]>
</select>
<!-- 매출증빙 테이블 조회 -->
<select id = "selectBOCshRcipt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
<![CDATA[
SELECT
FS.ISSU_STTUS_CD,
FN_GET_COMMCODE_NAME("ISSU_STTUS", FS.ISSU_STTUS_CD) AS ISSU_STTUS_CD_NM,
FS.REGIST_DT,
FS.ISSU_TRGET_DV_CD,
FN_GET_COMMCODE_NAME("ISSU_TRGET_DV",FS.ISSU_TRGET_DV_CD) AS ISSU_TRGET_DV_CD_NM,
FS.CRTNB,
FS.ORDRR_NM,
CAST(AES_DECRYPT(UNHEX(FS.ORDRR_EMAIL) , '1df5be2f7e90ae36') AS CHAR(50)) AS ORDRR_EMAIL,
FS.GOODS_NM,
FS.AMT,
FS.SPLPRIC,
FS.VAT_AMT,
FS.ORDR_INNB,
FS.SOPMAL_CD,
FS.ORDR_SETLE_INNB,
FS.SELNG_PRUF_INNB
FROM GC_SALES FS
WHERE 1=1
AND FS.SELNG_PRUF_INNB = #{selngPrufInnb}
AND FS.SOPMAL_CD = #{sopmalCd}
]]>
</select>
<!-- 매출증빙 현금영수증 정보 수정 -->
<update id = "updateBOCshRcipt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
UPDATE GC_SALES
SET ISSU_TRGET_DV_CD = #{issuTrgetDvCd}
,CRTNB = #{crtnb}
]]>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrrNm)">
,ORDRR_NM = #{ordrrNm}
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ordrrEmail)">
,ORDRR_EMAIL = HEX(AES_ENCRYPT(#{ordrrEmail}, '1df5be2f7e90ae36'))
</if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(goodsNm)">
,GOODS_NM = #{goodsNm}
</if>
<![CDATA[
,UPDT_DT = SYSDATE()
,UPDUSR = #{updusr}
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 매출증빙 현금영수증 api 응답 값 업데이트
<update id = "updateBOCashRciptRegistSelngPruf"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(cshRciptDelngNb)">
<![CDATA[
UPDATE GC_SALES
SET CSH_RCIPT_DELNG_NB = #{cshRciptDelngNb}
,CSH_RCIPT_APVLNB = #{cshRciptApvlnb}
,CSH_RCIPT_CONFM_DT = #{cshRciptConfmDt}
,ISSU_TRGET_DV_CD = #{issuTrgetDvCd}
,CRTNB = #{crtnb}
,ORDRR_NM = #{ordrrNm}
,ORDRR_EMAIL = HEX(AES_ENCRYPT(#{ordrrEmail}, '1df5be2f7e90ae36'))
,ISSU_STTUS_CD = #{issuSttusCd}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</when>
<otherwise>
<![CDATA[
UPDATE GC_SALES
SET ISSU_STTUS_CD = #{issuSttusCd}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</otherwise>
</choose>
</update>
-->
<!-- 매출증빙 현금영수증 api 응답 값 업데이트 -->
<update id = "updateBOCashRciptRegistSelngPruf"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
UPDATE GC_SALES
SET CSH_RCIPT_DELNG_NB = #{cshRciptDelngNb}
,CSH_RCIPT_APVLNB = #{cshRciptApvlnb}
,CSH_RCIPT_CONFM_DT = #{cshRciptConfmDt}
,ISSU_TRGET_DV_CD = #{issuTrgetDvCd}
,CRTNB = #{crtnb}
,ORDRR_NM = #{ordrrNm}
,ORDRR_EMAIL = HEX(AES_ENCRYPT(#{ordrrEmail}, '1df5be2f7e90ae36'))
,GOODS_NM = #{goodsNm}
,ISSU_STTUS_CD = #{issuSttusCd}
,UPDT_DT = SYSDATE()
,ISSU_DT = SYSDATE()
,UPDUSR = #{updusr}
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 매출증빙로그 추가 -->
<update id = "insertBOSelngPrufLogRegist"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
INSERT INTO GC_SALES_LOG (
SELNG_PRUF_LOG_INNB,
SELNG_PRUF_INNB,
REGIST_DT,
LOG_MSG
)
SELECT
COALESCE(MAX(SELNG_PRUF_LOG_INNB), 0) + 1,
#{selngPrufInnb},
SYSDATE(),
#{logMsg}
FROM GC_SALES_LOG
]]>
</update>
<!-- 엑셀다운로드(전체) -->
<select id = "selectBOSopmalExcelAllList"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
SELECT FO.ORDR_INNB
,DATE_FORMAT(FO.ORDR_RCEPT_DT, '%Y-%m-%d %H:%i:%s') AS ORDR_RCEPT_DT
,FO.ORDRR_NM
,FM.MBR_ID
,FOS.SETLE_TY_CD
,FN_GET_COMMCODE_NAME('SETLE_MTH',FOS.SETLE_TY_CD) AS SETLE_TY_CD_NM
,FOS.SETLE_AMT
,FO.ORDR_STTUS_CD AS ORDR_STTUS_CD
,FN_GET_COMMCODE_NAME('ORDR_STTUS',FO.ORDR_STTUS_CD) AS ORDR_STTUS_CD_NM
,DATE_FORMAT(FS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT
,FS.REQST_DV_CD AS REQST_DV_CD
,FN_GET_COMMCODE_NAME('REQST_DV', FS.REQST_DV_CD) AS REQST_DV_CD_NM
,FS.SPLPRIC
,FS.VAT_AMT
,FS.AMT
,FS.CANCL_AMT
,DATE_FORMAT(FS.UPDT_DT, '%Y-%m-%d %H:%i:%s') AS UPDT_DT
,FS.ISSU_STTUS_CD AS ISSU_STTUS_CD
,FN_GET_COMMCODE_NAME('ISSU_STTUS', FS.ISSU_STTUS_CD) AS ISSU_STTUS_CD_NM
,FS.MNGR_MEMO_CN
,FO.SOPMAL_CD
,GROUP_CONCAT(FOR1.ORDER_REFUND_INNB) AS ORDER_REFUND_INNB
,FS.SELNG_PRUF_INNB
,FS.ORDR_SETLE_INNB
,FS.CSH_RCIPT_DELNG_NB
,FS.CRTNB
,FOS.PG_CMPNY_NM
,FOS.PG_INNB
<include refid = "selectBOSelngPrufListInqireFrom"/>
<include refid = "selectBOSelngPrufListInqireWhere"/>
<include refid = "selectBOSelngPrufListInqireGroupBy"/>
</select>
<!-- 엑셀다운로드(선택) -->
<select id = "selectBOSopmalExcelList"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="dataMap">
SELECT FO.ORDR_INNB
,DATE_FORMAT(FO.ORDR_RCEPT_DT, '%Y-%m-%d %H:%i:%s') AS ORDR_RCEPT_DT
,FO.ORDRR_NM
,FM.MBR_ID
,FOS.SETLE_TY_CD
,FN_GET_COMMCODE_NAME('SETLE_MTH',FOS.SETLE_TY_CD) AS SETLE_TY_CD_NM
,FOS.SETLE_AMT
,FO.ORDR_STTUS_CD AS ORDR_STTUS_CD
,FN_GET_COMMCODE_NAME('ORDR_STTUS',FO.ORDR_STTUS_CD) AS ORDR_STTUS_CD_NM
,DATE_FORMAT(FS.REGIST_DT, '%Y-%m-%d %H:%i:%s') AS REGIST_DT
,FS.REQST_DV_CD AS REQST_DV_CD
,FN_GET_COMMCODE_NAME('REQST_DV', FS.REQST_DV_CD) AS REQST_DV_CD_NM
,FS.SPLPRIC
,FS.VAT_AMT
,FS.AMT
,FS.CANCL_AMT
,DATE_FORMAT(FS.UPDT_DT, '%Y-%m-%d %H:%i:%s') AS UPDT_DT
,FS.ISSU_STTUS_CD AS ISSU_STTUS_CD
,FN_GET_COMMCODE_NAME('ISSU_STTUS', FS.ISSU_STTUS_CD) AS ISSU_STTUS_CD_NM
,FS.MNGR_MEMO_CN
,FO.SOPMAL_CD
,GROUP_CONCAT(FOR1.ORDER_REFUND_INNB) AS ORDER_REFUND_INNB
,FS.SELNG_PRUF_INNB
,FS.ORDR_SETLE_INNB
,FS.CSH_RCIPT_DELNG_NB
,FS.CRTNB
,FOS.PG_CMPNY_NM
,FOS.PG_INNB
<include refid = "selectBOSelngPrufListInqireFrom"/>
WHERE 1=1
<![CDATA[
AND FS.SELNG_PRUF_INNB IN
]]>
<foreach collection="selngPrufInnbArr" item="selngPrufInnbArr" open="(" close=")" separator=",">
<![CDATA[
#{selngPrufInnbArr}
]]>
</foreach>
<include refid = "selectBOSelngPrufListInqireGroupBy"/>
</select>
<!-- 쇼핑몰결제설정 테이블 조회 -->
<select id = "selectBOSopmalSetleSetup"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
SELECT
IF(PG_CMPNY_NM = 'kcp', 'kcp', 'toss') AS PG_CMPNY_NM,
CASE WHEN IFNULL(OS.SETLE_MID, '') <> '' THEN OS.SETLE_MID
WHEN OS.PG_CMPNY_NM = 'kcp' THEN PL.KCP_MID
ELSE PL.OLD_TOSS_MID
END AS MID
FROM GC_ORDER_SETLE OS
INNER JOIN GC_PAY_LINK PL
ON OS.SOPMAL_CD = PL.SOPMAL_CD
WHERE OS.SOPMAL_CD = #{sopmalCd}
AND OS.ORDR_INNB = #{ordrInnb}
ORDER BY PL.SETLE_SETUP_INNB
LIMIT 1
]]>
</select>
<!-- 매출증빙 테이블 현금영수증 취소 조회 -->
<select id = "selectBOCshRciptCancel"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
SELECT
SELNG_PRUF_INNB,
ORDR_SETLE_INNB,
ORDR_INNB,
SOPMAL_CD,
ROUND(AMT) AMT,
ROUND(SPLPRIC) SPLPRIC,
ROUND(VAT_AMT) VAT_AMT,
GOODS_NM,
REQST_DV_CD,
ISSU_TRGET_DV_CD,
CRTNB,
CSH_RCIPT_DELNG_NB,
CSH_RCIPT_APVLNB,
CSH_RCIPT_CONFM_DT,
ORDRR_NM,
CAST(AES_DECRYPT(UNHEX(ORDRR_EMAIL) , '1df5be2f7e90ae36') AS CHAR(50)) AS ORDRR_EMAIL,
ISSU_STTUS_CD,
UPDUSR_DV_CD,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT,
ISSU_DT,
MNGR_MEMO_CN,
CANCL_AMT,
CANCL_SPLPRIC,
CANCL_VAT_AMT
FROM GC_SALES
WHERE 1=1
AND REQST_DV_CD = '02'
AND ORDR_SETLE_INNB = #{ordrSetleInnb}
AND SOPMAL_CD = #{sopmalCd}
AND ISSU_STTUS_CD != '03'
]]>
</select>
<!-- 매출증빙 현금영수증 취소 update -->
<update id = "updateBOCshRciptCancel"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
UPDATE GC_SALES
SET CANCL_AMT = #{canclAmt}
,CANCL_SPLPRIC = #{canclSplpric}
,CANCL_VAT_AMT = #{canclVatAmt}
,ISSU_STTUS_CD = #{issuSttusCd}
,UPDT_DT = SYSDATE()
,UPDUSR = #{updusr}
,UPDUSR_DV_CD = #{updusrDvCd}
WHERE 1=1
AND SELNG_PRUF_INNB = #{selngPrufInnb}
AND SOPMAL_CD = #{sopmalCd}
]]>
</update>
<!-- 매출증빙 테이블 추가 -->
<insert id = "insertBOSelngPrufRegist"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
keyProperty="selngPrufInnb"
useGeneratedKeys="true">
<![CDATA[
INSERT INTO GC_SALES (
ORDR_SETLE_INNB,
ORDR_INNB,
SOPMAL_CD,
AMT,
SPLPRIC,
VAT_AMT,
GOODS_NM,
REQST_DV_CD,
ISSU_TRGET_DV_CD,
CRTNB,
CSH_RCIPT_DELNG_NB,
CSH_RCIPT_APVLNB,
CSH_RCIPT_CONFM_DT,
ORDRR_NM,
ORDRR_EMAIL,
ISSU_STTUS_CD,
UPDUSR_DV_CD,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT,
ISSU_DT,
MNGR_MEMO_CN,
CANCL_AMT,
CANCL_SPLPRIC,
CANCL_VAT_AMT
)
SELECT
#{ordrSetleInnb},
#{ordrInnb},
#{sopmalCd},
#{amt},
#{splpric},
#{vatAmt},
#{goodsNm},
#{reqstDvCd},
#{issuTrgetDvCd},
#{crtnb},
#{cshRciptDelngNb},
#{cshRciptApvlnb},
#{cshRciptConfmDt},
#{ordrrNm},
HEX(AES_ENCRYPT(#{ordrrEmail}, '1df5be2f7e90ae36')),
#{issuSttusCd},
#{updusrDvCd},
#{regusr},
SYSDATE(),
#{updusr},
SYSDATE(),
#{issuDt},
#{mngrMemoCn},
#{canclAmt},
#{canclSplpric},
#{canclVatAmt}
FROM GC_SALES
]]>
</insert>
<!-- 매출증빙 테이블 주문번호로 주문결제 번호 찾기 -->
<select id = "selectBOCashRciptUpdt"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
SELECT
SELNG_PRUF_INNB,
ORDR_SETLE_INNB,
ORDR_INNB,
SOPMAL_CD,
ROUND(AMT) AMT,
ROUND(SPLPRIC) SPLPRIC,
ROUND(VAT_AMT) VAT_AMT,
GOODS_NM,
REQST_DV_CD,
ISSU_TRGET_DV_CD,
CRTNB,
CSH_RCIPT_DELNG_NB,
CSH_RCIPT_APVLNB,
CSH_RCIPT_CONFM_DT,
ORDRR_NM,
CAST(AES_DECRYPT(UNHEX(ORDRR_EMAIL) , '1df5be2f7e90ae36') AS CHAR(50)) AS ORDRR_EMAIL,
ISSU_STTUS_CD,
UPDUSR_DV_CD,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT,
ISSU_DT,
MNGR_MEMO_CN,
CANCL_AMT,
CANCL_SPLPRIC,
CANCL_VAT_AMT
FROM GC_SALES GS
WHERE 1=1
AND SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
AND REQST_DV_CD = '02'
]]>
</select>
<!-- 매출증빙 테이블 쇼핑몰코드, 주문번호로 현금영수증 대상조회 -->
<select id = "selectBOCshRciptRegist"
parameterType = "com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO"
resultType="com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO">
<![CDATA[
SELECT
FS.SELNG_PRUF_INNB,
FS.SOPMAL_CD,
FS.ORDR_INNB,
FS.ORDR_SETLE_INNB,
FS.ORDRR_NM,
CAST(AES_DECRYPT(UNHEX(FS.ORDRR_EMAIL) , '1df5be2f7e90ae36') AS CHAR(50)) AS ORDRR_EMAIL,
FS.CRTNB,
FS.GOODS_NM,
FS.ISSU_TRGET_DV_CD,
FS.ISSU_STTUS_CD,
ROUND(FS.AMT) AS AMT,
ROUND(FS.SPLPRIC) AS SPLPRIC,
ROUND(FS.VAT_AMT) AS VAT_AMT
FROM GC_SALES FS
INNER JOIN GC_ORDER_SETLE FOS
ON FS.SOPMAL_CD = FOS.SOPMAL_CD
AND FS.ORDR_SETLE_INNB = FOS.ORDR_SETLE_INNB
INNER JOIN GC_ORDER FO
ON FOS.SOPMAL_CD = FO.SOPMAL_CD
AND FOS.ORDR_INNB = FO.ORDR_INNB
WHERE 1=1
AND FS.SOPMAL_CD = #{sopmalCd}
AND FS.ORDR_INNB = #{ordrInnb}
AND FS.REQST_DV_CD = '02'
AND FS.ISSU_STTUS_CD = '01'
AND FOS.SETLE_TY_CD = #{setleTyCd}
AND FO.ORDR_STTUS_CD = '25'
]]>
</select>
</mapper>

View File

@@ -0,0 +1,470 @@
<?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.wb.domainserver.domain.gcone.ordr.subsvc.mapper.BOSubsvcOrdrMapper">
<!--구독서비스 상품준비 관리 목록-->
<select id="selectBOSubsvcOrderList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
, COUNT(*) OVER() AS TOT_CNT
, MAIN.*
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY GO.ORDR_INNB ORDER BY GO.ORDR_INNB ASC, GOIO.ORDR_STTUS_CD ASC, GOI.ORDR_GOODS_INNB ASC, GOIO.ORDR_GOODS_OPTN_INNB ASC) AS LINE
, GO.ORDR_INNB
, GOI.ORDR_GOODS_INNB
, GOIO.ORDR_GOODS_OPTN_INNB /*일괄처리 대상 주문상품옵션고유번호*/
, GOIO.ORDR_DLVY_INNB
, GS.SUBSVC_NM
, GS.SUBSVC_GNR
, GS.SUBSVC_GNR_NM
, GM.MBR_NM
, GM.MBR_ID
, GM.MBR_DV_CD
, GM.MBR_INNB
, fn_get_member_grad_name(GO.SOPMAL_CD, GM.MBR_DV_CD, GM.MBR_INNB) AS GRADE
, SUM(CASE WHEN GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' THEN 1 ELSE 0 END) OVER(PARTITION BY GO.ORDR_INNB)+1 AS CURT_PROCS_ODR
, SUM(CASE WHEN GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' THEN 1 ELSE 0 END) OVER(PARTITION BY GO.ORDR_INNB) AS MBR_LAST_PROCS_ODR /*회원별 최종차수 상품준비 ~ 배송완료*/
, MAX(GOIO.UPDT_DT) OVER(PARTITION BY GO.ORDR_INNB) AS LAST_PRCS_DT/*최종처리일*/
, IFNULL(GS.LAST_PROCS_ODR,0) AS LAST_PROCS_ODR /*최종차수*/
, GOIO.ORDR_STTUS_CD
FROM GC_ORDER GO
JOIN GC_SUBSVC GS ON GS.SOPMAL_CD = GO.SOPMAL_CD AND GS.SUBSVC_INNB = GO.SUBSVC_INNB
JOIN GC_MEMBER GM ON GM.MBR_DV_CD = GO.MBR_DV_CD AND GM.MBR_INNB = GO.MBR_INNB
JOIN GC_ORDER_ITEM GOI ON GO.SOPMAL_CD =GOI.SOPMAL_CD AND GO.ORDR_INNB = GOI.ORDR_INNB
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
WHERE GO.USE_AT = 'Y'
AND GO.SUBSVC_AT = 'Y'
AND GO.SOPMAL_CD = #{sopmalCd}
<if test='srchSelSubsvcNm != null and srchSelSubsvcNm != ""'>
AND GS.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
</if>
<if test='srchSelSubsvcGnr != null and srchSelSubsvcGnr != ""'>
AND GS.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
</if>
<if test='srchSubsvcNm != null and srchSubsvcNm != ""'>
AND GS.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
</if>
<if test='srchSubsvcGnrNm != null and srchSubsvcGnrNm != ""'>
AND GS.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
</if>
) MAIN
WHERE (@ROWNUM:=0)=0
AND MAIN.LINE = 1
AND MAIN.ORDR_STTUS_CD = '25'
<if test='srchCurMonExclude!= null and srchCurMonExclude == "Y"'>
<![CDATA[
AND MAIN.LAST_PRCS_DT < CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01') /*당월 처리자 제외*/
]]>
</if>
<choose>
<when test='sortDv == "subsvcGnrAsc"'>
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC /*구독서비스명+기수*/
</when>
<when test='sortDv == "subsvcGnrDesc"'>
ORDER BY SUBSVC_NM DESC, SUBSVC_GNR DESC /*구독서비스명+기수*/
</when>
<when test='sortDv == "mbrAsc"'>
ORDER BY MBR_NM ASC, MBR_ID ASC /*주문자순*/
</when>
<when test='sortDv == "mbrDesc"'>
ORDER BY MBR_NM DESC, MBR_ID DESC /*주문자순*/
</when>
<when test='sortDv == "ordrAsc"'>
ORDER BY ORDR_INNB ASC /*주문번호순*/
</when>
<when test='sortDv == "ordrDesc"'>
ORDER BY ORDR_INNB DESC /*주문번호순*/
</when>
<when test='sortDv == "lastPrcsDtAsc"'>
ORDER BY LAST_PRCS_DT ASC /*최종처리일순*/
</when>
<when test='sortDv == "lastPrcsDtDesc"'>
ORDER BY LAST_PRCS_DT ASC /*최종처리일순*/
</when>
<otherwise>
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC
</otherwise>
</choose>
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!--구독서비스 상품준비 관리 목록 배송내역 팝업 배송내역목록-->
<select id="selectBOSubsvcOrderDlvyList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
, GOIO.ORDR_GOODS_OPTN_INNB
, GO.ORDR_INNB
, GM.MBR_NM
, GM.MBR_ID
, GM.MBR_DV_CD
, GM.MBR_INNB
, fn_get_member_grad_name(GO.SOPMAL_CD, GM.MBR_DV_CD, GM.MBR_INNB) AS GRADE
, IFNULL(GOIO.UPDT_DT, GOIO.REGIST_DT) AS PROCS_DT /*발생일자*/
, GOI.GOODS_IMG_COURS
, GOI.GOODS_NM
, GOIO.OPTN_NM_1
, GOIO.OPTN_VAL_1
, GOIO.CNSMRPRIC /*정가*/
, GOIO.SLEPRIC /*판매가*/
, fn_get_commcode_name('ORDR_STTUS', GOIO.ORDR_STTUS_CD) AS ORDR_STTUS
FROM GC_ORDER GO
JOIN GC_MEMBER GM ON GM.MBR_DV_CD = GO.MBR_DV_CD AND GM.MBR_INNB = GO.MBR_INNB
JOIN GC_ORDER_ITEM GOI ON GOI.SOPMAL_CD = GO.SOPMAL_CD AND GOI.ORDR_INNB = GO.ORDR_INNB
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
WHERE (@ROWNUM:=0)=0
AND GOI.ORDR_INNB = #{ordrInnb}
AND GOI.SOPMAL_CD = #{sopmalCd}
ORDER BY GOIO.ORDR_GOODS_OPTN_INNB ASC
</select>
<!--구독서비스 상품준비 관리 상품매칭 - 1. GC_ORDER update-->
<update id="updateBOSubsvcGoodsMappgOrdr" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
<foreach collection="arrOrdrInnb" item="ordrInnb" separator=";">
UPDATE GC_ORDER
SET ORDR_STTUS_CD = (CASE WHEN ORDR_STTUS_CD = '25' THEN '35' ELSE ORDR_STTUS_CD END)
, UPDT_DT = NOW()
WHERE SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB = #{ordrInnb}
</foreach>
</update>
<!--구독서비스 상품준비 관리 상품매칭 - 2. GC_ORDER_ITEM update-->
<update id="updateBOSubsvcGoodsMappgOrdrItem" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
<foreach collection="arrOrdrGoodsInnb" item="ordrGoodsInnb" separator=";">
UPDATE GC_ORDER_ITEM GOI, (SELECT GG.GOODS_INNB, GG.GOODS_NM, GGI.IMG
FROM GC_GOODS GG
JOIN GC_GOODS_IMAGE GGI ON GGI.SOPMAL_CD = GG.SOPMAL_CD AND GGI.GOODS_INNB = GG.GOODS_INNB AND GGI.CUT_NB = 1 AND GGI.IMG_KND = '02'
WHERE GG.GOODS_INNB = #{goodsInnb}
LIMIT 1) G
SET GOI.GOODS_INNB = G.GOODS_INNB
, GOI.GOODS_NM = G.GOODS_NM
, GOI.GOODS_IMG_COURS = G.IMG
WHERE SOPMAL_CD = #{sopmalCd}
AND GOI.ORDR_GOODS_INNB = #{ordrGoodsInnb}
</foreach>
</update>
<!--구독서비스 상품준비 관리 상품매칭 - 3. GC_ORDER_ITEM_OPTION update-->
<update id="updateBOSubsvcGoodsMappgOrdrItemOptn" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
<foreach collection="arrOrdrGoodsOptnInnb" item="ordrGoodsOptnInnb" separator=";">
UPDATE GC_ORDER_ITEM_OPTION GOIO, (SELECT GOODS_OPTN_INNB
, OPTN_TY
, OPTN_NM_1
, OPTN_NM_2
, OPTN_NM_3
, OPTN_NM_4
, OPTN_VAL_1
, OPTN_VAL_2
, OPTN_VAL_3
, OPTN_VAL_4
, OPTN_CD_1
, OPTN_CD_2
, OPTN_CD_3
, OPTN_CD_4
, OPTN_INFO
, CNSMRPRIC
, SLEPRIC
, GG.TAX_AT
FROM GC_GOODS_OPTION GGO
JOIN GC_GOODS GG ON GG.SOPMAL_CD = GGO.SOPMAL_CD AND GG.GOODS_INNB = GGO.GOODS_INNB
WHERE GGO.GOODS_OPTN_INNB = #{goodsOptnInnb}
AND GGO.OPTN_TY = #{optnTy}
LIMIT 1) G
SET GOIO.GOODS_OPTN_INNB = G.GOODS_OPTN_INNB
, GOIO.OPTN_TY = G.OPTN_TY
, GOIO.OPTN_NM_1 = G.OPTN_NM_1
, GOIO.OPTN_NM_2 = G.OPTN_NM_2
, GOIO.OPTN_NM_3 = G.OPTN_NM_3
, GOIO.OPTN_NM_4 = G.OPTN_NM_4
, GOIO.OPTN_VAL_1 = G.OPTN_VAL_1
, GOIO.OPTN_VAL_2 = G.OPTN_VAL_2
, GOIO.OPTN_VAL_3 = G.OPTN_VAL_3
, GOIO.OPTN_VAL_4 = G.OPTN_VAL_4
, GOIO.OPTN_CD_1 = G.OPTN_CD_1
, GOIO.OPTN_CD_2 = G.OPTN_CD_2
, GOIO.OPTN_CD_3 = G.OPTN_CD_3
, GOIO.OPTN_CD_4 = G.OPTN_CD_4
, GOIO.OPTN_INFO = G.OPTN_INFO
, GOIO.CNSMRPRIC = G.CNSMRPRIC
, GOIO.SLEPRIC = G.SLEPRIC
, GOIO.TAX_AT = G.TAX_AT
, GOIO.STEP85 = 0
, GOIO.STEP35 = GOIO.ORDR_QY
, GOIO.STEP45 = 0
, GOIO.STEP55 = 0
, GOIO.STEP65 = 0
, GOIO.STEP75 = 0
, GOIO.ORDR_STTUS_CD = '35'
, GOIO.UPDT_DT = NOW()
WHERE GOIO.SOPMAL_CD = #{sopmalCd}
AND GOIO.ORDR_GOODS_OPTN_INNB = #{ordrGoodsOptnInnb}
</foreach>
</update>
<!--구독서비스 상품준비 관리 상품매칭 - 4. GC_ORDER_SHIPPING update-->
<update id="updateBOSubsvcGoodsMappgShipping" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
<foreach collection="arrOrdrDlvyInnb" item="ordrDlvyInnb" separator=";">
UPDATE GC_ORDER_SHIPPING
SET ORDR_STTUS_CD = '35'
, UPDT_DT = NOW()
WHERE SOPMAL_CD = #{sopmalCd}
AND ORDR_DLVY_INNB = #{ordrDlvyInnb}
</foreach>
</update>
<!--구독서비스 상품준비 관리 상품매칭 - 5. GC_SUBSVC update-->
<update id="updateBOSubsvcGoodsMappgSubsvc" parameterType="com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO">
UPDATE GC_SUBSVC GS, ( SELECT SOPMAL_CD, SUBSVC_INNB, MAX(LAST_PROCS_ODR) LAST_PROCS_ODR
FROM (
SELECT GOIO.SOPMAL_CD, GO.SUBSVC_INNB, SUM(CASE WHEN GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' THEN 1 ELSE 0 END) OVER(PARTITION BY GO.SOPMAL_CD, GO.ORDR_INNB) AS LAST_PROCS_ODR
FROM GC_ORDER GO
JOIN GC_ORDER_ITEM GOI ON GOI.SOPMAL_CD = GO.SOPMAL_CD AND GOI.ORDR_INNB = GO.ORDR_INNB
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOIO.SOPMAL_CD = GOI.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB
WHERE GO.SUBSVC_AT = 'Y'
AND GO.SOPMAL_CD = #{sopmalCd}
AND GO.SUBSVC_INNB IN (SELECT DISTINCT SUBSVC_INNB
FROM GC_ORDER
WHERE SOPMAL_CD = #{sopmalCd}
AND ORDR_INNB IN
<foreach collection="arrOrdrInnb" item="ordrInnb" open="(" close=")" separator=",">
#{ordrInnb}
</foreach>
)
) M
GROUP BY SOPMAL_CD, SUBSVC_INNB
) MAIN
SET GS.LAST_PROCS_ODR = MAIN.LAST_PROCS_ODR
, UPDT_DT = NOW()
WHERE GS.SOPMAL_CD = MAIN.SOPMAL_CD
AND GS.SUBSVC_INNB = MAIN.SUBSVC_INNB
</update>
<!--구독서비스 상품변경 관리 목록-->
<select id="selectBOSubsvcOrderMappedList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
, COUNT(*) OVER() AS TOT_CNT
, MAIN.*
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY GO.ORDR_INNB ORDER BY GOI.ORDR_GOODS_INNB ASC, GOIO.ORDR_GOODS_OPTN_INNB ASC) AS CURT_PROCS_ODR /*차수*/
, GO.ORDR_INNB /*주문번호*/
, GOI.ORDR_GOODS_INNB
, GOIO.ORDR_GOODS_OPTN_INNB /*일괄처리 대상 주문상품옵션고유번호*/
, GOIO.ORDR_DLVY_INNB
, GS.SUBSVC_NM
, GS.SUBSVC_GNR
, GS.SUBSVC_GNR_NM
, GM.MBR_NM /*회원명*/
, GM.MBR_ID /*회원ID*/
, GM.MBR_DV_CD /*회원구분코드*/
, GM.MBR_INNB /*회원고유번호*/
, fn_get_member_grad_name(GO.SOPMAL_CD, GM.MBR_DV_CD, GM.MBR_INNB) AS GRADE /*회원등급*/
, MAX(GOIO.UPDT_DT) OVER(PARTITION BY GO.ORDR_INNB) AS LAST_PRCS_DT/*최종처리일*/
, GOIO.ORDR_STTUS_CD
, GOI.GOODS_IMG_COURS /*상품이미지*/
, GOI.GOODS_NM /*상품명*/
, GOIO.OPTN_NM_1 /*상품옵션명*/
, GOIO.OPTN_VAL_1 /*상품옵션값*/
, GOIO.UPDT_DT /*처리일자*/
FROM GC_ORDER GO
JOIN GC_SUBSVC GS ON GS.SOPMAL_CD = GO.SOPMAL_CD AND GS.SUBSVC_INNB = GO.SUBSVC_INNB
JOIN GC_MEMBER GM ON GM.MBR_DV_CD = GO.MBR_DV_CD AND GM.MBR_INNB = GO.MBR_INNB
JOIN GC_ORDER_ITEM GOI ON GO.SOPMAL_CD =GOI.SOPMAL_CD AND GO.ORDR_INNB = GOI.ORDR_INNB
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
WHERE GO.USE_AT = 'Y'
AND GO.SUBSVC_AT = 'Y'
AND GO.SOPMAL_CD = #{sopmalCd}
<if test='srchSelSubsvcNm != null and srchSelSubsvcNm != ""'>
AND GS.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
</if>
<if test='srchSelSubsvcGnr != null and srchSelSubsvcGnr != ""'>
AND GS.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
</if>
<if test='srchSubsvcNm != null and srchSubsvcNm != ""'>
AND GS.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
</if>
<if test='srchSubsvcGnrNm != null and srchSubsvcGnrNm != ""'>
AND GS.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
</if>
<if test='srchOrdrInnb != null and srchOrdrInnb != ""'>
AND GO.ORDR_INNB = #{srchOrdrInnb} /*주문번호*/
</if>
<if test='srchMbrNm != null and srchMbrNm != ""'>
AND GM.MBR_NM LIKE CONCAT('%',#{srchMbrNm},'%') /*주문자명*/
</if>
<if test='srchMbrId != null and srchMbrId != ""'>
AND GM.MBR_ID LIKE CONCAT('%',#{srchMbrId},'%') /*주문자id*/
</if>
) MAIN
WHERE (@ROWNUM:=0)=0
AND MAIN.ORDR_STTUS_CD = '35'
<if test='srchCurMonExclude!= null and srchCurMonExclude == "Y"'>
<![CDATA[
AND MAIN.LAST_PRCS_DT < CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01') /*당월 처리자 제외*/
]]>
</if>
<choose>
<when test='sortDv == "subsvcGnrAsc"'>
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC /*구독서비스명+기수*/
</when>
<when test='sortDv == "subsvcGnrDesc"'>
ORDER BY SUBSVC_NM DESC, SUBSVC_GNR DESC /*구독서비스명+기수*/
</when>
<when test='sortDv == "mbrAsc"'>
ORDER BY MBR_NM ASC, MBR_ID ASC /*주문자순*/
</when>
<when test='sortDv == "mbrDesc"'>
ORDER BY MBR_NM DESC, MBR_ID DESC /*주문자순*/
</when>
<when test='sortDv == "ordrAsc"'>
ORDER BY ORDR_INNB ASC /*주문번호순*/
</when>
<when test='sortDv == "ordrDesc"'>
ORDER BY ORDR_INNB DESC /*주문번호순*/
</when>
<when test='sortDv == "lastPrcsDtAsc"'>
ORDER BY UPDT_DT ASC /*처리일순*/
</when>
<when test='sortDv == "lastPrcsDtDesc"'>
ORDER BY UPDT_DT ASC /*처리일순*/
</when>
<otherwise>
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC
</otherwise>
</choose>
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!--구독서비스 구독자조회 목록-->
<select id="selectBOSubsvcOrderMbrList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
, COUNT(*) OVER() AS TOT_CNT
, MAIN.*
FROM (
WITH ORDR AS (SELECT COUNT(DISTINCT GO.ORDR_INNB) AS SUBSCRIBER_CNT
, MAX(GOIO.UPDT_DT) AS LAST_PRCS_DT
, GO.SOPMAL_CD
, GO.SUBSVC_INNB
FROM GC_ORDER GO
JOIN GC_ORDER_ITEM GOI ON GOI.SOPMAL_CD = GO.SOPMAL_CD AND GOI.ORDR_INNB = GO.ORDR_INNB
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOIO.SOPMAL_CD = GOI.SOPMAL_CD AND GOIO.ORDR_GOODS_INNB AND GOI.ORDR_GOODS_INNB
WHERE GO.SUBSVC_AT = 'Y'
AND GO.USE_AT = 'Y'
GROUP BY GO.SOPMAL_CD, GO.SUBSVC_INNB)
SELECT GS.SUBSVC_INNB
, GS.SUBSVC_NM /*구독서비스명*/
, GS.SUBSVC_GNR /*구독서비스명 기수*/
, GS.SUBSVC_GNR_NM /*구독서비스명 기수명*/
, GS.SUBSVC_CT + (GS.TME_DLVY_AMT * GS.DLVY_CNT) as SELPRIC /*실판매가=구독료+(1회배송비X배송횟수)*/
, GS.DLVY_CNT /*배송횟수*/
, IFNULL(GS.LAST_PROCS_ODR, 0) AS LAST_PROCS_ODR /*최종차수*/
, IFNULL(ORDR.SUBSCRIBER_CNT, 0) AS SUBSCRIBER_CNT /*구독자수*/
, ORDR.LAST_PRCS_DT
FROM GC_SUBSVC GS
LEFT JOIN ORDR ON ORDR.SOPMAL_CD = GS.SOPMAL_CD AND ORDR.SUBSVC_INNB = GS.SUBSVC_INNB
WHERE GS.USE_AT = 'Y'
AND GS.SOPMAL_CD = #{sopmalCd}
<if test='srchSelSubsvcNm != null and srchSelSubsvcNm != ""'>
AND GS.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
</if>
<if test='srchSelSubsvcGnr != null and srchSelSubsvcGnr != ""'>
AND GS.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
</if>
<if test='srchSubsvcNm != null and srchSubsvcNm != ""'>
AND GS.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
</if>
<if test='srchSubsvcGnrNm != null and srchSubsvcGnrNm != ""'>
AND GS.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
</if>
<if test='srchSubEndAt == "Y"'>
<![CDATA[
AND (GS.LAST_PROCS_ODR IS NULL OR GS.LAST_PROCS_ODR < DLVY_CNT) /*구독종료여부*/
]]>
</if>
<choose>
<when test='sortDv == "subsvcGnrAsc"'>
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC /*구독서비스명+기수*/
</when>
<when test='sortDv == "subsvcGnrDesc"'>
ORDER BY SUBSVC_NM DESC, SUBSVC_GNR DESC /*구독서비스명+기수*/
</when>
<when test='sortDv == "subscriberAsc"'>
ORDER BY SUBSCRIBER_CNT ASC /*구독자수 정렬*/
</when>
<when test='sortDv == "subscriberDesc"'>
ORDER BY SUBSCRIBER_CNT DESC /*구독자수 정렬*/
</when>
<otherwise>
ORDER BY SUBSVC_NM ASC, SUBSVC_GNR ASC
</otherwise>
</choose>
) MAIN
WHERE (@ROWNUM:=0)=0
) PV
WHERE 1=1
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!--구독서비스 구독자조회 - 구독자목록 팝업 - 구독서비스 정보-->
<select id="selectBOSubsvcInfo" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
SELECT GS.SUBSVC_NM, GS.SUBSVC_GNR, GS.SUBSVC_GNR_NM
FROM GC_SUBSVC GS
WHERE GS.SUBSVC_INNB = #{subsvcInnb}
</select>
<!--구독서비스 구독자조회 - 구독자목록 팝업 - 구독자목록 조회-->
<select id="selectBOSubsvcOrderMbrInfoList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
, COUNT(*) OVER() AS TOT_CNT
, MAIN.*
FROM (
SELECT GO.ORDR_INNB
, GM.MBR_NM
, GM.MBR_ID
, GM.MBR_DV_CD
, fn_get_member_grad_name(GO.SOPMAL_CD, GM.MBR_DV_CD, GM.MBR_INNB) AS GRADE
, SUM(CASE WHEN GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' THEN 1 ELSE 0 END) AS LAST_PROCS_ODR/*최종차수 상품준비 ~ 배송완료*/
, MAX(GOIO.UPDT_DT) AS LAST_PRCS_DT/*최종처리일*/
FROM GC_ORDER GO
JOIN GC_MEMBER GM ON GM.MBR_DV_CD = GO.MBR_DV_CD AND GM.MBR_INNB = GO.MBR_INNB
JOIN GC_ORDER_ITEM GOI ON GO.SOPMAL_CD =GOI.SOPMAL_CD AND GO.ORDR_INNB = GOI.ORDR_INNB
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
WHERE GO.USE_AT = 'Y'
AND GO.SUBSVC_AT = 'Y'
AND GO.SUBSVC_INNB = #{subsvcInnb} /*구독서비스 고유번호*/
GROUP BY GO.SOPMAL_CD, GO.ORDR_INNB, GM.MBR_DV_CD, GM.MBR_NM, GM.MBR_ID
ORDER BY GO.ORDR_INNB ASC
)MAIN
WHERE (@ROWNUM:=0)=0
</select>
<!--구독서비스 구독자조회 - 배송상품 목록팝업 - 배송상품목록 조회-->
<select id="selectBOSubsvcOrderGoodsInfoList" parameterType="com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO" resultType="dataMap">
SELECT CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
, COUNT(*) OVER() AS TOT_CNT
, MAIN.*
FROM (
SELECT GOIO.GOODS_OPTN_INNB
, GOI.GOODS_IMG_COURS
, GOI.GOODS_NM
, GOIO.OPTN_NM_1
, GOIO.OPTN_VAL_1
, COUNT(DISTINCT GO.ORDR_INNB) AS APPLY_CNT/*적용횟수*/
FROM GC_ORDER GO
JOIN GC_ORDER_ITEM GOI ON GO.SOPMAL_CD =GOI.SOPMAL_CD AND GO.ORDR_INNB = GOI.ORDR_INNB
JOIN GC_ORDER_ITEM_OPTION GOIO ON GOI.SOPMAL_CD = GOIO.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB AND GOIO.OPTN_TY = '01'
WHERE GO.USE_AT = 'Y'
AND GO.SUBSVC_AT = 'Y'
AND GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' /*상품준비 ~ 배송완료*/
AND GO.SUBSVC_INNB = #{subsvcInnb} /*구독서비스 고유번호*/
GROUP BY GOIO.GOODS_OPTN_INNB, GOODS_IMG_COURS, GOI.GOODS_NM, GOIO.OPTN_NM_1, GOIO.OPTN_VAL_1
ORDER BY GOI.GOODS_NM, GOIO.OPTN_NM_1, GOIO.OPTN_VAL_1
) MAIN
WHERE (@ROWNUM:=0)=0
</select>
</mapper>

View File

@@ -0,0 +1,90 @@
<?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.wb.domainserver.domain.gcone.pos.easywell.mapper.EasyWellMapper">
<!--이지웰 로그 등록-->
<insert id="insertEasyWellLog" useGeneratedKeys="true" keyColumn="EZWELL_LOG_INNB" keyProperty="ezwellLogInnb" parameterType="map">
INSERT INTO GC_EZWELL_LOG
( EW_PROCS_STTUS,
ORDR_INNB,
ORDR_CD,
STR_INNB,
POS_HDQRTRS_CD,
STR_CD,
POSNB,
RCIPT_NB,
EW_JOB_DV,
EW_DELNG_NB,
EW_BRCD_NB,
EW_ORDR_INNB,
EW_USE_CANCL_AMT,
EW_BLCE_NB,
EW_CONFM_NB,
EW_MBR_NB,
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(org_approv)">
DELNG_CONFM_NB,
</if>
EW_RES_CD,
EW_RES_MSG,
REQ_DT
)
VALUES(
'01',
0,
#{order_code},
0,
#{pgubun},
#{pcode},
#{poscode},
#{pnumb},
#{ew_act_cd},
'',
#{ew_code},
#{ew_order_code},
0,
0,
'',
'',
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(org_approv)">
#{org_approv},
</if>
'',
'',
SYSDATE()
)
</insert>
<!--이지웰 로그 수정-->
<update id="updateEasyWellLog" parameterType="map">
UPDATE GC_EZWELL_LOG
SET EW_PROCS_STTUS= '02',
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ew_remain)">
EW_BLCE_NB = #{ew_remain},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ew_price)">
EW_USE_CANCL_AMT = #{ew_price},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ew_approv)">
EW_CONFM_NB = #{ew_approv},
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(ew_member)">
EW_MBR_NB = #{ew_member},
</if>
EW_RES_CD = #{logcode},
EW_RES_MSG = #{msg},
RES_DT = SYSDATE()
WHERE 1=1
AND EZWELL_LOG_INNB = #{ezwellLogInnb}
</update>
<!--이지웰 로그 조회-->
<select id="selectEasyWellLog" parameterType="map" resultType="dataMap">
SELECT EW_USE_CANCL_AMT
FROM GC_EZWELL_LOG
WHERE 1=1
AND EW_BRCD_NB = #{ew_code}
AND EW_CONFM_NB= #{org_approv}
AND ORDR_CD= #{org_order}
AND EW_PROCS_STTUS = '02'
</select>
</mapper>

View File

@@ -0,0 +1,361 @@
<?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.wb.domainserver.domain.gcone.pos.pos.mapper.PosCouponMapper">
<!-- 포스 쿠폰 조회 -->
<select id="selectPosCouponInqire">
<![CDATA[
SELECT
PC.POS_HDQRTRS_CD
,PC.POS_COUPON_REGIST_YEAR
,PC.POS_COUPON_CD
,PC.COUPON_INNB
,PC.SOPMAL_CD
,#{AUTH_NO} AS OFLNE_COUPON_CRTNB
FROM GC_COUPON_POS PC
WHERE 1 = 1
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pgubun)">
AND PC.POS_HDQRTRS_CD = #{pgubun}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(COUPON_YEAR)">
AND PC.POS_COUPON_REGIST_YEAR = #{COUPON_YEAR}
</if>
<![CDATA[
AND PC.POS_COUPON_CD = #{COUPON_CODE}
AND SUBSTRING(PC.COUPON_INNB, -3) = SUBSTRING(#{AUTH_NO}, 3, 3)
AND PC.SOPMAL_CD = (
SELECT
SH.SOPMAL_CD
FROM GC_SHOP SH
WHERE SH.SOPMAL_NB = SUBSTRING(#{AUTH_NO}, 1, 2)
)
]]>
</select>
<!-- 유효 쿠폰 정보 조회 -->
<select id="selectPosOflneCouponInqire">
<![CDATA[
(
SELECT *
FROM (
SELECT
DW.SOPMAL_CD AS coupon_site
,DW.COUPON_INNB AS coupon_seq
,DW.COUPON_DC AS coupon_desc
,IFNULL(DW.VALIDPD_BGN_DT, C.VALIDPD_BGN_DT) AS issue_startdate
,IFNULL(DW.VALIDPD_END_DT, C.VALIDPD_END_DT) AS issue_enddate
,C.VALIDPD_KND_CD AS issue_priod_type
,C.VALIDPD_DE_CNT AS after_issue_day
,CASE
WHEN DW.VALIDPD_BGN_DT <= SYSDATE() THEN 'Y'
ELSE 'N'
END AS START_DATE
,CASE
WHEN DW.VALIDPD_END_DT >= SYSDATE() THEN 'Y'
ELSE 'N'
END AS END_DATE
,OFC.OFLNE_COUPON_INNB AS offline_seq
,OFC.REGIST_DT AS OFLNE_REGIST_DT
,OFC.OFLNE_COUPON_CRTNB AS offline_serialnumber
,SD.COUPON_SNDNG_INNB
,SD.COUPON_SNDNG_USE_AT AS issue_stop
,DW.DWLD_COUPON_INNB AS download_seq
,DW.MBR_DV_CD AS mbr_dv_cd
,DW.MBR_INNB AS member_seq
,DW.REGIST_DT AS DWLD_REGIST_DT
,DW.COUPON_STTUS_CD AS use_status
,DW.COUPON_USE_DT AS use_date
FROM GC_COUPON C
INNER JOIN GC_OFFLINE_COUPON OFC
ON OFC.OFLNE_COUPON_CRTNB = #{oflneCouponCrtnb}
AND C.SOPMAL_CD = OFC.SOPMAL_CD
AND C.COUPON_INNB = OFC.COUPON_INNB
INNER JOIN GC_DOWNLOAD DW
ON OFC.OFLNE_COUPON_INNB = DW.OFLNE_COUPON_INNB
AND OFC.SOPMAL_CD = DW.SOPMAL_CD
AND OFC.COUPON_INNB = DW.COUPON_INNB
AND DW.USE_AT = 'Y'
INNER JOIN GC_COUPON_SNDNG SD
ON DW.COUPON_SNDNG_INNB = SD.COUPON_SNDNG_INNB
WHERE C.USE_AT = 'Y'
AND C.SOPMAL_CD = #{sopmalCd}
AND C.COUPON_INNB = #{couponInnb}
LIMIT 1
) AS primary_result
)
UNION ALL
(
SELECT *
FROM (
SELECT
C.SOPMAL_CD AS coupon_site
,C.COUPON_INNB AS coupon_seq
,C.COUPON_DC AS coupon_desc
,C.VALIDPD_BGN_DT AS issue_startdate
,C.VALIDPD_END_DT AS issue_enddate
,C.VALIDPD_KND_CD AS issue_priod_type
,C.VALIDPD_DE_CNT AS after_issue_day
,CASE
WHEN C.VALIDPD_KND_CD = '01' AND C.VALIDPD_BGN_DT > SYSDATE() THEN 'N'
WHEN C.VALIDPD_KND_CD = '01' AND C.VALIDPD_BGN_DT < SYSDATE() THEN 'Y'
WHEN C.VALIDPD_KND_CD = '02' THEN 'Y'
END AS START_DATE
,CASE
WHEN C.VALIDPD_KND_CD = '01' AND C.VALIDPD_END_DT < SYSDATE() THEN 'N'
WHEN C.VALIDPD_KND_CD = '01' AND C.VALIDPD_END_DT > SYSDATE() THEN 'Y'
WHEN C.VALIDPD_KND_CD = '02' AND C.VALIDPD_DE_CNT > 0 THEN 'Y'
WHEN C.VALIDPD_KND_CD = '02' AND C.VALIDPD_DE_CNT <= 0 THEN 'N'
END AS END_DATE
,OFC.OFLNE_COUPON_INNB AS offline_seq
,OFC.REGIST_DT AS OFLNE_REGIST_DT
,OFC.OFLNE_COUPON_CRTNB AS offline_serialnumber
,SD.COUPON_SNDNG_INNB
,SD.COUPON_SNDNG_USE_AT AS issue_stop
,'0' AS download_seq
,'' AS mbr_dv_cd
,0 AS member_seq
,C.REGIST_DT AS DWLD_REGIST_DT
,'02' AS use_status
,'' AS use_date
FROM GC_COUPON C
INNER JOIN GC_OFFLINE_COUPON OFC
ON OFC.OFLNE_COUPON_CRTNB = #{oflneCouponCrtnb}
AND C.SOPMAL_CD = OFC.SOPMAL_CD
AND C.COUPON_INNB = OFC.COUPON_INNB
INNER JOIN GC_COUPON_SNDNG SD
ON OFC.COUPON_SNDNG_INNB = SD.COUPON_SNDNG_INNB
WHERE C.USE_AT = 'Y'
AND C.SOPMAL_CD = #{sopmalCd}
AND C.COUPON_INNB = #{couponInnb}
AND NOT EXISTS (
SELECT 1
FROM GC_COUPON C
INNER JOIN GC_OFFLINE_COUPON OFC
ON OFC.OFLNE_COUPON_CRTNB = #{oflneCouponCrtnb}
AND C.SOPMAL_CD = OFC.SOPMAL_CD
AND C.COUPON_INNB = OFC.COUPON_INNB
INNER JOIN GC_DOWNLOAD DW
ON OFC.OFLNE_COUPON_INNB = DW.OFLNE_COUPON_INNB
AND OFC.SOPMAL_CD = DW.SOPMAL_CD
AND OFC.COUPON_INNB = DW.COUPON_INNB
AND DW.USE_AT = 'Y'
INNER JOIN GC_COUPON_SNDNG SD
ON DW.COUPON_SNDNG_INNB = SD.COUPON_SNDNG_INNB
WHERE C.USE_AT = 'Y'
AND C.SOPMAL_CD = #{sopmalCd}
AND C.COUPON_INNB = #{couponInnb}
)
LIMIT 1
) AS fallback_result
)
]]>
</select>
<!-- 다운로드 쿠폰 사용처리 -->
<update id="updatePosDwldCouponSttusCdUpdt">
<![CDATA[
UPDATE GC_DOWNLOAD SET
USEPLC_DV_CD = '02'
,COUPON_STTUS_CD = '03'
,COUPON_USE_DT = SYSDATE()
,UPDUSR = #{useq}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND DWLD_COUPON_INNB = #{download_seq}
]]>
</update>
<!-- 오프라인 쿠폰 다운로드 insert -->
<insert id="insertPosDwldCouponRegist"
keyProperty="download_seq"
useGeneratedKeys="true">
<![CDATA[
INSERT INTO GC_DOWNLOAD (
OFLNE_COUPON_INNB
,COUPON_INNB
,COUPON_SNDNG_INNB
,SOPMAL_CD
,MBR_INNB
,MBR_DV_CD
,CUPNPK_INNB
,COUPON_SNDNG_TY_CD
,CUPNPK_NM
,CUPNPK_DC
,COUP_NM
,COUPON_DC
,USE_ENVRN_CD
,OTR_COUPON_SMTM_USE_AT
,DPLCT_DWLD_AT
,DPLCT_DSCNT_AT
,USE_POSBL_AMT
,GOODS_APPLC_DV_CD
,VALIDPD_BGN_DT
,VALIDPD_END_DT
,OFLNE_COUPON_CRTNB
,USEPLC_DV_CD
,COUPON_STTUS_CD
,COUPON_USE_DT
,RECOVRY_ORGINL_COUPON
,MBR_NM
,MBTLNB
,BNEF_DV_CD
,ADIT_DSCNT_CD
,ADIT_DSCNT_AMT
,DSCNT_MXMM_AMT
,DLVY_AMT_DSCNT_DV_CD
,DLVY_AMT_DSCNT_AMT
,DLVY_AMT_MXMM_DSCNT_AMT
,USE_AT
,REGUSR
,REGIST_DT
,UPDUSR
,UPDT_DT
) SELECT
OFC.OFLNE_COUPON_INNB
,OFC.COUPON_INNB
,OFC.COUPON_SNDNG_INNB
,OFC.SOPMAL_CD
,#{useq} AS MBR_INNB
,#{mbr_dv_cd} AS MBR_DV_CD
,NULL AS CUPNPK_INNB
,'03' AS COUPON_SNDN_TY_CD
,NULL AS CUPNPK_NM
,NULL AS CUPNPK_DC
,C.COUP_NM
,C.COUPON_DC
,C.USE_ENVRN_CD
,C.OTR_COUPON_SMTM_USE_AT
,C.DPLCT_DWLD_AT
,C.DPLCT_DSCNT_AT
,C.USE_POSBL_AMT
,C.GOODS_APPLC_DV_CD
,CASE
WHEN C.VALIDPD_KND_CD = '01' THEN C.VALIDPD_BGN_DT
WHEN C.VALIDPD_KND_CD = '02' THEN CONCAT(CURDATE(), ' 00:00:00')
END AS VALIDPD_BGN_DT
,CASE
WHEN C.VALIDPD_KND_CD = '01' THEN C.VALIDPD_END_DT
WHEN C.VALIDPD_KND_CD = '02' THEN CONCAT(DATE(DATE_ADD(SYSDATE(), INTERVAL C.VALIDPD_DE_CNT DAY)), ' 23:59:59')
END AS VALIDPD_END_DT
,OFC.OFLNE_COUPON_CRTNB
,'02' USEPLC_DV_CD
,'03' AS COUPON_STTUS_CD
,NOW() COUPON_USE_DT
,NULL RECOVRY_ORGINL_COUPON
,OFC.SNDNG_TRGTER_NM AS MBR_NM
,OFC.SNDNG_TRGET_TELNB AS MBTLNB
,C.BNEF_DV_CD
,C.ADIT_DSCNT_CD
,C.ADIT_DSCNT_AMT
,C.DSCNT_MXMM_AMT
,C.DLVY_AMT_DSCNT_DV_CD
,C.DLVY_AMT_DSCNT_AMT
,C.DLVY_AMT_MXMM_DSCNT_AMT
,'Y' AS USE_AT
,OFC.REGUSR AS REGUSR
,SYSDATE() REGIST_DT
,OFC.UPDUSR AS UPDUSR
,SYSDATE() UPDT_DT
FROM GC_OFFLINE_COUPON OFC
INNER JOIN GC_COUPON C
ON OFC.SOPMAL_CD = C.SOPMAL_CD
AND OFC.COUPON_INNB = C.COUPON_INNB
WHERE 1 = 1
AND OFC.SOPMAL_CD = #{coupon_site}
AND OFC.OFLNE_COUPON_CRTNB = #{offline_serialnumber}
]]>
</insert>
<!-- 다운로드 쿠폰 사용 내역(로그) insert -->
<insert id="insertPosDwldCouponUsedLogRegist" keyProperty="couponUseDtlsIdnb" useGeneratedKeys="true">
<![CDATA[
INSERT INTO GC_ORDER_COUPON (
DWLD_COUPON_INNB,
SOPMAL_CD,
ORDR_INNB,
COUPON_ISSU_SOPMAL_CD,
OFLNE_COUPON_CRTNB,
MANAGE_MEMO,
CANCL_AT,
REGUSR,
REGIST_DT,
UPDUSR,
UPDT_DT
) SELECT
#{download_seq},
#{sopmalCd},
#{ordrInnb},
#{coupon_site},
DW.OFLNE_COUPON_CRTNB,
#{manageMemo},
'N',
#{useq},
SYSDATE(),
#{useq},
SYSDATE()
FROM GC_DOWNLOAD DW
LEFT JOIN GC_COUPON_SNDNG SD
ON DW.COUPON_SNDNG_INNB = SD.COUPON_SNDNG_INNB
WHERE DWLD_COUPON_INNB = #{download_seq}
]]>
</insert>
<!-- 복원 쿠폰 조회 -->
<select id="selectPosUseCouponListInqire">
<![CDATA[
SELECT
OC.DWLD_COUPON_INNB
,OC.SOPMAL_CD
,OC.ORDR_INNB
,OC.COUPON_ISSU_SOPMAL_CD
,OC.OFLNE_COUPON_CRTNB
,OC.MANAGE_MEMO
,OC.CANCL_AT
,OC.CANCL_DT
FROM GC_ORDER_COUPON OC
WHERE 1 = 1
AND OC.SOPMAL_CD = #{sopmalCd}
AND OC.ORDR_INNB = #{ordrInnb}
]]>
</select>
<!-- 다운로드 쿠폰 복원처리 -->
<update id="updatePosDwldCouponRecvryUpdt">
<![CDATA[
UPDATE GC_DOWNLOAD SET
COUP_NM = CASE
WHEN COUP_NM LIKE '[복원]%' THEN COUP_NM
ELSE CONCAT('[복원]', COUP_NM)
END
,COUPON_STTUS_CD = '02'
,UPDUSR = #{mbrInnb}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND DWLD_COUPON_INNB = #{dwldCouponInnb}
]]>
</update>
<!-- 다운로드 쿠폰 사용내역 취소처리 상태 업데이트 -->
<update id="updatePosOrderCouponCancelUpdt">
<![CDATA[
UPDATE GC_ORDER_COUPON SET
CANCL_AT = 'Y'
,CANCL_DT = SYSDATE()
,UPDUSR = #{mbrInnb}
,UPDT_DT = SYSDATE()
WHERE 1=1
AND DWLD_COUPON_INNB = #{dwldCouponInnb }
]]>
</update>
</mapper>

View File

@@ -0,0 +1,369 @@
<?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.wb.domainserver.domain.gcone.pos.pos.mapper.PosMapper">
<!--포스 - 매장 정보 조회-->
<select id="selectBOPosStrSrch" parameterType="map" resultType="dataMap">
SELECT
STR_INNB
,TENTCPN_NM -- 매장명
,CONCAT('S', CAST(STR_OPER_DV AS UNSIGNED)) AS STR_OPER_DV -- 매장운영구분
,POS_CD_DV_VAL
,POS_CD_PASSIV_INPUT_VAL
,STR_OPER_DV AS STR_OPER_DV_CD
FROM GC_STORE
WHERE 1=1
AND MRHST_AT='Y'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_corporate,'Y')">
AND MANAGE_CPR = #{search_corporate}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(provider_status)">
AND TENT_STTUS = #{provider_status}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pgubun)">
AND POS_CD_DV_VAL = #{pgubun}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pcode)">
AND POS_CD_PASSIV_INPUT_VAL = #{pcode}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_by)">
ORDER BY #{order_by}
</if>
</select>
<!--포스 - 매장 방문기록 수정-->
<update id="updateMbrStrVisit" parameterType="map">
UPDATE
GC_MEMBER_SITE
SET
POS_STR_INNB = #{posStrInnb},
POS_RECENT_VISIT_DT = SYSDATE(),
UPDUSR = #{useq},
UPDT_DT = SYSDATE()
WHERE 1=1
AND MBR_INNB = #{useq}
AND SOPMAL_CD = #{sopmalCd}
AND MBR_DV_CD = 'GC'
</update>
<!-- 포스-주문 가져오기 (get_order_posinfo) -->
<select id="selectOrderPosInfo" parameterType="map" resultType="dataMap">
SELECT
P.*
, IFNULL(O.MBR_INNB, 0) MBR_INNB
, O.SOPMAL_CD
, O.MBR_INNB
, O.MBR_DV_CD
FROM GC_ORDER_POSINFO P
LEFT JOIN GC_ORDER O ON(O.ORDR_INNB=P.ORDER_SEQ)
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(storeSeq)">
AND P.STORE_SEQ = #{storeSeq}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pdate)">
AND P.PDATE = DATE(#{pdate})
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pono)">
AND P.PONO = #{pono}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(pnumb)">
AND P.PNUMB = #{pnumb}
</if>
</select>
<!-- 주문 아이템 가져오기 (get_order_item) -->
<select id="selectOrderItem" parameterType="map" resultType="dataMap">
SELECT ORDER_SEQ, ITEM_OPTION_SEQ, ITEM_SEQ, STEP, PRICE, ORI_PRICE, CONSUMER_PRICE, EA, REFUND_EA, UNIT_EMONEY, EMONEY_SALE_UNIT, EMONEY_SALE_REST
FROM FM_ORDER_ITEM_OPTION
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_seq)">
AND ORDER_SEQ = #{order_seq}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(g_poscode)">
AND G_POSCODE = #{g_poscode}
</if>
</select>
<!-- 포스 주문 결제 등록 -->
<insert id="insertPosOrder" parameterType="map" useGeneratedKeys="true" keyProperty="seq">
INSERT INTO GC_ORDER_POSINFO (
ORDER_SEQ -- 주문번호
, STORE_SEQ
, PGUBUN
, PCODE
, PONO
, PDATE
, PNUMB
, EMP_CODE -- 판매사원 코드
, EMP_NAME -- 판매사원 이름
) VALUES (
#{order_seq}
, #{store_seq}
, #{pgubun}
, #{pcode}
, #{pono}
, #{pdate}
, #{pnumb}
, #{emp_code}
, #{emp_name}
)
</insert>
<!-- 매출 - 매출검색 (as_is 쿼리임. 데이터 이관 후 테이블 보면서 to_be 작성예정 )-->
<select id="selectBOPosOrderSrchList" parameterType="map" resultType="dataMap">
select M.order_seq,
date_format(M.deposit_date, '%Y%m%d') order_date,
M.skintype,
M.step,
O.step,
S.provider_seq,
S.provider_name_home,
S.corp_brand,
P.pgubun,
P.pcode,
P.pono,
P.pdate,
P.pnumb,
D.goods_seq,
D.goods_code,
D.goods_name,
O.item_seq,
O.ea,
O.price,
(O.price * O.ea) price_sum,
(O.member_sale + O.member_sale_rest
+ (O.mobile_sale_unit * O.ea) + O.mobile_sale_rest
+ (O.fblike_sale_unit * O.ea) + O.fblike_sale_rest
+ (O.coupon_sale_unit * O.ea) + O.coupon_sale_rest
+ (O.code_sale_unit * O.ea) + O.code_sale_rest
+ (O.referer_sale_unit * O.ea) + O.referer_sale_rest
+ (O.emoney_sale_unit * O.ea) + O.emoney_sale_rest
+ (O.cash_sale_unit * O.ea) + O.cash_sale_rest
+ (O.enuri_sale_unit * O.ea) + O.enuri_sale_rest
+ (O.npay_point_sale_unit * O.ea) + O.npay_point_sale_rest
) sale_sum
from fm_order M
left join fm_order_item D on (D.order_seq = M.order_seq)
left join fm_order_item_option O on (O.item_seq = D.item_seq)
left join fm_order_posInfo P on (P.order_seq = M.order_seq)
left join fm_provider S on (S.provider_seq = P.store_seq)
where M.member_seq = #{member_seq}
and M.deposit_date between #{from_date} ' 00:00:00' and #{to_date}' 23:59:59'
and O.step between '25' and '85'
order by order_date asc
</select>
<!-- 주문 정보 가져오기 (get_order) -->
<select id="selectOrder" parameterType="map" resultType="dataMap">
SELECT O.ORDER_SEQ, O.MEMBER_SEQ, O.STEP, O.SETTLEPRICE, O.EMONEY, O.REGIST_DATE, O.DEPOSIT_DATE
FROM FM_ORDER O
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(order_seq)">
AND O.ORDER_SEQ = #{order_seq}
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(member_seq)">
AND O.MEMBER_SEQ = #{member_seq}
</if>
</select>
<!-- 포스-주문 가져오기 (get_order_posinfo : g_poscode) -->
<select id="selectOrderGPosInfo" parameterType="String" resultType="dataMap">
SELECT
P.*, IFNULL(O.MEMBER_SEQ, 0) MEMBER_SEQ
FROM FM_ORDER_POSINFO P
LEFT JOIN FM_ORDER O ON(O.ORDER_SEQ=P.ORDER_SEQ)
WHERE 1=1
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(gPoscode)">
AND P.G_POSCODE = #{g_poscode}
</if>
limit 1
</select>
<!-- 주문 상품 가져오기 (get_goods) -->
<select id="selectGoods" parameterType="dataMap" resultType="dataMap">
SELECT GOODS_SEQ,
PROVIDER_SEQ,
GOODS_NAME,
GOODS_CODE,
GOODS_TYPE,
GOODS_KIND,
DEFAULT_CONSUMER_PRICE,
DEFAULT_PRICE
FROM GC_GOODS
WHERE GOODS_SEQ = #{goods_seq}
</select>
<!-- 주문 상품옵션 가져오기 (get_goods) -->
<select id="selectGoodsItem" parameterType="dataMap" resultType="dataMap">
SELECT OPTION_TITLE,
OPTION1,
OPTION2,
OPTION3,
OPTION4,
OPTION5,
PRICE,
CONSUMER_PRICE
FROM FM_GOODS_OPTION
WHERE GOODS_SEQ = #{goods_seq}
AND OPTION_SEQ = #{option_seq}
</select>
<!-- 포스주문 날짜 업데이트 -->
<update id="updateSetPosDay" parameterType="map">
<![CDATA[
UPDATE FM_MEMBER
SET POS_DAY = #{posday} -- SYSDATE() yyyymmdd
WHERE MEMBER_SEQ = #{memberSeq}
AND (POS_DAY IS NULL OR POS_DAY < #{posday})
]]>
</update>
<!--포스 - 회원 건수 조회-->
<select id="selectPosMbrCnt" parameterType="map" resultType="int">
SELECT
COUNT(1)
FROM
GC_MEMBER GM
WHERE GM.USE_AT = 'Y'
AND GM.MBR_DV_CD = 'GC'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(search_key)">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'uid')">
AND GM.MBR_ID = #{search_key}
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'username')">
AND GM.MBR_NM = #{search_key}
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'cp')">
AND GM.MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{search_key},'-',''), #{secretKey}))
</when>
</choose>
</if>
</select>
<!--포스 - 회원 리스트 조회-->
<select id="selectBOPosMbrList" parameterType="map" resultType="DataMap">
SELECT
A.MBR_INNB AS USEQ,
A.MBR_ID AS UID,
A.MBR_DV_CD,
CASE
WHEN A.APPN_CNT > 0 THEN CONCAT('[판매금지]',A.MBR_NM)
WHEN A.APPN_CNT = 0 AND CONCAT(A.POS_CD_DV_VAL,A.POS_CD_PASSIV_INPUT_VAL) = #{storecode} THEN CONCAT(A.MBR_NM , ' (MY)')
ELSE A.MBR_NM
END AS USERNAME,
A.MBR_NM AS DISPLAYNAME,
A.BRTH_DE AS BIRTHDAY,
A.ADDR1,
A.ADDR2,
CASE
WHEN LENGTH(A.MBTLNB) = 11 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 3), '-', SUBSTR(A.MBTLNB, 4, 4), '-', SUBSTR(A.MBTLNB, 8, 4))
WHEN LENGTH(A.MBTLNB) = 10 AND A.MBTLNB LIKE '02%' THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 2), '-', SUBSTR(A.MBTLNB, 3, 4), '-', SUBSTR(A.MBTLNB, 7, 4))
WHEN LENGTH(A.MBTLNB) = 10 AND A.MBTLNB NOT LIKE '02%' THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 3), '-', SUBSTR(A.MBTLNB, 4, 3), '-', SUBSTR(A.MBTLNB, 7, 4))
WHEN LENGTH(A.MBTLNB) = 9 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 2), '-', SUBSTR(A.MBTLNB, 3, 3), '-', SUBSTR(A.MBTLNB, 6, 4))
WHEN LENGTH(A.MBTLNB) = 8 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 4), '-', SUBSTR(A.MBTLNB, 5, 4))
ELSE
A.MBTLNB -- 포맷팅하지 않은 원본 값 반환
END AS PHONE,
CASE
WHEN LENGTH(A.MBTLNB) = 11 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 3), '-', SUBSTR(A.MBTLNB, 4, 4), '-', SUBSTR(A.MBTLNB, 8, 4))
WHEN LENGTH(A.MBTLNB) = 10 AND A.MBTLNB LIKE '02%' THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 2), '-', SUBSTR(A.MBTLNB, 3, 4), '-', SUBSTR(A.MBTLNB, 7, 4))
WHEN LENGTH(A.MBTLNB) = 10 AND A.MBTLNB NOT LIKE '02%' THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 3), '-', SUBSTR(A.MBTLNB, 4, 3), '-', SUBSTR(A.MBTLNB, 7, 4))
WHEN LENGTH(A.MBTLNB) = 9 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 2), '-', SUBSTR(A.MBTLNB, 3, 3), '-', SUBSTR(A.MBTLNB, 6, 4))
WHEN LENGTH(A.MBTLNB) = 8 THEN
CONCAT(SUBSTR(A.MBTLNB, 1, 4), '-', SUBSTR(A.MBTLNB, 5, 4))
ELSE
A.MBTLNB -- 포맷팅하지 않은 원본 값 반환
END AS CP,
CAST(ROUND(IFNULL(A.MLG,0),0) AS CHAR CHARACTER SET utf8mb4) AS TOTALPOINT
FROM(SELECT
GM.MBR_INNB,
GM.MBR_ID,
GM.MBR_NM,
GM.MBR_DV_CD,
DATE_FORMAT(GM.BRTH_DE,'%Y-%m-%d') AS BRTH_DE,
CASE
WHEN GM.ADRES_DV = '02' THEN GM.LNB_ADRES
ELSE GM.RNM_ADRES
END AS ADDR1,
GM.DTL_ADRES AS ADDR2,
CAST(AES_DECRYPT(UNHEX(GM.MBTLNB) ,#{secretKey}) AS CHAR(50))AS MBTLNB,
GM.REGIST_DT,
GS.STR_INNB,
GS.STR_OPER_DV,
GM.JOIN_MTH_CD,
GS.POS_CD_DV_VAL,
GS.POS_CD_PASSIV_INPUT_VAL,
FN_GET_COMMCODE_NAME('STR_DV', GS.STR_OPER_DV) STR_OPER_NM,
SUM( FMI.BLCE ) AS MLG,
COUNT(GMA.APPN_INNB) AS APPN_CNT
FROM GC_MEMBER GM
LEFT JOIN GC_EXTRL_MEMBER GEM
ON GM.MBR_INNB = GEM.MBR_INNB
AND GM.MBR_DV_CD = GEM.MBR_DV_CD
AND GEM.SOPMAL_CD = (SELECT REPRSNT_BRAND FROM GC_STORE WHERE CONCAT(POS_CD_DV_VAL,POS_CD_PASSIV_INPUT_VAL) = #{storecode})
AND GEM.EXTRL_INTRLCK_DV_CD = '03'
LEFT JOIN GC_STORE GS
ON GEM.STR_INNB = GS.STR_INNB
AND GEM.SOPMAL_CD = GS.REPRSNT_BRAND
LEFT JOIN GC_MEMBER_APPN GMA
ON GMA.MBR_IDNTFC_INFO = GM.MBR_INNB
AND GMA.MBR_DV_CD = GM.MBR_DV_CD
AND GMA.APPN_DV_CD = '02'
LEFT JOIN GC_MILEAGE FMI
ON GM.MBR_INNB = FMI.MBR_INNB
AND GM.MBR_DV_CD = FMI.MBR_DV_CD
AND FMI.BLCE > 0
AND FMI.USE_POSBL_END_DT >= DATE_FORMAT(NOW(), '%Y-%m-01')
AND FMI.MLG_ACCML_DV_CD IN ('add', 'up')
AND FMI.CANCL_AT = 'N'
WHERE 1=1
AND GM.USE_AT = 'Y'
AND GM.MBR_DV_CD = 'GC'
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(search_key)">
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'uid')">
AND GM.MBR_ID = #{search_key}
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'username')">
AND GM.MBR_NM = #{search_key}
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(search_item, 'cp')">
AND GM.MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{search_key},'-',''), #{secretKey}))
</when>
</choose>
</if>
GROUP BY
GM.MBR_INNB,
GM.MBR_ID,
GM.MBR_NM,
GM.BRTH_DE,
ADDR1,
ADDR2,
MBTLNB,
GM.REGIST_DT,
GS.STR_INNB,
GS.STR_OPER_DV,
GM.JOIN_MTH_CD,
GS.POS_CD_DV_VAL,
GS.POS_CD_PASSIV_INPUT_VAL,
STR_OPER_NM
)A
ORDER BY A.MBR_NM
LIMIT 40 OFFSET 0
</select>
<select id = "selectPosMbrAppn" parameterType="map" resultType="int">
SELECT COUNT(1) FROM GC_MEMBER_APPN WHERE IDNTFC_STDR_CD = 'order_mbtlnb' AND IDNTFC_INFO = HEX(AES_ENCRYPT(REPLACE(#{search_key},'-',''), #{secretKey})) AND APPN_DV_CD = '02'
</select>
</mapper>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More