447 Commits

Author SHA1 Message Date
이대환
2e33dc43f3 쇼핑몰 사이트맵 xml 자동 생성 2026-09-08 13:59:18 +09:00
이주일
5f3687deb1 Revert "fix: 관리자 대시보드 쇼핑몰 선택 유지"
This reverts commit 7b24a5395f.
2026-08-26 23:12:45 +09:00
이주일
a59dc92601 Revert "fix: 관리자 대시보드 게시글 링크 쇼핑몰 코드 전달"
This reverts commit 5527c23171.
2026-08-26 23:12:45 +09:00
이주일
5527c23171 fix: 관리자 대시보드 게시글 링크 쇼핑몰 코드 전달 2026-08-26 23:07:17 +09:00
이주일
7b24a5395f fix: 관리자 대시보드 쇼핑몰 선택 유지 2026-08-26 23:00:02 +09:00
이주일
87da1e547e fix: 모바일 전체메뉴 하위 카테고리 표시 개선 2026-08-26 17:22:16 +09:00
이대환
889639a63b fix : 카카오 상담문의 아이콘 스타일 적용(모바일)
fix : 상품 문의(모바일)
fix : 게시판 목록 조회(모바일)
2026-08-26 12:24:29 +09:00
이대환
7594ebcb88 fix : 카카오 상담문의 아이콘 변경 2026-08-25 17:18:32 +09:00
이대환
60f28bae5a 게시판 > 게시판 관리 > 게시글 보기/등록/수정 - 화폐단위 변경 (원 → 円) 2026-08-25 11:07:49 +09:00
이대환
4ad51df503 게시판 > 게시판 관리 > 게시글 등록/수정 - 상품 정보(추천 상품) 문구 2026-08-20 18:29:56 +09:00
이대환
bb3ecebad1 fix : 카카오 상담문의 아이콘 위치 변경 2026-08-20 18:29:56 +09:00
이대환
342bea50d6 fix : 카카오 상담문의 아이콘 위치 변경 2026-08-20 18:29:55 +09:00
이대환
103621fe2a fix : 운영 관리자/통합관리자 로고 변경 2026-08-19 12:12:14 +09:00
이대환
8be851c472 카카오 상담문의(카카오톡 채널) 2026-08-18 16:11:03 +09:00
이대환
27301d554b fix : 주문 > 주문 관리 > 전체주문조회 > 프린트 - 발주서 다운로드 화면으로 대체 2026-08-18 16:06:55 +09:00
이대환
668823a32a fix : 배송조회(운송장번호 조회) - 발송 예정 문구 수정 2026-08-14 16:58:45 +09:00
이대환
24c697bfbf fix : 결제, 취소 - 키움결제 네이버페이 CPID 관련 적용 2026-08-12 12:52:15 +09:00
이대환
9347d5407c fix : 서치어드바이저 소유권 코드 수정 2026-08-07 12:19:59 +09:00
이대환
0aad369f61 fix : 서치어드바이저 소유권 코드 수정
fix : 카카오 상담문의(카카오톡 채널) 삭제
2026-08-07 11:42:35 +09:00
이대환
04493a107c 카카오 상담문의(카카오톡 채널) 2026-08-05 11:08:51 +09:00
이주일
a86e1e5c16 fix: 주문 원화 결제금액 10원 단위 버림 적용 2026-07-25 20:34:42 +09:00
이대환
f4e9a49b12 fix : 주문 > 주문 관리 > 전체주문조회 > 발주서 다운로드 - 발주서 관리 2026-07-22 17:28:42 +09:00
이대환
4bec8b7eb9 fix : 주문 > 주문 관리 > 전체주문조회 > 주문 상세 - 배송지 정보 개인통관부호 추가 2026-07-22 16:18:32 +09:00
이대환
808b2c8b03 주문 > 주문 관리 > 전체주문조회 > 발주서 다운로드 - 발주서 관리 2026-07-22 11:04:55 +09:00
이주일
f9b8c8712a fix: 관리자 세션 만료 리다이렉트 루프 방지 2026-07-21 10:34:27 +09:00
이주일
c6c041819b fix: 게시판 연관상품 이미지 필드 통일 2026-07-19 16:05:17 +09:00
이주일
f1767425a0 fix: 게시판 상세 등록일 및 모바일 등록 권한 노출 보정 2026-07-19 14:46:46 +09:00
이주일
cb0157a73b fix: 관리자 게시판 연관상품 이미지 및 로컬 인증 보정 2026-07-19 09:07:52 +09:00
이주일
7564dc21e5 fix: 관리자 게시판 인증 및 저장 오류 처리 2026-07-18 23:32:26 +09:00
이주일
06760482aa merge: develop 게시판 등록 버튼 권한 노출 반영 2026-07-18 15:55:11 +09:00
이주일
923bb4a1a4 fix: 사용자 게시판 등록 버튼 권한별 노출 처리 2026-07-18 15:48:43 +09:00
이주일
1c48d65b7b fix: 관리자 게시판 등록 권한 및 URL 표시 개선 2026-07-18 12:37:10 +09:00
이주일
15f299d842 fix: 추천상품 표시 순서 적용 2026-07-18 12:34:26 +09:00
이주일
49738b87bd fix: 추천상품 표시 설정 및 품절 안내 적용 2026-07-18 12:34:26 +09:00
이주일
1b52e2ecbd fix: 추천상품 PC 카드 목록 구조 통일 2026-07-18 12:34:26 +09:00
이주일
de7bb587e2 fix: 추천상품 카드 표시 기준 보정 2026-07-18 12:34:26 +09:00
이주일
de3c84957d feat: 게시판 연관상품 목록 표준화 2026-07-18 12:34:26 +09:00
이주일
f4df00c1d2 fix: 추천상품 표시 순서 적용 2026-07-18 12:33:28 +09:00
이주일
3458cfc963 fix: 추천상품 표시 설정 및 품절 안내 적용 2026-07-18 12:28:41 +09:00
이주일
8412f58b59 fix: 추천상품 PC 카드 목록 구조 통일 2026-07-18 12:16:35 +09:00
이주일
31fa5bf0ec fix: 추천상품 카드 표시 기준 보정 2026-07-18 12:08:29 +09:00
이주일
afbc268b57 feat: 게시판 연관상품 목록 표준화 2026-07-18 12:02:52 +09:00
이주일
ff289ac2c8 fix: 상품 이미지 업로드 투명도 보존 2026-07-17 14:59:44 +09:00
이주일
713bd6a64d fix: 상품 이미지 업로드 투명도 보존 2026-07-17 14:45:55 +09:00
이주일
19586bd744 feat: 일반게시판 연관상품 노출 지원 2026-07-17 02:49:11 +09:00
이주일
5e4d837012 feat: 일반게시판 연관상품 노출 지원 2026-07-17 02:48:34 +09:00
이주일
48af5d88f4 fix: 관리자 게시판 등록 권한 및 URL 표시 개선 2026-07-17 02:24:19 +09:00
이주일
fc47ad11ad fix: 품절 및 판매중지 상품 후순위 정렬 2026-07-16 17:25:47 +09:00
이주일
ad649de088 fix: 매거진 상세 목록 버튼 이동 오류 수정 2026-07-16 17:25:46 +09:00
이주일
c96dde1323 fix: 품절 및 판매중지 상품 후순위 정렬 2026-07-16 16:57:59 +09:00
이주일
00c5235366 fix: 매거진 상세 목록 버튼 이동 오류 수정 2026-07-16 16:57:58 +09:00
이주일
c6d656b648 feat: 상품배지설정관리 프로그램 추가 2026-07-16 02:26:31 +09:00
이주일
ac2402d764 feat: 쇼핑몰 상품 배지 마스터 연동 2026-07-16 02:26:31 +09:00
이주일
64fcbdefea feat: 상품배지설정관리 프로그램 추가 2026-07-16 02:16:50 +09:00
이주일
dee18f8605 feat: 쇼핑몰 상품 배지 마스터 연동 2026-07-15 18:09:48 +09:00
이대환
331587ee56 fix : 품절 문구 수정 (Sold Out → 입고 대기중) 2026-07-13 16:20:59 +09:00
이대환
df8c176dbb fix : 품절 문구 수정 (Sold Out → 입고 대기중) 2026-07-13 16:20:50 +09:00
jazz
dbe74eeb36 Revert "fix : 상품상세화면 호출시 title 및 meta 정보에 상품제목 노출"
This reverts commit c5948e87
2026-07-13 10:12:49 +09:00
jazz
846de3009c Revert "fix : 상품상세화면 호출시 title 및 meta 정보에 상품제목 노출"
This reverts commit 194ab35b
2026-07-13 10:10:08 +09:00
jazz
c5948e87ec fix : 상품상세화면 호출시 title 및 meta 정보에 상품제목 노출
(cherry picked from commit 194ab35ba6)
2026-07-10 17:56:24 +09:00
jazz
194ab35ba6 fix : 상품상세화면 호출시 title 및 meta 정보에 상품제목 노출 2026-07-10 17:55:32 +09:00
이대환
44bc0104ce 미할인 상품 - 판매가, 할인율 미표시
>> 쇼핑몰 메인
>> 카테고리 목록
>> 상품 검색
>> 상품 상세
>> 장바구니 담기 팝업
>> 장바구니
>> 결제 화면

(cherry picked from commit f894756a5f)
2026-07-10 11:54:27 +09:00
이대환
f894756a5f 미할인 상품 - 판매가, 할인율 미표시
>> 쇼핑몰 메인
>> 카테고리 목록
>> 상품 검색
>> 상품 상세
>> 장바구니 담기 팝업
>> 장바구니
>> 결제 화면
2026-07-10 11:54:17 +09:00
이주일
82ec7f8b20 fix: 운영 주문상세 배송지 수정 오류 보정 2026-07-10 00:29:13 +09:00
이주일
ec3718a2c4 fix: 주문상세 배송지 수정 응답 메시지 처리 보정 2026-07-10 00:21:56 +09:00
이주일
89249429ad fix: 주문상세 배송지 조회 시 배송지역 코드 포함 2026-07-09 22:42:21 +09:00
이주일
16b1ad14f4 fix: 주문상세 배송지 수정 시 배송지역 코드 누락 보정 2026-07-09 22:26:31 +09:00
jazz
cba5e39c8e fix : 서치어드바이저 소유권 코드 추가
(cherry picked from commit 6222c3b7d1)
2026-07-09 18:07:48 +09:00
jazz
6222c3b7d1 fix : 서치어드바이저 소유권 코드 추가 2026-07-09 18:07:28 +09:00
jazz
5be8b39cd7 fix : 서치어드바이저 소유권 코드 추가
(cherry picked from commit 297664b621)
2026-07-09 17:36:26 +09:00
이대환
efda4e8471 fix : 결제 - 키움결제 네이버페이 CPID 관련처리(모바일)
(cherry picked from commit 184dbbe21b)
2026-07-09 14:59:42 +09:00
이대환
184dbbe21b fix : 결제 - 키움결제 네이버페이 CPID 관련처리(모바일) 2026-07-09 14:59:32 +09:00
이대환
edfd9e2474 fix: 주문관리 > 전체주문조회 > 발주서 엑셀 다운로드 - 상품단가(과세 USD)
(cherry picked from commit 2e28122d97)
2026-07-09 12:20:43 +09:00
이대환
2e28122d97 fix: 주문관리 > 전체주문조회 > 발주서 엑셀 다운로드 - 상품단가(과세 USD) 2026-07-09 12:20:33 +09:00
jazz
297664b621 fix : 서치어드바이저 소유권 코드 추가 2026-07-09 10:00:20 +09:00
이대환
02c35d87d2 fix : 주문 관리 > 전체주문조회 > 전체 주문 목록 - 프린트 화폐단위 변경 (원 → 円)
(cherry picked from commit c51f716cc4)
2026-07-08 18:32:15 +09:00
이대환
c51f716cc4 fix : 주문 관리 > 전체주문조회 > 전체 주문 목록 - 프린트 화폐단위 변경 (원 → 円) 2026-07-08 18:32:08 +09:00
이대환
ca00a15c57 fix : 상품 목록 - 스크롤 불러오기 화폐단위 변경 (원 → 円)
(cherry picked from commit 2b8e84799d)
2026-07-08 14:11:58 +09:00
이대환
2b8e84799d fix : 상품 목록 - 스크롤 불러오기 화폐단위 변경 (원 → 円) 2026-07-08 14:11:46 +09:00
이대환
2b2d00cdd0 fix : 주문 > 반품환불 관리 > 반품환불 처리 > 반품/환불상세 - 네이버페이 주문 제어 제한
(cherry picked from commit cb655263af)
2026-07-08 11:32:21 +09:00
이대환
cb655263af fix : 주문 > 반품환불 관리 > 반품환불 처리 > 반품/환불상세 - 네이버페이 주문 제어 제한 2026-07-08 11:32:07 +09:00
이대환
ed4d0a98a7 fix : 주문 > 주문 관리 > 전체주문조회, 주문 상세 - 네이버페이 주문 제어 제한
(cherry picked from commit 1de8b5c39f)
2026-07-08 11:22:07 +09:00
이대환
1de8b5c39f fix : 주문 > 주문 관리 > 전체주문조회, 주문 상세 - 네이버페이 주문 제어 제한 2026-07-08 11:21:33 +09:00
이대환
5f90985157 배송조회(운송장번호 조회) - aciExpress 팝업 적용
>> 쇼핑몰 주문/배송 > 주문 상세

(cherry picked from commit 4074ace97d)
2026-07-08 10:37:08 +09:00
이대환
4074ace97d 배송조회(운송장번호 조회) - aciExpress 팝업 적용
>> 쇼핑몰 주문/배송 > 주문 상세
2026-07-08 10:36:59 +09:00
이대환
49c8d6c20c fix : 주문 > 주문 관리 > 전체주문조회, 주문 상세 - 네이버페이 주문 제어 제한
(cherry picked from commit 28ee8f8556)
2026-06-29 12:55:30 +09:00
이대환
28ee8f8556 fix : 주문 > 주문 관리 > 전체주문조회, 주문 상세 - 네이버페이 주문 제어 제한 2026-06-29 12:55:14 +09:00
이대환
1c3238a7b4 fix : 주문 > 주문 관리 > 전체주문조회 - 네이버페이 주문 제어 제한
(cherry picked from commit bbeb2a630a)
2026-06-29 12:42:45 +09:00
이대환
bbeb2a630a fix : 주문 > 주문 관리 > 전체주문조회 - 네이버페이 주문 제어 제한 2026-06-29 11:23:10 +09:00
이대환
480a9997f3 fix : 상품관리 > 상품조회 > 상품 등록/복사재등록 - 상품명(영문), HS Code, 실무게(KG)
(cherry picked from commit bc7f738e55)
2026-06-26 18:36:50 +09:00
이대환
de1dc3cea5 fix : 상품관리 > 상품조회 > 상품 등록/복사재등록 - 상품명(영문), HS Code, 실무게(KG)
(cherry picked from commit 32250636e9)
2026-06-26 18:36:50 +09:00
이대환
bc7f738e55 fix : 상품관리 > 상품조회 > 상품 등록/복사재등록 - 상품명(영문), HS Code, 실무게(KG) 2026-06-26 18:36:32 +09:00
이대환
32250636e9 fix : 상품관리 > 상품조회 > 상품 등록/복사재등록 - 상품명(영문), HS Code, 실무게(KG) 2026-06-26 18:35:26 +09:00
이대환
6bb7c4928d 주문 > 주문 관리 > 전체주문조회, 주문 상세 - 네이버페이 주문 제어 제한
(cherry picked from commit 6858b24344)
2026-06-26 18:09:24 +09:00
이대환
6858b24344 주문 > 주문 관리 > 전체주문조회, 주문 상세 - 네이버페이 주문 제어 제한 2026-06-26 18:09:13 +09:00
이대환
ee95e09d12 fix : 배송/반품정보 문구 수정 (반품/교환 → 배송/반품)
(cherry picked from commit c04668fda2)
2026-06-19 14:41:13 +09:00
이대환
c04668fda2 fix : 배송/반품정보 문구 수정 (반품/교환 → 배송/반품) 2026-06-19 14:41:02 +09:00
이대환
3ab6988fb8 쇼핑몰 매거진 - 열람 권한 설정(모바일)
(cherry picked from commit 1cab83f69f)
2026-06-11 17:49:03 +09:00
이대환
beb9fbab7b 쇼핑몰 매거진 - 열람 권한 설정
(cherry picked from commit 784cadc6f2)
2026-06-11 17:49:03 +09:00
이대환
1cab83f69f 쇼핑몰 매거진 - 열람 권한 설정(모바일) 2026-06-11 17:42:08 +09:00
이대환
784cadc6f2 쇼핑몰 매거진 - 열람 권한 설정 2026-06-11 17:36:34 +09:00
이대환
b00534af6b batch > 출고 상태 변경
(cherry picked from commit 39ce46c4dc)
2026-06-10 11:41:20 +09:00
이대환
39ce46c4dc batch > 출고 상태 변경 2026-06-10 11:41:02 +09:00
이대환
3eda19f6fd 쇼핑몰 검색어 저장
(cherry picked from commit 03ec9d863e)
2026-06-05 14:44:21 +09:00
이대환
03ec9d863e 쇼핑몰 검색어 저장 2026-06-05 14:44:03 +09:00
이대환
3e2ebaabc8 rollback : 결제, 취소 - 키움결제 네이버페이 CPID 관련 적용 취소 2026-06-04 16:08:25 +09:00
이대환
04ee9f1275 fix : 상품 > 상품관리 > 구독서비스 관리 > 구독서비스 삭제 개선, 목록 선택 체크박스 개선
(cherry picked from commit 7bfa5a288c)
2026-06-02 11:50:05 +09:00
이대환
7bfa5a288c fix : 상품 > 상품관리 > 구독서비스 관리 > 구독서비스 삭제 개선, 목록 선택 체크박스 개선 2026-06-02 11:49:55 +09:00
이대환
9b2fdee768 fix : 설정 > 원가 설정 - 기준일자 datepicker 적용
(cherry picked from commit 56f29943b6)
2026-06-02 09:47:26 +09:00
이대환
56f29943b6 fix : 설정 > 원가 설정 - 기준일자 datepicker 적용 2026-06-02 09:47:09 +09:00
이대환
913e5bd678 설정 > 원가 설정 추가
(cherry picked from commit 31561200c2)
2026-06-01 15:49:57 +09:00
이대환
465cde8a16 fix : 설정 > 패밀리사이트 설정 > 입력창 추가 - 스크립트 개선
fix : 상품관리 > 상품조회 > 상품 등록/복사재등록/수정 - 실무게(KG) 자릿수 제한 개선

(cherry picked from commit 5fa4aa5c37)
2026-06-01 15:49:56 +09:00
이대환
31561200c2 설정 > 원가 설정 추가 2026-06-01 15:49:41 +09:00
이대환
5fa4aa5c37 fix : 설정 > 패밀리사이트 설정 > 입력창 추가 - 스크립트 개선
fix : 상품관리 > 상품조회 > 상품 등록/복사재등록/수정 - 실무게(KG) 자릿수 제한 개선
2026-06-01 15:48:44 +09:00
이주일
f2038728fd fix: FAQ 상세 조회 Ajax Content-Type 추가 2026-06-01 09:56:19 +09:00
이주일
923d74d37a fix: FAQ 상세 조회 Ajax Content-Type 추가 2026-05-30 23:30:46 +09:00
이주일
2ec020ecd4 Merge remote-tracking branch 'origin/develop' into develop 2026-05-29 15:46:10 +09:00
이주일
d55f52b752 fix : gitignore 제외 2026-05-29 15:45:51 +09:00
이대환
3cddf4e038 주문관리 > 전체주문조회 > 엑셀 다운로드, 다운로드 항목설정 - 상품명(영문), HS Code, 실무게, 부피무게, 포장개수 추가
(cherry picked from commit 450e43aecb)
2026-05-29 15:19:32 +09:00
이대환
450e43aecb 주문관리 > 전체주문조회 > 엑셀 다운로드, 다운로드 항목설정 - 상품명(영문), HS Code, 실무게, 부피무게, 포장개수 추가 2026-05-29 15:19:19 +09:00
이대환
99bbfec448 쇼핑몰 상품상세, 주문결제화면 - 예상 적립 마일리지 관련
fix : 쇼핑몰 회원정보수정 - 취소 버튼
fix : 쇼핑몰 회원탈퇴 - 취소 버튼, 주요 혜택

(cherry picked from commit 1d72e28600)
2026-05-29 09:52:28 +09:00
이대환
1d72e28600 쇼핑몰 상품상세, 주문결제화면 - 예상 적립 마일리지 관련
fix : 쇼핑몰 회원정보수정 - 취소 버튼
fix : 쇼핑몰 회원탈퇴 - 취소 버튼, 주요 혜택
2026-05-29 09:51:04 +09:00
이주일
25fcfc3555 fix: MyActController 중복 메서드 제거 2026-05-28 23:57:45 +09:00
jilee4unity
e298e9066c add .gitignore and remove build artifacts 2026-05-28 23:41:46 +09:00
jilee4unity
3668cc89b2 merge master into develop - CscListRForm.jsp FAQ 아코디언 버그 수정 2026-05-28 23:34:06 +09:00
claudecode
de463cbb8f fix: FAQ 사용자 화면 아코디언 아코디언 Ajax 응답 처리 오류 수정
- CscListRForm.jsp 117번줄: data 변수 덮어쓰기 방지
  data = JSON.parse(...) → const parsed = JSON.parse(...)
- fn_branch_bbsctt_posble 호출 시 parsed 전달로 변경
- 원인: data 변수 재사용으로 data.result.moveAt 접근 불가
2026-05-28 23:09:49 +09:00
이대환
e293ffe451 ACI Express apikey 추가
(cherry picked from commit 262c9ba03e)
2026-05-28 18:26:25 +09:00
이대환
262c9ba03e ACI Express apikey 추가 2026-05-28 18:26:18 +09:00
이대환
acb8d314d9 ACI Express - ACI Key 발급 API
배송조회(운송장번호 조회) - aciExpress 팝업 적용
>> 쇼핑몰 주문/배송 > 주문 상세,
>> 주문 관리 > 전체주문조회 > 주문상세,
>> 주문 관리 > 출고 조회 > 출고 목록 조회,
>> 주문 관리 > 출고 조회 > 출고 상세 조회,
>> 주문 관리 > 출고 조회 > 출고 상태 변경,
>> 반품환불관리 > 반품환불 처리 > 반품/환불 상세 > 원주문 정보 펼쳐보기

(cherry picked from commit 1e1ee301d6)
2026-05-28 17:58:08 +09:00
이대환
45c85b6079 fix: 주문관리 > 전체주문조회 > 발주서 엑셀 다운로드 - 수취인 전화번호 복호화 2026-05-28 17:57:53 +09:00
이대환
7be7a8851d fix: 개인결제관리 > 개인결제 등록/수정 - 결제수단 체크박스
(cherry picked from commit 6ea1568800)
2026-05-28 17:57:16 +09:00
이주일
f590507308 fix : FAQ 카테고리 버튼 폰트 사이즈 조정 (15px → 14px) 2026-05-28 17:53:29 +09:00
이대환
1e1ee301d6 ACI Express - ACI Key 발급 API
배송조회(운송장번호 조회) - aciExpress 팝업 적용
>> 쇼핑몰 주문/배송 > 주문 상세,
>> 주문 관리 > 전체주문조회 > 주문상세,
>> 주문 관리 > 출고 조회 > 출고 목록 조회,
>> 주문 관리 > 출고 조회 > 출고 상세 조회,
>> 주문 관리 > 출고 조회 > 출고 상태 변경,
>> 반품환불관리 > 반품환불 처리 > 반품/환불 상세 > 원주문 정보 펼쳐보기
2026-05-28 17:53:15 +09:00
이대환
472d5b07e9 fix: 주문관리 > 전체주문조회 > 발주서 엑셀 다운로드 - 수취인 전화번호 복호화 2026-05-28 17:24:15 +09:00
이대환
6ea1568800 fix: 개인결제관리 > 개인결제 등록/수정 - 결제수단 체크박스 2026-05-28 17:21:34 +09:00
이주일
c08a3d3a90 fix : FAQ 카테고리 버튼 폰트 사이즈 조정 (15px → 14px) 2026-05-28 16:11:46 +09:00
김현욱
edcf9f7ad7 전화번호 암호화 문제 수정 2026-05-26 10:35:43 +09:00
이대환
5a5e9944da 주문관리 > 전체주문조회 > 발주서 엑셀 다운로드 2026-05-22 14:40:38 +09:00
이대환
7805d58c94 주문관리 > 전체주문조회 > 발주서 엑셀 다운로드 2026-05-22 14:39:25 +09:00
이대환
77fb6d7e19 결제 - 파라미터 추가(HS Code, 실무게, 부피무게, 포장갯수)
(cherry picked from commit 893a208c82)
2026-05-19 16:31:14 +09:00
이대환
893a208c82 결제 - 파라미터 추가(HS Code, 실무게, 부피무게, 포장갯수) 2026-05-19 16:31:02 +09:00
이대환
e5e4a72577 상품관리 > 상품조회 > 상품 등록/복사재등록/수정 - 상품명(영문), HS Code, 실무게(KG) 추가
(cherry picked from commit 5da6ad42d0)
2026-05-19 11:16:50 +09:00
이대환
5da6ad42d0 상품관리 > 상품조회 > 상품 등록/복사재등록/수정 - 상품명(영문), HS Code, 실무게(KG) 추가 2026-05-19 11:16:34 +09:00
이대환
f4370db796 결제 - 키움결제 네이버페이 CPID 관련처리
(cherry picked from commit 5997dc8de8)
2026-05-13 16:12:46 +09:00
이경숙
8294c9c591 결제 - 키움결제취소 네이버키 적용
(cherry picked from commit 7e54dd22f9)
2026-05-13 14:40:25 +09:00
이경숙
7e54dd22f9 결제 - 키움결제취소 네이버키 적용 2026-05-13 14:40:02 +09:00
이대환
5997dc8de8 결제 - 키움결제 네이버페이 CPID 관련처리 2026-05-12 16:27:28 +09:00
이대환
99a3c126f6 결제 - 키움결제 고객명 파라미터 추가
(cherry picked from commit fd419494b4)
2026-05-07 12:08:35 +09:00
이대환
fd419494b4 결제 - 키움결제 고객명 파라미터 추가 2026-05-07 12:08:27 +09:00
이대환
737ee90122 fix : 주문 > 주문 관리 > 전체주문조회 > 주문 상세 > 결제 처리내역 - 결제취소 완료/취소 출력 순서 개선
(cherry picked from commit e282db97ed)
2026-05-07 11:34:39 +09:00
이대환
e282db97ed fix : 주문 > 주문 관리 > 전체주문조회 > 주문 상세 > 결제 처리내역 - 결제취소 완료/취소 출력 순서 개선 2026-05-07 11:34:25 +09:00
이대환
c014f00a13 fix : 설정 > 배송설정 > 배송그룹 수정 - 일본 주소 옵션 수정
(cherry picked from commit 2d777adeb6)
2026-05-07 10:51:28 +09:00
이대환
2d777adeb6 fix : 설정 > 배송설정 > 배송그룹 수정 - 일본 주소 옵션 수정 2026-05-07 10:51:14 +09:00
이경숙
5d94218e98 결제 - 키움결제 운영 URL 수정
(cherry picked from commit e4b5803f24)
2026-05-06 17:52:35 +09:00
이경숙
e4b5803f24 결제 - 키움결제 운영 URL 수정 2026-05-06 17:52:13 +09:00
이경숙
16c373cb14 Merge remote-tracking branch 'origin/master' 2026-05-06 17:05:25 +09:00
이대환
59cf8da8e4 fix : 주문 > 주문관리 > 전체주문조회 > 주문상세보기 - 총 결제금액 원화 표시
(cherry picked from commit 9cc4a26f0f)
2026-04-30 17:40:17 +09:00
이대환
9cc4a26f0f fix : 주문 > 주문관리 > 전체주문조회 > 주문상세보기 - 총 결제금액 원화 표시 2026-04-30 17:40:09 +09:00
이대환
3fbd19a1e7 쇼핑몰 > 연령확인 팝업
(cherry picked from commit f3918ed7b1)
2026-04-30 16:17:15 +09:00
이대환
f3918ed7b1 쇼핑몰 > 연령확인 팝업 2026-04-30 16:16:58 +09:00
이대환
903374cbee 설정 > 패밀리사이트 설정, 환율 설정, 안내문구 설정 - 추가 2026-04-29 13:53:50 +09:00
이대환
891b0a7f4f fix : 설정 > 마일리지 설정 - 마일리지 사용조건 추가 2026-04-29 13:53:49 +09:00
이대환
fd385fe898 설정 > 패밀리사이트 설정, 환율 설정, 안내문구 설정 - 추가 2026-04-29 13:53:41 +09:00
이대환
6bf80ca297 fix : 설정 > 마일리지 설정 - 마일리지 사용조건 추가 2026-04-29 13:52:21 +09:00
김현욱
b0d1060dd7 메인페이지 미리보기 카테고리별 조회수정 2026-04-27 17:32:10 +09:00
이대환
d4d47751c0 fix : 쇼핑몰 모바일 - 햄버거메뉴 이전 (TabBar.jsp → Include.jsp) 2026-04-27 17:27:51 +09:00
이대환
16662c9e33 fix : 쇼핑몰 모바일 - 햄버거메뉴 이전 (TabBar.jsp → Include.jsp) 2026-04-27 17:24:10 +09:00
김현욱
e649dc3eca 메인페이지 미리보기 카테고리별 조회수정 2026-04-27 17:23:42 +09:00
이대환
174657ac2c fix : 프로모션 > 할인 이벤트 관리 > 이벤트 등록/복사/수정 - 이벤트 혜택 (할인) 개선
(cherry picked from commit 739cd09e1a)
2026-04-27 11:51:33 +09:00
이대환
739cd09e1a fix : 프로모션 > 할인 이벤트 관리 > 이벤트 등록/복사/수정 - 이벤트 혜택 (할인) 개선 2026-04-27 11:51:18 +09:00
이대환
5bce776193 fix : 프로모션 > 쿠폰발송관리 > 쿠폰 발급내역 팝업 - 함수 위치 이동
(cherry picked from commit 3d91eb6e52)
2026-04-24 13:59:46 +09:00
이대환
a6fdcbe2fb fix : 메인화면 미리보기 영역 추가 (베스트리뷰, 매거진, 공지, FAQ)
(cherry picked from commit 8f1a53d048)
2026-04-24 13:59:46 +09:00
이대환
3d91eb6e52 fix : 프로모션 > 쿠폰발송관리 > 쿠폰 발급내역 팝업 - 함수 위치 이동 2026-04-24 13:59:25 +09:00
이대환
8f1a53d048 fix : 메인화면 미리보기 영역 추가 (베스트리뷰, 매거진, 공지, FAQ) 2026-04-24 13:54:48 +09:00
김현욱
70bf2e68dd 쿠폰발송관리-마케팅대상검색 ajax오류 수정(1) 2026-04-23 11:49:36 +09:00
김현욱
c43eea70c5 쿠폰발송관리-마케팅대상검색 ajax오류 수정(1) 2026-04-23 11:46:07 +09:00
이대환
60314eb74f fix : 회원 목록 조회 - 검색조건 비교 방식 추가 2026-04-22 18:45:59 +09:00
이대환
08397d4e0a 결제 - 키움결제 네이버페이 관련 처리, 키움결제 네이버페이 포인트주문 관련처리
(cherry picked from commit 18bcf1e9de)
2026-04-22 18:45:01 +09:00
이대환
18bcf1e9de 결제 - 키움결제 네이버페이 관련 처리, 키움결제 네이버페이 포인트주문 관련처리 2026-04-22 18:44:52 +09:00
김현욱
6505bfd975 쿠폰발송관리-마케팅대상검색 ajax오류 수정 2026-04-22 18:16:32 +09:00
김현욱
21fb2f49d6 쿠폰발송관리-마케팅대상검색 ajax오류 수정 2026-04-22 18:14:40 +09:00
이대환
060ccf4e36 fix : 회원가입 안내 화면 - 가입 혜택 개선
fix : 업무사용자관리 > 업무사용자 등록

(cherry picked from commit a26dcabe4a)
2026-04-22 11:34:42 +09:00
이대환
a26dcabe4a fix : 회원가입 안내 화면 - 가입 혜택 개선
fix : 업무사용자관리 > 업무사용자 등록
2026-04-22 11:34:14 +09:00
이대환
500dba1467 fix : 쇼핑몰 모바일 - 햄버거메뉴 탭바 개선 및 이전 (Include.jsp → TabBar.jsp)
(cherry picked from commit bbe2e20e4f)
2026-04-21 16:23:35 +09:00
이대환
bbe2e20e4f fix : 쇼핑몰 모바일 - 햄버거메뉴 탭바 개선 및 이전 (Include.jsp → TabBar.jsp) 2026-04-21 16:23:24 +09:00
이대환
2ecfaf72c9 fix : 설정 > 팝업설정 > 팝업정보 등록 - 팝업 위치 문구 추가(모바일)
(cherry picked from commit 017211f121)
2026-04-20 18:33:20 +09:00
이대환
017211f121 fix : 설정 > 팝업설정 > 팝업정보 등록 - 팝업 위치 문구 추가(모바일) 2026-04-20 18:33:10 +09:00
이대환
02e46d49e9 fix : 관리자 메인 - 쇼핑몰 코드 할당
(cherry picked from commit a08c67f7ff)
2026-04-20 16:21:10 +09:00
이대환
a08c67f7ff fix : 관리자 메인 - 쇼핑몰 코드 할당 2026-04-20 16:20:59 +09:00
이대환
9807d160cd fix : 관리자 구독서비스 등록/복사재등록 - 실판매가 자동 계산, 판매수량 추가
(cherry picked from commit c68400a4e6)
2026-04-20 12:20:07 +09:00
이대환
c68400a4e6 fix : 관리자 구독서비스 등록/복사재등록 - 실판매가 자동 계산, 판매수량 추가 2026-04-20 12:19:57 +09:00
이대환
27ca12d172 fix : 반품교환 → 배송/반품 문구 변경
(cherry picked from commit 329b1f4b4c)
2026-04-17 10:41:59 +09:00
이대환
329b1f4b4c fix : 반품교환 → 배송/반품 문구 변경 2026-04-17 10:40:48 +09:00
이대환
8c63f6e8cf fix : 주문/구독서비스 결제 > 무통장 결제 - 결제사명 적용
(cherry picked from commit da46a84a69)
2026-04-16 17:13:29 +09:00
이대환
da46a84a69 fix : 주문/구독서비스 결제 > 무통장 결제 - 결제사명 적용 2026-04-16 17:13:09 +09:00
이경숙
d49666bac0 결제 - 키움결제 네이버페이 포인트주문취소 관련처리 2026-04-16 12:09:34 +09:00
이경숙
eff6ce35bd 결제 - 키움결제 네이버페이 포인트주문취소 관련처리 2026-04-16 12:08:55 +09:00
이경숙
c78197583f Merge remote-tracking branch 'origin/master' 2026-04-16 12:07:04 +09:00
이대환
b0c35f531f fix : 상점관리 > 쇼핑몰관리 > 쇼핑몰 등록/수정 - 구독서비스 결제수단 추가
(cherry picked from commit 16523bba0a)
2026-04-16 11:58:33 +09:00
이대환
16523bba0a fix : 상점관리 > 쇼핑몰관리 > 쇼핑몰 등록/수정 - 구독서비스 결제수단 추가 2026-04-16 11:58:15 +09:00
이경숙
81757e1217 결제 - 키움결제 네이버페이 포인트주문 관련처리 2026-04-15 18:04:59 +09:00
이경숙
28a4552815 결제 - 키움결제 네이버페이 포인트주문 관련처리 2026-04-15 18:04:30 +09:00
김현욱
54b7b3ee45 구독 결제화면 설정 수정 2026-04-15 18:02:59 +09:00
이경숙
7bfcae2f99 Merge remote-tracking branch 'origin/master' 2026-04-15 18:02:10 +09:00
김현욱
45202b0006 구독 결제화면 설정 수정 2026-04-15 17:11:27 +09:00
이대환
3fc2d38980 fix : 주문관리 > 전체주문조회 > 다운로드 항목설정 - 주문구분(subsvc_at) 항목 추가, 상품명 항목 개선
(cherry picked from commit 9722f2135f)
2026-04-15 17:07:21 +09:00
이대환
9722f2135f fix : 주문관리 > 전체주문조회 > 다운로드 항목설정 - 주문구분(subsvc_at) 항목 추가, 상품명 항목 개선 2026-04-15 17:07:06 +09:00
이경숙
920ba7de31 Merge remote-tracking branch 'origin/master' 2026-04-15 16:09:42 +09:00
김현욱
7e13117ad4 결제화면에서 무통장 결제시 설정 수정 2026-04-15 14:57:44 +09:00
김현욱
46755ce33d 결제화면에서 무통장 결제시 설정 수정 2026-04-15 14:57:29 +09:00
이대환
da27656993 fix : 주문관리 > 전체주문조회, 주문상세 - 구독서비스 주문 건 상품준비 상태 변경 방지
(cherry picked from commit c02fc822ea)
2026-04-15 14:47:22 +09:00
이대환
c02fc822ea fix : 주문관리 > 전체주문조회, 주문상세 - 구독서비스 주문 건 상품준비 상태 변경 방지 2026-04-15 14:46:59 +09:00
김현욱
7cb633a784 Merge remote-tracking branch 'origin/master' 2026-04-15 14:12:14 +09:00
김현욱
165d8c244f 출고조회 화면 수정 2026-04-15 14:12:06 +09:00
김현욱
ef77395a37 출고조회 화면 수정 2026-04-15 14:11:59 +09:00
이대환
b9749e8162 fix : 로그아웃
(cherry picked from commit bb5dd223c9)
2026-04-15 10:06:32 +09:00
이대환
bb5dd223c9 fix : 로그아웃 2026-04-15 10:06:15 +09:00
이대환
cac103e3ec fix : 주문/배송 상세조회(모바일) - 여러곳 배송/선물하기 주문취소 개선
(cherry picked from commit eda43b3d17)
2026-04-14 15:48:03 +09:00
이대환
eda43b3d17 fix : 주문/배송 상세조회(모바일) - 여러곳 배송/선물하기 주문취소 개선 2026-04-14 15:47:38 +09:00
이대환
14fb6f8328 fix : 구독서비스 주문/배송 - 주문 접수(15) → 주문 무효(95) 버튼 추가
(cherry picked from commit a1d95d1e01)
2026-04-14 11:03:36 +09:00
이대환
a1d95d1e01 fix : 구독서비스 주문/배송 - 주문 접수(15) → 주문 무효(95) 버튼 추가 2026-04-14 11:00:52 +09:00
이대환
b42eee8e8e fix : 관리자 구독서비스 수정 - 실판매가 자동 계산, 판매수량 추가 2026-04-13 17:45:42 +09:00
이대환
71914f125e fix : 관리자 구독서비스 수정 - 실판매가 자동 계산, 판매수량 추가 2026-04-13 17:45:32 +09:00
이대환
ce15736c9d 구독서비스 결제 - 주문무효 처리 후 재고 및 상태 변경 2026-04-13 16:45:09 +09:00
이대환
81b9a872db 구독서비스 결제 - 주문무효 처리 후 재고 및 상태 변경 2026-04-13 16:44:07 +09:00
이대환
576c5c5734 Merge remote-tracking branch 'origin/master' 2026-04-13 16:43:07 +09:00
김현욱
ce9b1c1bfc 관리자 게시판 대쉬보드 오류 수정 2026-04-13 16:36:14 +09:00
김현욱
657ecc9d2e 관리자 게시판 대쉬보드 오류 수정 2026-04-13 16:35:59 +09:00
김현욱
21c074500d 마이페이지 일반문의 추가(PC/모바일) 2026-04-13 15:58:32 +09:00
김현욱
1f96164136 마이페이지 일반문의 추가(PC/모바일) 2026-04-13 14:29:40 +09:00
이대환
85e1922188 Merge remote-tracking branch 'origin/master' 2026-04-13 12:28:16 +09:00
이경숙
9f8e6408aa 결제 - 키움결제 네이버페이 관련 처리 2026-04-10 18:45:08 +09:00
이경숙
308c515038 결제 - 키움결제 네이버페이 관련 처리 2026-04-10 18:44:41 +09:00
이경숙
87b9da9475 Merge remote-tracking branch 'origin/master' 2026-04-10 18:40:22 +09:00
김현욱
3e430345ab 배송료(조건부) 계산 변경 2026-04-10 16:56:21 +09:00
김현욱
f97b553071 배송료(조건부) 계산 변경(1) 2026-04-10 16:55:53 +09:00
김현욱
c8c90d8d56 배송료(조건부) 계산 변경 2026-04-10 16:40:28 +09:00
이경숙
b059648cf0 Merge remote-tracking branch 'origin/master' 2026-04-10 16:37:10 +09:00
김현욱
e24049ae22 배송그룹 설정(조건부) 화면 수정 2026-04-10 16:16:30 +09:00
김현욱
2738b519a4 배송그룹 설정(조건부) 화면 수정(1) 2026-04-10 16:15:01 +09:00
김현욱
e68507a5b5 배송그룹 설정(조건부) 화면 수정 2026-04-10 16:11:08 +09:00
김현욱
b54c127330 젠킨스파일 점검페이지 웹 블록 설정 및 해제 추가 2026-04-10 16:03:44 +09:00
이대환
92ab84e7f3 구독서비스 결제 - 결제취소 처리 후 재고 및 상태 변경 2026-04-10 15:53:10 +09:00
이대환
e40b140926 구독서비스 결제 - 결제취소 처리 후 재고 및 상태 변경 2026-04-10 15:45:29 +09:00
김현욱
0718316c84 젠킨스 파일 수정(2) 2026-04-10 14:07:03 +09:00
김현욱
2f31b9b306 젠킨스 파일 수정(1) 2026-04-10 14:04:04 +09:00
김현욱
031a05ed03 젠킨스 파일 수정 2026-04-10 13:54:58 +09:00
이대환
089210a16e 구독서비스 결제 - 주문 상품 테이블 다중 Insert 적용 2026-04-09 11:28:12 +09:00
이대환
9d376958b7 구독서비스 결제 - 주문 상품 테이블 다중 Insert 적용 2026-04-09 11:27:53 +09:00
이경숙
c418d01f46 결제 - 키움결제 결제취소 관련 처리 2026-04-08 16:48:13 +09:00
이경숙
e648e7462d 결제 - 키움결제 결제취소 관련 처리 2026-04-08 16:47:58 +09:00
이경숙
0bbd8e3891 Merge remote-tracking branch 'origin/master' 2026-04-08 16:45:21 +09:00
이대환
a9c717e24c 구독서비스 결제 - 결제 처리 후 재고 및 상태 변경 2026-04-08 14:45:19 +09:00
이대환
60ff733d4d 구독서비스 결제 - 결제 처리 후 재고 및 상태 변경 2026-04-08 14:44:42 +09:00
이대환
21115a9c34 Merge remote-tracking branch 'origin/master' 2026-04-08 09:54:58 +09:00
김현욱
946f1f9a95 화면타이틀 주문 > 마일리지 변경 2026-04-07 18:41:38 +09:00
김현욱
2274326754 화면타이틀 주문 > 마일리지 변경 2026-04-07 18:41:25 +09:00
김현욱
ff6a4146c9 상품 상세페이지 무료배송 표시 2026-04-07 16:58:44 +09:00
김현욱
e567b3bbbc 상품 상세페이지 무료배송 표시 2026-04-07 16:57:56 +09:00
이대환
cb9c22ec5b 구독서비스 - 키움 결제 적용 2026-04-07 10:21:41 +09:00
이대환
925282fa2b 구독서비스 - 키움 결제 적용 2026-04-07 10:21:22 +09:00
이대환
56b1f70ce9 Merge remote-tracking branch 'origin/master' 2026-04-07 09:48:06 +09:00
이경숙
4bf7b05081 결제 - 키움결제 log삭제 2026-04-06 19:47:27 +09:00
이경숙
30025eaaad 결제 - 키움결제 log삭제 2026-04-06 19:45:46 +09:00
이경숙
e6f8d4a5f1 결제 - 키움결제 주문자명 PC인코딩 확인 2026-04-06 19:39:36 +09:00
이경숙
c776165df5 결제 - 키움결제 주문자명 PC인코딩 확인 2026-04-06 19:39:10 +09:00
이경숙
f9f561d05a Merge remote-tracking branch 'origin/master' 2026-04-06 19:35:40 +09:00
김현욱
105da88530 관리자 로고변경 추가 2026-04-06 18:49:02 +09:00
김현욱
58a1931f90 관리자, 통합관리자 개발로고로 변경 2026-04-06 18:47:31 +09:00
이대환
18a08fc439 fix : 구독서비스 - 결제 처리 전 정합성 검사 2026-04-06 16:24:22 +09:00
이대환
43d819d5a1 fix : 구독서비스 - 결제 처리 전 정합성 검사 2026-04-06 16:24:01 +09:00
이경숙
86c0b9cd10 Merge remote-tracking branch 'origin/master' 2026-04-06 14:43:08 +09:00
김현욱
9f7916d913 defailt.css .product-badge 컬러 수정(1) 2026-04-06 14:34:47 +09:00
김현욱
cb4c9e6d97 defailt.css .product-badge 컬러 수정 2026-04-06 14:34:27 +09:00
김현욱
497545f730 무료배송에 개별배송 적용 2026-04-06 14:23:50 +09:00
김현욱
9301624be5 defailt.css .product-badge 컬러 수정 2026-04-06 14:20:15 +09:00
김현욱
a88977dd6d 무료배송에 개별배송 적용 2026-04-06 12:14:22 +09:00
이대환
8d4aa4277f Merge remote-tracking branch 'origin/master' 2026-04-03 09:50:03 +09:00
김현욱
936bfcb6a7 마일리지 '원' > '점'으로 수정 2026-04-02 17:48:41 +09:00
김현욱
92347d3304 무료배송 그룹에 개별배송 추가 2026-04-02 17:43:03 +09:00
김현욱
194d626b62 마일리지 '원' > '점'으로 수정 2026-04-02 17:39:55 +09:00
이대환
a9e098b238 fix : 관리자 구독서비스 등록 - 기본&판매정보 입력값 0 허용 2026-04-02 17:36:43 +09:00
이대환
eac94e1e2b fix : 관리자 구독서비스 등록 - 기본&판매정보 입력값 0 허용 2026-04-02 17:36:04 +09:00
김현욱
9b9b28ede4 무료배송 그룹에 개별배송 추가 2026-04-02 16:35:23 +09:00
이경숙
649f1d4ed6 결제 - 키움결제 주문자명 모바일 인코딩 확인4 2026-04-02 16:12:44 +09:00
이경숙
ccde39374d 결제 - 키움결제 주문자명 모바일 인코딩 확인4 2026-04-02 16:12:22 +09:00
이경숙
71fe6c9a9a 결제 - 키움결제 주문자명 모바일 인코딩 확인3 2026-04-02 15:58:50 +09:00
이경숙
0f7938eec7 결제 - 키움결제 주문자명 모바일 인코딩 확인3 2026-04-02 15:58:30 +09:00
이경숙
bff3e3f0c9 결제 - 키움결제 주문자명 모바일 인코딩 확인2 2026-04-02 15:52:20 +09:00
이경숙
ef4b40682a 결제 - 키움결제 주문자명 모바일 인코딩 확인2 2026-04-02 15:51:59 +09:00
이경숙
f00a4eff6b 결제 - 키움결제 주문자명 모바일 인코딩 확인 2026-04-02 15:44:22 +09:00
이경숙
cbb31223f1 결제 - 키움결제 주문자명 모바일 인코딩 확인 2026-04-02 15:44:09 +09:00
이경숙
3332952125 결제 - 키움결제 모바일 적용 이동테스트 버전6 2026-04-02 15:12:45 +09:00
이경숙
83aa30e4f5 결제 - 키움결제 모바일 적용 이동테스트 버전6 2026-04-02 15:12:30 +09:00
이경숙
ef37efc226 Merge remote-tracking branch 'origin/master' 2026-04-02 12:36:36 +09:00
이대환
c39b50bf82 fix : 쇼핑몰 배송지 관리 - 배송지 등록 팝업(모달) 크기 조절 2026-04-02 11:32:24 +09:00
이대환
e4fc054a78 fix : 쇼핑몰 배송지 관리 - 배송지 등록 팝업(모달) 크기 조절 2026-04-02 11:32:10 +09:00
이경숙
08240b57bc 결제 - 키움결제 모바일 적용 이동테스트 버전5 2026-04-01 19:25:04 +09:00
이경숙
13fe17484d 결제 - 키움결제 모바일 적용 이동테스트 버전5 2026-04-01 19:24:51 +09:00
이경숙
0bb0ad9102 결제 - 키움결제 모바일 적용 이동테스트 버전4 2026-04-01 19:03:34 +09:00
이경숙
9275c9189e 결제 - 키움결제 모바일 적용 이동테스트 버전4 2026-04-01 19:03:25 +09:00
이경숙
31eeaec62c 결제 - 키움결제 모바일 적용 이동테스트 버전3 2026-04-01 18:55:03 +09:00
이경숙
94f853d71d 결제 - 키움결제 모바일 적용 이동테스트 버전3 2026-04-01 18:54:52 +09:00
이경숙
9d382d91ce 결제 - 키움결제 모바일 적용 이동테스트 버전2 2026-04-01 18:45:59 +09:00
이경숙
80d8447eae 결제 - 키움결제 모바일 적용 이동테스트 버전2 2026-04-01 18:45:46 +09:00
이경숙
59985dcede 결제 - 키움결제 모바일 적용 이동테스트 버전 2026-04-01 18:18:35 +09:00
이경숙
52f9c11244 결제 - 키움결제 모바일 적용 이동테스트 버전 2026-04-01 18:18:00 +09:00
이대환
09f40f62e2 쇼핑몰 - 활성 환경(Active Profile)에 따른 타이틀 변경 2026-04-01 17:07:03 +09:00
이대환
569d5e8904 통합 관리자 - 활성 환경(Active Profile)에 따른 타이틀 변경 2026-04-01 17:07:03 +09:00
이대환
66df63b232 관리자 - 활성 환경(Active Profile)에 따른 타이틀 변경 2026-04-01 17:07:02 +09:00
이경숙
6c55f53647 결제 - 키움결제 모바일 적용 2026-04-01 17:05:19 +09:00
이대환
9207d58b04 쇼핑몰 - 활성 환경(Active Profile)에 따른 타이틀 변경 2026-04-01 17:05:11 +09:00
이경숙
fd5fb1db80 결제 - 키움결제 모바일 적용 2026-04-01 17:04:45 +09:00
이대환
113bc9ffcc 통합 관리자 - 활성 환경(Active Profile)에 따른 타이틀 변경 2026-04-01 17:04:13 +09:00
이경숙
ac27213169 Merge remote-tracking branch 'origin/master' 2026-04-01 17:02:58 +09:00
이대환
371f1fa471 관리자 - 활성 환경(Active Profile)에 따른 타이틀 변경 2026-04-01 16:19:22 +09:00
이경숙
33bb861300 결제 - 키움결제 매출전표에 키움 링크 추가 2026-04-01 15:36:35 +09:00
이경숙
367ade4bad 결제 - 키움결제 매출전표에 키움 링크 추가 2026-04-01 15:35:38 +09:00
이대환
784ea1a6aa fix : 쇼핑몰 구독서비스 - 구독서비스 정보 조건부 숨김처리
fix : 관리자 구독서비스 수정 - 기본&판매정보 입력값 0 허용, 재고정책 변경 시 판매가능 재고수량 초기화
2026-04-01 15:14:31 +09:00
이대환
2e2bf59021 fix : 쇼핑몰 구독서비스 - 구독서비스 정보 조건부 숨김처리
fix : 관리자 구독서비스 수정 - 기본&판매정보 입력값 0 허용, 재고정책 변경 시 판매가능 재고수량 초기화
2026-04-01 15:14:24 +09:00
이경숙
92a50f7b39 결제 - 키움결제 중간 결제창 삭제 2026-03-31 18:19:13 +09:00
이경숙
4a91b40254 결제 - 키움결제 중간 결제창 삭제 2026-03-31 18:19:00 +09:00
이경숙
6e48c10f60 결제 - 키움결제 sitemid db 연결 2026-03-31 17:53:13 +09:00
이경숙
5ac14532e2 결제 - 키움결제 sitemid db 연결 2026-03-31 17:52:57 +09:00
이경숙
93a00f0ac6 결제 - 키움결제 무이자할부 수정 2026-03-31 16:38:06 +09:00
이경숙
a434e3eade 결제 - 키움결제 무이자할부 수정 2026-03-31 16:37:54 +09:00
이경숙
ed20ff652f 결제 - 키움결제 승인날짜 수정 2026-03-31 16:28:08 +09:00
이경숙
9a61e308e1 결제 - 키움결제 승인날짜 수정 2026-03-31 16:27:25 +09:00
이경숙
dbaf3d8dfe 결제 - 키움결제 적용 1차 2026-03-31 14:48:23 +09:00
이경숙
7e98b7acfb 결제 - 키움결제 적용 3차 2026-03-31 14:34:47 +09:00
이경숙
2632b23056 결제 - 키움결제 적용 3차 2026-03-31 14:31:37 +09:00
이경숙
0c2be2d1d2 결제 - 키움결제 적용 2차 2026-03-30 18:44:05 +09:00
이경숙
63b675f435 결제 - 키움결제 적용 2차 2026-03-30 18:35:06 +09:00
이대환
1df2a1ab65 개발환경 세팅 수정
(cherry picked from commit 8fd58d80b0)
2026-03-30 17:03:05 +09:00
이대환
8fd58d80b0 개발환경 세팅 수정 2026-03-30 17:02:48 +09:00
이대환
3a00e1ab65 fix : 쇼핑몰 주문결제화면 - 배송지 정합성 검사(모바일) 2026-03-30 14:42:06 +09:00
이대환
955979b7d6 fix : 쇼핑몰 주문결제화면 - 배송지 정합성 검사(모바일) 2026-03-30 14:41:48 +09:00
김현욱
085ae7f2b4 개발환경 세팅 수정 2026-03-30 13:27:54 +09:00
이경숙
03193351cc Merge remote-tracking branch 'origin/master' 2026-03-27 18:34:43 +09:00
이경숙
8573a3e7a4 결제 - 키움결제 적용 1차 2026-03-27 18:34:29 +09:00
김현욱
f248c38d72 개발환경 세팅 수정(2) 2026-03-27 18:10:17 +09:00
김현욱
8bc5302f4f 개발환경 세팅 수정(1) 2026-03-27 18:06:32 +09:00
김현욱
4b0b0b3c63 개발환경 세팅 수정 2026-03-27 17:58:37 +09:00
이대환
87efc0362e fix : 마이페이지 정보 조회 쿼리 개선 2026-03-27 15:31:02 +09:00
이대환
d6927d16a2 fix : 쇼핑몰 주문결제화면 - 배송지 정합성 검사 2026-03-27 14:26:07 +09:00
이대환
d4fc20fcec fix : 쇼핑몰 주문실패 화면 - 구독서비스 주문실패 분기 추가 2026-03-27 11:53:52 +09:00
이대환
5aa87c2526 fix : 쇼핑몰 주문완료 화면 - 구독서비스 주문완료 분기 추가 2026-03-27 11:49:32 +09:00
김현욱
3007f0780d 통합관리자 로그인 문구 수정 2026-03-26 18:05:58 +09:00
이경숙
721e28e4c2 결제 - DBurl 테스트 관련 수정 2026-03-26 16:25:55 +09:00
이경숙
b244579fca 결제관련 수정 2026-03-26 14:38:08 +09:00
김현욱
e1616910cd 마이페이지 > 주문배송 목록, 상세 수정 2026-03-25 17:48:14 +09:00
김현욱
5b483bd3b6 관리자, 통합관리자 로고변경 2026-03-25 17:46:46 +09:00
김현욱
c718b84439 전체주문조회화면(상세)에서 총결제금액 원화 표시 2026-03-25 16:51:02 +09:00
김현욱
eb1085836d 마이페이지 > 반품환불내역 클릭 시 동작 상태 동기화(PC,모바일) 2026-03-25 16:42:34 +09:00
김현욱
75355d63e6 warning 제거 2026-03-25 15:36:25 +09:00
김현욱
7df8d86ecc 주문 등록 주석 제거 2026-03-25 15:22:13 +09:00
이대환
2caa549e23 구독서비스 결제 적용(모바일) 2026-03-25 11:15:09 +09:00
김현욱
3a736fab1b 일반주문 할인 및 배송비 계산 수정(2) 2026-03-24 18:08:00 +09:00
이대환
393fb35802 fix : 구독서비스 결제 적용 2026-03-24 16:22:28 +09:00
이경숙
7b0f7327dc return url 파라미터 출력 추가 2026-03-23 16:31:28 +09:00
이경숙
534a8cf3da 키움결제 테스트 js 부분 수정 2026-03-23 16:16:11 +09:00
이경숙
b0b9ae46be 키움결제 테스트 2026-03-23 16:04:25 +09:00
김현욱
ef4f5f473c 일반주문 할인 및 배송비 계산 수정(1) 2026-03-23 15:35:42 +09:00
이대환
9a7386a08c 구독서비스 결제 적용(모바일) 2026-03-23 15:10:26 +09:00
jazz
1c96c1f1dd fix : 적립마일리지 0원 노출안함 & 구매시 예상적립내용 0원 노출 안함 2026-03-23 13:45:35 +09:00
jazz
0a05ab07d3 fix : 상품준비(35) 결제취소 가능하도록 수정 2026-03-20 18:21:39 +09:00
jazz
0cd6419b0a fix : 전체주문목록 주문구분 조건 추가 2026-03-20 18:04:02 +09:00
jazz
90deed795f fix : 구독서비스 사용자 상세 버튼명 수정 2026-03-20 14:35:44 +09:00
jazz
cf3905016c fix : 카테고리 상품목록 가장위로 2026-03-20 14:05:41 +09:00
jazz
808c124887 Merge remote-tracking branch 'origin/master' 2026-03-20 13:59:02 +09:00
jazz
f8763a0bea fix : 카테고리 상품목록 (모바일) 가장위로 2026-03-20 13:58:57 +09:00
이대환
bf427fcf53 구독서비스 결제 적용 2026-03-20 11:53:44 +09:00
jazz
60ce975739 fix : 화폐단위수정 2026-03-19 17:58:09 +09:00
이대환
a10847214d rollback : 장바구니 상품 목록 조회 쿼리 롤백 2026-03-19 15:46:59 +09:00
이대환
f0e614ee4a fix : 구독서비스 진행 현황 - 이미지 사이즈 조절 2026-03-19 10:38:08 +09:00
jazz
df45947913 Merge remote-tracking branch 'origin/master' 2026-03-19 10:24:22 +09:00
jazz
ac712b3d68 fix : 구독서비스 상세화면 환불금액 수정 2026-03-19 10:24:13 +09:00
이대환
bcc7371b7a 구독서비스 결제 적용 2026-03-19 10:09:51 +09:00
jazz
3e77f9bf31 fix : 쿠폰이미지 2026-03-18 14:59:57 +09:00
jazz
2c1d0425a4 fix : 쿠폰이미지 2026-03-18 14:43:24 +09:00
jazz
1640a89ec2 fix : 사용자 주문상세 반품신청 버튼 변경 2026-03-18 10:21:03 +09:00
jazz
fa337ec3a7 fix : 이메일/sms발송화면 호출개선 2026-03-17 17:57:16 +09:00
jazz
a229a7fec0 Merge remote-tracking branch 'origin/master' 2026-03-17 16:54:39 +09:00
jazz
d1573623a8 fix : 반품환불처리 원화계산로직 수정 2026-03-17 16:54:30 +09:00
김현욱
82f04ec36e 회원가입, 마이페이지에 휴대폰 번호 추가(1) 2026-03-17 15:35:46 +09:00
김현욱
c4d5db482d 회원가입, 마이페이지에 휴대폰 번호 추가 2026-03-17 15:31:12 +09:00
jazz
6f50cacde2 fix : 반품신청 주의사항 사이즈 변경 2026-03-17 15:00:11 +09:00
jazz
a7678b7b5a fix : 주문(구독서비스)상세 문구삭제 2026-03-17 13:34:41 +09:00
jazz
21baeb14b0 fix : 배송지관리 모달사이즈 조절 2026-03-17 12:13:14 +09:00
jazz
4d5f9c0903 fix : 비화원 장바구니 구매하기 화면 접근제어 2026-03-17 11:38:31 +09:00
jazz
b73bd46bd1 fix : 통합관리자 쇼핑몰 수정 - 팔때환율 제거 2026-03-17 10:35:56 +09:00
jazz
aa7b83e331 Merge remote-tracking branch 'origin/master' 2026-03-13 11:46:13 +09:00
jazz
83024e46d0 fix : 관리자 구독서비스 결제취소 2026-03-13 11:45:58 +09:00
김현욱
9336e895b0 환율적용 원화 결제 적용(4) 2026-03-13 10:28:53 +09:00
김현욱
ebe39d5037 환율적용 원화 결제 적용(3) 2026-03-13 10:27:26 +09:00
jazz
fa6371a099 fix : 관리자 결제취소, 환불 원화추가 2026-03-12 17:20:15 +09:00
김현욱
2edb9c30c7 환율적용 원화 결제 적용(2) 2026-03-12 15:37:40 +09:00
jazz
df09e3911d fix : 관리자 결제취소, 환불 원화추가 2026-03-12 14:28:09 +09:00
김현욱
da578da9e0 환율적용 원화 결제 적용(1) 2026-03-11 17:41:19 +09:00
이대환
c0410a82f6 fix : 배송지 관리 팝업 - 배송지 정보 선택 버튼 추가 2026-03-10 16:23:32 +09:00
김현욱
da9076981c 장바구니 및 구매패이지 원화 추가(1) 2026-03-10 15:36:44 +09:00
jazz
89d0978728 Merge remote-tracking branch 'origin/master' 2026-03-10 12:09:49 +09:00
jazz
e7a9499780 fix : 관리자 결제취소, 환불 원화추가 2026-03-10 12:09:42 +09:00
이대환
6114b7648c fix : 배송지 관리 팝업 - 배송지 정보 선택 버튼 추가 2026-03-10 11:15:49 +09:00
김현욱
c82f48966a 개인통관부호 처리 추가(2) 2026-03-06 14:56:19 +09:00
jazz
3dc906cfc6 fix : 결제취소, 환불 원화추가 2026-03-05 17:59:33 +09:00
이대환
1ed4ceafe8 fix : 주문결제 > 배송지 등록/수정 - 일본 주소(일본어) 옵션 추가(모바일) 2026-03-04 15:07:49 +09:00
jazz
066153a36b fix : 결제취소, 환불 원화추가 2026-03-04 14:39:26 +09:00
이대환
fdeb8ae26d 구독서비스 결제 화면 적용(모바일) 2026-03-04 11:20:53 +09:00
김현욱
38f85a7409 개인통관부호 처리 추가(1) 2026-03-03 18:15:11 +09:00
이대환
1b0a6f9624 fix : 쇼핑몰 배송지 관리 - 배송지 등록/수정 정합성 검사 2026-03-03 18:01:38 +09:00
이대환
381a53f332 fix : crm 주문등록 - 상품 추가 시 배송지 초기화 방지 2026-03-03 14:22:23 +09:00
이대환
4064f30bb9 구독서비스 결제 화면 적용(모바일) 2026-03-03 13:26:03 +09:00
jazz
797b36e42f fix : 사용자 마이페이지 일반주문상세내역 결제취소 조건 수정 2026-03-03 10:55:12 +09:00
jazz
7be3cedd31 fix : 관리자 주문목록 / 주문상세 수정 2026-02-27 15:51:58 +09:00
jazz
4512525495 Merge remote-tracking branch 'origin/master' 2026-02-27 15:19:47 +09:00
jazz
e24d0ef704 fix : 관리자 주문목록 / 주문상세 수정 2026-02-27 15:19:35 +09:00
김현욱
3ee3e1964e 개인통관부호 조회 추가 2026-02-27 14:39:45 +09:00
jazz
30cc498633 fix : 마이페이지 구독서비스 목록/상세 수정 2026-02-27 11:33:26 +09:00
jazz
b4d9aeba48 Merge remote-tracking branch 'origin/master' 2026-02-26 14:11:50 +09:00
jazz
f1bbe7b07c fix : 마이페이지 반품환불 원화금액 추가 2026-02-26 14:11:35 +09:00
김현욱
d3438b762f crm 스크립트 path 수정 2026-02-26 14:06:25 +09:00
이대환
43508a858b 구독서비스 결제 화면 적용 2026-02-26 11:07:19 +09:00
이대환
0ca70094c9 fix : 배송지 관리 팝업 - 배송지 정보 세팅 js 개선 2026-02-26 11:05:30 +09:00
jazz
176e0d874e fix : 반품환불 원화금액 추가 2026-02-26 10:41:46 +09:00
김현욱
9b91679ec6 배송그룹 설정에 따른 배송 처리 로직 추가 2026-02-25 18:04:09 +09:00
김현욱
e261fbff7d 안내문구 수정 2026-02-25 15:13:59 +09:00
jazz
2579d5c3f9 fix : 최근검색에 삭제 오류 수정 2026-02-25 11:29:06 +09:00
jazz
e731981a26 fix : ajax 오류 메시지 추출로직변경
as-is
	let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
	alert(message.errorMsg);

to-be
    let message = JSON.parse(request.responseText).resBody.result;
    alert(message);
2026-02-25 10:51:56 +09:00
jazz
048bea431d fix : 마이페이지 반품/교환/취소 상세조회 2026-02-24 16:15:35 +09:00
이대환
dd67ee3b44 구독서비스 결제 화면 2026-02-24 10:28:43 +09:00
이대환
9c52b23fc0 구독서비스 결제 화면 2026-02-24 10:19:05 +09:00
jazz
c7f9910b44 fix : 마이페이지 반품/교환/취소 환불 조회조건 유지 2026-02-23 18:24:07 +09:00
이대환
f5ad9d1eed 비회원 장바구니/결제창 접근 제한 2026-02-20 18:25:52 +09:00
이대환
ae53e18a1e 비회원 장바구니/결제창 접근 제한 테스트 2026-02-20 18:14:41 +09:00
이대환
bdab97c65c fix : 구독서비스 목록 조회 쿼리 개선 2026-02-20 17:39:38 +09:00
jazz
666fef8bef fix : 파일사이즈 변경 2026-02-20 16:57:34 +09:00
이대환
888c02b3f2 fix : 게시글 등록 - 반품 안내문구
fix : 주문/배송조회 > 주문상세 - 무효/취소/반품 내역 제거
2026-02-20 16:45:56 +09:00
jazz
293bb016b8 fix : 구독서비스 상품준비 관리 최종차수 늦어진건 색표시 2026-02-20 11:32:23 +09:00
이대환
4ea4289a85 fix : 쇼핑몰 구독서비스 하단 탭바(모바일) 2026-02-20 10:20:04 +09:00
이대환
1419041bb9 fix : 쇼핑몰 구독서비스 스크롤 상단바 추가 2026-02-19 16:37:57 +09:00
jazz
33f82a1f94 fix : 관리자 전체 주문목록, 엑셀다운로드 2026-02-19 14:39:47 +09:00
jazz
b2a67966ee fix : 관리자 전체 주문목록, 주문->출고처리 출고처리 수정 2026-02-19 13:46:13 +09:00
이대환
3e64dd72a0 fix : 마이페이지 메인 - 최근 주문 (구독서비스) 추가 2026-02-19 10:00:37 +09:00
이대환
40dc7f7c85 fix : 구독서비스 주문/배송 - 적립금 관련 표시 제거
fix : 주문결제 > 배송지 정보 세팅 - 배송지역코드 관련 로직 추가
2026-02-13 17:48:33 +09:00
jazz
2448e856ba fix : 관리자 전체 주문목록, 주문->출고처리 목록조회 2026-02-12 18:23:38 +09:00
jazz
272cd36110 fix : 관리자 전체 주문목록, 주문->출고처리 목록조회 2026-02-12 17:22:05 +09:00
396 changed files with 30680 additions and 6891 deletions

42
Jenkinsfile vendored
View File

@@ -8,7 +8,7 @@ pipeline {
environment { environment {
SERVER_IP = "${DEPLOY_WAS_SERVER_IP}" SERVER_IP = "${DEPLOY_WAS_SERVER_IP}"
SERVER_USER = "tomcat" SERVER_USER = "tomcat"
TOMCAT_HOME = "${ENVIRONMENT == 'dev' ? '/var/lib/tomcat' : '/usr/local/tomcat'}" TOMCAT_HOME = "${ENVIRONMENT == 'dev' ? '/usr/local/tomcat' : '/usr/local/tomcat'}"
APP_NAME = "sakemall" APP_NAME = "sakemall"
ROOT_NAME = "ROOT" ROOT_NAME = "ROOT"
DEPLOY_PATH = "${TOMCAT_HOME}/webapps" DEPLOY_PATH = "${TOMCAT_HOME}/webapps"
@@ -21,7 +21,7 @@ pipeline {
GIT_BRANCH = "${ENVIRONMENT == 'dev' ? 'develop' : 'master'}" GIT_BRANCH = "${ENVIRONMENT == 'dev' ? 'develop' : 'master'}"
NGINX_STATIC_PATH = "/var/www/sopmall" NGINX_STATIC_PATH = "/var/www/sopmall"
NGINX_SERVER_IP = "${DEPLOY_WEB_SERVER_IP}" NGINX_SERVER_IP = "${DEPLOY_WEB_SERVER_IP}"
NGINX_USER = "${ENVIRONMENT == 'dev' ? 'dev1' : 'ubuntu'}" NGINX_USER = "${ENVIRONMENT == 'dev' ? 'ubuntu' : 'ubuntu'}"
// SSH_KEY_PATH = "C:/Users/CHAMDAHAN-41/.ssh/id_rsa" // SSH_KEY_PATH = "C:/Users/CHAMDAHAN-41/.ssh/id_rsa"
} }
@@ -41,8 +41,8 @@ pipeline {
properties([ properties([
parameters([ parameters([
choice(name: 'ENVIRONMENT', choices: ['dev'], description: '배포할 어플리케이션 profile 선택'), choice(name: 'ENVIRONMENT', choices: ['dev'], description: '배포할 어플리케이션 profile 선택'),
choice(name: 'DEPLOY_WAS_SERVER_IP', choices: ['00.00.00.00'], description: 'WAR 배포할 서버IP 선택'), choice(name: 'DEPLOY_WAS_SERVER_IP', choices: ['10.2.0.129'], description: 'WAR 배포할 서버IP 선택'),
choice(name: 'DEPLOY_WEB_SERVER_IP', choices: ['00.00.00.00'], description: 'STATIC RESOURCE 배포할 서버IP 선택'), choice(name: 'DEPLOY_WEB_SERVER_IP', choices: ['10.2.1.226'], description: 'STATIC RESOURCE 배포할 서버IP 선택'),
// choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY', 'PROPERTY_ONLY'], description: '배포 대상 선택'), // choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY', 'PROPERTY_ONLY'], description: '배포 대상 선택'),
string(name: 'GIT_REPO', defaultValue: 'http://115.68.207.90:3000/itfirst/sake.git', description: 'Git 레파지토리 URL'), string(name: 'GIT_REPO', defaultValue: 'http://115.68.207.90:3000/itfirst/sake.git', description: 'Git 레파지토리 URL'),
choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY'], description: '배포 대상 선택') choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY'], description: '배포 대상 선택')
@@ -84,6 +84,26 @@ pipeline {
} }
} }
stage('Web Server block activate') {
when {
expression { params.DEPLOY_TARGET in ['ALL', 'WAS_ONLY'] }
}
steps {
script {
// Nginx 서버에 점검 페이지로 블록 설정
sshCommand remote: [
name: 'Nginx Server',
host: "${env.NGINX_SERVER_IP}",
user: "${env.NGINX_USER}",
identityFile: "${env.SSH_KEY_PATH}",
allowAnyHosts: true
], command: "/etc/nginx/weboff.sh"
echo "점검 web서버 config 구동"
}
}
}
stage('Prepare and Deploy Static Resources') { stage('Prepare and Deploy Static Resources') {
when { when {
expression { params.DEPLOY_TARGET in ['ALL', 'WEB_ONLY'] } expression { params.DEPLOY_TARGET in ['ALL', 'WEB_ONLY'] }
@@ -254,6 +274,20 @@ pipeline {
${env.TOMCAT_HOME}/bin/startup.sh ${env.TOMCAT_HOME}/bin/startup.sh
""" """
// Nginx 서버에 정상 페이지로 블록 해제
sshCommand remote: [
name: 'Nginx Server',
host: "${env.NGINX_SERVER_IP}",
user: "${env.NGINX_USER}",
identityFile: "${env.SSH_KEY_PATH}",
allowAnyHosts: true
], command: """
sleep 30
/etc/nginx/webon.sh
"""
echo "점검 web서버 config 구동"
echo "Deploy 완료 (${params.ENVIRONMENT} 환경, ${env.GIT_BRANCH} 브랜치)" echo "Deploy 완료 (${params.ENVIRONMENT} 환경, ${env.GIT_BRANCH} 브랜치)"
} }
} }

View File

@@ -286,6 +286,7 @@ public class BOMaMtngController {
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND); return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
} }
} else { } else {
// 여러곳배송처럼 처리하더라도 주소는 하나이므로 shipping 체크
if (CollectionUtils.isEmpty(shipping)) { if (CollectionUtils.isEmpty(shipping)) {
log.info("배송지 정보를 찾을 수 없습니다."); log.info("배송지 정보를 찾을 수 없습니다.");
content.put("result","Y"); content.put("result","Y");

View File

@@ -52,6 +52,9 @@ public interface BOMaMtngMapper {
/** 주문 전 쿠폰정보 재확인*/ /** 주문 전 쿠폰정보 재확인*/
public List<String> selectBOPreOrderValidationCouponList(BOPreOrderValidVO goods); public List<String> selectBOPreOrderValidationCouponList(BOPreOrderValidVO goods);
/** 구독서비스 주문 전 주문정보 재확인*/
public List<DataMap> selectBOSubsvcPreOrderValidation(BOPreOrderValidVO goods);
/*쇼핑몰 구매요청 재검증 확인 여부*/ /*쇼핑몰 구매요청 재검증 확인 여부*/
public String selectPurchsValidUseAt(String sopmalCd); public String selectPurchsValidUseAt(String sopmalCd);
} }

View File

@@ -306,8 +306,12 @@ public class BOMaMtngService {
} }
for(BOPreOrderValidVO goods : goodsList) { for(BOPreOrderValidVO goods : goodsList) {
List<DataMap> resultValid = new ArrayList<>();
List<DataMap> resultValid = mapper.selectBOPreOrderValidation(goods); if(goods.getSubsvcInnb() != "") {
resultValid = mapper.selectBOSubsvcPreOrderValidation(goods);
} else {
resultValid = mapper.selectBOPreOrderValidation(goods);
}
//구매정보 변경대상 필터링 //구매정보 변경대상 필터링
// 값이 1인 항목 == 변경항목 // 값이 1인 항목 == 변경항목
@@ -406,6 +410,8 @@ public class BOMaMtngService {
List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList"); // 상품정보 List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList"); // 상품정보
LinkedHashMap enuri = (LinkedHashMap) param.get("enuri"); // 할인정보 LinkedHashMap enuri = (LinkedHashMap) param.get("enuri"); // 할인정보
log.debug("selectBOPreOrderValidationList-goodsList: {}",goodsList);
//사용한 장바구니 쿠폰 //사용한 장바구니 쿠폰
//비회원의 경우 enuri 자체가 없어서 isEmpty 확인 //비회원의 경우 enuri 자체가 없어서 isEmpty 확인
List<LinkedHashMap> usedCartCouponList = new ArrayList<>(); List<LinkedHashMap> usedCartCouponList = new ArrayList<>();
@@ -417,8 +423,15 @@ public class BOMaMtngService {
//상품별 총 구매갯수 합계 //상품별 총 구매갯수 합계
Map<String, Integer> qySums = goodsList.stream() Map<String, Integer> qySums = goodsList.stream()
.collect(Collectors.groupingBy( .collect(Collectors.groupingBy(
// goodsInnb기준 키로 묶음 goods -> {
goods -> goods.get("goodsInnb").toString(), // goodsInnb기준 키로 묶음
Object key = goods.get("goodsInnb");
if(key == null) {
// subsvcInnb기준 키로 묶음
key = goods.get("subsvcInnb");
}
return key.toString();
},
// qy 값을 합산 // qy 값을 합산
Collectors.summingInt(goods -> Integer.parseInt(goods.getOrDefault("qy", "0").toString())) Collectors.summingInt(goods -> Integer.parseInt(goods.getOrDefault("qy", "0").toString()))
)); ));
@@ -464,12 +477,14 @@ public class BOMaMtngService {
goodsList.forEach(goods -> { goodsList.forEach(goods -> {
String goodsInnb = StringUtil.isNullToString(goods.get("goodsInnb")); String goodsInnb = StringUtil.isNullToString(goods.get("goodsInnb"));
String subsvcInnb = StringUtil.isNullToString(goods.get("subsvcInnb"));
//상품별 수량합계 //상품별 수량합계
int goodsTotalQy = 0; int goodsTotalQy = 0;
if(qySums.containsKey(goodsInnb)){ if(qySums.containsKey(goodsInnb)){
goodsTotalQy = qySums.getOrDefault(goodsInnb, 0); goodsTotalQy = qySums.getOrDefault(goodsInnb, 0);
} else if (qySums.containsKey(subsvcInnb)) {
goodsTotalQy = qySums.getOrDefault(subsvcInnb, 0);
} }
@@ -505,6 +520,7 @@ public class BOMaMtngService {
.sopmalCd(StringUtil.isNullToString(goods.get("sopmalCd"))) .sopmalCd(StringUtil.isNullToString(goods.get("sopmalCd")))
.goodsInnb(StringUtil.isNullToString(goods.get("goodsInnb"))) .goodsInnb(StringUtil.isNullToString(goods.get("goodsInnb")))
.goodsOptnInnb(StringUtil.isNullToString(goods.get("goodsOptnInnb"))) .goodsOptnInnb(StringUtil.isNullToString(goods.get("goodsOptnInnb")))
.subsvcInnb(StringUtil.isNullToString(goods.get("subsvcInnb")))
.mbrInnb(StringUtil.isNullToString(goods.get("mbrInnb"))) .mbrInnb(StringUtil.isNullToString(goods.get("mbrInnb")))
.mbrDvCd(StringUtil.isNullToString(goods.get("mbrDvCd"))) .mbrDvCd(StringUtil.isNullToString(goods.get("mbrDvCd")))
.qy(StringUtil.isNullToString(goods.get("qy"))) .qy(StringUtil.isNullToString(goods.get("qy")))

View File

@@ -24,6 +24,9 @@ public class BOPreOrderValidVO {
/*상품옵션고유번호*/ /*상품옵션고유번호*/
private String goodsOptnInnb; private String goodsOptnInnb;
/*구독서비스고유번호*/
private String subsvcInnb;
/*회원고유번호*/ /*회원고유번호*/
private String mbrInnb; private String mbrInnb;

View File

@@ -28,4 +28,12 @@ public class BOMaEmailSrchVO extends AbstractVO {
/*secretkey*/ /*secretkey*/
private String secretKey; private String secretKey;
/** 셋팅용 파라미터 tab구분
* send : 이메일 수동발송
* search : 이메일 발송내역*/
private String reqTab;
/** 셋팅용 파라미터 받는사람 이메일주소*/
private String email;
} }

View File

@@ -3,13 +3,13 @@ package com.wb.domainserver.domain.admin.store.sopmal.mapper;
import java.util.List; import java.util.List;
import com.wb.domainserver.domain.admin.store.sopmal.vo.Shop; import com.wb.domainserver.domain.admin.store.sopmal.vo.Shop;
import com.wb.domainserver.domain.gcone.goods.goods.vo.BOGoodsVO;
import com.wb.domainserver.domain.gcone.promtn.coupon.vo.BOCouponVO; import com.wb.domainserver.domain.gcone.promtn.coupon.vo.BOCouponVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO; import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOShopSetupVO; import com.wb.domainserver.domain.admin.store.sopmal.vo.BOShopSetupVO;
import com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO;
import com.wb.domainserver.util.dataaccess.DataMap; import com.wb.domainserver.util.dataaccess.DataMap;
/** /**
@@ -81,6 +81,10 @@ public interface BOMaSopmalMapper {
public int updateBOSopmalUpdt(BOMaSopmalVO vo); public int updateBOSopmalUpdt(BOMaSopmalVO vo);
public int updateBOExchngrtSetup(BOMaSopmalVO vo);
public int updateBOGuidanceSetup(BOMaSopmalVO vo);
public int deteteBOShopFamilySite(BOMaSopmalVO vo); public int deteteBOShopFamilySite(BOMaSopmalVO vo);
public int deteteBOShopClause(BOMaSopmalVO vo); public int deteteBOShopClause(BOMaSopmalVO vo);
@@ -199,4 +203,7 @@ public interface BOMaSopmalMapper {
/*전체 쇼핑몰 목록*/ /*전체 쇼핑몰 목록*/
List<DataMap> selectSopmalList(); List<DataMap> selectSopmalList();
// XML 수정 임시
public List<DataMap> selectSitemapXml(String sopmalCd);
} }

View File

@@ -19,6 +19,7 @@ import com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO;
import com.wb.domainserver.domain.gcone.goods.goodsinfo.mapper.BOGoodsinfoMapper; import com.wb.domainserver.domain.gcone.goods.goodsinfo.mapper.BOGoodsinfoMapper;
import com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO; import com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO;
import lombok.Data; import lombok.Data;
import org.apache.commons.text.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -437,39 +438,12 @@ public class BOMaSopmalService {
log.debug("masopmal {}", vo); log.debug("masopmal {}", vo);
// update payLink // update payLink
mapper.updateBOShopPayLink(vo); mapper.updateBOShopPayLink(vo);
// PC 결제 정보
String pcSetleType = vo.getPcSetleTypeList();
String[] pcSetleTypeArr = null;
DataMap pcSetleInfoDm = new DataMap();
if (!StringUtil.isEmpty(pcSetleType)) {
pcSetleTypeArr = StringUtil.split(pcSetleType, "$");
pcSetleInfoDm = ynSetParam(pcSetleTypeArr);
pcSetleInfoDm.put("updusr", vo.getUpdusr());
pcSetleInfoDm.put("setleInfoInnb", vo.getPcSetleInfoInnb());
mapper.updateBOShopPayInfo(pcSetleInfoDm);
} else {
pcSetleInfoDm = ynSetParam(pcSetleTypeArr);
pcSetleInfoDm.put("updusr", vo.getUpdusr());
pcSetleInfoDm.put("setleInfoInnb", vo.getPcSetleInfoInnb());
mapper.updateBOShopPayInfo(pcSetleInfoDm);
}
// MOBILE 결제 정보 // 결제 정보 업데이트
String mobileSetleType = vo.getMobileSetleTypeList(); updateSetleInfo(vo.getPcSetleTypeList(), vo.getPcSetleInfoInnb(), vo.getUpdusr()); // PC
String[] mobileSetleTypeArr = null; updateSetleInfo(vo.getMobileSetleTypeList(), vo.getMobileSetleInfoInnb(), vo.getUpdusr()); // MOBILE
DataMap mobileSetleInfoDm = new DataMap(); updateSetleInfo(vo.getPcSubsvcSetleTypeList(), vo.getPcSubsvcSetleInfoInnb(), vo.getUpdusr()); // 구독서비스 PC
if (!StringUtil.isEmpty(mobileSetleType)) { updateSetleInfo(vo.getMobileSubsvcSetleTypeList(), vo.getMobileSubsvcSetleInfoInnb(), vo.getUpdusr()); // 구독서비스 MOBILE
mobileSetleTypeArr = StringUtil.split(mobileSetleType, "$");
mobileSetleInfoDm = ynSetParam(mobileSetleTypeArr);
mobileSetleInfoDm.put("updusr", vo.getUpdusr());
mobileSetleInfoDm.put("setleInfoInnb", vo.getMobileSetleInfoInnb());
mapper.updateBOShopPayInfo(mobileSetleInfoDm);
} else {
mobileSetleInfoDm = ynSetParam(mobileSetleTypeArr);
mobileSetleInfoDm.put("updusr", vo.getUpdusr());
mobileSetleInfoDm.put("setleInfoInnb", vo.getMobileSetleInfoInnb());
mapper.updateBOShopPayInfo(mobileSetleInfoDm);
}
if (!ObjectUtils.isEmpty(vo.getFamilySiteNmArr())) { if (!ObjectUtils.isEmpty(vo.getFamilySiteNmArr())) {
String[] siteNm = vo.getFamilySiteNmArr(); String[] siteNm = vo.getFamilySiteNmArr();
@@ -523,6 +497,26 @@ public class BOMaSopmalService {
return message; return message;
} }
/**
* 결제정보 업데이트
* @param setleType 결제정보 List
* @param setleInfoInnb 결제정보 고유번호
* @param updusr 수정자 고유번호
*/
private void updateSetleInfo(String setleType, String setleInfoInnb, int updusr) {
String[] setleTypeArr = null;
if (!StringUtil.isEmpty(setleType)) {
setleTypeArr = StringUtil.split(setleType, "$");
}
DataMap dm = ynSetParam(setleTypeArr);
dm.put("updusr", updusr);
dm.put("setleInfoInnb", setleInfoInnb);
mapper.updateBOShopPayInfo(dm);
}
private void setBOMaSopmalVO(BOMaSopmalVO vo) { private void setBOMaSopmalVO(BOMaSopmalVO vo) {
if(!StringUtil.isEmpty(vo.getSmsAtmcSndngLmttBgntme())) if(!StringUtil.isEmpty(vo.getSmsAtmcSndngLmttBgntme()))
@@ -991,4 +985,43 @@ public class BOMaSopmalService {
return mapper.selectSopmalList(); return mapper.selectSopmalList();
} }
/**
* 사이트맵 XML
* @param sopmalCd
* @return
*/
@Transactional
public String selectSitemapXml(String sopmalCd) {
List<DataMap> resultList = new ArrayList<>();
StringBuilder xml = new StringBuilder();
try {
xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
xml.append("<?xml-stylesheet type=\"text/css\" href=\"https://www.xml-sitemaps.com/css/sitemap.css\"?>");
xml.append("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:xhtml=\"http://www.w3.org/1999/xhtml\">\n");
resultList = mapper.selectSitemapXml(sopmalCd);
for (DataMap data : resultList) {
xml.append(" <url>");
xml.append(" <loc>")
.append(StringEscapeUtils.escapeXml11(String.valueOf(data.get("targetUrl"))))
.append("</loc>");
xml.append(" <lastmod>")
.append(StringEscapeUtils.escapeXml11(String.valueOf(data.get("lastModified"))))
.append("</lastmod>");
xml.append(" <priority>")
.append(StringEscapeUtils.escapeXml11(String.valueOf(data.get("priority"))))
.append("</priority>");
xml.append(" </url>");
}
xml.append("</urlset>");
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return xml.toString();
}
} }

View File

@@ -483,12 +483,24 @@ public class BOMaSopmalVO extends AbstractVO {
/** mobile 결제정보 List */ /** mobile 결제정보 List */
private String mobileSetleTypeList; private String mobileSetleTypeList;
/** 구독서비스 pc 결제정보 List */
private String pcSubsvcSetleTypeList;
/** 구독서비스 mobile 결제정보 List */
private String mobileSubsvcSetleTypeList;
/** pc 결제정보 Innb */ /** pc 결제정보 Innb */
private String pcSetleInfoInnb; private String pcSetleInfoInnb;
/** mobile 결제정보 Innb */ /** mobile 결제정보 Innb */
private String mobileSetleInfoInnb; private String mobileSetleInfoInnb;
/** 구독서비스 pc 결제정보 Innb */
private String pcSubsvcSetleInfoInnb;
/** 구독서비스 mobile 결제정보 Innb */
private String mobileSubsvcSetleInfoInnb;
/** 회원가입 안내 타이틀 */ /** 회원가입 안내 타이틀 */
private String joinGuidanceSj; private String joinGuidanceSj;

View File

@@ -393,6 +393,7 @@ public class BOBbsService {
if (vo.getBbscttRedngAuthorDvCd() != null && "01".equals(vo.getBbscttRedngAuthorDvCd())) { if (vo.getBbscttRedngAuthorDvCd() != null && "01".equals(vo.getBbscttRedngAuthorDvCd())) {
vo.setBbscttRedngAuthorDvCd("[all]"); vo.setBbscttRedngAuthorDvCd("[all]");
} else if (vo.getBbscttRedngAuthorDvCd() != null && "02".equals(vo.getBbscttRedngAuthorDvCd())) { } else if (vo.getBbscttRedngAuthorDvCd() != null && "02".equals(vo.getBbscttRedngAuthorDvCd())) {
validateMemberGradeSelection(vo.getBbscttRedngAuthorDvCd_c(), "게시판 읽기");
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (String mbrInnb : vo.getBbscttRedngAuthorDvCd_c()) { for (String mbrInnb : vo.getBbscttRedngAuthorDvCd_c()) {
@@ -431,6 +432,8 @@ public class BOBbsService {
if (vo.getBbscttRegistAuthorDvCd() != null && "01".equals(vo.getBbscttRegistAuthorDvCd())) { if (vo.getBbscttRegistAuthorDvCd() != null && "01".equals(vo.getBbscttRegistAuthorDvCd())) {
vo.setBbscttRegistAuthorDvCd("[all]"); vo.setBbscttRegistAuthorDvCd("[all]");
} else if (vo.getBbscttRegistAuthorDvCd() != null && "02".equals(vo.getBbscttRegistAuthorDvCd())) { } else if (vo.getBbscttRegistAuthorDvCd() != null && "02".equals(vo.getBbscttRegistAuthorDvCd())) {
validateMemberGradeSelection(vo.getBbscttRegistAuthorDvCd_c(), "게시판 쓰기");
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (String mbrInnb : vo.getBbscttRegistAuthorDvCd_c()) { for (String mbrInnb : vo.getBbscttRegistAuthorDvCd_c()) {
@@ -465,6 +468,8 @@ public class BOBbsService {
if (vo.getAnswRegistAuthorDvCd() != null && "01".equals(vo.getAnswRegistAuthorDvCd())) { if (vo.getAnswRegistAuthorDvCd() != null && "01".equals(vo.getAnswRegistAuthorDvCd())) {
vo.setAnswRegistAuthorDvCd("[all]"); vo.setAnswRegistAuthorDvCd("[all]");
} else if (vo.getAnswRegistAuthorDvCd() != null && "02".equals(vo.getAnswRegistAuthorDvCd())) { } else if (vo.getAnswRegistAuthorDvCd() != null && "02".equals(vo.getAnswRegistAuthorDvCd())) {
validateMemberGradeSelection(vo.getAnswRegistAuthorDvCd_c(), "답글 쓰기");
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (String mbrInnb : vo.getAnswRegistAuthorDvCd_c()) { for (String mbrInnb : vo.getAnswRegistAuthorDvCd_c()) {
@@ -499,6 +504,8 @@ public class BOBbsService {
if (vo.getCmRegistAuthorDvCd() != null && "01".equals(vo.getCmRegistAuthorDvCd())) { if (vo.getCmRegistAuthorDvCd() != null && "01".equals(vo.getCmRegistAuthorDvCd())) {
vo.setCmRegistAuthorDvCd("[all]"); vo.setCmRegistAuthorDvCd("[all]");
} else if (vo.getCmRegistAuthorDvCd() != null && "02".equals(vo.getCmRegistAuthorDvCd())) { } else if (vo.getCmRegistAuthorDvCd() != null && "02".equals(vo.getCmRegistAuthorDvCd())) {
validateMemberGradeSelection(vo.getCmRegistAuthorDvCd_c(), "댓글 쓰기");
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (String mbrInnb : vo.getCmRegistAuthorDvCd_c()) { for (String mbrInnb : vo.getCmRegistAuthorDvCd_c()) {
@@ -685,15 +692,21 @@ public class BOBbsService {
msgMap.put("bbsid", bbsId); msgMap.put("bbsid", bbsId);
} catch (WnbtRestException wre){ } catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage()); throw wre;
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
throw new WnbtRestException("게시판 등록 중 오류가 발생했습니다.", e);
} }
return msgMap; return msgMap;
} }
private void validateMemberGradeSelection(String[] memberGradeArr, String authorizationName) {
if (memberGradeArr == null || memberGradeArr.length == 0) {
throw new WnbtRestException(authorizationName + " 권한의 회원등급을 선택해 주세요.");
}
}
/** /**
* 게시판 삭제 * 게시판 삭제
@@ -978,9 +991,9 @@ public class BOBbsService {
log.debug("분류 oldDvQesitmInnbs : {}", oldDvQesitmInnbs); log.debug("분류 oldDvQesitmInnbs : {}", oldDvQesitmInnbs);
log.debug("분류 olddvItmInnbs : {}", olddvItmInnbs); log.debug("분류 olddvItmInnbs : {}", olddvItmInnbs);
log.debug("분류 olddvItmInnbsArr : {}", olddvItmInnbsArr); log.debug("분류 olddvItmInnbsArr : {}", (Object) olddvItmInnbsArr);
log.debug("분류 qesitmInnb_d : {}", qesitmInnb_d); log.debug("분류 qesitmInnb_d : {}", (Object) qesitmInnb_d);
log.debug("분류 qesitmNm_d : {}", qesitmNm_d); log.debug("분류 qesitmNm_d : {}", (Object) qesitmNm_d);
log.debug("분류 qesitmInnb : {}", qesitmInnb); log.debug("분류 qesitmInnb : {}", qesitmInnb);
log.debug("분류 itmInnb_del : {}", itmInnb_del); log.debug("분류 itmInnb_del : {}", itmInnb_del);
@@ -1055,8 +1068,8 @@ public class BOBbsService {
} }
log.debug("필수 {}", vo.getOldIpQesitmInnbs()); log.debug("필수 {}", vo.getOldIpQesitmInnbs());
log.debug("필수 {}", vo.getQesitmEssntlAt_i()); log.debug("필수 {}", (Object) vo.getQesitmEssntlAt_i());
log.debug("사용 {}", vo.getQesitmUseAt_i()); log.debug("사용 {}", (Object) vo.getQesitmUseAt_i());
/** 게시판 추가 문항 수정 */ /** 게시판 추가 문항 수정 */
if (!ObjectUtils.isEmpty(vo.getQesitmInnb_i())) { if (!ObjectUtils.isEmpty(vo.getQesitmInnb_i())) {
String[] qesitmNm_i = vo.getQesitmNm_i(); String[] qesitmNm_i = vo.getQesitmNm_i();

View File

@@ -232,6 +232,9 @@ public class BOGnrlbbscttService {
BOGnrlbbscttVO resultCnt = new BOGnrlbbscttVO(); BOGnrlbbscttVO resultCnt = new BOGnrlbbscttVO();
switch (bbsTyCd) { switch (bbsTyCd) {
case "01": //일반게시글 조회 case "01": //일반게시글 조회
log.debug("일반게시글 getServerDv : {}",bbsctt.getServerDv());
log.debug("일반게시글 getMbrDvCd : {}",bbsctt.getMbrDvCd());
log.debug("일반게시글 getSopmalCd : {}",bbsctt.getSopmalCd());
resultCnt = mapper.selectBOGnrlBbscttListCnt(bbsctt); resultCnt = mapper.selectBOGnrlBbscttListCnt(bbsctt);
totCnt = resultCnt.getTotCnt(); totCnt = resultCnt.getTotCnt();
if (StringUtil.isEmpty(bbsctt.getNtcAt())) {/*공지 제외 검색 조건*/ if (StringUtil.isEmpty(bbsctt.getNtcAt())) {/*공지 제외 검색 조건*/
@@ -567,19 +570,11 @@ public class BOGnrlbbscttService {
Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> map = new HashMap<String, Object>();
// 게시글 연관상품 조회 // 게시글 연관상품 조회
List<DataMap> goodsList = new ArrayList<>(); List<DataMap> goodsList = new ArrayList<>();
DataMap result = new DataMap();
goodsList = mapper.selectBOBbscttDtlGoods(bbsctt); goodsList = mapper.selectBOBbscttDtlGoods(bbsctt);
/*게시판 설정 > 추천 상품 노출 선택 시 사용자 게시글 상세 상품 노출 */
if (!goodsList.isEmpty()) {
if ("sopmal".equals(bbsctt.getServerDv())) {
result = goodsService.selectBoGoodsRelateList(goodsList);
}
}
/*사용자 , 관리자 페이지 구분*/ /*사용자 , 관리자 페이지 구분*/
if ("sopmal".equals(bbsctt.getServerDv())) { if ("sopmal".equals(bbsctt.getServerDv())) {
map.put("goodsList", result); map.put("goodsList", goodsList);
} else { } else {
map.put("goodsList", goodsList); map.put("goodsList", goodsList);
} }
@@ -917,6 +912,7 @@ public class BOGnrlbbscttService {
throw new WnbtRestException(wre.getMessage()); throw new WnbtRestException(wre.getMessage());
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
throw new WnbtRestException("게시글 등록 중 오류가 발생했습니다.", e);
} }
return message; return message;
@@ -1103,7 +1099,7 @@ public class BOGnrlbbscttService {
} }
} }
/*1:1 문의 게시판이 아닌경우만 처리 */ /*1:1 문의 게시판이 아닌경우만 처리 */
if("12".equals(bbsctt.getBbsTyCd())){ if(!"12".equals(bbsctt.getBbsTyCd())){
//게시글 연관 상품 삭제 //게시글 연관 상품 삭제
mapper.deleteBOBbscttGoods(bbsctt); mapper.deleteBOBbscttGoods(bbsctt);
//게시글 연관 상품 등록(fm_boarddata_goods) //게시글 연관 상품 등록(fm_boarddata_goods)
@@ -1134,6 +1130,7 @@ public class BOGnrlbbscttService {
throw new WnbtRestException(wre.getMessage()); throw new WnbtRestException(wre.getMessage());
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
throw new WnbtRestException("게시글 수정 중 오류가 발생했습니다.", e);
} }
return message; return message;

View File

@@ -75,6 +75,8 @@ public class BOGnrlbbscttVO extends AbstractVO {
@Length(max = 16777215, message = "내용") @Length(max = 16777215, message = "내용")
/** 내용 */ /** 내용 */
private String cn; private String cn;
/** 내용 */
private String relateGoodsWords;
/** 조회건수 */ /** 조회건수 */
private Integer inqireCnt; private Integer inqireCnt;
/** 댓글건수 */ /** 댓글건수 */

View File

@@ -46,6 +46,9 @@ public class BOCommonService {
@Value("${secret.key}") @Value("${secret.key}")
private String secretKey; private String secretKey;
@Value("${aciexpress.apikey}")
private String aciApiKey;
/** /**
* <p>비밀번호를 암호화 한다</p> * <p>비밀번호를 암호화 한다</p>
@@ -287,4 +290,10 @@ public class BOCommonService {
return secretKey; return secretKey;
} }
/**
* aci Api키 조회
* @return String
*/
public String selectAciApiKey() {return aciApiKey;}
} }

View File

@@ -0,0 +1,17 @@
package com.wb.domainserver.domain.gcone.goods.badge.mapper;
import com.wb.domainserver.domain.gcone.goods.badge.vo.BOGoodsBadgeVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BOGoodsBadgeMapper {
List<DataMap> selectBOGoodsBadgeList(BOGoodsBadgeVO vo);
int selectBOGoodsBadgeCount(BOGoodsBadgeVO vo);
int insertBOGoodsBadge(BOGoodsBadgeVO vo);
int updateBOGoodsBadge(BOGoodsBadgeVO vo);
}

View File

@@ -0,0 +1,113 @@
package com.wb.domainserver.domain.gcone.goods.badge.service;
import com.wb.domainserver.domain.gcone.goods.badge.mapper.BOGoodsBadgeMapper;
import com.wb.domainserver.domain.gcone.goods.badge.vo.BOGoodsBadgeVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
@Service
public class BOGoodsBadgeService {
private static final Pattern COLOR_PATTERN = Pattern.compile("^#[0-9A-Fa-f]{6}$");
private static final Pattern BADGE_CODE_PATTERN = Pattern.compile("^[A-Za-z0-9_-]+$");
@Autowired
private BOGoodsBadgeMapper mapper;
public List<DataMap> selectBOGoodsBadgeList(BOGoodsBadgeVO vo) {
return mapper.selectBOGoodsBadgeList(vo);
}
@Transactional
public DataMap updateBOGoodsBadgeSetup(BOGoodsBadgeVO request) {
DataMap message = new DataMap();
String[] badgeCdArr = request.getBadgeCdArr();
if (badgeCdArr == null || badgeCdArr.length == 0) {
message.put("result", "success");
return message;
}
validateArrayLengths(request, badgeCdArr.length);
Set<String> newBadgeCodes = new HashSet<>();
for (int i = 0; i < badgeCdArr.length; i++) {
BOGoodsBadgeVO badge = createBadge(request, i);
validateBadge(badge);
if ("Y".equals(badge.getNewAt())) {
if (!newBadgeCodes.add(badge.getBadgeCd()) || mapper.selectBOGoodsBadgeCount(badge) > 0) {
throw new WnbtRestException("이미 등록된 배지코드입니다.");
}
mapper.insertBOGoodsBadge(badge);
} else {
if (!badge.getBadgeCd().equals(trim(request.getOriginalBadgeCdArr()[i]))) {
throw new WnbtRestException("기존 배지코드는 변경할 수 없습니다.");
}
if (mapper.selectBOGoodsBadgeCount(badge) == 0) {
throw new WnbtRestException("존재하지 않는 배지코드입니다.");
}
mapper.updateBOGoodsBadge(badge);
}
}
message.put("result", "success");
return message;
}
private void validateArrayLengths(BOGoodsBadgeVO vo, int size) {
if (vo.getOriginalBadgeCdArr() == null || vo.getBadgeNmArr() == null || vo.getFontColorArr() == null || vo.getBgColorArr() == null
|| vo.getBorderColorArr() == null || vo.getSortOrdrArr() == null || vo.getUseAtArr() == null
|| vo.getNewAtArr() == null || vo.getOriginalBadgeCdArr().length != size || vo.getBadgeNmArr().length != size || vo.getFontColorArr().length != size
|| vo.getBgColorArr().length != size || vo.getBorderColorArr().length != size
|| vo.getSortOrdrArr().length != size || vo.getUseAtArr().length != size || vo.getNewAtArr().length != size) {
throw new WnbtRestException("배지 저장 요청 값이 올바르지 않습니다.");
}
}
private BOGoodsBadgeVO createBadge(BOGoodsBadgeVO request, int index) {
BOGoodsBadgeVO badge = new BOGoodsBadgeVO();
badge.setSopmalCd(request.getSopmalCd());
badge.setRegusr(request.getRegusr());
badge.setUpdusr(request.getUpdusr());
badge.setBadgeCd(trim(request.getBadgeCdArr()[index]));
badge.setBadgeNm(trim(request.getBadgeNmArr()[index]));
badge.setFontColor(trim(request.getFontColorArr()[index]));
badge.setBgColor(trim(request.getBgColorArr()[index]));
badge.setBorderColor(trim(request.getBorderColorArr()[index]));
badge.setSortOrdr(trim(request.getSortOrdrArr()[index]));
badge.setUseAt(trim(request.getUseAtArr()[index]));
badge.setNewAt(trim(request.getNewAtArr()[index]));
return badge;
}
private void validateBadge(BOGoodsBadgeVO badge) {
if (!StringUtils.hasText(badge.getBadgeCd()) || ("Y".equals(badge.getNewAt()) && !BADGE_CODE_PATTERN.matcher(badge.getBadgeCd()).matches())) {
throw new WnbtRestException("배지코드는 영문, 숫자, 밑줄, 하이픈만 입력할 수 있습니다.");
}
if (!StringUtils.hasText(badge.getBadgeNm()) || !COLOR_PATTERN.matcher(badge.getFontColor()).matches()
|| !COLOR_PATTERN.matcher(badge.getBgColor()).matches() || !COLOR_PATTERN.matcher(badge.getBorderColor()).matches()) {
throw new WnbtRestException("배지명과 색상값을 확인해 주세요.");
}
try {
if (Integer.parseInt(badge.getSortOrdr()) < 0) {
throw new NumberFormatException();
}
} catch (NumberFormatException e) {
throw new WnbtRestException("노출순서는 0 이상의 정수만 입력할 수 있습니다.");
}
if (!("Y".equals(badge.getUseAt()) || "N".equals(badge.getUseAt()))
|| !("Y".equals(badge.getNewAt()) || "N".equals(badge.getNewAt()))) {
throw new WnbtRestException("배지 저장 요청 값이 올바르지 않습니다.");
}
}
private String trim(String value) {
return value == null ? "" : value.trim();
}
}

View File

@@ -0,0 +1,28 @@
package com.wb.domainserver.domain.gcone.goods.badge.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOGoodsBadgeVO extends AbstractVO {
private String sopmalCd;
private String badgeCd;
private String badgeNm;
private String fontColor;
private String bgColor;
private String borderColor;
private String sortOrdr;
private String newAt;
private String[] badgeCdArr;
private String[] originalBadgeCdArr;
private String[] badgeNmArr;
private String[] fontColorArr;
private String[] bgColorArr;
private String[] borderColorArr;
private String[] sortOrdrArr;
private String[] useAtArr;
private String[] newAtArr;
}

View File

@@ -34,6 +34,8 @@ public interface BOGoodsMapper {
public Integer selectBOGoodsCount(BOGoodsVO vo); public Integer selectBOGoodsCount(BOGoodsVO vo);
// 일반 상품 목록 리스트 // 일반 상품 목록 리스트
public List<DataMap> selectBOGoodsList(BOGoodsVO vo); public List<DataMap> selectBOGoodsList(BOGoodsVO vo);
// 관리자 상품 배지 목록
public List<DataMap> selectBOGoodsBadgeList(BOGoodsVO vo);
// 카테고리별 상품 목록 수정 // 카테고리별 상품 목록 수정
public void updateBOCtgryGoodsList(BOGoodsVO vo); public void updateBOCtgryGoodsList(BOGoodsVO vo);
// 관리자 > 일반 상품 상세 // 관리자 > 일반 상품 상세
@@ -85,6 +87,8 @@ public interface BOGoodsMapper {
public void updateBOGoodsAdditionDtl(BOGoodsAdditionVO vo); public void updateBOGoodsAdditionDtl(BOGoodsAdditionVO vo);
// 일반 상품 > 추가정보 삭제 // 일반 상품 > 추가정보 삭제
public void deleteBOGoodsAddition(BOGoodsAdditionVO vo); public void deleteBOGoodsAddition(BOGoodsAdditionVO vo);
// 사용자 - 검색 - 검색어 로그 저장
public int insertBOSrchwrdLog(BOGoodsVO vo);
// 사용자 - 검색 - 상품명 검색어 조회 // 사용자 - 검색 - 상품명 검색어 조회
public List<DataMap> selectBOSrchGoodsNm(BOGoodsVO vo); public List<DataMap> selectBOSrchGoodsNm(BOGoodsVO vo);
// 일반 상품 > 일괄 업데이트 // 일반 상품 > 일괄 업데이트

View File

@@ -7,6 +7,7 @@ import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.domain.gcone.goods.goods.mapper.BOGoodsMapper; import com.wb.domainserver.domain.gcone.goods.goods.mapper.BOGoodsMapper;
import com.wb.domainserver.domain.gcone.goods.goods.vo.*; import com.wb.domainserver.domain.gcone.goods.goods.vo.*;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.ErrorCode;
import com.wb.domainserver.util.dataaccess.DataMap; import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil; import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.io.File; import java.io.File;
import java.math.BigInteger; import java.math.BigInteger;
@@ -74,6 +76,15 @@ public class BOGoodsService {
return resultList; return resultList;
} }
/**
* 관리자 상품 배지 목록 조회
* @param vo
* @return
*/
public List<DataMap> selectBOGoodsBadgeList(BOGoodsVO vo) {
return mapper.selectBOGoodsBadgeList(vo);
}
/** /**
* 사용자 > 상품 목록 조회 * 사용자 > 상품 목록 조회
* @param vo * @param vo
@@ -1505,6 +1516,27 @@ public class BOGoodsService {
return mapper.selectBOGoodsCategoryLink(vo); return mapper.selectBOGoodsCategoryLink(vo);
} }
/**
* 검색어 로그 저장
* @param vo
* @return
*/
public DataMap insertBOSrchwrdLog(BOGoodsVO vo){
DataMap message = new DataMap();
try {
mapper.insertBOSrchwrdLog(vo);
message.put("result", "success");
} catch (WnbtRestException wre) {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR);
}
return message;
}
/** /**
* 상품명 검색어 조회 * 상품명 검색어 조회
* @param vo * @param vo

View File

@@ -47,6 +47,10 @@ public class BOGoodsOptionVO extends AbstractVO {
private String optnCd4; private String optnCd4;
/** 옵션정보 */ /** 옵션정보 */
private String optnInfo; private String optnInfo;
/** HS Code */
private String hscode;
/** 실무게(KG) */
private String realWt;
/** 재고수량 */ /** 재고수량 */
private String invntryQy; private String invntryQy;
/** 가용재고수량 */ /** 가용재고수량 */

View File

@@ -41,6 +41,9 @@ public class BOGoodsVO extends AbstractVO {
/** 상품명 */ /** 상품명 */
@NotBlank(message = "상품명") @NotBlank(message = "상품명")
private String goodsNm; private String goodsNm;
/** 상품명(영문) */
@NotBlank(message = "상품명(영문)")
private String goodsNmEn;
/** 입점상품명 */ /** 입점상품명 */
private String tentMarktGoodsNm; private String tentMarktGoodsNm;
/** ? */ /** ? */
@@ -220,6 +223,10 @@ public class BOGoodsVO extends AbstractVO {
private String optnCd4; private String optnCd4;
/** 옵션정보 */ /** 옵션정보 */
private String optnInfo; private String optnInfo;
/** HS Code */
private String hscode;
/** 실무게(KG) */
private String realWt;
/** 재고수량 */ /** 재고수량 */
private Integer invntryQy; private Integer invntryQy;
/** 가용재고수량 */ /** 가용재고수량 */
@@ -478,6 +485,10 @@ public class BOGoodsVO extends AbstractVO {
private String srchType; private String srchType;
/** 검색어 */ /** 검색어 */
private String srchStr; private String srchStr;
/** 유입경로 */
private String conectUrl;
/** 유입경로 도메인 */
private String conectDomn;
/** 선택 삭제 */ /** 선택 삭제 */
private List<HashMap<String, Object>> delInnbArr; private List<HashMap<String, Object>> delInnbArr;
/** 이미지 파일 업로드 */ /** 이미지 파일 업로드 */

View File

@@ -470,6 +470,8 @@ public interface BOPurchsMapper {
*/ */
public String selectRlSetleAmt(DataMap param); public String selectRlSetleAmt(DataMap param);
public String selectWonRlSetleAmt(DataMap param);
/** /**
* 0원 상품 포함시 짜투리 업데이트 ( 장바구니, 마일리지, 애누리 ) * 0원 상품 포함시 짜투리 업데이트 ( 장바구니, 마일리지, 애누리 )
* @param itemOptnVO * @param itemOptnVO

View File

@@ -2,16 +2,15 @@ package com.wb.domainserver.domain.gcone.goods.purchs.service;
import com.nimbusds.jose.shaded.gson.Gson; import com.nimbusds.jose.shaded.gson.Gson;
import com.wb.domainserver.domain.admin.instcSle.mtng.service.BOMaMtngService; import com.wb.domainserver.domain.admin.instcSle.mtng.service.BOMaMtngService;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOInstcSleVO;
import com.wb.domainserver.domain.gcone.bbs.cnslt.service.BOCnsltService; import com.wb.domainserver.domain.gcone.bbs.cnslt.service.BOCnsltService;
import com.wb.domainserver.domain.gcone.bbs.cnslt.vo.BOCnsltVO; import com.wb.domainserver.domain.gcone.bbs.cnslt.vo.BOCnsltVO;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService; import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.domain.gcone.goods.purchs.mapper.BOPurchsMapper; import com.wb.domainserver.domain.gcone.goods.purchs.mapper.BOPurchsMapper;
import com.wb.domainserver.domain.gcone.goods.purchs.vo.*; import com.wb.domainserver.domain.gcone.goods.purchs.vo.*;
import com.wb.domainserver.domain.gcone.ordr.ordr.mapper.BOOrdrMapper;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrderRestAmtVO; import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrderRestAmtVO;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.security.authentication.AnonymousUser; import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtToken;
import com.wb.domainserver.util.dataaccess.DataMap; import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil; import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -24,8 +23,9 @@ import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service @Service
@Slf4j @Slf4j
@@ -33,6 +33,9 @@ public class BOOrderService {
@Autowired @Autowired
private BOPurchsMapper mapper; private BOPurchsMapper mapper;
@Autowired
private BOOrdrMapper boOrdrMapper;
@Autowired @Autowired
private BOMaMtngService maMtngService; private BOMaMtngService maMtngService;
@@ -74,6 +77,11 @@ public class BOOrderService {
LinkedHashMap setle = (LinkedHashMap) param.get("setle"); // 결제정보 LinkedHashMap setle = (LinkedHashMap) param.get("setle"); // 결제정보
List<LinkedHashMap> prsntList = (List<LinkedHashMap>) param.get("prsnt"); // 사은품 정보 List<LinkedHashMap> prsntList = (List<LinkedHashMap>) param.get("prsnt"); // 사은품 정보
Boolean subsvcAt = param.containsKey("subsvcInnb"); // 구독서비스 여부
if(subsvcAt) {
setle.put("subsvcInnb", param.get("subsvcInnb"));
}
log.debug("구매자정보 => {} ", new Gson().toJson(purchsr)); log.debug("구매자정보 => {} ", new Gson().toJson(purchsr));
log.debug("상품정보 => {} ", new Gson().toJson(goodsList)); log.debug("상품정보 => {} ", new Gson().toJson(goodsList));
log.debug("배송정보 => {} ", new Gson().toJson(shipping)); log.debug("배송정보 => {} ", new Gson().toJson(shipping));
@@ -81,27 +89,465 @@ public class BOOrderService {
log.debug("결제정보 => {} ", new Gson().toJson(setle)); log.debug("결제정보 => {} ", new Gson().toJson(setle));
log.debug("사은품 => {} ", new Gson().toJson(prsntList)); log.debug("사은품 => {} ", new Gson().toJson(prsntList));
String sopmalCd = "";
if("01".equals(user.getSysDvCd())){
sopmalCd = user.getSopmalCd();
}else{
sopmalCd = param.get("sopmalCd").toString();
}
String ordrTyCd = (String) param.get("ordrTyCd");
String bfOrdrTyCd = (String) param.get("ordrTyCd");
log.debug("insertMngrOrdrRegist-param : {}", param);
/* *****************************
0. 배송 정책에 따른 배송지 세팅
***************************** */
/** 여러곳 배송 배송지 세팅 시작 */ /** 여러곳 배송 배송지 세팅 시작 */
LinkedHashMap<String, Object> multiOrdrDlvylcMap = new LinkedHashMap<>(); LinkedHashMap<String, Object> multiOrdrDlvylcMap = new LinkedHashMap<>();
List<LinkedHashMap<String, Object>> dlvylcListMulti = new ArrayList<>(); List<LinkedHashMap<String, Object>> dlvylcListMulti = new ArrayList<>();
multiOrdrDlvylcMap = (LinkedHashMap) param.get("multiOrdrDlvylc"); multiOrdrDlvylcMap = (LinkedHashMap) param.get("multiOrdrDlvylc");
log.debug("multiOrdrDlvylcMap : {}", multiOrdrDlvylcMap); log.debug("multiOrdrDlvylcMap : {}", multiOrdrDlvylcMap);
if (!CollectionUtils.isEmpty(multiOrdrDlvylcMap)) {
// 배송지 리스트 String dlvylcAreaCd = (String) shipping.get("dlvylcAreaCd");
dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylcMap.get("dlvylc"); String ordrAdressZip = StringUtil.isNullToString(shipping.get("dlvylcZip"));
log.debug("dlvylcListMulti : {}", dlvylcListMulti); String prefcd = (String) shipping.get("prefcd");
String defaultAdressAt = "N";
String sopmalCode = sopmalCd;
DataMap defaultAdressVO = new DataMap() {{ //
put("sopmalCd", sopmalCode); // 쇼핑몰 코드
put("zip", ordrAdressZip); // 우편번호
put("prefcd", prefcd); // 도도부현코드
}};
// 추가 배송비 여부 조회
if("KR".equals(dlvylcAreaCd)){
defaultAdressAt = boOrdrMapper.selectBODefaultAdressAtInqire(defaultAdressVO);
}
if("JP".equals(dlvylcAreaCd)){
defaultAdressAt = boOrdrMapper.selectBODefaultAdressAtInqire2(defaultAdressVO);
}
// DlvyGroupList 조회
List<DataMap> DlvyGroupList = new ArrayList<>();
goodsList.forEach(goods -> {
DataMap item = new DataMap();
item.put("goodsInnb", new BigInteger(String.valueOf(goods.get("goodsInnb"))));
item.put("goodsOptnInnb", new BigInteger(String.valueOf(goods.get("goodsOptnInnb"))));
item.put("dlvyGroupInnb", new BigInteger(String.valueOf(goods.get("dlvyGroupInnb"))));
item.put("qy", new BigInteger(String.valueOf((int) goods.get("qy"))));
item.put("dscntApplyAmt", new BigInteger(String.valueOf((int) goods.get("dscntApplyAmt"))));
item.put("slepric", new BigInteger(String.valueOf((int) goods.get("slepric"))));
item.put("subSlepric", new BigInteger(String.valueOf((int) goods.get("subSlepric"))));
item.put("dscntAmt", new BigInteger(String.valueOf((int) goods.get("dscntAmt"))));
// dscntApplyAmt 4500
// slepric 5000
// subSlepric 5000
// dscntAmt 500
item.put("mbrInnb", new BigInteger(String.valueOf(goods.get("mbrInnb"))));
item.put("mbrDvCd", String.valueOf(goods.get("mbrDvCd")));
item.put("sopmalCd", String.valueOf(goods.get("sopmalCd")));
DlvyGroupList.add(item);
});
BigDecimal bundleDlvyAmtYSlepricSum = new BigDecimal(0); // 조건부 무료배송 묶음 O : 상품금액 합
DlvyGroupList.sort(Comparator.comparing((DataMap map) -> (BigInteger) map.get("goodsInnb")).thenComparing((DataMap map) -> (BigInteger) map.get("goodsOptnInnb")) .thenComparing((DataMap map) -> (BigInteger) map.get("dlvyGroupInnb"))); // 정렬
// 배송그룹고유번호별 상품목록
Map<BigInteger, List<DataMap>> goodsByDlvyGroupMap = DlvyGroupList.stream().collect(Collectors.groupingBy(m -> ((BigInteger) m.get("dlvyGroupInnb")), HashMap::new, Collectors.toList()));
List<DataMap> dlvyAmtByDlvyGroupList = new ArrayList<>();
if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "04".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원 개인결제, 정기배송
for (Map.Entry<BigInteger, List<DataMap>> dlvyGroupEtry : goodsByDlvyGroupMap.entrySet()) {
int dlvyGroupInnb = dlvyGroupEtry.getKey().intValue();
List<DataMap> goodsByDlvyGroupList = dlvyGroupEtry.getValue();
DataMap shippingParam = new DataMap() {{
put("dlvyGroupInnb", dlvyGroupInnb);
put("sopmalCd", sopmalCode);
}};
DataMap shippingGrouping = mapper.selectShippingGrouping(shippingParam);
// "KR".equals(dlvylcAreaCd)인 경우
String itemDlvyGroupDvCd = (String) shippingGrouping.get("dlvyGroupDvCd");
BigDecimal itemDftDlvyAmt = (BigDecimal) shippingGrouping.get("dftDlvyAmt"); // 기본배송비
BigDecimal itemDlvyAmt = itemDftDlvyAmt; // 배송비
String itemDlvyAreaAditAt = (String) shippingGrouping.get("dlvyAreaAditAt"); // 도서산간 추가 배송비 조건
BigDecimal itemAreaAditDlvyAmt = (BigDecimal) shippingGrouping.get("areaAditDlvyAmt"); // 도서산간 추가 배송비
String itemBundleDlvyUseAt = (String) shippingGrouping.get("bundleDlvyUseAt"); // 묶음배송 사용여부
BigDecimal itemBundleDlvyCndAmt = (BigDecimal) shippingGrouping.get("bundleDlvyCndAmt"); // 묶음배송 사용금액
String itemAmtCndUseAt = (String) shippingGrouping.get("amtCndUseAt"); // 금액조건
BigDecimal itemAmtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt");
String itemCntCndUseAt = (String) shippingGrouping.get("cntCndUseAt"); // 수량조건
BigDecimal itemCntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 수량
if("JP".equals(dlvylcAreaCd)){
itemDftDlvyAmt = (BigDecimal) shippingGrouping.get("dftDlvyAmt2"); // 기본배송비
itemDlvyAmt = itemDftDlvyAmt; // 배송비
itemDlvyAreaAditAt = (String) shippingGrouping.get("dlvyAreaAditAt2"); // 도서산간 추가 배송비 조건
itemAreaAditDlvyAmt = (BigDecimal) shippingGrouping.get("areaAditDlvyAmt2"); // 도서산간 추가 배송비
itemBundleDlvyUseAt = (String) shippingGrouping.get("bundleDlvyUseAt2"); // 묶음배송 사용여부
itemBundleDlvyCndAmt = (BigDecimal) shippingGrouping.get("bundleDlvyCndAmt2"); // 묶음배송 사용금액
itemAmtCndUseAt = (String) shippingGrouping.get("amtCndUseAt2"); // 금액조건
itemAmtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt");
itemCntCndUseAt = (String) shippingGrouping.get("cntCndUseAt2"); // 수량조건
itemCntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt2"); // 수량
}
// else if ("03".equals(itemDlvyGroupDvCd)) { // 유료배송
if ("02".equals(itemDlvyGroupDvCd) || "03".equals(itemDlvyGroupDvCd) || subsvcAt) { // 유료배송
// 추가배송비 계산 (MUL)
if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
}
}
// 무료 or 유료배송 + 수량 조건
if (("Y".equals(itemCntCndUseAt) && itemCntCndAditAmt.compareTo(BigDecimal.ZERO) > 0) || subsvcAt) {
// 수량 조건 있을 경우
for (DataMap goodsMap : goodsByDlvyGroupList) {
BigDecimal qy = new BigDecimal(String.valueOf(goodsMap.get("qy"))); // 수량
BigDecimal unitQy = subsvcAt ? qy : qy.divide(itemCntCndAditAmt, 0, RoundingMode.CEILING); // 단위수량
BigDecimal goodsDscntAmt = new BigDecimal(String.valueOf(goodsMap.get("dscntAmt")));
BigInteger unitDscntAmt = BigInteger.valueOf(goodsDscntAmt.intValue());
int goodsQy = unitQy.intValue();
// cntCndAditAmt(설정수량)으로 배송 나누기
for (int j = 0; j < goodsQy; j++) {
goodsMap.put("goodsInnb", new BigInteger(String.valueOf(goodsMap.get("goodsInnb"))).intValue());
goodsMap.put("goodsOptnInnb", new BigInteger(String.valueOf(goodsMap.get("goodsOptnInnb"))).intValue());
goodsMap.put("dlvyGroupInnb", new BigInteger(String.valueOf(goodsMap.get("dlvyGroupInnb"))).intValue());
goodsMap.put("slepric", new BigInteger(String.valueOf(goodsMap.get("slepric"))).intValue());
goodsMap.put("mbrInnb", new BigInteger(String.valueOf(goodsMap.get("mbrInnb"))).intValue());
// cntCndAditAmt(설정수량)단위로 으로 goodsList qy(수량) 설정
if ((goodsQy - j) > 1) {
goodsMap.put("qy", itemCntCndAditAmt.intValue());
} else {
goodsMap.put("qy", qy.intValue() - (itemCntCndAditAmt.intValue() * j));
}
// goodsDscntAmt(할인금액)이 있을 경우
if (goodsDscntAmt.compareTo(BigDecimal.ZERO) > 0) {
unitDscntAmt = new BigInteger(String.valueOf(goodsDscntAmt.divide(qy, 0, RoundingMode.DOWN))); // 소수점이하 나머지 버림
goodsMap.put("dscntAmt", unitDscntAmt.intValueExact());
goodsMap.put("subSlepric", new BigInteger(String.valueOf(((int) goodsMap.get("slepric") * (int) goodsMap.get("qy")))).intValueExact());
goodsMap.put("dscntApplyAmt", new BigInteger(String.valueOf(((int) goodsMap.get("slepric") * (int) goodsMap.get("qy")) - (int) goodsMap.get("dscntAmt"))).intValueExact());
} else {
// goodsDscntAmt(할인금액)이 0일 경우
goodsMap.put("dscntAmt", unitDscntAmt.intValueExact());
goodsMap.put("subSlepric", new BigInteger(String.valueOf(((int) goodsMap.get("slepric") * (int) goodsMap.get("qy")))).intValueExact());
goodsMap.put("dscntApplyAmt", new BigInteger(String.valueOf(((int) goodsMap.get("slepric") * (int) goodsMap.get("qy")) - (int) goodsMap.get("dscntAmt"))).intValueExact());
}
// item.put("subSlepric", new BigDecimal(String.valueOf(( (int) goods.get("slepric") * (int) goods.get("qy")) - (int) goods.get("dscntAmt") )));
// GoodsList에 추가
List<LinkedHashMap> itemGoodsList = new ArrayList<>();
itemGoodsList.add(new LinkedHashMap<>(goodsMap));
List<LinkedHashMap> itempPrsntList = new ArrayList<>();
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// if((goodsQy-j) > 1){
// itemPrsntMap.put("qy", itemCntCndAditAmt.intValue());
// } else {
// itemPrsntMap.put("qy", qy.intValue() - (itemCntCndAditAmt.intValue() * j));
// }
// }
// }
LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
dlvyMap.put("dftDlvyAmt", itemDftDlvyAmt.intValue());
dlvyMap.put("dlvyAmt", itemDlvyAmt.intValue());
dlvyMap.put("couponInnb", 0);
dlvyMap.put("dwldCouponInnb", 0);
dlvyMap.put("dplctDscntAt", "");
dlvyMap.put("otrCouponSmtmUseAt", "");
dlvyMap.put("mngrFreeDlvyUseAt", "N");
dlvyMap.put("dlvylcAreaCd", shipping.get("dlvylcAreaCd"));
dlvyMap.put("cstmclerCd", shipping.get("cstmclerCd"));
dlvyMap.put("dlvylcZip", shipping.get("dlvylcZip"));
dlvyMap.put("prefcd", shipping.get("prefcd"));
dlvyMap.put("recpntNm", shipping.get("recpntNm"));
dlvyMap.put("recpntMbtlnb", shipping.get("recpntMbtlnb"));
dlvyMap.put("dlvylcAdresDvCd", shipping.get("dlvylcAdresDvCd"));
dlvyMap.put("dlvylcLnbAdres", shipping.get("dlvylcLnbAdres"));
dlvyMap.put("dlvylcRnmAdres", shipping.get("dlvylcRnmAdres"));
dlvyMap.put("dlvylcAdresDtl", shipping.get("dlvylcAdresDtl"));
dlvyMap.put("dlvyMssageCn", shipping.get("dlvyMssageCn"));
dlvyMap.put("goodsList", itemGoodsList);
dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
dlvylcListMulti.add(dlvyMap);
} // for j
} // for goodsByDlvyGroupList
} else {
// 수량 조건 없을 경우
List<LinkedHashMap> itemGoodsList = new ArrayList<>();
for (DataMap goodsMap : goodsByDlvyGroupList) {
// BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
goodsMap.put("goodsInnb", new BigInteger(String.valueOf(goodsMap.get("goodsInnb"))).intValue());
goodsMap.put("goodsOptnInnb", new BigInteger(String.valueOf(goodsMap.get("goodsOptnInnb"))).intValue());
goodsMap.put("dlvyGroupInnb", new BigInteger(String.valueOf(goodsMap.get("dlvyGroupInnb"))).intValue());
goodsMap.put("qy", new BigInteger(String.valueOf(goodsMap.get("qy"))).intValue());
goodsMap.put("dscntApplyAmt", new BigInteger(String.valueOf(goodsMap.get("dscntApplyAmt"))).intValue());
goodsMap.put("slepric", new BigInteger(String.valueOf(goodsMap.get("slepric"))).intValue());
goodsMap.put("subSlepric", new BigInteger(String.valueOf(goodsMap.get("subSlepric"))).intValue());
goodsMap.put("dscntAmt", new BigInteger(String.valueOf(goodsMap.get("dscntAmt"))).intValue());
goodsMap.put("mbrInnb", new BigInteger(String.valueOf(goodsMap.get("mbrInnb"))).intValue());
itemGoodsList.add(new LinkedHashMap<>(goodsMap));
}
List<LinkedHashMap> itempPrsntList = new ArrayList<>();
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// itemPrsntMap.put("qy", qy.intValue());
// }
// }
LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
dlvyMap.put("dftDlvyAmt", itemDftDlvyAmt.intValue());
dlvyMap.put("dlvyAmt", itemDlvyAmt.intValue());
dlvyMap.put("couponInnb", 0);
dlvyMap.put("dwldCouponInnb", 0);
dlvyMap.put("dplctDscntAt", "");
dlvyMap.put("otrCouponSmtmUseAt", "");
dlvyMap.put("mngrFreeDlvyUseAt", "N");
dlvyMap.put("dlvylcAreaCd", shipping.get("dlvylcAreaCd"));
dlvyMap.put("cstmclerCd", shipping.get("cstmclerCd"));
dlvyMap.put("dlvylcZip", shipping.get("dlvylcZip"));
dlvyMap.put("prefcd", shipping.get("prefcd"));
dlvyMap.put("recpntNm", shipping.get("recpntNm"));
dlvyMap.put("recpntMbtlnb", shipping.get("recpntMbtlnb"));
dlvyMap.put("dlvylcAdresDvCd", shipping.get("dlvylcAdresDvCd"));
dlvyMap.put("dlvylcLnbAdres", shipping.get("dlvylcLnbAdres"));
dlvyMap.put("dlvylcRnmAdres", shipping.get("dlvylcRnmAdres"));
dlvyMap.put("dlvylcAdresDtl", shipping.get("dlvylcAdresDtl"));
dlvyMap.put("dlvyMssageCn", shipping.get("dlvyMssageCn"));
dlvyMap.put("goodsList", itemGoodsList);
dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
dlvylcListMulti.add(dlvyMap);
}
// } // DlvyGroupDvCd 무료배송, 유료배송
} else { // 조건부 무료 or 무료 배송일 경우
// 무료배송(조건부)
if ("01".equals(itemDlvyGroupDvCd)) {
List<LinkedHashMap> itemGoodsList = new ArrayList<>();
for (DataMap goodsMap : goodsByDlvyGroupList) {
BigDecimal subSlepric = new BigDecimal(String.valueOf(goodsMap.get("subSlepric"))); // 판매가 * 수량
// 금액 조건
if ("Y".equals(itemAmtCndUseAt)) {
// subSlepric(금액)이 무료배송 금액조건보다 크거나 같을 경우 [상품 기준]
if (subSlepric.compareTo(itemAmtCndAditAmt) >= 0) {
itemDlvyAmt = new BigDecimal(0);
}
}
// 수량 조건
if ("Y".equals(itemCntCndUseAt)) {
BigDecimal qy = new BigDecimal(String.valueOf(goodsMap.get("qy"))); // 수량
// qy(수량)이 무료배송 수량조건보다 크거나 같을 경우 [상품 기준]
if (qy.compareTo(itemCntCndAditAmt) >= 0) {
itemDlvyAmt = new BigDecimal(0);
}
}
// 묶음배송 조건 사용여부 [상품리스트 전체 기준]
if ("Y".equals(itemBundleDlvyUseAt)) { // 묶음 O
// 묶음배송 사용여부 Y && 상품건수 1개 이상
if (goodsByDlvyGroupList.size() > 0) {
// 묶음배송 조건금액이 있으면
if (itemBundleDlvyCndAmt != null && itemBundleDlvyCndAmt.compareTo(BigDecimal.ZERO) > 0) {
bundleDlvyAmtYSlepricSum = bundleDlvyAmtYSlepricSum.add(subSlepric);
// bundleDlvyAmtYSlepricSum 값이 itemBundleDlvyCndAmt 보다 크거나 같으면( 묶음배송 무료조건을 만족하면)
if (bundleDlvyAmtYSlepricSum.compareTo(itemBundleDlvyCndAmt) >= 0) {
itemDlvyAmt = new BigDecimal(0);
}
}
}
}
// multi shipping -> goodsList int값으로 변환
goodsMap.put("goodsInnb", new BigInteger(String.valueOf(goodsMap.get("goodsInnb"))).intValue());
goodsMap.put("goodsOptnInnb", new BigInteger(String.valueOf(goodsMap.get("goodsOptnInnb"))).intValue());
goodsMap.put("dlvyGroupInnb", new BigInteger(String.valueOf(goodsMap.get("dlvyGroupInnb"))).intValue());
goodsMap.put("qy", new BigInteger(String.valueOf(goodsMap.get("qy"))).intValue());
goodsMap.put("dscntApplyAmt", new BigInteger(String.valueOf(goodsMap.get("dscntApplyAmt"))).intValue());
goodsMap.put("slepric", new BigInteger(String.valueOf(goodsMap.get("slepric"))).intValue());
goodsMap.put("subSlepric", new BigInteger(String.valueOf(goodsMap.get("subSlepric"))).intValue());
goodsMap.put("dscntAmt", new BigInteger(String.valueOf(goodsMap.get("dscntAmt"))).intValue());
goodsMap.put("mbrInnb", new BigInteger(String.valueOf(goodsMap.get("mbrInnb"))).intValue());
itemGoodsList.add(new LinkedHashMap<>(goodsMap));
}
List<LinkedHashMap> itempPrsntList = new ArrayList<>();
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// itemPrsntMap.put("qy", qy.intValue());
// }
// }
// 추가배송비 계산 (MUL)
if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
}
}
LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
dlvyMap.put("dftDlvyAmt", itemDftDlvyAmt.intValue());
dlvyMap.put("dlvyAmt", itemDlvyAmt.intValue());
dlvyMap.put("couponInnb", 0);
dlvyMap.put("dwldCouponInnb", 0);
dlvyMap.put("dplctDscntAt", "");
dlvyMap.put("otrCouponSmtmUseAt", "");
dlvyMap.put("mngrFreeDlvyUseAt", "N");
dlvyMap.put("dlvylcAreaCd", shipping.get("dlvylcAreaCd"));
dlvyMap.put("cstmclerCd", shipping.get("cstmclerCd"));
dlvyMap.put("dlvylcZip", shipping.get("dlvylcZip"));
dlvyMap.put("prefcd", shipping.get("prefcd"));
dlvyMap.put("recpntNm", shipping.get("recpntNm"));
dlvyMap.put("recpntMbtlnb", shipping.get("recpntMbtlnb"));
dlvyMap.put("dlvylcAdresDvCd", shipping.get("dlvylcAdresDvCd"));
dlvyMap.put("dlvylcLnbAdres", shipping.get("dlvylcLnbAdres"));
dlvyMap.put("dlvylcRnmAdres", shipping.get("dlvylcRnmAdres"));
dlvyMap.put("dlvylcAdresDtl", shipping.get("dlvylcAdresDtl"));
dlvyMap.put("dlvyMssageCn", shipping.get("dlvyMssageCn"));
dlvyMap.put("goodsList", itemGoodsList);
dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
dlvylcListMulti.add(dlvyMap);
} else { //if ("02".equals(itemDlvyGroupDvCd)) { // 무료 배송일 경우
// 추가배송비 계산 (MUL)
if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
}
}
List<LinkedHashMap> itemGoodsList = new ArrayList<>();
for (DataMap goodsMap : goodsByDlvyGroupList) {
// BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
goodsMap.put("goodsInnb", new BigInteger(String.valueOf(goodsMap.get("goodsInnb"))).intValue());
goodsMap.put("goodsOptnInnb", new BigInteger(String.valueOf(goodsMap.get("goodsOptnInnb"))).intValue());
goodsMap.put("dlvyGroupInnb", new BigInteger(String.valueOf(goodsMap.get("dlvyGroupInnb"))).intValue());
goodsMap.put("qy", new BigInteger(String.valueOf(goodsMap.get("qy"))).intValue());
goodsMap.put("dscntApplyAmt", new BigInteger(String.valueOf(goodsMap.get("dscntApplyAmt"))).intValue());
goodsMap.put("slepric", new BigInteger(String.valueOf(goodsMap.get("slepric"))).intValue());
goodsMap.put("subSlepric", new BigInteger(String.valueOf(goodsMap.get("subSlepric"))).intValue());
goodsMap.put("dscntAmt", new BigInteger(String.valueOf(goodsMap.get("dscntAmt"))).intValue());
goodsMap.put("mbrInnb", new BigInteger(String.valueOf(goodsMap.get("mbrInnb"))).intValue());
itemGoodsList.add(new LinkedHashMap<>(goodsMap));
}
List<LinkedHashMap> itempPrsntList = new ArrayList<>();
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// itemPrsntMap.put("qy", qy.intValue());
// }
// }
LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
dlvyMap.put("dftDlvyAmt", itemDftDlvyAmt.intValue());
dlvyMap.put("dlvyAmt", itemDlvyAmt.intValue());
dlvyMap.put("couponInnb", 0);
dlvyMap.put("dwldCouponInnb", 0);
dlvyMap.put("dplctDscntAt", "");
dlvyMap.put("otrCouponSmtmUseAt", "");
dlvyMap.put("mngrFreeDlvyUseAt", "N");
dlvyMap.put("dlvylcAreaCd", shipping.get("dlvylcAreaCd"));
dlvyMap.put("cstmclerCd", shipping.get("cstmclerCd"));
dlvyMap.put("dlvylcZip", shipping.get("dlvylcZip"));
dlvyMap.put("prefcd", shipping.get("prefcd"));
dlvyMap.put("recpntNm", shipping.get("recpntNm"));
dlvyMap.put("recpntMbtlnb", shipping.get("recpntMbtlnb"));
dlvyMap.put("dlvylcAdresDvCd", shipping.get("dlvylcAdresDvCd"));
dlvyMap.put("dlvylcLnbAdres", shipping.get("dlvylcLnbAdres"));
dlvyMap.put("dlvylcRnmAdres", shipping.get("dlvylcRnmAdres"));
dlvyMap.put("dlvylcAdresDtl", shipping.get("dlvylcAdresDtl"));
dlvyMap.put("dlvyMssageCn", shipping.get("dlvyMssageCn"));
dlvyMap.put("goodsList", itemGoodsList);
dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
dlvylcListMulti.add(dlvyMap);
}
} // 조건부 무료 or 무료 배송일 경우
// dlvyAmtByDlvyGroupList.add(dlvyGroupMap); // 배송그룹별 배송비 목록
} // for : dlvyGroupEtry
// 배송지가 1개 이상이면 여러곳 배송으로 변경
if(dlvylcListMulti.size() > 1) {
ordrTyCd = "05";
}
} else if ("05".equals(ordrTyCd)) { // 여러곳 배송, 선물하기
if (!CollectionUtils.isEmpty(multiOrdrDlvylcMap)) {
// 배송지 리스트
dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylcMap.get("dlvylc");
log.debug("dlvylcListMulti : {}", dlvylcListMulti);
}
} }
/** 여러곳 배송 배송지 세팅 종료 */ /** 여러곳 배송 배송지 세팅 종료 */
String sopmalCd = "";
if("01".equals(user.getSysDvCd())){
sopmalCd = user.getSopmalCd();
}else{
sopmalCd = param.get("sopmalCd").toString();
}
String ordrTyCd = (String) param.get("ordrTyCd");
/* ***************************** /* *****************************
1. 주문등록(GC_ORDER) 1. 주문등록(GC_ORDER)
@@ -124,10 +570,11 @@ public class BOOrderService {
/* *********************************** /* ***********************************
4. 주문상품 등록(GC_ORDER_ITEM) 4. 주문상품 등록(GC_ORDER_ITEM)
*********************************** */ *********************************** */
List<BOOrderItemVO> insertedGoodsList = insertOrdrGoods(sopmalCd, "01", ordrInnb, goodsList); List<BOOrderItemVO> insertedGoodsList = insertOrdrGoods(sopmalCd, "01", ordrInnb, goodsList, subsvcAt);
BOOrderShippingVO shippingEscrowVO = new BOOrderShippingVO(); BOOrderShippingVO shippingEscrowVO = new BOOrderShippingVO();
if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "04".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원 개인결제, 정기배송 if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "04".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원 개인결제, 정기배송
BOOrderShippingVO shippingVO = new BOOrderShippingVO(); BOOrderShippingVO shippingVO = new BOOrderShippingVO();
shippingVO.setSopmalCd(sopmalCd); shippingVO.setSopmalCd(sopmalCd);
@@ -423,8 +870,17 @@ public class BOOrderService {
int goodsOptnInnb = (int) goods.get("goodsOptnInnb"); int goodsOptnInnb = (int) goods.get("goodsOptnInnb");
int ordrQy = (int) goods.get("qy"); int ordrQy = (int) goods.get("qy");
BOOrderItemVO orderItemVO = insertedGoodsList.stream().filter(obj-> Objects.equals(ordrInnb, obj.getOrdrInnb()) && List<BOOrderItemVO> orderItemVOList = insertedGoodsList.stream().filter(obj-> Objects.equals(ordrInnb, obj.getOrdrInnb()) &&
Objects.equals(BigInteger.valueOf(goodsInnb), obj.getGoodsInnb())).findAny().orElse(null); Objects.equals(BigInteger.valueOf(goodsInnb), obj.getGoodsInnb())).toList();
BOOrderItemVO orderItemVO = new BOOrderItemVO();
// 구독서비스 여부(subsvcAt)에 따라 주문상품 취급 방식 분기
if(subsvcAt) {
// 구독서비스 : 동일 상품이라도 순번에 따라 개별 옵션 유지
orderItemVO = orderItemVOList.size() > allGoodsCount ? orderItemVOList.get(allGoodsCount) : null;
} else {
// 일반 주문 : 동일 상품과 옵션은 하나로 병합하여 처리
orderItemVO = orderItemVOList.stream().findAny().orElse(null);
}
/* *********************************************** /* ***********************************************
6. 주문 상품 옵션 정보 등록(GC_ORDER_ITEM_OPTION) 6. 주문 상품 옵션 정보 등록(GC_ORDER_ITEM_OPTION)
@@ -487,7 +943,7 @@ public class BOOrderService {
inputOptnVO.setOptnVal4(optns[3]); inputOptnVO.setOptnVal4(optns[3]);
} }
itemOptnVO.setOrdrGoodsOptnInnb(orderNoService.generateOrderItemOptnNo()); inputOptnVO.setOrdrGoodsOptnInnb(orderNoService.generateOrderItemOptnNo());
mapper.insertOrdrGoodsOption(inputOptnVO); // 주문 상품 입력 옵션 정보 등록 mapper.insertOrdrGoodsOption(inputOptnVO); // 주문 상품 입력 옵션 정보 등록
} }
} }
@@ -509,154 +965,6 @@ public class BOOrderService {
} }
// LinkedHashMap prsntMapByOrdrShpping = new LinkedHashMap();
// LinkedHashMap tmpQyMap = new LinkedHashMap();
//
// int totOrdrQy = goodsList.stream().mapToInt(obj -> (int) obj.get("qy")).sum();
//
// if ("05".equals(ordrTyCd)) {
// int mngrFreeDlvyUseAmt = shipping.values().stream().map(obj-> (LinkedHashMap) obj).mapToInt(obj -> (int) obj.get("mngrFreeDlvyUseAmt")).sum();
//
// if (0 < mngrFreeDlvyUseAmt) {
// BigDecimal dscntAmt = new BigDecimal(StringUtils.hasText((String) enuri.get("enuriAmt")) ? (String) enuri.get("enuriAmt") : "0");
//
// // enuri.put("enuriAmt", dscntAmt.add(BigDecimal.valueOf(mngrFreeDlvyUseAmt)).toString()); // (2025-02-28) 무료배송시 할인 금액을 애누리에 넣지않고 무료 배송비 여부만 gc_order_shipping 마킹함.
// }
// }
// for (String adbkInnb : shipping.keySet()) {
// LinkedHashMap shippingMap = (LinkedHashMap) shipping.get(adbkInnb);
//
// BOOrderShippingVO shippingVO = new BOOrderShippingVO();
//
// shippingVO.setSopmalCd(sopmalCd);
// shippingVO.setOrdrInnb(ordrInnb);
// shippingVO.setAdbkInnb(adbkInnb);
// shippingVO.setMngrInnb(orderVO.getMngrInnb());
// shippingVO.setMbrInnb(orderVO.getMbrInnb());
// shippingVO.setOrdrSttusCd(orderVO.getOrdrSttusCd());
// // shippingVO.setMngrFreeDlvyUseAt(StringUtil.isNullToString(shipping.get("mngrFreeDlvyUseAt")) != "" ? StringUtil.isNullToString(shipping.get("mngrFreeDlvyUseAt")) : "N"); // TODO : 여러곳 배송일 경우 모료배송비 여부 일반주문과 같이 고려 필요 (2025-02-28)
//
// /* *****************************************
// 4. 주문배송 정보 등록(GC_ORDER_SHIPPING)
// ***************************************** */
// insertShipping(ordrTyCd, shippingMap, shippingVO); // 주문배송 정보 등록
// shippingEscrowVO = shippingVO; //에스크로에 보낼 배송정보 (TODO :: 여러곳배송은 배송지가 여러곳이라 어느 정보일지 결정해야 함. 현재는 1번으로)
//
// BigInteger ordrDlvyInnb = shippingVO.getOrdrDlvyInnb();
//
// List<LinkedHashMap> dlvylcByGoodsList = (List<LinkedHashMap>) shippingMap.get("goodsList");
//
// // 분배된 할인 금액 누적
// BOOrderRestAmtVO discountInfo = new BOOrderRestAmtVO();
//
// /* ***********************************************
// 5. 주문 상품 옵션 정보 등록(GC_ORDER_ITEM_OPTION)
// 주문 상품 입력 옵션 정보 등록
// *********************************************** */
// if (!CollectionUtils.isEmpty(dlvylcByGoodsList)) {
// for (int i = 0; i < dlvylcByGoodsList.size(); i++) {
// LinkedHashMap goods = dlvylcByGoodsList.get(i);
//
// if (!CollectionUtils.isEmpty(goods)) {
// int goodsInnb = (int) goods.get("goodsInnb");
// int goodsOptnInnb = (int) goods.get("goodsOptnInnb");
// int qy = (int) goods.get("qy");
// int ordrQy = (int) goods.get("ordrQy");
//
// BOOrderItemVO orderItemVO = insertedGoodsList.stream().filter(obj -> Objects.equals(ordrInnb, obj.getOrdrInnb()) &&
// Objects.equals(BigInteger.valueOf(goodsInnb), obj.getGoodsInnb())).findAny().orElse(null);
//
// if (orderItemVO != null) {
// int preQy = tmpQyMap.get(String.valueOf(goodsOptnInnb)) != null ? (int) tmpQyMap.get(String.valueOf(goodsOptnInnb)) : 0;
// int subTotQy = (qy + preQy);
//
// boolean isSubLast = (subTotQy == ordrQy);
// boolean isLast = false;
//
// if (isSubLast) {
// int preOrderGoodsQy = tmpQyMap.get(String.valueOf(ordrInnb)) != null ? (int) tmpQyMap.get(String.valueOf(ordrInnb)) : 0;
// int orderGoodsQy = (subTotQy + preOrderGoodsQy);
//
// isLast = (orderGoodsQy == totOrdrQy);
//
// tmpQyMap.put(String.valueOf(ordrInnb), subTotQy);
// }
//
// BOOrderItemOptnVO itemOptnVO = new BOOrderItemOptnVO();
//
// itemOptnVO.setSopmalCd(sopmalCd);
// itemOptnVO.setOrdrGoodsInnb(orderItemVO.getOrdrGoodsInnb());
// itemOptnVO.setOrdrDlvyInnb(ordrDlvyInnb);
// itemOptnVO.setOrdrSttusCd(orderVO.getOrdrSttusCd());
//
// setGoodsOptn(sopmalCd, goodsInnb, goodsOptnInnb, qy, itemOptnVO); // 상품 옵션정보 세팅
//
// setDscntDtls(goodsInnb, goodsOptnInnb, adbkInnb, goodsList, shipping, enuri, itemOptnVO, isSubLast, isLast, discountInfo); // 상품 할인내역 세팅
//
// if (StringUtils.hasText((String) purchsr.get("mbrId"))) { // 회원
// setMlgAmt(ordrTyCd, goodsInnb, goodsOptnInnb, qy, goodsList, itemOptnVO); // 상품 마일리지 정보 세팅
// } else {
// itemOptnVO.setMlgAccmlUnit(new BigDecimal(0)); // 마일리지적립금액(개당)
// itemOptnVO.setMlgAccmlRest(new BigDecimal(0)); // 마일리지적립금액(짜투리)
// }
//
// mapper.insertOrdrGoodsOption(itemOptnVO); // 주문 상품 옵션 정보 등록
//
// tmpQyMap.put(String.valueOf(goodsOptnInnb), qy);
//
// String inputOptn = (String) goods.get("inputOptn");
//
// if (StringUtils.hasText(inputOptn)) {
// String[] inputOptns = inputOptn.split("/");
//
// for (int j = 0; j < inputOptns.length; j++) {
// String optn = inputOptns[j];
// String[] optns = optn.split(",");
//
// BOOrderItemOptnVO inputOptnVO = new BOOrderItemOptnVO();
//
// inputOptnVO.setSopmalCd(sopmalCd);
// inputOptnVO.setOrdrGoodsInnb(orderItemVO.getOrdrGoodsInnb());
// inputOptnVO.setOrdrDlvyInnb(ordrDlvyInnb);
// inputOptnVO.setOrdrSttusCd("0"); // 주문상태(99:결제실패)
// inputOptnVO.setRelateOrdrGoodsOptnInnb(itemOptnVO.getOrdrGoodsOptnInnb());
//
// setGoodsOptn(optns[0], Integer.parseInt(optns[1]), Integer.parseInt(optns[2]), 0, inputOptnVO); // 상품 옵션정보 세팅
//
// if (i == 0) {
// inputOptnVO.setOptnVal1(optns[3]);
// } else if (i == 1) {
// inputOptnVO.setOptnVal2(optns[3]);
// } else if (i == 2) {
// inputOptnVO.setOptnVal3(optns[3]);
// } else if (i == 3) {
// inputOptnVO.setOptnVal4(optns[3]);
// }
//
// mapper.insertOrdrGoodsOption(inputOptnVO); // 주문 상품 입력 옵션 정보 등록
// }
// }
// }
// }
// }
//
// List<LinkedHashMap> prsntListByOrdrShpping = (List<LinkedHashMap>) shippingMap.get("prsntList");
//
// if (!CollectionUtils.isEmpty(prsntListByOrdrShpping)) {
// prsntMapByOrdrShpping.put(ordrDlvyInnb.toString(), prsntListByOrdrShpping); // 주문배송 별 사은품 정보 등록
// }
// } else {
// throw new WnbtRestException("배송지별 주문상품정보를 찾을 수 없습니다.");
// }
// }
/* *****************************************************
6. 주문 상품 옵션(사은품) 정보 등록(GC_ORDER_ITEM_OPTION)
***************************************************** */
// if (!CollectionUtils.isEmpty(prsntMapByOrdrShpping)) {
// insertPrsntByOrdrShpping(sopmalCd, ordrInnb, prsntMapByOrdrShpping);
// }
} }
// mapper.updateUsefulInvntryQy(orderVO); // 가용제고수량 수정 ( 주석 처리자 : 추지훈 :: 주문 등록할때 재고떨고 결제될때 또 재고 떨어서 주석처리함 ) // mapper.updateUsefulInvntryQy(orderVO); // 가용제고수량 수정 ( 주석 처리자 : 추지훈 :: 주문 등록할때 재고떨고 결제될때 또 재고 떨어서 주석처리함 )
@@ -668,6 +976,9 @@ public class BOOrderService {
***************************************** */ ***************************************** */
BOOrderSetleVO setleVO = insertSetle(orderVO, setle, insertedGoodsList, enuri, purchsr); // 결제 정보 등록 BOOrderSetleVO setleVO = insertSetle(orderVO, setle, insertedGoodsList, enuri, purchsr); // 결제 정보 등록
// 결제금액 원화로 변경
// setleVO.setSetleAmt(setleVO.getWonSetleAmt());
content.put("ordr", orderVO); content.put("ordr", orderVO);
content.put("setle", setleVO); content.put("setle", setleVO);
content.put("shipping", shippingEscrowVO); content.put("shipping", shippingEscrowVO);
@@ -750,7 +1061,14 @@ public class BOOrderService {
* @return * @return
*/ */
public List<BOOrderItemVO> insertOrdrGoods(String sopmalCd, String goodsKndCd, BigInteger ordrInnb, List<LinkedHashMap> goodsList) { public List<BOOrderItemVO> insertOrdrGoods(String sopmalCd, String goodsKndCd, BigInteger ordrInnb, List<LinkedHashMap> goodsList) {
List<Integer> goodsInnbList = (goodsList.stream().map(obj-> (int) obj.get("goodsInnb")).toList()).stream().distinct().toList(); // 상품번호 목록(중복제거) return insertOrdrGoods(sopmalCd, goodsKndCd, ordrInnb, goodsList, false);
}
public List<BOOrderItemVO> insertOrdrGoods(String sopmalCd, String goodsKndCd, BigInteger ordrInnb, List<LinkedHashMap> goodsList, Boolean subsvcAt) {
Stream<Integer> goodsInnbstream = goodsList.stream().map(obj -> (int) obj.get("goodsInnb"));
if(!subsvcAt) // 상품번호 목록(중복제거)
goodsInnbstream = goodsInnbstream.distinct();
List<Integer> goodsInnbList = goodsInnbstream.toList();
boolean tmAt = goodsList.stream().anyMatch(map -> map.containsKey("tmAt")); //tm주문 여부 boolean tmAt = goodsList.stream().anyMatch(map -> map.containsKey("tmAt")); //tm주문 여부
List<BOOrderItemVO> insertedGoodsList = new ArrayList<>(); // 주문상품 목록 List<BOOrderItemVO> insertedGoodsList = new ArrayList<>(); // 주문상품 목록
@@ -776,6 +1094,7 @@ public class BOOrderService {
itemVO.setGoodsKndCd((String) goods.get("goodsKndCd")); itemVO.setGoodsKndCd((String) goods.get("goodsKndCd"));
itemVO.setGoodsImgCours((String) goods.get("goodsImgWithoutHostImage")); itemVO.setGoodsImgCours((String) goods.get("goodsImgWithoutHostImage"));
itemVO.setGoodsNm((String) goods.get("goodsNm")); itemVO.setGoodsNm((String) goods.get("goodsNm"));
itemVO.setGoodsNmEn((String) goods.get("goodsNmEn"));
itemVO.setTaxtTrgetAt((String) goods.get("taxtTrgetAt")); itemVO.setTaxtTrgetAt((String) goods.get("taxtTrgetAt"));
itemVO.setSubscrptWthdrawPosblAt((String) goods.get("subscrptWthdrawPosblAt")); itemVO.setSubscrptWthdrawPosblAt((String) goods.get("subscrptWthdrawPosblAt"));
itemVO.setIndvdlzCanclPosblAt((String) goods.get("indvdlzCanclPosblAt")); itemVO.setIndvdlzCanclPosblAt((String) goods.get("indvdlzCanclPosblAt"));
@@ -924,11 +1243,13 @@ public class BOOrderService {
BOOrderSetleVO setleVO = new BOOrderSetleVO(); BOOrderSetleVO setleVO = new BOOrderSetleVO();
BigDecimal rlSetleAmt = new BigDecimal((String) setle.get("rlSetleAmt")); BigDecimal rlSetleAmt = new BigDecimal((String) setle.get("rlSetleAmt"));
BigDecimal wonRlSetleAmt = new BigDecimal((String) setle.get("wonRlSetleAmt"));
setleVO.setSopmalCd(sopmalCd); setleVO.setSopmalCd(sopmalCd);
setleVO.setOrdrInnb(ordrInnb); setleVO.setOrdrInnb(ordrInnb);
setleVO.setGoodsNm(goodsNm); setleVO.setGoodsNm(goodsNm);
setleVO.setSetleAmt(rlSetleAmt); setleVO.setSetleAmt(rlSetleAmt);
setleVO.setWonSetleAmt(wonRlSetleAmt);
String pgCmpnyNm = (String) setle.get("pgCmpnyNm"); String pgCmpnyNm = (String) setle.get("pgCmpnyNm");
String setleTyCd = (String) setle.get("setleTyCd"); String setleTyCd = (String) setle.get("setleTyCd");
@@ -949,7 +1270,7 @@ public class BOOrderService {
setleVO.setPgCmpnyNm(""); setleVO.setPgCmpnyNm("");
} }
if (StringUtils.hasText((String) purchsr.get("mbrId"))) { // GC머니는 회원만 적용 if (StringUtils.hasText((String) purchsr.get("mbrId")) && orderVO.getSubsvcInnb() == null) { // GC머니는 회원만 적용
// GC 머니 사용했을 경우 여부, 금액 세팅 ( 결제유형과는 무관 ) // GC 머니 사용했을 경우 여부, 금액 세팅 ( 결제유형과는 무관 )
Object useCashMlgAmt = enuri.get("useCashMlgAmt"); // 사용 GC 머니 Object useCashMlgAmt = enuri.get("useCashMlgAmt"); // 사용 GC 머니
if (useCashMlgAmt != null) { if (useCashMlgAmt != null) {
@@ -1223,6 +1544,9 @@ public class BOOrderService {
shippingVO.setRecpntTelnb((String) shipping.get("recpntTelnb")); shippingVO.setRecpntTelnb((String) shipping.get("recpntTelnb"));
shippingVO.setRecpntMbtlnb((String) shipping.get("recpntMbtlnb")); shippingVO.setRecpntMbtlnb((String) shipping.get("recpntMbtlnb"));
shippingVO.setDlvylcAreaCd((String) shipping.get("dlvylcAreaCd"));
shippingVO.setCstmclerCd((String) shipping.get("cstmclerCd"));
shippingVO.setPrefcd((String) shipping.get("prefcd"));
shippingVO.setDlvylcZip((String) shipping.get("dlvylcZip")); shippingVO.setDlvylcZip((String) shipping.get("dlvylcZip"));
shippingVO.setDlvylcAdresDvCd((String) shipping.get("dlvylcAdresDvCd")); shippingVO.setDlvylcAdresDvCd((String) shipping.get("dlvylcAdresDvCd"));
shippingVO.setDlvylcLnbAdres((String) shipping.get("dlvylcLnbAdres")); shippingVO.setDlvylcLnbAdres((String) shipping.get("dlvylcLnbAdres"));
@@ -1261,6 +1585,9 @@ public class BOOrderService {
shippingVO.setRecpntTelnb(StringUtil.isNullToString(shipping.get("recpntTelnb"))); shippingVO.setRecpntTelnb(StringUtil.isNullToString(shipping.get("recpntTelnb")));
shippingVO.setRecpntMbtlnb(StringUtil.isNullToString(shipping.get("recpntMbtlnb"))); shippingVO.setRecpntMbtlnb(StringUtil.isNullToString(shipping.get("recpntMbtlnb")));
shippingVO.setDlvylcAreaCd(StringUtil.isNullToString(shipping.get("dlvylcAreaCd")));
shippingVO.setCstmclerCd(StringUtil.isNullToString(shipping.get("cstmclerCd")));
shippingVO.setPrefcd(StringUtil.isNullToString(shipping.get("prefcd")));
shippingVO.setDlvylcZip(StringUtil.isNullToString(shipping.get("dlvylcZip"))); shippingVO.setDlvylcZip(StringUtil.isNullToString(shipping.get("dlvylcZip")));
shippingVO.setDlvylcAdresDvCd(StringUtil.isNullToString(shipping.get("dlvylcAdresDvCd"))); shippingVO.setDlvylcAdresDvCd(StringUtil.isNullToString(shipping.get("dlvylcAdresDvCd")));
shippingVO.setDlvylcLnbAdres(StringUtil.isNullToString(shipping.get("dlvylcLnbAdres"))); shippingVO.setDlvylcLnbAdres(StringUtil.isNullToString(shipping.get("dlvylcLnbAdres")));
@@ -1486,6 +1813,17 @@ public class BOOrderService {
orderVO.setRlSetleAmt(new BigDecimal(rlSetleAmt)); orderVO.setRlSetleAmt(new BigDecimal(rlSetleAmt));
} }
String wonRlSetleAmt = (String) setle.get("wonRlSetleAmt"); // 실결제금액(원화)
if (StringUtils.hasText(wonRlSetleAmt)) {
orderVO.setWonRlSetleAmt(new BigDecimal(wonRlSetleAmt));
}
DataMap paramMap = new DataMap();
paramMap.put("sopmalCd", orderVO.getSopmalCd());
BigDecimal buyRate = boOrdrMapper.selectBuyRate(paramMap); // 살때환율
orderVO.setBuyRate(buyRate);
String setleTyCd = (String) setle.get("setleTyCd"); String setleTyCd = (String) setle.get("setleTyCd");
if ("02".equals(setleTyCd)) { //|| "04".equals(setleTyCd) || "05".equals(setleTyCd)) { // KCP 무통장, 가상계좌, 가상계좌(에스크로) leeks if ("02".equals(setleTyCd)) { //|| "04".equals(setleTyCd) || "05".equals(setleTyCd)) { // KCP 무통장, 가상계좌, 가상계좌(에스크로) leeks
@@ -1506,6 +1844,11 @@ public class BOOrderService {
orderVO.setMngrId((String) setle.get("mngrId")); // 관리자ID orderVO.setMngrId((String) setle.get("mngrId")); // 관리자ID
orderVO.setMngrNm((String) setle.get("mngrNm")); // 관리자명 orderVO.setMngrNm((String) setle.get("mngrNm")); // 관리자명
} }
if (setle.containsKey("subsvcInnb")) { // 구독서비스 고유번호
int subsvcInnb = (Integer) setle.get("subsvcInnb");
orderVO.setSubsvcInnb(subsvcInnb);
}
} else { } else {
orderVO.setOrdrSttusCd("0"); orderVO.setOrdrSttusCd("0");
orderVO.setUseAt("Y"); orderVO.setUseAt("Y");
@@ -1580,6 +1923,10 @@ public class BOOrderService {
itemOptnVO.setOptnCd2((String) goodsOptn.get("optnCd2")); itemOptnVO.setOptnCd2((String) goodsOptn.get("optnCd2"));
itemOptnVO.setOptnCd3((String) goodsOptn.get("optnCd3")); itemOptnVO.setOptnCd3((String) goodsOptn.get("optnCd3"));
itemOptnVO.setOptnCd4((String) goodsOptn.get("optnCd4")); itemOptnVO.setOptnCd4((String) goodsOptn.get("optnCd4"));
itemOptnVO.setHscode((String) goodsOptn.get("hscode"));
itemOptnVO.setRealWt((BigDecimal) goodsOptn.get("realWt"));
itemOptnVO.setVolWt((BigInteger) goodsOptn.get("volWt"));
itemOptnVO.setPackageCnt((Integer) goodsOptn.get("packageCnt"));
itemOptnVO.setOptnInfo((String) goodsOptn.get("optnInfo")); itemOptnVO.setOptnInfo((String) goodsOptn.get("optnInfo"));
itemOptnVO.setCnsmrpric((BigDecimal) goodsOptn.get("cnsmrpric")); // 소비자가 itemOptnVO.setCnsmrpric((BigDecimal) goodsOptn.get("cnsmrpric")); // 소비자가
itemOptnVO.setSlepric((BigDecimal) goodsOptn.get("slepric")); // 판매가 itemOptnVO.setSlepric((BigDecimal) goodsOptn.get("slepric")); // 판매가

View File

@@ -1837,6 +1837,8 @@ public class BOPurchsService {
public Map<String, Object> selectSetleExpectAmt(DataMap param) { public Map<String, Object> selectSetleExpectAmt(DataMap param) {
Map<String, Object> content = new HashMap<>(); Map<String, Object> content = new HashMap<>();
log.debug("BOPurchsService.selectSetleExpectAmt-param : {}", param);
String sopmalCd = (String) param.get("sopmalCd"); String sopmalCd = (String) param.get("sopmalCd");
LinkedHashMap setleExpectAmtMap = new LinkedHashMap(){{ LinkedHashMap setleExpectAmtMap = new LinkedHashMap(){{
@@ -1925,7 +1927,7 @@ public class BOPurchsService {
if (dlvylc.get("dlvyAmt") != null) { if (dlvylc.get("dlvyAmt") != null) {
dlvyAmtBydlvylc = dlvyAmtBydlvylc + castAmt(dlvylc, "dlvyAmt"); dlvyAmtBydlvylc = dlvyAmtBydlvylc + castAmt(dlvylc, "dlvyAmt");
} else { } else {
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd); dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
if (!CollectionUtils.isEmpty(dlvyAmtMap)) { if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue(); dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
@@ -1950,7 +1952,7 @@ public class BOPurchsService {
if (dlvylcMap.get("dlvyAmt") != null) { if (dlvylcMap.get("dlvyAmt") != null) {
dlvyAmtBydlvylc = dlvyAmtBydlvylc + castAmt(dlvylcMap, "dlvyAmt"); dlvyAmtBydlvylc = dlvyAmtBydlvylc + castAmt(dlvylcMap, "dlvyAmt");
} else { } else {
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd); dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
if (!CollectionUtils.isEmpty(dlvyAmtMap)) { if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue(); dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
@@ -1961,7 +1963,7 @@ public class BOPurchsService {
dlvyAmt = new BigDecimal(dlvyAmtBydlvylc); dlvyAmt = new BigDecimal(dlvyAmtBydlvylc);
} }
} else { } else {
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd); dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd);
if (!CollectionUtils.isEmpty(dlvyAmtMap)) { if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
dlvyAmt = (BigDecimal) dlvyAmtMap.get("dlvyAmt"); dlvyAmt = (BigDecimal) dlvyAmtMap.get("dlvyAmt");
@@ -2107,7 +2109,7 @@ public class BOPurchsService {
* @param goodsList * @param goodsList
* @return List<DataMap> * @return List<DataMap>
*/ */
public DataMap getDlvyAmt(List<LinkedHashMap> goodsList, String sopmalCd, String defaultAdressAt, String dlvylcAreaCd, String prefcd) { public DataMap getDlvyAmt(List<LinkedHashMap> goodsList, String sopmalCd, String defaultAdressAt, String dlvylcAreaCd) {
DataMap dlvyAmtMap = null; DataMap dlvyAmtMap = null;
log.debug("우편번호 확인 : {}", defaultAdressAt); log.debug("우편번호 확인 : {}", defaultAdressAt);
log.debug("getDlvyAmt-goodsList : {}", goodsList); log.debug("getDlvyAmt-goodsList : {}", goodsList);
@@ -2213,7 +2215,7 @@ public class BOPurchsService {
// BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액 // BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
BigDecimal slepric = (BigDecimal) goodsMap.get("subSlepric"); // 판매가 * 수량 BigDecimal slepric = (BigDecimal) goodsMap.get("subSlepric"); // 판매가 * 수량
if (slepric.compareTo(amtCndAditAmt) > 0) { if (slepric.compareTo(amtCndAditAmt) >= 0) {
dlvyAmt = new BigDecimal(0); dlvyAmt = new BigDecimal(0);
} }
// else { // else {
@@ -2227,7 +2229,7 @@ public class BOPurchsService {
// BigDecimal cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 금액조건 추가금액 // BigDecimal cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 금액조건 추가금액
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량 BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
if (qy.compareTo(cntCndAditAmt) > 0) { if (qy.compareTo(cntCndAditAmt) >= 0) {
dlvyAmt = new BigDecimal(0); dlvyAmt = new BigDecimal(0);
} }
// else { // else {
@@ -2296,15 +2298,16 @@ public class BOPurchsService {
BigDecimal goodsQy = new BigDecimal(0); BigDecimal goodsQy = new BigDecimal(0);
for (DataMap goodsMap : goodsByDlvyGroupList) { // 수량 조건
if ("Y".equals(cntCndUseAt) && cntCndAditAmt.compareTo(BigDecimal.ZERO) > 0) {
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량 for (DataMap goodsMap : goodsByDlvyGroupList) {
// 수량 조건 BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
if ("Y".equals(cntCndUseAt)) {
qy = (BigDecimal) goodsMap.get("qy"); // 수량 qy = (BigDecimal) goodsMap.get("qy"); // 수량
// cntCndAditAmt(설정수량)보다 qy가 큰 경우
if (qy.compareTo(cntCndAditAmt) > 0) { if (qy.compareTo(cntCndAditAmt) > 0) {
goodsQy = qy.divide(cntCndAditAmt, 0, RoundingMode.CEILING); goodsQy = qy.divide(cntCndAditAmt, 0, RoundingMode.CEILING);
//배송비 합(같은상품 수량당 배송비 책정) //배송비 합(같은상품 수량당 배송비 책정)
@@ -2328,17 +2331,19 @@ public class BOPurchsService {
} }
} }
} }
} else { } //for
//수량 조건 없는 경우 } else {
paidDlvyAmt = paidDlvyAmt.add(dlvyAmt); // 유료배송비 합 //수량 조건 없는 경우
// 추가배송비 계산 paidDlvyAmt = paidDlvyAmt.add(dlvyAmt); // 유료배송비 합
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) { // 추가배송비 계산
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비 if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
} if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
} }
} }
} //for }
} else { } else {
dlvyAmt = new BigDecimal(0); dlvyAmt = new BigDecimal(0);
dftDlvyAmt = new BigDecimal(0); dftDlvyAmt = new BigDecimal(0);
@@ -2514,7 +2519,7 @@ public class BOPurchsService {
BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액 BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
BigDecimal slepric = (BigDecimal) goodsMap.get("subSlepric"); // 판매가 * 수량 BigDecimal slepric = (BigDecimal) goodsMap.get("subSlepric"); // 판매가 * 수량
if (slepric.compareTo(amtCndAditAmt) > 0) { if (slepric.compareTo(amtCndAditAmt) >= 0) {
dlvyAmt = new BigDecimal(0); dlvyAmt = new BigDecimal(0);
} }
} }
@@ -2523,7 +2528,7 @@ public class BOPurchsService {
BigInteger cntCndAditAmt = (BigInteger) shippingGrouping.get("cntCndAditAmt"); // 금액조건 추가금액 BigInteger cntCndAditAmt = (BigInteger) shippingGrouping.get("cntCndAditAmt"); // 금액조건 추가금액
BigInteger qy = (BigInteger) goodsMap.get("qy"); // 수량 BigInteger qy = (BigInteger) goodsMap.get("qy"); // 수량
if (cntCndAditAmt.intValue() < qy.intValue()) { if (cntCndAditAmt.intValue() <= qy.intValue()) {
dlvyAmt = new BigDecimal(0); dlvyAmt = new BigDecimal(0);
} }
} }
@@ -2539,7 +2544,7 @@ public class BOPurchsService {
if (bundleDlvyCndAmt != null && bundleDlvyCndAmt.intValue() > 0) { if (bundleDlvyCndAmt != null && bundleDlvyCndAmt.intValue() > 0) {
BigDecimal subSlepric = goodsByDlvyGroupList.stream().map(o -> (BigDecimal) o.get("subSlepric")).reduce(BigDecimal.ZERO, BigDecimal::add); // 합 (판매가 * 수량) BigDecimal subSlepric = goodsByDlvyGroupList.stream().map(o -> (BigDecimal) o.get("subSlepric")).reduce(BigDecimal.ZERO, BigDecimal::add); // 합 (판매가 * 수량)
if (subSlepric.compareTo(bundleDlvyCndAmt) > 0) { if (subSlepric.compareTo(bundleDlvyCndAmt) >= 0) {
dlvyAmt = new BigDecimal(0); dlvyAmt = new BigDecimal(0);
} }
} }

View File

@@ -142,6 +142,14 @@ public class BOOrderItemOptnVO extends AbstractVO {
private BigDecimal step85 = new BigDecimal(0); private BigDecimal step85 = new BigDecimal(0);
private String hscode;
private BigDecimal realWt;
private BigInteger volWt;
private Integer packageCnt;
private String restUpdtDv; private String restUpdtDv;
private BigDecimal updtRestAmt = new BigDecimal(0); private BigDecimal updtRestAmt = new BigDecimal(0);

View File

@@ -23,6 +23,8 @@ public class BOOrderItemVO extends AbstractVO {
private String goodsNm; private String goodsNm;
private String goodsNmEn;
private String goodsKndCd; private String goodsKndCd;
private String taxtTrgetAt; private String taxtTrgetAt;

View File

@@ -20,6 +20,8 @@ public class BOOrderSetleVO extends AbstractVO {
private BigDecimal setleAmt; private BigDecimal setleAmt;
private BigDecimal wonSetleAmt;
private String pgCmpnyNm; private String pgCmpnyNm;
private String setleTyCd; private String setleTyCd;

View File

@@ -26,8 +26,14 @@ public class BOOrderShippingVO extends AbstractVO {
private String recpntMbtlnb; private String recpntMbtlnb;
private String dlvylcAreaCd;
private String cstmclerCd;
private String dlvylcZip; private String dlvylcZip;
private String prefcd;
private String dlvylcAdresDvCd; private String dlvylcAdresDvCd;
private String dlvylcLnbAdres; private String dlvylcLnbAdres;

View File

@@ -40,7 +40,11 @@ public class BOOrderVO extends AbstractVO {
private BigDecimal rlSetleAmt = new BigDecimal("0"); private BigDecimal rlSetleAmt = new BigDecimal("0");
private BigDecimal enuriAmt = new BigDecimal("0");; private BigDecimal enuriAmt = new BigDecimal("0");
private BigDecimal wonRlSetleAmt = new BigDecimal("0");
private BigDecimal buyRate = new BigDecimal("0");
private String ordrrNm; private String ordrrNm;
@@ -141,4 +145,6 @@ public class BOOrderVO extends AbstractVO {
private String secretKey; private String secretKey;
private String currOrdrSttusCd; private String currOrdrSttusCd;
private Integer subsvcInnb;
} }

View File

@@ -30,4 +30,13 @@ public interface BOSubsvcMapper {
void insertBOMngrSubsvc(BOSubsvcVO vo); void insertBOMngrSubsvc(BOSubsvcVO vo);
/** 관리자 구독서비스 명 중복체크*/ /** 관리자 구독서비스 명 중복체크*/
int selectBOMngrSubsvcNmDupCheck(BOSubsvcVO vo); int selectBOMngrSubsvcNmDupCheck(BOSubsvcVO vo);
/** 구독서비스 주문에 따른 판매재고수량 수정*/
public void updateSubsvcOrdrUsefulInvntryQy(BOSubsvcVO vo);
/** 구독서비스 환불에 따른 판매재고수량 수정*/
public void updateSubsvcRefundUsefulInvntryQy(BOSubsvcVO vo);
/** 구독서비스 주문취소에 따른 판매재고수량 수정*/
public void updateSubsvcCancelOrderUsefulInvntryQy(BOSubsvcVO vo);
/** 판매재고수량 변경에 따른 구독서비스 상태 수정*/
public void updateInvntryPolicySubsvcSttusChng(BOSubsvcVO vo);
} }

View File

@@ -1,13 +1,15 @@
package com.wb.domainserver.domain.gcone.goods.subsvc.service; package com.wb.domainserver.domain.gcone.goods.subsvc.service;
import com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO;
import com.wb.domainserver.domain.gcone.goods.subsvc.mapper.BOSubsvcMapper; import com.wb.domainserver.domain.gcone.goods.subsvc.mapper.BOSubsvcMapper;
import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO; import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrVO;
import com.wb.domainserver.util.dataaccess.DataMap; import com.wb.domainserver.util.dataaccess.DataMap;
import io.micrometer.common.util.StringUtils; import io.micrometer.common.util.StringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -137,4 +139,51 @@ public class BOSubsvcService {
return message; return message;
} }
/**
* 주문에 따른 판매재고수량 수정
* @param ordrVO
* @return
*/
@Transactional
public void updateSubsvcOrdrUsefulInvntryQy(BOOrdrVO ordrVO) throws Exception {
BOSubsvcVO subsvcVO = new BOSubsvcVO();
BeanUtils.copyProperties(ordrVO, subsvcVO);
//판매수량 수정
mapper.updateSubsvcOrdrUsefulInvntryQy(subsvcVO);
//구독서비스 상태 수정
mapper.updateInvntryPolicySubsvcSttusChng(subsvcVO);
}
/**
* 환불에 따른 판매재고수량 수정
* @param ordrVO
* @return
*/
@Transactional
public void updateSubsvcRefundUsefulInvntryQy(BOOrdrVO ordrVO) throws Exception {
BOSubsvcVO subsvcVO = new BOSubsvcVO();
BeanUtils.copyProperties(ordrVO, subsvcVO);
//판매수량 수정
mapper.updateSubsvcRefundUsefulInvntryQy(subsvcVO);
//구독서비스 상태 수정
mapper.updateInvntryPolicySubsvcSttusChng(subsvcVO);
}
/**
* 주문취소에 따른 판매재고수량 수정
* @param ordrVO
* @return
*/
@Transactional
public void updateSubsvcCancelOrderUsefulInvntryQy(BOOrdrVO ordrVO) throws Exception {
BOSubsvcVO subsvcVO = new BOSubsvcVO();
BeanUtils.copyProperties(ordrVO, subsvcVO);
//판매수량 수정
mapper.updateSubsvcCancelOrderUsefulInvntryQy(subsvcVO);
//구독서비스 상태 수정
mapper.updateInvntryPolicySubsvcSttusChng(subsvcVO);
}
} }

View File

@@ -4,6 +4,7 @@ import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.math.BigInteger;
import java.util.List; import java.util.List;
@Data @Data
@@ -12,14 +13,14 @@ public class BOSubsvcVO extends AbstractVO {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** 구독서비스고유번호 */
private String subsvcInnb;
/** 쇼핑몰코드 */ /** 쇼핑몰코드 */
private String sopmalCd; private String sopmalCd;
/** 구독서비스명 */ /** 구독서비스명 */
private String subsvcNm; private String subsvcNm;
/** 구독기간 */ /** 구독기간 */
private String subPd; private String subPd;
/** 구독서비스고유번호 */
private String subsvcInnb;
/** 구독서비스기수 */ /** 구독서비스기수 */
private String subsvcGnr; private String subsvcGnr;
/** 구독서비스명 다음기수 */ /** 구독서비스명 다음기수 */
@@ -37,11 +38,13 @@ private static final long serialVersionUID = 1L;
/** 소비자가 */ /** 소비자가 */
private String cnsmrpric; private String cnsmrpric;
/** 판매가 */ /** 판매가 */
private String slepric; private Integer slepric;
/** 재고수량 */ /** 재고수량 */
private String invntryQy; private String invntryQy;
/** 판매재고수량 */ /** 판매재고수량 */
private String usefulInvntryQy; private String usefulInvntryQy;
/** 판매수량 초기화여부*/
private String usefulInvntryQyInit;
/** 재고정책 */ /** 재고정책 */
private String invntryPolicyCd; private String invntryPolicyCd;
/** 가용재고제한수량 */ /** 가용재고제한수량 */
@@ -99,4 +102,62 @@ private static final long serialVersionUID = 1L;
private String sortDv; private String sortDv;
/** 배열 구독서비스고유번호 */ /** 배열 구독서비스고유번호 */
private List<String> arrSubsvcInnb; private List<String> arrSubsvcInnb;
/** 결제정보 */
/** 회원고유번호 */
private Integer mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 주문고유번호 */
private String ordrInnb;
/** 결제상품정보 */
/** 판매상품 고유번호 */
private Integer goodsInnb;
/** 상품옵션 고유번호 */
private Integer goodsOptnInnb;
/** 개수 */
private Integer qy;
/** 입력옵션 텍스트 */
private String inputOptn;
/** 입력옵션 텍스트 */
private String inputOptnText;
/** 배송그룹고유번호 */
private Integer dlvyGroupInnb;
/** 상품상태코드 */
private String goodsSttusCd;
/** 상품상태명 */
private String goodsSttusNm;
/** 상품명 */
private String goodsNm;
/** 상품옵션 타입 */
private String optnTy;
/** 옵션관계번호 */
private String optnRelateNb;
/** 복수할인여부 */
private String compnbDscntAt;
/** 구간할인여부 */
private String sctnDscntAt;
/** 옵션필수여부 */
private String optnEssntlAt;
/** 소비자가 합계 (형식적용) */
private String subCnsmrpricByFormat;
/** 소비자가 합계 */
private Integer subCnsmrpric;
/** 소비자가 (형식적용) */
private String cnsmrpricByFormat;
/** 옵션주문단가 × 옵션주문수량 (형식적용) */
private String subSlepricByFormat;
/** 옵션주문단가 × 옵션주문수량 */
private Integer subSlepric;
/** 할인금액 */
private Integer dscntAmt;
/** 할인적용금액 */
private Integer dscntApplyAmt;
/** 판매가 합계 (형식적용) */
private String slepricByFormat;
/** 상품이미지경로 */
private String goodsImgCours;
} }

View File

@@ -101,6 +101,11 @@ public class BOMbrService {
List<DataMap> resultList = null; List<DataMap> resultList = null;
Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new HashMap<>();
BOMaComncdVO comncdVO = new BOMaComncdVO();
comncdVO.setGroupCd("SRCH_DV");
bOMbrSrchVO.setSrchDv((String) selectCommCode(comncdVO).get(0).get("cd"));
// 건수 조회 // 건수 조회
Integer totCnt = mapper.selectBOMbrListTotCnt(bOMbrSrchVO); Integer totCnt = mapper.selectBOMbrListTotCnt(bOMbrSrchVO);
// 건수 갯수 페이징vo에 set // 건수 갯수 페이징vo에 set

View File

@@ -26,35 +26,38 @@ import lombok.EqualsAndHashCode;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class BOMbrSrchVO extends AbstractVO { public class BOMbrSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**검색어 구분*/ /**검색어 구분*/
private String srchKywordDv; private String srchKywordDv;
/**검색어 키워드*/ /**검색어 키워드*/
private String srchKyword; private String srchKyword;
/*검색어 이름*/ /*검색어 이름*/
private String srchMbrNm; private String srchMbrNm;
/*검색어 아이디*/ /*검색어 아이디*/
private String srchKywordID; private String srchKywordID;
/*검색어 이메일*/ /*검색어 이메일*/
private String srchKywordEmail; private String srchKywordEmail;
/*검색어 휴대폰번호*/ /*검색어 휴대폰번호*/
private String srchKywordMb; private String srchKywordMb;
/*회원고유번호*/ /*회원고유번호*/
private String srchMbrInnb; private String srchMbrInnb;
/**정렬 방식*/ /**검색조건 비교 방식*/
private String sortDv; private String srchDv;
/**정렬 방식*/
private String sortDv;
/**쇼핑몰코드*/ /**쇼핑몰코드*/
private String sopmalCd; private String sopmalCd;
/*회원 구분 코드*/ /*회원 구분 코드*/
private String srchMbrDvCd; private String srchMbrDvCd;
/*요청 페이지 구분 mngr인지 integ인지*/ /*요청 페이지 구분 mngr인지 integ인지*/
@@ -193,4 +196,7 @@ public class BOMbrSrchVO extends AbstractVO {
/*회원구분코드*/ /*회원구분코드*/
private String mbrDvCd; private String mbrDvCd;
/*마케팅 동의 팝업 읽기모드 여부*/
private String readonlyAt;
} }

View File

@@ -156,4 +156,11 @@ public class BOMssageVO extends AbstractVO {
/** 메세지 취소 구분코드 */ /** 메세지 취소 구분코드 */
private String cancelDvCd; private String cancelDvCd;
/** 셋팅용 파라미터 tab구분
* send : 메시지수동바송
* search : 메시지 발송내역*/
private String reqTab;
/** 셋팅용 파라미터 받는사람 휴대전화번호*/
private String mbtlnb;
} }

View File

@@ -161,6 +161,14 @@ public interface BODlivyMapper {
public List<BODlivyVO> selectBOOrdrDlvyDtlsInqireGroupOrdr(BODlivyVO boDlivyVO); public List<BODlivyVO> selectBOOrdrDlvyDtlsInqireGroupOrdr(BODlivyVO boDlivyVO);
/**
* 주문 배송 추적 조회 : 송장번호 조회
* @param boDlivyVO
* @return
*/
public String selectBOOrdrInvcnb(BODlivyVO boDlivyVO);
/** /**
* 출고 상태 '상품 준비' or '배송중' 되돌리기 / 출고 상태 변경 단건 * 출고 상태 '상품 준비' or '배송중' 되돌리기 / 출고 상태 변경 단건
* @param dlivyVO * @param dlivyVO

View File

@@ -1,59 +1,40 @@
package com.wb.domainserver.domain.gcone.ordr.dlivy.service; package com.wb.domainserver.domain.gcone.ordr.dlivy.service;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOShopSetupVO; import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.domain.gcone.goods.purchs.mapper.BOPurchsMapper; import com.wb.domainserver.domain.gcone.goods.purchs.mapper.BOPurchsMapper;
import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderLogVO; import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderLogVO;
import com.wb.domainserver.domain.gcone.mbr.mlg.service.BOMlgService; import com.wb.domainserver.domain.gcone.mbr.mlg.service.BOMlgService;
import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOMlgVO; import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOMlgVO;
import com.wb.domainserver.domain.gcone.ntcn.mssage.service.BOMssageService; import com.wb.domainserver.domain.gcone.ntcn.mssage.service.BOMssageService;
import com.wb.domainserver.domain.gcone.ordr.atmcrcpmny.vo.BOAtmcRcpmnyCnfirmVO; import com.wb.domainserver.domain.gcone.ordr.dlivy.mapper.BODlivyMapper;
import com.wb.domainserver.domain.gcone.ordr.dlivy.vo.*; import com.wb.domainserver.domain.gcone.ordr.dlivy.vo.*;
import com.wb.domainserver.domain.gcone.ordr.ordr.mapper.BOOrdrMapper; import com.wb.domainserver.domain.gcone.ordr.ordr.mapper.BOOrdrMapper;
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService; import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrLogVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrShippingVO; import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrShippingVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrVO; import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrVO;
import com.wb.domainserver.domain.gcone.ordr.pay.service.BOPayService; import com.wb.domainserver.domain.gcone.ordr.pay.service.BOPayService;
import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO; import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO;
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.service.BORtngudrefndService; import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.service.BORtngudrefndService;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.ErrorCode;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil; import com.wb.domainserver.util.string.StringUtil;
import io.micrometer.common.util.StringUtils; import io.micrometer.common.util.StringUtils;
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.gcone.ordr.dlivy.mapper.BODlivyMapper;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils; import org.springframework.web.client.RestTemplate;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder; import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory; import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
import java.util.stream.Collectors;
@Service @Service
@Slf4j @Slf4j
@@ -83,6 +64,9 @@ public class BODlivyService {
@Autowired @Autowired
BORtngudrefndService boRtngudrefndService; BORtngudrefndService boRtngudrefndService;
@Autowired
private BOCommonService boCommonService;
/* #################################### /* ####################################
출고 리스트 서비스 시작 출고 리스트 서비스 시작
@@ -494,6 +478,167 @@ public class BODlivyService {
return contents; return contents;
} }
/**
* ACI Key 발급 API
* @param
* @return List<DataMap>
*/
public DataMap selectBOAciKey() throws WnbtRestException {
String apiKey = boCommonService.selectAciApiKey();
DataMap message = new DataMap();
try {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("USERID", "UNIHAN");
headers.set("APIKEY", apiKey);
Map<String, Object> body = new HashMap<>();
HttpEntity<String> apiRequest =
new HttpEntity<>("{}", headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.exchange(
"https://acieshop.com/api/kr/token/",
HttpMethod.POST,
apiRequest,
String.class
);
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(response.getBody());
message.put("status", jsonNode.get("Status").asText());
message.put("aciKey", jsonNode.get("ACIKey").asText());
message.put("errMsg", jsonNode.get("ErrMsg").asText());
}catch (WnbtRestException wre){
log.error(wre.getMessage());
throw wre;
}catch (RuntimeException re){
log.error(re.getMessage());
throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR);
}catch (Exception e) {
log.error(e.getMessage(), e);
throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR);
}
return message;
}
/**
* 화물 추적 - 운송장 조회 API
* @param boDlivyVO
* @return List<DataMap>
*/
public DataMap updateBOAciDelivery(BODlivyVO boDlivyVO) throws WnbtRestException {
DataMap aciMap = selectBOAciKey();
String aciKey = String.valueOf(aciMap.get("aciKey"));
DataMap message = new DataMap();
try {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("USERID", "UNIHAN");
headers.set("ACIKey", aciKey);
Map<String, Object> body = new HashMap<>();
body.put("BLNO", List.of(mapper.selectBOOrdrInvcnb(boDlivyVO)));
HttpEntity<Map<String, Object>> apiRequest =
new HttpEntity<>(body, headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.exchange(
"https://acieshop.com/api/kr/pod/v1.5/",
HttpMethod.POST,
apiRequest,
String.class
);
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(response.getBody());
message.put("status", jsonNode.get("Status").asText());
JsonNode podInfoNode = jsonNode.get("PODInfo");
if(!podInfoNode.isNull()) {
List<DataMap> podInfoList = new ArrayList<>();
for(JsonNode podInfoItem : podInfoNode) {
DataMap PODInfo = new DataMap();
PODInfo.put("blno", podInfoItem.get("BLNO").asText());
PODInfo.put("dateLocalwhin", podInfoItem.get("DATE_LOCALWHIN").asText());
PODInfo.put("dateLocaldeparture", podInfoItem.get("DATE_LOCALDEPARTURE").asText());
PODInfo.put("dateIcnarrival", podInfoItem.get("DATE_ICNARRIVAL").asText());
PODInfo.put("dateCustomes", podInfoItem.get("DATE_CUSTOMES").asText());
PODInfo.put("dateDelivery", podInfoItem.get("DATE_DELIVERY").asText());
PODInfo.put("recipient", podInfoItem.get("RECIPIENT").asText());
PODInfo.put("wta", podInfoItem.get("WTA").asText());
PODInfo.put("wtdan", podInfoItem.get("WTDAN").asText());
List<DataMap> volumeList = new ArrayList<>();
for(JsonNode volumeItem : podInfoItem.get("VOLUME")) {
DataMap volume = new DataMap();
volume.put("width", volumeItem.get("WIDTH").asText());
volume.put("length", volumeItem.get("LENGTH").asText());
volume.put("height", volumeItem.get("HEIGHT").asText());
volumeList.add(volume);
}
PODInfo.put("volume", volumeList);
List<List> customsList = new ArrayList<>();
for(JsonNode customsItem : podInfoItem.get("CUSTOMS")) {
List<DataMap> customDetail = new ArrayList<>();
for(JsonNode customItem : customsItem) {
DataMap Custom = new DataMap();
Custom.put("dateEvent", customItem.get("DATE_EVENT").asText());
Custom.put("traceStatus", customItem.get("TRACE_STATUS").asText());
customDetail.add(Custom);
}
customsList.add(customDetail);
}
PODInfo.put("customs", customsList);
List<DataMap> localPodList = new ArrayList<>();
for(JsonNode localPodItem : podInfoItem.get("LOCAL_POD")) {
DataMap localPod = new DataMap();
localPod.put("traceStatus", localPodItem.get("TRACE_STATUS").asText());
localPod.put("dateEvent", localPodItem.get("DATE_EVENT").asText());
localPod.put("position", localPodItem.get("POSITION").asText());
localPodList.add(localPod);
}
PODInfo.put("localPod", localPodList);
podInfoList.add(PODInfo);
}
message.put("podInfo", podInfoList);
} else {
message.put("errMsg", jsonNode.get("ErrMsg").asText());
}
}catch (WnbtRestException wre){
log.error(wre.getMessage());
throw wre;
}catch (RuntimeException re){
log.error(re.getMessage());
throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR);
}catch (Exception e) {
log.error(e.getMessage(), e);
throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR);
}
return message;
}
/**
* 송장번호 조회
* @param boDlivyVO
* @return List<DataMap>
*/
public String selectBOOrdrInvcnb(BODlivyVO boDlivyVO) throws WnbtRestException {
return mapper.selectBOOrdrInvcnb(boDlivyVO);
}
/** /**

View File

@@ -9,6 +9,7 @@ import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOGoodsVO;
import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderItemOptnVO; import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderItemOptnVO;
import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderSetleVO; import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderSetleVO;
import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderVO; import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderVO;
import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO;
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrAppnVO; import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrAppnVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.*; import com.wb.domainserver.domain.gcone.ordr.ordr.vo.*;
@@ -335,6 +336,8 @@ public interface BOOrdrMapper {
*/ */
public List<DataMap> selectOrderShippingList(BOOrdrShippingVO ordrShippingVO); public List<DataMap> selectOrderShippingList(BOOrdrShippingVO ordrShippingVO);
public List<DataMap> selectOrderShippingListGrp(BOOrdrShippingVO ordrShippingVO);
/** /**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문상세 > 배송지정보 상품 목록 조회 * 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문상세 > 배송지정보 상품 목록 조회
* @param paramMap * @param paramMap
@@ -349,6 +352,13 @@ public interface BOOrdrMapper {
*/ */
public List<DataMap> selectRefundShippingGoodsList(DataMap paramMap); public List<DataMap> selectRefundShippingGoodsList(DataMap paramMap);
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문상세 > 배송지정보 수정 > 배송지정보 일치여부 확인
* @param ordrShippingVO
* @return Integer
*/
public Integer selectDlvylcAreaCdInfo(BOOrdrShippingVO ordrShippingVO);
/** /**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문상세 > 배송지정보 수정 * 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문상세 > 배송지정보 수정
* @param ordrShippingVO * @param ordrShippingVO
@@ -487,6 +497,40 @@ public interface BOOrdrMapper {
관리자 > 주문 > 주문관리 > 다운로드항목설정 종료 관리자 > 주문 > 주문관리 > 다운로드항목설정 종료
#################################### */ #################################### */
/* ####################################
관리자 > 주문 > 주문관리 > 발주서 관리 시작
#################################### */
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 발주서 건수
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public Integer selectExcelListPurchOrderTotCnt(BOOrdrSrchVO ordrSrchVO);
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 발주서 목록 조회
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public List<DataMap> selectExcelListPurchOrder(BOOrdrSrchVO ordrSrchVO);
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 발주서 엑셀다운로드
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public List<DataMap> selectExcelPoListDwld(BOOrdrSrchVO ordrSrchVO);
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 엑셀 다운로드 일시 업데이트
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public Integer updateExcelDownDt(BOOrdrSrchVO ordrSrchVO);
/* ####################################
관리자 > 주문 > 주문관리 > 발주서 관리 종료
#################################### */
/* #################################### /* ####################################
사용자 > 마이페이지 > MY쇼핑 > 개인결제 시작 사용자 > 마이페이지 > MY쇼핑 > 개인결제 시작
#################################### */ #################################### */
@@ -662,6 +706,8 @@ public interface BOOrdrMapper {
*/ */
public DataMap selectBOSpbkGiftMultiDlvyAt(BOSpbkVO spbkVO); public DataMap selectBOSpbkGiftMultiDlvyAt(BOSpbkVO spbkVO);
public BigDecimal selectBuyRate(DataMap param);
/** /**
* 사용자 > 상품 > 장바구니 > 장바구니 상품 삭제 * 사용자 > 상품 > 장바구니 > 장바구니 상품 삭제
* @param goodsVO * @param goodsVO
@@ -982,6 +1028,44 @@ public interface BOOrdrMapper {
* @return List<DataMap> * @return List<DataMap>
*/ */
public List<DataMap> selectMbrSubsvcOrdrList(BOOrdrDlvyVO ordrDlvyVO); public List<DataMap> selectMbrSubsvcOrdrList(BOOrdrDlvyVO ordrDlvyVO);
/**
* 사용자 > 주문완료 > 구독서비스 주문 목록 조회
* @param ordrDlvyVO
* @return List<DataMap>
*/
public List<DataMap> selectOrdrSubsvcDtllList(BOOrdrDlvyVO ordrDlvyVO);
/**
* 사용자 > 구독서비스 결제 > 구독서비스 주문 상품 목록 조회
* @param subsvcVO
* @return List<BOSubsvcVO>
*/
public List<BOSubsvcVO> selectSubsvcGoodsList(BOSubsvcVO subsvcVO);
/**
* 최종 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update
* @param refundVO
*/
public void updateBOWonRefundAmt(BOOrdrRefundVO refundVO);
/**
* 결제취소 시 구독서비스 환불금액 조회
* 계산식 : 전체결제금액 - 전체배송비 - 발송및취소된(35~85)상품금액
* @param refundVO
*/
public Integer selectSubsvcRefundAmt(BOOrdrRefundVO refundVO);
/**
* 키움결제 GC_ORDER_PG_API_LOG 결과 조회
* @param payVO
* @return List<DataMap>
*/
public DataMap selectKiwoomPgApiLog(BOPayVO payVO);
} }

View File

@@ -191,7 +191,11 @@ public class BOOrdrLogService {
pgResult = false; pgResult = false;
} else { } else {
if ("kcp".equals(payVO.getPgCmpnyNm())) { if("kiwoom".equals(payVO.getPgCmpnyNm())) {
resCd = "0000";
message = "결제 승인 성공";
//결제실패에 대한 응답은 없음
} else if ("kcp".equals(payVO.getPgCmpnyNm())) {
resCd = StringUtil.isNullToString(resultMap.get("res_cd")); resCd = StringUtil.isNullToString(resultMap.get("res_cd"));
message = StringUtil.isNullToString(resultMap.get("res_msg")); message = StringUtil.isNullToString(resultMap.get("res_msg"));
@@ -227,7 +231,7 @@ public class BOOrdrLogService {
String logDtlCn = ""; String logDtlCn = "";
String operNm = ""; String operNm = "";
String dvCd = payVO.getDvCd(); String dvCd = payVO.getDvCd();
String setleTyCd = payVO.getSetleTyCd(); //String setleTyCd = payVO.getSetleTyCd();
if ("02".equals(dvCd)) { // 관리자 주문 if ("02".equals(dvCd)) { // 관리자 주문
String mbrNm = ""; String mbrNm = "";
if (payVO.getMbrNm() != null) { if (payVO.getMbrNm() != null) {
@@ -311,7 +315,7 @@ public class BOOrdrLogService {
/** /**
* 주문 로그 단순 등록 * 주문 로그 단순 등록
* @param pgApiLogVO * @param logVO
*/ */
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
public void insertBOOrderLogRegist(BOOrderLogVO logVO, boolean result, String message) { public void insertBOOrderLogRegist(BOOrderLogVO logVO, boolean result, String message) {
@@ -336,7 +340,7 @@ public class BOOrdrLogService {
/** /**
* 주문 종기능 로그 등록 * 주문 종기능 로그 등록
* @param pgApiLogVO * @param bellVO
*/ */
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
public void insertBOOrderBellLogRegist(BOOrderLogVO bellVO) { public void insertBOOrderBellLogRegist(BOOrderLogVO bellVO) {

View File

@@ -29,59 +29,66 @@ public class BODwldItmVO extends AbstractVO {
private String[] selItems; private String[] selItems;
public enum items { public enum items {
item01("export_group_innb", "출고그룹"), exportGroupInnb("export_group_innb", "출고그룹"),
item02("ordr_innb_with_export_group_innb", "주문번호+출고그룹"), ordrInnbWithExportGroupInnb("ordr_innb_with_export_group_innb", "주문번호+출고그룹"),
item03("ordr_innb", "주문번호"), ordrInnb("ordr_innb", "주문번호"),
item04("smrt_shopng_ordrnb", "npay주문번호"), smrtShopngOrdrnb("smrt_shopng_ordrnb", "npay주문번호"),
item05("ordr_rcept_dt", "주문일"), ordrRceptDt("ordr_rcept_dt", "주문일"),
item06("ordrr_nm", "주문자명"), ordrrNm("ordrr_nm", "주문자명"),
item07("mbr_id", "주문자아이디"), mbrId("mbr_id", "주문자아이디"),
item08("ordrr_mbtlnb", "주문자휴대폰"), ordrrMbtlnb("ordrr_mbtlnb", "주문자휴대폰"),
item09("ordrr_email", "주문자이메일"), ordrrEmail("ordrr_email", "주문자이메일"),
item10("order_memo", "사용자메모"), orderMemo("order_memo", "사용자메모"),
item11("lgstc_adm_memo", "물류담당자메모"), lgstcAdmMemo("lgstc_adm_memo", "물류담당자메모"),
item12("inflow_cours_url", "주문경로"), inflowCoursUrl("inflow_cours_url", "주문경로"),
item13("dlivy_dt", "출고일"), dlivyDt("dlivy_dt", "출고일"),
item14("dlvy_mth_nm", "받는방법"), dlvyMthNm("dlvy_mth_nm", "받는방법"),
item15("hdrycpn_nm", "택배사"), hdrycpnNm("hdrycpn_nm", "택배사"),
item16("invcnb", "운송장번호"), invcnb("invcnb", "운송장번호"),
item17("dlvylc_adres_info", "받는정보"), dlvylcAdresInfo("dlvylc_adres_info", "받는정보"),
item18("recpnt_nm", "수령인"), recpntNm("recpnt_nm", "수령인"),
item19("recpnt_mbtlnb", "수령인휴대폰"), recpntMbtlnb("recpnt_mbtlnb", "수령인휴대폰"),
item20("dlvylc_zip", "우편번호"), dlvylcZip("dlvylc_zip", "우편번호"),
item21("dlvylc_rnm_adres", "전체주소(도로명)"), dlvylcRnmAdres("dlvylc_rnm_adres", "전체주소(도로명)"),
item22("dlvy_amt", "배송비"), dlvyAmt("dlvy_amt", "배송비"),
item23("ordr_goods_innb", "상품고유번호"), ordrGoodsInnb("ordr_goods_innb", "상품고유번호"),
item24("npay_goods_ordrnb", "npay상품주문번호"), npayGoodsOrdrnb("npay_goods_ordrnb", "npay상품주문번호"),
item25("goods_nm", "상품명"), goodsNm("goods_nm", "상품명"),
item26("invntry_qy", "현재고"), goodsNmEn("goods_nm_en", "상품명(영문)"),
item27("prchspric", "매입가"), invntryQy("invntry_qy", "현재고"),
item28("cnsmrpric", "정가"), prchspric("prchspric", "매입가"),
item29("dscntpric", "할인가"), cnsmrpric("cnsmrpric", "정가"),
item30("pric_by_ordr_qy", "할인가x수량"), dscntpric("dscntpric", "할인가"),
item31("taxt_trget_at", "과세여부"), pricByOrdrQy("pric_by_ordr_qy", "할인가x수량"),
item32("input_optn", "추가입력옵션"), taxtTrgetAt("taxt_trget_at", "과세여부"),
item33("ordr_qy", "주문수량"), inputOptn("input_optn", "추가입력옵션"),
item34("refnd_qy", "취소수량"), ordrQy("ordr_qy", "주문수량"),
item35("bfr_sndng_qy", "보낸수량"), refndQy("refnd_qy", "취소수량"),
item36("aftr_sndng_qy", "보낼수량"), bfrSndngQy("bfr_sndng_qy", "보낸수량"),
item37("ordr_sttus_nm", "주문상품상태"), aftrSndngQy("aftr_sndng_qy", "보낼수량"),
item38("goods_dscnt_amt", "상품쿠폰할인"), ordrSttusNm("ordr_sttus_nm", "주문상품상태"),
item39("event_dscnt_amt", "이벤트할인"), goodsDscntAmt("goods_dscnt_amt", "상품쿠폰할인"),
item40("mlt_dscnt_amt", "복수구매할인"), eventDscntAmt("event_dscnt_amt", "이벤트할인"),
item41("dlvy_dscnt_amt", "배송비쿠폰"), mltDscntAmt("mlt_dscnt_amt", "복수구매할인"),
item42("mlg_dscnt_amt", "마일리지사용"), dlvyDscntAmt("dlvy_dscnt_amt", "배송비쿠폰"),
item43("spbk_dscnt_amt", "장바구니할인쿠폰"), mlgDscntAmt("mlg_dscnt_amt", "마일리지사용"),
item44("enuri_dscnt_amt", "에누리"), spbkDscntAmt("spbk_dscnt_amt", "장바구니할인쿠폰"),
item45("setle_amt", "결제금액"), enuriDscntAmt("enuri_dscnt_amt", "에누리"),
item46("setle_dt", "결제일"), setleAmt("setle_amt", "결제금액"),
item47("setle_mth_nm", "결제방법"), setleDt("setle_dt", "결제일"),
item48("snggds_accml_mlg_amt", "지급마일리지"), setleMthNm("setle_mth_nm", "결제방법"),
item49("dlvylc_group_nb", "배송그룹번호"), snggdsAccmlMlgAmt("snggds_accml_mlg_amt", "지급마일리지"),
item50("dlvy_amt_setle_mth_nm", "배송비결제방식"), dlvylcGroupNb("dlvylc_group_nb", "배송그룹번호"),
item51("ordr_ty_nm", "주문유형"), dlvyAmtSetleMthNm("dlvy_amt_setle_mth_nm", "배송비결제방식"),
item52("optn_cd_1", "상품코드"), ordrTyNm("ordr_ty_nm", "주문유형"),
item53("dlvy_mssage_cn", "배송메시지"); optnCd_1("optn_cd_1", "상품코드"),
hscode("hscode", "HS Code"),
realWt("realWt", "실무게"),
volWt("volWt", "부피무게"),
packageCnt("packageCnt", "포장개수"),
dlvyMssageCn("dlvy_mssage_cn", "배송메시지"),
shippingSttusNm("shipping_sttus_nm", "출고상태"),
subsvcAt("subsvc_at", "주문구분");
private final String key; private final String key;
private final String value; private final String value;

View File

@@ -36,6 +36,8 @@ public class BOOrdrDlvyVO extends AbstractVO {
private String sysDvCd; // 시스템 구분 코드 private String sysDvCd; // 시스템 구분 코드
private String subsvcAt; // 구독서비스 여부
/** 현재 주문 상태 */ /** 현재 주문 상태 */
private String currOrdrSttusCd; private String currOrdrSttusCd;

View File

@@ -46,10 +46,14 @@ public class BOOrdrRefundVO extends AbstractVO {
private BigDecimal refundAmt; // 환불금액 private BigDecimal refundAmt; // 환불금액
private BigDecimal wonRefundAmt; // 환불금액(원화)
private BigDecimal refundAccmlmnyAmt; // 환불적립금액 private BigDecimal refundAccmlmnyAmt; // 환불적립금액
private BigDecimal refundDlvyAmt; // 환불배송비총금액 private BigDecimal refundDlvyAmt; // 환불배송비총금액
private BigDecimal wonRefundDlvyAmt; // 환불배송비총금액(원화)
private BigDecimal mlgAccmlmnyAmt; // 적립금보정금액 private BigDecimal mlgAccmlmnyAmt; // 적립금보정금액
private String mlgAccmlmnyValidDt; // 적립금유효기간 private String mlgAccmlmnyValidDt; // 적립금유효기간
@@ -90,6 +94,8 @@ public class BOOrdrRefundVO extends AbstractVO {
private BigDecimal returnDlvyAmt; // 반품배송비금액 private BigDecimal returnDlvyAmt; // 반품배송비금액
private BigDecimal wonReturnDlvyAmt; // 반품배송비금액(원화)
private String returnDlvyTrgetCd; // 반품배송비수령대상코드 private String returnDlvyTrgetCd; // 반품배송비수령대상코드
private String returnDlvyRspnsblCd; // 반품배송비지불책임코드 private String returnDlvyRspnsblCd; // 반품배송비지불책임코드

View File

@@ -40,6 +40,12 @@ public class BOOrdrShippingVO extends AbstractVO {
/** 받는자휴대폰번호 */ /** 받는자휴대폰번호 */
private String recpntMbtlnb; private String recpntMbtlnb;
/** 개인통관부호 */
private String cstmclerCd;
/** 배송지역코드 */
private String dlvylcAreaCd;
/** 배송지우편번호 */ /** 배송지우편번호 */
private String dlvylcZip; private String dlvylcZip;

View File

@@ -4,6 +4,10 @@ import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List;
import java.util.Map;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class BOOrdrSrchVO extends AbstractVO{ public class BOOrdrSrchVO extends AbstractVO{
@@ -82,7 +86,15 @@ public class BOOrdrSrchVO extends AbstractVO{
private String[] srchOrdrInnbs; // 주문번호 배열 private String[] srchOrdrInnbs; // 주문번호 배열
private String[] srchOrdrDlvyInnbs; // 배송번호 배열
private List<Map<String, String>> srchInnbPairs; // 발주서 주키 배열
private String srchDatePeriod; // 날짜구간코드 private String srchDatePeriod; // 날짜구간코드
private String[] dlvylcAreaCds; // 배송지역코드
private String excelInclude; // 엑셀 다운여부
/* /*
#################################### ####################################
전체 주문 조회 검색 추가 조건 종료 전체 주문 조회 검색 추가 조건 종료
@@ -105,4 +117,7 @@ public class BOOrdrSrchVO extends AbstractVO{
private String excelCoulms; // 엑셀다운로드 조회 컬럼 private String excelCoulms; // 엑셀다운로드 조회 컬럼
private String ordrInnb; // 주문고유번호 private String ordrInnb; // 주문고유번호
/**주문구분*/
private String srchSubsvcAt;
} }

View File

@@ -151,6 +151,12 @@ public class BOOrdrVO extends AbstractVO {
/** 장바구니 고유번호 배열 */ /** 장바구니 고유번호 배열 */
private String[] cartInnbs; private String[] cartInnbs;
/** 구독서비스 주문여부 */
private String subsvcAt;
/** 구독서비스 고유번호 */
private String subsvcInnb;
/** 주문배송 고유번호 */ /** 주문배송 고유번호 */
private String ordrDlvyInnb; private String ordrDlvyInnb;

View File

@@ -32,6 +32,7 @@ import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder;
import org.bouncycastle.operator.InputDecryptorProvider; import org.bouncycastle.operator.InputDecryptorProvider;
import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo; import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.json.simple.parser.JSONParser; import org.json.simple.parser.JSONParser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -103,7 +104,8 @@ public class BOPayService{
put("ordrInnb", OrderInnb); put("ordrInnb", OrderInnb);
}}; }};
return mapper.selectRlSetleAmt(paramMap); // return mapper.selectRlSetleAmt(paramMap);
return mapper.selectWonRlSetleAmt(paramMap);
} }
/* ============================================================================== */ /* ============================================================================== */
@@ -298,7 +300,7 @@ public class BOPayService{
/** /**
* KCP 결제 * KCP 결제
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> insertKcpPay(BOPayVO payVO) throws Exception { public Map<String, Object> insertKcpPay(BOPayVO payVO) throws Exception {
@@ -357,7 +359,7 @@ public class BOPayService{
/** /**
* KCP 수기결제 * KCP 수기결제
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> insertKcpPayKeyin(BOPayVO payVO) throws Exception { public Map<String, Object> insertKcpPayKeyin(BOPayVO payVO) throws Exception {
@@ -430,7 +432,7 @@ public class BOPayService{
/** /**
* KCP 결제 취소 * KCP 결제 취소
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> cancelKcpPay(BOPayVO payVO) throws Exception { public Map<String, Object> cancelKcpPay(BOPayVO payVO) throws Exception {
Map<String, Object> resParam = new HashMap<>(); Map<String, Object> resParam = new HashMap<>();
@@ -637,7 +639,7 @@ public class BOPayService{
/** /**
* KCP 에스크로 상태변경 : 배송정보전송 * KCP 에스크로 상태변경 : 배송정보전송
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> updateEscwKcpPay(BOPayVO payVO) throws Exception { public Map<String, Object> updateEscwKcpPay(BOPayVO payVO) throws Exception {
@@ -756,7 +758,7 @@ public class BOPayService{
/** /**
* KCP 현금영수증 발급 * KCP 현금영수증 발급
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> insertKcpCashReceipt(BOPayVO payVO) throws Exception { public Map<String, Object> insertKcpCashReceipt(BOPayVO payVO) throws Exception {
@@ -817,7 +819,7 @@ public class BOPayService{
/** /**
* KCP 현금영수증 취소 * KCP 현금영수증 취소
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> cancelKcpCashReceipt(BOPayVO payVO) throws Exception { public Map<String, Object> cancelKcpCashReceipt(BOPayVO payVO) throws Exception {
@@ -867,7 +869,7 @@ public class BOPayService{
/** /**
* KCP 현금영수증 조회 * KCP 현금영수증 조회
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> selectKcpCashReceipt(BOPayVO payVO) throws Exception { public Map<String, Object> selectKcpCashReceipt(BOPayVO payVO) throws Exception {
@@ -910,7 +912,7 @@ public class BOPayService{
/** /**
* 토스 현금영수증 발급 * 토스 현금영수증 발급
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> insertTossCashReceipt(BOPayVO payVO) throws Exception { public Map<String, Object> insertTossCashReceipt(BOPayVO payVO) throws Exception {
@@ -950,7 +952,7 @@ public class BOPayService{
/** /**
* 토스 현금영수증 취소 * 토스 현금영수증 취소
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> cancelTossCashReceipt(BOPayVO payVO) throws Exception { public Map<String, Object> cancelTossCashReceipt(BOPayVO payVO) throws Exception {
@@ -981,7 +983,7 @@ public class BOPayService{
/** /**
* 토스 결제 * 토스 결제
* 일반결제(toss), 토스페이(tossPay), 브랜드페이(brandPay) 같이 들어옴 * 일반결제(toss), 토스페이(tossPay), 브랜드페이(brandPay) 같이 들어옴
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> insertTossPay(BOPayVO payVO) throws Exception { public Map<String, Object> insertTossPay(BOPayVO payVO) throws Exception {
@@ -1018,7 +1020,7 @@ public class BOPayService{
/** /**
* 토스 수기결제 * 토스 수기결제
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> insertTossPayKeyin(BOPayVO payVO) throws Exception { public Map<String, Object> insertTossPayKeyin(BOPayVO payVO) throws Exception {
@@ -1057,7 +1059,7 @@ public class BOPayService{
/** /**
* 토스 결제취소 * 토스 결제취소
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> cancelTossPay(BOPayVO payVO) throws Exception { public Map<String, Object> cancelTossPay(BOPayVO payVO) throws Exception {
@@ -1074,17 +1076,6 @@ public class BOPayService{
obj.put("refundReceiveAccount", refundReceiveAccount); obj.put("refundReceiveAccount", refundReceiveAccount);
} }
/* 취소 호출 시 setModGubun을 하기로 함
String memorSetleAt = StringUtil.isNullToString(payVO.getMemorSetleAt());
if("Y".equals(memorSetleAt)){
payVO.setModGubun("keyIn");
}else if("G".equals(memorSetleAt)){ //이부분에 대한 처리 필요
payVO.setModGubun("brandPay");
}else{
payVO.setModGubun("toss");
}
// easyPay 추가되어야 함
*/
payVO.setType("cancel"); payVO.setType("cancel");
URL url = new URL("https://api.tosspayments.com/v1/payments/" + payVO.getPaymentKey() + "/cancel"); URL url = new URL("https://api.tosspayments.com/v1/payments/" + payVO.getPaymentKey() + "/cancel");
@@ -1275,7 +1266,7 @@ public class BOPayService{
/** /**
* 토스 에스크로 상태변경 : 배송정보전송 * 토스 에스크로 상태변경 : 배송정보전송
* @param BOPayVO * @param payVO
*/ */
public Map<String, Object> updateEscwTossPay(BOPayVO payVO) throws Exception { public Map<String, Object> updateEscwTossPay(BOPayVO payVO) throws Exception {
//관련 키값 DB 조회 //관련 키값 DB 조회
@@ -1331,7 +1322,6 @@ public class BOPayService{
rcvname = payVO.getRcvName(); // 실수령인명 rcvname = payVO.getRcvName(); // 실수령인명
boolean resp = false; //응답결과 boolean resp = false; //응답결과
// mertkey = resultMap.get("tossPublicKey").toString(); //토스페이먼츠에서 발급한 상점키로 변경해 주시기 바랍니다. //TODO : 확인필요
mertkey = payVO.getMertkey(); // 머트키(퍼블릭키) mertkey = payVO.getMertkey(); // 머트키(퍼블릭키)
// mertkey = "9fd0de8489b4dc4af0dc40459958cd70"; //토스페이먼츠에서 발급한 상점키로 변경해 주시기 바랍니다. // mertkey = "9fd0de8489b4dc4af0dc40459958cd70"; //토스페이먼츠에서 발급한 상점키로 변경해 주시기 바랍니다.
@@ -1467,12 +1457,292 @@ public class BOPayService{
} }
/* ============================================================================== */
/* = 여기서 부터 Kiwoom
/* = -------------------------------------------------------------------------- = */
/**
* Kiwoom 결제
* @param payVO
*/
public Map<String, Object> insertKiwoomPay(BOPayVO payVO) throws Exception {
//관련 키값 DB 조회
/*DataMap resultMap = selectPayLink(payVO.getSopmalCd());
String reSetleAmt = StringUtil.isNullToString(selectRlSetleAmt(payVO.getSopmalCd(),payVO.getOrderId()));
reSetleAmt = reSetleAmt.isEmpty()? "10" : reSetleAmt; //0원은 정상거래로 인정되어서 10원으로 지정함*/
log.info("insertKiwoomPay step1 ");
String cpId = f_get_parm( payVO.getCpId());
String payMethod = f_get_parm( payVO.getPayMethod());
String orderNo = f_get_parm( payVO.getOrderId());
String type = f_get_parm( payVO.getType());
String amount = f_get_parm( payVO.getAmount());
JSONObject jsonObj = new JSONObject();
jsonObj.put("CPID", cpId);
jsonObj.put("PAYMETHOD", payMethod);
jsonObj.put("ORDERNO", orderNo);
jsonObj.put("TYPE", type);
jsonObj.put("AMOUNT", amount);
log.info("insertKiwoomPay step2 ::: {}", jsonObj);
//결제등록 요청시 실결제값(good_mny)
/*String payType = getPayMethod(payVO.getPayMethod());
jsonReq.put("ordr_mony", reSetleAmt); // ** 결제금액 유효성 검증 **
jsonReq.put("pay_type", payType); // ** 결제수단 유효성 검증 **
jsonReq.put("ordr_no", payVO.getOrderId()); // ** 주문번호검증 **
*/
String kiwoom_ENC = "";
try {
String targetURL = "";
if(cpId.equals("CTS18056")) {
targetURL = "https://apitest.kiwoompay.co.kr/pay/hash"; //개발서버
}else{
targetURL = "https://api.kiwoompay.co.kr/pay/hash"; //운영서버
}
log.info("insertKiwoomPay targetURL :::{} ",targetURL);
URL goUrl = new URL(targetURL);
HttpURLConnection con = (HttpURLConnection) goUrl.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setUseCaches(false);
con.setDoOutput(true);
con.setDoInput(true);
OutputStream os = con.getOutputStream();
os.write((jsonObj.toString()).getBytes("euc-kr"));
os.flush();
os.close();
int responseCode = con.getResponseCode();
if (responseCode == 200) {
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response1 = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response1.append(inputLine);
}
in.close();
JSONObject jObj = (JSONObject) JSONValue.parse(response1.toString());
kiwoom_ENC = (String) jObj.get("KIWOOM_ENC");
log.info("insertKiwoomPay step3 ::: {}", jObj);
}
con.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
JSONObject resultObj = new JSONObject();
resultObj.put("KIWOOM_ENC", kiwoom_ENC);
log.info("insertKiwoomPay step4 ::: {}", resultObj.get("KIWOOM_ENC"));
return new HashMap<>() {{
put("response", resultObj.toString());
}};
}
/**
* 키움 결제취소
* @param payVO
*/
public Map<String, Object> cancelKiwoomPay(BOPayVO payVO) throws Exception {
log.debug("cancelKiwoomPay step1 payVO :::> {}", payVO);
//관련 키값 DB 조회
DataMap resultMap = selectPayLink(payVO.getSopmalCd());
log.debug("cancelKiwoomPay step2 resultMap :::> {}", resultMap);
//요청코드
String authKey = resultMap.get("kcpSecretKey").toString();
String cpId = resultMap.get("kcpMid").toString();
// 개발서버 네이버페이 CPID 관련 적용 취소
if ("naverpay".equals(payVO.getModGubun())) {
authKey = resultMap.get("bpaySecretKey").toString();
cpId = resultMap.get("bpayMid").toString();
}
String amount = payVO.getCancelAmount(); //취소금액
String trxId = payVO.getTno(); //거래번호
String cancelReason = payVO.getCancelReason(); //취소사유
String payMethod = payVO.getPayMethod(); //취소결제수단
String cancelReq = "Y"; //취소URL 요청여부
//String TAXFREEAMT = nullCheck(request.getParameter("TAXFREEAMT")); //비과세 취소금액
//1차 요청코드
JSONObject obj = new JSONObject();
obj.put("cancelReason", cancelReason); //취소사유
obj.put("cancelAmount", amount); //취소금액 (금액이 없으면 전체취소)
JSONObject jsonObj = new JSONObject();
jsonObj.put("CPID", cpId);
jsonObj.put("PAYMETHOD", payMethod);
jsonObj.put("AMOUNT",amount);
jsonObj.put("CANCELREQ",cancelReq);
jsonObj.put("TRXID",trxId);
jsonObj.put("CANCELREASON",cancelReason);
//jsonObj.put("TAXFREEAMT",TAXFREEAMT);
log.debug("cancelKiwoomPay step3 JSONObject ::: {}", jsonObj.toString());
//로그 저장 셋팅
JSONObject finalJObj = new JSONObject();
DataMap pgApiLogReqVO = new DataMap();
pgApiLogReqVO.put("reqParam", jsonObj.toString());
pgApiLogReqVO.put("ordrInnb", StringUtil.isNullToString(payVO.getOrderId()));
pgApiLogReqVO.put("sopmalCd", StringUtil.isNullToString(payVO.getSopmalCd()));
pgApiLogReqVO.put("pgCmpnyNm", StringUtil.isNullToString(payVO.getPgCmpnyNm()));
pgApiLogReqVO.put("mbrInnb", StringUtil.isNullToString(payVO.getMbrInnb()));
log.debug("cancelKiwoomPay step4 pgApiLogReqVO ::: {}", pgApiLogReqVO);
// ====== step 1. 취소URL 요청 ======
try{
//결제 API URL
String targetURL = "";
if(cpId.equals("CTS18056")) {
targetURL = "https://apitest.kiwoompay.co.kr/pay/ready"; //개발서버
}else{
targetURL = "https://api.kiwoompay.co.kr/pay/ready"; //운영서버
}
log.info("cancelKiwoomPay targetURL :::{} ",targetURL);
URL goUrl = new URL(targetURL);
HttpURLConnection con = (HttpURLConnection) goUrl.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", authKey);
con.setUseCaches(false);
con.setDoOutput(true);
con.setDoInput(true);
OutputStream os = con.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
writer.write("");
os.write((jsonObj.toString()).getBytes("UTF-8"));
writer.flush();
writer.close();
os.close();
con.connect();
//호출 결과 값
int responseCode = con.getResponseCode();
String responseMsg = con.getResponseMessage();
log.debug("cancelKiwoom STEP1 승인전 responseCode ====={}",responseCode);
log.debug("cancelKiwoom STEP1 승인전 responseMsg ====={}",responseMsg);
String token = "";
String returnUrl = "";
//정상 수신 했을경우 (응답코드:200)
if(responseCode == 200){
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine = null;
StringBuffer response1 = new StringBuffer();
while((inputLine = in.readLine()) != null){
response1.append(inputLine);
}
in.close();
//응답 데이터 처리
String responseBody = response1.toString();
JSONObject jObj = (JSONObject)JSONValue.parse(responseBody);
token = jObj.get("TOKEN").toString();
returnUrl = jObj.get("RETURNURL").toString();
log.debug("cancelKiwoom STEP1 승인 responseBody ====={}", responseBody);
log.debug("cancelKiwoom STEP1 승인 TOKEN200 ====={}",token);
log.debug("cancelKiwoom STEP1 승인 URL200 ====={}",returnUrl);
}
con.disconnect();
log.debug("cancelKiwoom STEP1 승인 TOKEN ====={}",token);
log.debug("cancelKiwoom STEP1 승인 URL ====={}",returnUrl);
// ====== step 2. 취소 승인 요청 ======
targetURL = returnUrl;
goUrl = new URL(targetURL);
con = (HttpURLConnection) goUrl.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", authKey);
con.setRequestProperty("TOKEN", token);//TOKEN
con.setUseCaches(false);
con.setDoOutput(true);
con.setDoInput(true);
os = con.getOutputStream();
writer = new BufferedWriter(new OutputStreamWriter(os));
writer.write("");
os.write((jsonObj.toString()).getBytes("EUC-KR"));
writer.flush();
writer.close();
os.close();
con.connect();
//호출 결과 값
responseCode = con.getResponseCode();
responseMsg = con.getResponseMessage();
//정상 수신 했을경우 (응답코드:200)
if(responseCode == 200){
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String inputLine = null;
StringBuffer response1 = new StringBuffer();
while((inputLine = in.readLine()) != null){
response1.append(inputLine);
}
in.close();
//응답 데이터 처리
String responseBody = response1.toString();
finalJObj = (JSONObject)JSONValue.parse(responseBody);
}
con.disconnect();
log.debug("Kiwoom 결제취소 jObj::: {}", finalJObj.toString());
pgApiLogReqVO.put("resParam", finalJObj.toString());
}catch(Exception e){
e.printStackTrace();
} finally {
log.debug("cancelKiwoomPay finally pgApiLogReqVO ::: {}", pgApiLogReqVO);
ordrLogService.insertSetleOrderPgLog(payVO, pgApiLogReqVO);
ordrLogService.insertBOPgApiLogReqRegist(pgApiLogReqVO);
}
Map<String, Object> result = new HashMap<>();
result.put("response", finalJObj.toString());
return result;
}
} }

View File

@@ -292,6 +292,9 @@ public class BOPayVO extends AbstractVO {
/** 테스트 여부 - 테스트용 */ /** 테스트 여부 - 테스트용 */
private String testAt; private String testAt;
/** 키움 - 상점ID */
private String cpId;
// cookie // cookie
/** 에이전트 ID */ /** 에이전트 ID */

View File

@@ -248,7 +248,7 @@ public interface BORtngudrefndMapper {
* @param boRtngudrefndVO * @param boRtngudrefndVO
* @return * @return
*/ */
public Integer selectBOORderRefundAmtSumInqire(BORtngudrefndVO boRtngudrefndVO); public DataMap selectBOORderRefundAmtSumInqire(BORtngudrefndVO boRtngudrefndVO);
/** /**

View File

@@ -1,52 +1,45 @@
package com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.service; package com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.service;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.gcone.goods.goods.service.BOGoodsService; import com.wb.domainserver.domain.gcone.goods.goods.service.BOGoodsService;
import com.wb.domainserver.domain.gcone.goods.purchs.mapper.BOPurchsMapper; import com.wb.domainserver.domain.gcone.goods.purchs.mapper.BOPurchsMapper;
import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderService; import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderService;
import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderLogVO; import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderLogVO;
import com.wb.domainserver.domain.gcone.goods.subsvc.service.BOSubsvcService;
import com.wb.domainserver.domain.gcone.mbr.mlg.service.BOMlgService; import com.wb.domainserver.domain.gcone.mbr.mlg.service.BOMlgService;
import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOCashVO; import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOCashVO;
import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOMlgVO; import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOMlgVO;
import com.wb.domainserver.domain.gcone.ntcn.mssage.service.BOMssageService; import com.wb.domainserver.domain.gcone.ntcn.mssage.service.BOMssageService;
import com.wb.domainserver.domain.gcone.ordr.ordr.mapper.BOOrdrMapper; import com.wb.domainserver.domain.gcone.ordr.ordr.mapper.BOOrdrMapper;
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrDlvyVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrRefundVO; import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrRefundVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrVO;
import com.wb.domainserver.domain.gcone.ordr.pay.service.BOPayService; import com.wb.domainserver.domain.gcone.ordr.pay.service.BOPayService;
import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO; import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO;
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.mapper.BORtngudrefndMapper;
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BOOrderReItemVO; import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BOOrderReItemVO;
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORefundSetleVO; import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORefundSetleVO;
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORtngudrefndSrchVO;
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORtngudrefndVO;
import com.wb.domainserver.domain.gcone.ordr.selngpruf.service.BOSelngprufService; import com.wb.domainserver.domain.gcone.ordr.selngpruf.service.BOSelngprufService;
import com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO; import com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO;
import com.wb.domainserver.domain.gcone.promtn.coupon.service.BOCouponService; import com.wb.domainserver.domain.gcone.promtn.coupon.service.BOCouponService;
import com.wb.domainserver.domain.gcone.promtn.coupon.vo.BODwldCouponVO; import com.wb.domainserver.domain.gcone.promtn.coupon.vo.BODwldCouponVO;
import com.wb.domainserver.domain.gcone.setup.site.mapper.BOSiteMapper; import com.wb.domainserver.domain.gcone.setup.site.mapper.BOSiteMapper;
import com.wb.domainserver.domain.gcone.setup.site.vo.BOSetupContentsItemVO;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil; import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.mapper.BORtngudrefndMapper;
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORtngudrefndSrchVO;
import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORtngudrefndVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.support.WebExchangeBindException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
/** /**
* *
@@ -86,6 +79,9 @@ public class BORtngudrefndService {
@Autowired @Autowired
private BOOrderService orderService; private BOOrderService orderService;
@Autowired
private BOSubsvcService subsvcService;
@Autowired @Autowired
private BORtngudrefndMapper mapper; private BORtngudrefndMapper mapper;
@@ -249,7 +245,6 @@ public class BORtngudrefndService {
try { try {
if (boRtngudrefndVO.getRefundProcsSttusCd() != null) { if (boRtngudrefndVO.getRefundProcsSttusCd() != null) {
if (boRtngudrefndVO.getReturnCstmrTelnb() != null) { if (boRtngudrefndVO.getReturnCstmrTelnb() != null) {
@@ -278,28 +273,38 @@ public class BORtngudrefndService {
} }
} }
/*한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update를 위한 파라미터 셋팅*/
BOOrdrRefundVO refundVO = new BOOrdrRefundVO();
refundVO.setSopmalCd(boRtngudrefndVO.getSopmalCd());
refundVO.setOrdrInnb(new BigInteger(boRtngudrefndVO.getOrdrInnb()));
refundVO.setOrderRefundInnb(boRtngudrefndVO.getOrderRefundInnb());
if ( "01".equals(boRtngudrefndVO.getRefundTyCd()) ) { // 결제 취소 if ( "01".equals(boRtngudrefndVO.getRefundTyCd()) ) { // 결제 취소
if ("01".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { if ("01".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { // 환불신청
// TODO : 신청일때 로직 // TODO : 신청일때 로직
mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정 mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정
/* 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update */
ordrMapper.updateBOWonRefundAmt(refundVO);
} else if ("02".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { } else if ("02".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { //환불진행중
if ("01".equals(boRtngudrefndVO.getOldRefundProcsSttusCd())) { if ("01".equals(boRtngudrefndVO.getOldRefundProcsSttusCd())) { //이전 환불진행상태 = 환불신청
orderRefundSttusUpdtPorcs(boRtngudrefndVO); // 주문에 환불건 관련 상태 및 수량 업데이트 orderRefundSttusUpdtPorcs(boRtngudrefndVO); // 주문에 환불건 관련 상태 및 수량 업데이트
} }
if ( "02".equals(boRtngudrefndVO.getRefundMthCd()) ) { if ( "02".equals(boRtngudrefndVO.getRefundMthCd()) ) { //환불방법 = 무통장계좌이체
mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정 mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정
/* 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update */
ordrMapper.updateBOWonRefundAmt(refundVO);
} else { } else {
// message = updateBORefundProcsProcess(boRtngudrefndVO); // 완료시에만 환불 처리 // message = updateBORefundProcsProcess(boRtngudrefndVO); // 완료시에만 환불 처리
} }
} else if ("03".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { } else if ("03".equals(boRtngudrefndVO.getRefundProcsSttusCd())) { //환불완료
if ("01".equals(boRtngudrefndVO.getOldRefundProcsSttusCd())) { // 신청에서 완료처리시 if ("01".equals(boRtngudrefndVO.getOldRefundProcsSttusCd())) { // 이전 환불진행상태 = 환불신청 => 신청에서 완료처리시
orderRefundSttusUpdtPorcs(boRtngudrefndVO); // 주문에 환불건 관련 상태 및 수량 업데이트 orderRefundSttusUpdtPorcs(boRtngudrefndVO); // 주문에 환불건 관련 상태 및 수량 업데이트
} }
@@ -313,6 +318,8 @@ public class BORtngudrefndService {
log.debug("상태 업데이트 파라미터 확인 : {}", boRtngudrefndVO); log.debug("상태 업데이트 파라미터 확인 : {}", boRtngudrefndVO);
mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정 mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정
/* 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update */
ordrMapper.updateBOWonRefundAmt(refundVO);
} else if ( "02".equals(boRtngudrefndVO.getRefundProcsSttusCd()) && "02".equals(boRtngudrefndVO.getReturnProcsSttusCd()) ) { // 상품 받은거 확인하고 돈을 입금하지않았을 경우 } else if ( "02".equals(boRtngudrefndVO.getRefundProcsSttusCd()) && "02".equals(boRtngudrefndVO.getReturnProcsSttusCd()) ) { // 상품 받은거 확인하고 돈을 입금하지않았을 경우
@@ -321,6 +328,8 @@ public class BORtngudrefndService {
} }
mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정 mapper.updateBOOrderReSttusUpdt(boRtngudrefndVO); // 반품/환불 상태값 수정
/* 한화금액이 결제금액보다 많은지 체크하여 환불금액(원화) update */
ordrMapper.updateBOWonRefundAmt(refundVO);
} else if ( "03".equals(boRtngudrefndVO.getRefundProcsSttusCd()) && "02".equals(boRtngudrefndVO.getReturnProcsSttusCd()) ) { // 상품 받은거 확인하고 } else if ( "03".equals(boRtngudrefndVO.getRefundProcsSttusCd()) && "02".equals(boRtngudrefndVO.getReturnProcsSttusCd()) ) { // 상품 받은거 확인하고
@@ -466,21 +475,35 @@ public class BORtngudrefndService {
Long lordrInnb = Long.valueOf(ordrInnb); Long lordrInnb = Long.valueOf(ordrInnb);
BigInteger intOrdrInnb = BigInteger.valueOf(lordrInnb); BigInteger intOrdrInnb = BigInteger.valueOf(lordrInnb);
String sopmalCd = refundVO.getSopmalCd(); String sopmalCd = refundVO.getSopmalCd();
Integer refundAmt = 0; Integer refundAmt = 0; //현재 상품환불금액
Integer wonRefundAmt = 0; //현재 상품환불금액(원화)
if (!CollectionUtils.isEmpty(orderReItemVOList)) { if (!CollectionUtils.isEmpty(orderReItemVOList)) {
refundAmt = orderReItemVOList.stream() refundAmt = orderReItemVOList.stream()
.mapToInt(BOOrderReItemVO::getGoodsRefundAmt) .mapToInt(BOOrderReItemVO::getGoodsRefundAmt)
.sum(); .sum();
} else { } else {
refundAmt = Integer.parseInt(refundVO.getRefundAmt()); // 현재 환불 금액 refundAmt = Integer.parseInt(refundVO.getRefundAmt()); // 현재 상품환불금액
}
wonRefundAmt = Integer.parseInt(refundVO.getWonRefundAmt()); //현재 상품환불금액(원화)
DataMap beforeRefund = mapper.selectBOORderRefundAmtSumInqire(refundVO);
Integer orderRefundAmtSum = 0; // 해당주문의 이전 총환불금액
Integer wonOrderRefundAmtSum = 0; // 해당주문의 이전 총환불금액(원화)
if(!ObjectUtils.isEmpty(beforeRefund)) {
orderRefundAmtSum = ((BigDecimal) beforeRefund.get("orderRefundAmtSum")).intValue(); // 해당주문의 이전 총환불금액
wonOrderRefundAmtSum = ((BigDecimal)beforeRefund.get("wonOrderRefundAmtSum")).intValue(); // 해당주문의 이전 총환불금액(원화)
} }
Integer orderRefundAmtSum = mapper.selectBOORderRefundAmtSumInqire(refundVO); // 해당 주문의 총 환불금액
Integer dlvyAmtRefundAmt = 0; // 최종 배송비 처리 금액 ( 환불 배송비, 반품 배송비 조건에 따라 변동 ) Integer dlvyAmtRefundAmt = 0; // 최종 배송비 처리 금액 ( 환불 배송비, 반품 배송비 조건에 따라 변동 )
Integer wonDlvyAmtRefundAmt = 0; // 최종 배송비 처리 금액 ( 환불 배송비, 반품 배송비 조건에 따라 변동 )
Integer refundDlvyAmt = 0; // 환불 배송비 금액 Integer refundDlvyAmt = 0; // 환불 배송비 금액
Integer wonRefundDlvyAmt = 0; // 환불 배송비 금액
Integer finalRefundAmt = 0; Integer finalRefundAmt = 0;
Integer finalWonRefundAmt = 0;
finalRefundAmt = refundAmt; finalRefundAmt = refundAmt;
finalWonRefundAmt = wonRefundAmt;
try { try {
@@ -506,16 +529,19 @@ public class BORtngudrefndService {
*/ */
refundDlvyAmt = Integer.parseInt(refundVO.getRefundDlvyAmt()); refundDlvyAmt = Integer.parseInt(refundVO.getRefundDlvyAmt());
wonRefundDlvyAmt = Integer.parseInt(refundVO.getWonRefundDlvyAmt());
log.debug("여기 아래부터 배송비랑 환불금액 산정하는데 그전에 refundVO 데이터 확인 : {}", refundVO); log.debug("여기 아래부터 배송비랑 환불금액 산정하는데 그전에 refundVO 데이터 확인 : {}", refundVO);
if ("01".equals(refundVO.getRefundTyCd())) { if ("01".equals(refundVO.getRefundTyCd())) {
refundAmt += refundDlvyAmt; // 환불 배송비 포함 반품 refundAmt += refundDlvyAmt; // 환불 배송비 포함 반품
wonRefundAmt += wonRefundDlvyAmt;
refundVO.setDlvyAmtRefundAmt("0"); refundVO.setDlvyAmtRefundAmt("0");
} else if ("02".equals(refundVO.getRefundTyCd())) { } else if ("02".equals(refundVO.getRefundTyCd())) {
dlvyAmtRefundAmt = Integer.parseInt(refundVO.getReturnDlvyAmt()); dlvyAmtRefundAmt = Integer.parseInt(refundVO.getReturnDlvyAmt());
wonDlvyAmtRefundAmt = Integer.parseInt(refundVO.getWonReturnDlvyAmt());
// 배송비 책임 // 배송비 책임
if ("01".equals(refundVO.getReturnDlvyRspnsblCd())) { // 구매자 책임 if ("01".equals(refundVO.getReturnDlvyRspnsblCd())) { // 구매자 책임
@@ -530,12 +556,14 @@ public class BORtngudrefndService {
if ("02".equals(refundVO.getReturnDlvyPymntTyCd()) && refundVO.getReturnDlvyAmt() != null) { // 환불금액에서 차감 if ("02".equals(refundVO.getReturnDlvyPymntTyCd()) && refundVO.getReturnDlvyAmt() != null) { // 환불금액에서 차감
// refundAmt -= dlvyAmtRefundAmt; // refundAmt -= dlvyAmtRefundAmt;
refundAmt = refundAmt - dlvyAmtRefundAmt > 0 ? refundAmt - dlvyAmtRefundAmt : 0; refundAmt = refundAmt - dlvyAmtRefundAmt > 0 ? refundAmt - dlvyAmtRefundAmt : 0;
wonRefundAmt = wonRefundAmt - wonDlvyAmtRefundAmt > 0 ? wonRefundAmt - wonDlvyAmtRefundAmt : 0;
} }
refundVO.setDlvyAmtRefundAmt(StringUtil.isNullToString(dlvyAmtRefundAmt)); refundVO.setDlvyAmtRefundAmt(StringUtil.isNullToString(dlvyAmtRefundAmt));
} else if ("02".equals(refundVO.getReturnDlvyRspnsblCd())) { // 판매자 } else if ("02".equals(refundVO.getReturnDlvyRspnsblCd())) { // 판매자
refundAmt += refundDlvyAmt; // 환불 배송비 포함 반품 refundAmt += refundDlvyAmt; // 환불 배송비 포함 반품
wonRefundAmt += wonRefundDlvyAmt;
refundVO.setDlvyAmtRefundAmt("0"); refundVO.setDlvyAmtRefundAmt("0");
} }
@@ -568,13 +596,23 @@ public class BORtngudrefndService {
log.info("setle : {}", setle); log.info("setle : {}", setle);
Integer setleAmt = setle.getSetleAmt(); // 결제금액 Integer setleAmt = setle.getSetleAmt(); // 결제금액
Integer wonSetleAmt = setle.getWonSetleAmt(); // 결제금액(원화)
Integer remMnyAmt = setleAmt - orderRefundAmtSum; Integer remMnyAmt = setleAmt - orderRefundAmtSum;
log.info("이번 환불 결제건에서 환불할 금액 확인 remMnyAmt : {}", remMnyAmt); Integer wonRemMnyAmt = wonSetleAmt - wonOrderRefundAmtSum;
log.info("이번 환불 결제건에서 환불할 금액 확인 refundAmt : {}", refundAmt);
log.info("이번 환불 결제건에서 환불할 금액 확인 orderRefundAmtSum : {}", orderRefundAmtSum); log.info("이번 환불 결제건에서 환불할 금액 확인 remMnyAmt : {}, {}", remMnyAmt, wonRemMnyAmt);
log.info("이번 환불 결제건에서 환불할 금액 확인 refundAmt : {}, {}", refundAmt, wonRefundAmt);
log.info("이번 환불 결제건에서 환불할 금액 확인 orderRefundAmtSum : {}, {}", orderRefundAmtSum, wonOrderRefundAmtSum);
Integer cancelAmt = 0; // 취소금액 Integer cancelAmt = 0; // 취소금액
Integer wonCancelAmt = 0; // 취소금액(원화)
// 환불금액, 결제금액 - (이전환불금액 - 환불금액)
cancelAmt = Math.min(refundAmt, setleAmt - (orderRefundAmtSum - refundAmt)); cancelAmt = Math.min(refundAmt, setleAmt - (orderRefundAmtSum - refundAmt));
log.info("이번 환불 결제건에서 환불할 금액 확인 cancelAmt : {}", cancelAmt); wonCancelAmt = Math.min(wonRefundAmt, wonSetleAmt - (wonOrderRefundAmtSum - wonRefundAmt));
log.info("이번 환불 결제건에서 환불할 금액 확인 cancelAmt : {}, {}", cancelAmt, wonCancelAmt);
Integer receiptCancelAmt = cancelAmt; // 현금영수증 취소금액 Integer receiptCancelAmt = cancelAmt; // 현금영수증 취소금액
log.info("이번 환불 결제건에서 환불할 현금영수증 GC 머니 추가 전 금액 확인 receiptCancelAmt : {}", receiptCancelAmt); log.info("이번 환불 결제건에서 환불할 현금영수증 GC 머니 추가 전 금액 확인 receiptCancelAmt : {}", receiptCancelAmt);
@@ -734,6 +772,7 @@ public class BORtngudrefndService {
} }
/************************** KCP 환불 코드 세팅 END *************************/ /************************** KCP 환불 코드 세팅 END *************************/
// 02:무통장계좌이체, 08:마일리지, 13:수동
if ("02".equals(setle.getSetleTyCd()) || "08".equals(setle.getSetleTyCd()) || "13".equals(setle.getSetleTyCd())) { if ("02".equals(setle.getSetleTyCd()) || "08".equals(setle.getSetleTyCd()) || "13".equals(setle.getSetleTyCd())) {
if ("02".equals(setle.getSetleTyCd())) { // 무통장입금 if ("02".equals(setle.getSetleTyCd())) { // 무통장입금
@@ -788,9 +827,7 @@ public class BORtngudrefndService {
// TODO : // TODO :
} else if ("08".equals(setle.getSetleTyCd())) { // 마일리지 } else if ("09".equals(setle.getSetleTyCd())) {
// 마일리지 사용취소로 처리
} else if ("09".equals(setle.getSetleTyCd())) {
// 포스 환불은 포스기계쪽에서 처리됌 GCONE 에서는 데이터 처리만 진행 // 포스 환불은 포스기계쪽에서 처리됌 GCONE 에서는 데이터 처리만 진행
} else if ("11".equals(setle.getSetleTyCd())) { // TODO : 복합 결제 취소 로직 확인 필요 } else if ("11".equals(setle.getSetleTyCd())) { // TODO : 복합 결제 취소 로직 확인 필요
@@ -802,8 +839,8 @@ public class BORtngudrefndService {
} else { // 일반결제 } else { // 일반결제
// 토스페이 // 토스페이 || "naverpay".equals(setle.getPgCmpnyNm()) >> 네이버페이는 토스에서 분리해서 키움으로 이동
if ("tosspay".equals(setle.getPgCmpnyNm()) || "gcpay".equals(setle.getPgCmpnyNm()) || "toss".equals(setle.getPgCmpnyNm()) || "naverpay".equals(setle.getPgCmpnyNm()) || "kakaopay".equals(setle.getPgCmpnyNm())) { if ("tosspay".equals(setle.getPgCmpnyNm()) || "gcpay".equals(setle.getPgCmpnyNm()) || "toss".equals(setle.getPgCmpnyNm()) || "kakaopay".equals(setle.getPgCmpnyNm())) {
log.debug("toss 취소 진입"); log.debug("toss 취소 진입");
BOPayVO payVO = new BOPayVO(); BOPayVO payVO = new BOPayVO();
payVO.setOrderId(ordrInnb); // 주문 고유번호 payVO.setOrderId(ordrInnb); // 주문 고유번호
@@ -812,9 +849,9 @@ public class BORtngudrefndService {
payVO.setCancelReason(refundVO.getRefundResnCn()); // 취소사유 payVO.setCancelReason(refundVO.getRefundResnCn()); // 취소사유
if ("01".equals(refundVO.getRefundScopeCd())) { if ("01".equals(refundVO.getRefundScopeCd())) {
payVO.setCancelAmount(String.valueOf(cancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 ) payVO.setCancelAmount(String.valueOf(wonCancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 )
} else if ("02".equals(refundVO.getRefundScopeCd())) { } else if ("02".equals(refundVO.getRefundScopeCd())) {
payVO.setCancelAmount(String.valueOf(cancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 ) payVO.setCancelAmount(String.valueOf(wonCancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 )
} }
payVO.setBank(refundVO.getRefundAcntBnnkCd()); // 환불 은행코드 payVO.setBank(refundVO.getRefundAcntBnnkCd()); // 환불 은행코드
@@ -841,10 +878,12 @@ public class BORtngudrefndService {
payVO.setMId(setle.getSetleMid()); // 결제 MID(상점키) payVO.setMId(setle.getSetleMid()); // 결제 MID(상점키)
payVO.setPaymentKey(setle.getDelngNb()); // 거래번호 payVO.setPaymentKey(setle.getDelngNb()); // 거래번호
log.info("토스 취소 파라미터 확인 : {}", payVO); log.info("토스 취소 파라미터 확인 : {}", payVO);
setleCancelResultMessage = payService.cancelTossPay(payVO); setleCancelResultMessage = payService.cancelTossPay(payVO);
log.info("결제 취소 API 결과 확인 : {}", setleCancelResultMessage); log.info("결제 취소 API 결과 확인 : {}", setleCancelResultMessage);
log.info("결제 취소 API 결과 확인 : {}", setleCancelResultMessage.get("response")); log.info("결제 취소 API 결과 확인 : {}", setleCancelResultMessage.get("response"));
String jsonString = (String) setleCancelResultMessage.get("response"); String jsonString = (String) setleCancelResultMessage.get("response");
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
responseMap = objectMapper.readValue(jsonString, Map.class); responseMap = objectMapper.readValue(jsonString, Map.class);
@@ -984,7 +1023,7 @@ public class BORtngudrefndService {
payVO.setSetleTyCd(setle.getSetleTyCd()); // 결제 유형 코드 payVO.setSetleTyCd(setle.getSetleTyCd()); // 결제 유형 코드
payVO.setCancelReason(refundVO.getRefundResnCn()); // 취소사유 payVO.setCancelReason(refundVO.getRefundResnCn()); // 취소사유
payVO.setCancelAmount(String.valueOf(cancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 ) payVO.setCancelAmount(String.valueOf(wonCancelAmt)); // 취소금액 ( 금액이 없으면 전체취소 )
payVO.setBank(refundVO.getRefundAcntBnnkCd()); // 계좌 입금 후 취소시 환불은행코드? payVO.setBank(refundVO.getRefundAcntBnnkCd()); // 계좌 입금 후 취소시 환불은행코드?
payVO.setAccountNumber(refundVO.getRefundAcntnb()); // 환불 계좌번호 payVO.setAccountNumber(refundVO.getRefundAcntnb()); // 환불 계좌번호
@@ -992,8 +1031,8 @@ public class BORtngudrefndService {
payVO.setTno(setle.getDelngNb()); // 거래번호 payVO.setTno(setle.getDelngNb()); // 거래번호
payVO.setModType(refundModeType); // 전체 취소, 부분 취소 payVO.setModType(refundModeType); // 전체 취소, 부분 취소
payVO.setModMny(String.valueOf(cancelAmt)); // 부분취소 요청 금액 payVO.setModMny(String.valueOf(wonCancelAmt)); // 부분취소 요청 금액
payVO.setRemMny(String.valueOf(remMnyAmt)); // 부분취소 가능 금액 payVO.setRemMny(String.valueOf(wonRemMnyAmt)); // 부분취소 가능 금액
payVO.setSubModType(sub_mod_type); // 전체 취소, 부분 취소 payVO.setSubModType(sub_mod_type); // 전체 취소, 부분 취소
@@ -1060,6 +1099,58 @@ public class BORtngudrefndService {
} }
// kiwoom
} else if ("kiwoom".equals(setle.getPgCmpnyNm()) || "naverpay".equals(setle.getPgCmpnyNm())) {
log.debug("kiwoom 취소 진입");
BOPayVO payVO = new BOPayVO();
payVO.setOrderId(ordrInnb); // 주문 고유번호
payVO.setSopmalCd(sopmalCd); // 쇼핑몰 코드
payVO.setMId(setle.getSetleMid()); // 결제 MID(상점키)
payVO.setSetleTyCd(setle.getSetleTyCd()); // 결제 유형 코드
payVO.setCancelReason(refundVO.getRefundResnCn()); // 취소사유
payVO.setTno(setle.getDelngNb()); // 거래번호
//부분 취소 처리 경우 승인금액보다 취소요청금액이 적으면 부분 취소 처리
payVO.setCancelAmount(String.valueOf(wonCancelAmt)); // 취소금액
if ("Y".equals(setle.getMemorSetleAt())) {
payVO.setMemorSetleAt("Y");
}
// 개발서버 네이버페이 CPID 구분 적용 취소
payVO.setModGubun(setle.getPgCmpnyNm()); //결제키 구분용
if ("kiwoom".equals(setle.getPgCmpnyNm())) {
payVO.setPayMethod("CARD");
} else if ("naverpay".equals(setle.getPgCmpnyNm())) {
payVO.setPayMethod("NAVERPAY");
}
log.info("kiwoom api 전달 파라미터 확인 : {}", payVO);
setleCancelResultMessage = payService.cancelKiwoomPay(payVO);
log.info("결제 취소 API 결과 확인 : {}", setleCancelResultMessage);
log.info("결제 취소 API 결과 확인 response : {}", setleCancelResultMessage.get("response"));
String jsonString = (String) setleCancelResultMessage.get("response");
ObjectMapper objectMapper = new ObjectMapper();
responseMap = objectMapper.readValue(jsonString, Map.class);
log.debug("리스펀스 결과 : {}", responseMap);
log.info("리스펀스 결과 값 : {}", responseMap.get("RESULTCODE"));
if ("0000".equals(responseMap.get("RESULTCODE"))) {
// 0000 : 취소성공
log.debug("0000");
message.put("setleStatus", responseMap.get("RESULTCODE"));
message.put("setleMessage", responseMap.get("ERRORMESSAGE"));
} else {
log.debug("1111");
message.put("setleStatus", responseMap.get("RESULTCODE"));
message.put("setleMessage", responseMap.get("ERRORMESSAGE"));
logDtlCn = "잘못된 요청입니다. 관리자에게 문의하세요.";
throw new WnbtRestException("잘못된 요청입니다. 관리자에게 문의하세요.");
}
} }
} }
@@ -1202,6 +1293,7 @@ public class BORtngudrefndService {
// ########################################### 최종 반품/환불 상태변경 ########################################### // ########################################### 최종 반품/환불 상태변경 ###########################################
boRtngudrefndVO.setRefundAmt(String.valueOf(finalRefundAmt)); boRtngudrefndVO.setRefundAmt(String.valueOf(finalRefundAmt));
boRtngudrefndVO.setWonRefundAmt(String.valueOf(finalWonRefundAmt));
boRtngudrefndVO.setDlvyAmtRefundAmt(refundVO.getDlvyAmtRefundAmt()); boRtngudrefndVO.setDlvyAmtRefundAmt(refundVO.getDlvyAmtRefundAmt());
boRtngudrefndVO.setRefundProcsSttusCd("03"); boRtngudrefndVO.setRefundProcsSttusCd("03");
log.debug("환불 상태값이랑 정보 수정하기 전 boRtngudrefndVO :: {}", boRtngudrefndVO); log.debug("환불 상태값이랑 정보 수정하기 전 boRtngudrefndVO :: {}", boRtngudrefndVO);
@@ -1286,7 +1378,21 @@ public class BORtngudrefndService {
if ("0".equals(message.get("status"))) { if ("0".equals(message.get("status"))) {
// ########################################### 상품 재고 ########################################### // ########################################### 상품 재고 ###########################################
boGoodsService.updateRefundUsefulInvntryQy(refundVO); BOOrdrVO ordrVO = new BOOrdrVO();
ordrVO.setOrdrInnb(refundVO.getOrdrInnb());
ordrVO.setSopmalCd(refundVO.getSopmalCd());
DataMap ordrDtl = ordrMapper.selectOrdrDtl(ordrVO);
boolean subsvcAt = "Y".equals(ordrDtl.get("subsvcAt"));
// 구독서비스 여부(subsvcAt)에 따라 재고 처리 로직을 분기
if(subsvcAt) {
// 구독서비스
ordrVO.setSubsvcInnb(ordrDtl.get("subsvcInnb").toString());
subsvcService.updateSubsvcRefundUsefulInvntryQy(ordrVO);
} else {
// 일반 주문
boGoodsService.updateRefundUsefulInvntryQy(refundVO);
}
// ########################################### 쿠폰 복원 ########################################### // ########################################### 쿠폰 복원 ###########################################
@@ -1441,7 +1547,21 @@ public class BORtngudrefndService {
// ########################################### 상품 재고 ########################################### // ########################################### 상품 재고 ###########################################
boGoodsService.updateCancelOrderUsefulInvntryQy(ordrVO, ordrVO.getOrdrInnb()); BOOrdrVO boOrdrVO = new BOOrdrVO();
boOrdrVO.setOrdrInnb(ordrVO.getOrdrInnb());
boOrdrVO.setSopmalCd(ordrVO.getSopmalCd());
DataMap ordrDtl = ordrMapper.selectOrdrDtl(boOrdrVO);
boolean subsvcAt = "Y".equals(ordrDtl.get("subsvcAt"));
// 구독서비스 여부(subsvcAt)에 따라 재고 처리 로직을 분기
if(subsvcAt) {
// 구독서비스
boOrdrVO.setSubsvcInnb(ordrDtl.get("subsvcInnb").toString());
subsvcService.updateSubsvcCancelOrderUsefulInvntryQy(boOrdrVO);
} else {
// 일반 주문
boGoodsService.updateCancelOrderUsefulInvntryQy(ordrVO, ordrVO.getOrdrInnb());
}
resotreResult.put("restoreResult", "0"); resotreResult.put("restoreResult", "0");
} catch (Exception e) { } catch (Exception e) {

View File

@@ -23,6 +23,8 @@ public class BORefundSetleVO extends AbstractVO {
private Integer setleAmt; private Integer setleAmt;
private Integer wonSetleAmt;
private String pgCmpnyNm; private String pgCmpnyNm;
private String pgInnb; private String pgInnb;

View File

@@ -15,7 +15,7 @@ public class BORtngudrefndVO extends AbstractVO{
private String ordrDlvyInnb; private String ordrDlvyInnb;
private String[] ordrDlvyInnbArr; private String[] ordrDlvyInnbArr;
//쇼핑몰코드 /**쇼핑몰코드*/
private String sopmalCd; private String sopmalCd;
//TODO:: 추후 SESSION에서 처리 사용자,관리자 구분 //TODO:: 추후 SESSION에서 처리 사용자,관리자 구분
private String usrDv; private String usrDv;
@@ -25,69 +25,71 @@ public class BORtngudrefndVO extends AbstractVO{
private String orderReInnb; private String orderReInnb;
private String refundCd; // 환불 코드 번호 private String refundCd; // 환불 코드 번호
private String orderRefundInnb; private String orderRefundInnb;
/*주문고유번호*/ /**주문고유번호*/
private String ordrInnb; private String ordrInnb;
/*환불신청일시*/ /**환불신청일시*/
private String refundReqstDt; private String refundReqstDt;
/*환불완료일시*/ /**환불완료일시*/
private String refundComptDt; private String refundComptDt;
/*신청(request), 처리중(ing), 완료(complete)*/ /**신청(request), 처리중(ing), 완료(complete)*/
private String refundProcsSttusCd; private String refundProcsSttusCd;
/*신청(request), 처리중(ing), 완료(complete) 이전 상태 */ /**신청(request), 처리중(ing), 완료(complete) 이전 상태 */
private String oldRefundProcsSttusCd; private String oldRefundProcsSttusCd;
/*결제취소(cancel_payment),반품환불(return),배송비환불(shipping_price)*/ /**결제취소(cancel_payment),반품환불(return),배송비환불(shipping_price)*/
private String refundTyCd; private String refundTyCd;
/*전체취소(full), 부분취소(partial)*/ /**전체취소(full), 부분취소(partial)*/
private String refundScopeCd; private String refundScopeCd;
/*환불사유내용*/ /**환불사유내용*/
private String refundResnCn; private String refundResnCn;
/*계좌이체(account), 무통장(bank), 신용카드(card), 수동(manual), ?(payco_coupon), 포스기기(pos)*/ /**계좌이체(account), 무통장(bank), 신용카드(card), 수동(manual), ?(payco_coupon), 포스기기(pos)*/
private String refundMthCd; private String refundMthCd;
/** 환불계좌은행코드 */ /** 환불계좌은행코드 */
private String refundAcntBnnkCd; // 환불계좌은행코드 private String refundAcntBnnkCd; // 환불계좌은행코드
/*환불계좌은행명*/ /**환불계좌은행명*/
private String refundAcntBnnkNm; private String refundAcntBnnkNm;
/*환불계좌예금주명*/ /**환불계좌예금주명*/
private String refundAcntDpstrNm; private String refundAcntDpstrNm;
/*환불계좌번호*/ /**환불계좌번호*/
private String refundAcntnb; private String refundAcntnb;
/*환불금액*/ /**환불금액*/
private String refundAmt; private String refundAmt;
/*환불적립금액*/ /**환불금액(원화)*/
private String wonRefundAmt;
/**환불적립금액*/
private Integer refundAccmlmnyAmt; private Integer refundAccmlmnyAmt;
/*배송비환불총금액*/ /**배송비환불총금액*/
private Integer dlvyAmtTotRefundAmt; private Integer dlvyAmtTotRefundAmt;
/*쿠폰할인보정금액*/ /**쿠폰할인보정금액*/
private Integer coupDscntRevisnAmt; private Integer coupDscntRevisnAmt;
/*적립금보정금액*/ /**적립금보정금액*/
private Integer accmlmnyRevisnAmt; private Integer accmlmnyRevisnAmt;
/*에누리보정금액*/ /**에누리보정금액*/
private Integer enuriRevisnAmt; private Integer enuriRevisnAmt;
/*적립금유효일자*/ /**적립금유효일자*/
private String accmlmnyValidDe; private String accmlmnyValidDe;
/*다운로드쿠폰 고유번호*/ /**다운로드쿠폰 고유번호*/
private String dwldCouponInnb; private String dwldCouponInnb;
/*상태메모내용*/ /**상태메모내용*/
private String sttusMemoCn; private String sttusMemoCn;
/*관리자메모내용*/ /**관리자메모내용*/
private String mngrMemoCn; private String mngrMemoCn;
/*관리자 고유번호*/ /**관리자 고유번호*/
private String mngrInnb; private String mngrInnb;
/*스마트쇼핑환불신청일시*/ /**스마트쇼핑환불신청일시*/
private String smrtShopngRefndReqstDt; private String smrtShopngRefndReqstDt;
/*스마트쇼핑환불완료일시*/ /**스마트쇼핑환불완료일시*/
private String smrtShopngRefndComptDt; private String smrtShopngRefndComptDt;
/*cancel_done, refund_request*/ /**cancel_done, refund_request*/
private String smrtShopngRefndProcsSttusCd; private String smrtShopngRefndProcsSttusCd;
/*스마트쇼핑클레임발생금액*/ /**스마트쇼핑클레임발생금액*/
private Integer smrtShopngClaimOccrrncAmt; private Integer smrtShopngClaimOccrrncAmt;
/*스마트쇼핑초도배송비금액*/ /**스마트쇼핑초도배송비금액*/
private Integer smrtShopngFrsttmeDlvyAmtAmt; private Integer smrtShopngFrsttmeDlvyAmtAmt;
/*반품환불보류상품번호내용*/ /**반품환불보류상품번호내용*/
private String returnRefndDferGoodsNbCn; private String returnRefndDferGoodsNbCn;
/*사용여부*/ /**사용여부*/
private String useAt; private String useAt;
/*처리대상자 구분*/ /**처리대상자 구분*/
private String procsTargetDv; private String procsTargetDv;
private String returnCd; // 반품 코드 private String returnCd; // 반품 코드
/**신청(request), 완료(complete), 철회(retraction)*/ /**신청(request), 완료(complete), 철회(retraction)*/
@@ -108,6 +110,8 @@ public class BORtngudrefndVO extends AbstractVO{
private String returnCstmrMbtlnb; private String returnCstmrMbtlnb;
/** 반품배송비금액 */ /** 반품배송비금액 */
private String returnDlvyAmt; private String returnDlvyAmt;
/** 반품배송비금액(원화) */
private String wonReturnDlvyAmt;
/** company,provider */ /** company,provider */
private String returnDlvyAmtRecptTrgetCd; private String returnDlvyAmtRecptTrgetCd;
/**구매자(buyer), 판매자(seller)*/ /**구매자(buyer), 판매자(seller)*/
@@ -144,10 +148,14 @@ public class BORtngudrefndVO extends AbstractVO{
private String smrtShopngReturnProcsSttusCd; private String smrtShopngReturnProcsSttusCd;
/** 배송비환불금액 */ /** 배송비환불금액 */
private String dlvyAmtRefundAmt; private String dlvyAmtRefundAmt;
/** 배송비환불금액(원화) */
private String wonDlvyAmtRefundAmt;
/** 지번 or 도로명 주소 */ /** 지번 or 도로명 주소 */
private String lnbOrRnmAdres; private String lnbOrRnmAdres;
/** 환불배송비총금액 */ /** 환불배송비총금액 */
private String refundDlvyAmt; private String refundDlvyAmt;
/** 환불배송비총금액(원화) */
private String wonRefundDlvyAmt;
/** 반품 환불 상품 옵션 리스트 */ /** 반품 환불 상품 옵션 리스트 */
private List<BOOrderReItemVO> orderReItemVOList; private List<BOOrderReItemVO> orderReItemVOList;
/**상세 내용*/ /**상세 내용*/
@@ -167,11 +175,11 @@ public class BORtngudrefndVO extends AbstractVO{
public String endDt; public String endDt;
//날짜 검색 구분 //날짜 검색 구분
private String srchDtDv; private String srchDtDv;
//** 반품처리상태 */ /** 반품처리상태 */
private String[] srchReturnProcsStuusCd; private String[] srchReturnProcsStuusCd;
//** 환불처리상태 */ /** 환불처리상태 */
private String[] srchRefundProcsSttusCd; private String[] srchRefundProcsSttusCd;
//** 회수방법(반품) */ /** 회수방법(반품) */
private String srchReturnMthCd; private String srchReturnMthCd;
/**검색시작일*/ /**검색시작일*/
public String srchStartDate; public String srchStartDate;
@@ -189,9 +197,9 @@ public class BORtngudrefndVO extends AbstractVO{
private String mbtlnb; private String mbtlnb;
/** 회원타입코드 */ /** 회원타입코드 */
private String mbrTyCd; private String mbrTyCd;
/*시크릿 키*/ /**시크릿 키*/
private String secretKey; private String secretKey;
/*회원 사이트정보 갱신용*/ /**회원 사이트정보 갱신용*/
private String siteMbrInnb; private String siteMbrInnb;
private String siteMbrDvCd; private String siteMbrDvCd;
@@ -200,7 +208,7 @@ public class BORtngudrefndVO extends AbstractVO{
/** 실 환불 GC 머니 금액 */ /** 실 환불 GC 머니 금액 */
private String prosbleCancelCashAmt; private String prosbleCancelCashAmt;
//** 반품처리상태 */ /** 반품처리상태 */
private String[] returnProcsStuusCd; private String[] returnProcsStuusCd;
private String serverDv; private String serverDv;

View File

@@ -291,7 +291,7 @@ public class BOPurchsEvtService {
if ("01".equals(purchsEvtVO.getEvtDv())) { if ("01".equals(purchsEvtVO.getEvtDv())) {
if (purchsEvtVO.getDeleteBnefList() != null) { if (purchsEvtVO.getDeleteBnefList() != null) {
log.debug(" 삭제 리스트 확인 purchsEvtVO . get deleteList : {}", purchsEvtVO.getDeleteBnefList()); log.debug(" 삭제 리스트 확인 purchsEvtVO . get deleteList : {}", (Object) purchsEvtVO.getDeleteBnefList());
for (String deleteBnefInnb : purchsEvtVO.getDeleteBnefList()) { for (String deleteBnefInnb : purchsEvtVO.getDeleteBnefList()) {
log.debug("deleteBnefInnb : {}", deleteBnefInnb); log.debug("deleteBnefInnb : {}", deleteBnefInnb);
purchsEvtVO.setDeleteBnefInnb(Integer.parseInt(deleteBnefInnb)); purchsEvtVO.setDeleteBnefInnb(Integer.parseInt(deleteBnefInnb));
@@ -309,24 +309,10 @@ public class BOPurchsEvtService {
} }
} }
// 사은품 이벤트 // 사은품 이벤트
} else if ("02".equals(purchsEvtVO.getEvtDv())) { } else if ("02".equals(purchsEvtVO.getEvtDv())) {
/*
if (!StringUtils.isEmpty(Arrays.toString(purchsEvtVO.getDeleteGiftList()))) {
log.debug(" 삭제 리스트 확인 purchsEvtVO . get getDeleteGiftList : {}", purchsEvtVO.getDeleteGiftList());
for (String deleteGiftInnb : purchsEvtVO.getDeleteGiftList()) {
log.debug("deleteGiftInnb : {}", deleteGiftInnb);
purchsEvtVO.setDeleteGiftInnb(Integer.parseInt(deleteGiftInnb));
mapper.deleteBOPurchsEvtGiftDel(purchsEvtVO);
}
}
*/
if (!StringUtils.isEmpty(Arrays.toString(purchsEvtVO.getDeleteBnefList()))) { if (!StringUtils.isEmpty(Arrays.toString(purchsEvtVO.getDeleteBnefList()))) {
log.debug(" 삭제 리스트 확인 purchsEvtVO . get deleteList : {}", purchsEvtVO.getDeleteBnefList()); log.debug(" 삭제 리스트 확인 purchsEvtVO . get deleteList : {}", (Object) purchsEvtVO.getDeleteBnefList());
for (String deleteBnefInnb : purchsEvtVO.getDeleteBnefList()) { for (String deleteBnefInnb : purchsEvtVO.getDeleteBnefList()) {
log.debug("deleteBnefInnb : {}", deleteBnefInnb); log.debug("deleteBnefInnb : {}", deleteBnefInnb);
purchsEvtVO.setDeleteBnefInnb(Integer.parseInt(deleteBnefInnb)); purchsEvtVO.setDeleteBnefInnb(Integer.parseInt(deleteBnefInnb));
@@ -334,7 +320,6 @@ public class BOPurchsEvtService {
} }
} }
if (purchsEvtVO.getDiscountBnefVOList() != null && !purchsEvtVO.getDiscountBnefVOList().isEmpty()) { if (purchsEvtVO.getDiscountBnefVOList() != null && !purchsEvtVO.getDiscountBnefVOList().isEmpty()) {
log.debug("사은품 혜택 진입"); log.debug("사은품 혜택 진입");
for (BOPurchsEvtDiscountBnefVO tempVO : purchsEvtVO.getDiscountBnefVOList()) { for (BOPurchsEvtDiscountBnefVO tempVO : purchsEvtVO.getDiscountBnefVOList()) {

View File

@@ -0,0 +1,34 @@
package com.wb.domainserver.domain.gcone.setup.cost.mapper;
import com.wb.domainserver.domain.gcone.setup.cost.vo.BOCostVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BOCostMapper {
/**
* 원가 설정 목록 조회
* @param vo
* @return
*/
public List<DataMap> selectBOCostPriceList(BOCostVO vo);
/**
* 원가 설정 삭제
* @param vo
* @return
*/
public int deleteBOCostPrice(BOCostVO vo);
/**
* 원가 설정 추가
* @param dm
* @return
*/
public int insertBOCostPrice(DataMap dm);
}

View File

@@ -0,0 +1,94 @@
package com.wb.domainserver.domain.gcone.setup.cost.service;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.domain.gcone.setup.cost.mapper.BOCostMapper;
import com.wb.domainserver.domain.gcone.setup.cost.vo.BOCostVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.ErrorCode;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
/**
* 원가 설정 BO Serivce
*
* @author 이대환
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2026-05-29 이대환 최초 생성
*
* </pre>
* @since 2026-05-29
*/
@Slf4j
@Service
public class BOCostService {
@Autowired
private BOMaComncdService bOMaComncdService;
@Autowired
private BOCostMapper mapper;
/**
* 원가 설정 목록 조회
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectBOCostPriceList(BOCostVO vo) {
List<DataMap> costList = new ArrayList<>();
costList = mapper.selectBOCostPriceList(vo);
return costList;
}
/**
* 원가 설정 수정
* @param vo
*/
@Transactional
public DataMap updateBOCostPriceSetup(BOCostVO vo) {
DataMap message = new DataMap();
try {
mapper.deleteBOCostPrice(vo);
DataMap paramMap = new DataMap();
paramMap.put("regusr", vo.getRegusr());
int[] ctInnbArr = vo.getCtInnbArr();
if (!ObjectUtils.isEmpty(ctInnbArr)) {
for (int i = 0; i < ctInnbArr.length; i++) {
paramMap.put("stdrDe", vo.getStdrDeArr()[i]);
paramMap.put("usdRate", vo.getUsdRateArr()[i]);
paramMap.put("jpDlvyCt", vo.getJpDlvyCtArr()[i]);
paramMap.put("intlDlvyAmt", vo.getIntlDlvyAmtArr()[i]);
paramMap.put("pltfomFee", vo.getPltfomFeeArr()[i]);
paramMap.put("expctTax", vo.getExpctTaxArr()[i]);
paramMap.put("cstmsFee", vo.getCstmsFeeArr()[i]);
paramMap.put("krDlvyCt", vo.getKrDlvyCtArr()[i]);
mapper.insertBOCostPrice(paramMap);
}
}
message.put("result", "success");
} catch (WnbtRestException wre) {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR);
}
return message;
}
}

View File

@@ -0,0 +1,39 @@
package com.wb.domainserver.domain.gcone.setup.cost.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
@Data
@EqualsAndHashCode(callSuper=false)
public class BOCostVO extends AbstractVO {
/** 원가 고유번호 */
private int[] ctInnbArr;
/** 기준일자 */
private String[] stdrDeArr;
/** USD 환율 (1,000 円) */
private BigDecimal[] usdRateArr;
/** 일본 내 물류비 */
private int[] jpDlvyCtArr;
/** 운임비용(JP) */
private int[] intlDlvyAmtArr;
/** 플랫폼 수수료율 */
private BigDecimal[] pltfomFeeArr;
/** 예상세율 */
private BigDecimal[] expctTaxArr;
/** 통관수수료 */
private int[] cstmsFeeArr;
/** 운임비용(KR) */
private int[] krDlvyCtArr;
}

View File

@@ -0,0 +1,56 @@
package com.wb.domainserver.domain.gcone.setup.exchngrt.service;
import com.wb.domainserver.domain.admin.store.sopmal.mapper.BOMaSopmalMapper;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.ErrorCode;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* 환율 설정 BO Serivce
*
* @author 이대환
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2026-04-27 이대환 최초 생성
*
* </pre>
* @since 2026-04-27
*/
@Slf4j
@Service
public class BOExchngrtService {
@Autowired
private BOMaComncdService bOMaComncdService;
@Autowired
private BOMaSopmalMapper mapper;
/**
* 환율 설정 수정
* @param boMaSopmalVO
*/
@Transactional
public DataMap updateBOExchngrtSetup(BOMaSopmalVO boMaSopmalVO) {
DataMap message = new DataMap();
try {
mapper.updateBOExchngrtSetup(boMaSopmalVO);
message.put("result", "success");
} catch (WnbtRestException wre) {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR);
}
return message;
}
}

View File

@@ -0,0 +1,32 @@
package com.wb.domainserver.domain.gcone.setup.exchngrt.vo;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper=false)
public class BOExchngrtVO extends AbstractVO {
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 1엔 환율(살때) */
private String buyRate;
/** 1엔 환율(팔때) */
private String sellRate;
/** BOMaSopmalVO로 변환 */
public BOMaSopmalVO setBOMaSopmalVO() {
BOMaSopmalVO boMaSopmalVO = new BOMaSopmalVO();
boMaSopmalVO.setSopmalCd(this.getSopmalCd());
boMaSopmalVO.setBuyRate(this.getBuyRate());
boMaSopmalVO.setSellRate(this.getSellRate());
boMaSopmalVO.setRegusr(this.getRegusr());
boMaSopmalVO.setUpdusr(this.getUpdusr());
return boMaSopmalVO;
}
}

View File

@@ -0,0 +1,76 @@
package com.wb.domainserver.domain.gcone.setup.family.service;
import com.wb.domainserver.domain.admin.store.sopmal.mapper.BOMaSopmalMapper;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.ErrorCode;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
/**
* 패밀리사이트 설정 BO Serivce
*
* @author 이대환
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2026-04-27 이대환 최초 생성
*
* </pre>
* @since 2026-04-27
*/
@Slf4j
@Service
public class BOFamilyService {
@Autowired
private BOMaComncdService bOMaComncdService;
@Autowired
private BOMaSopmalMapper mapper;
/**
* 패밀리사이트 설정 수정
* @param boMaSopmalVO
*/
@Transactional
public DataMap updateBOFamilySetup(BOMaSopmalVO boMaSopmalVO) {
DataMap message = new DataMap();
try {
mapper.deteteBOShopFamilySite(boMaSopmalVO);
DataMap paramMap = new DataMap();
paramMap.put("sopmalCd", boMaSopmalVO.getSopmalCd());
paramMap.put("regusr", boMaSopmalVO.getRegusr());
if (!ObjectUtils.isEmpty(boMaSopmalVO.getFamilySiteNmArr())) {
String[] siteNm = boMaSopmalVO.getFamilySiteNmArr();
String[] siteUrl = boMaSopmalVO.getFamilySiteUrlArr();
for (int i = 0; i < siteNm.length; i++) {
if (!StringUtil.isEmpty(siteNm[i])) {
paramMap.put("familySiteNm", siteNm[i]);
paramMap.put("familySiteUrl", siteUrl[i]);
mapper.insertBOShopFamilySite(paramMap);
}
}
}
message.put("result", "success");
} catch (WnbtRestException wre) {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR);
}
return message;
}
}

View File

@@ -0,0 +1,32 @@
package com.wb.domainserver.domain.gcone.setup.family.vo;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper=false)
public class BOFamilyVO extends AbstractVO {
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 패밀리사이트명 */
private String[] familySiteNmArr;
/** 패밀리사이트URL */
private String[] familySiteUrlArr;
/** BOMaSopmalVO로 변환 */
public BOMaSopmalVO setBOMaSopmalVO() {
BOMaSopmalVO boMaSopmalVO = new BOMaSopmalVO();
boMaSopmalVO.setSopmalCd(this.getSopmalCd());
boMaSopmalVO.setFamilySiteNmArr(this.getFamilySiteNmArr());
boMaSopmalVO.setFamilySiteUrlArr(this.getFamilySiteUrlArr());
boMaSopmalVO.setRegusr(this.getRegusr());
boMaSopmalVO.setUpdusr(this.getUpdusr());
return boMaSopmalVO;
}
}

View File

@@ -0,0 +1,56 @@
package com.wb.domainserver.domain.gcone.setup.guidance.service;
import com.wb.domainserver.domain.admin.store.sopmal.mapper.BOMaSopmalMapper;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.ErrorCode;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* 안내문구 설정 BO Serivce
*
* @author 이대환
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2026-04-27 이대환 최초 생성
*
* </pre>
* @since 2026-04-27
*/
@Slf4j
@Service
public class BOGuidanceService {
@Autowired
private BOMaComncdService bOMaComncdService;
@Autowired
private BOMaSopmalMapper mapper;
/**
* 안내문구 설정 수정
* @param boMaSopmalVO
*/
@Transactional
public DataMap updateBOGuidanceSetup(BOMaSopmalVO boMaSopmalVO) {
DataMap message = new DataMap();
try {
mapper.updateBOGuidanceSetup(boMaSopmalVO);
message.put("result", "success");
} catch (WnbtRestException wre) {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
throw new WnbtRestException(ErrorCode.INTERNAL_SERVER_ERROR);
}
return message;
}
}

View File

@@ -0,0 +1,44 @@
package com.wb.domainserver.domain.gcone.setup.guidance.vo;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper=false)
public class BOGuidanceVO extends AbstractVO {
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 회원가입 안내 타이틀 */
private String joinGuidanceSj;
/** 회원가입 안내문구 */
private String joinGuidanceWords;
/** 회원가입 주요혜택 */
private String joinBnef;
/** 회원가입 주요문구 */
private String joinComptWords;
/** 구독서비스 안내문구 */
private String subsvcGuidanceWords;
/** BOMaSopmalVO로 변환 */
public BOMaSopmalVO setBOMaSopmalVO() {
BOMaSopmalVO boMaSopmalVO = new BOMaSopmalVO();
boMaSopmalVO.setSopmalCd(this.getSopmalCd());
boMaSopmalVO.setJoinGuidanceSj(this.getJoinGuidanceSj());
boMaSopmalVO.setJoinGuidanceWords(this.getJoinGuidanceWords());
boMaSopmalVO.setJoinBnef(this.getJoinBnef());
boMaSopmalVO.setJoinComptWords(this.getJoinComptWords());
boMaSopmalVO.setSubsvcGuidanceWords(this.getSubsvcGuidanceWords());
boMaSopmalVO.setRegusr(this.getRegusr());
boMaSopmalVO.setUpdusr(this.getUpdusr());
return boMaSopmalVO;
}
}

View File

@@ -28,28 +28,48 @@ import lombok.EqualsAndHashCode;
public class BOSetupOrdrVO extends AbstractVO { public class BOSetupOrdrVO extends AbstractVO {
/** 쇼핑몰 코드 */ /** 쇼핑몰 코드 */
private String sopmalCd; private String sopmalCd;
/**마일리지 지급 사용여부*/
private String mlgPymntAt; // 여러 곳 배송
/**마일리지 지급 구분코드*/ /** 여러곳배송여부 */
private String mlgPymntDvCd;
/**마일리지 지급 비율*/
private String mlgPymntRt;
/**마일리지 최대 지급 금액*/
private String mlgMxmmPymntAmt;
/**마일리지 최대 지급 금액 사용여부*/
private String mlgMxmmPymntAmtAt;
/**마일리지 유효기간*/
private String mlgValidPd;
/**마일리지 유효기간 사용여부*/
private String mlgValidPdAt;
/**여러곳배송여부*/
private String multiDlvyAt; private String multiDlvyAt;
/**정기배송여부*/ /** 정기배송여부 */
private String fdrmDlvyAt; private String fdrmDlvyAt;
/**선물하기여부*/
// 선물하기
/** 선물하기여부 */
private String giftDlvyAt; private String giftDlvyAt;
/**선물하기자동취소기간*/ /** 선물하기자동취소기간 */
private String giftDlvyAtmcCanclPd; private String giftDlvyAtmcCanclPd;
/*충전형마일리지 사용여부*/
// GC 머니
/** 충전형마일리지 사용여부 */
private String cashAt; private String cashAt;
// 마일리지 지급
/** 마일리지 지급 사용여부 */
private String mlgPymntAt;
/** 마일리지 지급 구분코드 */
private String mlgPymntDvCd;
/** 마일리지 지급 비율 */
private String mlgPymntRt;
/** 마일리지 최대 지급 금액 */
private String mlgMxmmPymntAmt;
/** 마일리지 최대 지급 금액 사용여부 */
private String mlgMxmmPymntAmtAt;
/** 마일리지 유효기간 */
private String mlgValidPd;
/** 마일리지 유효기간 사용여부 */
private String mlgValidPdAt;
// 마일리지 사용 조건
/** 마일리지 보유 사용 금액 */
private String mlgHoldUseAmt;
/** 마일리지 결제금액 사용 금액 */
private String mlgSetleAmtUseAmt;
/** 마일리지 최소 사용 금액 */
private String mlgMummUseAmt;
/** 마일리지 최대 사용 구분(MLG_MXMM_USE_DV) */
private String mlgMxmmUseDv;
/** 마일리지 최대 사용 금액 */
private String mlgMxmmUseAmt;
} }

View File

@@ -0,0 +1,54 @@
package com.wb.domainserver.domain.mngr.goods.badge.controller;
import com.wb.domainserver.domain.gcone.goods.badge.service.BOGoodsBadgeService;
import com.wb.domainserver.domain.gcone.goods.badge.vo.BOGoodsBadgeVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/mngr/goods/badge")
public class GoodsBadgeController {
@Autowired
private BOGoodsBadgeService service;
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectGoodsBadgeSetup")
public String selectGoodsBadgeSetup(BOGoodsBadgeVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
DataMap content = new DataMap();
content.put("badgeList", service.selectBOGoodsBadgeList(vo));
model.addAttribute("resultMap", content);
return "mngr/goods/badge/GoodsBadgeSetupU";
}
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value = "/updateGoodsBadgeSetup", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> updateGoodsBadgeSetup(BOGoodsBadgeVO vo,
@CookieValue(value = "authSopmalCd") String authSopmalCd) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setSopmalCd(authSopmalCd);
if ("01".equals(user.getSysDvCd())) {
vo.setSopmalCd(user.getSopmalCd());
}
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
DataMap message = service.updateBOGoodsBadgeSetup(vo);
return ResponseEntity.ok(WnbtResponse.builder().resBody(new WnbtResponseBody(message)).build());
}
}

View File

@@ -479,10 +479,8 @@ public class GoodsmngrController {
List<?> cgo134List = bOMaComncdService.selectBOCommcdDetailList(maComncdVO); List<?> cgo134List = bOMaComncdService.selectBOCommcdDetailList(maComncdVO);
content.put("goodsDftinfoInvntryPolicyList", cgo134List); content.put("goodsDftinfoInvntryPolicyList", cgo134List);
// 상품아이콘 // 상품 배지
maComncdVO = new BOMaComncdVO(); List<DataMap> iconList = service.selectBOGoodsBadgeList(vo);
maComncdVO.setGroupCd("GOODS_ICON");
List<?> iconList = bOMaComncdService.selectBOCommcdDetailList(maComncdVO);
content.put("iconList", iconList); content.put("iconList", iconList);
// 실시간수량배너구분코드 // 실시간수량배너구분코드
@@ -664,10 +662,7 @@ public class GoodsmngrController {
content.put("goodsDftinfoInvntryPolicyList", cgo134List); // 재고에 따른 판매 content.put("goodsDftinfoInvntryPolicyList", cgo134List); // 재고에 따른 판매
maComncdVO = new BOMaComncdVO(); List<DataMap> iconList = service.selectBOGoodsBadgeList(vo);
maComncdVO.setGroupCd("GOODS_ICON");
List<?> iconList = bOMaComncdService.selectBOCommcdDetailList(maComncdVO);
//브랜드 목록조회 //브랜드 목록조회
@@ -1466,10 +1461,7 @@ public class GoodsmngrController {
content.put("goodsDftinfoInvntryPolicyList", cgo134List); // 재고에 따른 판매 content.put("goodsDftinfoInvntryPolicyList", cgo134List); // 재고에 따른 판매
maComncdVO = new BOMaComncdVO(); List<DataMap> iconList = service.selectBOGoodsBadgeList(vo);
maComncdVO.setGroupCd("GOODS_ICON");
List<?> iconList = bOMaComncdService.selectBOCommcdDetailList(maComncdVO);
//브랜드 목록조회 //브랜드 목록조회

View File

@@ -197,11 +197,12 @@ public class MngrLoginController {
log.debug("리프레쉬 토큰이 없는 경우 realm :: {}", realm); log.debug("리프레쉬 토큰이 없는 경우 realm :: {}", realm);
//엑세스토큰 삭제 //엑세스토큰 삭제
CookieUtils.deleteCookie("ACT","/"+realm, request, response); CookieUtils.deleteCookie("ACT","/", request, response);
CookieUtils.deleteCookie("token_expire","/"+realm, request, response); CookieUtils.deleteCookie("RFT","/" + realm + "/tokens/refresh", request, response);
CookieUtils.deleteCookie("token_expire","/", request, response);
response.sendRedirect("/"+realm); response.sendRedirect("/"+realm);
return;
} }
//리프레쉬 토큰 있을 경우(존재한다는 자체가 refresh토큰이 만료된 상태가 아님) //리프레쉬 토큰 있을 경우(존재한다는 자체가 refresh토큰이 만료된 상태가 아님)

View File

@@ -76,16 +76,26 @@ public class MngrMainController {
// public String selectMngrMainInqire(@CookieValue(value = "authSopmalCd") String authSopmalCd, ModelMap model, HttpServletRequest request) { // public String selectMngrMainInqire(@CookieValue(value = "authSopmalCd") String authSopmalCd, ModelMap model, HttpServletRequest request) {
public String selectMngrMainInqire(String authSopmalCd, ModelMap model, HttpServletRequest request, HttpServletResponse response ) { public String selectMngrMainInqire(String authSopmalCd, ModelMap model, HttpServletRequest request, HttpServletResponse response ) {
BOBbsVO vo = new BOBbsVO(); BOBbsVO vo = new BOBbsVO();
vo.setSopmalCd(authSopmalCd);
// 작성자 정보 할당 // 작성자 정보 할당
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){ if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd()); vo.setSopmalCd(user.getSopmalCd());
} }
// 쇼핑몰코드
vo.setRegusr(user.getUserInnb()); // 등록자 vo.setRegusr(user.getUserInnb()); // 등록자
vo.setUpdusr(user.getUserInnb()); // 수정자 vo.setUpdusr(user.getUserInnb()); // 수정자
// 쇼핑몰코드
if(StringUtil.isEmpty(authSopmalCd)) {
if(request.getCookies()!=null) {
for(Cookie cookie : request.getCookies()){
if("authSopmalCd".equals(cookie.getName())){
authSopmalCd = cookie.getValue();
break;
}
}
}
}
vo.setSopmalCd(authSopmalCd);
DataMap resultMap = new DataMap(); DataMap resultMap = new DataMap();
resultMap = bbsService.selectBOBbscttDshboardInqireForm(vo); resultMap = bbsService.selectBOBbscttDshboardInqireForm(vo);

View File

@@ -677,6 +677,8 @@ public class MngrMbrController {
content.put("sex", sex); content.put("sex", sex);
content.put("grad", grad); content.put("grad", grad);
log.debug("BOMbrSrchVO : {}", vo);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse( // responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mbr/selectBOMarketingTrgetSrchPopupForm", vo), // sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mbr/selectBOMarketingTrgetSrchPopupForm", vo),

View File

@@ -116,8 +116,8 @@ public class EmailController {
*/ */
@Policy(AuthPolicy.RESTRICTED) @Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectEmailPassivSndngManage") @RequestMapping(value="/selectEmailPassivSndngManage")
public String selectEmailPassivSndngManage(){ public String selectEmailPassivSndngManage(ModelMap model, BOMaEmailSrchVO bOMaEmailSrchVO){
model.addAttribute("emailSrchVO", bOMaEmailSrchVO);
return "mngr/ntcn/email/EmailPassivSndngManage"; return "mngr/ntcn/email/EmailPassivSndngManage";
} }

View File

@@ -122,10 +122,11 @@ public class MssageController {
*/ */
@Policy(AuthPolicy.RESTRICTED) @Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMssagePassivSndngManage") @RequestMapping(value="/selectMssagePassivSndngManage")
public String selectMessagePassivSndngManage(MssageVO vo, ModelMap model, public String selectMessagePassivSndngManage(BOMssageVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){ @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd); vo.setSopmalCd(authSopmalCd);
model.addAttribute("mssageVO", vo);
return "mngr/ntcn/mssage/MssagePassivSndngManage"; return "mngr/ntcn/mssage/MssagePassivSndngManage";
} }
@@ -149,6 +150,7 @@ public class MssageController {
} }
DataMap content = new DataMap(); DataMap content = new DataMap();
content.put("mssageVO", vo);
content.put("shopInfoMap", service.selectBOShopInfoInqire(vo)); content.put("shopInfoMap", service.selectBOShopInfoInqire(vo));
content.put("sopmalCd", user.getSopmalCd()); content.put("sopmalCd", user.getSopmalCd());
@@ -178,6 +180,7 @@ public class MssageController {
vo.setSopmalCd(user.getSopmalCd()); vo.setSopmalCd(user.getSopmalCd());
} }
DataMap content = new DataMap(); DataMap content = new DataMap();
content.put("mssageVO", vo);
content.put("shopInfoMap", service.selectBOShopInfoInqire(vo)); content.put("shopInfoMap", service.selectBOShopInfoInqire(vo));
content.put("sopmalCd", user.getSopmalCd()); content.put("sopmalCd", user.getSopmalCd());
@@ -188,7 +191,7 @@ public class MssageController {
// "resultMap" // "resultMap"
// ); // );
return "mngr/ntcn/mssage/MssageSndngPopupC"; return "mngr/ntcn/mssage/MssageSndngPopupC";
} }

View File

@@ -38,6 +38,7 @@ import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
@@ -607,6 +608,24 @@ public class DlivyController {
// ); // );
} }
/**
* 배치 > 출고 상태 변경 ( 배송중, 배송완료 )
* @param boDlivyVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateDlivySttusGetbackBatchUpdt", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> updateDlivySttusGetbackBatchUpdt(@RequestBody BODlivyVO boDlivyVO) {
Map<String, Object> message = new HashMap<>();
message = service.updateBODlivySttusGetbackUpdt(boDlivyVO);
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(message))
.build()
);
}
/** /**
* 다운로드 항목 조회 * 다운로드 항목 조회

View File

@@ -45,9 +45,12 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.io.IOException; import java.io.IOException;
import java.math.BigInteger; import java.math.BigInteger;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
/** /**
@@ -622,6 +625,8 @@ public class OrdrmngrController {
} }
} }
/** /**
* 주문내역서 팝업 화면 이동 * 주문내역서 팝업 화면 이동
* @param model * @param model
@@ -1056,6 +1061,14 @@ public class OrdrmngrController {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource)); throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
} }
String cstmclerCd = ordrShippingVO.getCstmclerCd();
String cstmclerCdReg = "^P\\d{12}$";
if (cstmclerCd == null || cstmclerCd.trim().isEmpty()) {
throw new WnbtRestException("개인통관번호은(는) 필수 입력값입니다.");
}else if (!cstmclerCd.matches(cstmclerCdReg)) {
throw new WnbtRestException("개인통관번호는 P로 시작하는 13자리 부호만 입력할 수 있습니다.");
}
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
ordrShippingVO.setUpdusr(user.getUserInnb()); ordrShippingVO.setUpdusr(user.getUserInnb());
@@ -1682,6 +1695,239 @@ public class OrdrmngrController {
다운로드항목설정 종료 다운로드항목설정 종료
#################################### */ #################################### */
/* ####################################
발주서 관리 시작
#################################### */
/**
* 발주서 관리 화면 이동
* @param ordrSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectExcelPoListInqireRForm")
public String selectExcelPoListInqireForm(ModelMap model, BOOrdrSrchVO ordrSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
ordrSrchVO.setSopmalCd(authSopmalCd);
model.addAttribute("sopmalCd", ordrSrchVO.getSopmalCd());
model.addAttribute("ordrSrchVO", ordrSrchVO);
// 공통코드 호출
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
bOMaComncdVO.setGroupCd("NATION_CD"); // 국가코드(NATION_CD)
model.addAttribute("nationCdList", bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO));
return "mngr/ordr/ordrmngr/PurchOrdrListInqireRForm";
}
/**
* 발주서 목록 조회
* @param ordrSrchVO
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value= "/selectExcelPoListInqire" , method = RequestMethod.POST)
public String selectExcelPoListInqire(ModelMap model, BOOrdrSrchVO ordrSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd){
Map<String, Object> content = new HashMap<>();
String secretKey = commonService.selectSecretkey();
ordrSrchVO.setSecretKey(secretKey);
ordrSrchVO.setSopmalCd(authSopmalCd);
ordrSrchVO.setSrchOrdrSttusCd("35");
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(ordrSrchVO.getPageIndex());
paginationInfo.setRecordCountPerPage(ordrSrchVO.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
ordrSrchVO.setPaginationInfo(paginationInfo);
//페이징 처리를 위한 값 설정
ordrSrchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
ordrSrchVO.setLastIndex(paginationInfo.getLastRecordIndex());
ordrSrchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
//회원 목록 조회 결과 및 페이징정보 넣기
content.put("paginationInfo", ordrSrchVO.getPaginationInfo());
content.put("resultList", service.selectExcelPoList(ordrSrchVO));
model.addAttribute("resultMap", content);
model.addAttribute("ordrSrchVO", ordrSrchVO);
return "mngr/ordr/ordrmngr/PurchOrdrListInqireR";
}
/**
* 주문내역서 팝업 화면 이동
* @param model
* @param ordrSrchVO
* @return OrdrDtstmnDwldPopupR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectPurchOrdrDtstmnDwldPopupForm")
public String selectPurchOrdrDtstmnDwldPopupForm(ModelMap model, BOOrdrSrchVO ordrSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) throws Exception {
Map<String, Object> content = new HashMap<>();
BOOrdrVO ordrVO = new BOOrdrVO();
ordrVO.setOrdrInnbs(ordrSrchVO.getSrchOrdrInnbs());
ordrVO.setSopmalCd(authSopmalCd);
content.put("ordrDtstmnDwldList", service.selectOrdrDtstmnDwld(ordrVO));
model.addAttribute("data", content);
model.addAttribute("ordrSrchVO", ordrSrchVO);
return "mngr/ordr/ordrmngr/PurchOrdrDtstmnDwldPopupR";
}
/**
* 발주서 엑셀다운로드
* @param response
* @param ordrSrchVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectExcelPoDwldListInqire")
public void selectPurchOrderExcelList(HttpServletResponse response, BOOrdrSrchVO ordrSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
String secretKey = commonService.selectSecretkey();
ordrSrchVO.setSecretKey(secretKey);
ordrSrchVO.setSopmalCd(authSopmalCd);
ordrSrchVO.setSrchOrdrSttusCd("35");
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
List<String> headerValues = List.of(
"날짜",
"업체코드",
"업체명",
"업체TEL",
"업체주소",
"특별통관업체명",
"특별통관번호",
"주문번호",
"용도구분",
"수취인",
"수취인TEL",
"수취인HP",
"개인통관고유부호",
"우편번호",
"주소",
"나머지주소",
"메모",
"고객 구입사이트",
"무게",
"포장개수",
"HS CODE",
"상거래유형",
"내용물",
"Unit Value",
"상품개수",
"Value",
"Brand",
"사전식품신고 종류",
"제조국",
"제조회사명",
"중문상품명",
"Shipper 구입사이트",
"판매중개업체명",
"판매중개업체 등록부호",
"구매(배송)대행업체명",
"구매(배송)대행업체 등록부호",
"해외판매자명",
"해외판매자 등록부호",
"사이트 주문번호"
);
for (int i = 0; i < headerValues.size(); i++) {
headerMap.put(String.format("item%02d", i + 1), headerValues.get(i));
}
String[] ordrInnbs = ordrSrchVO.getSrchOrdrInnbs();
String[] ordrDlvyInnbs = ordrSrchVO.getSrchOrdrDlvyInnbs();
List<Map<String, String>> srchInnbPairs = new ArrayList<>();
if (ordrInnbs != null && ordrDlvyInnbs != null) {
for (int i = 0; i < ordrInnbs.length; i++) {
Map<String, String> pair = new HashMap<>();
pair.put("srchOrdrInnb", ordrInnbs[i]);
pair.put("srchOrdrDlvyInnb", ordrDlvyInnbs[i]);
srchInnbPairs.add(pair);
}
}
ordrSrchVO.setSrchInnbPairs(srchInnbPairs);
//엑셀 항목에 출력될 내용 설정
List<DataMap> resultList = service.selectExcelPoListDwld(ordrSrchVO);
List<Map<String, Object>> excelList = new ArrayList<>();
if (resultList != null) {
for (int i = 0; i < resultList.size(); i++) {
HashMap<String, Object> dataMap = new HashMap<>();
// int cellInt = 1; // 셀 타입 = 숫자
List<Object> dataValues = Arrays.asList(
resultList.get(i).get("ordrRceptDt"),
resultList.get(i).get("entrpsCd"),
resultList.get(i).get("entrpsNm"),
resultList.get(i).get("entrpsTel"),
resultList.get(i).get("entrpsAdres"),
resultList.get(i).get("spclCstmclerEntrps"),
resultList.get(i).get("spclCstmclerCd"),
resultList.get(i).get("ordrInnb"),
resultList.get(i).get("purpsDv"),
resultList.get(i).get("recpntNm"),
resultList.get(i).get("recpntMbtlnb"),
resultList.get(i).get("recpntHp"),
resultList.get(i).get("cstmclerCd"),
resultList.get(i).get("dlvylcZip"),
resultList.get(i).get("dlvylcRnmLnbAdres"),
resultList.get(i).get("dlvylcAdresDtl"),
resultList.get(i).get("dlvyMssageCn"),
resultList.get(i).get("cstmrPurchsSite"),
resultList.get(i).get("realWt"),
resultList.get(i).get("packageCnt"),
resultList.get(i).get("hscode"),
resultList.get(i).get("cmmrcTy"),
resultList.get(i).get("cn"),
resultList.get(i).get("unitValue"),
resultList.get(i).get("ordrQy"),
resultList.get(i).get("value"),
resultList.get(i).get("brand"),
resultList.get(i).get("preFoodDcl"),
resultList.get(i).get("provdNation"),
resultList.get(i).get("provdCmpnyNm"),
resultList.get(i).get("chnlngGoodsNm"),
resultList.get(i).get("shipperPurchsSite"),
resultList.get(i).get("sleAgntEntrpsNm"),
resultList.get(i).get("sleAgntEntrpsRegistCd"),
resultList.get(i).get("purchsDlvyAgencyNm"),
resultList.get(i).get("purchsDlvyAgencyRegistCd"),
resultList.get(i).get("ovseaSelerNm"),
resultList.get(i).get("ovseaSelerRegistCd"),
resultList.get(i).get("siteOrdrInnb")
);
for (int j = 0; j < dataValues.size(); j++) {
dataMap.put(String.format("item%02d", j + 1), dataValues.get(j));
}
excelList.add(dataMap);
}
}
/******************************************************************/
try {
//엑셀생성 및 다운로드
/*LocalDateTime now = LocalDateTime.now();
String excelFileName = "발주서_";
excelFileName += String.format("%s~%s", ordrSrchVO.getSrchStartDate(), ordrSrchVO.getSrchEndDate()); // 엑셀 다운로드 파일명*/
String excelFileName = "발주서";
String encodedFileName = URLEncoder.encode(excelFileName, StandardCharsets.UTF_8.toString()).replaceAll("\\+", "%20");
ExcelDownloadUtil.createExcel(encodedFileName, headerMap, excelList, response);
service.updateExcelDownDt(ordrSrchVO);
} catch (IOException ioe) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", ioe);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
/* ####################################
발주서 관리 종료
#################################### */
/* #################################### /* ####################################
주문조회 팝업 시작 주문조회 팝업 시작
#################################### */ #################################### */

View File

@@ -393,14 +393,6 @@ public class PurchsEvtController {
tempVO.setEndAmt(null); tempVO.setEndAmt(null);
} }
if ("01".equals(purchsEvtVO.getDscntBnefDvCd())) {
tempVO.setBgnAmt("0");
tempVO.setEndAmt("0");
} else if ("02".equals(purchsEvtVO.getDscntBnefDvCd())) {
tempVO.setBgnCnt("0");
tempVO.setEndCnt("0");
}
} }
for (BOPurchsEvtDiscountBnefVO tempVO : purchsEvtVO.getDiscountBnefVOList()) { for (BOPurchsEvtDiscountBnefVO tempVO : purchsEvtVO.getDiscountBnefVOList()) {

View File

@@ -0,0 +1,103 @@
package com.wb.domainserver.domain.mngr.setup.cost;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.gcone.setup.cost.service.BOCostService;
import com.wb.domainserver.domain.gcone.setup.cost.vo.BOCostVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 원가 설정 Controller
*
* @author 이대환
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2026-05-29 이대환 최초 생성
*
* </pre>
* @since 2026-05-29
*/
@Controller
@RequestMapping("/mngr/setup/cost")
@Slf4j
public class CostController {
/** WebClient 호출을 위한 wrapper */
@Autowired
WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private BOCostService service;
/**
* 원가 설정 페이지 이동
*
* @param vo
* @return CostPriceUpdtU.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCostPriceSetup")
public String selectCostPriceSetup(BOCostVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
DataMap content = new DataMap();
content.put("costList", service.selectBOCostPriceList(vo));
model.addAttribute("resultMap", content);
return "mngr/setup/cost/CostPriceUpdtU";
}
/**
* 원가 설정 수정
*
* @param vo
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value = "/updateCostPriceSetup", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> updateCostPriceSetup(@Validated BOCostVO vo, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
DataMap message = service.updateBOCostPriceSetup(vo);
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(message))
.build()
);
}
}

View File

@@ -0,0 +1,116 @@
package com.wb.domainserver.domain.mngr.setup.exchngrt;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.gcone.setup.exchngrt.service.BOExchngrtService;
import com.wb.domainserver.domain.gcone.setup.exchngrt.vo.BOExchngrtVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 환율 설정 Controller
*
* @author 이대환
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2026-04-27 이대환 최초 생성
*
* </pre>
* @since 2026-04-27
*/
@Controller
@RequestMapping("/mngr/setup/exchngrt")
@Slf4j
public class ExchngrtController {
/** WebClient 호출을 위한 wrapper */
@Autowired
WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private BOExchngrtService service;
@Autowired
private BOMaSopmalService bOMaSopmalService;
/**
* 환율 설정 페이지 이동
*
* @param boMaSopmalVO
* @return NbkkSetupListR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectExchngrtSetup")
public String selectExchngrtSetup(BOMaSopmalVO boMaSopmalVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
DataMap content = new DataMap();
boMaSopmalVO.setSopmalCd(authSopmalCd);
content.put("sopmalDetailList", bOMaSopmalService.selectBOSopmalUpdtForm(boMaSopmalVO));
model.addAttribute("resultMap", content);
return "mngr/setup/exchngrt/ExchngrtUpdtU";
}
/**
* 환율 설정 수정
*
* @param boExchngrtVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value = "/updateExchngrtSetup", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> updateExchngrtSetup(@Validated BOExchngrtVO boExchngrtVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
//등록자 수정자 set
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boExchngrtVO.setRegusr(user.getUserInnb());
boExchngrtVO.setUpdusr(user.getUserInnb());
boExchngrtVO.setSopmalCd(authSopmalCd);
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
DataMap message = service.updateBOExchngrtSetup(boExchngrtVO.setBOMaSopmalVO());
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(message))
.build()
);
}
}

View File

@@ -0,0 +1,115 @@
package com.wb.domainserver.domain.mngr.setup.family;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.gcone.setup.family.service.BOFamilyService;
import com.wb.domainserver.domain.gcone.setup.family.vo.BOFamilyVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 패밀리사이트 설정 Controller
*
* @author 이대환
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2026-04-27 이대환 최초 생성
*
* </pre>
* @since 2026-04-27
*/
@Controller
@RequestMapping("/mngr/setup/family")
@Slf4j
public class FamilyController {
/** WebClient 호출을 위한 wrapper */
@Autowired
WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private BOFamilyService service;
@Autowired
private BOMaSopmalService bOMaSopmalService;
/**
* 패밀리사이트 설정 페이지 이동
*
* @param boMaSopmalVO
* @return NbkkSetupListR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectFamilySiteSetup")
public String selectFamilySiteSetup(BOMaSopmalVO boMaSopmalVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
DataMap content = new DataMap();
boMaSopmalVO.setSopmalCd(authSopmalCd);
content.put("siteList", bOMaSopmalService.selectBOSopmalUpdtFormSitelList(boMaSopmalVO));
model.addAttribute("resultMap", content);
return "mngr/setup/family/FamilySiteUpdtU";
}
/**
* 패밀리사이트 설정 수정
*
* @param boFamilyVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value = "/updateFamilySiteSetup", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> updateNbkkSetup(@Validated BOFamilyVO boFamilyVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
//등록자 수정자 set
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boFamilyVO.setRegusr(user.getUserInnb());
boFamilyVO.setUpdusr(user.getUserInnb());
boFamilyVO.setSopmalCd(authSopmalCd);
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
DataMap message = service.updateBOFamilySetup(boFamilyVO.setBOMaSopmalVO());
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(message))
.build()
);
}
}

View File

@@ -0,0 +1,117 @@
package com.wb.domainserver.domain.mngr.setup.guidance;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.gcone.setup.guidance.service.BOGuidanceService;
import com.wb.domainserver.domain.gcone.setup.guidance.vo.BOGuidanceVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 안내문구 설정 Controller
*
* @author 이대환
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2026-04-27 이대환 최초 생성
*
* </pre>
* @since 2026-04-27
*/
@Controller
@RequestMapping("/mngr/setup/guidance")
@Slf4j
public class GuidanceController {
/** WebClient 호출을 위한 wrapper */
@Autowired
WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private BOGuidanceService service;
@Autowired
private BOMaSopmalService bOMaSopmalService;
/**
* 안내문구 설정 페이지 이동
*
* @param boMaSopmalVO
* @return NbkkSetupListR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGuidanceSetup")
public String selectNbkkSetupList(BOMaSopmalVO boMaSopmalVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
DataMap content = new DataMap();
boMaSopmalVO.setSopmalCd(authSopmalCd);
content.put("sopmalDetailList", bOMaSopmalService.selectBOSopmalUpdtForm(boMaSopmalVO));
model.addAttribute("resultMap", content);
model.addAttribute("sopmalCd", authSopmalCd);
return "mngr/setup/guidance/GuidanceUpdtU";
}
/**
* 안내문구 설정 수정
*
* @param boGuidanceVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value = "/updateGuidanceSetup", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> updateGuidanceSetup(@Validated BOGuidanceVO boGuidanceVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
//등록자 수정자 set
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boGuidanceVO.setRegusr(user.getUserInnb());
boGuidanceVO.setUpdusr(user.getUserInnb());
boGuidanceVO.setSopmalCd(authSopmalCd);
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
DataMap message = service.updateBOGuidanceSetup(boGuidanceVO.setBOMaSopmalVO());
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(message))
.build()
);
}
}

View File

@@ -1,6 +1,8 @@
package com.wb.domainserver.domain.mngr.setup.ordr.controller; package com.wb.domainserver.domain.mngr.setup.ordr.controller;
import com.wb.domainserver.common.msg.GconeMessageSource; import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.gcone.setup.ordrmngr.service.BOOrdrMngrService; import com.wb.domainserver.domain.gcone.setup.ordrmngr.service.BOOrdrMngrService;
import com.wb.domainserver.domain.gcone.setup.ordrmngr.vo.BOSetupOrdrVO; import com.wb.domainserver.domain.gcone.setup.ordrmngr.vo.BOSetupOrdrVO;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
@@ -13,6 +15,7 @@ import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy; import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc; import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter; import com.wb.domainserver.util.communicate.ValidateResultConverter;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil; import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -63,6 +66,8 @@ public class SetupOrdrController {
@Autowired @Autowired
private BOOrdrMngrService service; private BOOrdrMngrService service;
@Autowired
private BOMaSopmalService bOMaSopmalService;
/** /**
@@ -73,15 +78,14 @@ public class SetupOrdrController {
@Policy(AuthPolicy.RESTRICTED) @Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectOrdrSetupList") @RequestMapping(value="/selectOrdrSetupList")
public String selectOrdrSetupList(ModelMap model, BOSetupOrdrVO boOrdrVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) { public String selectOrdrSetupList(ModelMap model, BOSetupOrdrVO boOrdrVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
DataMap content = new DataMap();
boOrdrVO.setSopmalCd(authSopmalCd); boOrdrVO.setSopmalCd(authSopmalCd);
content.put("ordrSetupList", service.selectBOOrdrSetupList(boOrdrVO));
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); BOMaSopmalVO boMaSopmalVO = new BOMaSopmalVO();
if("01".equals(user.getSysDvCd())){ boMaSopmalVO.setSopmalCd(authSopmalCd);
boOrdrVO.setSopmalCd(user.getSopmalCd()); content.put("sopmalDetailList", bOMaSopmalService.selectBOSopmalUpdtForm(boMaSopmalVO));
}
Map<String, Object> content = service.selectBOOrdrSetupList(boOrdrVO);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse( // responseHandler.handleResponse(
@@ -154,6 +158,19 @@ public class SetupOrdrController {
vo.setMlgMxmmPymntAmt(null); vo.setMlgMxmmPymntAmt(null);
} }
//마일리지 사용 조건 파라미터 정제
if(!StringUtil.isEmpty(vo.getMlgHoldUseAmt()))
vo.setMlgHoldUseAmt(StringUtil.removeCommaChar(vo.getMlgHoldUseAmt()));
if(!StringUtil.isEmpty(vo.getMlgSetleAmtUseAmt()))
vo.setMlgSetleAmtUseAmt(StringUtil.removeCommaChar(vo.getMlgSetleAmtUseAmt()));
if(!StringUtil.isEmpty(vo.getMlgMummUseAmt()))
vo.setMlgMummUseAmt(StringUtil.removeCommaChar(vo.getMlgMummUseAmt()));
if(!StringUtil.isEmpty(vo.getMlgMxmmUseAmt()))
vo.setMlgMxmmUseAmt(StringUtil.removeCommaChar(vo.getMlgMxmmUseAmt()));
//등록자 수정자 set //등록자 수정자 set
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){ if("01".equals(user.getSysDvCd())){

View File

@@ -1385,6 +1385,8 @@ public class CscController {
url = this.selectSubPageListForm(request, model, bbsctt); //서브페이지 url = this.selectSubPageListForm(request, model, bbsctt); //서브페이지
} else if ("useGuidance".equals(bbsctt.getReqUrl())) { } else if ("useGuidance".equals(bbsctt.getReqUrl())) {
url = this.selectUseGuidanceForm(request, model, bbsctt); //이용안내 url = this.selectUseGuidanceForm(request, model, bbsctt); //이용안내
} else if ("detail".equals(bbsctt.getReqUrl())) {
url = this.selectBbscttDtlInqire(request, model, bbsctt); //기타(상세보기)
} }
} else if ("REGIST".equals(bbsctt.getAuthDv())) { //등록 이동 } else if ("REGIST".equals(bbsctt.getAuthDv())) { //등록 이동
if ("modal".equals(bbsctt.getReqUrl())) { if ("modal".equals(bbsctt.getReqUrl())) {
@@ -1571,9 +1573,24 @@ public class CscController {
bbsVO.setBbsTyCd(bbsctt.getBbsTyCd()); bbsVO.setBbsTyCd(bbsctt.getBbsTyCd());
DataMap bbsInfo = new DataMap(); DataMap bbsInfo = new DataMap();
bbsInfo = bbsService.selectBOBbsSetupInfo(bbsVO); bbsInfo = bbsService.selectBOBbsSetupInfo(bbsVO);
// 등록 기능 사용 여부와 별개로 현재 사용자의 등록 권한을 확인한다.
BOGnrlbbscttVO registAuthBbsctt = new BOGnrlbbscttVO();
registAuthBbsctt.setSopmalCd(user.getSopmalCd());
registAuthBbsctt.setBbsId(bbsctt.getBbsId());
registAuthBbsctt.setServerDv("sopmal");
registAuthBbsctt.setAuthDv("REGIST");
if (user.getUserInnb() > 0) {
registAuthBbsctt.setRegusr(user.getUserInnb());
registAuthBbsctt.setMbrDvCd(user.getMbrDvCd());
} else {
registAuthBbsctt.setRegusr(0);
}
DataMap registAuth = service.selectBOBbscttAuth(registAuthBbsctt);
DataMap content = new DataMap(); DataMap content = new DataMap();
content.put("bbsInfo", bbsInfo); content.put("bbsInfo", bbsInfo);
content.put("registAuthResult", registAuth.get("resultAuth"));
content.put("bbsctt", bbsctt); content.put("bbsctt", bbsctt);
content.put("resultList", resultList); content.put("resultList", resultList);
content.put("paginationInfo", bbsctt.getPaginationInfo()); content.put("paginationInfo", bbsctt.getPaginationInfo());

View File

@@ -21,6 +21,7 @@ import com.wb.domainserver.domain.gcone.setup.dlvygrp.service.BODlvygrpService;
import com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO; import com.wb.domainserver.domain.gcone.setup.dlvygrp.vo.BODlvygrpVO;
import com.wb.domainserver.domain.gcone.setup.ordrmngr.service.BOOrdrMngrService; import com.wb.domainserver.domain.gcone.setup.ordrmngr.service.BOOrdrMngrService;
import com.wb.domainserver.domain.gcone.setup.ordrmngr.vo.BOSetupOrdrVO; import com.wb.domainserver.domain.gcone.setup.ordrmngr.vo.BOSetupOrdrVO;
import com.wb.domainserver.realm.util.UrlExtractor;
import com.wb.domainserver.response.ApiResponse; import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.response.WnbtResponse; import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody; import com.wb.domainserver.response.WnbtResponseBody;
@@ -189,6 +190,23 @@ public class GoodsController {
return Util.getDeviceType(request)+"/goods/GoodsSrchRForm"; return Util.getDeviceType(request)+"/goods/GoodsSrchRForm";
} }
/**
* 사용자 화면 상품 배지 목록 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsBadgeList", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<DataMap>> selectGoodsBadgeList() {
BOGoodsVO vo = new BOGoodsVO();
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if ("01".equals(user.getSysDvCd())) {
vo.setSopmalCd(user.getSopmalCd());
}
return ResponseEntity.ok(service.selectBOGoodsBadgeList(vo));
}
/** /**
* 상품 검색 리스트 * 상품 검색 리스트
* @param vo * @param vo
@@ -210,6 +228,42 @@ public class GoodsController {
return Util.getDeviceType(request)+"/goods/GoodsSrchR"; return Util.getDeviceType(request)+"/goods/GoodsSrchR";
} }
/**
* 검색어 로그 저장
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertSrchwrdLog", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> insertSrchwrdLog(HttpServletRequest request, BOGoodsVO vo) {
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
vo.setMbrInnb(String.valueOf(user.getUserInnb()));
}
//요청 URL
String url = request.getRequestURI();
vo.setConectUrl(url);
//host 정보
String host = request.getHeader("X-Original-Host") != null ? request.getHeader("X-Original-Host") : UrlExtractor.getOriginalHost(request);
vo.setConectDomn(host);
DataMap message = service.insertBOSrchwrdLog(vo);
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(message))
.build()
);
// return responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOSrchGoodsNm", vo),
// ReplyFromResrc::getReply
// );
}
/** /**
* 상품명 검색어 조회 * 상품명 검색어 조회
* @param vo * @param vo
@@ -251,6 +305,14 @@ public class GoodsController {
public String selectGoodsListForm(HttpServletRequest request, public String selectGoodsListForm(HttpServletRequest request,
BOGoodsVO vo, BOGoodsVO vo,
ModelMap model) { ModelMap model) {
String mobileParentCtgryId = request.getParameter("mobileParentCtgryId");
String mobileCurrentCtgryId = request.getParameter("mobileCurrentCtgryId");
boolean mobileSubCategorySelected = mobileParentCtgryId != null && !mobileParentCtgryId.isBlank()
&& mobileCurrentCtgryId != null && !mobileCurrentCtgryId.isBlank();
if (mobileSubCategorySelected) {
vo.setCtgryId(mobileParentCtgryId);
}
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){ if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd()); vo.setSopmalCd(user.getSopmalCd());
@@ -268,7 +330,7 @@ public class GoodsController {
//검색한 카테고리 정보로 vo 세팅 //검색한 카테고리 정보로 vo 세팅
if(!CollectionUtils.isEmpty(goodsCategoryList)){ if(!CollectionUtils.isEmpty(goodsCategoryList)){
vo.setUpperCtgryId(goodsCategoryList.get(0).get("baseCtgryId").toString()); vo.setUpperCtgryId(goodsCategoryList.get(0).get("baseCtgryId").toString());
vo.setCtgryId(goodsCategoryList.get(0).get("baseCtgryId").toString()); vo.setCtgryId(mobileSubCategorySelected ? mobileCurrentCtgryId : goodsCategoryList.get(0).get("baseCtgryId").toString());
}else{ }else{
vo.setUpperCtgryId("0"); vo.setUpperCtgryId("0");
vo.setCtgryId("0"); vo.setCtgryId("0");
@@ -425,6 +487,7 @@ public class GoodsController {
// 상세 조회 // 상세 조회
DataMap goodsDtl = service.selectBOGoodsDtlInfo(vo); DataMap goodsDtl = service.selectBOGoodsDtlInfo(vo);
List<DataMap> goodsBadgeList = service.selectBOGoodsBadgeList(vo);
//상품 옵션 조회 //상품 옵션 조회
DataMap goodsOptList = service.selectBOGoodsOptionList(vo); DataMap goodsOptList = service.selectBOGoodsOptionList(vo);
@@ -476,6 +539,7 @@ public class GoodsController {
//담기 //담기
Map<String, Object> content = new HashMap<>(); Map<String, Object> content = new HashMap<>();
content.put("goodsDtl", goodsDtl); content.put("goodsDtl", goodsDtl);
content.put("goodsBadgeList", goodsBadgeList);
content.put("evtBannerList", evtBannerList); content.put("evtBannerList", evtBannerList);
content.put("goodsOptList", goodsOptList); content.put("goodsOptList", goodsOptList);
content.put("GoodsRelateInfo", goodsReleateInfo); content.put("GoodsRelateInfo", goodsReleateInfo);

View File

@@ -198,6 +198,20 @@ public class MainController {
} }
/**
* 사이트맵 XML
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sitemap", produces = MediaType.APPLICATION_XML_VALUE)
public ResponseEntity<String> selectSitemapXml() {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
String xml = boMaSopmalService.selectSitemapXml(user.getSopmalCd());
return ResponseEntity.ok().contentType(MediaType.APPLICATION_XML).body(xml);
}
/** /**
* 비회원 휴대폰번호 확인 * 비회원 휴대폰번호 확인
* @return OrdrDtlR.jsp * @return OrdrDtlR.jsp
@@ -1015,4 +1029,14 @@ public class MainController {
); );
} }
/**
* 연령확인 팝업
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sopmal/main/selectAgeChkPopup", produces = MediaType.APPLICATION_JSON_VALUE)
public String selectAgeChkPopup(HttpServletRequest request) {
return Util.getDeviceType(request)+"/main/AgeChkPopupR";
}
} }

View File

@@ -48,22 +48,22 @@ import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* MyActController Class (back) * MyActController Class (back)
* *
* @author 홍길동 * @author 홍길동
* @since 2024-02-05 * @since 2024-02-05
* @version 1.0 * @version 1.0
* @see * @see
* *
* <pre> * <pre>
* == (Modification Information) == 개정이력 * == (Modification Information) == 개정이력
* *
* 수정일 수정자 수정내용 * 수정일 수정자 수정내용
* ------- -------- --------------------------- * ------- -------- ---------------------------
* 2024-03-05 김혜인 최초 생성 * 2024-03-05 김혜인 최초 생성
* *
* </pre> * </pre>
*/ */
@Controller @Controller
@RequestMapping("/sopmal/mpage/act") @RequestMapping("/sopmal/mpage/act")
@@ -72,7 +72,7 @@ public class MyActController {
/** WebClient 호출을 위한 wrapper */ /** WebClient 호출을 위한 wrapper */
@Autowired @Autowired
private WnbtWebClientResponseHandler responseHandler; private WnbtWebClientResponseHandler responseHandler;
@Autowired @Autowired
private SendToResrc sendToResrc; private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */ /** 공통 메시지 처리를 위한 메시지 객체 */
@@ -102,10 +102,10 @@ public class MyActController {
/** /**
* 상품 Q&A 조회 * 상품 Q&A 조회
* @param bbsctt * @param bbsctt
* @return String * @return String
*/ */
@Policy(AuthPolicy.PUBLIC) @Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectGoodsQnaInqire") @RequestMapping(value="/selectGoodsQnaInqire")
public String selectGoodsQnaInqire(HttpServletRequest request, ModelMap model, BOGnrlbbscttVO bbsctt, BOMbrVO vo){ public String selectGoodsQnaInqire(HttpServletRequest request, ModelMap model, BOGnrlbbscttVO bbsctt, BOMbrVO vo){
@@ -115,35 +115,127 @@ public class MyActController {
DataMap content = selectBOBbscttListInqire(bbsctt); DataMap content = selectBOBbscttListInqire(bbsctt);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire",bbsctt),
// model,
// "resultMap"
// );
Map<String, Object> content2 = selectBOMpageInfoInqire(vo); Map<String, Object> content2 = selectBOMpageInfoInqire(vo);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
model.addAttribute("mpageResultMap", content2); model.addAttribute("mpageResultMap", content2);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire",bbsctt), return Util.getDeviceType(request)+"/mpage/act/MyGoodsQaR";
// model,
// "mpageResultMap"
// );
return Util.getDeviceType(request)+"/mpage/act/MyGoodsQaR";
} }
/**
* 상품 Q&A ajax 조회 /**
* @param bbsctt * 일반문의 조회
* @return String * @param bbsctt
*/ * @return String
*/
@Policy(AuthPolicy.PUBLIC) @Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectGoodsQnaInqireAjax", produces = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value="/selectNormalQnaInqire")
public ResponseEntity<?> selectGoodsQnaInqireAjax(BOGnrlbbscttVO bbsctt){ public String selectNormalQnaInqire(HttpServletRequest request, ModelMap model, BOGnrlbbscttVO bbsctt, BOMbrVO vo){
bbsctt.setBbsTyCd("05"); bbsctt.setBbsTyCd("01");
bbsctt.setServerDv("sopmal");
bbsctt.setReqUrl("mpage");
DataMap content = selectBOBbscttListInqire(bbsctt);
model.addAttribute("resultMap", content);
Map<String, Object> content2 = selectBOMpageInfoInqire(vo);
model.addAttribute("mpageResultMap", content2);
return Util.getDeviceType(request)+"/mpage/act/MyNormalQaR";
}
/**
* 일반문의 수정 폼 이동
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectNormalQnaDtlUpdtForm")
public String selectNormalQnaDtlUpdtForm(HttpServletRequest request, ModelMap model,BOGnrlbbscttVO bbsctt, BOMbrVO vo){
bbsctt.setServerDv("sopmal");
bbsctt.setBbsTyCd("01");
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if ("01".equals(user.getSysDvCd())) {
bbsctt.setSopmalCd(user.getSopmalCd());
}
;
if (user.getUserInnb() > 0) {
if ("mngr".equals(bbsctt.getServerDv())) {
bbsctt.setRegusrDvCd("02"); //관리자
} else {
bbsctt.setRegusrDvCd("01"); //회원
bbsctt.setAnswMbtlnb(user.getMbtlnb());
}
} else {
bbsctt.setRegusrDvCd("99");//비회원
}
bbsctt.setSecretKey(boCommonService.selectSecretkey());
BOBbsVO bbsVO = new BOBbsVO();
bbsVO.setSopmalCd(bbsctt.getSopmalCd());
bbsVO.setBbsId(bbsctt.getBbsId());
bbsVO.setBbsTyCd(bbsctt.getBbsTyCd());
DataMap bbsInfo = new DataMap();
bbsInfo = bbsService.selectBOBbsSetupInfo(bbsVO);
Map<String, Object> bbscttInfo = new HashMap<String, Object>();
bbscttInfo = service.selectBOBbscttUpdt(bbsctt);
List<DataMap> itmList = new ArrayList<>();
itmList = service.selectBOBbscttItmInqire(bbsctt);
Map<String, Object> qesitmList = new HashMap<String, Object>();
qesitmList = service.selectBOBbscttRegistPopupForm(bbsctt);
Map<String, Object> rvwQesitmList = new HashMap<String, Object>();
rvwQesitmList = service.selectBOStarItm(bbsctt);
Map<String, Object> content = new HashMap<String, Object>();
content.put("bbsInfo", bbsInfo);
content.put("bbscttVO", bbsctt);
content.put("bbscttInfo", bbscttInfo);
content.put("itmList", itmList);
content.put("qesitmList", qesitmList);
content.put("rvwQesitmList", rvwQesitmList);
model.addAttribute("resultMap", content);
model.addAttribute("bbsctt", bbsctt);
Map<String, Object> content2 = selectBOMpageInfoInqire(vo);
model.addAttribute("mpageResultMap", content2);
return Util.getDeviceType(request)+"/mpage/act/MyNormalQnaDtlUpdtU";
}
/**
* 일반문의 ajax 조회
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectNormalQnaInqireAjax", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> selectNormalQnaInqireAjax(BOGnrlbbscttVO bbsctt){
bbsctt.setBbsTyCd("01");
bbsctt.setServerDv("sopmal");
bbsctt.setReqUrl("mpage");
DataMap content = selectBOBbscttListInqire(bbsctt);
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
/**
* 상품 Q&A ajax 조회
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectGoodsQnaInqireAjax", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> selectGoodsQnaInqireAjax(BOGnrlbbscttVO bbsctt){
bbsctt.setBbsTyCd("05");
bbsctt.setServerDv("sopmal"); bbsctt.setServerDv("sopmal");
bbsctt.setReqUrl("mpage"); bbsctt.setReqUrl("mpage");
//게시글 노출 항목 설정값과 게시판 목록 조회
DataMap content = selectBOBbscttListInqire(bbsctt); DataMap content = selectBOBbscttListInqire(bbsctt);
return ResponseEntity.ok( return ResponseEntity.ok(
@@ -151,10 +243,6 @@ public class MyActController {
.resBody(new WnbtResponseBody(content)) .resBody(new WnbtResponseBody(content))
.build() .build()
); );
// return responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire",bbsctt),
// ReplyFromResrc::getReply
// );
} }
/** /**
@@ -178,12 +266,8 @@ public class MyActController {
.resBody(new WnbtResponseBody(content)) .resBody(new WnbtResponseBody(content))
.build() .build()
); );
// return responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOFileInfo",bbsctt),
// ReplyFromResrc::getReply
// );
} }
/** /**
* 상품 Q&A 수정 폼 이동 * 상품 Q&A 수정 폼 이동
* @param bbsctt * @param bbsctt
@@ -209,28 +293,22 @@ public class MyActController {
bbsctt.setRegusrDvCd("99");//비회원 bbsctt.setRegusrDvCd("99");//비회원
} }
bbsctt.setSecretKey(boCommonService.selectSecretkey()); bbsctt.setSecretKey(boCommonService.selectSecretkey());
// 게시판 설정 정보
BOBbsVO bbsVO = new BOBbsVO(); BOBbsVO bbsVO = new BOBbsVO();
// bbsVO에 쇼핑몰코드, 해당 게시판 set
bbsVO.setSopmalCd(bbsctt.getSopmalCd()); bbsVO.setSopmalCd(bbsctt.getSopmalCd());
bbsVO.setBbsId(bbsctt.getBbsId()); bbsVO.setBbsId(bbsctt.getBbsId());
bbsVO.setBbsTyCd(bbsctt.getBbsTyCd()); bbsVO.setBbsTyCd(bbsctt.getBbsTyCd());
DataMap bbsInfo = new DataMap(); DataMap bbsInfo = new DataMap();
bbsInfo = bbsService.selectBOBbsSetupInfo(bbsVO); bbsInfo = bbsService.selectBOBbsSetupInfo(bbsVO);
// 게시글 상세 조회
Map<String, Object> bbscttInfo = new HashMap<String, Object>(); Map<String, Object> bbscttInfo = new HashMap<String, Object>();
bbscttInfo = service.selectBOBbscttUpdt(bbsctt); bbscttInfo = service.selectBOBbscttUpdt(bbsctt);
// 분류 조회
List<DataMap> itmList = new ArrayList<>(); List<DataMap> itmList = new ArrayList<>();
itmList = service.selectBOBbscttItmInqire(bbsctt); itmList = service.selectBOBbscttItmInqire(bbsctt);
//추가 항목 조회, 추가항목 항목 조회
Map<String, Object> qesitmList = new HashMap<String, Object>(); Map<String, Object> qesitmList = new HashMap<String, Object>();
qesitmList = service.selectBOBbscttRegistPopupForm(bbsctt); qesitmList = service.selectBOBbscttRegistPopupForm(bbsctt);
//리뷰항목 리스트, 리뷰항목 항목 리스트
Map<String, Object> rvwQesitmList = new HashMap<String, Object>(); Map<String, Object> rvwQesitmList = new HashMap<String, Object>();
rvwQesitmList = service.selectBOStarItm(bbsctt); rvwQesitmList = service.selectBOStarItm(bbsctt);
@@ -243,24 +321,14 @@ public class MyActController {
content.put("rvwQesitmList", rvwQesitmList); content.put("rvwQesitmList", rvwQesitmList);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttUpdtPopupForm",bbsctt),
// model,
// "resultMap"
// );
model.addAttribute("bbsctt", bbsctt); model.addAttribute("bbsctt", bbsctt);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
Map<String, Object> content2 = selectBOMpageInfoInqire(vo); Map<String, Object> content2 = selectBOMpageInfoInqire(vo);
model.addAttribute("mpageResultMap", content2); model.addAttribute("mpageResultMap", content2);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire",bbsctt),
// model,
// "mpageResultMap"
// );
return Util.getDeviceType(request)+"/mpage/act/MyGoodsQnaDtlUpdtU"; return Util.getDeviceType(request)+"/mpage/act/MyGoodsQnaDtlUpdtU";
} }
/** /**
* 1:1 문의 조회 * 1:1 문의 조회
* @param bbsctt * @param bbsctt
@@ -275,23 +343,13 @@ public class MyActController {
DataMap content = selectBOBbscttListInqire(bbsctt); DataMap content = selectBOBbscttListInqire(bbsctt);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire",bbsctt),
// model,
// "resultMap"
// );
Map<String, Object> content2 = selectBOMpageInfoInqire(vo); Map<String, Object> content2 = selectBOMpageInfoInqire(vo);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
model.addAttribute("mpageResultMap", content2); model.addAttribute("mpageResultMap", content2);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire",bbsctt),
// model,
// "mpageResultMap"
// );
return Util.getDeviceType(request)+"/mpage/act/MyM2mQaR"; return Util.getDeviceType(request)+"/mpage/act/MyM2mQaR";
} }
/** /**
* 1:1 문의 ajax 조회 * 1:1 문의 ajax 조회
* @param bbsctt * @param bbsctt
@@ -303,7 +361,6 @@ public class MyActController {
bbsctt.setBbsTyCd("12"); bbsctt.setBbsTyCd("12");
bbsctt.setServerDv("sopmal"); bbsctt.setServerDv("sopmal");
bbsctt.setReqUrl("mpage"); bbsctt.setReqUrl("mpage");
//게시글 노출 항목 설정값과 게시판 목록 조회
DataMap content = selectBOBbscttListInqire(bbsctt); DataMap content = selectBOBbscttListInqire(bbsctt);
return ResponseEntity.ok( return ResponseEntity.ok(
@@ -311,10 +368,6 @@ public class MyActController {
.resBody(new WnbtResponseBody(content)) .resBody(new WnbtResponseBody(content))
.build() .build()
); );
// return responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire",bbsctt),
// ReplyFromResrc::getReply
// );
} }
/** /**
@@ -343,28 +396,22 @@ public class MyActController {
bbsctt.setRegusrDvCd("99");//비회원 bbsctt.setRegusrDvCd("99");//비회원
} }
bbsctt.setSecretKey(boCommonService.selectSecretkey()); bbsctt.setSecretKey(boCommonService.selectSecretkey());
// 게시판 설정 정보
BOBbsVO bbsVO = new BOBbsVO(); BOBbsVO bbsVO = new BOBbsVO();
// bbsVO에 쇼핑몰코드, 해당 게시판 set
bbsVO.setSopmalCd(bbsctt.getSopmalCd()); bbsVO.setSopmalCd(bbsctt.getSopmalCd());
bbsVO.setBbsId(bbsctt.getBbsId()); bbsVO.setBbsId(bbsctt.getBbsId());
bbsVO.setBbsTyCd(bbsctt.getBbsTyCd()); bbsVO.setBbsTyCd(bbsctt.getBbsTyCd());
DataMap bbsInfo = new DataMap(); DataMap bbsInfo = new DataMap();
bbsInfo = bbsService.selectBOBbsSetupInfo(bbsVO); bbsInfo = bbsService.selectBOBbsSetupInfo(bbsVO);
// 게시글 상세 조회
Map<String, Object> bbscttInfo = new HashMap<String, Object>(); Map<String, Object> bbscttInfo = new HashMap<String, Object>();
bbscttInfo = service.selectBOBbscttUpdt(bbsctt); bbscttInfo = service.selectBOBbscttUpdt(bbsctt);
// 분류 조회
List<DataMap> itmList = new ArrayList<>(); List<DataMap> itmList = new ArrayList<>();
itmList = service.selectBOBbscttItmInqire(bbsctt); itmList = service.selectBOBbscttItmInqire(bbsctt);
//추가 항목 조회, 추가항목 항목 조회
Map<String, Object> qesitmList = new HashMap<String, Object>(); Map<String, Object> qesitmList = new HashMap<String, Object>();
qesitmList = service.selectBOBbscttRegistPopupForm(bbsctt); qesitmList = service.selectBOBbscttRegistPopupForm(bbsctt);
//리뷰항목 리스트, 리뷰항목 항목 리스트
Map<String, Object> rvwQesitmList = new HashMap<String, Object>(); Map<String, Object> rvwQesitmList = new HashMap<String, Object>();
rvwQesitmList = service.selectBOStarItm(bbsctt); rvwQesitmList = service.selectBOStarItm(bbsctt);
@@ -377,21 +424,10 @@ public class MyActController {
content.put("rvwQesitmList", rvwQesitmList); content.put("rvwQesitmList", rvwQesitmList);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttUpdtPopupForm",bbsctt),
// model,
// "resultMap"
// );
model.addAttribute("bbsctt", bbsctt); model.addAttribute("bbsctt", bbsctt);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
Map<String, Object> content2 = selectBOMpageInfoInqire(vo); Map<String, Object> content2 = selectBOMpageInfoInqire(vo);
model.addAttribute("mpageResultMap", content2); model.addAttribute("mpageResultMap", content2);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire",bbsctt),
// model,
// "mpageResultMap"
// );
return Util.getDeviceType(request)+"/mpage/act/MyM2mQnaDtlUpdtU"; return Util.getDeviceType(request)+"/mpage/act/MyM2mQnaDtlUpdtU";
} }
@@ -407,28 +443,17 @@ public class MyActController {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
bbsctt.setSopmalCd(user.getSopmalCd()); bbsctt.setSopmalCd(user.getSopmalCd());
/*리뷰 조회 폼*/
DataMap rvwBnefInfo = new DataMap(); DataMap rvwBnefInfo = new DataMap();
rvwBnefInfo = service.selectBORvwBnefInfo(bbsctt); rvwBnefInfo = service.selectBORvwBnefInfo(bbsctt);
model.addAttribute("mlgAccmlNtc", rvwBnefInfo); model.addAttribute("mlgAccmlNtc", rvwBnefInfo);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBORvwBnefInfo",bbsctt),
// model,
// "mlgAccmlNtc"
// );
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
Map<String, Object> content2 = selectBOMpageInfoInqire(vo); Map<String, Object> content2 = selectBOMpageInfoInqire(vo);
model.addAttribute("mpageResultMap", content2); model.addAttribute("mpageResultMap", content2);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire",bbsctt),
// model,
// "mpageResultMap"
// );
model.addAttribute("vo",bbsctt); model.addAttribute("vo",bbsctt);
return Util.getDeviceType(request)+"/mpage/act/MyRvwRForm"; return Util.getDeviceType(request)+"/mpage/act/MyRvwRForm";
} }
/** /**
* 나의 리뷰 조회 작성 가능한 리뷰 * 나의 리뷰 조회 작성 가능한 리뷰
* @param rvwVO * @param rvwVO
@@ -442,13 +467,9 @@ public class MyActController {
Map<String, Object> content = selectBOWritPosblRvw(rvwVO); Map<String, Object> content = selectBOWritPosblRvw(rvwVO);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOWritPosblRvw",rvwVO),
// model,
// "resultMap"
// );
return Util.getDeviceType(request)+"/mpage/act/WritngPosblRvwR"; return Util.getDeviceType(request)+"/mpage/act/WritngPosblRvwR";
} }
/** /**
* 나의 리뷰 조회 작성 가능한 리뷰 ajax(인피니트스크롤) * 나의 리뷰 조회 작성 가능한 리뷰 ajax(인피니트스크롤)
* @param rvwVO * @param rvwVO
@@ -466,10 +487,6 @@ public class MyActController {
.resBody(new WnbtResponseBody(content)) .resBody(new WnbtResponseBody(content))
.build() .build()
); );
// return responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOWritPosblRvw",rvwVO),
// ReplyFromResrc::getReply
// );
} }
/** /**
@@ -486,11 +503,6 @@ public class MyActController {
DataMap content = selectBOMyRvwListInqire(rvwVO); DataMap content = selectBOMyRvwListInqire(rvwVO);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOMyRvwListInqire",rvwVO),
// model,
// "resultMap"
// );
return Util.getDeviceType(request)+"/mpage/act/MyRvwR"; return Util.getDeviceType(request)+"/mpage/act/MyRvwR";
} }
@@ -512,10 +524,6 @@ public class MyActController {
.resBody(new WnbtResponseBody(content)) .resBody(new WnbtResponseBody(content))
.build() .build()
); );
// return responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOMyRvwListInqire",rvwVO),
// ReplyFromResrc::getReply
// );
} }
/** /**
@@ -528,15 +536,9 @@ public class MyActController {
public String selectRvwWritngPopupForm(HttpServletRequest request, ModelMap model, BOGnrlbbscttVO rvwVO){ public String selectRvwWritngPopupForm(HttpServletRequest request, ModelMap model, BOGnrlbbscttVO rvwVO){
rvwVO.setRvwBbscttDv("rvw"); rvwVO.setRvwBbscttDv("rvw");
rvwVO.setServerDv("sopmal"); rvwVO.setServerDv("sopmal");
//리뷰 등록 가능 여부 true시 등록폼 호출
Map<String, Object> content = selectBOBbscttRegistPopupForm(rvwVO); Map<String, Object> content = selectBOBbscttRegistPopupForm(rvwVO);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttRegistPopupForm",rvwVO),
// model,
// "resultMap"
// );
return Util.getDeviceType(request)+"/mpage/act/RvwWritngPopupC"; return Util.getDeviceType(request)+"/mpage/act/RvwWritngPopupC";
} }
@@ -556,30 +558,24 @@ public class MyActController {
bbsctt.setSopmalCd(user.getSopmalCd()); bbsctt.setSopmalCd(user.getSopmalCd());
} }
// 작성자 정보 추출 if (user.getUserInnb() > 0) {
if (user.getUserInnb() > 0) { //회원 , 관리자
bbsctt.setUpdusr(user.getUserInnb()); bbsctt.setUpdusr(user.getUserInnb());
} else { // 비회원 } else {
bbsctt.setUpdusr(0); bbsctt.setUpdusr(0);
} }
Map<String, Object> content = new HashMap<>(); Map<String, Object> content = new HashMap<>();
/*게시글 삭제*/
DataMap bbscttDelResult = service.updateBOBbscttDel(bbsctt); DataMap bbscttDelResult = service.updateBOBbscttDel(bbsctt);
content.put("result", bbscttDelResult); content.put("result", bbscttDelResult);
/*삭제 성공 시*/
if ("success".equals(bbscttDelResult.get("result"))) { if ("success".equals(bbscttDelResult.get("result"))) {
//리뷰 관련 처리
if ("06".equals(bbsctt.getBbsTyCd()) || "07".equals(bbsctt.getBbsTyCd())) { if ("06".equals(bbsctt.getBbsTyCd()) || "07".equals(bbsctt.getBbsTyCd())) {
if (!CollectionUtils.isEmpty(bbsctt.getDelInfoArr())) { if (!CollectionUtils.isEmpty(bbsctt.getDelInfoArr())) {
/*해당 정보로 마일리지 금액 조회하기*/
List<Object> accmlmnyAmtInfoArr = new ArrayList<>(); List<Object> accmlmnyAmtInfoArr = new ArrayList<>();
BOMlgVO mlgVo = new BOMlgVO(); BOMlgVO mlgVo = new BOMlgVO();
for (BODelInfoVO delInfo : bbsctt.getDelInfoArr()) { for (BODelInfoVO delInfo : bbsctt.getDelInfoArr()) {
if ("01".equals(delInfo.getRegusrDvCd())) { if ("01".equals(delInfo.getRegusrDvCd())) {
if ("03".equals(user.getSysDvCd())) { //관리자 삭제시 마일리지 회수 if ("03".equals(user.getSysDvCd())) {
/*공통 파라미터*/
mlgVo.setMbrInnb(String.valueOf(delInfo.getRegusr())); mlgVo.setMbrInnb(String.valueOf(delInfo.getRegusr()));
mlgVo.setMbrDvCd(delInfo.getMbrDvCd()); mlgVo.setMbrDvCd(delInfo.getMbrDvCd());
mlgVo.setSopmalCd(bbsctt.getSopmalCd()); mlgVo.setSopmalCd(bbsctt.getSopmalCd());
@@ -591,8 +587,7 @@ public class MyActController {
mlgVo.setRegusr(user.getUserInnb()); mlgVo.setRegusr(user.getUserInnb());
mlgVo.setUpdusr(user.getUserInnb()); mlgVo.setUpdusr(user.getUserInnb());
/*마일리지 수동 회수 여부*/ if ("N".equals(bbsctt.getMlgPassivRtrvlAt())) {
if ("N".equals(bbsctt.getMlgPassivRtrvlAt())) { // 선택 삭제시
DataMap accmlmnyAmtInfo = new DataMap(); DataMap accmlmnyAmtInfo = new DataMap();
accmlmnyAmtInfo = mlgService.selectBOMlgByBbscttInnb(mlgVo); accmlmnyAmtInfo = mlgService.selectBOMlgByBbscttInnb(mlgVo);
if (accmlmnyAmtInfo != null) { if (accmlmnyAmtInfo != null) {
@@ -603,7 +598,7 @@ public class MyActController {
mlgVo.setAccmlmnyAmt((BigDecimal) accmlmnyAmtInfo.get("accmlmnyAmt")); mlgVo.setAccmlmnyAmt((BigDecimal) accmlmnyAmtInfo.get("accmlmnyAmt"));
mlgService.insertBOMngrMlgDn(mlgVo); mlgService.insertBOMngrMlgDn(mlgVo);
} }
} else { //단독 삭제시*/ } else {
if (delInfo.getRtrvlMlgAmt() != null) { if (delInfo.getRtrvlMlgAmt() != null) {
if (delInfo.getRtrvlMlgAmt().compareTo(BigDecimal.valueOf(0)) > 0) { if (delInfo.getRtrvlMlgAmt().compareTo(BigDecimal.valueOf(0)) > 0) {
mlgVo.setAccmlmnyAmt(delInfo.getRtrvlMlgAmt()); mlgVo.setAccmlmnyAmt(delInfo.getRtrvlMlgAmt());
@@ -612,7 +607,6 @@ public class MyActController {
} }
} }
} }
//회원 관련
if (delInfo.getRegusr() != null) { if (delInfo.getRegusr() != null) {
BOGnrlbbscttVO mbrSite = new BOGnrlbbscttVO(); BOGnrlbbscttVO mbrSite = new BOGnrlbbscttVO();
mbrSite.setSopmalCd(bbsctt.getSopmalCd()); mbrSite.setSopmalCd(bbsctt.getSopmalCd());
@@ -627,26 +621,20 @@ public class MyActController {
} }
} }
//상품관련 집계와 회원관련 집계는 관리자혹은 사용자가 모두 삭제 시 처리가 되어야해
//상품 관련
if (delInfo.getGoodsInnb() != null) { if (delInfo.getGoodsInnb() != null) {
BOGoodsVO goodsVO = new BOGoodsVO(); BOGoodsVO goodsVO = new BOGoodsVO();
goodsVO.setGoodsInnb(String.valueOf(delInfo.getGoodsInnb())); goodsVO.setGoodsInnb(String.valueOf(delInfo.getGoodsInnb()));
goodsVO.setSopmalCd(bbsctt.getSopmalCd()); goodsVO.setSopmalCd(bbsctt.getSopmalCd());
/*상품정보 > 상품후기건수 차감*/
goodsService.updateRvwRelateSm(goodsVO); goodsService.updateRvwRelateSm(goodsVO);
} }
} }
} }
} else if ("05".equals(bbsctt.getBbsTyCd())) {//상품qna는 상품문의 집계만 } else if ("05".equals(bbsctt.getBbsTyCd())) {
//상품 관련
if (!CollectionUtils.isEmpty(bbsctt.getGoodsInnbArr())) { if (!CollectionUtils.isEmpty(bbsctt.getGoodsInnbArr())) {
for (String goodsInnb : bbsctt.getGoodsInnbArr()) { for (String goodsInnb : bbsctt.getGoodsInnbArr()) {
BOGoodsVO goodsVO = new BOGoodsVO(); BOGoodsVO goodsVO = new BOGoodsVO();
goodsVO.setGoodsInnb(goodsInnb); goodsVO.setGoodsInnb(goodsInnb);
goodsVO.setSopmalCd(bbsctt.getSopmalCd()); goodsVO.setSopmalCd(bbsctt.getSopmalCd());
/*상품정보 > 상품후기건수 차감*/
goodsService.updateGoodsInqryCnt(goodsVO); goodsService.updateGoodsInqryCnt(goodsVO);
} }
} }
@@ -658,10 +646,6 @@ public class MyActController {
.resBody(new WnbtResponseBody(content)) .resBody(new WnbtResponseBody(content))
.build() .build()
); );
// return responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttDel",bbsctt),
// ReplyFromResrc::getReply
// );
} }
/** /**
@@ -677,11 +661,6 @@ public class MyActController {
Map<String, Object> content = selectBOBbscttRegistPopupForm(vo); Map<String, Object> content = selectBOBbscttRegistPopupForm(vo);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttRegistPopupForm", vo),
// model,
// "resultMap"
// );
return Util.getDeviceType(request)+"/mpage/act/RvwEasyRegistC"; return Util.getDeviceType(request)+"/mpage/act/RvwEasyRegistC";
} }
@@ -693,7 +672,7 @@ public class MyActController {
public DataMap selectBOBbscttListInqire(BOGnrlbbscttVO bbsctt) { public DataMap selectBOBbscttListInqire(BOGnrlbbscttVO bbsctt) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if ("01".equals(user.getSysDvCd())) {//사용자 조회 일 경우 if ("01".equals(user.getSysDvCd())) {
bbsctt.setSopmalCd(user.getSopmalCd()); bbsctt.setSopmalCd(user.getSopmalCd());
} }
@@ -710,7 +689,6 @@ public class MyActController {
bbsctt.setRegusrDvCd("99"); bbsctt.setRegusrDvCd("99");
} }
} }
// pagination
PaginationInfo paginationInfo = new PaginationInfo(); PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(bbsctt.getPageIndex()); paginationInfo.setCurrentPageNo(bbsctt.getPageIndex());
paginationInfo.setRecordCountPerPage(bbsctt.getPageUnit()); paginationInfo.setRecordCountPerPage(bbsctt.getPageUnit());
@@ -721,13 +699,10 @@ public class MyActController {
bbsctt.setLastIndex(paginationInfo.getLastRecordIndex()); bbsctt.setLastIndex(paginationInfo.getLastRecordIndex());
bbsctt.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); bbsctt.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
// 게시글 목록조회
Map<String, Object> resultList = new HashMap<String, Object>(); Map<String, Object> resultList = new HashMap<String, Object>();
resultList = service.selectBOBbscttListInqire(bbsctt); resultList = service.selectBOBbscttListInqire(bbsctt);
// 게시판 설정 정보 조회
BOBbsVO bbsVO = new BOBbsVO(); BOBbsVO bbsVO = new BOBbsVO();
// bbsVO에 쇼핑몰코드, 해당 게시판 set
bbsVO.setSopmalCd(bbsctt.getSopmalCd()); bbsVO.setSopmalCd(bbsctt.getSopmalCd());
bbsVO.setBbsId(bbsctt.getBbsId()); bbsVO.setBbsId(bbsctt.getBbsId());
bbsVO.setBbsTyCd(bbsctt.getBbsTyCd()); bbsVO.setBbsTyCd(bbsctt.getBbsTyCd());
@@ -747,13 +722,11 @@ public class MyActController {
* *
*/ */
public Map<String, Object> selectBOMpageInfoInqire(BOMbrVO vo) { public Map<String, Object> selectBOMpageInfoInqire(BOMbrVO vo) {
// 사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setSopmalCd(user.getSopmalCd()); vo.setSopmalCd(user.getSopmalCd());
vo.setMbrInnb(String.valueOf(user.getUserInnb())); vo.setMbrInnb(String.valueOf(user.getUserInnb()));
vo.setMbrDvCd(user.getMbrDvCd()); vo.setMbrDvCd(user.getMbrDvCd());
// 상품 옵션 조회
Map<String, Object> message = new HashMap<>(); Map<String, Object> message = new HashMap<>();
message = boMbrService.selectBOMpageInfoInqire(vo); message = boMbrService.selectBOMpageInfoInqire(vo);
@@ -778,7 +751,6 @@ public class MyActController {
bbsctt.setSopmalCd(user.getSopmalCd()); bbsctt.setSopmalCd(user.getSopmalCd());
bbsctt.setRegusr(user.getUserInnb()); bbsctt.setRegusr(user.getUserInnb());
bbsctt.setMbrDvCd(user.getMbrDvCd()); bbsctt.setMbrDvCd(user.getMbrDvCd());
// pagination
PaginationInfo paginationInfo = new PaginationInfo(); PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(bbsctt.getPageIndex()); paginationInfo.setCurrentPageNo(bbsctt.getPageIndex());
paginationInfo.setRecordCountPerPage(bbsctt.getPageUnit()); paginationInfo.setRecordCountPerPage(bbsctt.getPageUnit());
@@ -811,7 +783,6 @@ public class MyActController {
if (!"crm".equals(bbsctt.getReqUrl())) { if (!"crm".equals(bbsctt.getReqUrl())) {
bbsctt.setRegusr(user.getUserInnb()); bbsctt.setRegusr(user.getUserInnb());
} }
// pagination
PaginationInfo paginationInfo = new PaginationInfo(); PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(bbsctt.getPageIndex()); paginationInfo.setCurrentPageNo(bbsctt.getPageIndex());
paginationInfo.setRecordCountPerPage(bbsctt.getPageUnit()); paginationInfo.setRecordCountPerPage(bbsctt.getPageUnit());
@@ -821,7 +792,7 @@ public class MyActController {
bbsctt.setFirstIndex(paginationInfo.getFirstRecordIndex()); bbsctt.setFirstIndex(paginationInfo.getFirstRecordIndex());
bbsctt.setLastIndex(paginationInfo.getLastRecordIndex()); bbsctt.setLastIndex(paginationInfo.getLastRecordIndex());
bbsctt.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); bbsctt.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
// 게시글 목록조회
Map<String, Object> resultList = new HashMap<String, Object>(); Map<String, Object> resultList = new HashMap<String, Object>();
resultList = service.selectBOMyRvwListInqire(bbsctt); resultList = service.selectBOMyRvwListInqire(bbsctt);
@@ -837,7 +808,6 @@ public class MyActController {
*/ */
public Map<String, Object> selectBOBbscttRegistPopupForm(BOGnrlbbscttVO bbsctt) { public Map<String, Object> selectBOBbscttRegistPopupForm(BOGnrlbbscttVO bbsctt) {
Map<String, Object> content = new HashMap<String, Object>(); Map<String, Object> content = new HashMap<String, Object>();
// 작성자 정보 추출
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if ("01".equals(user.getSysDvCd())) { if ("01".equals(user.getSysDvCd())) {
@@ -850,9 +820,9 @@ public class MyActController {
if (user.getUserInnb() > 0) { if (user.getUserInnb() > 0) {
bbsctt.setRegusr(user.getUserInnb()); bbsctt.setRegusr(user.getUserInnb());
if (!"01".equals(user.getSysDvCd())) { if (!"01".equals(user.getSysDvCd())) {
bbsctt.setRegusrDvCd("02"); //관리자 bbsctt.setRegusrDvCd("02");
} else { } else {
bbsctt.setRegusrDvCd("01"); //회원 bbsctt.setRegusrDvCd("01");
bbsctt.setMbrDvCd(user.getMbrDvCd()); bbsctt.setMbrDvCd(user.getMbrDvCd());
DataMap mbr = new DataMap(); DataMap mbr = new DataMap();
mbr.put("mbrInnb", String.valueOf(bbsctt.getRegusr())); mbr.put("mbrInnb", String.valueOf(bbsctt.getRegusr()));
@@ -868,31 +838,25 @@ public class MyActController {
regusrInfo.setRegusrDvCd(bbsctt.getRegusrDvCd()); regusrInfo.setRegusrDvCd(bbsctt.getRegusrDvCd());
} else { } else {
regusrInfo.setRegusr(0); regusrInfo.setRegusr(0);
regusrInfo.setRegusrDvCd("99");//비회원 regusrInfo.setRegusrDvCd("99");
} }
// 게시판 설정 정보
BOBbsVO bbsVO = new BOBbsVO(); BOBbsVO bbsVO = new BOBbsVO();
// bbsVO에 쇼핑몰코드, 해당 게시판 set
bbsVO.setSopmalCd(bbsctt.getSopmalCd()); bbsVO.setSopmalCd(bbsctt.getSopmalCd());
bbsVO.setBbsId(bbsctt.getBbsId()); bbsVO.setBbsId(bbsctt.getBbsId());
bbsVO.setBbsTyCd(bbsctt.getBbsTyCd()); bbsVO.setBbsTyCd(bbsctt.getBbsTyCd());
DataMap bbsInfo = new DataMap(); DataMap bbsInfo = new DataMap();
bbsInfo = bbsService.selectBOBbsSetupInfo(bbsVO); bbsInfo = bbsService.selectBOBbsSetupInfo(bbsVO);
// 분류
List<DataMap> itmList = new ArrayList<>(); List<DataMap> itmList = new ArrayList<>();
itmList = service.selectBOBbscttItmInqire(bbsctt); itmList = service.selectBOBbscttItmInqire(bbsctt);
//리뷰항목 리스트, 리뷰항목 항목 리스트
Map<String, Object> rvwQesitmList = new HashMap<String, Object>(); Map<String, Object> rvwQesitmList = new HashMap<String, Object>();
rvwQesitmList = service.selectBOStarItm(bbsctt); rvwQesitmList = service.selectBOStarItm(bbsctt);
//추가항목 리스트, 추가항목 항목 리스트
Map<String, Object> qesitmList = new HashMap<String, Object>(); Map<String, Object> qesitmList = new HashMap<String, Object>();
qesitmList = service.selectBOBbscttRegistPopupForm(bbsctt); qesitmList = service.selectBOBbscttRegistPopupForm(bbsctt);
//사용자 > 리뷰 상품 조회
DataMap rvwGoodsInfo = new DataMap(); DataMap rvwGoodsInfo = new DataMap();
DataMap mlgInfo = new DataMap(); DataMap mlgInfo = new DataMap();
if ("sopmal".equals(bbsctt.getServerDv())) { if ("sopmal".equals(bbsctt.getServerDv())) {
@@ -904,7 +868,6 @@ public class MyActController {
List<DataMap> rvwItmList = new ArrayList<>(); List<DataMap> rvwItmList = new ArrayList<>();
List<DataMap> starItmList = new ArrayList<>(); List<DataMap> starItmList = new ArrayList<>();
//사용자 별표 평점 역으로 리스트 set(퍼블리싱으로 인한 역처리)
if (rvwQesitmList.get("starItmCnList") != null) { if (rvwQesitmList.get("starItmCnList") != null) {
rvwItmList = (List<DataMap>) rvwQesitmList.get("starItmCnList"); rvwItmList = (List<DataMap>) rvwQesitmList.get("starItmCnList");
for (int i = rvwItmList.size() - 1; i >= 0; i--) { for (int i = rvwItmList.size() - 1; i >= 0; i--) {
@@ -915,7 +878,6 @@ public class MyActController {
} }
} }
//사용자 > 상품q&a 상품 조회
DataMap qnaGoodsInfo = new DataMap(); DataMap qnaGoodsInfo = new DataMap();
if ("sopmal".equals(bbsctt.getServerDv())) { if ("sopmal".equals(bbsctt.getServerDv())) {
if ("modal".equals(bbsctt.getReqUrl())) { if ("modal".equals(bbsctt.getReqUrl())) {
@@ -931,4 +893,4 @@ public class MyActController {
content.put("rvwQesitmList", rvwQesitmList); content.put("rvwQesitmList", rvwQesitmList);
return content; return content;
} }
} }

View File

@@ -1067,7 +1067,7 @@ public class MyMbrController {
*/ */
@Policy(AuthPolicy.RESTRICTED) @Policy(AuthPolicy.RESTRICTED)
@PostMapping(value="/updateDlvylcUpdt", produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value="/updateDlvylcUpdt", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> updateDlvylcUpdt(@Validated DlvylcVO dlvylcVO, BOCrmDlvylcVO crmDlvylcVO, BindingResult bindingResult){ public ResponseEntity<WnbtResponse> updateDlvylcUpdt(@Validated DlvylcVO dlvylcVO, BindingResult bindingResult, BOCrmDlvylcVO crmDlvylcVO){
//입력값 정합성 점검결과 처리 //입력값 정합성 점검결과 처리
if(bindingResult.hasErrors()) { if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource)); throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
@@ -1078,7 +1078,19 @@ public class MyMbrController {
mbtlnb = mbtlnb.replace("-", ""); mbtlnb = mbtlnb.replace("-", "");
int mbtlnbLen = mbtlnb.length(); int mbtlnbLen = mbtlnb.length();
if (!(mbtlnbLen >= 8 && mbtlnbLen <= 12)) { if (!(mbtlnbLen >= 8 && mbtlnbLen <= 12)) {
throw new WnbtRestException("번호는 8자~12자 입니다."); throw new WnbtRestException("휴대전화번호는 8자 이상 12자 이하만 입력할 수 있습니다.");
}
//개인통관번호 정합성 체크
if("KR".equals(crmDlvylcVO.getDlvylcAreaCd())) {
String cstmclerCd = crmDlvylcVO.getCstmclerCd();
String cstmclerCdReg = "^P\\d{12}$";
if (cstmclerCd == null || cstmclerCd.trim().isEmpty()) {
throw new WnbtRestException("개인통관번호은(는) 필수 입력값입니다.");
}else if (!cstmclerCd.matches(cstmclerCdReg)) {
throw new WnbtRestException("개인통관번호는 P로 시작하는 13자리 부호만 입력할 수 있습니다.");
}
} }
//도로명 지번 분기처리 하여 vo에 set함 //도로명 지번 분기처리 하여 vo에 set함
@@ -1135,7 +1147,7 @@ public class MyMbrController {
*/ */
@Policy(AuthPolicy.RESTRICTED) @Policy(AuthPolicy.RESTRICTED)
@PostMapping(value="/insertDlvylcRegist", produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value="/insertDlvylcRegist", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> insertDlvylcRegist(@Validated DlvylcVO dlvylcVO, BOCrmDlvylcVO crmDlvylcVO, BindingResult bindingResult){ public ResponseEntity<WnbtResponse> insertDlvylcRegist(@Validated DlvylcVO dlvylcVO, BindingResult bindingResult, BOCrmDlvylcVO crmDlvylcVO){
//입력값 정합성 점검결과 처리 //입력값 정합성 점검결과 처리
if(bindingResult.hasErrors()) { if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource)); throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
@@ -1146,7 +1158,19 @@ public class MyMbrController {
mbtlnb = mbtlnb.replace("-",""); mbtlnb = mbtlnb.replace("-","");
int mbtlnbLen = mbtlnb.length(); int mbtlnbLen = mbtlnb.length();
if(!(mbtlnbLen >= 8 && mbtlnbLen <= 12)){ if(!(mbtlnbLen >= 8 && mbtlnbLen <= 12)){
throw new WnbtRestException("번호는 8자~12자 입니다."); throw new WnbtRestException("휴대전화번호는 8자 이상 12자 이하만 입력할 수 있습니다.");
}
//개인통관번호 정합성 체크
if("KR".equals(crmDlvylcVO.getDlvylcAreaCd())) {
String cstmclerCd = crmDlvylcVO.getCstmclerCd();
String cstmclerCdReg = "^P\\d{12}$";
if (cstmclerCd == null || cstmclerCd.trim().isEmpty()) {
throw new WnbtRestException("개인통관번호은(는) 필수 입력값입니다.");
}else if (!cstmclerCd.matches(cstmclerCdReg)) {
throw new WnbtRestException("개인통관번호는 P로 시작하는 13자리 부호만 입력할 수 있습니다.");
}
} }
crmDlvylcVO.setServerDv("sopmal"); crmDlvylcVO.setServerDv("sopmal");

View File

@@ -17,9 +17,10 @@ public class DlvylcVO extends AbstractVO{
/**회원구분코드*/ /**회원구분코드*/
private String mbrDvCd; private String mbrDvCd;
/** 배송지설명내용 */ /** 배송지설명내용 */
@NotBlank(message = "배송지 설명") @NotBlank(message = "배송지명")
private String dlvylcDcCn; private String dlvylcDcCn;
/**배송지역코드*/ /**배송지역코드*/
@NotBlank(message = "배송지역코드")
private String dlvylcAreaCd; private String dlvylcAreaCd;
/** 받는사람명 */ /** 받는사람명 */
@NotBlank(message = "받으시는 분") @NotBlank(message = "받으시는 분")
@@ -32,7 +33,7 @@ public class DlvylcVO extends AbstractVO{
private String telnb; private String telnb;
/** 우편번호 */ /** 우편번호 */
@NotBlank(message = "우편번호") @NotBlank(message = "우편번호")
@Length(min=1, max=7) @Length(min=1, max=7, message="우편번호")
private String zip; private String zip;
/** 도로명,지번 구분 */ /** 도로명,지번 구분 */
private String adresDv; private String adresDv;

View File

@@ -36,6 +36,7 @@ import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyOrdrDlvyVO;
import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyOrdrShippingVO; import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyOrdrShippingVO;
import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyRefundVO; import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyRefundVO;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.response.WnbtResponse; import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody; import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler; import com.wb.domainserver.response.WnbtWebClientResponseHandler;
@@ -54,6 +55,7 @@ import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Base64Util; import org.apache.logging.log4j.util.Base64Util;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@@ -65,6 +67,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -171,6 +174,26 @@ public class MyOrdrController {
return Util.getDeviceType(request) + "/mpage/ordr/SubsvcOrdrDlvyListRForm"; return Util.getDeviceType(request) + "/mpage/ordr/SubsvcOrdrDlvyListRForm";
} }
/**
* 마이 페이지 > MY쇼핑 > 마이페이지 > 주문/배송 목록 조회
* @param ordrDlvyVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrSubsvcOrdrListInqireMapge")
public String selectMbrSubsvcOrdrListInqireMapge(ModelMap model, BOOrdrDlvyVO ordrDlvyVO) {
Map<String, Object> content = selectBOMbrSubsvcOrdrListInqireAjax(ordrDlvyVO);
model.addAttribute("data", content);
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrOrdrListInqireAjax", ordrDlvyVO),
// model,
// "data"
// );
return "sopmal/mpage/ordr/SubsvcOrdrDlvyListMpageRList";
}
/** /**
* 마이 페이지 > MY쇼핑 > 구독서비스 주문/배송 > 구독서비스 주문/배송 목록 조회 * 마이 페이지 > MY쇼핑 > 구독서비스 주문/배송 > 구독서비스 주문/배송 목록 조회
* @param ordrDlvyVO * @param ordrDlvyVO
@@ -208,10 +231,12 @@ public class MyOrdrController {
*/ */
@Policy(AuthPolicy.RESTRICTED) @Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrSubsvcOrdrDtlInqire") @RequestMapping(value="/selectMbrSubsvcOrdrDtlInqire")
public String selectMbrSubsvcOrdrDtlInqire(HttpServletRequest request, ModelMap model, BOOrdrDlvyVO ordrDlvyVO, BOMbrVO vo) throws Exception { public String selectMbrSubsvcOrdrDtlInqire(HttpServletRequest request, ModelMap model, BOOrdrDlvyVO ordrDlvyVO, BOMbrVO vo, BORtngudrefndVO boRtngudrefndVO) throws Exception {
boRtngudrefndVO.setServerDv("sopmal");
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if ("01".equals(user.getSysDvCd())) { if ("01".equals(user.getSysDvCd())) {
ordrDlvyVO.setSopmalCd(user.getSopmalCd()); ordrDlvyVO.setSopmalCd(user.getSopmalCd());
boRtngudrefndVO.setSopmalCd(user.getSopmalCd());
} }
Map<String, Object> message = boOrdrService.selectMbrOrdrDtlInqire(ordrDlvyVO); Map<String, Object> message = boOrdrService.selectMbrOrdrDtlInqire(ordrDlvyVO);
/**발급대상구분코드*/ /**발급대상구분코드*/
@@ -228,6 +253,13 @@ public class MyOrdrController {
// ); // );
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO)); model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO));
model.addAttribute("vo", ordrDlvyVO); model.addAttribute("vo", ordrDlvyVO);
/**환불내역이 있으면 정보조회*/
if(message.get("order") != null && ((DataMap)message.get("order")).get("orderReInnb") != null && !"".equals(((DataMap)message.get("order")).get("orderReInnb"))){
boRtngudrefndVO.setOrderReInnb((String)((DataMap)message.get("order")).get("orderReInnb"));
Map<String, Object> refund = new HashMap<String, Object>();
refund.put("result", boRtngudrefndService.selectBORtngudRefndDtlInqire(boRtngudrefndVO));
model.addAttribute("resultMap", refund);
}
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 ) // 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
Map<String, Object> content = selectBOMpageInfoInqire(vo); Map<String, Object> content = selectBOMpageInfoInqire(vo);
@@ -704,17 +736,13 @@ public class MyOrdrController {
boDlivyVO.setSopmalCd(user.getSopmalCd()); // 쇼핑몰 코드 boDlivyVO.setSopmalCd(user.getSopmalCd()); // 쇼핑몰 코드
} }
Map<String, Object> content = new HashMap<>(); BOOrdrDlvyVO ordrDlvyVO = new BOOrdrDlvyVO();
content = dlivyService.selectBOOrdrDlvyDtlsInqire(boDlivyVO); ordrDlvyVO.setSopmalCd(boDlivyVO.getSopmalCd());
ordrDlvyVO.setOrdrInnb(boDlivyVO.getOrdrInnb());
model.addAttribute("resultMap", content); model.addAttribute("ordrInfo", boOrdrService.selectMbrOrdrDtlInqire(ordrDlvyVO));
// responseHandler.handleResponse( model.addAttribute("resultMap", dlivyService.updateBOAciDelivery(boDlivyVO));
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBOOrdrDlvyDtlsInqire", dlivyVO),
// model,
// "resultMap"
// );
// return "sopmal/mpage/ordr/DlvyInqireR";
return Util.getDeviceType(request) + "/mpage/ordr/DlvyInqireR"; return Util.getDeviceType(request) + "/mpage/ordr/DlvyInqireR";
} }
@@ -758,7 +786,7 @@ public class MyOrdrController {
// model, // model,
// "resultMap" // "resultMap"
// ); // );
model.addAttribute("paramVO", boRtngudrefndVO); model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(boRtngudrefndVO));
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 ) // 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
Map<String, Object> content2 = selectBOMpageInfoInqire(vo); Map<String, Object> content2 = selectBOMpageInfoInqire(vo);

View File

@@ -2,6 +2,8 @@ package com.wb.domainserver.domain.sopmal.ordr.controller;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource; import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrLogService;
import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO;
import com.wb.domainserver.domain.sopmal.ordr.vo.OrdrVO; import com.wb.domainserver.domain.sopmal.ordr.vo.OrdrVO;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtWebClientResponseHandler; import com.wb.domainserver.response.WnbtWebClientResponseHandler;
@@ -9,17 +11,23 @@ import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy; import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC; import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.SendToResrc; import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import com.wb.domainserver.util.util.Util; import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList; import java.io.BufferedReader;
import java.util.List; import java.net.URLDecoder;
import java.util.*;
@Slf4j @Slf4j
@Controller @Controller
@@ -34,6 +42,9 @@ public class OrdrApiController {
@Autowired @Autowired
private GconeMessageSource messageSource; private GconeMessageSource messageSource;
@Autowired
private BOOrdrLogService ordrLogService;
private Util utilClass; private Util utilClass;
/* #################################### /* ####################################
@@ -95,4 +106,135 @@ public class OrdrApiController {
return Integer.parseInt(cleanedCode.toString(), 16); return Integer.parseInt(cleanedCode.toString(), 16);
} }
/* ##################################################
사용자 > 결제(키움) > 결제 성공 후 결제값 응답받음
################################################## */
/**
* 키움 결제 연계처리 - 결과통보페이지
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/kiwoomPayWebhook")
@ResponseBody
public ResponseEntity<String> selectPaymentkiwoomWebhook(HttpServletRequest request) throws Exception {
// 0. 키움에서 온 값 로그 출력 (결제실패에 대한 응답은 없음)
printKiwoomRequest(request);
// 1. 주문 로그 남김 (GC_ORDER_LOG)
BOPayVO payVO = new BOPayVO();
DataMap pgApiLogReqVO = new DataMap();
String orderNo = StringUtil.isNullToString(request.getParameter("ORDERNO"));
String orderNm = StringUtil.isNullToString(request.getParameter("USERNAME"));
String resParam = queryStringToJson(request.getQueryString());
payVO.setPgCmpnyNm("kiwoom"); //pg사명
payVO.setDvCd("01"); //사용자
payVO.setOrderId(orderNo); //주문번호
payVO.setSetlerNm(orderNm); //주문자명
pgApiLogReqVO.put("resParam",resParam); //응답전문
ordrLogService.insertSetleOrderPgLog(payVO, pgApiLogReqVO);
// 2. PG API 로그 남김 (GC_ORDER_PG_API_LOG)
pgApiLogReqVO.put("reqParam", ""); //요청전문
pgApiLogReqVO.put("ordrInnb", orderNo); //주문번호
pgApiLogReqVO.put("sopmalCd", "SK"); //쇼핑몰코드
pgApiLogReqVO.put("pgCmpnyNm", "kiwoom"); //pg사명
pgApiLogReqVO.put("mbrInnb", ""); //회원번호
pgApiLogReqVO.put("resParam", resParam); //응답전문
ordrLogService.insertBOPgApiLogReqRegist(pgApiLogReqVO);
String response = "<html><body><RESULT>SUCCESS</RESULT></body></html>";
return ResponseEntity.ok()
.contentType(MediaType.TEXT_HTML)
.body(response);
}
public static void printKiwoomRequest(HttpServletRequest request) {
try {
System.out.println("========== [KIWOOM REQUEST START] ==========");
// 1. 기본 정보
System.out.println("URL : " + request.getRequestURL());
System.out.println("METHOD : " + request.getMethod());
System.out.println("QUERY : " + request.getQueryString());
System.out.println("REMOTE IP : " + request.getRemoteAddr());
// 2. 파라미터 (가장 중요)
System.out.println("---------- PARAM ----------");
request.setCharacterEncoding("EUC-KR");
request.getParameterMap().forEach((key, values) -> {
System.out.println(key + " = " + Arrays.toString(values));
});
// 3. 헤더
System.out.println("---------- HEADER ----------");
Collections.list(request.getHeaderNames()).forEach(header -> {
System.out.println(header + " = " + request.getHeader(header));
});
// 4. Body (JSON 대응)
System.out.println("---------- BODY ----------");
StringBuilder body = new StringBuilder();
BufferedReader reader = request.getReader();
String line;
while ((line = reader.readLine()) != null) {
body.append(line);
}
System.out.println(body.toString());
System.out.println("========== [KIWOOM REQUEST END] ==========");
} catch (Exception e) {
System.out.println("❌ REQUEST LOG ERROR");
e.printStackTrace();
}
}
public String queryStringToJson(String queryString) throws Exception {
Map<String, String> map = new HashMap<>();
if (queryString != null && !queryString.isEmpty()) {
String[] pairs = queryString.split("&");
for (String pair : pairs) {
String[] keyValue = pair.split("=", 2);
String key = URLDecoder.decode(keyValue[0], "UTF-8");
String value = keyValue.length > 1 ? URLDecoder.decode(keyValue[1], "UTF-8") : "";
map.put(key, value);
}
}
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(map);
}
public Map<String, String> queryStringToMap(String queryString) throws Exception {
Map<String, String> map = new HashMap<>();
if (queryString != null) {
for (String param : queryString.split("&")) {
String[] pair = param.split("=", 2);
String key = URLDecoder.decode(pair[0], "EUC-KR");
String value = pair.length > 1 ? URLDecoder.decode(pair[1], "EUC-KR") : "";
map.put(key, value);
}
}
return map;
}
} }

View File

@@ -3,7 +3,7 @@ package com.wb.domainserver.domain.sopmal.ordr.controller;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.nimbusds.jose.shaded.gson.Gson; import com.nimbusds.jose.shaded.gson.Gson;
import com.wb.domainserver.common.msg.GconeMessageSource; import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo; import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties; import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.instcSle.mtng.service.BOMaMtngService; import com.wb.domainserver.domain.admin.instcSle.mtng.service.BOMaMtngService;
@@ -20,52 +20,46 @@ import com.wb.domainserver.domain.gcone.goods.goods.service.BOGoodsService;
import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderService; import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderService;
import com.wb.domainserver.domain.gcone.goods.purchs.service.BOPurchsService; import com.wb.domainserver.domain.gcone.goods.purchs.service.BOPurchsService;
import com.wb.domainserver.domain.gcone.goods.purchs.vo.*; import com.wb.domainserver.domain.gcone.goods.purchs.vo.*;
import com.wb.domainserver.domain.gcone.goods.subsvc.service.BOSubsvcService;
import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO;
import com.wb.domainserver.domain.gcone.mbr.mbr.service.BOMbrService; import com.wb.domainserver.domain.gcone.mbr.mbr.service.BOMbrService;
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO; import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO;
import com.wb.domainserver.domain.gcone.ordr.dlivy.service.BODlivyService; import com.wb.domainserver.domain.gcone.ordr.dlivy.service.BODlivyService;
import com.wb.domainserver.domain.gcone.ordr.npay.service.BONpayConfigService; import com.wb.domainserver.domain.gcone.ordr.npay.service.BONpayConfigService;
import com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO; import com.wb.domainserver.domain.gcone.ordr.npay.vo.BONpayConfigVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrderCommonService;
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrLogService; import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrLogService;
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService; import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOCrmDlvylcVO; import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOCrmDlvylcVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrVO; import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOSpbkVO; import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOSpbkVO;
import com.wb.domainserver.domain.gcone.ordr.pay.service.BOPayService;
import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO; import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO;
import com.wb.domainserver.domain.gcone.promtn.coupon.service.BOCouponService; import com.wb.domainserver.domain.gcone.promtn.coupon.service.BOCouponService;
import com.wb.domainserver.domain.gcone.setup.dlvygrp.service.BODlvygrpService; import com.wb.domainserver.domain.gcone.setup.dlvygrp.service.BODlvygrpService;
import com.wb.domainserver.domain.gcone.setup.nbkk.service.BONbkkService; import com.wb.domainserver.domain.gcone.setup.nbkk.service.BONbkkService;
import com.wb.domainserver.domain.gcone.setup.site.vo.BOSiteVO; import com.wb.domainserver.domain.gcone.setup.site.vo.BOSiteVO;
import com.wb.domainserver.domain.sample.vo.PrevewVO; import com.wb.domainserver.domain.sopmal.ordr.vo.OrdrVO;
import com.wb.domainserver.domain.sopmal.goods.vo.GoodsVO;
import com.wb.domainserver.domain.sopmal.ordr.vo.OrdrVO;
import com.wb.domainserver.domain.sopmal.ordr.vo.PayVO;
import com.wb.domainserver.domain.sopmal.ordr.vo.SpbkVO;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.PurchsValidCode; import com.wb.domainserver.exception.code.PurchsValidCode;
import com.wb.domainserver.response.ApiResponse; import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponse; import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtResponseBody; import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.response.WnbtWebClientResponseHandler; import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.AnonymousUser; import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder; import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy; import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.security.authorization.annotation.Policy; import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.CookieUtils; import com.wb.domainserver.util.cookie.CookieUtil;
import com.wb.domainserver.util.communicate.RESRC; import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.communicate.ReplyFromResrc; import com.wb.domainserver.util.string.StringUtil;
import com.wb.domainserver.util.communicate.SendToResrc; import com.wb.domainserver.util.util.Util;
import com.wb.domainserver.util.cookie.CookieUtil;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.Cookie; import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.text.StringEscapeUtils;
import org.apache.logging.log4j.util.Base64Util; import org.apache.logging.log4j.util.Base64Util;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser; import org.json.simple.parser.JSONParser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@@ -74,11 +68,15 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.Reader; import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger; import java.math.BigInteger;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
@@ -136,6 +134,10 @@ public class OrdrController {
private BOMaMtngService boMaMtngService; private BOMaMtngService boMaMtngService;
@Autowired @Autowired
private BOPurchsService boPurchsService; private BOPurchsService boPurchsService;
@Autowired
private BOSubsvcService subsvcService;
@Autowired
private BOPayService payService;
/* #################################### /* ####################################
사용자 > 상품 > 구매/결제 > 회원구매하기 시작 사용자 > 상품 > 구매/결제 > 회원구매하기 시작
@@ -362,6 +364,7 @@ public class OrdrController {
param.put("mbrDvCd", user.getMbrDvCd()); param.put("mbrDvCd", user.getMbrDvCd());
param.put("mbrInnb", user.getUserInnb()); param.put("mbrInnb", user.getUserInnb());
} }
log.debug("CONselectSetleExpectAmt-param : {}", param);
Map<String, Object> content = new HashMap<>(); Map<String, Object> content = new HashMap<>();
try { try {
DataMap datamap = new DataMap(); DataMap datamap = new DataMap();
@@ -398,6 +401,136 @@ public class OrdrController {
// ); // );
} }
/* ####################################
사용자 > 구독상품 > 구매/결제 > 회원구매하기 시작
#################################### */
/**
* 사용자 > 구독상품 > 구매/결제 > 구독서비스 결제 > 구독서비스 결제 화면 이동
* @return SubsvcPurchsC.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectSubsvcPurchsForm")
public String selectSubsvcSetleInqire(HttpServletRequest request, ModelMap model, BOOrdrVO ordrVO) throws Exception {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
//결재 플랫폼 구분 코드
ordrVO.setSetlePltfomTyCd("PC".equals(request.getAttribute("env"))?"03":"04");
//약관정보 세팅
BOStplatVO stplatVO = new BOStplatVO();
stplatVO.setPageIndex(1);
stplatVO.setPageUnit(paginationProperties.getPageUnit());
stplatVO.setNmbrPurchsAt("Y");
stplatVO.setSrchSopmalCd(user.getSopmalCd());
DataMap stplat = selectBOStplatListInqire(stplatVO);
//주문 상품정보 세팅
if ("01".equals(user.getSysDvCd())) {
ordrVO.setSopmalCd(user.getSopmalCd());
}
ordrVO.setMbrInnb(user.getUserInnb());
ordrVO.setMbrId(user.getMbrId());
ordrVO.setMbrDvCd(user.getMbrDvCd());
Map<String, Object> content = service.selectSubsvcPurchs(ordrVO);
model.addAttribute("data", content);
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrVO));
model.addAttribute("deviceType", Util.getDeviceType(request));
model.addAttribute("stplat", stplat);
return Util.getDeviceType(request) + "/ordr/SubsvcPurchsC";
}
/**
* 사용자 > 구독상품 > 구매/결제 > 구독서비스 결제 > 구독서비스 조회
* @param param
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectOrderSubsvcList", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> selectOrderSubsvcOne(@RequestBody HashMap<String, Object> param) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
BOSubsvcVO subsvcVO = new BOSubsvcVO();
if ("01".equals(user.getSysDvCd())) {
subsvcVO.setSopmalCd(user.getSopmalCd());
}
subsvcVO.setMbrInnb((Integer) param.get("mbrInnb"));
subsvcVO.setSubsvcInnb(String.valueOf(param.get("subsvcInnb")));
List<DataMap> content = new ArrayList<>();
content.add(subsvcService.selectBOSubsvcDetail(subsvcVO));
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
/**
* 사용자 > 구독상품 > 구매/결제 > 구독서비스 결제 > 결제 예정금액 조회
* @param param
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectSubsvcSetleExpectAmt", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<WnbtResponse> selectSubsvcSetleExpectAmt(HttpServletRequest request, @RequestBody HashMap<String, Object> param) {
String sesionId ="";
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies ){
if(cookie.getName().equals("JSESSIONID")){
sesionId = cookie.getValue();
param.put("sesionId", sesionId);
break;
}
}
}
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if ("01".equals(user.getSysDvCd())) {
param.put("sopmalCd", user.getSopmalCd());
param.put("mbrDvCd", user.getMbrDvCd());
param.put("mbrInnb", user.getUserInnb());
}
Map<String, Object> content = new HashMap<>();
try {
DataMap datamap = new DataMap();
param.entrySet().forEach(map -> {
datamap.put(map.getKey(), map.getValue());
});
content = service.selectSubsvcSetleExpectAmt(datamap);
} catch (WnbtRestException wre) {
log.debug("결제예정금액 ordr wre");
log.error(wre.getMessage(), wre);
content = new HashMap<>() {{
put("status", "1");
put("message", wre.getMessage());
put("mlgMxmmUseAmt", wre.getCode());
}};
} catch (Exception e) {
log.debug("결제예정금액 ordr e");
log.error(e.getMessage(), e);
content = new HashMap<>() {{
put("status", "1");
put("message", "예기치 못한 오류가 발생하였습니다.\n관리자에게 문의하시기 바랍니다.");
}};
}
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
// return responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOSetleExpectAmt", param),
// ReplyFromResrc::getReply
// );
}
/** /**
* 관리자 주문 > 브랜드페이 > 토큰발급 * 관리자 주문 > 브랜드페이 > 토큰발급
@@ -662,6 +795,22 @@ public class OrdrController {
paramData.put(map.getKey(), map.getValue()); paramData.put(map.getKey(), map.getValue());
}); });
LinkedHashMap goodsOne = ((List<LinkedHashMap>) paramData.get("goodsList")).get(0);
Boolean subsvcAt = goodsOne.containsKey("subsvcInnb");
// 구독서비스에 포함된 상품 목록 세팅
if(subsvcAt) {
model.addAttribute("subsvcInnb", goodsOne.get("subsvcInnb"));
BOSubsvcVO subsvcVO = new BOSubsvcVO();
subsvcVO.setSopmalCd((String) goodsOne.get("sopmalCd"));
subsvcVO.setSubsvcInnb(goodsOne.get("subsvcInnb").toString());
subsvcVO.setQy((int) goodsOne.get("qy"));
subsvcVO.setMbrInnb((int) goodsOne.get("mbrInnb"));
paramData.remove("goodsList");
paramData.put("goodsList", service.selectSubsvcGoodsList(subsvcVO));
}
Map<String, Object> resultMap = insertBOOrder(paramData); Map<String, Object> resultMap = insertBOOrder(paramData);
// Map<String, Object> resultMap = responseHandler.handleResponseAsMap( // Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBOOrder", param) // sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBOOrder", param)
@@ -691,7 +840,9 @@ public class OrdrController {
String pgCmpnyNm = setle.getPgCmpnyNm(); String pgCmpnyNm = setle.getPgCmpnyNm();
String setleTyCd = setle.getSetleTyCd(); String setleTyCd = setle.getSetleTyCd();
if ("gcpay".equals(pgCmpnyNm)) { if ("kiwoom".equals(pgCmpnyNm)||"naverpay".equals(pgCmpnyNm)) {
url = "sopmal/ordr/OrdrReqstKiwoomPayR";
} else if ("gcpay".equals(pgCmpnyNm)) {
url = "sopmal/ordr/OrdrReqstGcpayPayR"; url = "sopmal/ordr/OrdrReqstGcpayPayR";
} else if ("kcp".equals(pgCmpnyNm)) { } else if ("kcp".equals(pgCmpnyNm)) {
if ("sopmal_m".equals(deviceType)) { if ("sopmal_m".equals(deviceType)) {
@@ -701,7 +852,7 @@ public class OrdrController {
} }
} else if ("toss".equals(pgCmpnyNm)) { } else if ("toss".equals(pgCmpnyNm)) {
url = "sopmal/ordr/OrdrReqstTossPayR"; url = "sopmal/ordr/OrdrReqstTossPayR";
} else if ("tosspay".equals(pgCmpnyNm)||"naverpay".equals(pgCmpnyNm)||"kakaopay".equals(pgCmpnyNm)) { } else if ("tosspay".equals(pgCmpnyNm)||"kakaopay".equals(pgCmpnyNm)) { //||"naverpay".equals(pgCmpnyNm) 키움으로 이동
url = "sopmal/ordr/OrdrReqstTosspayPayR"; url = "sopmal/ordr/OrdrReqstTosspayPayR";
} else if ("02".equals(setleTyCd)||"08".equals(setleTyCd)||"12".equals(setleTyCd)) { // 무통장, 마일리지, 충전형마일리지 } else if ("02".equals(setleTyCd)||"08".equals(setleTyCd)||"12".equals(setleTyCd)) { // 무통장, 마일리지, 충전형마일리지
url = "sopmal/ordr/OrdrReqstPayR"; url = "sopmal/ordr/OrdrReqstPayR";
@@ -921,7 +1072,7 @@ public class OrdrController {
agentId = CookieUtil.getAgentCookieValue(request.getCookies()); agentId = CookieUtil.getAgentCookieValue(request.getCookies());
payVO.setAgentId(agentId); payVO.setAgentId(agentId);
} }
log.debug("=================insertKcpSetle cookies {} ",cookies); log.debug("=================insertKcpSetle cookies {} ",(Object) cookies);
Map<String, String> util = new HashMap<>(); Map<String, String> util = new HashMap<>();
util = utilClass.getRequestInfo(request); util = utilClass.getRequestInfo(request);
@@ -942,6 +1093,12 @@ public class OrdrController {
log.debug("=================insertKcpSetle after "); log.debug("=================insertKcpSetle after ");
model.addAttribute("paramVO", payVO); model.addAttribute("paramVO", payVO);
if ("1".equals(content.get("status"))) { // 에러처리
String subsvcInnb = request.getParameter("subsvc_innb");
if(subsvcInnb != "") {
model.addAttribute("subsvcInnb", subsvcInnb);
}
}
return "sopmal/ordr/OrdrRspnsKcpPayR"; return "sopmal/ordr/OrdrRspnsKcpPayR";
} }
@@ -1033,19 +1190,6 @@ public class OrdrController {
payVO.setSetlerNm(request.getParameter("buyr_name")); payVO.setSetlerNm(request.getParameter("buyr_name"));
//에스크로 정보추가
/*payVO.setEscwUsed(request.getParameter("escw_used"));
payVO.setPayMod(request.getParameter("pay_mod"));
payVO.setRcvrName(request.getParameter("rcvr_name"));
payVO.setRcvrTel1(request.getParameter("rcvr_tel1"));
payVO.setRcvrTel2(request.getParameter("rcvr_tel2"));
payVO.setRcvrZipx(request.getParameter("rcvr_zipx"));
payVO.setRcvrAdd1(request.getParameter("rcvr_add1"));
payVO.setRcvrAdd2(request.getParameter("rcvr_add2"));
payVO.setDeliTerm(request.getParameter("deli_term"));
payVO.setBaskCntx(request.getParameter("bask_cntx"));
payVO.setGoodInfo(request.getParameter("good_info"));*/
log.debug("payVO => {} ", new Gson().toJson(payVO)); log.debug("payVO => {} ", new Gson().toJson(payVO));
String resCd = request.getParameter("res_cd"); String resCd = request.getParameter("res_cd");
@@ -1243,6 +1387,176 @@ public class OrdrController {
return "sopmal/ordr/OrdrRspnsTossPayR"; return "sopmal/ordr/OrdrRspnsTossPayR";
} }
/**
* 키움 결제 연계 전 getEnc 값 받아오기
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@ResponseBody
@RequestMapping(value="/kiwoomPayGetEnc")
public Map<String, Object> selectKiwoomGetEnc(HttpServletRequest request) throws Exception {
BOPayVO payVO = new BOPayVO();
log.debug("kiwoomPayGetEnc = {}");
//String eucKrStr = new String(utf8Str.getBytes("UTF-8"), "EUC-KR");
//String utf8Str = new String(eucKrStr.getBytes("EUC-KR"), "UTF-8");
//request.setCharacterEncoding("EUC-KR");
payVO.setCpId(request.getParameter("CPID"));
payVO.setPayMethod(request.getParameter("PAYMETHOD"));
payVO.setOrderId(request.getParameter("ORDERNO"));
payVO.setType(request.getParameter("TYPE"));
payVO.setAmount(request.getParameter("AMOUNT"));
Map<String, Object> message;
String sopmalCd = payVO.getSopmalCd();
try {
message = payService.insertKiwoomPay(payVO);
} catch (Exception e) {
message = new HashMap<>() {{
put("response", "결제를 실패하였습니다.\n관리자에게 문의하시기 바랍니다.");
}};
}
log.info("insertKiwoomPay step5 ::: {}", message.get("KIWOOM_ENC"));
return message;
}
/**
* 키움 결제 연계처리 - 사전 승인 후 결제요청 페이지 이동
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/kiwoomPayPreSuccss")
public String confirmKiwoom(HttpServletRequest request, ModelMap model) throws Exception {
return "sopmal/ordr/OrdrReqstKiwoomPreR";
}
/**
* 키움 결제 연계처리 - 결제창 취소버튼 클릭 시 페이지 이동
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/kiwoomPayCancelUrl")
public String cancelUrlKiwoom(HttpServletRequest request, ModelMap model) throws Exception {
return "sopmal/ordr/OrdrReqstKiwoomCnclR";
}
/**
* 사용자 > 상품 > 구매/결제 > 회원구매하기 > 키움 결제 정보 등록
* @param model
* @param request
* @return OrdrRspnsKiwoomPayR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertKiwoomSetle")
public String insertKiwoomSetle(ModelMap model, HttpServletRequest request) {
log.info("insertKiwoomSetle controller start ::: ");
BOPayVO payVO = new BOPayVO();
payVO.setOrderId(request.getParameter("ordrInnb"));
payVO.setAmount(request.getParameter("setleAmt"));
payVO.setSopmalCd(request.getParameter("sopmalCd"));
payVO.setMbrInnb(request.getParameter("mbrInnb"));
payVO.setMbrId(request.getParameter("mbrId"));
payVO.setSesionId(request.getParameter("sesionId"));
payVO.setPgCmpnyNm(request.getParameter("pgCmpnyNm"));
payVO.setSetleTyCd(request.getParameter("setleTyCd"));
String ordrrNm = request.getParameter("ordrrNm");
try {
payVO.setSetlerNm(new String(Base64.getDecoder().decode(ordrrNm), "UTF-8"));
}catch(Exception e){
log.debug("throws UnsupportedEncodingException:::::");
}
log.info("insertKiwoomSetle controller payVO 3 ::: {}", payVO);
String agentId = "";
String jSesionId = "";
String ipAdres = "";
// 쿠키를 가져옴
Cookie[] cookies = request.getCookies();
//agentId 쿠키 있을 경우 가져옴
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("JSESSIONID")) {
jSesionId = cookie.getValue();
payVO.setSessionId(jSesionId);
}
}
}
//gc_agent_id 가져옴
if (CookieUtil.hasAgentCookie(request.getCookies())) {
agentId = CookieUtil.getAgentCookieValue(request.getCookies());
payVO.setAgentId(agentId);
}
Map<String, String> util = new HashMap<>();
util = utilClass.getRequestInfo(request);
ipAdres = util.get("XForwardedFor");
payVO.setIpAdres(ipAdres);
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
payVO.setMbrNm(user.getMbrNm()); //회원명(관리자명)
if ("01".equals(user.getSysDvCd())) {
payVO.setDvCd("01");
payVO.setSopmalCd(user.getSopmalCd());
payVO.setMbrDvCd(user.getMbrDvCd());
} else {
payVO.setDvCd("02");
}
Map<String, Object> content;
try {
content = service.insertKiwoomSetle(payVO);
log.info("insertKiwoomSetle controller content ::: {}", content);
} catch (WnbtRestException wre) {
log.info("insertKiwoomSetle : 키움 결제 정보 등록 : 실패 WnbtRestException");
log.error(wre.getMessage(), wre);
content = new HashMap<>() {{
put("status", "1");
put("message", wre.getMessage());
}};
} catch (Exception e) {
log.info("insertKiwoomSetle : 키움 결제 정보 등록 : 실패");
log.error(e.getMessage(), e);
content = new HashMap<>() {{
put("status", "1");
put("message", "키움 결제 정보 등록이 실패하였습니다.\n관리자에게 문의하시기 바랍니다.");
}};
}
if ("0".equals(content.get("status"))) {
commonOrderPostProcess(payVO);
}
model.addAttribute("data", content);
model.addAttribute("paramVO", payVO);
return "sopmal/ordr/OrdrRspnsKiwoomPayR";
}
/** /**
* 사용자 > 상품 > 구매/결제 > 회원구매하기 > 주문완료 화면 이동 * 사용자 > 상품 > 구매/결제 > 회원구매하기 > 주문완료 화면 이동
* @return OrdrComptR.jsp * @return OrdrComptR.jsp
@@ -2612,7 +2926,21 @@ public class OrdrController {
// 2.가용재고수량 수정 ============================================================== // 2.가용재고수량 수정 ==============================================================
try { try {
boGoodsService.updateOrdrUsefulInvntryQy(orderVO); BOOrdrVO ordrVO = new BOOrdrVO();
ordrVO.setOrdrInnb(orderVO.getOrdrInnb().toString());
ordrVO.setSopmalCd(orderVO.getSopmalCd());
DataMap ordrDtl = (DataMap) service.selectOrdrDtlInqire(ordrVO).get("dtl");
boolean subsvcAt = "Y".equals(ordrDtl.get("subsvcAt"));
// 구독서비스 여부(subsvcAt)에 따라 재고 처리 로직을 분기
if(subsvcAt) {
// 구독서비스
ordrVO.setSubsvcInnb(ordrDtl.get("subsvcInnb").toString());
subsvcService.updateSubsvcOrdrUsefulInvntryQy(ordrVO);
} else {
// 일반 주문
boGoodsService.updateOrdrUsefulInvntryQy(orderVO);
}
} catch (Exception e) { } catch (Exception e) {
logVO.setFailContent("상품 재고수량 업데이트 실패"); logVO.setFailContent("상품 재고수량 업데이트 실패");
log.error("{} 상품 재고수량 업데이트 실패!", payVO.getOrderId()); log.error("{} 상품 재고수량 업데이트 실패!", payVO.getOrderId());
@@ -2980,6 +3308,8 @@ public class OrdrController {
List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList"); // 상품정보 List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList"); // 상품정보
LinkedHashMap enuri = null; LinkedHashMap enuri = null;
LinkedHashMap setle = null; LinkedHashMap setle = null;
// 구독서비스 여부
Boolean isSubsvc = goodsList.get(0).containsKey("subsvcInnb");
//회원일 경우에만 enuri정보 존재 //회원일 경우에만 enuri정보 존재
if(user.getUserInnb() > 0){ if(user.getUserInnb() > 0){
@@ -3008,6 +3338,7 @@ public class OrdrController {
return content; return content;
} }
} else { } else {
// 여러곳배송처럼 처리하더라도 주소는 하나이므로 shipping 체크
if (CollectionUtils.isEmpty(shipping)) { if (CollectionUtils.isEmpty(shipping)) {
log.info("배송지 정보를 찾을 수 없습니다."); log.info("배송지 정보를 찾을 수 없습니다.");
content.put("result","Y"); content.put("result","Y");
@@ -3024,8 +3355,7 @@ public class OrdrController {
return content; return content;
} }
if (!isSubsvc && CollectionUtils.isEmpty(enuri)) {
if (CollectionUtils.isEmpty(enuri)) {
log.info("할인 또는 결제 정보를 찾을 수 없습니다."); log.info("할인 또는 결제 정보를 찾을 수 없습니다.");
content.put("result","Y"); content.put("result","Y");
content.put("message", "할인 또는 결제 정보를 찾을 수 없습니다."); content.put("message", "할인 또는 결제 정보를 찾을 수 없습니다.");
@@ -3035,7 +3365,7 @@ public class OrdrController {
String sopmalCd = (String) param.get("sopmalCd"); String sopmalCd = (String) param.get("sopmalCd");
String ordrTyCd = (String) param.get("ordrTyCd"); String ordrTyCd = (String) param.get("ordrTyCd");
String mbrInnb = (String) goodsList.get(0).get("mbrInnb"); String mbrInnb = String.valueOf(goodsList.get(0).get("mbrInnb"));
String mbrDvCd = (String) goodsList.get(0).get("mbrDvCd"); String mbrDvCd = (String) goodsList.get(0).get("mbrDvCd");
String ordrrMbtlnb = (String) purchsr.get("mbtlnb"); String ordrrMbtlnb = (String) purchsr.get("mbtlnb");
@@ -3169,17 +3499,27 @@ public class OrdrController {
try { try {
//계산결과 총결제금액 //계산결과 총결제금액
String resultSetleAmt = ""; String resultSetleAmt = "";
String resultWonSetleAmt = "";
//주문요청 총결제금액 //주문요청 총결제금액
//회원/비회원 총결제금액 //회원/비회원 총결제금액
String reqSetleAmt = StringUtil.isNullToString(setle.get("rlSetleAmt")); String reqSetleAmt = StringUtil.isNullToString(setle.get("rlSetleAmt"));
String reqWonSetleAmt = StringUtil.isNullToString(setle.get("wonRlSetleAmt"));
//재계산된 총결제금액관련정보 //재계산된 총결제금액관련정보
Map<String, Object> resultAmt = service.selectSetleExpectAmt(param); Map<String, Object> resultAmt;
if(isSubsvc) {
resultAmt = service.selectSubsvcSetleExpectAmt(param);
} else {
resultAmt = service.selectSetleExpectAmt(param);
}
if(resultAmt.containsKey("setleExpectAmt")){ if(resultAmt.containsKey("setleExpectAmt")){
LinkedHashMap setleExpectAmt = (LinkedHashMap) resultAmt.get("setleExpectAmt"); LinkedHashMap setleExpectAmt = (LinkedHashMap) resultAmt.get("setleExpectAmt");
if(setleExpectAmt.containsKey("setleAmt")){ if(setleExpectAmt.containsKey("setleAmt")){
resultSetleAmt = StringUtil.isNullToString(setleExpectAmt.get("setleAmt")); resultSetleAmt = StringUtil.isNullToString(setleExpectAmt.get("setleAmt"));
} }
if(setleExpectAmt.containsKey("setleAmtKr")){
resultWonSetleAmt = StringUtil.isNullToString(setleExpectAmt.get("setleAmtKr"));
}
//주문요청의 총결제금액과 계산된 총결제금액이 서로 다를 경우 //주문요청의 총결제금액과 계산된 총결제금액이 서로 다를 경우
if(!resultSetleAmt.equals(reqSetleAmt) if(!resultSetleAmt.equals(reqSetleAmt)
@@ -3188,6 +3528,13 @@ public class OrdrController {
content.put("result", "Y"); content.put("result", "Y");
content.put("message", PurchsValidCode.purchsValidMsg("setleAmt")); content.put("message", PurchsValidCode.purchsValidMsg("setleAmt"));
} }
if(!resultWonSetleAmt.equals(reqWonSetleAmt)
&& StringUtils.hasText(reqWonSetleAmt)
&& StringUtils.hasText(resultWonSetleAmt)){
content.put("result", "Y");
content.put("message", PurchsValidCode.purchsValidMsg("setleAmt"));
}
} }
} catch (WnbtRestException wre) { } catch (WnbtRestException wre) {
log.error(wre.getMessage()); log.error(wre.getMessage());

View File

@@ -4,9 +4,7 @@ import java.io.*;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Base64; import java.util.*;
import java.util.HashMap;
import java.util.Map;
import com.wb.domainserver.domain.gcone.ordr.pay.service.BOPayService; import com.wb.domainserver.domain.gcone.ordr.pay.service.BOPayService;
import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO; import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO;
@@ -22,9 +20,7 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.sopmal.ordr.vo.PayVO; import com.wb.domainserver.domain.sopmal.ordr.vo.PayVO;
@@ -630,4 +626,173 @@ public class PayController {
return message; return message;
} }
/* *********************************************
* 키움결제
********************************************* */
/**
* 키움 결제 화면
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectKiwoomSample")
public String selectKiwoonPay(ModelMap model) throws Exception {
log.debug("selectKiwoonPay = {}");
return "sopmal/ordr/PayKiwoomPayC";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectKiwoomApiSample")
public String selectKiwoonPay2(ModelMap model) throws Exception {
log.debug("selectKiwoonPay = {}");
return "sopmal/ordr/PayKiwoomPay2C";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectKiwoomTotalSample")
public String selectKiwoonPayTotal(ModelMap model) throws Exception {
log.debug("selectKiwoonPay = {}");
return "sopmal/ordr/PayKiwoomPayTotalC";
}
/**
* 키움 결제 연계 전 getEnc 값 받아오기
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@ResponseBody
@RequestMapping(value="/kiwoomPayGetEnc")
public Map<String, Object> selectKiwoomGetEnc(HttpServletRequest request) throws Exception {
BOPayVO payVO = new BOPayVO();
log.debug("kiwoomPayGetEnc = {}");
//String eucKrStr = new String(utf8Str.getBytes("UTF-8"), "EUC-KR");
//String utf8Str = new String(eucKrStr.getBytes("EUC-KR"), "UTF-8");
//request.setCharacterEncoding("EUC-KR");
payVO.setCpId(request.getParameter("CPID"));
payVO.setPayMethod(request.getParameter("PAYMETHOD"));
payVO.setOrderId(request.getParameter("ORDERNO"));
payVO.setType(request.getParameter("TYPE"));
payVO.setAmount(request.getParameter("AMOUNT"));
Map<String, Object> message;
String sopmalCd = payVO.getSopmalCd();
try {
message = service.insertKiwoomPay(payVO);
} catch (Exception e) {
message = new HashMap<>() {{
put("response", "결제를 실패하였습니다.\n관리자에게 문의하시기 바랍니다.");
}};
}
log.info("insertKiwoomPay step5 ::: {}", message.get("KIWOOM_ENC"));
//model.addAttribute("message", message);
//return "sopmal/ordr/PayKiwoomSucsC";
return message;
}
/**
* 키움 결제 연계처리 - 성공결과페이지
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/kiwoomPaySuccss")
public String confirmPaymentKiwoom(HttpServletRequest request, ModelMap model) throws Exception {
System.out.println("성공결과페이지 ::: "+request.getQueryString());
BOPayVO payVO = new BOPayVO();
payVO.setCode(request.getParameter("RESULTCODE"));
payVO.setOrderId(request.getParameter("ORDERNO"));
payVO.setAmount(request.getParameter("AMOUNT"));
payVO.setPayMethod(request.getParameter("PAYMETHOD"));
Map<String, Object> message = new HashMap<>();
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", payVO.getCode());
jsonObject.put("orderId", payVO.getOrderId());
jsonObject.put("amount", payVO.getAmount());
jsonObject.put("payMethod", payVO.getPayMethod());
message.put("response",jsonObject.toString());
model.addAttribute("message", message);
return "sopmal/ordr/PayKiwoomSucsC";
}
/**
* 키움 결제취소 화면
* @return PayKiwoomModC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectKiwoomCancelSample")
public String selectKiwoomCancel(ModelMap model) throws Exception {
log.debug("selectKiwoomCancel = {}");
return "sopmal/ordr/PayKiwoomModC";
}
/**
* 키움 결제 연계처리 - 결체취소결과페이지
* @return PayKiwoomSucsC.jsp
* @author 이경숙
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/kiwoomPayCancel")
public String confirmCancelKiwoom(HttpServletRequest request, ModelMap model) throws Exception {
System.out.println("취소데이터 수신 ::: "+request.getQueryString());
Map<String, Object> setleCancelResultMessage = new HashMap<>();
Map<String, Object> responseMap = new HashMap<>();
BOPayVO payVO = new BOPayVO();
payVO.setSopmalCd("SK");
payVO.setOrderId(request.getParameter("ORDERNO"));
payVO.setCancelAmount(request.getParameter("AMOUNT"));
payVO.setPayMethod(request.getParameter("PAYMETHOD"));
payVO.setTno(request.getParameter("TRXID"));
payVO.setCancelReason(request.getParameter("CANCELREASON"));
payVO.setSetleTyCd("01");
payVO.setPgCmpnyNm("kiwoom");
log.debug("confirmCancelKiwoom step1 payVO :::> {}", payVO);
Map<String, Object> message = new HashMap<>();
setleCancelResultMessage = service.cancelKiwoomPay(payVO);
String responseStr = (String) setleCancelResultMessage.get("response");
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(responseStr);
jsonObject.put("orderId", payVO.getOrderId());
jsonObject.put("amount", payVO.getAmount());
jsonObject.put("payMethod", payVO.getPayMethod());
jsonObject.put("code", jsonObject.get("RESULTCODE"));
message.put("response",jsonObject.toString());
model.addAttribute("message", message);
return "sopmal/ordr/PayKiwoomSucsC";
}
} }

View File

@@ -41,9 +41,12 @@ public class OrdrVO extends AbstractVO {
/** 실패 메세지 */ /** 실패 메세지 */
private String message; private String message;
/*결제 플랫폼 타입 코드*/ /** 결제 플랫폼 타입 코드*/
private String setlePltfomTyCd; private String setlePltfomTyCd;
/*주문유형*/ /** 주문유형*/
private String ordrTyCd; private String ordrTyCd;
/** 구독서비스 고유번호*/
private String subsvcInnb;
} }

View File

@@ -371,7 +371,9 @@ public class MngrLoggingInterceptor implements HandlerInterceptor {
String cookieValue = agentId + ":" + md5(agentId + ":" + md5(System.currentTimeMillis() + ":" + random.nextInt())).substring(5, 10); String cookieValue = agentId + ":" + md5(agentId + ":" + md5(System.currentTimeMillis() + ":" + random.nextInt())).substring(5, 10);
Cookie agentIdCookie = new Cookie("agent_id", cookieValue); Cookie agentIdCookie = new Cookie("agent_id", cookieValue);
agentIdCookie.setMaxAge(86400 * 365 * 10); // 10년 agentIdCookie.setMaxAge(86400 * 365 * 10); // 10년
agentIdCookie.setDomain(domain); if (!request.getServerName().startsWith("loc.")) {
agentIdCookie.setDomain(domain);
}
// agentIdCookie.setHttpOnly(true); // agentIdCookie.setHttpOnly(true);
agentIdCookie.setPath("/mngr"); agentIdCookie.setPath("/mngr");
// agentIdCookie.setSecure(true); // agentIdCookie.setSecure(true);

View File

@@ -57,7 +57,7 @@ import java.util.stream.Collectors;
import static org.springframework.beans.factory.config.BeanDefinition.ROLE_INFRASTRUCTURE; import static org.springframework.beans.factory.config.BeanDefinition.ROLE_INFRASTRUCTURE;
@EnableWebSecurity(debug = true) @EnableWebSecurity
@Configuration @Configuration
//@EnableMethodSecurity //@EnableMethodSecurity
public class ResourceServerConfig { public class ResourceServerConfig {

View File

@@ -51,14 +51,17 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
String accessToken = extractToken(request); String accessToken = extractToken(request);
String sysDvCd = RealmContextHolder.getSysDvCdRealm();
String expireChk = request.getParameter("expire"); String expireChk = request.getParameter("expire");
String tokenExpireCookie = CookieUtils.getCookieValue("token_expire", request); String tokenExpireCookie = CookieUtils.getCookieValue("token_expire", request);
//사용자이면서 ACT가 없는데 tokenExpire는 있을 경우 //사용자이면서 ACT가 없는데 tokenExpire는 있을 경우
//로그인된 사용자지만 엑세스 토큰이 만료되어 다시 재발급 받아야 하는 대상 //로그인된 사용자지만 엑세스 토큰이 만료되어 다시 재발급 받아야 하는 대상
//expire값은 루프 요청 방지 //인증 진입점은 만료 쿠키가 남아 있어도 갱신 대상으로 보내지 않는다.
if("01".equals(sysDvCd) && !StringUtils.hasText(accessToken) && StringUtils.hasText(tokenExpireCookie) && !"p".equals(expireChk)){ //쿠키 삭제가 지연되거나 이전 경로의 쿠키가 남아도 로그인 화면까지는 항상 도달해야 한다.
if(!isAuthenticationEndpoint(requestUri, realm)
&& !StringUtils.hasText(accessToken)
&& StringUtils.hasText(tokenExpireCookie)
&& !"p".equals(expireChk)){
response.sendRedirect("/"+realm+"/tokens/refresh?redirect_uri=%s&expire=%s".formatted(URLEncoder.encode(UrlExtractor.getOriginalURL(request), StandardCharset.UTF_8), "p")); response.sendRedirect("/"+realm+"/tokens/refresh?redirect_uri=%s&expire=%s".formatted(URLEncoder.encode(UrlExtractor.getOriginalURL(request), StandardCharset.UTF_8), "p"));
return; return;
@@ -66,7 +69,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
// accessToken이 있고 refresh Token 요청이 아닌경우 // accessToken이 있고 refresh Token 요청이 아닌경우
if (StringUtils.hasText(accessToken) && !requestUri.contains("/tokens/refresh")) { if (StringUtils.hasText(accessToken) && !isAuthenticationEndpoint(requestUri, realm)) {
UserDetails userDetails = customUserDetailService.loadUserByUsername(accessToken); UserDetails userDetails = customUserDetailService.loadUserByUsername(accessToken);
if (userDetails != null) { if (userDetails != null) {
log.debug("user details: {}", userDetails); log.debug("user details: {}", userDetails);
@@ -92,6 +95,15 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
} }
private boolean isAuthenticationEndpoint(String requestUri, String realm) {
String realmPath = "/" + realm;
return requestUri.equals(realmPath)
|| requestUri.startsWith(realmPath + "/login")
|| requestUri.equals(realmPath + "/logout")
|| requestUri.startsWith(realmPath + "/tokens/refresh");
}
private String extractToken(HttpServletRequest request) { private String extractToken(HttpServletRequest request) {

View File

@@ -44,9 +44,12 @@ public abstract class CookieUtils {
Cookie cookie = new Cookie(name, null); Cookie cookie = new Cookie(name, null);
cookie.setMaxAge(0); cookie.setMaxAge(0);
cookie.setPath(path); cookie.setPath(path);
cookie.setDomain(originHost); setCookieDomain(cookie, request, originHost);
cookie.setHttpOnly(true); cookie.setHttpOnly(true);
response.addCookie(cookie); response.addCookie(cookie);
// loc 환경에서는 이전에 상위 도메인으로 저장된 쿠키도 함께 삭제한다.
deleteLegacyDomainCookie(name, path, request, response, originHost);
} }
public static void createCookie(String name, String value, String path, int maxAge, boolean httpOnly, HttpServletRequest request, HttpServletResponse response) { public static void createCookie(String name, String value, String path, int maxAge, boolean httpOnly, HttpServletRequest request, HttpServletResponse response) {
@@ -58,10 +61,12 @@ public abstract class CookieUtils {
String originHost = UrlExtractor.getOriginalHost(host); String originHost = UrlExtractor.getOriginalHost(host);
deleteLegacyDomainCookie(name, path, request, response, originHost);
Cookie cookie = new Cookie(name, value); Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(maxAge); cookie.setMaxAge(maxAge);
cookie.setPath(path); cookie.setPath(path);
cookie.setDomain(originHost); setCookieDomain(cookie, request, originHost);
cookie.setHttpOnly(httpOnly); cookie.setHttpOnly(httpOnly);
response.addCookie(cookie); response.addCookie(cookie);
} }
@@ -77,7 +82,7 @@ public abstract class CookieUtils {
Cookie cookie = new Cookie(name, value); Cookie cookie = new Cookie(name, value);
cookie.setPath(path); cookie.setPath(path);
cookie.setDomain(originHost); setCookieDomain(cookie, request, originHost);
cookie.setHttpOnly(httpOnly); cookie.setHttpOnly(httpOnly);
response.addCookie(cookie); response.addCookie(cookie);
} }
@@ -96,4 +101,30 @@ public abstract class CookieUtils {
return Map.of("ACTPath", ACTPath, "RFTPath", RFTPath); return Map.of("ACTPath", ACTPath, "RFTPath", RFTPath);
} }
private static void setCookieDomain(Cookie cookie, HttpServletRequest request, String domain) {
if (!request.getServerName().startsWith("loc.")) {
cookie.setDomain(domain);
}
}
private static void deleteLegacyDomainCookie(String name, String path, HttpServletRequest request, HttpServletResponse response, String domain) {
if (request.getServerName().startsWith("loc.")) {
addDomainDeleteCookie(name, path, domain, response);
int firstDot = domain.indexOf('.');
if (firstDot > 0) {
addDomainDeleteCookie(name, path, domain.substring(firstDot + 1), response);
}
}
}
private static void addDomainDeleteCookie(String name, String path, String domain, HttpServletResponse response) {
Cookie domainCookie = new Cookie(name, null);
domainCookie.setMaxAge(0);
domainCookie.setPath(path);
domainCookie.setDomain(domain);
domainCookie.setHttpOnly(true);
response.addCookie(domainCookie);
}
} }

View File

@@ -310,8 +310,13 @@ public class FileStorageService {
if(image != null) { if(image != null) {
thumbnail = image.getScaledInstance(destWidth, destHeight, Image.SCALE_SMOOTH); thumbnail = image.getScaledInstance(destWidth, destHeight, Image.SCALE_SMOOTH);
} }
BufferedImage convertImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB); BufferedImage convertImage = new BufferedImage(destWidth, destHeight, getImageType(image, file.getOriginalFilename()));
convertImage.getGraphics().drawImage(thumbnail, posX, posY, null); Graphics graphics = convertImage.getGraphics();
try {
graphics.drawImage(thumbnail, posX, posY, null);
} finally {
graphics.dispose();
}
String ext = FilenameUtils.getExtension(file.getOriginalFilename()); String ext = FilenameUtils.getExtension(file.getOriginalFilename());
ImageIO.write(convertImage, ext, os); ImageIO.write(convertImage, ext, os);
@@ -376,8 +381,13 @@ public class FileStorageService {
if(image != null) { if(image != null) {
thumbnail = image.getScaledInstance(destWidth, destHeight, Image.SCALE_SMOOTH); thumbnail = image.getScaledInstance(destWidth, destHeight, Image.SCALE_SMOOTH);
} }
BufferedImage convertImage = new BufferedImage(thumbnailWidth, thumbnailHeight, BufferedImage.TYPE_INT_RGB); BufferedImage convertImage = new BufferedImage(thumbnailWidth, thumbnailHeight, getImageType(image, file.getOriginalFilename()));
convertImage.getGraphics().drawImage(thumbnail, posX, posY, null); Graphics graphics = convertImage.getGraphics();
try {
graphics.drawImage(thumbnail, posX, posY, null);
} finally {
graphics.dispose();
}
ImageIO.write(convertImage, ext, os); ImageIO.write(convertImage, ext, os);
}catch (WnbtRestException wre){ }catch (WnbtRestException wre){
@@ -407,6 +417,14 @@ public class FileStorageService {
return thumbnail_file; return thumbnail_file;
} }
private int getImageType(BufferedImage image, String originalFileName) {
String ext = FilenameUtils.getExtension(originalFileName).toLowerCase(Locale.ROOT);
boolean supportsAlpha = "png".equals(ext) || "gif".equals(ext);
return image != null && image.getColorModel().hasAlpha() && supportsAlpha
? BufferedImage.TYPE_INT_ARGB
: BufferedImage.TYPE_INT_RGB;
}
/** /**
* combineFilePath 에 지정된 경로에 저장이 됨 * combineFilePath 에 지정된 경로에 저장이 됨
@@ -715,4 +733,4 @@ public class FileStorageService {
return rtnStr; return rtnStr;
} }
} }

View File

@@ -58,7 +58,7 @@ spring:
gcone: gcone:
hikari: hikari:
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://115.68.176.232:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false 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 username: sakeone
password: dnlfxjtm13@$ password: dnlfxjtm13@$
minimumIdle: 1 minimumIdle: 1
@@ -66,11 +66,11 @@ spring:
idleTimeout: 30000 #30초 idleTimeout: 30000 #30초
maxLifetime: 1800000 #30분 maxLifetime: 1800000 #30분
connectionTimeout: 30000 connectionTimeout: 30000
poolName: gconedDevPool poolName: SakeDevPool
sure: sure:
hikari: hikari:
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://115.68.176.232:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false 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 username: sakeone
password: dnlfxjtm13@$ password: dnlfxjtm13@$
minimumIdle: 1 minimumIdle: 1
@@ -85,7 +85,7 @@ spring:
show-sql: true show-sql: true
servlet: servlet:
multipart: multipart:
max-file-size: 10MB max-file-size: 15MB
max-request-size: -1 max-request-size: -1
mybatis: mybatis:
@@ -111,7 +111,7 @@ sopmalfo:
rtrn: /data/gcone/rtrnFile rtrn: /data/gcone/rtrnFile
extensions: extensions:
images: .gif,.jpg,.jpeg,.png images: .gif,.jpg,.jpeg,.png
cdnurl: http://dev.img.soju1sake1.com cdnurl: https://19d28cf7178139ad.kinxzone.com
pagination: pagination:
@@ -353,11 +353,11 @@ mngrfo:
fileupload: fileupload:
uploaddirs: uploaddirs:
goods: C:/file/temp goods: C:/file/temp
doc: /docFile doc: /data/gcone/docFile
web: /webFile web: /data/gcone/webFile
extensions: extensions:
images: .gif,.jpg,.jpeg,.png images: .gif,.jpg,.jpeg,.png
cdnurl: http://dev.img.soju1sake1.com cdnurl: https://19d28cf7178139ad.kinxzone.com
subsvc: subsvc:
dft-goods-optn-innb: 5 dft-goods-optn-innb: 5
@@ -365,9 +365,12 @@ mngrfo:
secret: secret:
key: 1df5be2f7e90ae36 key: 1df5be2f7e90ae36
aciexpress:
apikey: DC94F29AFD5399F54AAE7FAA46045B65
host: host:
img: http://dev.img.soju1sake1.com img: https://19d28cf7178139ad.kinxzone.com
naverpay: naverpay:
order: order:
@@ -380,7 +383,7 @@ naverpay:
real-url: https://pay.naver.com real-url: https://pay.naver.com
mail: mail:
host: mail.sake1jan.com host: 10.2.1.76
port: 587 port: 587
username: custom@sake1jan.com username: custom@sake1jan.com
password: mail13@$ password: mail13@$
@@ -420,7 +423,7 @@ bankda:
css-cours : css/theme/themeAF.css css-cours : css/theme/themeAF.css
#선물하기 URL #선물하기 URL
presenturl : dev.svc.soju1sake1.com presenturl : devsvc.soju1sake1.com
# 출고 택배사 구분 EXPORT, (택배사 구분코드 HDRYCPN) # 출고 택배사 구분 EXPORT, (택배사 구분코드 HDRYCPN)
# 송장번호 %INVCNB% 치환 # 송장번호 %INVCNB% 치환
@@ -449,6 +452,6 @@ api:
DATA_ENCRYPT_AES_KEY: "Z8zKbHyMKn+iwD3O0PLT9g==" DATA_ENCRYPT_AES_KEY: "Z8zKbHyMKn+iwD3O0PLT9g=="
currency-unit: currency-unit:
default: 円(엔) default: 円
JP: 円(엔) JP: 円
KR: 원 KR: 원

View File

@@ -58,7 +58,7 @@ spring:
gcone: gcone:
hikari: hikari:
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://115.68.176.232:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false 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 username: sakeone
password: dnlfxjtm13@$ password: dnlfxjtm13@$
minimumIdle: 1 minimumIdle: 1
@@ -66,11 +66,11 @@ spring:
idleTimeout: 30000 #30초 idleTimeout: 30000 #30초
maxLifetime: 1800000 #30분 maxLifetime: 1800000 #30분
connectionTimeout: 30000 connectionTimeout: 30000
poolName: gconedDevPool poolName: SakeDevPool
sure: sure:
hikari: hikari:
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://115.68.176.232:3306/sake?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=yes&verifyServerCertificate=false 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 username: sakeone
password: dnlfxjtm13@$ password: dnlfxjtm13@$
minimumIdle: 1 minimumIdle: 1
@@ -85,7 +85,7 @@ spring:
show-sql: true show-sql: true
servlet: servlet:
multipart: multipart:
max-file-size: 10MB max-file-size: 15MB
max-request-size: -1 max-request-size: -1
mybatis: mybatis:
@@ -111,7 +111,7 @@ sopmalfo:
rtrn: /data/gcone/rtrnFile rtrn: /data/gcone/rtrnFile
extensions: extensions:
images: .gif,.jpg,.jpeg,.png images: .gif,.jpg,.jpeg,.png
cdnurl: https://19b0bde6dcdc15ad.kinxzone.com cdnurl: https://19d28cf7178139ad.kinxzone.com
pagination: pagination:
@@ -357,17 +357,20 @@ mngrfo:
web: /data/gcone/webFile web: /data/gcone/webFile
extensions: extensions:
images: .gif,.jpg,.jpeg,.png images: .gif,.jpg,.jpeg,.png
cdnurl: https://19b0bde6dcdc15ad.kinxzone.com cdnurl: https://19d28cf7178139ad.kinxzone.com
upurl: https://www.soju1sake1.com # upurl: https://www.soju1sake1.com
subsvc: subsvc:
dft-goods-optn-innb: 5 dft-goods-optn-innb: 5
secret: secret:
key: 1df5be2f7e90ae36 key: 1df5be2f7e90ae36
aciexpress:
apikey: DC94F29AFD5399F54AAE7FAA46045B65
host: host:
img: https://19b0bde6dcdc15ad.kinxzone.com/ img: https://19d28cf7178139ad.kinxzone.com
naverpay: naverpay:
order: order:
@@ -380,7 +383,7 @@ naverpay:
real-url: https://pay.naver.com real-url: https://pay.naver.com
mail: mail:
host: mail.sake1jan.com host: 10.2.1.76
port: 587 port: 587
username: custom@sake1jan.com username: custom@sake1jan.com
password: mail13@$ password: mail13@$
@@ -420,7 +423,7 @@ bankda:
css-cours : css/theme/themeAF.css css-cours : css/theme/themeAF.css
#선물하기 URL #선물하기 URL
presenturl : dev.svc.gcone.co.kr presenturl : devsvc.soju1sake1.com
# 출고 택배사 구분 EXPORT, (택배사 구분코드 HDRYCPN) # 출고 택배사 구분 EXPORT, (택배사 구분코드 HDRYCPN)
# 송장번호 %INVCNB% 치환 # 송장번호 %INVCNB% 치환
@@ -449,6 +452,6 @@ api:
DATA_ENCRYPT_AES_KEY: "Z8zKbHyMKn+iwD3O0PLT9g==" DATA_ENCRYPT_AES_KEY: "Z8zKbHyMKn+iwD3O0PLT9g=="
currency-unit: currency-unit:
default: 円(엔) default: 円
JP: 円(엔) JP: 円
KR: 원 KR: 원

View File

@@ -85,7 +85,7 @@ spring:
show-sql: true show-sql: true
servlet: servlet:
multipart: multipart:
max-file-size: 10MB max-file-size: 15MB
max-request-size: -1 max-request-size: -1
mybatis: mybatis:
@@ -359,12 +359,15 @@ mngrfo:
images: .gif,.jpg,.jpeg,.png images: .gif,.jpg,.jpeg,.png
cdnurl: https://19b0bde6dcdc15ad.kinxzone.com cdnurl: https://19b0bde6dcdc15ad.kinxzone.com
subsvc: subsvc:
dft-goods-optn-innb: 5 dft-goods-optn-innb: 1
secret: secret:
key: 1df5be2f7e90ae36 key: 1df5be2f7e90ae36
aciexpress:
apikey: DC94F29AFD5399F54AAE7FAA46045B65
host: host:
img: https://19b0bde6dcdc15ad.kinxzone.com/ img: https://19b0bde6dcdc15ad.kinxzone.com/
@@ -437,11 +440,11 @@ ordr:
# 서치어드바이저 소유권 코드 # 서치어드바이저 소유권 코드
meta-content: meta-content:
google: google:
LR: "" SK: "6RUF9UIWIu1nl1WlceNKH25YZG13jcEZHURfLrbSxQU"
naver: naver:
LR: "5fcdb284f18ca08cf86af214a01998990c008e84" SK: "213a2c785853cdd006af58d286ffec23342a0e8a"
facebook: facebook:
LR: "" SK: ""
# 결제 api 사용 암호 key # 결제 api 사용 암호 key
api: api:
@@ -449,6 +452,6 @@ api:
DATA_ENCRYPT_AES_KEY: "Z8zKbHyMKn+iwD3O0PLT9g==" DATA_ENCRYPT_AES_KEY: "Z8zKbHyMKn+iwD3O0PLT9g=="
currency-unit: currency-unit:
default: 円(엔) default: 円
JP: 円(엔) JP: 円
KR: 원 KR: 원

View File

@@ -769,4 +769,122 @@
SELECT PURCHS_REVALID_AT FROM GC_SHOP WHERE 1=1 AND SOPMAL_CD = #{sopmalCd} SELECT PURCHS_REVALID_AT FROM GC_SHOP WHERE 1=1 AND SOPMAL_CD = #{sopmalCd}
</select> </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> </mapper>

View File

@@ -947,6 +947,37 @@
SOPMAL_CD = #{sopmalCd} SOPMAL_CD = #{sopmalCd}
</update> </update>
<!-- 쇼핑몰 환율 설정 수정 -->
<update id="updateBOExchngrtSetup" parameterType="com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO" >
UPDATE
GC_SHOP
SET BUY_RATE = #{buyRate},
SELL_RATE = #{sellRate},
UPDUSR = #{updusr},
UPDT_DT = SYSDATE()
WHERE
1=1
AND
SOPMAL_CD = #{sopmalCd}
</update>
<!-- 쇼핑몰 안내문구 설정 수정 -->
<update id="updateBOGuidanceSetup" parameterType="com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO" >
UPDATE
GC_SHOP
SET JOIN_GUIDANCE_SJ = #{joinGuidanceSj},
JOIN_GUIDANCE_WORDS = #{joinGuidanceWords},
JOIN_BNEF = #{joinBnef},
JOIN_COMPT_WORDS = #{joinComptWords},
SUBSVC_GUIDANCE_WORDS = #{subsvcGuidanceWords},
UPDUSR = #{updusr},
UPDT_DT = SYSDATE()
WHERE
1=1
AND
SOPMAL_CD = #{sopmalCd}
</update>
<!-- 쇼핑몰 사업자 정보 삭제 --> <!-- 쇼핑몰 사업자 정보 삭제 -->
<delete id="deteteBOShopCompany" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO"> <delete id="deteteBOShopCompany" parameterType="com.wb.domainserver.domain.admin.sys.author.vo.BOMaAuthorVO">
@@ -1538,5 +1569,124 @@
AND GD.USE_AT = 'Y' AND GD.USE_AT = 'Y'
</select> </select>
<!-- 사이트맵 XML -->
<select id="selectSitemapXml"
parameterType="String"
resultType="dataMap">
WITH RECURSIVE CATEGORY_TREE AS (
SELECT
GC.CTGRY_ID
, GC.UPPER_CTGRY_ID
, GC.SOPMAL_CD
, GC.CTGRY_NM
, GC.CTGRY_DEPTH
, GC.SORT_ORDR
, GC.CTGRY_DV_CD
, GC.EXPSR_CD
, GC.URL_DV_CD
, CASE
WHEN GC.URL_DV_CD = '01' THEN ''
WHEN GC.URL_DV_CD = '02' THEN GC.URL
ELSE NULL
END URL
, GC.USE_AT
, GC.EXPSR_BGN_DT
, GC.EXPSR_END_DT
FROM GC_CATEGORY GC
WHERE GC.SOPMAL_CD = #{sopmalCd}
AND GC.UPPER_CTGRY_ID IS NULL
AND GC.USE_AT = 'Y'
AND (
GC.EXPSR_CD = '01'
OR (
GC.EXPSR_CD = '03'
AND SYSDATE() BETWEEN GC.EXPSR_BGN_DT AND GC.EXPSR_END_DT
)
)
UNION ALL
SELECT
CHILD.CTGRY_ID
, CHILD.UPPER_CTGRY_ID
, CHILD.SOPMAL_CD
, CHILD.CTGRY_NM
, CHILD.CTGRY_DEPTH
, CHILD.SORT_ORDR
, CHILD.CTGRY_DV_CD
, CHILD.EXPSR_CD
, CHILD.URL_DV_CD
, CASE
WHEN CHILD.URL_DV_CD = '01' THEN
CASE
WHEN CHILD.CTGRY_DV_CD = '01' THEN CONCAT('/sopmal/goods/selectGoodsListForm?ctgryId=', CHILD.CTGRY_ID)
ELSE NULL
END
WHEN CHILD.URL_DV_CD = '02' THEN CHILD.URL
ELSE NULL
END URL
, CHILD.USE_AT
, CHILD.EXPSR_BGN_DT
, CHILD.EXPSR_END_DT
FROM GC_CATEGORY CHILD
INNER JOIN CATEGORY_TREE PARENT
ON CHILD.SOPMAL_CD = PARENT.SOPMAL_CD
AND CHILD.UPPER_CTGRY_ID = PARENT.CTGRY_ID
WHERE CHILD.USE_AT = 'Y'
AND (
CHILD.EXPSR_CD = '01'
OR (
CHILD.EXPSR_CD = '03'
AND SYSDATE() BETWEEN CHILD.EXPSR_BGN_DT AND CHILD.EXPSR_END_DT
)
)
)
SELECT CONCAT(GS.PC_DOMN_ADRES, GC.URL) AS TARGET_URL
, DATE_FORMAT(SYSDATE(), '%Y-%m-%dT%H:%i:%s+09:00') AS LAST_MODIFIED
, ROUND(POWER(0.8, GC.CTGRY_DEPTH - 1), 4) AS PRIORITY
FROM CATEGORY_TREE GC
INNER JOIN GC_SHOP GS
ON GC.SOPMAL_CD = GS.SOPMAL_CD
WHERE GC.CTGRY_DV_CD != '02'
AND GC.CTGRY_DEPTH != 2
UNION
SELECT CONCAT(GS.PC_DOMN_ADRES, '/sopmal/goods/selectGoodsDtl?goodsInnb=', GG.GOODS_INNB) AS TARGET_URL
, DATE_FORMAT(GG.UPDT_DT, '%Y-%m-%dT%H:%i:%s+09:00') AS LAST_MODIFIED
, ROUND(POWER(0.8, 1), 4) AS PRIORITY
FROM GC_GOODS GG
INNER JOIN GC_SHOP GS
ON GG.SOPMAL_CD = GS.SOPMAL_CD
WHERE GG.USE_AT = 'Y'
AND GG.SOPMAL_CD = #{sopmalCd}
AND GG.GOODS_KND_CD = '01'
AND GG.EXPSR_DV_CD = '01'
AND GG.GOODS_STTUS_CD IN ('01', '02')
UNION
SELECT CONCAT(GS.PC_DOMN_ADRES, '/sopmal/csc/selectBbscttAuth?authDv=CM&amp;bbsTyCd=',
CASE
WHEN GB.BBS_ID = 'sake_column' THEN '01'
WHEN GB.BBS_ID = 'magazine' THEN '09'
ELSE NULL
END,
'&amp;bbscttInnb=', GB.BBSCTT_INNB,
'&amp;reqUrl=subPage&amp;bbsId=', GB.BBS_ID,
'&amp;cscAt='
) AS TARGET_URL
, DATE_FORMAT(GB.UPDT_DT, '%Y-%m-%dT%H:%i:%s+09:00') AS LAST_MODIFIED
, ROUND(POWER(0.8, 1), 4) AS PRIORITY
FROM GC_BOARDDATA GB
INNER JOIN GC_SHOP GS
ON GB.SOPMAL_CD = GS.SOPMAL_CD
WHERE GB.USE_AT = 'Y'
AND GB.EXPSR_AT = 'Y'
AND (
GB.NTCE_PD_SETUP_AT = 'N'
OR (
GB.NTCE_PD_SETUP_AT = 'Y'
AND DATE_FORMAT(SYSDATE(), '%Y-%m-%d') BETWEEN DATE_FORMAT(GB.NTCE_BGN_DE, '%Y-%m-%d') AND DATE_FORMAT(GB.NTCE_END_DE, '%Y-%m-%d')
)
)
AND GB.BBS_ID IN ('sake_column', 'magazine')
AND depth = 0
ORDER BY PRIORITY DESC
</select>
</mapper> </mapper>

View File

@@ -224,6 +224,7 @@
AND (FB.NTC_AT = 'N' OR (FB.NTC_AT = 'Y' AND FB.NTC_PD_SETUP_AT = 'N')) AND (FB.NTC_AT = 'N' OR (FB.NTC_AT = 'Y' AND FB.NTC_PD_SETUP_AT = 'N'))
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(serverDv, 'sopmal')"> <if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(serverDv, 'sopmal')">
<include refid="selectSopmalNtceWhere"/> <include refid="selectSopmalNtceWhere"/>
AND FB.USE_AT = 'Y'
</if> </if>
AND FB.SOPMAL_CD = #{sopmalCd} AND FB.SOPMAL_CD = #{sopmalCd}
AND FB.BBS_ID = #{bbsId} AND FB.BBS_ID = #{bbsId}
@@ -460,6 +461,7 @@
</if> </if>
<if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(serverDv, 'sopmal')"> <if test = "@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(serverDv, 'sopmal')">
<include refid="selectSopmalNtceWhere"/> <include refid="selectSopmalNtceWhere"/>
AND FB.USE_AT = 'Y'
</if> </if>
AND FB.DEPTH = 0 AND FB.DEPTH = 0
AND FB.SOPMAL_CD = #{sopmalCd} AND FB.SOPMAL_CD = #{sopmalCd}
@@ -1765,6 +1767,7 @@
,CAST(AES_DECRYPT(UNHEX(FB.ANSW_MBTLNB) , #{secretKey}) AS CHAR(50)) AS ANSW_MBTLNB ,CAST(AES_DECRYPT(UNHEX(FB.ANSW_MBTLNB) , #{secretKey}) AS CHAR(50)) AS ANSW_MBTLNB
,FB.ANSW_SMS_RECPTN ,FB.ANSW_SMS_RECPTN
,FB.SJ ,FB.SJ
,FB.RELATE_GOODS_WORDS
,FB.SORT_ORDR ,FB.SORT_ORDR
,FB.USE_AT ,FB.USE_AT
,IFNULL(FBM.MNGR_NM, '관리자') AS MNGR_NM ,IFNULL(FBM.MNGR_NM, '관리자') AS MNGR_NM
@@ -1925,6 +1928,7 @@
,CAST(AES_DECRYPT(UNHEX(FB.ANSW_MBTLNB) , #{secretKey}) AS CHAR(50)) AS ANSW_MBTLNB ,CAST(AES_DECRYPT(UNHEX(FB.ANSW_MBTLNB) , #{secretKey}) AS CHAR(50)) AS ANSW_MBTLNB
,FB.ANSW_SMS_RECPTN ,FB.ANSW_SMS_RECPTN
,FB.SJ ,FB.SJ
,FB.RELATE_GOODS_WORDS
,FB.SORT_ORDR ,FB.SORT_ORDR
,FB.USE_AT ,FB.USE_AT
,FB.CN_SCRIPT ,FB.CN_SCRIPT
@@ -2037,6 +2041,9 @@
PASSWORD, PASSWORD,
SJ, SJ,
CN, CN,
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(relateGoodsWords)">
RELATE_GOODS_WORDS,
</if>
INQIRE_CNT, INQIRE_CNT,
CM_USE_AT, CM_USE_AT,
RECOMEND_CNT, RECOMEND_CNT,
@@ -2085,6 +2092,9 @@
MD5(#{password}), MD5(#{password}),
#{sj}, #{sj},
#{cn}, #{cn},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(relateGoodsWords)">
#{relateGoodsWords},
</if>
0, 0,
IFNULL(#{cmUseAt},'N'), IFNULL(#{cmUseAt},'N'),
0, 0,
@@ -2131,6 +2141,9 @@
SET SET
SJ = #{sj}, SJ = #{sj},
CN = #{cn}, CN = #{cn},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(relateGoodsWords)">
RELATE_GOODS_WORDS = #{relateGoodsWords},
</if>
CM_USE_AT =IFNULL(#{cmUseAt},'N'), CM_USE_AT =IFNULL(#{cmUseAt},'N'),
SORT_ORDR = #{sortOrdr}, SORT_ORDR = #{sortOrdr},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(represntFileInfo)"> <if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(represntFileInfo)">
@@ -2654,19 +2667,43 @@
WHERE 1=1 WHERE 1=1
AND FGI.GOODS_INNB = FBG.GOODS_INNB AND FGI.GOODS_INNB = FBG.GOODS_INNB
AND FGI.SOPMAL_CD = FBG.SOPMAL_CD AND FGI.SOPMAL_CD = FBG.SOPMAL_CD
AND FGI.IMG_KND = '03' AND FGI.IMG_KND = '02'
AND FGI.CUT_NB = 1 AND FGI.CUT_NB = 1
LIMIT 1 LIMIT 1
)IMG ) AS IMG
,FG.GOODS_NM ,FG.GOODS_NM
,FGO.CNSMRPRIC ,FG.GOODS_ICON_CD AS ICON_CD_NM_LIST
,FGO.SLEPRIC ,FG.SRT_DC AS REPRSNT_DC
,FGO.STDR_DV_AT ,FG.GOODS_STTUS_CD
,FN_GET_COMMCODE_NAME('GOODS_STTUS', FG.GOODS_STTUS_CD) AS GOODS_STTUS_NM ,FEGI.GOODS_NM_EXPSR_AT
,FN_GET_COMMCODE_NAME('EXPSR', FG.EXPSR_DV_CD) AS EXPSR_NM ,FEGI.GOODS_NM_EXPSR_ORDR
,FBG.ORDR_GOODS_OPTN_INNB ,FEGI.REPRSNT_DC_EXPSR_AT
,FBG.SOPMAL_CD ,FEGI.REPRSNT_DC_EXPSR_ORDR
,FBG.RE_ORDER_AT ,FEGI.PRIC_EXPSR_AT
,FEGI.PRIC_EXPSR_ORDR
,FEGI.RVW_EVL_SCRE_EXPSR_AT
,FEGI.RVW_EVL_SCRE_EXPSR_ORDR
,FEGI.ICON_EXPSR_AT
,FEGI.ICON_EXPSR_ORDR
,IFNULL(ROUND(FGO.CNSMRPRIC, 0), 0) AS CNSMRPRIC
,IFNULL(ROUND(FGO.SLEPRIC, 0), 0) AS SLEPRIC
,IFNULL(ROUND(((FGO.CNSMRPRIC - FGO.SLEPRIC) / NULLIF(FGO.CNSMRPRIC, 0)) * 100, 0), 0) AS SLE_PERCENT
,IFNULL((SELECT ROUND(AVG(FBA.EVL_SCORE), 1)
FROM GC_BOARDDATA_GOODS RBG
INNER JOIN GC_BOARDDATA RB ON RB.BBSCTT_INNB = RBG.BBSCTT_INNB AND RB.SOPMAL_CD = RBG.SOPMAL_CD
INNER JOIN GC_BOARDMANAGER RBM ON RBM.BBS_ID = RB.BBS_ID AND RBM.SOPMAL_CD = RB.SOPMAL_CD
LEFT JOIN GC_BOARDFORM RBF ON RBF.BBS_ID = RBM.BBS_ID AND RBF.SOPMAL_CD = RBM.SOPMAL_CD AND RBF.USE_AT = 'Y' AND RBF.ADIT_ITM_DV_CD = '04'
LEFT JOIN GC_BOARD_ADDITM FBA ON FBA.BBSCTT_INNB = RB.BBSCTT_INNB AND FBA.SOPMAL_CD = RB.SOPMAL_CD AND FBA.QESITM_INNB = RBF.QESITM_INNB
WHERE RBG.SOPMAL_CD = FG.SOPMAL_CD
AND RBG.GOODS_INNB IN (SELECT CAST(RVW_GROUP_NB AS DECIMAL(10)) FROM GC_GOODS_RVW_V WHERE SOPMAL_CD = FG.SOPMAL_CD AND GOODS_INNB = FG.GOODS_INNB)
AND RB.USE_AT = 'Y' AND RB.DEPTH = 0 AND RBM.BBS_TY_CD IN ('06', '07')), 0) AS AVG_EVL_SCORE
,IFNULL((SELECT COUNT(RB.BBSCTT_INNB)
FROM GC_BOARDDATA_GOODS RBG
INNER JOIN GC_BOARDDATA RB ON RB.BBSCTT_INNB = RBG.BBSCTT_INNB AND RB.SOPMAL_CD = RBG.SOPMAL_CD
INNER JOIN GC_BOARDMANAGER RBM ON RBM.BBS_ID = RB.BBS_ID AND RBM.SOPMAL_CD = RB.SOPMAL_CD
WHERE RBG.SOPMAL_CD = FG.SOPMAL_CD
AND RBG.GOODS_INNB IN (SELECT CAST(RVW_GROUP_NB AS DECIMAL(10)) FROM GC_GOODS_RVW_V WHERE SOPMAL_CD = FG.SOPMAL_CD AND GOODS_INNB = FG.GOODS_INNB)
AND RB.USE_AT = 'Y' AND RB.DEPTH = 0 AND RBM.BBS_TY_CD IN ('06', '07')), 0) AS CNT_EVL_SCOR
FROM GC_BOARDDATA_GOODS FBG FROM GC_BOARDDATA_GOODS FBG
INNER JOIN GC_GOODS FG ON INNER JOIN GC_GOODS FG ON
FG.GOODS_INNB = FBG.GOODS_INNB FG.GOODS_INNB = FBG.GOODS_INNB
@@ -2674,6 +2711,9 @@
INNER JOIN GC_GOODS_OPTION FGO ON INNER JOIN GC_GOODS_OPTION FGO ON
FG.GOODS_INNB = FGO.GOODS_INNB FG.GOODS_INNB = FGO.GOODS_INNB
AND FG.SOPMAL_CD = FGO.SOPMAL_CD AND FG.SOPMAL_CD = FGO.SOPMAL_CD
LEFT JOIN GC_GOODS_EXPSR_INFO FEGI ON
FG.SOPMAL_CD = FEGI.SOPMAL_CD
AND FEGI.USE_AT = 'Y'
WHERE 1 = 1 WHERE 1 = 1
AND FG.SOPMAL_CD =#{sopmalCd} AND FG.SOPMAL_CD =#{sopmalCd}
AND FBG.BBSCTT_INNB = AND FBG.BBSCTT_INNB =
@@ -2686,6 +2726,16 @@
</otherwise> </otherwise>
</choose> </choose>
AND FGO.STDR_DV_AT = 'Y' AND FGO.STDR_DV_AT = 'Y'
<if test="serverDv == 'sopmal'">
AND FGO.OPTN_EXPSR_AT = 'Y'
AND FGO.USE_AT = 'Y'
AND FG.USE_AT = 'Y'
AND FG.GOODS_KND_CD = '01'
AND FG.GOODS_STTUS_CD IN ('01', '02')
AND (FG.EXPSR_DV_CD = '01' OR (FG.EXPSR_DV_CD = '03' AND SYSDATE() BETWEEN FG.EXPSR_BGN_DT AND FG.EXPSR_END_DT))
ORDER BY CASE FG.GOODS_STTUS_CD WHEN '02' THEN 1 ELSE 0 END ASC, FBG.REGIST_DT ASC, FBG.GOODS_INNB ASC
LIMIT 12
</if>
</select> </select>
<!-- 게시글 연관상품 삭제 (게시글 수정시)--> <!-- 게시글 연관상품 삭제 (게시글 수정시)-->

View File

@@ -0,0 +1,29 @@
<?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.badge.mapper.BOGoodsBadgeMapper">
<select id="selectBOGoodsBadgeList" parameterType="com.wb.domainserver.domain.gcone.goods.badge.vo.BOGoodsBadgeVO" resultType="dataMap">
SELECT BADGE_CD, BADGE_NM, FONT_COLOR, BG_COLOR, BORDER_COLOR, SORT_ORDR, USE_AT
FROM GC_GOODS_BADGE
WHERE SOPMAL_CD = #{sopmalCd}
ORDER BY SORT_ORDR ASC, BADGE_CD ASC
</select>
<select id="selectBOGoodsBadgeCount" parameterType="com.wb.domainserver.domain.gcone.goods.badge.vo.BOGoodsBadgeVO" resultType="int">
SELECT COUNT(1) FROM GC_GOODS_BADGE WHERE SOPMAL_CD = #{sopmalCd} AND BADGE_CD = #{badgeCd}
</select>
<insert id="insertBOGoodsBadge" parameterType="com.wb.domainserver.domain.gcone.goods.badge.vo.BOGoodsBadgeVO">
INSERT INTO GC_GOODS_BADGE (
SOPMAL_CD, BADGE_CD, BADGE_NM, FONT_COLOR, BG_COLOR, BORDER_COLOR, SORT_ORDR, USE_AT, REGUSR, REGIST_DT, UPDUSR, UPDT_DT
) VALUES (
#{sopmalCd}, #{badgeCd}, #{badgeNm}, #{fontColor}, #{bgColor}, #{borderColor}, #{sortOrdr}, #{useAt}, #{regusr}, SYSDATE(), #{updusr}, SYSDATE()
)
</insert>
<update id="updateBOGoodsBadge" parameterType="com.wb.domainserver.domain.gcone.goods.badge.vo.BOGoodsBadgeVO">
UPDATE GC_GOODS_BADGE
SET BADGE_NM = #{badgeNm}, FONT_COLOR = #{fontColor}, BG_COLOR = #{bgColor}, BORDER_COLOR = #{borderColor},
SORT_ORDR = #{sortOrdr}, USE_AT = #{useAt}, UPDUSR = #{updusr}, UPDT_DT = SYSDATE()
WHERE SOPMAL_CD = #{sopmalCd} AND BADGE_CD = #{badgeCd}
</update>
</mapper>

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