Compare commits

187 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
이주일
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
이주일
713bd6a64d fix: 상품 이미지 업로드 투명도 보존 2026-07-17 14:45:55 +09:00
이주일
5e4d837012 feat: 일반게시판 연관상품 노출 지원 2026-07-17 02:48:34 +09:00
이주일
48af5d88f4 fix: 관리자 게시판 등록 권한 및 URL 표시 개선 2026-07-17 02:24:19 +09:00
이주일
c96dde1323 fix: 품절 및 판매중지 상품 후순위 정렬 2026-07-16 16:57:59 +09:00
이주일
00c5235366 fix: 매거진 상세 목록 버튼 이동 오류 수정 2026-07-16 16:57:58 +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
jazz
dbe74eeb36 Revert "fix : 상품상세화면 호출시 title 및 meta 정보에 상품제목 노출"
This reverts commit c5948e87
2026-07-13 10:12:49 +09:00
jazz
c5948e87ec fix : 상품상세화면 호출시 title 및 meta 정보에 상품제목 노출
(cherry picked from commit 194ab35ba6)
2026-07-10 17:56:24 +09:00
이대환
44bc0104ce 미할인 상품 - 판매가, 할인율 미표시
>> 쇼핑몰 메인
>> 카테고리 목록
>> 상품 검색
>> 상품 상세
>> 장바구니 담기 팝업
>> 장바구니
>> 결제 화면

(cherry picked from commit f894756a5f)
2026-07-10 11:54:27 +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
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
이대환
edfd9e2474 fix: 주문관리 > 전체주문조회 > 발주서 엑셀 다운로드 - 상품단가(과세 USD)
(cherry picked from commit 2e28122d97)
2026-07-09 12:20:43 +09:00
이대환
02c35d87d2 fix : 주문 관리 > 전체주문조회 > 전체 주문 목록 - 프린트 화폐단위 변경 (원 → 円)
(cherry picked from commit c51f716cc4)
2026-07-08 18:32:15 +09:00
이대환
ca00a15c57 fix : 상품 목록 - 스크롤 불러오기 화폐단위 변경 (원 → 円)
(cherry picked from commit 2b8e84799d)
2026-07-08 14:11:58 +09:00
이대환
2b2d00cdd0 fix : 주문 > 반품환불 관리 > 반품환불 처리 > 반품/환불상세 - 네이버페이 주문 제어 제한
(cherry picked from commit cb655263af)
2026-07-08 11:32:21 +09:00
이대환
ed4d0a98a7 fix : 주문 > 주문 관리 > 전체주문조회, 주문 상세 - 네이버페이 주문 제어 제한
(cherry picked from commit 1de8b5c39f)
2026-07-08 11:22:07 +09:00
이대환
5f90985157 배송조회(운송장번호 조회) - aciExpress 팝업 적용
>> 쇼핑몰 주문/배송 > 주문 상세

(cherry picked from commit 4074ace97d)
2026-07-08 10:37:08 +09:00
이대환
49c8d6c20c fix : 주문 > 주문 관리 > 전체주문조회, 주문 상세 - 네이버페이 주문 제어 제한
(cherry picked from commit 28ee8f8556)
2026-06-29 12:55:30 +09:00
이대환
1c3238a7b4 fix : 주문 > 주문 관리 > 전체주문조회 - 네이버페이 주문 제어 제한
(cherry picked from commit bbeb2a630a)
2026-06-29 12:42:45 +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
이대환
6bb7c4928d 주문 > 주문 관리 > 전체주문조회, 주문 상세 - 네이버페이 주문 제어 제한
(cherry picked from commit 6858b24344)
2026-06-26 18:09:24 +09:00
이대환
ee95e09d12 fix : 배송/반품정보 문구 수정 (반품/교환 → 배송/반품)
(cherry picked from commit c04668fda2)
2026-06-19 14:41:13 +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
이대환
b00534af6b batch > 출고 상태 변경
(cherry picked from commit 39ce46c4dc)
2026-06-10 11:41:20 +09:00
이대환
3eda19f6fd 쇼핑몰 검색어 저장
(cherry picked from commit 03ec9d863e)
2026-06-05 14:44:21 +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
이대환
9b2fdee768 fix : 설정 > 원가 설정 - 기준일자 datepicker 적용
(cherry picked from commit 56f29943b6)
2026-06-02 09:47:26 +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
이주일
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
이대환
99bbfec448 쇼핑몰 상품상세, 주문결제화면 - 예상 적립 마일리지 관련
fix : 쇼핑몰 회원정보수정 - 취소 버튼
fix : 쇼핑몰 회원탈퇴 - 취소 버튼, 주요 혜택

(cherry picked from commit 1d72e28600)
2026-05-29 09:52:28 +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
이대환
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
이주일
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
이대환
77fb6d7e19 결제 - 파라미터 추가(HS Code, 실무게, 부피무게, 포장갯수)
(cherry picked from commit 893a208c82)
2026-05-19 16:31:14 +09:00
이대환
e5e4a72577 상품관리 > 상품조회 > 상품 등록/복사재등록/수정 - 상품명(영문), HS Code, 실무게(KG) 추가
(cherry picked from commit 5da6ad42d0)
2026-05-19 11:16:50 +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
이대환
99a3c126f6 결제 - 키움결제 고객명 파라미터 추가
(cherry picked from commit fd419494b4)
2026-05-07 12:08:35 +09:00
이대환
737ee90122 fix : 주문 > 주문 관리 > 전체주문조회 > 주문 상세 > 결제 처리내역 - 결제취소 완료/취소 출력 순서 개선
(cherry picked from commit e282db97ed)
2026-05-07 11:34:39 +09:00
이대환
c014f00a13 fix : 설정 > 배송설정 > 배송그룹 수정 - 일본 주소 옵션 수정
(cherry picked from commit 2d777adeb6)
2026-05-07 10:51:28 +09:00
이경숙
5d94218e98 결제 - 키움결제 운영 URL 수정
(cherry picked from commit e4b5803f24)
2026-05-06 17:52:35 +09:00
이대환
59cf8da8e4 fix : 주문 > 주문관리 > 전체주문조회 > 주문상세보기 - 총 결제금액 원화 표시
(cherry picked from commit 9cc4a26f0f)
2026-04-30 17:40:17 +09:00
이대환
3fbd19a1e7 쇼핑몰 > 연령확인 팝업
(cherry picked from commit f3918ed7b1)
2026-04-30 16:17:15 +09:00
이대환
903374cbee 설정 > 패밀리사이트 설정, 환율 설정, 안내문구 설정 - 추가 2026-04-29 13:53:50 +09:00
이대환
891b0a7f4f fix : 설정 > 마일리지 설정 - 마일리지 사용조건 추가 2026-04-29 13:53:49 +09:00
이대환
d4d47751c0 fix : 쇼핑몰 모바일 - 햄버거메뉴 이전 (TabBar.jsp → Include.jsp) 2026-04-27 17:27:51 +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
이대환
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
김현욱
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
김현욱
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
이대환
500dba1467 fix : 쇼핑몰 모바일 - 햄버거메뉴 탭바 개선 및 이전 (Include.jsp → TabBar.jsp)
(cherry picked from commit bbe2e20e4f)
2026-04-21 16:23:35 +09:00
이대환
2ecfaf72c9 fix : 설정 > 팝업설정 > 팝업정보 등록 - 팝업 위치 문구 추가(모바일)
(cherry picked from commit 017211f121)
2026-04-20 18:33:20 +09:00
이대환
02e46d49e9 fix : 관리자 메인 - 쇼핑몰 코드 할당
(cherry picked from commit a08c67f7ff)
2026-04-20 16:21:10 +09:00
이대환
9807d160cd fix : 관리자 구독서비스 등록/복사재등록 - 실판매가 자동 계산, 판매수량 추가
(cherry picked from commit c68400a4e6)
2026-04-20 12:20:07 +09:00
이대환
27ca12d172 fix : 반품교환 → 배송/반품 문구 변경
(cherry picked from commit 329b1f4b4c)
2026-04-17 10:41:59 +09:00
이대환
8c63f6e8cf fix : 주문/구독서비스 결제 > 무통장 결제 - 결제사명 적용
(cherry picked from commit da46a84a69)
2026-04-16 17:13:29 +09:00
이경숙
d49666bac0 결제 - 키움결제 네이버페이 포인트주문취소 관련처리 2026-04-16 12:09:34 +09:00
이대환
b0c35f531f fix : 상점관리 > 쇼핑몰관리 > 쇼핑몰 등록/수정 - 구독서비스 결제수단 추가
(cherry picked from commit 16523bba0a)
2026-04-16 11:58:33 +09:00
이경숙
81757e1217 결제 - 키움결제 네이버페이 포인트주문 관련처리 2026-04-15 18:04:59 +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
김현욱
46755ce33d 결제화면에서 무통장 결제시 설정 수정 2026-04-15 14:57:29 +09:00
이대환
da27656993 fix : 주문관리 > 전체주문조회, 주문상세 - 구독서비스 주문 건 상품준비 상태 변경 방지
(cherry picked from commit c02fc822ea)
2026-04-15 14:47:22 +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
이대환
cac103e3ec fix : 주문/배송 상세조회(모바일) - 여러곳 배송/선물하기 주문취소 개선
(cherry picked from commit eda43b3d17)
2026-04-14 15:48:03 +09:00
이대환
14fb6f8328 fix : 구독서비스 주문/배송 - 주문 접수(15) → 주문 무효(95) 버튼 추가
(cherry picked from commit a1d95d1e01)
2026-04-14 11:03:36 +09:00
이대환
b42eee8e8e fix : 관리자 구독서비스 수정 - 실판매가 자동 계산, 판매수량 추가 2026-04-13 17:45:42 +09:00
이대환
ce15736c9d 구독서비스 결제 - 주문무효 처리 후 재고 및 상태 변경 2026-04-13 16:45:09 +09:00
김현욱
ce9b1c1bfc 관리자 게시판 대쉬보드 오류 수정 2026-04-13 16:36:14 +09:00
김현욱
1f96164136 마이페이지 일반문의 추가(PC/모바일) 2026-04-13 14:29:40 +09:00
이경숙
9f8e6408aa 결제 - 키움결제 네이버페이 관련 처리 2026-04-10 18:45:08 +09:00
김현욱
f97b553071 배송료(조건부) 계산 변경(1) 2026-04-10 16:55:53 +09:00
김현욱
c8c90d8d56 배송료(조건부) 계산 변경 2026-04-10 16:40:28 +09:00
김현욱
2738b519a4 배송그룹 설정(조건부) 화면 수정(1) 2026-04-10 16:15:01 +09:00
김현욱
e68507a5b5 배송그룹 설정(조건부) 화면 수정 2026-04-10 16:11:08 +09:00
이대환
92ab84e7f3 구독서비스 결제 - 결제취소 처리 후 재고 및 상태 변경 2026-04-10 15:53:10 +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
이경숙
c418d01f46 결제 - 키움결제 결제취소 관련 처리 2026-04-08 16:48:13 +09:00
이대환
a9c717e24c 구독서비스 결제 - 결제 처리 후 재고 및 상태 변경 2026-04-08 14:45:19 +09:00
김현욱
2274326754 화면타이틀 주문 > 마일리지 변경 2026-04-07 18:41:25 +09:00
김현욱
ff6a4146c9 상품 상세페이지 무료배송 표시 2026-04-07 16:58:44 +09:00
이대환
cb9c22ec5b 구독서비스 - 키움 결제 적용 2026-04-07 10:21:41 +09:00
이경숙
4bf7b05081 결제 - 키움결제 log삭제 2026-04-06 19:47:27 +09:00
이경숙
e6f8d4a5f1 결제 - 키움결제 주문자명 PC인코딩 확인 2026-04-06 19:39:36 +09:00
김현욱
58a1931f90 관리자, 통합관리자 개발로고로 변경 2026-04-06 18:47:31 +09:00
이대환
18a08fc439 fix : 구독서비스 - 결제 처리 전 정합성 검사 2026-04-06 16:24:22 +09:00
김현욱
9f7916d913 defailt.css .product-badge 컬러 수정(1) 2026-04-06 14:34:47 +09:00
김현욱
9301624be5 defailt.css .product-badge 컬러 수정 2026-04-06 14:20:15 +09:00
김현욱
a88977dd6d 무료배송에 개별배송 적용 2026-04-06 12:14:22 +09:00
김현욱
194d626b62 마일리지 '원' > '점'으로 수정 2026-04-02 17:39:55 +09:00
이대환
a9e098b238 fix : 관리자 구독서비스 등록 - 기본&판매정보 입력값 0 허용 2026-04-02 17:36:43 +09:00
김현욱
9b9b28ede4 무료배송 그룹에 개별배송 추가 2026-04-02 16:35:23 +09:00
이경숙
649f1d4ed6 결제 - 키움결제 주문자명 모바일 인코딩 확인4 2026-04-02 16:12:44 +09:00
이경숙
71fe6c9a9a 결제 - 키움결제 주문자명 모바일 인코딩 확인3 2026-04-02 15:58:50 +09:00
이경숙
bff3e3f0c9 결제 - 키움결제 주문자명 모바일 인코딩 확인2 2026-04-02 15:52:20 +09:00
이경숙
f00a4eff6b 결제 - 키움결제 주문자명 모바일 인코딩 확인 2026-04-02 15:44:22 +09:00
이경숙
3332952125 결제 - 키움결제 모바일 적용 이동테스트 버전6 2026-04-02 15:12:45 +09:00
이대환
c39b50bf82 fix : 쇼핑몰 배송지 관리 - 배송지 등록 팝업(모달) 크기 조절 2026-04-02 11:32:24 +09:00
이경숙
08240b57bc 결제 - 키움결제 모바일 적용 이동테스트 버전5 2026-04-01 19:25:04 +09:00
이경숙
0bb0ad9102 결제 - 키움결제 모바일 적용 이동테스트 버전4 2026-04-01 19:03:34 +09:00
이경숙
31eeaec62c 결제 - 키움결제 모바일 적용 이동테스트 버전3 2026-04-01 18:55:03 +09:00
이경숙
9d382d91ce 결제 - 키움결제 모바일 적용 이동테스트 버전2 2026-04-01 18:45:59 +09:00
이경숙
59985dcede 결제 - 키움결제 모바일 적용 이동테스트 버전 2026-04-01 18:18:35 +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
이경숙
33bb861300 결제 - 키움결제 매출전표에 키움 링크 추가 2026-04-01 15:36:35 +09:00
이대환
784ea1a6aa fix : 쇼핑몰 구독서비스 - 구독서비스 정보 조건부 숨김처리
fix : 관리자 구독서비스 수정 - 기본&판매정보 입력값 0 허용, 재고정책 변경 시 판매가능 재고수량 초기화
2026-04-01 15:14:31 +09:00
이경숙
92a50f7b39 결제 - 키움결제 중간 결제창 삭제 2026-03-31 18:19:13 +09:00
이경숙
6e48c10f60 결제 - 키움결제 sitemid db 연결 2026-03-31 17:53:13 +09:00
이경숙
93a00f0ac6 결제 - 키움결제 무이자할부 수정 2026-03-31 16:38:06 +09:00
이경숙
ed20ff652f 결제 - 키움결제 승인날짜 수정 2026-03-31 16:28:08 +09:00
이경숙
dbaf3d8dfe 결제 - 키움결제 적용 1차 2026-03-31 14:48:23 +09:00
이경숙
7e98b7acfb 결제 - 키움결제 적용 3차 2026-03-31 14:34:47 +09:00
이경숙
0c2be2d1d2 결제 - 키움결제 적용 2차 2026-03-30 18:44:05 +09:00
이대환
1df2a1ab65 개발환경 세팅 수정
(cherry picked from commit 8fd58d80b0)
2026-03-30 17:03:05 +09:00
이대환
3a00e1ab65 fix : 쇼핑몰 주문결제화면 - 배송지 정합성 검사(모바일) 2026-03-30 14:42:06 +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
64 changed files with 2436 additions and 758 deletions

View File

@@ -3,6 +3,7 @@ package com.wb.domainserver.domain.admin.store.sopmal.mapper;
import java.util.List;
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 org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@@ -202,4 +203,7 @@ public interface BOMaSopmalMapper {
/*전체 쇼핑몰 목록*/
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.vo.BOGoodsInfoVO;
import lombok.Data;
import org.apache.commons.text.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -984,4 +985,43 @@ public class BOMaSopmalService {
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

@@ -232,6 +232,9 @@ public class BOGnrlbbscttService {
BOGnrlbbscttVO resultCnt = new BOGnrlbbscttVO();
switch (bbsTyCd) {
case "01": //일반게시글 조회
log.debug("일반게시글 getServerDv : {}",bbsctt.getServerDv());
log.debug("일반게시글 getMbrDvCd : {}",bbsctt.getMbrDvCd());
log.debug("일반게시글 getSopmalCd : {}",bbsctt.getSopmalCd());
resultCnt = mapper.selectBOGnrlBbscttListCnt(bbsctt);
totCnt = resultCnt.getTotCnt();
if (StringUtil.isEmpty(bbsctt.getNtcAt())) {/*공지 제외 검색 조건*/
@@ -909,6 +912,7 @@ public class BOGnrlbbscttService {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new WnbtRestException("게시글 등록 중 오류가 발생했습니다.", e);
}
return message;
@@ -1126,6 +1130,7 @@ public class BOGnrlbbscttService {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new WnbtRestException("게시글 수정 중 오류가 발생했습니다.", e);
}
return message;

View File

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

View File

@@ -101,6 +101,11 @@ public class BOMbrService {
List<DataMap> resultList = null;
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);
// 건수 갯수 페이징vo에 set

View File

@@ -26,35 +26,38 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
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 sortDv;
/**검색조건 비교 방식*/
private String srchDv;
/**정렬 방식*/
private String sortDv;
/**쇼핑몰코드*/
private String sopmalCd;
private String sopmalCd;
/*회원 구분 코드*/
/*회원 구분 코드*/
private String srchMbrDvCd;
/*요청 페이지 구분 mngr인지 integ인지*/

View File

@@ -238,13 +238,6 @@ public interface BOOrdrMapper {
* @return List<LinkedHashMap>
*/
public List<LinkedHashMap> selectExcelListByOrder(BOOrdrSrchVO ordrSrchVO);
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 엑셀다운로드 발주서
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public List<DataMap> selectExcelListPurchOrder(BOOrdrSrchVO ordrSrchVO);
/* ####################################
관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 종료
#################################### */
@@ -504,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쇼핑 > 개인결제 시작
#################################### */

View File

@@ -682,15 +682,6 @@ public class BOOrdrService{
return mapper.selectExcelListByOrder(ordrSrchVO);
}
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 엑셀다운로드 발주서
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public List<DataMap> selectExcelListPurchOrder(BOOrdrSrchVO ordrSrchVO) {
return mapper.selectExcelListPurchOrder(ordrSrchVO);
}
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 주문내역서 정보 조회
* @param ordrVO
@@ -1307,6 +1298,49 @@ public class BOOrdrService{
관리자 > 주문 > 주문관리 > 다운로드항목설정 종료
#################################### */
/* ####################################
관리자 > 주문 > 주문관리 > 발주서 관리 시작
#################################### */
/**
* 관리자 > 주문 > 주문관리 > 발주서 다운로드 > 발주서 목록 조회
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public List<DataMap> selectExcelPoList(BOOrdrSrchVO ordrSrchVO) {
List<DataMap> excelListPO = null;
// 건수 조회
Integer totCnt = mapper.selectExcelListPurchOrderTotCnt(ordrSrchVO);
ordrSrchVO.getPaginationInfo().setTotalRecordCount(totCnt);
if(totCnt > 0) {
excelListPO = mapper.selectExcelListPurchOrder(ordrSrchVO);
}
return excelListPO;
}
/**
* 관리자 > 주문 > 주문관리 > 발주서 다운로드 > 발주서 다운로드
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public List<DataMap> selectExcelPoListDwld(BOOrdrSrchVO ordrSrchVO) {
return mapper.selectExcelPoListDwld(ordrSrchVO);
}
/**
* 관리자 > 주문 > 주문관리 > 발주서 다운로드 > 엑셀 다운로드 일시 업데이트
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public Integer updateExcelDownDt(BOOrdrSrchVO ordrSrchVO) {
return mapper.updateExcelDownDt(ordrSrchVO);
}
/* ####################################
관리자 > 주문 > 주문관리 > 발주서 관리 종료
#################################### */
/* ####################################
관리자 > 주문 > 개인결제관리 시작
#################################### */
@@ -3769,7 +3803,7 @@ public class BOOrdrService{
setleAmt = setleAmt.add(dlvyAmt).subtract(dlvyCouponDscntAmt).subtract(enuriAmt).subtract(useMlgAmt).subtract(useCashMlgAmt).compareTo(BigDecimal.ZERO) > 0 ? setleAmt.add(dlvyAmt).subtract(dlvyCouponDscntAmt).subtract(enuriAmt).subtract(useMlgAmt).subtract(useCashMlgAmt) : BigDecimal.ZERO;
// 환율계산
setleAmtKr = setleAmt.multiply(buyRate);
setleAmtKr = setleAmtKr.setScale(0,RoundingMode.HALF_UP);
setleAmtKr = setleAmtKr.setScale(-1, RoundingMode.DOWN);
lmttUseMlg = goodsAmt.subtract(dscntAmt.add(cartCouponDscntAmt));
log.debug(" 결제 예정 금액 : {}", setleAmt);

View File

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

View File

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

View File

@@ -1569,6 +1569,7 @@ public class BOPayService{
//요청코드
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();

View File

@@ -1119,6 +1119,7 @@ public class BORtngudrefndService {
payVO.setMemorSetleAt("Y");
}
// 개발서버 네이버페이 CPID 구분 적용 취소
payVO.setModGubun(setle.getPgCmpnyNm()); //결제키 구분용
if ("kiwoom".equals(setle.getPgCmpnyNm())) {
payVO.setPayMethod("CARD");

View File

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

View File

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

View File

@@ -45,13 +45,12 @@ import org.springframework.validation.annotation.Validated;
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.RequestMethod;
import java.io.IOException;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
@@ -626,137 +625,7 @@ public class OrdrmngrController {
}
}
/**
* 발주서 엑셀다운로드
* @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);
//엑셀 항목별 제목에 출력될 내용 설정
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));
}
//엑셀 항목에 출력될 내용 설정
List<DataMap> resultList = service.selectExcelListPurchOrder(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 encodedFileName = URLEncoder.encode(excelFileName, StandardCharsets.UTF_8.toString()).replaceAll("\\+", "%20");
ExcelDownloadUtil.createExcel(encodedFileName, headerMap, excelList, response);
} catch (IOException ioe) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", ioe);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
/**
* 주문내역서 팝업 화면 이동
@@ -1192,6 +1061,14 @@ public class OrdrmngrController {
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();
ordrShippingVO.setUpdusr(user.getUserInnb());
@@ -1818,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

@@ -1573,9 +1573,24 @@ public class CscController {
bbsVO.setBbsTyCd(bbsctt.getBbsTyCd());
DataMap bbsInfo = new DataMap();
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();
content.put("bbsInfo", bbsInfo);
content.put("registAuthResult", registAuth.get("resultAuth"));
content.put("bbsctt", bbsctt);
content.put("resultList", resultList);
content.put("paginationInfo", bbsctt.getPaginationInfo());

View File

@@ -305,6 +305,14 @@ public class GoodsController {
public String selectGoodsListForm(HttpServletRequest request,
BOGoodsVO vo,
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();
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
@@ -322,7 +330,7 @@ public class GoodsController {
//검색한 카테고리 정보로 vo 세팅
if(!CollectionUtils.isEmpty(goodsCategoryList)){
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{
vo.setUpperCtgryId("0");
vo.setCtgryId("0");

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

View File

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

View File

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

View File

@@ -51,14 +51,17 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
String accessToken = extractToken(request);
String sysDvCd = RealmContextHolder.getSysDvCdRealm();
String expireChk = request.getParameter("expire");
String tokenExpireCookie = CookieUtils.getCookieValue("token_expire", request);
//사용자이면서 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"));
return;
@@ -66,7 +69,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
// accessToken이 있고 refresh Token 요청이 아닌경우
if (StringUtils.hasText(accessToken) && !requestUri.contains("/tokens/refresh")) {
if (StringUtils.hasText(accessToken) && !isAuthenticationEndpoint(requestUri, realm)) {
UserDetails userDetails = customUserDetailService.loadUserByUsername(accessToken);
if (userDetails != null) {
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) {

View File

@@ -44,9 +44,12 @@ public abstract class CookieUtils {
Cookie cookie = new Cookie(name, null);
cookie.setMaxAge(0);
cookie.setPath(path);
cookie.setDomain(originHost);
setCookieDomain(cookie, request, originHost);
cookie.setHttpOnly(true);
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) {
@@ -58,10 +61,12 @@ public abstract class CookieUtils {
String originHost = UrlExtractor.getOriginalHost(host);
deleteLegacyDomainCookie(name, path, request, response, originHost);
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(maxAge);
cookie.setPath(path);
cookie.setDomain(originHost);
setCookieDomain(cookie, request, originHost);
cookie.setHttpOnly(httpOnly);
response.addCookie(cookie);
}
@@ -77,7 +82,7 @@ public abstract class CookieUtils {
Cookie cookie = new Cookie(name, value);
cookie.setPath(path);
cookie.setDomain(originHost);
setCookieDomain(cookie, request, originHost);
cookie.setHttpOnly(httpOnly);
response.addCookie(cookie);
}
@@ -96,4 +101,30 @@ public abstract class CookieUtils {
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

@@ -440,9 +440,9 @@ ordr:
# 서치어드바이저 소유권 코드
meta-content:
google:
SK: "TcW6Bf9PLSo3GI3I2rwYcm0eTYfcIZCvrzVzupi6du8"
SK: "6RUF9UIWIu1nl1WlceNKH25YZG13jcEZHURfLrbSxQU"
naver:
SK: "7fe912d3aa418532cc200050369420a8918bb372"
SK: "213a2c785853cdd006af58d286ffec23342a0e8a"
facebook:
SK: ""

View File

@@ -1569,5 +1569,124 @@
AND GD.USE_AT = 'Y'
</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>

View File

@@ -1767,6 +1767,7 @@
,CAST(AES_DECRYPT(UNHEX(FB.ANSW_MBTLNB) , #{secretKey}) AS CHAR(50)) AS ANSW_MBTLNB
,FB.ANSW_SMS_RECPTN
,FB.SJ
,FB.RELATE_GOODS_WORDS
,FB.SORT_ORDR
,FB.USE_AT
,IFNULL(FBM.MNGR_NM, '관리자') AS MNGR_NM
@@ -1927,6 +1928,7 @@
,CAST(AES_DECRYPT(UNHEX(FB.ANSW_MBTLNB) , #{secretKey}) AS CHAR(50)) AS ANSW_MBTLNB
,FB.ANSW_SMS_RECPTN
,FB.SJ
,FB.RELATE_GOODS_WORDS
,FB.SORT_ORDR
,FB.USE_AT
,FB.CN_SCRIPT
@@ -2039,6 +2041,9 @@
PASSWORD,
SJ,
CN,
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(relateGoodsWords)">
RELATE_GOODS_WORDS,
</if>
INQIRE_CNT,
CM_USE_AT,
RECOMEND_CNT,
@@ -2087,6 +2092,9 @@
MD5(#{password}),
#{sj},
#{cn},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(relateGoodsWords)">
#{relateGoodsWords},
</if>
0,
IFNULL(#{cmUseAt},'N'),
0,
@@ -2133,6 +2141,9 @@
SET
SJ = #{sj},
CN = #{cn},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(relateGoodsWords)">
RELATE_GOODS_WORDS = #{relateGoodsWords},
</if>
CM_USE_AT =IFNULL(#{cmUseAt},'N'),
SORT_ORDR = #{sortOrdr},
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(represntFileInfo)">
@@ -2659,7 +2670,7 @@
AND FGI.IMG_KND = '02'
AND FGI.CUT_NB = 1
LIMIT 1
) AS GOODS_IMG_COURS
) AS IMG
,FG.GOODS_NM
,FG.GOODS_ICON_CD AS ICON_CD_NM_LIST
,FG.SRT_DC AS REPRSNT_DC

View File

@@ -11,24 +11,44 @@
AND FM.USE_AT = 'Y'
]]>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchMbrNm)">
<![CDATA[
AND FM.MBR_NM = #{srchMbrNm}
]]>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDv, '0')">
AND FM.MBR_NM LIKE CONCAT('%', #{srchMbrNm}, '%')
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDv, '1')">
AND FM.MBR_NM = #{srchMbrNm}
</when>
</choose>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchKywordID)">
<![CDATA[
AND FM.MBR_ID = #{srchKywordID}
]]>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDv, '0')">
AND FM.MBR_ID LIKE CONCAT('%', #{srchKywordID}, '%')
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDv, '1')">
AND FM.MBR_ID = #{srchKywordID}
</when>
</choose>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchKywordEmail)">
<![CDATA[
AND FM.EMAIL = (select HEX(AES_ENCRYPT(#{srchKywordEmail} , #{secretKey})))
]]>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDv, '0')">
AND AES_DECRYPT(UNHEX(FM.EMAIL), #{secretKey}) LIKE CONCAT('%', #{srchKywordEmail}, '%')
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDv, '1')">
AND FM.EMAIL = (select HEX(AES_ENCRYPT(#{srchKywordEmail} , #{secretKey})))
</when>
</choose>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(srchKywordMb)">
<![CDATA[
AND FM.MBTLNB = (select HEX(AES_ENCRYPT(REPLACE(#{srchKywordMb},'-',''), #{secretKey})))
]]>
<choose>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDv, '0')">
AND AES_DECRYPT(UNHEX(FM.MBTLNB), #{secretKey}) LIKE CONCAT('%', #{srchKywordMb}, '%')
</when>
<when test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(srchDv, '1')">
AND FM.MBTLNB = (select HEX(AES_ENCRYPT(REPLACE(#{srchKywordMb},'-',''), #{secretKey})))
</when>
</choose>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(actionDv)">
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEmpty(eventYn)">

View File

@@ -1440,101 +1440,6 @@
GROUP BY A.ORDR_INNB
) EXCEL
</select>
<!-- 전체 주문 조회 > 엑셀다운로드 발주서 -->
<select id="selectExcelListPurchOrder" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrSrchVO" resultType="dataMap">
SELECT
GO.ORDR_RCEPT_DT,
'UNIHAN' AS ENTRPS_CD,
'UNIHAN CO.,LTD.' AS ENTRPS_NM,
'03-5990-2880' AS ENTRPS_TEL,
'RM.302,YOTSUYA-AKEBONOBASHI BLDG.,2-14, SUMIYOSHI-CHO, SHINJUKU-KU, TOKYO, 162-0065, JAPAN' AS ENTRPS_ADRES,
NULL AS SPCL_CSTMCLER_ENTRPS,
NULL AS SPCL_CSTMCLER_CD,
GO.ORDR_INNB,
1 AS PURPS_DV,
GOS.RECPNT_NM,
CAST(AES_DECRYPT(UNHEX(GOS.RECPNT_MBTLNB) , #{secretKey}) AS CHAR(50)) AS RECPNT_MBTLNB,
NULL AS RECPNT_HP,
GOS.CSTMCLER_CD,
GOS.DLVYLC_ZIP,
CASE
WHEN GOS.DLVYLC_ADRES_DV_CD = '01'
THEN GOS.DLVYLC_RNM_ADRES
ELSE GOS.DLVYLC_LNB_ADRES
END DLVYLC_RNM_LNB_ADRES,
GOS.DLVYLC_ADRES_DTL,
GOS.DLVY_MSSAGE_CN,
'www.sake1jan.com' AS CSTMR_PURCHS_SITE,
GOIO.REAL_WT,
GOIO.PACKAGE_CNT,
GOIO.HSCODE,
'A' AS CMMRC_TY,
CONCAT(GOI.GOODS_NM_EN, ' ', GOIO.OPTN_NM_1, '-', GOIO.OPTN_VAL_1) AS CN,
/*원가 관리 시작*/
GOIO.SLEPRIC,
GOS.DFT_DLVY_AMT,
GGC.CSTMS_FEE,
(
(GOIO.SLEPRIC + GOS.DFT_DLVY_AMT)
* GGC.PLTFOM_FEE
* GGC.EXPCT_TAX
) AS EXPCT_TAX_AMT,
GGC.EXPCT_TAX,
GGC.KR_DLVY_CT,
GGC.PLTFOM_FEE,
GGC.USD_RATE,
GGO.TAXABLE_USD AS UNIT_VALUE,
/*원가 관리 종료*/
GOIO.ORDR_QY,
GGO.TAXABLE_USD * GOIO.ORDR_QY AS VALUE,
NULL AS BRAND,
NULL AS PRE_FOOD_DCL,
NULL AS PROVD_NATION,
NULL AS PROVD_CMPNY_NM,
NULL AS CHNLNG_GOODS_NM,
NULL AS SHIPPER_PURCHS_SITE,
NULL AS SLE_AGNT_ENTRPS_NM,
NULL AS SLE_AGNT_ENTRPS_REGIST_CD,
NULL AS PURCHS_DLVY_AGENCY_NM,
NULL AS PURCHS_DLVY_AGENCY_REGIST_CD,
NULL AS OVSEA_SELER_NM,
GOS.ORDR_DLVY_INNB AS OVSEA_SELER_REGIST_CD,
CONCAT(GO.SUBSVC_AT, GOS.DLVYLC_AREA_CD, GOS.ORDR_DLVY_INNB) AS SITE_ORDR_INNB,
/*아래부터는 발주서에 포함되지 않음*/
GO.ORDR_STTUS_CD,
GOI.ORDR_GOODS_INNB,
GOI.GOODS_INNB,
GOI.GOODS_NM,
GOIO.ORDR_GOODS_OPTN_INNB,
GOIO.GOODS_OPTN_INNB,
GOS.DLVYLC_AREA_CD,
GGC.STDR_DE
FROM GC_ORDER GO
INNER JOIN GC_ORDER_ITEM GOI
ON GOI.ORDR_INNB = GO.ORDR_INNB
AND GOI.SOPMAL_CD = GO.SOPMAL_CD
INNER JOIN GC_ORDER_ITEM_OPTION GOIO
ON GOIO.ORDR_GOODS_INNB = GOI.ORDR_GOODS_INNB
AND GOIO.SOPMAL_CD = GOI.SOPMAL_CD
INNER JOIN GC_ORDER_SHIPPING GOS
ON GOS.ORDR_DLVY_INNB = GOIO.ORDR_DLVY_INNB
AND GOS.SOPMAL_CD = GOIO.SOPMAL_CD
INNER JOIN GC_GOODS_OPTION GGO
ON GGO.GOODS_OPTN_INNB = GOIO.GOODS_OPTN_INNB
AND GGO.GOODS_INNB = GOI.GOODS_INNB
AND GGO.SOPMAL_CD = GO.SOPMAL_CD
LEFT JOIN GC_GOODS_COST GGC
ON GGC.STDR_DE = (
SELECT MAX(GGC.STDR_DE)
FROM GC_GOODS_COST GGC
WHERE GGC.STDR_DE <![CDATA[<=]]> GO.ORDR_RCEPT_DT
)
WHERE 1 = 1
AND GO.ORDR_RCEPT_DT BETWEEN #{srchStartDate} AND #{srchEndDate} ' 23:59:59'
AND GOIO.ORDR_STTUS_CD = #{srchOrdrSttusCd}
AND GO.SOPMAL_CD = #{sopmalCd}
</select>
<!--
####################################
전체주문 조회 서비스 종료
@@ -2137,6 +2042,7 @@
ELSE
CAST(AES_DECRYPT(UNHEX(FOS.RECPNT_MBTLNB), '1df5be2f7e90ae36') AS CHAR(50))
END AS RECPNT_MBTLNB
, FOS.CSTMCLER_CD
, FOS.DLVYLC_ZIP
, FOS.DLVYLC_ADRES_DV_CD
, CASE WHEN FOS.DLVYLC_ADRES_DV_CD = '01'
@@ -2486,6 +2392,9 @@
SET FOS.RECPNT_NM = #{recpntNm}
, FOS.RECPNT_TELNB = HEX(AES_ENCRYPT(REPLACE(#{recpntTelnb}, '-', ''), '1df5be2f7e90ae36'))
, FOS.RECPNT_MBTLNB = HEX(AES_ENCRYPT(REPLACE(#{recpntMbtlnb}, '-', ''), '1df5be2f7e90ae36'))
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(cstmclerCd)">
, FOS.CSTMCLER_CD = #{cstmclerCd}
</if>
, FOS.DLVYLC_ZIP = #{dlvylcZip}
, FOS.DLVYLC_ADRES_DV_CD = #{dlvylcAdresDvCd}
, FOS.DLVYLC_LNB_ADRES = #{dlvylcLnbAdres}
@@ -3019,6 +2928,281 @@
####################################
-->
<!--
####################################
관리자 > 주문 > 주문관리 > 발주서 관리 시작
####################################
-->
<!-- 발주서 목록 건수 -->
<select id="selectExcelListPurchOrderTotCnt" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrSrchVO" resultType="Integer">
SELECT COUNT(1)
FROM GC_ORDER GO
INNER JOIN GC_ORDER_ITEM GOI
ON GOI.ORDR_INNB = GO.ORDR_INNB
AND GOI.SOPMAL_CD = GO.SOPMAL_CD
INNER JOIN GC_ORDER_ITEM_OPTION GOIO
ON GOIO.ORDR_GOODS_INNB = GOI.ORDR_GOODS_INNB
AND GOIO.SOPMAL_CD = GOI.SOPMAL_CD
INNER JOIN GC_ORDER_SHIPPING GOS
ON GOS.ORDR_DLVY_INNB = GOIO.ORDR_DLVY_INNB
AND GOS.SOPMAL_CD = GOIO.SOPMAL_CD
INNER JOIN GC_GOODS_OPTION GGO
ON GGO.GOODS_OPTN_INNB = GOIO.GOODS_OPTN_INNB
AND GGO.GOODS_INNB = GOI.GOODS_INNB
AND GGO.SOPMAL_CD = GO.SOPMAL_CD
LEFT JOIN GC_GOODS_COST GGC
ON GGC.STDR_DE = (
SELECT MAX(GGC.STDR_DE)
FROM GC_GOODS_COST GGC
WHERE GGC.STDR_DE <![CDATA[<=]]> GO.ORDR_RCEPT_DT
)
WHERE 1 = 1
AND GOIO.ORDR_STTUS_CD = #{srchOrdrSttusCd}
AND GO.SOPMAL_CD = #{sopmalCd}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(dlvylcAreaCds)">
AND GOS.DLVYLC_AREA_CD IN
<foreach collection="dlvylcAreaCds" item="dlvylcAreaCd" open="(" separator="," close=")">
#{dlvylcAreaCd}
</foreach>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(excelInclude, 'N')">
AND GOS.EXCEL_DOWN_DT IS NULL
</if>
</select>
<!-- 발주서 목록 조회 -->
<select id="selectExcelListPurchOrder" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrSrchVO" resultType="dataMap">
SELECT *
FROM (
SELECT CAST(@ROWNUM:=@ROWNUM+1 AS UNSIGNED) AS RNUM,
TB.*
FROM (
SELECT
GO.ORDR_RCEPT_DT,
'UNIHAN' AS ENTRPS_CD,
'UNIHAN CO.,LTD.' AS ENTRPS_NM,
'03-5990-2880' AS ENTRPS_TEL,
'RM.302,YOTSUYA-AKEBONOBASHI BLDG.,2-14, SUMIYOSHI-CHO, SHINJUKU-KU, TOKYO, 162-0065, JAPAN' AS ENTRPS_ADRES,
NULL AS SPCL_CSTMCLER_ENTRPS,
NULL AS SPCL_CSTMCLER_CD,
GO.ORDR_INNB,
1 AS PURPS_DV,
GOS.RECPNT_NM,
CAST(AES_DECRYPT(UNHEX(GOS.RECPNT_MBTLNB) , #{secretKey}) AS CHAR(50)) AS RECPNT_MBTLNB,
NULL AS RECPNT_HP,
GOS.CSTMCLER_CD,
GOS.DLVYLC_ZIP,
CASE
WHEN GOS.DLVYLC_ADRES_DV_CD = '01'
THEN GOS.DLVYLC_RNM_ADRES
ELSE GOS.DLVYLC_LNB_ADRES
END DLVYLC_RNM_LNB_ADRES,
GOS.DLVYLC_ADRES_DTL,
GOS.DLVY_MSSAGE_CN,
'www.sake1jan.com' AS CSTMR_PURCHS_SITE,
GOIO.REAL_WT,
GOIO.PACKAGE_CNT,
GOIO.HSCODE,
'A' AS CMMRC_TY,
CONCAT(GOI.GOODS_NM_EN, ' ', GOIO.OPTN_NM_1, '-', GOIO.OPTN_VAL_1) AS CN,
/*원가 관리 시작*/
GOIO.SLEPRIC,
GOS.DFT_DLVY_AMT,
GGC.CSTMS_FEE,
(
(GOIO.SLEPRIC + GOS.DFT_DLVY_AMT)
* GGC.PLTFOM_FEE
* GGC.EXPCT_TAX
) AS EXPCT_TAX_AMT,
GGC.EXPCT_TAX,
GGC.KR_DLVY_CT,
GGC.PLTFOM_FEE,
GGC.USD_RATE,
GGO.TAXABLE_USD AS UNIT_VALUE,
/*원가 관리 종료*/
GOIO.ORDR_QY,
GGO.TAXABLE_USD * GOIO.ORDR_QY AS VALUE,
NULL AS BRAND,
NULL AS PRE_FOOD_DCL,
NULL AS PROVD_NATION,
NULL AS PROVD_CMPNY_NM,
NULL AS CHNLNG_GOODS_NM,
NULL AS SHIPPER_PURCHS_SITE,
NULL AS SLE_AGNT_ENTRPS_NM,
NULL AS SLE_AGNT_ENTRPS_REGIST_CD,
NULL AS PURCHS_DLVY_AGENCY_NM,
NULL AS PURCHS_DLVY_AGENCY_REGIST_CD,
NULL AS OVSEA_SELER_NM,
GOS.ORDR_DLVY_INNB AS OVSEA_SELER_REGIST_CD,
CONCAT(GO.SUBSVC_AT, GOS.DLVYLC_AREA_CD, GOS.ORDR_DLVY_INNB) AS SITE_ORDR_INNB,
GOS.EXCEL_DOWN_DT,
/*아래부터는 발주서에 포함되지 않음*/
GO.ORDR_STTUS_CD,
GOI.ORDR_GOODS_INNB,
GOI.GOODS_INNB,
GOI.GOODS_NM,
GOIO.ORDR_GOODS_OPTN_INNB,
GOIO.GOODS_OPTN_INNB,
GOS.DLVYLC_AREA_CD,
GGC.STDR_DE
FROM GC_ORDER GO
INNER JOIN GC_ORDER_ITEM GOI
ON GOI.ORDR_INNB = GO.ORDR_INNB
AND GOI.SOPMAL_CD = GO.SOPMAL_CD
INNER JOIN GC_ORDER_ITEM_OPTION GOIO
ON GOIO.ORDR_GOODS_INNB = GOI.ORDR_GOODS_INNB
AND GOIO.SOPMAL_CD = GOI.SOPMAL_CD
INNER JOIN GC_ORDER_SHIPPING GOS
ON GOS.ORDR_DLVY_INNB = GOIO.ORDR_DLVY_INNB
AND GOS.SOPMAL_CD = GOIO.SOPMAL_CD
INNER JOIN GC_GOODS_OPTION GGO
ON GGO.GOODS_OPTN_INNB = GOIO.GOODS_OPTN_INNB
AND GGO.GOODS_INNB = GOI.GOODS_INNB
AND GGO.SOPMAL_CD = GO.SOPMAL_CD
LEFT JOIN GC_GOODS_COST GGC
ON GGC.STDR_DE = (
SELECT MAX(GGC.STDR_DE)
FROM GC_GOODS_COST GGC
WHERE GGC.STDR_DE <![CDATA[<=]]> GO.ORDR_RCEPT_DT
)
WHERE 1 = 1
AND GOIO.ORDR_STTUS_CD = #{srchOrdrSttusCd}
AND GO.SOPMAL_CD = #{sopmalCd}
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isNotEmpty(dlvylcAreaCds)">
AND GOS.DLVYLC_AREA_CD IN
<foreach collection="dlvylcAreaCds" item="dlvylcAreaCd" open="(" separator="," close=")">
#{dlvylcAreaCd}
</foreach>
</if>
<if test="@com.wb.domainserver.util.dataaccess.MybaitsUtil@isEquals(excelInclude, 'N')">
AND GOS.EXCEL_DOWN_DT IS NULL
</if>
ORDER BY GOS.CSTMCLER_CD ASC
) TB
WHERE (@rownum:=0)=0
) PV
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</select>
<!-- 발주서 엑셀다운로드 -->
<select id="selectExcelPoListDwld" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrSrchVO" resultType="dataMap">
SELECT
SYSDATE() AS ORDR_RCEPT_DT,
'UNIHAN' AS ENTRPS_CD,
'UNIHAN CO.,LTD.' AS ENTRPS_NM,
'03-5990-2880' AS ENTRPS_TEL,
'RM.302,YOTSUYA-AKEBONOBASHI BLDG.,2-14, SUMIYOSHI-CHO, SHINJUKU-KU, TOKYO, 162-0065, JAPAN' AS ENTRPS_ADRES,
NULL AS SPCL_CSTMCLER_ENTRPS,
NULL AS SPCL_CSTMCLER_CD,
CONCAT(GO.ORDR_INNB, 'A', GOS.ORDR_DLVY_INNB) AS ORDR_INNB,
1 AS PURPS_DV,
GOS.RECPNT_NM,
CAST(AES_DECRYPT(UNHEX(GOS.RECPNT_MBTLNB) , #{secretKey}) AS CHAR(50)) AS RECPNT_MBTLNB,
NULL AS RECPNT_HP,
GOS.CSTMCLER_CD,
GOS.DLVYLC_ZIP,
CASE
WHEN GOS.DLVYLC_ADRES_DV_CD = '01'
THEN GOS.DLVYLC_RNM_ADRES
ELSE GOS.DLVYLC_LNB_ADRES
END DLVYLC_RNM_LNB_ADRES,
GOS.DLVYLC_ADRES_DTL,
GOS.DLVY_MSSAGE_CN,
'www.sake1jan.com' AS CSTMR_PURCHS_SITE,
GOIO.REAL_WT,
GOIO.PACKAGE_CNT,
GOIO.HSCODE,
'A' AS CMMRC_TY,
CONCAT(GOI.GOODS_NM_EN, ' ', GOIO.OPTN_NM_1, '-', GOIO.OPTN_VAL_1) AS CN,
/*원가 관리 시작*/
GOIO.SLEPRIC,
GOS.DFT_DLVY_AMT,
GGC.CSTMS_FEE,
(
(GOIO.SLEPRIC + GOS.DFT_DLVY_AMT)
* GGC.PLTFOM_FEE
* GGC.EXPCT_TAX
) AS EXPCT_TAX_AMT,
GGC.EXPCT_TAX,
GGC.KR_DLVY_CT,
GGC.PLTFOM_FEE,
GGC.USD_RATE,
GGO.TAXABLE_USD AS UNIT_VALUE,
/*원가 관리 종료*/
GOIO.ORDR_QY,
GGO.TAXABLE_USD * GOIO.ORDR_QY AS VALUE,
NULL AS BRAND,
NULL AS PRE_FOOD_DCL,
NULL AS PROVD_NATION,
NULL AS PROVD_CMPNY_NM,
NULL AS CHNLNG_GOODS_NM,
NULL AS SHIPPER_PURCHS_SITE,
NULL AS SLE_AGNT_ENTRPS_NM,
NULL AS SLE_AGNT_ENTRPS_REGIST_CD,
NULL AS PURCHS_DLVY_AGENCY_NM,
NULL AS PURCHS_DLVY_AGENCY_REGIST_CD,
NULL AS OVSEA_SELER_NM,
GOS.ORDR_DLVY_INNB AS OVSEA_SELER_REGIST_CD,
CONCAT(GO.SUBSVC_AT, GOS.DLVYLC_AREA_CD, GOS.ORDR_DLVY_INNB) AS SITE_ORDR_INNB,
GOS.EXCEL_DOWN_DT,
/*아래부터는 발주서에 포함되지 않음*/
GO.ORDR_STTUS_CD,
GOI.ORDR_GOODS_INNB,
GOI.GOODS_INNB,
GOI.GOODS_NM,
GOIO.ORDR_GOODS_OPTN_INNB,
GOIO.GOODS_OPTN_INNB,
GOS.DLVYLC_AREA_CD,
GGC.STDR_DE
FROM GC_ORDER GO
INNER JOIN GC_ORDER_ITEM GOI
ON GOI.ORDR_INNB = GO.ORDR_INNB
AND GOI.SOPMAL_CD = GO.SOPMAL_CD
INNER JOIN GC_ORDER_ITEM_OPTION GOIO
ON GOIO.ORDR_GOODS_INNB = GOI.ORDR_GOODS_INNB
AND GOIO.SOPMAL_CD = GOI.SOPMAL_CD
INNER JOIN GC_ORDER_SHIPPING GOS
ON GOS.ORDR_DLVY_INNB = GOIO.ORDR_DLVY_INNB
AND GOS.SOPMAL_CD = GOIO.SOPMAL_CD
INNER JOIN GC_GOODS_OPTION GGO
ON GGO.GOODS_OPTN_INNB = GOIO.GOODS_OPTN_INNB
AND GGO.GOODS_INNB = GOI.GOODS_INNB
AND GGO.SOPMAL_CD = GO.SOPMAL_CD
LEFT JOIN GC_GOODS_COST GGC
ON GGC.STDR_DE = (
SELECT MAX(GGC.STDR_DE)
FROM GC_GOODS_COST GGC
WHERE GGC.STDR_DE <![CDATA[<=]]> GO.ORDR_RCEPT_DT
)
WHERE 1 = 1
AND GOIO.ORDR_STTUS_CD = #{srchOrdrSttusCd}
AND GO.SOPMAL_CD = #{sopmalCd}
AND <foreach collection="srchInnbPairs" item="pair" index="index" open="(" separator=" OR " close=")">
(
GOS.ORDR_INNB = #{pair.srchOrdrInnb}
AND GOS.ORDR_DLVY_INNB = #{pair.srchOrdrDlvyInnb}
)
</foreach>
ORDER BY GOS.CSTMCLER_CD ASC
</select>
<!-- 엑셀 다운로드 일시 업데이트 -->
<update id="updateExcelDownDt" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrSrchVO">
UPDATE GC_ORDER_SHIPPING GOS
SET GOS.EXCEL_DOWN_DT = SYSDATE()
WHERE <foreach collection="srchInnbPairs" item="pair" index="index" open="(" separator=" OR " close=")">
(
GOS.ORDR_INNB = #{pair.srchOrdrInnb}
AND GOS.ORDR_DLVY_INNB = #{pair.srchOrdrDlvyInnb}
)
</foreach>
</update>
<!--
####################################
관리자 > 주문 > 주문관리 > 발주서 관리 종료
####################################
-->
<!--
####################################
관리자 > 주문 > 개인결제관리 시작

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -4269,6 +4269,9 @@ body {
.header--sub:has(.headerTab) ~ .content-wrap {
padding-top: 96px;
}
.header--sub:has(.mobile-about-menu) ~ .content-wrap {
padding-top: 96px;
}
.header--sub::before {
content: "";
position: absolute;
@@ -5706,6 +5709,17 @@ body {
color: #16191d;
font-weight: 400;
}
.mainNotice__customerContact-alwaysonbottom {
position: fixed;
left: 10px;
bottom: 60px;
z-index: 10;
}
.icon_kakao-customer-service {
width: 72px;
height: 72px;
background-image: url(../images/icon_kakao_customer.png);
}
.notice__title {
display: inline-block;
@@ -14740,4 +14754,4 @@ body {
margin-bottom: 20px;
padding: 14px 28px;
background-color: #ffffff;
}/*# sourceMappingURL=default.css.map */
}/*# sourceMappingURL=default.css.map */

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@@ -5560,20 +5560,36 @@ main {
}
.quick-menu__customer-service {
position: relative;
cursor: pointer;
}
.quick-menu__customer-service__num {
position: absolute;
bottom: 24px;
top: 80%;
left: 50%;
transform: translateX(-50%);
font-size: 24px;
width: 100%;
transform: translate(-50%, -50%);
font-size: 14px;
line-height: 1;
font-weight: 700;
color: #212529;
text-align: center;
}
.quick-menu__customer-service-alwaysonbottom {
position: fixed;
left: 20px;
bottom: 20px;
z-index: 10;
}
.quick-menu > * + * {
margin-top: 16px;
}
.icon_kakao-customer-service {
width: 108px;
height: 108px;
background-image: url(../images/icon_kakao_customer.png);
/* 이미지 그림자 */
filter: drop-shadow(0px 3px 4px rgba(0, 0, 0, 0.15));
}
.recentProductSlick {
width: 100%;

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@@ -525,3 +525,10 @@
<div class="loadingImg" style="display:none; position: relative; z-index: 1010;">
<div class="loding_popup_wrap"><img src="/mobile/images/loading.svg" alt="loading"></div>
</div>
<!--고객센터 아이콘-->
<div class="quick-menu__customer-service-alwaysonbottom"
onclick="window.open('http://pf.kakao.com/_xjxjHxnX', '_blank');">
<i class="icon icon_kakao-customer-service"></i>
<span class="visually-hidden">고객센터</span>
<%-- <span class="quick-menu__customer-service__num">문의는 카톡으로 </span>--%>
</div>

View File

@@ -35,10 +35,32 @@
</div>
</div>
</div>
<c:if test="${param.mobileAboutMenuAt eq 'Y' && not empty param.mobileParentCtgryId}">
<c:set var="mobileAboutCurrentCtgryId" value="${param.mobileCurrentCtgryId}"/>
<nav class="home-category mobile-about-menu" aria-label="하위 메뉴">
<div class="home-category__content">
<ul class="home-category__list">
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}">
<c:if test="${topMenuList.ctgryDvCd eq '01' && topMenuList.rnum eq '3' && topMenuList.upperCtgryId eq param.mobileParentCtgryId && topMenuList.menuExpsrAt eq 'Y'}">
<c:if test="${empty mobileAboutCurrentCtgryId}">
<c:set var="mobileAboutCurrentCtgryId" value="${topMenuList.ctgryId}"/>
</c:if>
<li class="home-category__item<c:if test="${topMenuList.ctgryId eq mobileAboutCurrentCtgryId}"> active</c:if>">
<a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${param.mobileParentCtgryId}"/>&amp;mobileAboutMenuAt=Y&amp;mobileCurrentCtgryId=<c:out value="${topMenuList.ctgryId}"/>"
class="home-category__link">
<c:out value="${topMenuList.ctgryNm}"/>
</a>
</li>
</c:if>
</c:forEach>
</ul>
</div>
</nav>
</c:if>
</div>
<script>
//뒤로가기 이벤트 부여, 각 페이지 마다 이벤트 삭제 후 다른 이벤트 사용 가능
$(".header__toBack__btn").on("click",function (){
fn_go_back();
});
</script>
</script>

View File

@@ -1070,10 +1070,11 @@
<c:if test="${topMenuList.gnbExpsrAt eq 'Y'}">
<c:if test="${topMenuList.rnum eq '2'}">
<c:set var="mDpth3Chk" value="N"/>
<c:set var="mobileAboutParentAt" value="${topMenuList.ctgryNm eq 'ABOUT'}"/>
<li class="isSub list">
<div class="isSubDv">
<a href="<c:out value="${topMenuList.url}"/>" class="depth"><c:out value ="${topMenuList.ctgryNm}"/><em class="visually-hidden">상세내용닫기</em></a>
<a href="<c:out value="${topMenuList.url}"/>" class="moer"></a>
<a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${topMenuList.ctgryId}"/><c:if test="${topMenuList.ctgryNm eq 'ABOUT'}">&amp;mobileAboutMenuAt=Y</c:if>" class="depth"><c:out value ="${topMenuList.ctgryNm}"/><em class="visually-hidden">상세내용닫기</em></a>
<a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${topMenuList.ctgryId}"/><c:if test="${topMenuList.ctgryNm eq 'ABOUT'}">&amp;mobileAboutMenuAt=Y</c:if>" class="moer"></a>
</div>
</c:if>
<c:if test="${topMenuList.rnum eq '3'}">
@@ -1082,7 +1083,7 @@
<c:set var="mDpth3Chk" value="Y"/>
<ul class="view">
</c:if>
<li><a href='<c:out value="${topMenuList.url}"/>'><c:out value ="${topMenuList.ctgryNm}"/></a></li>
<li><a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${topMenuList.upperCtgryId}"/>&amp;mobileCurrentCtgryId=<c:out value="${topMenuList.ctgryId}"/><c:if test="${mobileAboutParentAt}">&amp;mobileAboutMenuAt=Y</c:if>"><c:out value ="${topMenuList.ctgryNm}"/></a></li>
</c:if>
<c:if test="${topMenuList.rnum < 4}">
<c:set var="chkUpperMenuCd" value="${topMenuList.upperCtgryId}"/>
@@ -1233,6 +1234,12 @@
<div id="mbrMarktClauseAgreeDiv"></div>
<%--고객센터 아이콘--%>
<div class="mainNotice__customerContact-alwaysonbottom" style="display: none;"
onclick="window.open('http://pf.kakao.com/_xjxjHxnX', '_blank');">
<i class="icon icon_kakao-customer-service"></i>
</div>
<script>
/*최초 로그인시 마케팅 수신동의를 받지 않았을 경우 마케팅 수신동의 팝업 띄우기*/
@@ -1271,6 +1278,16 @@ $(document).ready(function() {
if(locationUrl.includes("selectMbrPurchsForm")){
document.cookie = 'marktAgreeAt=P; path=/'
}
$(document).ready(function() {
var $notice = $('.mainNotice__customerContact-alwaysonbottom');
if ($('.tab-bar').length) {
$notice.fadeIn(500);
} else if ($('.productDetail').length) {
$notice.css('bottom', '70px').fadeIn(500);
}
});
})
//광고 수신동의여부 수정

View File

@@ -66,7 +66,7 @@
<c:if test="${topMenuList.ctgryDvCd eq '01' && topMenuList.menuExpsrAt eq 'Y'}">
<c:if test="${topMenuList.rnum eq '2'}">
<li class="home-category__item">
<a href="<c:out value="${topMenuList.url}"/>" onclick="setTopMenuCode()" <c:if test="${not empty topMenuList.menuChrColor}"> style="color:${topMenuList.menuChrColor};"</c:if>><c:out value ="${topMenuList.ctgryNm}"/></a>
<a href="<c:out value="${topMenuList.url}"/><c:choose><c:when test="${fn:contains(topMenuList.url, '?')}">&amp;</c:when><c:otherwise>?</c:otherwise></c:choose>mobileParentCtgryId=<c:out value="${topMenuList.ctgryId}"/><c:if test="${topMenuList.ctgryNm eq 'ABOUT'}">&amp;mobileAboutMenuAt=Y</c:if>" onclick="setTopMenuCode()" <c:if test="${not empty topMenuList.menuChrColor}"> style="color:${topMenuList.menuChrColor};"</c:if>><c:out value ="${topMenuList.ctgryNm}"/></a>
</li>
</c:if>
</c:if>
@@ -90,4 +90,4 @@
$(".top-banner__close").click(function () {
$(".top-banner").remove();
});
</script>
</script>

View File

@@ -6,7 +6,7 @@
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
<!DOCTYPE html>
<html lang="ko">
<head>
@@ -1272,13 +1272,14 @@
</div>
</c:if>
</div>
<%-- <div class="quick-menu__customer-service">--%>
<%-- <i class="icon icon_quick-customer-service"></i>--%>
<%-- <span class="visually-hidden">고객센터</span>--%>
<%-- <span class="quick-menu__customer-service__num">--%>
<%-- ${ fn:replace(resultMap.operAt.cscTelnb, '-', '<br>') }--%>
<%-- </span>--%>
<%-- </div>--%>
<%--<div class="quick-menu__customer-service"
onclick="window.open('http://pf.kakao.com/_xjxjHxnX', '_blank');">
<i class="icon icon_kakao-customer-service"></i>
<span class="visually-hidden">고객센터</span>
<span class="quick-menu__customer-service__num">
문의는 카톡으로
</span>
</div>--%>
<div class="quick-menu__to-top">
<button><i class="icon icon_quick-to-top"></i><span class="visually-hidden">위로
가기</span></button>

View File

@@ -6,7 +6,7 @@
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
<%@ page import="java.util.Date" %>
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
<%--
Class Name : GnrlBbscttDtlPopupR.jsp
Description : 일반 게시글 상세 조회 화면
@@ -143,7 +143,7 @@
<c:if test="${bbsInfo.goodsChoice eq 'Y' }">
<c:if test="${not empty goodsList}">
<tr>
<th>상품정보</th>
<th>상품 정보</th>
<td colspan="3">
<div class="product-search-box__product parentGoodsContainer">
<c:forEach var="goods" items="${goodsList}">
@@ -161,7 +161,7 @@
<div class="product-group__description">
<p><c:out value="${goods.goodsNm}"/></p>
<p class="product-group__description-price"><fmt:formatNumber
value="${goods.slepric}" pattern="#,###"/>원</p>
value="${goods.slepric}" pattern="#,###"/>${curUnit}</p>
</div>
<c:if test="${bbsInfo.bbsTyCd eq '05'}">
<input hidden id="goodsInnb" value="${goods.goodsInnb}"/>
@@ -171,6 +171,14 @@
</div>
</td>
</tr>
<tr>
<th>상품 정보 문구</th>
<td colspan="3">
<div class="td-inner" id="relateGoodsWords">
${bbscttInfo.relateGoodsWords}
</div>
</td>
</tr>
</c:if>
</c:if>
<tr>

View File

@@ -22,6 +22,7 @@
<%@include file ="/WEB-INF/views/comm/mngr/Include.jsp" %>
<script src="<c:url value='/js/fileupload_comm.js'/>"></script>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
<script>
$(document).ready(function () {
/************************************************
@@ -1514,7 +1515,8 @@
const cdnurl = '${cdnurl}';
selected.forEach((good, index) => {
let goodsPrice = fn_format_comma(good.goodsPrice);
let slepric = fn_format_comma(good.goodsPrice);
let slepric = fn_format_comma(good.goodsPrice);
let curUnit = '${curUnit}';
var productHtml = `
<div class="product-group__item">
<input type="hidden" id="relatedGoodsId" name="relatedGoodsId" value="\${good.goodsId}">
@@ -1528,7 +1530,7 @@
</button>
<div class="product-group__description">
<p>\${good.goodsNm}</p>
<p class="product-group__description-price">\${goodsPrice}</p>
<p class="product-group__description-price">\${goodsPrice}\${curUnit}</p>
</div>
<%--게시글 연관 상품--%>
<input type="hidden" name="goodsInnbArr[]" value="\${good.goodsId}"/>

View File

@@ -280,26 +280,34 @@
</td>
</c:if>
</tr>
<tr class="visibleAt">
<c:if test="${bbsInfo.goodsChoice eq 'Y'}">
<th>상품 정보
<button type="button" class="btn xsm primary ml-5"
onclick="fn_open_modal('#modalDiv',
'#product-search',
'/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',
{'goodsKndCd':'01'}); return false;">
검색
</button>
</th>
<td colspan="3">
<div class="td-inner">
<div class="product-search-box__product parentGoodsContainer">
<c:if test="${bbsInfo.goodsChoice eq 'Y'}">
<tr class="visibleAt">
<th>상품 정보
<button type="button" class="btn xsm primary ml-5"
onclick="fn_open_modal('#modalDiv',
'#product-search',
'/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',
{'goodsKndCd':'01'}); return false;">
검색
</button>
</th>
<td colspan="3">
<div class="td-inner">
<div class="product-search-box__product parentGoodsContainer">
</div>
</div>
</td>
</c:if>
</tr>
</div>
</div>
</td>
</tr>
<tr class="visibleAt">
<th>상품 정보 문구</th>
<td colspan="3">
<div class="td-inner">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" placeholder="관련 상품 문구를 입력해 주세요." name="relateGoodsWords" maxlength="50" value="이 글과 관련된 사케">
</div>
</td>
</tr>
</c:if>
<c:if test="${not empty qesitmList}">
<tr>
<th>추가 입력 항목</th>

View File

@@ -6,6 +6,8 @@
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
<%--
Class Name : GnrlBbscttUpdtPopupU.jsp
Description : 일반 게시글 등록 팝업
@@ -15,7 +17,6 @@
------- -------- ---------------------------
2024-01-08 김혜지 최초 생성
--%>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div id="board-list-update" class="modal" style="max-width: 1400px;">
<div class="modal-header">
<h4>게시글 수정</h4>
@@ -474,26 +475,26 @@
</td>
</c:if>
</tr>
<tr class ="visibleAt">
<c:if test = "${bbsInfo.goodsChoice eq 'Y'}">
<c:if test = "${bbsInfo.goodsChoice eq 'Y'}">
<tr class ="visibleAt">
<th>상품 정보
<c:choose>
<c:when test = "${not empty goods}">
<c:when test = "${not empty goods}">
<button type="button" class="btn xsm primary ml-5"
onclick="fn_open_search_modal('#modalDiv','#product-search','/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',{'goodsKndCd':'01'}); return false;">
검색
</button>
</c:when>
<c:otherwise>
</c:when>
<c:otherwise>
<button type="button" class="btn xsm primary ml-5"
onclick="fn_open_modal('#modalDiv','#product-search','/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',{'goodsKndCd':'01'}); return false;">
onclick="selected = []; fn_open_modal('#modalDiv','#product-search','/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',{'goodsKndCd':'01'}); return false;">
검색
</button>
</c:otherwise>
</c:otherwise>
</c:choose>
</th>
<td colspan="3">
<div class="td-inner">
<td colspan="3">
<div class="td-inner">
<div class="product-search-box__product parentGoodsContainer">
<c:if test = "${not empty goods}">
<c:forEach var = "goods" items = "${goods}">
@@ -510,7 +511,7 @@
</button>
<div class="product-group__description">
<p><c:out value="${goods.goodsNm}"/></p>
<p class="product-group__description-price"><fmt:formatNumber value="${goods.slepric}" pattern="#,###"/>원</p>
<p class="product-group__description-price"><fmt:formatNumber value="${goods.slepric}" pattern="#,###"/>${curUnit}</p>
</div>
<%--게시글 연관 상품--%>
<input type="hidden" name="goodsInnbArr[]" value="${goods.goodsInnb}"/>
@@ -518,10 +519,18 @@
</c:forEach>
</c:if>
</div>
</div>
</td>
</c:if>
</tr>
</div>
</td>
</tr>
<tr class="visibleAt">
<th>상품 정보 문구</th>
<td colspan="3">
<div class="td-inner">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" placeholder="관련 상품 문구를 입력해 주세요." name="relateGoodsWords" maxlength="50" value = "${bbscttInfo.relateGoodsWords}">
</div>
</td>
</tr>
</c:if>
<c:if test="${not empty qesitmList}">
<tr>
<th>추가 입력 항목</th>
@@ -904,4 +913,4 @@
var inputElement = $('input[type="file"].dz-hidden-input');
inputElement.attr('name', 'files');
inputElement.attr('id', 'fileUploadDrop');
</script>
</script>

View File

@@ -133,6 +133,17 @@
});
}
/* ********************************************************
* xml 임시
******************************************************** */
const fn_update_xml = function () {
const url = '<c:url value="/mngr/goods/goodsmngr/selectGoodsRegistForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
/* ********************************************************
* 등록폼 이동
******************************************************** */
@@ -441,6 +452,7 @@
<div class="page-title">
<h2 class="page-title__title">상품 목록</h2>
<div class="page-title__btn-container">
<button onclick="fn_update_xml()" class="btn primary">XML 업데이트(임시)</button>
<button onclick="fn_move_regpage()" class="btn primary">상품 <spring:message code="button.insert"/></button>
</div>
</div>

View File

@@ -23,7 +23,7 @@
fn_select_list(pageIndex, pageUnit);
//지정일
fn_set_date('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDㄴt');
fn_set_date('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt');
//날짜 선택 버튼 선택 처리
$(".dateRange-btnContainer").on("click", ".dateRange-btn", function(){

View File

@@ -446,42 +446,23 @@
* 열 헤더, 푸터 > 프린트 버튼 클릭 이벤트
*/
$(document).on('click', '[class*="btn-order-print"]', function() {
const tr = ($(this).attr('class').split(' ')[0]).replace('btn-order-print-', 'order-sttus-cd-');
const rowCheckboxs = $('.' + tr).closest('#orderList').find('.' + tr + ' input[name="ordrInnb"]:checked');
fn_select_dwld_purch_ordr_list();
/*const tr = ($(this).attr('class').split(' ')[0]).replace('btn-order-print-', 'order-sttus-cd-');
const rowCheckboxs = $('.' + tr).closest('#orderList').find('.' + tr + ' input[name="ordrInnb"]:checked');
if (rowCheckboxs.length === 0) {
alert('선택값이 없습니다.');
if (rowCheckboxs.length === 0) {
alert('선택값이 없습니다.');
return false;
}
return false;
}
let ordrInnbs = [];
let ordrInnbs = [];
$(rowCheckboxs).each(function(idx, item) {
ordrInnbs.push($(item).val());
});
$(rowCheckboxs).each(function(idx, item) {
ordrInnbs.push($(item).val());
});
fn_go_ordr_dtstmn_dwld_popup(ordrInnbs)
});
/*
* 열 헤더 > 엑셀 발주서 다운로드 버튼 클릭 이벤트
*/
$(document).on('click', '.excel-dwld-purch-order', function() {
const srchStartDate = $('#srchStartDate').val();
const srchEndDate = $('#srchEndDate').val();
const srchOrdrSttusCd = '35';
var form = $('#condForm').clone().prop("id", "excelCondForm")
$(form).append($('<input/>', {type:'hidden', name:'srchOrdrSttusCd', value:srchOrdrSttusCd}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/mngr/ordr/ordrmngr/selectExcelPoDwldListInqire"/>');
$(form).appendTo('body');
$(form).submit();
$(form).remove();
fn_go_ordr_dtstmn_dwld_popup(ordrInnbs)*/
});
/*
@@ -806,7 +787,7 @@
header += ' <button type="button" class="btn-order-print-' + data.ordrSttusCd + ' btn outline xsm fs-13"><i class="icon icon_print"></i>프린트</button>';
if ('35' === data.ordrSttusCd) {
header += ' <button type="button" class="btn sm outline fs-13 excel-dwld-purch-order">';
header += ' <button type="button" onclick="fn_select_dwld_purch_ordr_list()" class="btn sm outline fs-13">';
header += ' <i class="icon icon_excel"></i>발주서 다운로드';
header += ' </button>';
}
@@ -1404,7 +1385,7 @@
}
footer += ' <button type="button" class="btn-order-print-' + data.ordrSttusCd + ' btn outline xsm fs-13"><i class="icon icon_print"></i>프린트</button>';
if ('35' === prevOrderSttusCd) {
footer += ' <button type="button" class="btn sm outline fs-13 excel-dwld-purch-order">';
footer += ' <button type="button" onclick="fn_select_dwld_purch_ordr_list()" class="btn sm outline fs-13">';
footer += ' <i class="icon icon_excel"></i>발주서 다운로드';
footer += ' </button>';
}
@@ -1738,8 +1719,6 @@
$(form).submit();
}
/* 다운로드 항목 목록 이동 */
const fn_select_dwld_ordr_list = function() {
var form = $('#condForm')
@@ -1753,9 +1732,17 @@
$(form).submit();
}
/* 발주서 다운로드 항목 목록 이동 */
const fn_select_dwld_purch_ordr_list = function() {
var form = $('#condForm')
$(form).find('input[name="ordrInnb"]').remove();
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/mngr/ordr/ordrmngr/selectExcelPoListInqireRForm"/>');
$(form).submit();
}
</script>
</head>
<body>
@@ -1785,6 +1772,7 @@
<a type="button" onclick="fn_select_indvdl_setle_list();" class="btn outline">개인 결제 목록</a>
<a href="<c:url value="/crm/ordr/selectMngrOrdrRegistForm"/>" class="btn outline" target='_blank'>관리자 주문 등록</a>
<a type="button" onclick="fn_select_dwld_ordr_list();" class="btn outline">다운로드 항목설정 목록</a>
<a type="button" onclick="fn_select_dwld_purch_ordr_list()" class="btn outline"><i class="icon icon_excel"></i>발주서 다운로드</a>
<button type="button" class="btn primary" onclick="fn_dlivy_procs_popup('/mngr/ordr/dlivy/selectOrdrDlivyPopupForm','팝업','1400','840', 'O');">출고처리</button>
</div>
</div>

View File

@@ -1518,7 +1518,10 @@
$("#overlay").fadeOut();
if (!data.responseJSON.resBody.message) {
alert('<spring:message code="error.internal-server"/>');
if(!data.responseJSON.resBody.result)
alert('<spring:message code="error.internal-server"/>');
else
alert(data.responseJSON.resBody.result);
} else {
if (fn_check_json(data.responseJSON.resBody.message)) {
const errorObject = JSON.parse(data.responseJSON.resBody.message);

View File

@@ -63,7 +63,9 @@
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: 40%;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: 20%;">
</colgroup>
<tbody>
<tr>
@@ -103,6 +105,12 @@
</div>
</div>
</td>
<th class="text-right">개인통관부호</th>
<td>
<div class="td-inner">
<input type="text" class="input-text" name="cstmclerCd" id="cstmclerCd" value="${orderShipping.cstmclerCd}" maxlength="13" placeholder="P로 시작하는 13자리 부호를 입력하세요"/>
</div>
</td>
</tr>
</tbody>
</table>

View File

@@ -0,0 +1,533 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
<spring:eval expression="@environment.getProperty('currency-unit.KR')" var="krUnit"/>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<%@ include file="/WEB-INF/views/comm/mngr/Include.jsp"%>
<style>
@media print {
html, body {
height:auto;
width:auto;
margin: 0 !important;
padding: 0 !important;
overflow: hidden;
}
}
.right {
text-align: right;
}
.pbreak {
page-break-after: always;
}
.pbreak:last-child {
page-break-after: auto;
}
table.order_print_info tr th {
padding:3px 3px 3px 3px;
text-align:left;
font-size:11px;
color:#4d4d4d;
font-weight:normal;
}
table.order_print_info tr td {
padding:3px 3px 3px 3px;
text-align:right;
font-size:11px;
}
table.delivery_print_info {
border-collapse:collapse !important;
border:1px solid #bcbfc1;
table-layout: fixed;
}
table.delivery_print_info tr th {
padding:3px 3px 3px 3px;
font-size:11px;
color:#4d4d4d;
font-weight:normal;
}
table.delivery_print_info tr td {
padding:3px 3px 3px 3px;
font-size:11px;
}
table.delivery_goods_print_info {
border-collapse:collapse !important;
border:1px solid #bcbfc1;
table-layout: fixed
}
table.delivery_goods_print_info tr th {
padding:3px 3px 3px 3px;
font-size:11px;
color:#4d4d4d;
font-weight:normal;
border-left:1px solid #bcbfc1;
border-top:1px solid #bcbfc1;
}
table.delivery_goods_print_info tr td {
padding:3px 3px 3px 3px;
font-size:11px;
border-left:1px solid #bcbfc1;
border-top:1px solid #bcbfc1;
}
span.title_print_info {
font-size:12px;
color:#000000;
font-weight:normal;
letter-spacing:-1px;
}
table.order-sale-summary tr.total-sale-title td {
font-size:14px !important;
font-weight:normal !important;
color:#000000 !important;
}
tr.detail-sale-summary td div {
padding:0px !important;
color:#000000 !important;
}
tr.detail-sale-summary td {
color:#000000 !important;
}
tr.detail-sale-summary td span {
padding:0px !important;
color:#000000;
}
tr.total-sale-title td span {
padding:0px !important;
color:#000000;
}
tr.detail-sale-summary td:last-child {
padding:0px !important;
color:#000000 !important;
font-weight:normal !important;
}
tr.detail-sale-summary td:last-child span {
padding:0px !important;
color:#000000 !important;
font-size:14px !important;
font-weight:normal !important;
}
span.unit-money {
display:inline-block;width:10px;
}
tr {
page-break-inside:avoid;
page-break-after:auto;
}
td {
page-break-inside:avoid;
page-break-after:auto;
}
</style>
<script>
$(document).ready(function(){
loding(false);
window.print();
});
</script>
</head>
<body>
<div id="wrap">
<c:set var="ordrDtstmnDwlds" value="${data.ordrDtstmnDwldList}"/>
<c:forEach var="ordrDtstmnDwld" items="${ordrDtstmnDwlds}" varStatus="status">
<c:set var="shipping" value="${ordrDtstmnDwld.shipping}"/>
<c:set var="srchOrdrDlvyInnb" value="${ordrSrchVO.srchOrdrDlvyInnbs[status.index]}"/>
<c:set var="isLast" value="${ordrDtstmnDwlds.size() ne status.count}"/>
<div class="pbreak">
<div align="center">
<table>
<tr>
<td>
<span style="text-align:center;font-size:20px;letter-spacing:-1px;font-weight:bold;padding-top:20px;">
주문내역서
</span>
</td>
</tr>
</table>
</div>
<div style="height:5px;"></div>
<table style="width:100%;">
<col style="width:48%;">
<col style="width:4%;">
<col style="width:48%;">
<tr>
<td><span class="title_print_info">주문정보</span></td>
<td></td>
<td><span class="title_print_info">결제정보</span></td>
</tr>
<tr>
<td><div style="width:100%;border-top:1px solid #545454;height:1px;"></div></td>
<td></td>
<td><div style="width:100%;border-top:1px solid #545454;height:1px;"></div></td>
</tr>
<tr>
<td>
<c:set var="ordr" value="${ordrDtstmnDwld.ordr}"/>
<c:set var="setle" value="${ordrDtstmnDwld.setle}"/>
<table class="order_print_info" style="width:100%;">
<tr>
<th>주문번호</th>
<td>${ordr.ordrInnb}</td>
</tr>
<tr>
<th>주문일자</th>
<td>${ordr.ordrRceptDt}</td>
</tr>
<tr>
<th>주문고객</th>
<td>${ordr.mbrNm}</td>
</tr>
<tr>
<th>전화</th>
<td>${ordr.ordrrTelnb}</td>
</tr>
<tr>
<th>휴대전화</th>
<td>${ordr.ordrrMbtlnb}</td>
</tr>
<tr>
<th>이메일</th>
<td>${ordr.ordrrEmailAdres}</td>
</tr>
</table>
</td>
<td></td>
<td valign="top">
<table class="order_print_info" style="width:100%;">
<tr>
<th>상품금액</th>
<td><fmt:formatNumber value="${setle.slepric}" pattern="#,###"/>${curUnit}</td>
</tr>
<tr>
<th>배송비</th>
<td><fmt:formatNumber value="${setle.dlvyAmt}" pattern="#,###"/>${curUnit}</td>
</tr>
<tr>
<th>할인</th>
<td><fmt:formatNumber value="${setle.dscntAmt}" pattern="#,###"/>${curUnit}</td>
</tr>
<tr>
<th>총 결제금액</th>
<td>
<span style="font-size:12px;">
<fmt:formatNumber value="${setle.setleAmt}" pattern="#,###"/>${curUnit}
(<fmt:formatNumber value="${setle.wonRlSetleAmt}" pattern="#,###"/>${krUnit})
</span>
</td>
</tr>
<tr>
<th>결제수단</th>
<td>${ordr.setleTyNm}</td>
</tr>
</table>
</td>
</tr>
</table>
<div style="height:10px"></div>
<table align="center" style="width:100%;">
<tr>
<td class="left"><span class="title_print_info">주문상품 (${ordr.itemCnt}종 - 총 ${ordr.orderCnt}개)</span></td>
</tr>
</table>
<div style="height:3px"></div>
<c:set var="goodsList" value="${ordrDtstmnDwld.goods}"/>
<c:if test="${not empty goodsList}">
<table class="delivery_goods_print_info" align="center" style="width:100%; ${status.count > 1 ? 'margin-top:5px;' : '' }">
<colgroup>
<col style="width:auto;">
<col style="width:50px;">
<col style="width:35px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:35px;">
</colgroup>
<tr>
<th>상품명</th>
<th>순번</th>
<th>주문</th>
<th>판매가</th>
<th>할인</th>
<th>할인가(단가)</th>
<th>적립</th>
<th>배송</th>
<th>취소</th>
</tr>
<c:forEach var="goods" items="${goodsList}" varStatus="status">
<tr>
<td>
<table style="border:0px">
<tr>
<td style="font-size:11px;border:0px;">
${goods.goodsNm}
<c:if test="${not empty goods.optnNm}">
<div style="padding:2px 0px 0px 0px;">- ${goods.optnNm}</div>
</c:if>
</td>
</tr>
</table>
</td>
<td class="right">
<c:forEach var="ship" items="${shipping}" varStatus="status">
<c:if test="${ship.ordrDlvyInnb == goods.ordrDlvyInnb}">
${status.count}번째
</c:if>
</c:forEach>
</td>
<td class="right"><fmt:formatNumber value="${goods.ordrQy}" pattern="#,###"/></td>
<td class="right"><fmt:formatNumber value="${goods.slepric}" pattern="#,###"/>${curUnit}</td>
<td class="right"><fmt:formatNumber value="${goods.dscntAmt}" pattern="#,###"/>${curUnit}</td>
<td class="right"><fmt:formatNumber value="${goods.applyDscntAmt}" pattern="#,###"/>${curUnit}<br/>(<fmt:formatNumber value="${goods.slepric}" pattern="#,###"/>${curUnit})</td>
<td class="right"><fmt:formatNumber value="${goods.mlgAmt}" pattern="#,###"/></td>
<td class="right">
<div><span>${goods.dlvyMthNm}</span></div>
<div><span class="bold"><fmt:formatNumber value="${goods.dlvyAmt}" pattern="#,###"/>${curUnit}</span></div>
</td>
<td class="right"><fmt:formatNumber value="${goods.setleCanclQy}" pattern="#,###"/></td>
</tr>
</c:forEach>
</table>
</c:if>
<c:if test="${empty goodsList}">
<table class="delivery_goods_print_info" align="center" style="width:100%;">
<colgroup>
<col style="width:auto;">
<col style="width:50px;">
<col style="width:35px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:35px;">
</colgroup>
<tr>
<th>상품명</th>
<th>순번</th>
<th>주문</th>
<th>판매가</th>
<th>할인</th>
<th>할인가(단가)</th>
<th>적립</th>
<th>배송</th>
<th>취소</th>
</tr>
<tr>
<td colspan="9" style="text-align: center">조회된 데이터가 없습니다.</td>
</tr>
</table>
</c:if>
<div style="height:10px"></div>
<div>
<table style="width:100%;">
<tr>
<td><span class="title_print_info">배송정보</span></td>
</tr>
</table>
<c:if test="${not empty shipping}">
<c:forEach var="ship" items="${shipping}" varStatus="status">
<c:if test="${srchOrdrDlvyInnb eq ship.ordrDlvyInnb}">
<table class="delivery_goods_print_info" style="width:100%; ${status.count > 1 ? 'margin-top:5px;' : '' }">
<col style="width:5%;">
<col style="width:20%;">
<col style="width:20%;">
<col style="width:20%;">
<tr align="left">
<td rowspan="3">${status.count}번째</td>
<td>${ship.recpntNm}</td>
<td>${ship.recpntMbtlnb}</td>
<td>${ship.recpntTelnb}</td>
</tr>
<tr align="left">
<td colspan="3">
${not empty ship.dlvylcZip ? '(' += ship.dlvylcZip += ')' : ''}
${ship.adres}
${ship.dlvylcAdresDtl}
</td>
</tr>
<tr align="left">
<td colspan="3">
<c:if test="${empty ship.dlvyMssageCn}">
-
</c:if>
<c:if test="${not empty ship.dlvyMssageCn}">
${ship.dlvyMssageCn}
</c:if>
</td>
</tr>
</table>
</c:if>
</c:forEach>
</c:if>
<c:if test="${empty shipping}">
<table class="delivery_goods_print_info" style="width:100%; ${status.count > 1 ? 'margin-top:5px;' : '' }">
<col style="width:5%;">
<col style="width:20%;">
<col style="width:20%;">
<col style="width:20%;">
<tr><td colspan="9" style="text-align: center">조회된 데이터가 없습니다.</td></tr>
</table>
</c:if>
</div>
<div style="height:10px"></div>
<table align="center" style="width:100%;">
<tr>
<td class="left"><span class="title_print_info">발송상품</span></td>
</tr>
</table>
<div style="height:3px"></div>
<c:set var="goodsList" value="${ordrDtstmnDwld.goods}"/>
<c:if test="${not empty goodsList}">
<table class="delivery_goods_print_info" align="center" style="width:100%; ${status.count > 1 ? 'margin-top:5px;' : '' }">
<colgroup>
<col style="width:auto;">
<col style="width:35px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:35px;">
</colgroup>
<tr>
<th>상품명</th>
<th>주문</th>
<th>판매가</th>
<th>할인</th>
<th>할인가(단가)</th>
<th>적립</th>
<th>취소</th>
<th>발송</th>
</tr>
<c:forEach var="goods" items="${goodsList}" varStatus="status">
<c:if test="${srchOrdrDlvyInnb eq goods.ordrDlvyInnb}">
<tr>
<td>
<table style="border:0px">
<tr>
<td style="font-size:11px;border:0px;">
${goods.goodsNm}
<div style="padding:2px 0px 0px 0px;">- ${goods.optnNm}</div>
</td>
</tr>
</table>
</td>
<td class="right"><fmt:formatNumber value="${goods.ordrQy}" pattern="#,###"/></td>
<td class="right"><fmt:formatNumber value="${goods.slepric}" pattern="#,###"/>${curUnit}</td>
<td class="right"><fmt:formatNumber value="${goods.dscntAmt}" pattern="#,###"/>${curUnit}</td>
<td class="right"><fmt:formatNumber value="${goods.applyDscntAmt}" pattern="#,###"/>${curUnit}<br/>(<fmt:formatNumber value="${goods.slepric}" pattern="#,###"/>${curUnit})</td>
<td class="right"><fmt:formatNumber value="${goods.mlgAmt}" pattern="#,###"/></td>
<td class="right"><fmt:formatNumber value="${goods.setleCanclQy}" pattern="#,###"/></td>
<td class="right"><fmt:formatNumber value="${goods.sndngQy}" pattern="#,###"/></td>
</tr>
</c:if>
</c:forEach>
</table>
</c:if>
<c:if test="${empty goodsList}">
<table class="delivery_goods_print_info" align="center" style="width:100%;">
<colgroup>
<col style="width:auto;">
<col style="width:50px;">
<col style="width:35px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:70px;">
<col style="width:35px;">
</colgroup>
<tr>
<th>상품명</th>
<th>배송지</th>
<th>주문</th>
<th>판매가</th>
<th>할인</th>
<th>할인가(단가)</th>
<th>적립</th>
<th>배송</th>
<th>취소</th>
</tr>
<tr>
<td colspan="9" style="text-align: center">조회된 데이터가 없습니다.</td>
</tr>
</table>
</c:if>
<%--<div style="height:5px;"></div>
<table align="center" style="width:696px;">
<colgroup>
<col style="width:20%;">
<col>
<col style="width:20%;">
<col>
<col style="width:20%;">
<col>
<col style="width:20%;">
</colgroup>
<tbody>
<tr>
<td style="text-align:right;font-size:12px;">
<span>총 상품금액</span>
</td>
<td style="text-align:center;font-size:12px;"><span>+</span></td>
<td style="text-align:right;font-size:12px;">
<span>배송비</span>
</td>
<td style="text-align:center;font-size:12px;"><span>-</span></td>
<td style="text-align:right;font-size:12px;">
<span>할인<span> <fmt:formatNumber value="${setle.dscntAmt}" pattern="#,###"/>${curUnit}</span></span>
</td>
<td style="text-align:center;font-size:12px;"><span>=</span></td>
<td style="text-align:right;font-size:12px;">
<span>총 결제금액</span>
</td>
</tr>
<tr>
<td style="text-align:right;font-size:11px;">
<span><fmt:formatNumber value="${setle.slepric}" pattern="#,###"/>${curUnit}</span>
</td>
<td></td>
<td style="text-align:right;font-size:11px;">
<div>
<span><fmt:formatNumber value="${setle.dlvyAmt}" pattern="#,###"/>${curUnit}</span>
</div>
</td>
<td></td>
<td style="text-align:right;font-size:11px;">
<c:set var="dscnts" value="${ordrDtstmnDwld.dscnt}"/>
<c:if test="${not empty dscnts}">
<c:forEach var="dscnt" items="${dscnts}" varStatus="status">
<div>${dscnt.dscntDvNm}:<span><fmt:formatNumber value="${dscnt.dscntAmt}" pattern="#,###"/>${curUnit}</span></div>
</c:forEach>
</c:if>
<c:if test="${empty dscnts}">
<div><span>0${curUnit}</span></div>
</c:if>
</td>
<td></td>
<td style="text-align:right;font-size:12px;">
<span>
<fmt:formatNumber value="${setle.setleAmt}" pattern="#,###"/>${curUnit}
(<fmt:formatNumber value="${setle.wonRlSetleAmt}" pattern="#,###"/>${krUnit})
</span>
</td>
</tr>
</tbody>
</table>--%>
</div>
<c:if test="${isLast}">
<div style="height:50px"></div>
</c:if>
</c:forEach>
</div>
</body>
</html>

View File

@@ -0,0 +1,126 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : PurchOrdrListInqireR.jsp
Description : 발주서 대상 목록 조회
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2026-07-15 이대환 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총<strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<!-- 코드 사용 -->
<div class="select-box">
<select title="페이지당 출력될 목록건수" name="pageUnit" id="pageUnit" onchange="fn_select_list(1);return false;">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>"<c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<div class="form-control-container">
<div class="left">
<button type="button" class="btn outline sm" onclick="fn_ordrdtstmn_print();">
<i class="icon icon_print"></i>프린트
</button>
<button type="button" class="btn outline sm" onclick="fn_excel_download();">
<i class="icon icon_excel"></i>발주서 다운로드
</button>
</div>
<div class="center"></div>
<div class="right"></div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>회원 목록</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: 10%;">
<col style="width: 12%;">
<col style="width: 6%;">
<col style="width: 8%;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: 6%;">
<col style="width: auto;">
<col style="width: 6%;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all" id="chkALabel">
<input type="checkbox" id="chkA">
<span class="check"></span>
</label>
</th>
<th>엑셀 다운일</th>
<th>주문번호</th>
<th>배송번호</th>
<th>수취인</th>
<th>수취인 TEL</th>
<th>개인통관부호</th>
<th>우편번호</th>
<th>내용물</th>
<th>Unit Value</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultMap.resultList}">
<c:forEach var="resultList" items="${resultMap.resultList}">
<tr>
<td>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" value="${resultList.ordrInnb}/${resultList.ovseaSelerRegistCd}" class="chk" name="purchOrdrPK">
<span class="check"></span>
</label>
<input type="hidden" class="cstmclerCd" value="${resultList.cstmclerCd}">
</td>
<td><c:out value="${resultList.excelDownDt}"/></td>
<td><c:out value="${resultList.ordrInnb}"/></td>
<td><c:out value="${resultList.ovseaSelerRegistCd}"/></td>
<td><c:out value="${resultList.recpntNm}"/></td>
<td><c:out value="${resultList.recpntMbtlnb}"/></td>
<td><c:out value="${resultList.cstmclerCd}"/></td>
<td><c:out value="${resultList.dlvylcZip}"/></td>
<td><c:out value="${resultList.cn}"/></td>
<td><c:out value="${resultList.unitValue}"/></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<div class="pagination__container mt-30">
<input type="hidden" id="pageIndex" name="pageIndex" value="${ ordrSrchVO.pageIndex}"/>
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
</div>
</html>

View File

@@ -0,0 +1,320 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : PurchOrdrListInqireRForm.jsp
Description : 발주서 관리 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2026-07-15 이대환 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/mngr/Include.jsp" %>
<script type="text/javascript">
$(document).ready(function(){
//form메소드에서 pageIndex, pageUnit 갖고옴
let pageIndex = '<c:out value="${ ordrSrchVO.pageIndex }"/>';
<%--let pageUnit = '<c:out value="${ ordrSrchVO.pageUnit }"/>';--%>
let pageUnit = 100;
fn_select_list(pageIndex, pageUnit);
//검색 버튼 클릭
$('#btnSearch').on('click', function(){
fn_select_list(1);
});
});
/* ********************************************************
* 발주서 목록 조회
******************************************************** */
const fn_select_list = function(pageIndex, pageUnit) {
let dataStr;
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
if(!pageUnit) {
dataStr = $('#listForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
dataStr = $('#listForm').serialize();
} else {
dataStr = $('#listForm').serialize()+'&pageUnit='+pageUnit;
}
}
$.ajax({
type: 'post',
url : '/mngr/ordr/ordrmngr/selectExcelPoListInqire',
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
/* ********************************************************
* 발주서 주문내역서 프린트
******************************************************** */
const fn_ordrdtstmn_print = function () {
const checkedBoxes = $('input[name="purchOrdrPK"]:checked');
if (checkedBoxes.length === 0) {
alert('선택값이 없습니다.');
return false;
}
let srchOrdrInnbs = [];
let srchOrdrDlvyInnbs = [];
$(checkedBoxes).each(function(idx, item) {
const split = $(item).val().split('/');
srchOrdrInnbs.push(split[0]);
srchOrdrDlvyInnbs.push(split[1]);
});
const title = 'orderPrint';
fn_open_center_popup(title, '900', '700');
var tempForm = $('<form>', {
target: title,
method: 'post',
action: '/mngr/ordr/ordrmngr/selectPurchOrdrDtstmnDwldPopupForm'
});
$.each(srchOrdrInnbs, function(key, value) {
$('<input>', {
type: 'hidden',
name: 'srchOrdrInnbs',
value: value
}).appendTo(tempForm);
});
$.each(srchOrdrDlvyInnbs, function(key, value) {
$('<input>', {
type: 'hidden',
name: 'srchOrdrDlvyInnbs',
value: value
}).appendTo(tempForm);
});
tempForm.appendTo('body');
console.log(tempForm.prop('outerHTML'));
tempForm.submit();
tempForm.remove();
}
/**
* 발주서 엑셀다운로드
* */
const fn_excel_download = function () {
const checkedBoxes = $('input[name="purchOrdrPK"]:checked');
if (checkedBoxes.length === 0) {
alert('선택값이 없습니다.');
return false;
}
let cstmclerCds = [];
let srchOrdrInnbs = [];
let srchOrdrDlvyInnbs = [];
$(checkedBoxes).each(function(idx, item) {
const cstmclerCd = $(this).closest('td').find('.cstmclerCd').val();
cstmclerCds.push(cstmclerCd);
const split = $(item).val().split('/');
srchOrdrInnbs.push(split[0]);
srchOrdrDlvyInnbs.push(split[1]);
});
const duplicate = new Set(cstmclerCds).size !== cstmclerCds.length;
if(duplicate) {
alert('개인통관부호가 중복되었습니다.')
return false;
}
var tempForm = $('<form>', {
method: 'post',
action: '/mngr/ordr/ordrmngr/selectExcelPoDwldListInqire'
});
$.each(srchOrdrInnbs, function(key, value) {
$('<input>', {
type: 'hidden',
name: 'srchOrdrInnbs',
value: value
}).appendTo(tempForm);
});
$.each(srchOrdrDlvyInnbs, function(key, value) {
$('<input>', {
type: 'hidden',
name: 'srchOrdrDlvyInnbs',
value: value
}).appendTo(tempForm);
});
tempForm.appendTo('body');
tempForm.submit();
tempForm.remove();
}
/* open popup */
const fn_open_center_popup = function (title, w, h) {
const dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
const dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;
const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
const left = ((width / 2) - (w / 2)) + dualScreenLeft;
const top = ((height / 2) - (h / 2)) + dualScreenTop;
window.open('', title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
}
/**
* 체크박스 전체 처리
* */
const fn_change_event = function (_target, _arg) {
if (_arg === 'all') {
if ($('#' + _target + '-all').is(':checked')) {
$('[name=' + _target + ']').prop('checked', true);
} else {
$('[name=' + _target + ']').prop('checked', false);
}
} else {
let chkCnt = $('[name=' + _target + ']:checked').length;
let allCnt = $('[name=' + _target + ']').length;
if (chkCnt !== allCnt && $('#' + _target + '-all').is(':checked')) {
$('#' + _target + '-all').prop('checked', false);
} else if (chkCnt === allCnt) {
$('#' + _target + '-all').prop('checked', true);
}
}
}
// 테이블 체크박스 전체 선택
$(document).on("click", "#chkA", function () {
if($(this).is(':checked')){
$(".chk").prop('checked', true);
}else{
$(".chk").prop('checked', false);
}
});
// 목록에서 체크 해제시 전체 체크박스 해제 및 목록 항목 전체 체크 시 전체체크 버튼 true
$(document).on("click", ".chk", function () {
let length = $(".chk").length;
let chcedLen = $(".chk:checked").length;
if (length == chcedLen) {
$("#chkA").prop('checked', true);
}else{
$("#chkA").prop('checked', false);
}
});
</script>
</head>
<body>
<%-- 상단메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/mngr/Header.jsp" %>
<main class="main">
<%-- 좌측메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/mngr/Left.jsp" %>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">발주서 대상 조회</h2>
</div>
<form id="listForm">
<section class="content-section">
<span class="red-7">*검색어는 정확히 입력해주세요</span>
<div class="table-wrapper">
<table class="table">
<caption>발주서 대상 검색</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tr>
<th>배송지</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox check-all">
<input id="dlvylcAreaCds-all" type="checkbox" onclick="fn_change_event('dlvylcAreaCds', 'all');">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
<c:forEach items="${nationCdList}" var="nationCd" varStatus="status">
<label class="b-checkbox checkbox">
<input type="checkbox" name="dlvylcAreaCds" value="${nationCd.cd}"onclick="fn_change_event('dlvylcAreaCds', 'other');" <c:if test="${nationCd.cd eq 'KR'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">${nationCd.cdNm}</span>
</label>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr>
<th>엑셀다운 포함 여부</th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="excelIncY" name="excelInclude" value="Y" checked>
<label for="excelIncY">포함</label>
</div>
<div class="custom-radio">
<input type="radio" id="excelIncN" name="excelInclude" value="N">
<label for="excelIncN">미포함</label>
</div>
</div>
</div>
</td>
</tr>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button type="button" class="btn outline" id="btnResetForm">
<spring:message code="button.init"/>
</button>
<button type="button" class="btn primary" id="btnSearch">
<spring:message code="button.search"/>
</button>
</div>
<div class="right">
</div>
</div>
</section>
<div id="pageDiv"></div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<div id = "modalDiv"></div>
</body>
</html>

View File

@@ -824,7 +824,9 @@
<i class="icon icon_lock"></i>
</c:if>
</h4>
<p class="eventDetail__date"><c:out value="${bbscttInfo.sumRegistDt}"/></p>
<c:if test="${bbsInfo.registDtYn eq 'Y'}">
<p class="eventDetail__date"><c:out value="${bbscttInfo.sumRegistDt}"/></p>
</c:if>
</div>
<%-------------------------------%>
<%--첨부 파일 다운로드 영역--%>
@@ -946,7 +948,14 @@
<div class="main-section-header">
<div class="main-section-title">
<h3 class="main-section-title__title">
추천 상품
<c:choose>
<c:when test = "${not empty bbscttInfo.relateGoodsWords}">
<c:out value="${bbscttInfo.relateGoodsWords}" escapeXml="false"/>
</c:when>
<c:otherwise>
이 글과 관련된 사케
</c:otherwise>
</c:choose>
</h3>
</div>
</div>
@@ -961,7 +970,7 @@
</c:if>
<a class="product-detail" href="javascript:void(0);" onclick="fn_move_goods_dtl('<c:out value="${item.goodsInnb}"/>');">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<img src="<c:out value = "${cdnurl}${item.goodsImgCours}"/>"
<img src="<c:out value = "${cdnurl}${item.img}"/>"
onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${item.goodsNm}"/>">
</a>
</div>

View File

@@ -260,7 +260,7 @@
</c:choose>
</tbody>
</table>
<c:if test = "${bbsInfo.bbscttRegist eq 'Y'}">
<c:if test = "${bbsInfo.bbscttRegist eq 'Y' and resultMap.registAuthResult eq 'Y'}">
<div class="sub-board__top-btn-container">
<button type = "button" class="btn outline theme" id = "regBtn"><spring:message code="button.insert"/></button>
</div>
@@ -271,4 +271,4 @@
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_List"/>
</div>
</form>
</html>
</html>

View File

@@ -114,8 +114,8 @@
"crudDv": crudDv
},
success: function (data) {
data = JSON.parse(data.resBody.result);
fn_branch_bbsctt_posble(data, idx);
const parsed = JSON.parse(data.resBody.result);
fn_branch_bbsctt_posble(parsed, idx);
}
});
}

View File

@@ -292,7 +292,7 @@
</c:choose>
</tbody>
</table>
<c:if test = "${bbsInfo.bbscttRegist eq 'Y'}">
<c:if test = "${bbsInfo.bbscttRegist eq 'Y' and resultMap.registAuthResult eq 'Y'}">
<div class="sub-board__top-btn-container">
<button type = "button" class="btn outline theme" id = "regBtn"><spring:message code="button.insert"/></button>
</div>

View File

@@ -28,6 +28,8 @@
border: 1px solid #dee2e6 !important;
}
</style>
<jsp:useBean id="nowDate" class="java.util.Date" />
<fmt:formatDate var="currentTime" value="${nowDate}" pattern="yyyy-MM-dd HH:mm:ss" />
<!-- 배송 조회 -->
<div id="delivery-check-pop" class="modal default" style="max-width: 640px;">
<div class="modal-header">
@@ -56,7 +58,16 @@
</tr>
<tr>
<th>수령인</th>
<td><c:out value="${ podInfo.recipient }"/></td>
<td>
<c:choose>
<c:when test="${ podInfo.recipient eq 'null' }">
<c:out value="${ ordrInfo.shippingList[0].recpntNm }"/>
</c:when>
<c:otherwise>
<c:out value="${ podInfo.recipient }"/>
</c:otherwise>
</c:choose>
</td>
</tr>
</tbody>
</table>
@@ -85,8 +96,16 @@
<td><c:out value="${ podInfo.dateLocalwhin }"/></td>
<td></td>
<td>
발송물이 픽업되어, 공항출항 대기중입니다.
<p class="statusEn">Shipment pick up and waiting at the origin airport</p>
<c:choose>
<c:when test="${ podInfo.dateLocalwhin > currentTime }">
발송물이 픽업(예정)되어, 공항출항 대기중입니다.
<p class="statusEn">Shipment pick up(expected) and waiting at the origin airport</p>
</c:when>
<c:otherwise>
발송물이 픽업되어, 공항출항 대기중입니다.
<p class="statusEn">Shipment pick up and waiting at the origin airport</p>
</c:otherwise>
</c:choose>
</td>
</tr>
</c:if>
@@ -95,8 +114,16 @@
<td><c:out value="${ podInfo.dateLocaldeparture }"/></td>
<td></td>
<td>
화물이 인천공항으로 출발하였습니다.
<p class="statusEn">Shipment departed to Incheon International Airport</p>
<c:choose>
<c:when test="${ podInfo.dateLocaldeparture > currentTime }">
화물이 인천공항으로 출발(예정)하였습니다.
<p class="statusEn">Shipment departed(expected) to Incheon International Airport</p>
</c:when>
<c:otherwise>
화물이 인천공항으로 출발하였습니다.
<p class="statusEn">Shipment departed to Incheon International Airport</p>
</c:otherwise>
</c:choose>
</td>
</tr>
</c:if>
@@ -105,8 +132,16 @@
<td><c:out value="${ podInfo.dateIcnarrival }"/></td>
<td>인천공항</td>
<td>
화물이 인천공항에 도착하였습니다.
<p class="statusEn">Shipped the goods arrived at Incheon International Airport.</p>
<c:choose>
<c:when test="${ podInfo.dateLocaldeparture > currentTime }">
화물이 인천공항에 도착(예정)하였습니다.
<p class="statusEn">Shipped the goods arrived(expected) at Incheon International Airport.</p>
</c:when>
<c:otherwise>
화물이 인천공항에 도착하였습니다.
<p class="statusEn">Shipped the goods arrived at Incheon International Airport.</p>
</c:otherwise>
</c:choose>
</td>
</tr>
</c:if>
@@ -115,8 +150,16 @@
<td><c:out value="${ podInfo.dateCustomes }"/></td>
<td>인천공항</td>
<td>
인천공항 세관에서 통관완료되었습니다.
<p class="statusEn">Customs clearance is completed in the Republic of Korea</p>
<c:choose>
<c:when test="${ podInfo.dateLocaldeparture > currentTime }">
인천공항 세관에서 통관완료(예정)되었습니다.
<p class="statusEn">Customs clearance is completed(expected) in the Republic of Korea</p>
</c:when>
<c:otherwise>
인천공항 세관에서 통관완료되었습니다.
<p class="statusEn">Customs clearance is completed in the Republic of Korea</p>
</c:otherwise>
</c:choose>
</td>
</tr>
</c:if>

View File

@@ -641,6 +641,8 @@
// Npay CID 세팅
const kcpMid = '<c:out value="${data.payInfo.kcpMid}"/>';
const bpayMid = '<c:out value="${data.payInfo.bpayMid}"/>';
// 개발서버 네이버페이 CPID 구분 적용 취소
// $(form).find('#siteCdMid').val(kcpMid);
if('naverpay' === id) {
$(form).find('#siteCdMid').val(bpayMid);
} else {

View File

@@ -27,9 +27,15 @@
history.scrollRestoration = 'manual';
}
$(window).scrollTop(0);
/*헤더에 타이틀 set*/
const title = '<c:out value="${resultMap.bbsInfo.bbsNm}"/>';
fn_set_header_title(title);
/* ABOUT 하위 화면은 게시판명이 아닌 대메뉴명을 표시 */
<c:choose>
<c:when test="${param.mobileAboutMenuAt eq 'Y'}">
fn_set_header_title('ABOUT');
</c:when>
<c:otherwise>
fn_set_header_title('<c:out value="${resultMap.bbsInfo.bbsNm}"/>');
</c:otherwise>
</c:choose>
fn_select_cn();
// data-micromodal-trigger 속성을 가진 버튼을 클릭하면 해당 ID의 모달이 열림
// 모달 배경화면 스크롤 방지
@@ -1253,8 +1259,11 @@
<i class="icon icon_lock"></i>
</c:if>
</h4>
<c:if test="${param.mobileAboutMenuAt ne 'Y'}">
<ul class="eventDetail__list">
<li><c:out value="${bbscttInfo.sumRegistDt}"/></li>
<c:if test="${bbsInfo.registDtYn eq 'Y'}">
<li><c:out value="${bbscttInfo.sumRegistDt}"/></li>
</c:if>
<li>조회 <c:out value="${bbscttInfo.inqireCnt}"/></li>
<li>
<c:choose>
@@ -1292,6 +1301,7 @@
</c:choose>
</li>
</ul>
</c:if>
</div>
<%-------------------------------%>
<%--첨부 파일 다운로드 영역--%>
@@ -1439,7 +1449,7 @@
<a style="cursor:pointer" loading="lazy"
onclick = "fn_move_goods_dtl(<c:out value="${item.goodsInnb}"/>)">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<img src="<c:out value = "${cdnurl}${item.goodsImgCours}"/>"
<img src="<c:out value = "${cdnurl}${item.img}"/>"
onerror="this.src='/pc/images/image_placeholder.png'"
alt="<c:out value="${item.goodsNm}"/>">
</a>
@@ -1751,6 +1761,9 @@
</div>
</div>
<form id="hiddenForm">
<input type="hidden" name="mobileParentCtgryId" value="<c:out value="${param.mobileParentCtgryId}"/>"/>
<input type="hidden" name="mobileAboutMenuAt" value="<c:out value="${param.mobileAboutMenuAt}"/>"/>
<input type="hidden" name="mobileCurrentCtgryId" value="<c:out value="${param.mobileCurrentCtgryId}"/>"/>
<%--목록 관련--%>
<input type="hidden" name="pageIndex" value="<c:out value="${bbscttVO.pageIndex}"/>"/>
<input type="hidden" name="bbsTyCd" value="<c:out value="${bbscttVO.bbsTyCd}"/>"/>

View File

@@ -314,6 +314,9 @@
</div>
</form>
<form id = "dtlForm" action="/sopmal/csc/selectBbscttDtlInqire" method="get">
<input type="hidden" name="mobileParentCtgryId" value="<c:out value="${param.mobileParentCtgryId}"/>"/>
<input type="hidden" name="mobileAboutMenuAt" value="<c:out value="${param.mobileAboutMenuAt}"/>"/>
<input type="hidden" name="mobileCurrentCtgryId" value="<c:out value="${param.mobileCurrentCtgryId}"/>"/>
<input type="hidden" name="bbscttInnb" id="bbscttInnb"><%--게시글 고유번호--%>
<input type="hidden" name="bbsId" value="<c:out value = "${bbsInfo.bbsId}"/>"/><%--게시판아이디--%>
<input type="hidden" name="bbsTyCd" value="<c:out value = "${bbsInfo.bbsTyCd}"/>"/><%--게시판타입--%>
@@ -429,4 +432,4 @@
</div>
</div>
</div>
</html>
</html>

View File

@@ -39,9 +39,15 @@
awaitCloseAnimation: true,
});
/*헤더에 타이틀 set*/
const title = '<c:out value="${resultMap.bbsInfo.bbsNm}"/>';/*게시판이름*/
fn_set_header_title(title);
/* ABOUT 하위 화면은 게시판명이 아닌 대메뉴명을 표시 */
<c:choose>
<c:when test="${param.mobileAboutMenuAt eq 'Y'}">
fn_set_header_title('ABOUT');
</c:when>
<c:otherwise>
fn_set_header_title('<c:out value="${resultMap.bbsInfo.bbsNm}"/>');
</c:otherwise>
</c:choose>
/*box_tab 클릭 이벤트*/
$(".headerTab__item").on("click", function () {
@@ -347,6 +353,11 @@
fn_create_input("reqUrl","subPage", form);
fn_create_input("bbsId", $("#bbsId").val(), form);
fn_create_input("cscAt", $("#cscAt").val(), form);
<c:if test="${param.mobileAboutMenuAt eq 'Y'}">
fn_create_input("mobileParentCtgryId", '<c:out value="${param.mobileParentCtgryId}"/>', form);
fn_create_input("mobileAboutMenuAt", 'Y', form);
fn_create_input("mobileCurrentCtgryId", '<c:out value="${param.mobileCurrentCtgryId}"/>', form);
</c:if>
/*let pageUnit = '';
//페이지 유닛 계산
const pgeVtcCnt = $("#pgeVtcCnt").val();//ROW
@@ -570,7 +581,7 @@
let regusrNm;
if (resultList.regusrDvCd === '99') {
regusrNm = `\${ resultList.maskingRegusrNm}[비회원]`;
} else if (resultList.regusrDvCd === '03' && resultList.npayBbscttSnb !== null) {
} else if (resultList.regusrDvCd === '03' && resultList.npayBbscttSnb != null) {
regusrNm = `naverpay`;
} else if (resultList.regusrDvCd === '02') {
regusrNm = `\${ resultList.mngrNm}`;
@@ -631,7 +642,7 @@
// 비밀글 여부
if (resultList.secretBbscttAt === 'Y') {
if (resultList.regusrDvCd !== '02') {
if (resultList.answCn !== null) {
if (resultList.answCn != null) {
list += `[\${resultList.answCn}] `;
}
list += `<span>\${resultList.maskingRegusrNm}</span>님의 \${bbsInfo.bbsNm}`;
@@ -639,7 +650,7 @@
list += `비밀글입니다.`;
}
} else {
if (resultList.answCn !== null) {
if (resultList.answCn != null) {
list += `[\${resultList.answCn}] `;
}
list += sj;
@@ -649,7 +660,7 @@
<ul class="eventList__list">`;
// 답변 여부 표시
if (bbsInfo.answRegist === 'Y') {
if (resultList.answBbscttInnb !== null) {
if (resultList.answBbscttInnb != null) {
list += `<li>답변완료</li>`;
} else {
list += `<li>답변대기</li>`;
@@ -680,7 +691,7 @@
list += ` </ul>
</a>`;
if(bbsInfo.answRegist === 'Y') {
if(resultList.answBbscttInnb !== null){
if(resultList.answBbscttInnb != null){
list += `<a class="eventList__item dtlBtn item" style="cursor:pointer" >
<input type="hidden" class="bbscttInnb" value="\${ resultList.bbscttInnb}">
<div class="eventList__top">
@@ -718,7 +729,7 @@
<ul class="eventList__list">`;
// 답변 여부 표시
if (bbsInfo.answRegist === 'Y') {
if (resultList.answBbscttInnb !== null) {
if (resultList.answBbscttInnb != null) {
list += `<li>답변완료</li>`;
} else {
list += `<li>답변대기</li>`;
@@ -760,7 +771,7 @@
// 비밀글 여부
if (resultList.secretBbscttAt === 'Y') {
if (resultList.regusrDvCd !== '02') {
if (resultList.answCn !== null) {
if (resultList.answCn != null) {
list += `[\${resultList.answCn}] `;
}
list += `<span>\${resultList.maskingRegusrNm}</span>님의 \${bbsInfo.bbsNm}`;
@@ -768,7 +779,7 @@
list += `비밀글입니다.`;
}
} else {
if (resultList.answCn !== null) {
if (resultList.answCn != null) {
list += `[\${resultList.answCn}] `;
}
list += `\${sj}`;
@@ -779,7 +790,7 @@
// 답변 여부 표시
if (bbsInfo.answRegist === 'Y') {
if (resultList.answBbscttInnb !== null) {
if (resultList.answBbscttInnb != null) {
list += `<span class="myQnaList__info__date">답변완료</span>`;
} else {
list += `<span class="myQnaList__info__date">답변대기</span>`;
@@ -1059,7 +1070,7 @@
</form>
</div>
<%--게시판 등록 사용여부--%>
<c:if test = "${bbsInfo.bbscttRegist eq 'Y' && (bbsInfo.bbsTyCd eq '01' || bbsInfo.bbsTyCd eq '08') && bbsInfo.sknTyCd ne '02'}"><%--갤러리타입 등록 x--%>
<c:if test = "${bbsInfo.bbscttRegist eq 'Y' && resultMap.registAuthResult eq 'Y' && (bbsInfo.bbsTyCd eq '01' || bbsInfo.bbsTyCd eq '08') && bbsInfo.sknTyCd ne '02'}"><%--갤러리타입 등록 x--%>
<div class="infoSection">
<a style="cursor:pointer" class="btn md full theme" id = "regBtn"><spring:message code="button.insert"/>하기</a>
</div>
@@ -1176,4 +1187,4 @@
</div>
</div>
</div>
</html>
</html>

View File

@@ -1938,7 +1938,7 @@
success: function (data) {
$("#modalDiv").html(data);
MicroModal.init();
closeModal("authPop");
try {closeModal("authPop");} catch (e) {};
openModal2("authPop");
}
});

View File

@@ -29,6 +29,16 @@
const title = '상품 목록';
fn_set_header_title(title);
const $categoryList = $('.header--sub > .home-category .home-category__list');
const $activeCategory = $categoryList.find('.home-category__item.active');
if ($activeCategory.length) {
const listElement = $categoryList.get(0);
const activeRect = $activeCategory.get(0).getBoundingClientRect();
const listRect = listElement.getBoundingClientRect();
const activeCenter = activeRect.left - listRect.left + listElement.scrollLeft + (activeRect.width / 2);
$categoryList.scrollLeft(Math.max(0, activeCenter - (listElement.clientWidth / 2)));
}
let pageIndex = '<c:out value="${ resultMap.BOGoodsVO.pageIndex }"/>';
fn_select_list(pageIndex);
@@ -1116,12 +1126,12 @@
<nav class="home-category">
<div class="home-category__content">
<ul class="home-category__list">
<li class="home-category__item active">
<li class="home-category__item<c:if test="${resultMap.BOGoodsVO.ctgryId eq resultMap.BOGoodsVO.upperCtgryId}"> active</c:if>">
<a href="javascript:void(0);" data-text="${resultMap.goodsCategoryList[0].baseCtgryNm}" data-value="${resultMap.goodsCategoryList[0].baseCtgryId}">전체</a>
</li>
<c:forEach items="${resultMap.goodsCategoryList}" var="goodsCategory" varStatus="status">
<c:if test="${goodsCategory.ctgryId ne resultMap.BOGoodsVO.ctgryId}">
<li class="home-category__item ">
<c:if test="${goodsCategory.upperCtgryId eq resultMap.BOGoodsVO.upperCtgryId}">
<li class="home-category__item<c:if test="${goodsCategory.ctgryId eq resultMap.BOGoodsVO.ctgryId}"> active</c:if>">
<a href="javascript:void(0);" data-value="${goodsCategory.ctgryId}"> ${goodsCategory.ctgryNm}</a>
</li>
</c:if>
@@ -1260,4 +1270,4 @@
</div>
</div>
</html>
</html>

View File

@@ -201,19 +201,20 @@
</c:if>
<div class="sub-box">
<div class="mainNotice__wrapper">
<div class="mainNotice__customerContact">
<i class="icon icon_notice03"></i>
<div class="mainNotice__customerContact__right">
<h4 class="notice__title customer-service">고객센터</h4>
<span class="notice__number"><c:out value="${sopmallInfo.shopInfo.cscTelnb }"/></span>
<p class="notice__paragraph">
<span class="notice__text01"><c:out value="${ sopmallInfo.shopInfo.cscWkdayWorkTme }"/></span>
<span class="notice__text02">(<c:out value="${ sopmallInfo.shopInfo.cscLunchTme }"/>)</span>
<br>
<span class="notice__text03"><c:out value="${ sopmallInfo.shopInfo.cscRstde }"/></span>
</p>
</div>
</div>
<%--<div class="mainNotice__customerContact"
onclick="window.open('http://pf.kakao.com/_xjxjHxnX', '_blank');">
<i class="icon icon_kakao-customer-service"></i>
<div class="mainNotice__customerContact__right">
<h4 class="notice__title customer-service">문의는 카톡으로</h4>
<span class="notice__number"><c:out value="${sopmallInfo.shopInfo.cscTelnb }"/></span>
<p class="notice__paragraph">
<span class="notice__text01"><c:out value="${ sopmallInfo.shopInfo.cscWkdayWorkTme }"/></span>
<span class="notice__text02">(<c:out value="${ sopmallInfo.shopInfo.cscLunchTme }"/>)</span>
<br>
<span class="notice__text03"><c:out value="${ sopmallInfo.shopInfo.cscRstde }"/></span>
</p>
</div>
</div>--%>
<a class="myPageMain__logout" href="/sopmal/logout">
<i class="icon icon_myLogout"></i>
로그아웃

View File

@@ -21,6 +21,7 @@
<head>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
<spring:eval expression="@environment.getProperty('currency-unit.default')" var="curUnit"/>
</head>
<script>
@@ -388,7 +389,7 @@
</c:if>
<p class="orderDetailProduct__info__quantity"><c:out value="${goods.ordrQy}"/>개<span
class="orderDetailProduct__info__dot">·</span><span
class="comma"><c:out value="${goods.applyDscntAmt}"/></span>원
class="comma"><c:out value="${goods.applyDscntAmt}"/></span>${curUnit}
</p>
<div class="orderDetailProduct__cancel">
<input type="hidden" class="sopmalCd" value="${goods.sopmalCd}"/>
@@ -459,7 +460,7 @@
</c:if>
<p class="orderDetailProduct__info__quantity"><c:out value="${goods.ordrQy}"/>개<span
class="orderDetailProduct__info__dot">·</span><span
class="comma"><c:out value="${goods.applyDscntAmt}"/></span>원
class="comma"><c:out value="${goods.applyDscntAmt}"/></span>${curUnit}
</p>
<div class="orderDetailProduct__cancel">
<input type="hidden" class="sopmalCd" value="${goods.sopmalCd}"/>