초기소스

This commit is contained in:
jazz
2025-10-29 17:08:05 +09:00
parent e531aa9540
commit 439a379a02
7551 changed files with 1234427 additions and 3 deletions

View File

@@ -0,0 +1,97 @@
package com.wb.domainserver.domain.sopmal.adscript.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.gcone.setup.adscript.service.BOAdScriptService;
import com.wb.domainserver.domain.gcone.setup.adscript.vo.BOAdScriptVO;
import com.wb.domainserver.domain.sopmal.adscript.vo.AdScriptVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 광고스크립트 controller
* @author 개발자 성명을 입력해주세요.
* @since 2024-03-06
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-09-22 유재현. 최초 생성
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/sopmal/adscript")
public class AdScriptController {
@Autowired
private BOAdScriptService service;
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 광고스크립트 목록 조회
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectAdScriptList")
public ResponseEntity<?> selectAdScriptList(@RequestBody BOAdScriptVO vo) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
Map<String, Object> content = new HashMap<>();
//광고 스크립트 목록조회
List<DataMap> selectAdScriptList = service.selectBOAdScriptList(vo);
//배송그룹 목록조회 결과 설정
content.put("BOAdScriptVO", vo);
content.put("selectAdScriptList", selectAdScriptList);
// return responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/setup/adscript/selectBOAdScriptList", vo),
// ReplyFromResrc::getReply
// );
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
}

View File

@@ -0,0 +1,16 @@
package com.wb.domainserver.domain.sopmal.adscript.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class AdScriptVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/*쇼핑몰코드 */
private String sopmalCd;
}

View File

@@ -0,0 +1,163 @@
package com.wb.domainserver.domain.sopmal.app.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.sopmal.app.vo.AppMbrDvcVO;
import com.wb.domainserver.domain.sopmal.app.vo.AppPushVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
/**
* 앱 연동 controller
* @author 이훈영
* @since 2024-11-26
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-11-26 이훈영. 최초 생성
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/sopmal/app")
public class AppController {
@Autowired
private SendToResrc sendToResrc;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 앱 디바이스 정보 입력
* @param vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertAppDeviceInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertAppDeviceInfo(HttpServletRequest request, @RequestBody AppMbrDvcVO vo) {
log.debug("insertAppMbrDvcInfo AppMbrDvcVO ::: {}", vo);
HttpSession session = request.getSession();
session.setAttribute("appDvcId", vo.getDeviceId());
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/app/insertBOAppDeviceInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 앱 디바이스-회원 정보 입력
* @param vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertAppMbrDvcInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertAppMbrDvcInfo(HttpServletRequest request, @RequestBody AppMbrDvcVO vo) {
log.debug("insertAppMbrDvcInfo AppMbrDvcVO ::: {}", vo);
HttpSession session = request.getSession();
session.setAttribute("appDvcId", vo.getDeviceId());
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/app/insertBOAppMbrDvcInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 앱오픈
* @param vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/openApp")
public String openApp(AppMbrDvcVO vo,
@RequestParam("linkType") String linkType,
@RequestParam("bnfDvCd") String bnfDvCd,
@RequestParam("strInnb") String strInnb,
ModelMap model) {
vo.setSopmalCd(MemberJwtContextHolder.getMemberInfo().getSopmalCd());
vo.setLinkType(linkType);
vo.setBnfDvCd(bnfDvCd);
vo.setStrInnb(strInnb);
log.debug("@@@@@@@@@ openApp vo is {}", vo);
model.addAttribute("sopmalCd", vo.getSopmalCd());
model.addAttribute("linkType", vo.getLinkType());
model.addAttribute("bnfDvCd", vo.getBnfDvCd());
model.addAttribute("strInnb", vo.getStrInnb());
return "sopmal_m/bnft/openApp";
}
/**
* 푸시알림 테스트 발송
*
* @param BnftPushVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/procTestPushNotification")
public ResponseEntity<WnbtResponse> procTestPushNoti(@RequestBody AppPushVO vo, ModelMap model, HttpSession session){
vo.setSopmalCd(MemberJwtContextHolder.getMemberInfo().getSopmalCd());
String pushData = dataToJson(vo.getDataUrl(), vo.getDataKey(), vo.getDataExt());
vo.setPushData(pushData);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/app/procPushNotificationImsi",vo),
ReplyFromResrc::getReply
);
}
public String dataToJson(String str1, String str2, String str3) {
try {
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("url", str1);
dataMap.put("key", str2);
dataMap.put("ext", str3);
// JSON 문자열로 변환
return objectMapper.writeValueAsString(dataMap);
} catch (Exception e) {
e.printStackTrace();
return null; // 예외 발생 시 null 반환
}
}
}

View File

@@ -0,0 +1,41 @@
package com.wb.domainserver.domain.sopmal.app.vo;
import java.math.BigDecimal;
import lombok.Data;
@Data
public class AppMbrDvcVO {
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 회원 디바이스 고유번호 */
private Long mbrDeviceInnb;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 회원 ID */
private String mbrId;
/** FCM 토큰 */
private String fcmToken;
/** 알림 동의 여부 */
private String pushAgreAt;
/** 신체활동접근 동의 여부 */
private String phacAgreAt;
/** 디바이스 고유 ID */
private String deviceId;
/** 운영체제 이름 */
private String deviceOsNm;
/** 운영체제 버전 */
private String deviceOsVer;
/** 앱 버전 */
private String deviceAppVer;
/** 딥링크 타입 */
private String linkType;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 스토어 고유번호 */
private String strInnb;
}

View File

@@ -0,0 +1,46 @@
package com.wb.domainserver.domain.sopmal.app.vo;
import java.math.BigDecimal;
import lombok.Data;
@Data
public class AppPushVO {
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 회원 디바이스 고유번호 */
private Long mbrDeviceInnb;
/** 회원 디바이스 고유번호 배열 */
private Long[] arrMbrDeviceInnb;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 회원 ID */
private String mbrId;
/** FCM 토큰 */
private String fcmToken;
/** FCM 토큰 배열 */
private String[] arrFcmToken;
/** 알림 제목 */
private String pushSj;
/** 알림 내용 */
private String pushCn;
/** 알림 유형 */
private String pushType;
/** callback 데이터 */
private String pushData;
/** callback 데이터 - url */
private String dataUrl;
/** callback 데이터 - key */
private String dataKey;
/** callback 데이터 - ext */
private String dataExt;
/** 이미지파일경로 */
private String imgFilCours;
/** 이미지파일명 */
private String imgFilNm;
}

View File

@@ -0,0 +1,202 @@
package com.wb.domainserver.domain.sopmal.bnft.atend.controller;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.wb.domainserver.domain.sopmal.bnft.atend.vo.AtendVO;
import com.wb.domainserver.domain.sopmal.bnft.common.controller.BnftCommonController;
import com.wb.domainserver.domain.sopmal.mbr.vo.MbrVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class AtendController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private BnftCommonController commonController;
/**
* 출석체크 메인 화면
*
* @param model
* @param atendVO
* @param response
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/attendanceCheckMain")
public String attendanceCheckMain(ModelMap model, AtendVO atendVO) {
// 혜택 화면 설정 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectBOBenefitScreenInfo", atendVO),
model,
"mainScreenInfo"
);
// 출석 횟수 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectCurrentMonthAttendanceInfo", atendVO),
model,
"attendanceInfo"
);
// 누적 출석 마일리지 조회 (기존 코드 유지)
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectTotalAttendanceMileage", atendVO),
model,
"attendanceMileageInfo"
);
log.debug("ModelMap content: {}", model);
return "sopmal_m/bnft/atend/Atend";
}
/**
* 출석체크 참여
*
* @param atendVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/participateAttendanceCheck", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> participateAttendanceCheck(@RequestBody AtendVO atendVO) {
log.debug("participateAttendanceCheck atendVO: {}", atendVO);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/participateAttendanceCheck", atendVO),
ReplyFromResrc::getReply
);
}
/**
* 최신 출석 정보 조회 (출석 날짜 포함)
*
* @param atendVO
* @return ResponseEntity<Map<String, Object>>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/getLatestAttendanceInfo", method = RequestMethod.POST)
public ResponseEntity<Map<String, Object>> getLatestAttendanceInfo(@RequestBody AtendVO atendVO) {
// 출석 횟수 정보 조회
Map<String, Object> attendanceCountInfo = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectCurrentMonthAttendanceInfo", atendVO)
);
// 누적 출석 마일리지 조회
Map<String, Object> attendanceMileageInfo = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectTotalAttendanceMileage", atendVO)
);
// 결과를 Map에 담아 반환
Map<String, Object> result = new HashMap<>();
result.put("attendanceCount", attendanceCountInfo.get("attendanceCount"));
result.put("totalAttendanceMileage", attendanceMileageInfo.get("totalAttendanceMileage"));
// 🆕 출석 날짜 목록 추가
List<Map<String, Object>> monthlyAttendance = (List<Map<String, Object>>) attendanceCountInfo.get("monthlyAttendance");
if (monthlyAttendance != null) {
List<String> attendanceDays = monthlyAttendance.stream()
.map(attendance -> (String) attendance.get("attendanceDate"))
.collect(Collectors.toList());
result.put("attendanceDays", attendanceDays);
}
return ResponseEntity.status(HttpStatus.OK).body(result);
}
/**
* 알림 상태 조회
*
* @param atendVO 알림 상태 조회 조건을 담고 있는 VO
* @param session HTTP 세션
* @return ResponseEntity<Map<String, Object>> 알림 상태 정보를 포함한 ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/getNotificationStatus")
public ResponseEntity<Map<String, Object>> getNotificationStatus(
@RequestBody AtendVO atendVO,
HttpSession session) {
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getNotificationStatus", atendVO),
result->ResponseEntity.ok().body(result)
);
}
/**
* 알림 신청
*
* @param atendVO 알림 신청 정보를 담고 있는 VO
* @param session HTTP 세션
* @return ResponseEntity<Map<String, Object>> 알림 신청 결과를 포함한 ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/applyNotification")
public ResponseEntity<Map<String, Object>> applyNotification(
@RequestBody AtendVO atendVO,
HttpSession session) {
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/saveAtendAlarmSettings", atendVO),
result -> ResponseEntity.ok().body(result)
);
}
/**
* 알림 취소
*
* @param atendVO 알림 취소 정보를 담고 있는 VO
* @param session HTTP 세션
* @return ResponseEntity<Map<String, Object>> 알림 취소 결과를 포함한 ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/cancelNotification")
public ResponseEntity<Map<String, Object>> cancelNotification(
@RequestBody AtendVO atendVO,
HttpSession session) {
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/saveAtendAlarmSettings", atendVO),
result -> ResponseEntity.ok().body(result)
);
}
}

View File

@@ -0,0 +1,78 @@
package com.wb.domainserver.domain.sopmal.bnft.atend.vo;
import java.sql.Date;
import lombok.Data;
@Data
public class AtendVO {
/** 혜택 설정 고유번호 */
private String bnfInnb;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 사용 여부 */
private String useAt;
/** 진행기간 시작일시 */
private String bnfBgnDt;
/** 진행기간 종료일시 */
private String bnfEndDt;
/** 충전 필요 금액 */
private String amtForChg;
/** 회원 고유번호 */
private int mbrInnb;
/** 등록자 */
private int regUsr;
/** 등록일시 */
private Date registDt;
/** 수정자 */
private int updusr;
/** 수정일시 */
private Date updtDt;
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 보상수령 고유번호 */
private Long bnfRcvInnb;
/** 혜택 참여 일시 */
private String bnfPrtDt;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 참여 내용 1 */
private String prtCont1;
/** 참여 내용 2 */
private String prtCont2;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 요청 페이지 구분 */
private String reqPageDv;
/** 출석 횟수 */
private Integer currentMonthAttendanceCount;
/** 누적 출석 마일리지 */
private Double totalAttendanceMileage;
/** 대표 이미지 */
private String reprsntImg;
/** 대표 링크 URL */
private String reprsntLinkUrl;
/** 보상 이미지 */
private String rewardImg;
/** 보상 링크 URL */
private String rewardLinkUrl;
/** 혜택 문구 */
private String bnfWordsCn;
/** 출석 일자 목록 */
private String attendanceDays;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 마일리지 */
private Double mlgRwdAmt;
/** 쿠폰 고유번호 */
private Long couponInnb;
/** 혜택 동의 고유번호 */
private Long bnfAgreInnb;
/** 동의 여부 */
private String agreAt;
/** 초록잎 지급량 */
private Integer paidLeafCnt;
}

View File

@@ -0,0 +1,82 @@
package com.wb.domainserver.domain.sopmal.bnft.bnftMain.controller;
import java.util.Enumeration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.wb.domainserver.domain.sopmal.bnft.bnftMain.vo.BnftMainVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class BnftMainController {
@Autowired
private SendToResrc sendToResrc;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 혜택 메인 화면
*
* @param model ModelMap 객체
* @param BnftMainVO BnftMainVO 객체
* @return String 뷰 이름
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/bnftMain")
public String bnftMain(ModelMap model, BnftMainVO vo, HttpSession session) {
// 세션에서 deviceId 조회 (null-safe)
Object sessDvcIdObj = session.getAttribute("sessDvcId");
String deviceId = (sessDvcIdObj != null) ? sessDvcIdObj.toString() : null;
vo.setDeviceId(deviceId);
log.debug("bnftMain vo (1차 요청): {}", vo);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/bnftMainInfo", vo),
model,
"bnftMain"
);
log.debug("ModelMap content: {}", model);
// deviceId가 없었는지 프론트엔드에 알려주기
model.addAttribute("needDeviceIdCheck", deviceId == null);
return "sopmal_m/bnft/bnftMain/BnftMain";
}
/**
* deviceId를 받아서 혜택 정보 재조회하는 AJAX API
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/devicePermission", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> getBnftMainInfoWithDevice(@RequestBody BnftMainVO vo) {
log.debug("bnftMainInfoWithDevice vo (2차 요청): {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/devicePermission", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,56 @@
package com.wb.domainserver.domain.sopmal.bnft.bnftMain.vo;
import lombok.Data;
@Data
public class BnftMainVO {
/** 회원 고유번호 */
private Long mbrInnb;
/** 혜택 설정 고유번호 */
private String bnfInnb;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 혜택 제목 */
private String bnfSj;
/** 사용 여부 */
private String useAt;
/** 화면 대표 이미지 */
private String scrReprsntImg;
/** 화면 대표 링크 URL */
private String scrReprsntLinkUrl;
/** 혜택 안내 */
private String bnfWordsCn;
/** 내용 제목 */
private String cnSj;
/** 내용 설명 */
private String cnDc;
/** 라이브 여부 (라이브쇼핑 참여일 경우만) */
private String isLive;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 디바이스 아이디 */
private String deviceId;
/** 회원구분코드 */
private String mbrDvCd;
// === QR 이벤트 관련 필드 추가 ===
/** 매장 고유번호 (QR이 설치된 매장) */
private Long strInnb;
/** QR 코드 */
private String qrCd;
/** QR 고유번호 */
private String qrInnb;
/** QR 이벤트 타입 */
private String qrEventType;
/** 이벤트 파라미터 (JSON 형태 등) */
private String eventParam;
/** 보상 타입 (마일리지, 쿠폰 등) */
private String rewardType;
/** 보상 금액/수량 */
private String rewardAmount;
/** 처리 결과 코드 */
private String resultCode;
/** 처리 결과 메시지 */
private String resultMessage;
}

View File

@@ -0,0 +1,51 @@
package com.wb.domainserver.domain.sopmal.bnft.bnftMain.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class BnftRecptLogVO {
/** 쇼핑몰코드 */
private String sopmalCd;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 혜택 보상수령 고유번호 */
private String bnfRcvInnb;
/** 혜택 보상수령 내용 */
private String bnfRcvCn;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 마일리지구분 : 01 지급, 02 차감*/
private String mlgDvCd;
/** 마일리지적립구분 : add 적립, dn 차감, exp 소멸, up 지급, use 사용*/
private String mlgAccmlDvCd;
/** 마일리지적용구분 : 01 상품구매,02 상품구매 취소,03 일반리뷰,04 한달리뷰,05 포토리뷰,06 리뷰삭제,07 이벤트,08 기간만료,09 주문환불,10 결제취소 */
private String mlgApplcDvCd;
/** 마일리지적용사유 */
private String mlgApplcResn;
/** 적립금액 */
private BigDecimal accmlmnyAmt;
/** 마일리지 유효개월수 */
private Integer mlgValidPd;
/** 쿠폰 고유번호 */
private Integer couponInnb;
/** 쿠폰 발송 고유번호 */
private Integer couponSndngInnb;
/** 쿠폰 발송 유형코드 : 01 직접발급,02 다운로드,03 인증번호 */
private String couponSndngTyCd;
/** 구매식별 고유번호 */
private Long purchsInnb;
/** 구매금액 */
private Double purchsAmt;
}

View File

@@ -0,0 +1,130 @@
package com.wb.domainserver.domain.sopmal.bnft.common.controller;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class BnftCommonController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
// E 드라이브의 특정 폴더를 기본 경로로 설정
private static final String IMAGE_BASE_PATH = "E:";
/**
* 사용자 로그인 정보
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/bnftChkLoginStatus")
public ResponseEntity<Map<String, Object>> checkLoginStatus() {
Map<String, Object> content = new HashMap<String, Object>();
int mbrInnb = MemberJwtContextHolder.getMemberInfo().getUserInnb();
String mbrDvCd = MemberJwtContextHolder.getMemberInfo().getMbrDvCd();
String sopmalCD = MemberJwtContextHolder.getMemberInfo().getSopmalCd();
if (mbrDvCd != null && mbrInnb > 0) {
content.put("userInnb", mbrInnb);
content.put("sopmalCd", sopmalCD);
content.put("mbrDvCd", mbrDvCd);
content.put("isLoggedIn", true);
} else {
content.put("isLoggedIn", false);
}
return ResponseEntity.ok(content);
}
@Policy(AuthPolicy.PUBLIC)
public Map<String, Object> checkLoginStatusBl() {
Map<String, Object> content = new HashMap<String, Object>();
int mbrInnb = MemberJwtContextHolder.getMemberInfo().getUserInnb();
String mbrDvCd = MemberJwtContextHolder.getMemberInfo().getMbrDvCd();
String sopmalCD = MemberJwtContextHolder.getMemberInfo().getSopmalCd();
if (mbrDvCd != null && mbrInnb > 0) {
content.put("userInnb", mbrInnb);
content.put("sopmalCd", sopmalCD);
content.put("mbrDvCd", mbrDvCd);
content.put("isLoggedIn", true);
} else {
content.put("isLoggedIn", false);
}
return content;
}
/**
* 외부경로 이미지파일 반환
* @param path 이미지 파일의 상대 경로
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/image", method = RequestMethod.GET)
public ResponseEntity<Resource> getImage(@RequestParam String path) throws IOException {
Path fullPath = Paths.get(IMAGE_BASE_PATH, path).normalize();
File file = fullPath.toFile();
// 간단한 보안 검사: 요청된 파일이 기본 경로 외부에 있는지 확인
if (!file.getCanonicalPath().startsWith(new File(IMAGE_BASE_PATH).getCanonicalPath())) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
if (!file.exists()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(file.toPath()));
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"" + file.getName() + "\"");
String mimeType = Files.probeContentType(file.toPath());
if (mimeType == null) {
mimeType = "application/octet-stream";
} else if (path.endsWith(".svg")) {
mimeType = "image/svg+xml";
}
return ResponseEntity.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.parseMediaType(mimeType))
.body(resource);
}
}

View File

@@ -0,0 +1,103 @@
package com.wb.domainserver.domain.sopmal.bnft.conrev.controller;
import com.wb.domainserver.domain.sopmal.bnft.conrev.vo.ConrevVO;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class ConrevController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 베스트 리뷰 보기 메인 화면을 표시합니다.
*
* @param model ModelMap 객체
* @param vo ConrevVO 객체
* @return String 뷰 이름
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/conrevMain")
public String conrevMain(ModelMap model, ConrevVO vo, HttpSession session) {
// 베스트 리뷰 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectBestReviewList", vo),
model,
"reviewList"
);
log.debug("ModelMap content: {}", model);
return "sopmal_m/bnft/conrev/Conrev";
}
/**
* 베스트 리뷰 보기 메인 화면을 표시합니다.
*
* @param vo ConrevVO 객체
* @return String 뷰 이름
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/awardConrevMileage", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> awardConrevMileage(@RequestBody ConrevVO vo, HttpSession session) {
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/awardConrevMileage", vo),
result -> ResponseEntity.ok().body(result)
);
}
/**
* 베스트 리뷰 보기 메인 화면을 표시합니다.
*
* @param vo ConrevVO 객체
* @return String 뷰 이름
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/getReviewTime", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> getReviewTime(@RequestBody ConrevVO vo, HttpSession session) {
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getReviewTime", vo),
result -> ResponseEntity.ok().body(result)
);
}
/**
* 마일리지 보상 정보 조회
*
* @param vo ConrevVO 객체
* @return ResponseEntity<Map<String, Object>> 마일리지 보상 정보
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/getRewardInfo", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> getRewardInfo(@RequestBody ConrevVO vo, HttpSession session) {
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getRewardInfo", vo),
result -> ResponseEntity.ok().body(result)
);
}
}

View File

@@ -0,0 +1,32 @@
package com.wb.domainserver.domain.sopmal.bnft.conrev.vo;
import lombok.Data;
@Data
public class ConrevVO {
// 혜택 설정 고유번호
private Long bnfInnb;
// 회원 고유번호
private Long mbrInnb;
// 회원 구분 코드
private String mbrDvCd;
// 페이지 크기
private int pageSize;
// 오프셋
private int offset;
// 마일리지 보상 금액
private Double mlgRwdAmt;
// 리뷰 내용
private String reviewContent;
// 리뷰 링크
private String reviewLink;
// 이미지 파일 경로
private String imgFilCours;
// 이미지 파일명
private String imgFilNm;
// 열람 시간(초)
private Integer tmeSecnd;
//쇼핑몰 코드
public String sopmalCd;
}

View File

@@ -0,0 +1,345 @@
package com.wb.domainserver.domain.sopmal.bnft.cpslmkn.controller;
import com.wb.domainserver.domain.sopmal.bnft.cpslmkn.vo.CpslmknVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class CpslmknController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCapsule")
public String selectRewardProductList(ModelMap model, CpslmknVO vo, HttpSession session) {
// 보상 상품 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/rewardProductInfo", vo),
model,
"rewardInfo"
);
// rewardInfo에서 데이터 추출
@SuppressWarnings("unchecked")
Map<String, Object> rewardInfo = (Map<String, Object>) model.get("rewardInfo");
if (rewardInfo != null) {
model.addAttribute("productList", rewardInfo.get("productList"));
model.addAttribute("importantNotice", rewardInfo.get("importantNotice"));
// 디버깅 로그 추가
log.debug("rewardInfo: {}", rewardInfo);
log.debug("productList: {}", rewardInfo.get("productList"));
log.debug("importantNotice: {}", rewardInfo.get("importantNotice"));
}
log.debug("model: {}", model);
return "sopmal_m/bnft/cpslmkn/CpslmknSelectCapsule";
}
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/createGame")
public String createGame(ModelMap model, @RequestParam Long bnfInnb) {
CpslmknVO vo = new CpslmknVO();
vo.setBnfInnb(bnfInnb); // 이전 화면에서 전달받은 bnfInnb 설정
// 게임 데이터 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/gameData", vo),
model,
"cpslmknStatus"
);
log.debug("cpslmknStatus: {}", model.get("cpslmknStatus"));
// 현재 진행 상태와 보상 정보 조회 추가
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/rewardProductInfo", vo),
model,
"rewardInfo"
);
log.debug("rewardInfo: {}", model.get("rewardInfo"));
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sopmalCd", vo),
model,
"sopmalCd"
);
log.debug("sopmalCd: {}", model.get("sopmalCd"));
// cpslmknStatus에서 필요한 데이터 추출
@SuppressWarnings("unchecked")
Map<String, Object> cpslmknStatus = (Map<String, Object>) model.get("cpslmknStatus");
if (cpslmknStatus != null) {
model.addAttribute("bnfInnb", bnfInnb);
model.addAttribute("bnfSttusInnb", cpslmknStatus.get("bnfSttusInnb"));
model.addAttribute("leafCount", cpslmknStatus.get("ownedLeafCount"));
if (cpslmknStatus.get("progrsStep") != null) {
model.addAttribute("progressStep", Integer.valueOf(String.valueOf(cpslmknStatus.get("progrsStep"))));
model.addAttribute("currentStep", Integer.valueOf(String.valueOf(cpslmknStatus.get("progrsStep"))));
}
if (cpslmknStatus.get("stepProgressPercentage") != null) {
model.addAttribute("stepProgressPercentage", Double.valueOf(String.valueOf(cpslmknStatus.get("stepProgressPercentage"))));
}
// 추가 데이터들도 model에 추가
if (cpslmknStatus.get("leafInCurrentStep") != null) {
model.addAttribute("leafInCurrentStep", Integer.valueOf(String.valueOf(cpslmknStatus.get("leafInCurrentStep"))));
}
if (cpslmknStatus.get("totalLeafNeeded") != null) {
model.addAttribute("totalLeafNeeded", Integer.valueOf(String.valueOf(cpslmknStatus.get("totalLeafNeeded"))));
}
if (cpslmknStatus.get("leafPerStep") != null) {
model.addAttribute("leafPerStep", Integer.valueOf(String.valueOf(cpslmknStatus.get("leafPerStep"))));
}
}
// rewardInfo에서 보상 정보 추출
@SuppressWarnings("unchecked")
Map<String, Object> rewardInfo = (Map<String, Object>) model.get("rewardInfo");
log.debug("Model rewardInfo: {}", rewardInfo); // 모델 디버깅 로그 추가
if (rewardInfo != null) {
List<Map<String, Object>> productList = (List<Map<String, Object>>) rewardInfo.get("productList");
if (!productList.isEmpty()) {
Map<String, Object> product = productList.get(0); // 첫 번째 제품 정보 사용
String productName = (String) product.get("cnSj");
String productDesc = (String) product.get("cnDc");
String thumbnailPath = (String) product.get("imgFilCours");
log.debug("Product Name: {}", productName);
log.debug("Product Description: {}", productDesc);
log.debug("Thumbnail Path: {}", thumbnailPath);
model.addAttribute("productName", productName);
model.addAttribute("productDesc", productDesc);
model.addAttribute("thumbnailPath", thumbnailPath);
}
model.addAttribute("importantNotice", rewardInfo.get("importantNotice"));
// 디버깅 로그 추가
log.debug("productList: {}", productList);
log.debug("importantNotice: {}", rewardInfo.get("importantNotice"));
}
return "sopmal_m/bnft/cpslmkn/CpslmknCreateGame";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/useLeaf", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> useLeaf(
@Validated @RequestBody CpslmknVO cpslmknVO,
HttpSession session) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/useLeaf", cpslmknVO),
ReplyFromResrc::getReply
);
}
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/cpslmknCollectList")
public String showCollectList(ModelMap model) {
// 초록잎/도토리 모으기 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/leafEventList", new CpslmknVO()),
model,
"cpslmknCollectList"
);
// sopmalCd 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sopmalCd", new CpslmknVO()),
model,
"sopmalCd"
);
// 디버깅 로그 추가
log.debug("cpslmknCollectList: {}", model.get("cpslmknCollectList"));
log.debug("sopmalCd: {}", model.get("sopmalCd"));
return "sopmal_m/bnft/cpslmkn/CpslmknCollectList";
}
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/getGameStatus", method = RequestMethod.GET)
public ResponseEntity<WnbtResponse> getGameStatus(
@RequestParam Long bnfInnb) {
CpslmknVO vo = new CpslmknVO();
vo.setBnfInnb(bnfInnb);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/gameData", vo),
ReplyFromResrc::getReply
);
}
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/getProgressStatus", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<WnbtResponse> getProgressStatus(@RequestParam Long bnfInnb) {
CpslmknVO vo = new CpslmknVO();
vo.setBnfInnb(bnfInnb);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/currentProgress", vo),
ReplyFromResrc::getReply
);
}
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/settings")
public String showSettings(@RequestParam Long bnfInnb, ModelMap model, CpslmknVO vo) {
vo.setBnfInnb(bnfInnb);
// 안내문 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/importantNotice", vo),
model,
"importantNotice"
);
// 알림 설정 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/notificationSettings", vo),
model,
"notificationSettings"
);
// sopmalCd 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sopmalCd", vo),
model,
"sopmalCd"
);
// bnfInnb 모델에 추가
model.addAttribute("bnfInnb", bnfInnb);
log.debug("importantNotice: {}", model);
log.debug("notificationSettings: {}", model);
log.debug("sopmalCd: {}", model);
return "sopmal_m/bnft/cpslmkn/CpslmknSettings";
}
/**
* 캡슐 만들기 알림 설정 변경 API
*/
@Policy(AuthPolicy.RESTRICTED) // 로그인 필요
@RequestMapping(value = "/notification", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateNotificationSetting(
@Validated @RequestBody CpslmknVO cpslmknVO, // agreAt 필드 필요
HttpSession session) {
// BO Controller 호출
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/notification", cpslmknVO),
ReplyFromResrc::getReply
);
}
/**
* 초록잎 보유 내역 페이지 (초기 로딩)
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/leafHistory")
public String showLeafHistory(ModelMap model, CpslmknVO vo, @RequestParam String sopmalCd) {
log.debug("CpslmknVO: {}", vo);
log.debug("sopmalCd: {}", sopmalCd);
model.addAttribute("sopmalCd", sopmalCd);
// 첫 페이지만 조회하도록 페이징 설정
vo.setOffset(0);
vo.setLimit(20);
// 초록잎 보유 내역 조회 (첫 페이지)
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/leafStatusAndHistory", vo),
model,
"leafHistory"
);
log.debug("leafHistory: {}", model);
return "sopmal_m/bnft/cpslmkn/CpslmknOwnedList";
}
/**
* 초록잎 보유 내역 추가 로딩 (AJAX)
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/leafHistory/more", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<WnbtResponse> getMoreLeafHistory(
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "20") int size) {
CpslmknVO vo = new CpslmknVO();
vo.setOffset((page - 1) * size);
vo.setLimit(size);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/leafStatusAndHistory", vo),
ReplyFromResrc::getReply
);
}
/**
* 캡슐 만들기 게임 안내 조회
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/capsuleGameInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> showCapsuleGameInfo(ModelMap model, CpslmknVO vo) {
// 게임 안내 조회
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/capsuleGameInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 캡슐 만들기 게임 안내 조회
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/resetCapsule", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> capsuleGameReset(ModelMap model, @RequestBody CpslmknVO vo) {
log.debug("CpslmknVO: {}", vo.getBnfInnb());
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/resetCapsule", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,90 @@
package com.wb.domainserver.domain.sopmal.bnft.cpslmkn.vo;
import lombok.Data;
import java.sql.Date;
@Data
public class CpslmknVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 혜택 진행 상태 고유번호 */
private Long bnfSttusInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 사용여부 */
private String useAt;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 진행 여부 */
private String progrsAt;
/** 진행 단계 */
private Integer progrsStep;
/** 총 사용 초록잎 개수 */
private Integer totUseLeafCnt;
/** 사용 초록잎 개수 */
private Integer useLeafCnt;
/** 상품 고유번호 */
private Long goodsInnb;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 마일리지 금액 */
private Double mlgRwdAmt;
/** 쿠폰 고유번호 */
private Long couponInnb;
/** 화면표시여부 */
private String indictAt;
/** 스페셜 여부 */
private String specialAt;
/** 지급 개수 */
private Integer pymntCnt;
/** 스페셜 개수 */
private Integer specialCnt;
/** 동의 여부 */
private String agreAt;
/** 페이징 - 오프셋 */
private Integer offset;
/** 페이징 - 리미트 */
private Integer limit;
/** 등록자 */
private int regusr;
/** 등록일시 */
private Date registDt;
/** 수정자 */
private int updusr;
/** 수정일시 */
private Date updtDt;
}

View File

@@ -0,0 +1,141 @@
package com.wb.domainserver.domain.sopmal.bnft.discshar.controller;
import com.wb.domainserver.domain.sopmal.bnft.discshar.vo.DiscsharVO;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class DiscsharController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 할인소식 공유 메인 화면
*
* @param model ModelMap 객체
* @param DiscsharVO DiscSharVO 객체
* @return String 뷰 이름
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/discsharMain")
public String discSharMain(ModelMap model, DiscsharVO vo, HttpSession session) {
log.debug("discSharMain DiscsharVO chk ::: {}", vo);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectDiscsharBenefitInfo", vo),
model,
"currentDiscshar"
);
Map<String, Object> resultMap = (Map<String, Object>) model.getAttribute("currentDiscshar");
// 사용 여부 검증
if (resultMap == null || resultMap.get("list") == null ||
((List<Map<String, Object>>) resultMap.get("list")).isEmpty()) {
model.addAttribute("alertMessage", "현재 할인소식 공유 서비스를 이용할 수 없습니다.");
model.addAttribute("goBack", "Y");
return "sopmal_m/bnft/discshar/Discshar";
}
// 사용 기간 검증
try {
Map<String, Object> firstBenefitInfo = ((List<Map<String, Object>>) resultMap.get("list")).get(0);
Date now = new Date();
Date beginDate = null;
Date endDate = null;
if (firstBenefitInfo.get("bnfBgnDt") != null) {
LocalDateTime localDateTime = LocalDateTime.parse(
firstBenefitInfo.get("bnfBgnDt").toString(),
DateTimeFormatter.ISO_LOCAL_DATE_TIME
);
beginDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
if (firstBenefitInfo.get("bnfEndDt") != null) {
LocalDateTime localDateTime = LocalDateTime.parse(
firstBenefitInfo.get("bnfEndDt").toString(),
DateTimeFormatter.ISO_LOCAL_DATE_TIME
);
endDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
if (beginDate != null && now.before(beginDate) ||
(endDate != null && now.after(endDate))) {
model.addAttribute("alertMessage", "할인소식 공유 서비스 이용 기간이 아닙니다.");
model.addAttribute("goBack", "Y");
return "sopmal_m/bnft/discshar/Discshar";
}
} catch (Exception e) {
log.error("날짜 변환 중 오류 발생: ", e);
model.addAttribute("alertMessage", "서비스 이용기간 확인 중 오류가 발생했습니다.");
model.addAttribute("goBack", "Y");
return "sopmal_m/bnft/discshar/Discshar";
}
return "sopmal_m/bnft/discshar/Discshar";
}
/**
* 할인소식 링크 복사
*
* @param DiscsharVO DiscSharVO 객체
* @return ResponseEntity<Map<String, Object>> 응답 엔티티
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/copyDiscsharLink", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> copyDiscsharLink(@RequestBody DiscsharVO vo, HttpSession session) {
log.debug("copyDiscsharLink DiscsharVO chk ::: {}", vo);
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/copyDiscsharLink", vo),
result -> ResponseEntity.ok().body(result)
);
}
/**
* 할인소식 공유 결과 확인
*
* @param DiscsharVO DiscSharVO 객체
* @return ResponseEntity<Map<String, Object>> 응답 엔티티
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/checkDiscsharResult", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> checkDiscSharResult(@RequestBody DiscsharVO vo, HttpSession session) {
log.debug("checkDiscSharResult DiscsharVO chk ::: {}", vo);
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/checkDiscsharResult", vo),
result -> ResponseEntity.ok().body(result)
);
}
}

View File

@@ -0,0 +1,54 @@
package com.wb.domainserver.domain.sopmal.bnft.discshar.vo;
import lombok.Data;
import java.sql.Date;
@Data
public class DiscsharVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 혜택 제목 */
private String bnfSj;
/** 진행기간 시작일시 */
private Date bnfBgnDt;
/** 진행기간 종료일시 */
private Date bnfEndDt;
/** 화면 대표 이미지 */
private String scrReprsntImg;
/** 화면 대표 링크 URL */
private String scrReprsntLinkUrl;
/** 혜택 안내 */
private String bnfWordsCn;
/** 내용 제목 */
private String cnSj;
/** 내용 설명 */
private String cnDc;
/** 링크 */
private String linkUrl;
/** 이미지파일경로 */
private String imgFilCours;
/** 이미지파일명 */
private String imgFilNm;
/** 유효일시 */
private Date validDt;
/** 시간(초) */
private Integer tmeSecnd;
/** 할인구분코드 */
private String dscntUnitDvCd;
/** 할인금액 */
private Double dscntAmt;
/** 할인율 */
private Double dscntRt;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 마일리지 금액 */
private String mlgRwdAmt;
}

View File

@@ -0,0 +1,62 @@
package com.wb.domainserver.domain.sopmal.bnft.envset.controller;
import com.wb.domainserver.domain.sopmal.bnft.stepcnt.vo.StepcntVO;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class EnvsetController {
@Autowired
WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 환경설정 메인 화면
*
* @param model
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/envsetMain")
public String envsetMain(ModelMap model, StepcntVO vo) {
log.debug("envsetMain StepcntVO chk ::: {}", vo);
log.debug("ModelMap content: {}", model);
return "sopmal_m/bnft/envset/Envset";
}
/**
* 오픈소스 라이선스 화면
*
* @param model
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/openLicense")
public String openLicense(ModelMap model, StepcntVO vo) {
log.debug("openLicense StepcntVO chk ::: {}", vo);
log.debug("ModelMap content: {}", model);
return "sopmal_m/bnft/envset/OpenSourceLicense";
}
}

View File

@@ -0,0 +1,71 @@
package com.wb.domainserver.domain.sopmal.bnft.envset.vo;
import lombok.Data;
import java.sql.Date;
@Data
public class EnvsetVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 사용 여부 */
private String useAt;
/** 진행기간 시작일시 */
private String bnfBgnDt;
/** 진행기간 종료일시 */
private String bnfEndDt;
/** 충전 필요 금액 */
private String amtForChg;
/** 등록자 */
private int regUsr;
/** 등록일시 */
private Date registDt;
/** 수정자 */
private int updusr;
/** 수정일시 */
private Date updtDt;
/** 회원 고유번호 */
private Long mbrInnb;
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 보상수령 고유번호 */
private Long bnfRcvInnb;
/** 혜택 참여 일시 */
private String bnfPrtDt;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 참여 내용 1 */
private String prtCont1;
/** 참여 내용 2 */
private String prtCont2;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 요청 페이지 구분 */
private String reqPageDv;
/** 출석 횟수 */
private Integer currentMonthAttendanceCount;
/** 누적 출석 마일리지 */
private Double totalAttendanceMileage;
/** 대표 이미지 */
private String reprsntImg;
/** 대표 링크 URL */
private String reprsntLinkUrl;
/** 보상 이미지 */
private String rewardImg;
/** 보상 링크 URL */
private String rewardLinkUrl;
/** 혜택 문구 */
private String bnfWordsCn;
/** 출석 일자 목록 */
private String attendanceDays;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 마일리지 */
private Double mlgRwdAmt;
/** 쿠폰 고유번호 */
private Long couponInnb;
}

View File

@@ -0,0 +1,133 @@
package com.wb.domainserver.domain.sopmal.bnft.evntview.controller;
import com.wb.domainserver.domain.sopmal.bnft.evntview.vo.EvntviewVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class EvntviewController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 이벤트 보기 페이지
*
* @param model 모델맵
* @param vo EvntviewVO
* @return 뷰 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/evntviewMain")
public String eventView(ModelMap model, EvntviewVO vo, HttpSession session) {
log.debug("eventView EvntviewVO chk ::: {}", vo);
// 이벤트 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getEventDetail", vo),
model,
"eventInfo"
);
log.debug("ModelMap content: {}", model);
return "sopmal_m/bnft/evntview/Evntview";
}
/**
* 이벤트 참여 가능 여부 확인
*
* @param vo EvntviewVO 객체
* @param session HttpSession 객체
* @return 참여 가능 여부 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/checkParticipationAvailable", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> checkParticipationAvailable(@RequestBody EvntviewVO vo, HttpSession session) {
Long bnfInnb = (Long) session.getAttribute("eventBnfInnb");
if (bnfInnb != null) {
vo.setBnfInnb(bnfInnb);
}
log.debug("checkParticipationAvailable EvntviewVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/checkParticipationAvailable", vo),
ReplyFromResrc::getReply
);
}
/**
* 이벤트 참여 및 마일리지 적립
*
* @param vo EvntviewVO 객체
* @param session HttpSession 객체
* @return 참여 결과 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/participateEvent", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> participateEvent(@RequestBody EvntviewVO vo, HttpSession session) {
Long bnfInnb = (Long) session.getAttribute("eventBnfInnb");
if (bnfInnb != null) {
vo.setBnfInnb(bnfInnb);
}
log.debug("participateEvent EvntviewVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/participateEvent", vo),
ReplyFromResrc::getReply
);
}
/**
* 이벤트 정보 조회 (AJAX용)
*
* @param vo EvntviewVO 객체
* @param session HttpSession 객체
* @return 이벤트 정보 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/getEventDetail", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> getEventDetail(@RequestBody EvntviewVO vo, HttpSession session) {
Long bnfInnb = (Long) session.getAttribute("eventBnfInnb");
if (bnfInnb != null) {
vo.setBnfInnb(bnfInnb);
}
log.debug("getEventDetail EvntviewVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getEventDetail", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,60 @@
package com.wb.domainserver.domain.sopmal.bnft.evntview.vo;
import lombok.Data;
import java.sql.Date;
@Data
public class EvntviewVO {
/** 혜택 화면 고유번호 */
private Long bnfPrtInnb;
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 혜택 제목 */
private String bnfSj;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 진행기간 시작일시 */
private Date bnfBgnDt;
/** 진행기간 종료일시 */
private Date bnfEndDt;
/** 화면 대표 이미지 */
private String scrReprsntImg;
/** 화면 대표 링크 URL */
private String scrReprsntLinkUrl;
/** 혜택 안내 */
private String bnfWordsCn;
/** 내용 제목 */
private String cnSj;
/** 내용 설명 */
private String cnDc;
/** 링크 */
private String linkUrl;
/** 이미지파일경로 */
private String imgFilCours;
/** 이미지파일명 */
private String imgFilNm;
/** 유효일시 */
private Date validDt;
/** 시간(초) */
private Integer tmeSecnd;
/** 안내내용 */
private String wordsCn;
/** 사용여부 */
private String useAt;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 클라이언트에서 측정한 이벤트 지속 시간 (초) */
private Long duration;
/** 서버에서 측정한 이벤트 지속 시간 (초) */
private Long serverDuration;
/** 마일리지 금액 */
private String mlgRwdAmt;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
//쇼핑몰코드
public String sopmalCd;
}

View File

@@ -0,0 +1,162 @@
package com.wb.domainserver.domain.sopmal.bnft.hlthset.controller;
import com.wb.domainserver.domain.sopmal.bnft.hlthset.vo.HlthsetVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class HlthsetController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 관심건강분야 설정 메인 페이지
*
* @param model Spring ModelMap 객체
* @param vo 관심건강분야 설정 VO
* @return String 뷰 이름
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/hlthsetMain")
public String hlthsetMain(ModelMap model, HlthsetVO vo, HttpSession session) {
log.debug("hlthsetMain called with vo: {}", vo);
return "sopmal_m/bnft/hlthset/Hlthset";
}
/**
* 관심건강분야 설정 정보 조회
*
* @param vo 관심건강분야 설정 VO
* @return ResponseEntity<WnbtResponse> 관심건강분야 설정 정보
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectHealthInterestInfo", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> selectHealthInterestInfo(@RequestBody HlthsetVO vo, HttpSession session) {
log.debug("selectHealthInterestInfo called with vo: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectHealthInterestInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 사용자 관심분야 저장
*
* @param vo 관심건강분야 설정 VO
* @return ResponseEntity<WnbtResponse> 저장 결과
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/saveUserInterests", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> saveUserInterests(@RequestBody HlthsetVO vo, HttpSession session) {
log.debug("saveUserInterests called with vo: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/saveUserInterests", vo),
ReplyFromResrc::getReply
);
}
/**
* 사용자 관심분야 수정
*
* @param vo 관심 건강분야 설정 VO
* @return ResponseEntity<WnbtResponse> 수정 결과
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateUserInterests", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> updateUserInterests(@RequestBody HlthsetVO vo, HttpSession session) {
log.debug("updateUserInterests called with vo: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/saveUserInterests", vo),
ReplyFromResrc::getReply
);
}
/**
* 사용자 관심분야 삭제
*
* @param vo 관심건강분야 설정 VO
* @return ResponseEntity<WnbtResponse> 삭제 결과
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteUserInterests", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> deleteUserInterests(@RequestBody HlthsetVO vo, HttpSession session) {
log.debug("deleteUserInterests called with vo: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/deleteUserInterests", vo),
ReplyFromResrc::getReply
);
}
/**
* 사용자 관심분야 조회
*
* @param vo 관심건강분야 설정 VO
* @return ResponseEntity<WnbtResponse> 사용자 관심분야 목록
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectUserInterests", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> selectUserInterests(@RequestBody HlthsetVO vo, HttpSession session) {
log.debug("selectUserInterests called with vo: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectUserInterests", vo),
ReplyFromResrc::getReply
);
}
/**
* 사용자 관심분야 저장 상태 및 마일리지 적립 여부 조회
*
* @param vo 관심건강분야 설정 VO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectUserInterestSaveStatus", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> selectUserInterestSaveStatus(@RequestBody HlthsetVO vo, HttpSession session) {
log.debug("selectUserInterestSaveStatus called with vo: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectUserInterestSaveStatus", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,34 @@
package com.wb.domainserver.domain.sopmal.bnft.hlthset.vo;
import lombok.Data;
import java.util.List;
@Data
public class HlthsetVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 보상수령 고유번호 */
private Long bnfRcvInnb;
/** 마일리지 보상 금액 */
private Double mlgRwdAmt;
/** 동의 여부 */
private String agreAt;
/** 선택된 관심분야 목록 */
private List<InterestArea> interestAreas;
@Data
public static class InterestArea {
private Long bnfIntrstInnb;
private boolean selected;
}
}

View File

@@ -0,0 +1,468 @@
package com.wb.domainserver.domain.sopmal.bnft.intakchl.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.bnft.intakchl.vo.IntakchlVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class IntakchlController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 섭취 챌린지 처음 추가시, 제품 사용시 화면
*
* @param model
* @param IntakchlVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/intakchlMain")
public String intakchlMain(ModelMap model, IntakchlVO vo) {
log.debug("intakchlMain IntakchlVO chk ::: {}", vo);
// 섭취 챌린지 화면 설정 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectIntakchlInfo", vo),
model,
"intakchscreenInfo"
);
// 구매확정상품 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOWritPosblRvw", vo),
model,
"purchasedProductsInfo"
);
// 위시리스트 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOWslistInqire", vo),
model,
"wishlistInfo"
);
log.debug("ModelMap content: {}", model);
return "sopmal_m/bnft/intakchl/Intakchl";
}
/**
* 섭취 챌린지 추가
*
* @param IntakchlVO
* @return WnbtResponse
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/addSelectedProducts", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> addSelectedProducts(@Validated @RequestBody IntakchlVO vo) {
log.debug("intakchlVO content: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/addSelectedProducts", vo),
ReplyFromResrc::getReply
);
}
/**
* 섭취 챌린지 처음 추가시, 제품 사용시 화면
*
* @param model
* @param IntakchlVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/intakchlDailyRecordMain")
public String IntakchlDailyRecordMain(ModelMap model, IntakchlVO vo) {
log.debug("IntakchlDailyRecordMain IntakchlVO chk ::: {}", vo);
// 섭취 챌린지 화면 설정 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectDailyIntakeRecordsDetail", vo),
model,
"dailyIntakeRecordsDetail"
);
log.debug("IntakchlDailyRecordMain ModelMap content: {}", model);
return "sopmal_m/bnft/intakchl/IntakchlDailyRecord";
}
/**
* 섭선택한 날짜의 전체 섭취 기록 및 총 섭취율 조회
*
* @param IntakchlVO
* @return WnbtResponse
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDailyTotalIntakeRecord", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> selectDailyTotalIntakeRecord(@Validated @RequestBody IntakchlVO vo) {
log.debug("intakchlVO content: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectDailyTotalIntakeRecord", vo),
ReplyFromResrc::getReply
);
}
/**
* 선택한 날짜의 전체 섭취 기록 및 총 섭취율 조회
*
* @param IntakchlVO
* @return WnbtResponse
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateIntakeStatus", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateIntakeStatus(@Validated @RequestBody IntakchlVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/updateIntakeStatus", vo),
ReplyFromResrc::getReply
);
}
/**
* 섭취 챌린지 마일리지 적립
*
* @param IntakchlVO
* @return WnbtResponse
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/awardIntakeChallengesMileage", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> awardIntakeChallengesMileage(@Validated @RequestBody IntakchlVO vo) {
log.debug("intakchlVO content: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/awardIntakeChallengesMileage", vo),
ReplyFromResrc::getReply
);
}
/**
* 섭취 챌린지 종합 대시보드 페이지
*
* @param model ModelMap 객체
* @param vo IntakchlVO 객체
* @param session HttpSession 객체
* @return 뷰 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/intakchlMileageSummary")
public String intakchlMileageSummary(ModelMap model, IntakchlVO vo) {
// 섭취 챌린지 종합 대시보드 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getIntakechallengeDashboard", vo),
model,
"dashboardInfo"
);
log.debug("intakchlMileageSummary ModelMap content: {}", model);
return "sopmal_m/bnft/intakchl/IntakchlMileageSummary";
}
/**
* 섭취 챌린지 대시보드 데이터 조회 (AJAX용)
*
* @param vo IntakchlVO 객체
* @param session HttpSession 객체
* @return 대시보드 정보를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/getIntakechallengeDashboard", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> getIntakechallengeDashboard(@Validated @RequestBody IntakchlVO vo) {
log.debug("getIntakechallengeDashboard IntakchlVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getIntakechallengeDashboard", vo),
ReplyFromResrc::getReply
);
}
/**
* 날짜별 상태 정보 조회
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/getStatsDateClasses", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> getStatsDateClasses(@Validated @RequestBody IntakchlVO vo) {
log.debug("intakchlVO content: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getStatsDateClasses", vo),
ReplyFromResrc::getReply
);
}
/**
* 현재 챌린지 중인 제품을 조회
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCurrentChallengeProducts", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> selectCurrentChallengeProducts(@Validated @RequestBody IntakchlVO vo) {
log.debug("intakchlVO content: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectCurrentChallengeProducts", vo),
ReplyFromResrc::getReply
);
}
/**
* 섭취 챌린지 처음 추가시, 제품 사용시 화면
*
* @param model
* @param intakchlVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/intakchlChallengeSettings")
public String intakchlChallengeSettings(ModelMap model, IntakchlVO vo) {
log.debug("intakchlVO content: {}", vo);
// 섭취 챌린지 화면 설정 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectIntakchlInfo", vo),
model,
"settingInfo"
);
log.debug("intakchlChallengeSettings ModelMap content: {}", model);
return "sopmal_m/bnft/intakchl/IntakchlChallengeSettings";
}
/**
* 섭취 챌린지 처음 추가시, 제품 사용시 화면
*
* @param model
* @param intakchlVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/intakchlChallengeProductManagement")
public String intakchlChallengeProductManagement(ModelMap model, IntakchlVO vo) {
log.debug("intakchlVO content: {}", vo);
// 섭취 챌린지 화면 설정 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getIntakeChallengeProductManagement", vo),
model,
"screenInfo"
);
log.debug("intakchlChallengeProductManagement ModelMap content: {}", model);
return "sopmal_m/bnft/intakchl/IntakchlChallengeProductManagement";
}
/**
* 제품 상세 화면
*
* @param model
* @param intakchlVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/intakchlProductDetail")
public String intakchlProductDetail(ModelMap model, IntakchlVO vo, @RequestParam(required = false) Long bnfNtkInnb) {
vo.setBnfNtkInnb(bnfNtkInnb);
log.debug("intakchlVO content: {}", vo);
// 섭취 챌린지 화면 설정 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectIntakeChallengeProductDetail", vo),
model,
"screenInfo"
);
log.debug("intakchlProductDetail ModelMap content: {}", model);
return "sopmal_m/bnft/intakchl/IntakchlProductDetail";
}
/**
* 일일 섭취 횟수 및 메모 업데이트
*
* @param IntakchlVO
* @return WnbtResponse
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateDailyIntakeAndMemo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateDailyIntakeAndMemo(@Validated @RequestBody IntakchlVO vo) {
log.debug("intakchlVO content: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/updateDailyIntakeAndMemo", vo),
ReplyFromResrc::getReply
);
}
/**
* 선택된 제품 삭제
*
* @param IntakchlVO
* @return WnbtResponse
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteIntakeChallengeProduct", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteIntakeChallengeProduct(@Validated @RequestBody IntakchlVO vo) {
log.debug("intakchlVO content: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/deleteIntakeChallengeProduct", vo),
ReplyFromResrc::getReply
);
}
/**
* 섭취 챌린지 알림 설정 화면
*
* @param model ModelMap 객체
* @param vo IntakchlVO 객체
* @param session HttpSession 객체
* @return 뷰 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/intakchllAlarmSettings")
public String intakchllAlarmSettings(ModelMap model, IntakchlVO vo) {
// 섭취 챌린지 알림 설정 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getIntakeChallengeNotificationSettings", vo),
model,
"notificationSettings"
);
log.debug("intakchllAlarmSettings ModelMap content: {}", model);
return "sopmal_m/bnft/intakchl/IntakchlAlarmSettings";
}
/**
* 섭취 챌린지 알림 설정 정보 조회 (AJAX용)
*
* @param vo IntakchlVO 객체
* @param session HttpSession 객체
* @return 알림 설정 정보를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/getIntakeChallengeNotificationSettings", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> getIntakeChallengeNotificationSettings(@Validated @RequestBody IntakchlVO vo) {
log.debug("getIntakeChallengeNotificationSettings IntakchlVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getIntakeChallengeNotificationSettings", vo),
ReplyFromResrc::getReply
);
}
/**
* 섭취시간 알림 설정 업데이트
*
* @param vo IntakchlVO 객체
* @param session HttpSession 객체
* @return 업데이트 결과를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateIntakeChallengeNotification", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateIntakeChallengeNotification(@Validated @RequestBody IntakchlVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/updateIntakeChallengeNotification", vo),
ReplyFromResrc::getReply
);
}
/**
* 미완료 알림 설정 업데이트
*
* @param vo IntakchlVO 객체
* @param session HttpSession 객체
* @return 업데이트 결과를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateIntakeChallengeIncompleteNotification", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateIntakeChallengeIncompleteNotification(@Validated @RequestBody IntakchlVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/updateIntakeChallengeIncompleteNotification", vo),
ReplyFromResrc::getReply
);
}
/**
* 기본 알림 시간 재설정
*
* @param vo IntakchlVO 객체
* @param session HttpSession 객체
* @return 재설정 결과를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/resetDefaultNotificationTimes", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> resetDefaultNotificationTimes(@Validated @RequestBody IntakchlVO vo) {
log.debug("resetDefaultNotificationTimes IntakchlVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/resetDefaultNotificationTimes", vo),
ReplyFromResrc::getReply
);
}
/**
* 개별 알림 설정 삭제
*
* @param vo IntakchlVO 객체
* @param session HttpSession 객체
* @return 삭제 결과를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteNotification", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteNotification(@Validated @RequestBody IntakchlVO vo) {
log.debug("deleteNotification IntakchlVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/deleteNotification", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,67 @@
package com.wb.domainserver.domain.sopmal.bnft.intakchl.vo;
import lombok.Data;
import java.sql.Date;
import java.util.List;
@Data
public class IntakchlVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 혜택 섭취챌린지 고유번호 */
private Long bnfNtkInnb;
/** 회원 고유번호 */
private String mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 섭취 상품 고유번호 */
private Long goodsInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 섭취 상태 구분 코드 */
private String bnfNtkSttusDvCd;
/** 섭취 횟수 */
private Integer ntkCnt;
/** 메모 */
private String memo;
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 참여 일시 */
private Date bnfPrtDt;
/** 혜택 보상수령 고유번호 */
private Long bnfRcvInnb;
/** 마일리지 금액 */
private Double mlgRwdAmt;
/** 상품 고유번호 리스트 */
private List<ProductVO> products;
private String selectedDate;
private String intakeStatus;
/** 보너스까지 남은 일수 */
private int daysUntilBonus;
/** 동의여부 */
private String agreAt;
private String ntcnTme;
/** 사용여부 */
private String useAt;
private String bnfNtkNtcnInnb;
/** 상품번호 */
private int productId;
/** 제품 섭취 날짜 */
private String intakeDate;
/** 섭취 시작일자 */
private Date startDate;
@Data
public static class ProductVO {
private Long goodsInnb;
private String sopmalCd;
private String originDvCd;
}
}

View File

@@ -0,0 +1,188 @@
package com.wb.domainserver.domain.sopmal.bnft.lucklott.controller;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.ZoneId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.bnft.lucklott.vo.LucklottVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.BoResultMapConverter;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Mono;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class LucklottController {
@Autowired
WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 행운복권 혜택 기본 정보 조회
*
* @param model
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/lucklottMain")
public String luckyLotteryMain(ModelMap model, LucklottVO vo) {
log.debug("luckyLotteryMain LucklottVO chk ::: {}", vo);
// 혜택 기본 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectLucklottBenefitInfo", vo),
model,
"screenInfo"
);
// 응답 데이터 로깅
log.debug("ModelMap content: {}", model);
// benefitInfo 특별 확인
Object screenInfo = model.get("screenInfo");
if (screenInfo instanceof Map) {
Map<String, Object> screenInfoMap = (Map<String, Object>) screenInfo;
Object benefitInfo = screenInfoMap.get("benefitInfo");
log.debug("benefitInfo: {}", benefitInfo);
if (benefitInfo instanceof Map) {
Map<String, Object> benefitInfoMap = (Map<String, Object>) benefitInfo;
Object bnfInnb = benefitInfoMap.get("bnfInnb");
log.debug("bnfInnb from benefitInfo: {}", bnfInnb);
}
}
return "sopmal_m/bnft/lucklott/Lucklott";
}
/**
* 행운복권 참여
*
* @param vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/participateLuckyLottery", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> participateLuckyLottery(@Validated @RequestBody LucklottVO vo) {
log.debug("participateLuckyLottery LucklottVO chk ::: {}", vo);
// 혜택 참여 정보 API 호출
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/participateLuckyLottery", vo),
ReplyFromResrc::getReply
);
}
/**
* 최신 행운복권 참여 정보 조회
*
* @param vo
* @return ResponseEntity<Map<String, Object>>
*/
@RequestMapping(value = "/getLatestLuckyLotteryInfo", method = RequestMethod.POST)
public ResponseEntity<Map<String, Object>> getLatestLuckyLotteryInfo(@RequestBody LucklottVO vo) {
log.debug("getLatestLuckyLotteryInfo LucklottVO chk ::: {}", vo);
// 참여 횟수 정보 조회
Map<String, Object> participationCountInfo = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectCurrentMonthParticipationCount", vo)
);
// 누적 참여 마일리지 조회
Map<String, Object> participationMileageInfo = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectTotalParticipationMileage", vo)
);
// 결과를 Map에 담아 반환
Map<String, Object> result = new HashMap<>();
result.put("participationCount", participationCountInfo.get("currentMonthParticipationCount"));
result.put("totalParticipationMileage", participationMileageInfo.get("totalParticipationMileage"));
return ResponseEntity.status(HttpStatus.OK).body(result);
}
/**
* 행운복권 당첨 결과 미리보기
*
* @param vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/previewLuckyLotteryResult", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> previewLuckyLotteryResult(@Validated @RequestBody LucklottVO vo) {
log.debug("previewLuckyLotteryResult LucklottVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/previewLuckyLotteryResult", vo),
ReplyFromResrc::getReply
);
}
/**
* 행운복권 실제 참여 확정
*
* @param requestData
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/confirmLuckyLotteryParticipation", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> confirmLuckyLotteryParticipation(@Validated @RequestBody Map<String, Object> requestData, HttpSession session) {
log.debug("confirmLuckyLotteryParticipation requestData chk ::: {}", requestData);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/confirmLuckyLotteryParticipation", requestData),
ReplyFromResrc::getReply
);
}
/**
* 행운복권 남은 수량 조회
*
* @param requestData
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/checkRemainingGoodsQuantity", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> checkRemainingGoodsQuantity(@Validated @RequestBody LucklottVO vo) {
log.debug("checkRemainingGoodsQuantity requestData chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/checkRemainingGoodsQuantity", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,80 @@
package com.wb.domainserver.domain.sopmal.bnft.lucklott.vo;
import java.sql.Date;
import lombok.Data;
@Data
public class LucklottVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 사용 여부 */
private String useAt;
/** 진행기간 시작일시 */
private String bnfBgnDt;
/** 진행기간 종료일시 */
private String bnfEndDt;
/** 충전 필요 금액 */
private String amtForChg;
/** 등록자 */
private int regusr;
/** 등록일시 */
private Date registDt;
/** 수정자 */
private int updusr;
/** 수정일시 */
private Date updtDt;
/** 회원 고유번호 */
private Long mbrInnb;
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 보상수령 고유번호 */
private Long bnfRcvInnb;
/** 혜택 참여 일시 */
private String bnfPrtDt;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 참여 내용 1 */
private String prtCont1;
/** 참여 내용 2 */
private String prtCont2;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 요청 페이지 구분 */
private String reqPageDv;
/** 참여 횟수 */
private Integer currentMonthParticipationCount;
/** 누적 참여 마일리지 */
private Double totalParticipationMileage;
/** 대표 이미지 */
private String reprsntImg;
/** 대표 링크 URL */
private String reprsntLinkUrl;
/** 보상 이미지 */
private String rewardImg;
/** 보상 링크 URL */
private String rewardLinkUrl;
/** 혜택 문구 */
private String bnfWordsCn;
/** 참여 일자 목록 */
private String participationDays;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 마일리지 */
private Double mlgRwdAmt;
/** 쿠폰 고유번호 */
private Long couponInnb;
/** 상품 고유번호 */
private Long goodsInnb;
/** 상품 고유번호 */
private Long przwinQy;
/** 남은 당첨 수량 */
private Long remaininggoodsquantity;
/** 등록자 */
private Long regUsr;
}

View File

@@ -0,0 +1,146 @@
package com.wb.domainserver.domain.sopmal.bnft.lvshop.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.bnft.lvshop.vo.LvshopVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.BoResultMapConverter;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class LvshopController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 라이브쇼핑 메인 화면
*
* @param model ModelMap 객체
* @param vo LvshopVO 객체
* @return String 뷰 이름
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/lvshopMain", method = RequestMethod.GET)
public String lvshopMain(ModelMap model, LvshopVO vo, HttpSession session) {
log.debug("lvshopMain LvshopVO chk ::: {}", vo);
// 라이브쇼핑 정보 조회 (현재 방송 + 예고)
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getLiveShoppingInfo", vo),
model,
"liveShoppingInfo" // 모델에 liveShoppingInfo 키로 데이터 저장
);
log.debug("ModelMap content after getLiveShoppingInfo: {}", model);
return "sopmal_m/bnft/lvshop/Lvshop"; // 라이브쇼핑 메인 뷰 반환
}
/**
* 라이브 쇼핑 정보 조회 (AJAX 호출용)
* @param vo LvshopVO 객체 (sopmalCd 필수)
* @return ResponseEntity<WnbtResponse> 응답 엔티티
*/
@Policy(AuthPolicy.PUBLIC) // 회원/비회원 접근 가능
@RequestMapping(value = "/getInfo", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> getLiveShoppingInfo(@RequestBody LvshopVO vo) {
log.debug("getLiveShoppingInfo LvshopVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getLiveShoppingInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 라이브 쇼핑 알림 신청/취소 토글
* @param vo LvshopVO 객체 (bnfInnb, agreeYn 필수)
* @return ResponseEntity<WnbtResponse> 응답 엔티티
*/
@Policy(AuthPolicy.RESTRICTED) // 회원만 접근 가능
@RequestMapping(value = "/toggleNotification", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> toggleLiveShoppingNotification(@RequestBody LvshopVO vo) {
log.debug("toggleLiveShoppingNotification LvshopVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/toggleLiveShoppingNotification", vo),
ReplyFromResrc::getReply
);
}
/**
* 라이브 쇼핑 참여 기록 (시청 시작)
* @param vo LvshopVO 객체 (bnfInnb 필수)
* @return ResponseEntity<WnbtResponse> 응답 엔티티
*/
@Policy(AuthPolicy.RESTRICTED) // 회원만 접근 가능
@RequestMapping(value = "/recordParticipation", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> recordLiveShoppingParticipation(@RequestBody LvshopVO vo) {
log.debug("recordLiveShoppingParticipation LvshopVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/recordLiveShoppingParticipation", vo),
ReplyFromResrc::getReply
);
}
/**
* 라이브 쇼핑 마일리지 보상 지급 (시청 완료)
* @param vo LvshopVO 객체 (bnfPrtInnb, mlgRwdAmt 필수)
* @return ResponseEntity<WnbtResponse> 응답 엔티티
*/
@Policy(AuthPolicy.RESTRICTED) // 회원만 접근 가능
@RequestMapping(value = "/awardReward", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> awardLiveShoppingReward(@RequestBody LvshopVO vo) {
log.debug("awardLiveShoppingReward LvshopVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/awardLiveShoppingReward", vo),
ReplyFromResrc::getReply
);
}
/**
* 라이브 쇼핑 참여 기록 및 마일리지 보상 지급 통합 처리
* @param vo LvshopVO 객체 (bnfInnb, mlgRwdAmt 필수)
* @return ResponseEntity<WnbtResponse> 응답 엔티티
*/
@Policy(AuthPolicy.RESTRICTED) // 회원만 접근 가능
@RequestMapping(value = "/recordAndReward", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> recordAndRewardLiveShopping(@RequestBody LvshopVO vo) {
log.debug("recordAndRewardLiveShopping LvshopVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/recordAndRewardLiveShopping", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,60 @@
package com.wb.domainserver.domain.sopmal.bnft.lvshop.vo;
import lombok.Data;
import java.sql.Date;
@Data
public class LvshopVO {
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 혜택 제목 */
private String bnfSj;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 진행기간 시작일시 */
private Date bnfBgnDt;
/** 진행기간 종료일시 */
private Date bnfEndDt;
/** 혜택 동의 구분 코드 */
private String bnfAgreDvCd;
/** 화면 대표 이미지 */
private String scrReprsntImg;
/** 화면 대표 링크 URL */
private String scrReprsntLinkUrl;
/** 혜택 안내 */
private String bnfWordsCn;
/** 내용 제목 (방송명) */
private String cnSj;
/** 내용 설명 */
private String cnDc;
/** 링크 (방송링크URL) */
private String linkUrl;
/** 이미지파일경로 (방송썸네일파일 경로) */
private String imgFilCours;
/** 이미지파일명 (방송썸네일파일 명) */
private String imgFilNm;
/** 유효일시 (방송일시) */
private Date validDt;
/** 시간(초) (필수열람시간) */
private Integer tmeSecnd;
/** 안내내용 (방송소개) */
private String wordsCn;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 마일리지 금액 */
private String mlgRwdAmt;
/** 서버에서 측정한 이벤트 지속 시간 (초) */
private Long serverDuration;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 동의 여부 */
private String agreAt;
}

View File

@@ -0,0 +1,157 @@
package com.wb.domainserver.domain.sopmal.bnft.oxquiz.controller;
import com.wb.domainserver.domain.sopmal.bnft.oxquiz.vo.OxquizVO;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.Map;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class OxquizController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* OX 퀴즈 메인 화면
*
* @param model ModelMap
* @param vo OxquizVO
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/oxquizMain")
public String oxquizMain(ModelMap model, OxquizVO vo, HttpSession session) {
log.debug("oxquizMain OxquizVO chk ::: {}", vo);
// OX 퀴즈 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectOxquizInfo", vo),
model,
"screenInfo"
);
log.debug(" content: {}", model);
// 사용 여부 검증
Map<String, Object> screenInfo = (Map<String, Object>) model.getAttribute("screenInfo");
// 정보가 없거나 사용 여부가 'N'인 경우
if (screenInfo == null || screenInfo.get("basicInfo") == null ||
!"Y".equals(((Map<String, Object>)screenInfo.get("basicInfo")).get("useAt"))) {
model.addAttribute("alertMessage", "현재 OX 퀴즈 서비스를 이용할 수 없습니다.");
model.addAttribute("goBack", "Y");
return "sopmal_m/bnft/oxquiz/Oxquiz";
}
// 사용 기간 검증
try {
Map<String, Object> basicInfo = (Map<String, Object>) screenInfo.get("basicInfo");
Date now = new Date();
Date beginDate = null;
Date endDate = null;
if (basicInfo.get("bnfBgnDt") != null) {
LocalDateTime localDateTime = LocalDateTime.parse(
basicInfo.get("bnfBgnDt").toString(),
DateTimeFormatter.ISO_LOCAL_DATE_TIME
);
beginDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
if (basicInfo.get("bnfEndDt") != null) {
LocalDateTime localDateTime = LocalDateTime.parse(
basicInfo.get("bnfEndDt").toString(),
DateTimeFormatter.ISO_LOCAL_DATE_TIME
);
endDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
if (beginDate != null && now.before(beginDate) ||
(endDate != null && now.after(endDate))) {
model.addAttribute("alertMessage", "OX 퀴즈 서비스 이용 기간이 아닙니다.");
model.addAttribute("goBack", "Y");
return "sopmal_m/bnft/oxquiz/Oxquiz";
}
} catch (Exception e) {
log.error("날짜 변환 중 오류 발생: ", e);
model.addAttribute("alertMessage", "서비스 이용기간 확인 중 오류가 발생했습니다.");
model.addAttribute("goBack", "Y");
return "sopmal_m/bnft/oxquiz/Oxquiz";
}
return "sopmal_m/bnft/oxquiz/Oxquiz";
}
/**
* OX 퀴즈 참여
*
* @param vo OxquizVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/participate", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> participateOxquiz(@RequestBody OxquizVO vo, HttpSession session) {
log.debug("participateOxquiz OxquizVO chk ::: {}", vo);
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/participateOxquiz", vo),
result -> ResponseEntity.ok().body(result)
);
}
/**
* 알림 상태 조회
*
* @param vo OxquizVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/getoxquizNotificationStatus", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> getNotificationStatus(@RequestBody OxquizVO vo, HttpSession session) {
log.debug("getNotificationStatus OxquizVO chk ::: {}", vo);
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getoxquizNotificationStatus", vo),
result -> ResponseEntity.ok().body(result)
);
}
/**
* 알림 상태 변경
*
* @param vo OxquizVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateoxquizNotificationStatus", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> updateNotificationStatus(@RequestBody OxquizVO vo, HttpSession session) {
log.debug("updateNotificationStatus OxquizVO chk ::: {}", vo);
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/updateoxquizNotificationStatus", vo),
result -> ResponseEntity.ok().body(result)
);
}
}

View File

@@ -0,0 +1,48 @@
package com.wb.domainserver.domain.sopmal.bnft.oxquiz.vo;
import lombok.Data;
import java.sql.Date;
@Data
public class OxquizVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 혜택 제목 */
private String bnfSj;
/** 진행기간 시작일시 */
private Date bnfBgnDt;
/** 진행기간 종료일시 */
private Date bnfEndDt;
/** 혜택 안내 */
private String bnfWordsCn;
/** 시간(초) */
private Integer tmeSecnd;
/** 혜택 퀴즈 고유번호 */
private Long bnfQuizInnb;
/** 퀴즈 내용 */
private String quizCn;
/** 퀴즈 정답 */
private String quizCnsr;
/** 힌트보기 링크 */
private String hintUrl;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 답변내용 */
private String answCn;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 동의여부 */
private String agreAt;
/** 현재 퀴즈 일차 */
private Integer currentQuizDay;
/** 대표 이미지 */
private String reprsntImg;
/** 대표 링크 URL */
private String reprsntLinkUrl;
}

View File

@@ -0,0 +1,151 @@
package com.wb.domainserver.domain.sopmal.bnft.purstmp.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.bnft.purstmp.vo.PurstmpVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.BoResultMapConverter;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class PurstmpController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 스탬프카드 메인 화면
*
* @param model
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/purstmpMain")
public String purstmpMain(ModelMap model, PurstmpVO vo, HttpSession session) {
log.debug("purstmpMain PurstmpVO chk ::: {}", vo);
// 스탬프카드 초기 정보조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectStampCards", vo),
model,
"rewardProductInfo"
);
log.debug("Model values: {}", model);
return "sopmal_m/bnft/purstmp/PurstmpStampInProgress";
}
/**
* 스탬프카드 정보 새로고침
*
* @param vo
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/refreshStamps", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> refreshStamps(@RequestBody PurstmpVO vo, HttpSession session) {
log.debug("refreshStamps PurstmpVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/refreshStampCard", vo),
ReplyFromResrc::getReply
);
}
/**
* 스탬프 적립내역 화면
*
* @param model
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/purstmpHistory")
public String purstmpHistory(ModelMap model, PurstmpVO vo, HttpSession session) {
log.debug("purstmpHistory PurstmpVO chk ::: {}", vo);
// 스탬프 적립내역 및 교환권 갯수 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectStampAndPurchaseData", vo),
model,
"rewardProductInfo"
);
log.debug("Stamp History Model values: {}", model);
return "sopmal_m/bnft/purstmp/PurstmpStampHistory";
}
/**
* Ajax로 스탬프 데이터 조회
* BO 서버의 selectStampCards API를 호출하여 JSON 형태로 반환
*
* @param vo 스탬프 조회 조건
* @return ResponseEntity<Map<String, Object>>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/getStampData", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> getStampData(@RequestBody PurstmpVO vo, HttpSession session) {
log.debug("getStampData PurstmpVO chk ::: {}", vo);
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectStampCards", vo),
result -> {
Map<String, Object> response = new HashMap<>();
response.put("success", true);
response.put("data", result);
return ResponseEntity.ok(response);
}
);
}
/**
* Ajax로 스탬프 적립내역 데이터 조회
* BO 서버의 selectStampAndPurchaseData API를 호출하여 JSON 형태로 반환
*
* @param vo 스탬프 조회 조건
* @return ResponseEntity<Map<String, Object>>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/getStampHistoryData", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String, Object>> getStampHistoryData(@RequestBody PurstmpVO vo, HttpSession session) {
log.debug("getStampHistoryData PurstmpVO chk ::: {}", vo);
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectStampAndPurchaseData", vo),
result -> {
Map<String, Object> response = new HashMap<>();
response.put("success", true);
response.put("data", result);
return ResponseEntity.ok(response);
}
);
}
}

View File

@@ -0,0 +1,38 @@
package com.wb.domainserver.domain.sopmal.bnft.purstmp.vo;
import lombok.Data;
import java.util.Date;
@Data
public class PurstmpVO {
/** 혜택 설정 고유번호 */
private String bnfInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 매장고유번호 */
private String strInnb;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 구매식별 고유번호 */
private Long purchsInnb;
/** 구매금액 */
private Double purchsAmt;
/** 적립 스탬프 수 */
private Integer stmpCnt;
/** 등록일시 */
private Date registDt;
/** 혜택 교환권 고유번호 */
private Long bnfExtiketInnb;
/** 교환권 스탬프 수 */
private Integer extiketStmpCnt;
/** 교환여부 */
private String exchngAt;
/** 교환일시 */
private Date exchngDt;
/** 사용여부 */
private String useAt;
}

View File

@@ -0,0 +1,89 @@
package com.wb.domainserver.domain.sopmal.bnft.qrevnt.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.wb.domainserver.domain.sopmal.bnft.qrevnt.vo.QREvntVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class QREvntController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* QR 이벤트 메인 화면 (통합)
* - 일반 접근과 딥링크 진입 모두 처리
* - QR 링크 접속 시 자동 참여 처리
*
* @param vo QR 이벤트 처리를 위한 VO
* @param model ModelMap
* @return String 화면 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = {"/qrEventMain", "/rewardProc"}, method = RequestMethod.GET)
public String qrEventMain(QREvntVO vo, ModelMap model) {
log.info("=== QR 이벤트 화면 진입 ===");
log.info("요청 파라미터: {}", vo);
try {
// QR이벤트 통합 처리 (정보 조회 + 자동 참여)
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/processQREventAccess", vo),
model,
"qrEventData"
);
// VO 정보를 모델에 추가 (JS에서 사용)
model.addAttribute("vo", vo);
log.debug("QR 이벤트 ModelMap content: {}", model);
} catch (Exception e) {
log.error("QR 이벤트 처리 중 오류 발생", e);
model.addAttribute("errorMessage", "이벤트 정보 조회 중 오류가 발생했습니다.");
}
return "sopmal_m/bnft/qrevnt/QREvntMain";
}
/**
* QR이벤트 당첨 정보 상세 조회 (AJAX)
*
* @param vo QREvntVO
* @return ResponseEntity<Map<String, Object>>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/getWinningDetail", method = RequestMethod.POST)
public ResponseEntity<Map<String, Object>> getWinningDetail(@RequestBody QREvntVO vo) {
Map<String, Object> winningDetail = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectWinningDetail", vo)
);
return ResponseEntity.status(HttpStatus.OK).body(winningDetail);
}
}

View File

@@ -0,0 +1,129 @@
package com.wb.domainserver.domain.sopmal.bnft.qrevnt.vo;
import lombok.Data;
import java.sql.Date;
@Data
public class QREvntVO {
/** 혜택 설정 고유번호 */
private String bnfInnb;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 혜택 제목 */
private String bnfSj;
/** 사용 여부 */
private String useAt;
/** 진행기간 시작일시 */
private String bnfBgnDt;
/** 진행기간 종료일시 */
private String bnfEndDt;
/** 화면 대표 이미지 */
private String scrReprsntImg;
/** 화면 대표 이미지명 */
private String scrReprsntImgNm;
/** 화면 대표 링크 URL */
private String scrReprsntLinkUrl;
/** 화면 보상 이미지 */
private String scrRwdImg;
/** 화면 보상 이미지명 */
private String scrRwdImgNm;
/** 화면 보상 링크 URL */
private String scrRwdLinkUrl;
/** 혜택 안내 */
private String bnfWordsCn;
/** 회원 고유번호 */
private int mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 매장 고유번호 */
private Long strInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 참여 일시 */
private String bnfPrtDt;
/** 혜택 보상수령 고유번호 */
private Long bnfRcvInnb;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 마일리지 보상 금액 */
private Double mlgRwdAmt;
/** 쿠폰 고유번호 */
private Long couponInnb;
/** 상품 고유번호 */
private Long goodsInnb;
/** 표시명 */
private String itmNm;
/** 당첨수량 */
private Integer przwinQy;
/** 당첨확률 */
private Double przwinPrc;
/** QR 코드 */
private String qrCd;
/** 매장명 */
private String strNm;
/** 매장 주소 */
private String strAdres;
/** 매장 도로명 주소 */
private String strRnmAdres;
/** 매장 전화번호 */
private String strTelnb;
/** 시도 */
private String ctyDo;
/** 시군구 */
private String ctyGunGu;
/** 쿠폰명 */
private String couponNm;
/** 쿠폰번호 */
private String couponNb;
/** 사용유효기간유형 */
private String useValidTermTy;
/** 사용유효기간일수 */
private Integer useValidTermDaycnt;
/** 사용유효시작일 */
private String useValidBgnDt;
/** 사용유효종료일 */
private String useValidEndDt;
/** 사용조건내용 */
private String useCndtnCn;
/** 유효기간 (날짜+시간) */
private String expiryDateTime;
/** 참여 여부 */
private boolean isParticipated;
/** 당첨 여부 */
private boolean isWinner;
/** 참여 횟수 */
private Integer participationCount;
/** 전체 참여 횟수 */
private Integer totalParticipationCount;
/** 안내문 1 */
private String wordsCn1;
/** 안내문 2 */
private String wordsCn2;
/** 안내문 3 */
private String wordsCn3;
/** 등록자 */
private int regusr;
/** 등록일시 */
private Date registDt;
/** 수정자 */
private int updusr;
/** 수정일시 */
private Date updtDt;
/** 요청 페이지 구분 */
private String reqPageDv;
}

View File

@@ -0,0 +1,145 @@
package com.wb.domainserver.domain.sopmal.bnft.rougame.controller;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.bnft.rougame.vo.RougameVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.BoResultMapConverter;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Mono;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class RougameController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 룰렛 게임 메인 화면
*
* @param model
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/rougameMain")
public String rougameMain(ModelMap model, RougameVO vo, HttpSession session) {
log.debug("Initial bnfDvCd value: {}", vo.getBnfDvCd());
// 혜택 화면 설정 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectRougameBenefitInfo", vo),
model,
"screenInfo"
);
// 남은 게임 참여 기회 횟수 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectRemainingGameChances", vo),
model,
"remainingChancesInfo"
);
log.debug("ModelMap content: {}", model);
return "sopmal_m/bnft/rougame/Rougame";
}
/**
* 룰렛 게임 참여
*
* @param vo
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/playRougame", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> playRoulette(@RequestBody RougameVO vo, HttpSession session) {
log.debug("saveAlarmSettings RougameVO chk ::: {}", vo);
// 참여 가능 여부 확인
Map<String, Object> participationCountInfo = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectRemainingGameChances", vo)
);
int remainingChances = (int) participationCountInfo.get("remainingGameChances");
if (remainingChances <= 0) {
return ResponseEntity.status(HttpStatus.OK)
.body(WnbtResponse.builder().resBody(new WnbtResponseBody(0)).build());
}
// 룰렛 결과 계산 및 참여 로직
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/calculateRouletteResult", vo),
ReplyFromResrc::getReply
);
}
/**
* 룰렛 게임 확률 계산
*
* @param vo
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/calculateRouletteResult", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> calculateRouletteResult(@RequestBody RougameVO vo, HttpSession session) {
log.debug("calculateRouletteResult RougameVO chk ::: {}", vo);
// 룰렛 게임 확률 계산 API 호출
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/calculateRouletteResult", vo),
ReplyFromResrc::getReply
);
}
/**
* 지급 가능한 보상이 있는지 확인
*
* @param vo
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/checkRewardAvailability", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> checkRewardAvailability(@RequestBody RougameVO vo) {
log.debug("checkRewardAvailability RougameVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/checkRewardAvailability", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,82 @@
package com.wb.domainserver.domain.sopmal.bnft.rougame.vo;
import java.sql.Date;
import lombok.Data;
@Data
public class RougameVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 사용 여부 */
private String useAt;
/** 진행기간 시작일시 */
private String bnfBgnDt;
/** 진행기간 종료일시 */
private String bnfEndDt;
/** 충전 필요 금액 */
private String amtForChg;
/** 등록자 */
private int regusr;
/** 등록일시 */
private Date registDt;
/** 수정자 */
private int updusr;
/** 수정일시 */
private Date updtDt;
/** 회원 고유번호 */
private Long mbrInnb;
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 보상수령 고유번호 */
private Long bnfRcvInnb;
/** 혜택 참여 일시 */
private String bnfPrtDt;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 참여 내용 1 */
private String prtCont1;
/** 참여 내용 2 */
private String prtCont2;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 요청 페이지 구분 */
private String reqPageDv;
/** 참여 횟수 */
private Integer currentMonthParticipationCount;
/** 누적 참여 마일리지 */
private Double totalParticipationMileage;
/** 대표 이미지 */
private String reprsntImg;
/** 대표 링크 URL */
private String reprsntLinkUrl;
/** 보상 이미지 */
private String rewardImg;
/** 보상 링크 URL */
private String rewardLinkUrl;
/** 혜택 문구 */
private String bnfWordsCn;
/** 참여 일자 목록 */
private String participationDays;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 마일리지 */
private Double mlgRwdAmt;
/** 쿠폰 고유번호 */
private Long couponInnb;
/** 상품 고유번호 */
private Long goodsInnb;
/** 남은 게임 참여 기회 횟수 */
private Integer remainingGameChances;
/** 아이템 이름 */
private String ItmNm;
/** 참여 대상 고유번호 */
private String prtTargetInnb;
/** 참여 대상 내용 */
private String prtTargetCn;
}

View File

@@ -0,0 +1,421 @@
package com.wb.domainserver.domain.sopmal.bnft.stepcnt.controller;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.bnft.stepcnt.vo.StepcntVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.BoResultMapConverter;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/sopmal/bnft")
public class StepcntController {
@Autowired
WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 만보기 메인 화면
*
* @param model ModelMap 객체
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 뷰 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/stepcntMain")
public String stepcntMain(ModelMap model, StepcntVO vo, HttpSession session) {
log.debug("stepcntMain StepcntVO chk ::: {}", vo);
// 만보기 혜택 기본 정보조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectStepcntBenefitInfo", vo),
model,
"stepcntInfo"
);
log.debug("stepcntMain ModelMap content: {}", model);
// stepcntInfo의 baseInfo에서 bnfInnb 값을 가져와서 세션에 저장
if (model.containsAttribute("stepcntInfo")) {
Map<String, Object> stepcntInfo = (Map<String, Object>) model.getAttribute("stepcntInfo");
if (stepcntInfo != null && stepcntInfo.containsKey("baseInfo")) {
Map<String, Object> baseInfo = (Map<String, Object>) stepcntInfo.get("baseInfo");
if (baseInfo != null && baseInfo.containsKey("bnfInnb")) {
Object bnfInnbObj = baseInfo.get("bnfInnb");
if (bnfInnbObj != null) {
Long bnfInnb = Long.valueOf(bnfInnbObj.toString());
session.setAttribute("bnfInnb", bnfInnb);
log.debug("baseInfo에서 bnfInnb 값을 세션에 저장: {}", bnfInnb);
}
}
}
}
return "sopmal_m/bnft/stepcnt/Stepcnt";
}
/**
* 만보기 혜택 동의 상태 저장/업데이트
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 처리 결과를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertStepcntAgreement", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertStepcntAgreement(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("insertStepcntAgreement StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/insertStepcntAgreement", vo),
ReplyFromResrc::getReply
);
}
/**
* 걸음 수 데이터 저장
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 처리 결과를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/saveStepCount", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> saveStepCount(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("saveStepCount StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/saveStepCount", vo),
ReplyFromResrc::getReply
);
}
/**
* 이번 달 만보 달성 현황 화면
*
* @param model ModelMap 객체
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 뷰 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/stepcntMonthlyView")
public String stepcntMonthlyView(ModelMap model, StepcntVO vo, HttpSession session) {
log.debug("stepcntMonthlyView StepcntVO chk ::: {}", vo);
// 이번 달 만보 달성 횟수 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getMonthlySuccessCount", vo),
model,
"monthlySuccessCount"
);
// 월별 걸음 수 데이터 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getMonthlyStepData", vo),
model,
"monthlyStepData"
);
log.debug("stepcntMonthlyView ModelMap content: {}", model);
return "sopmal_m/bnft/stepcnt/StepcntMonthlyView";
}
/**
* 이번 달 만보 달성 횟수 조회 (AJAX용)
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 달성 횟수 정보를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/getMonthlySuccessCount", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> getMonthlySuccessCount(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("getMonthlySuccessCount StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getMonthlySuccessCount", vo),
ReplyFromResrc::getReply
);
}
/**
* 월별 걸음 수 데이터 조회 (AJAX용)
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 월별 걸음 수 데이터를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/getMonthlyStepData", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> getMonthlyStepData(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("getMonthlyStepData StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getMonthlyStepData", vo),
ReplyFromResrc::getReply
);
}
/**
* 마일리지 및 보상 요약 화면
*
* @param model ModelMap 객체
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 뷰 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/stepcntRewardSummary")
public String stepcntRewardSummary(ModelMap model, StepcntVO vo, HttpSession session) {
log.debug("stepcntRewardSummary StepcntVO chk ::: {}", vo);
// 이번 달 마일리지 획득 현황 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getCurrentMonthMileageSum", vo),
model,
"mileageInfo"
);
// 이번 달 깜짝선물 수령 횟수 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getMonthlyGiftReceiptCount", vo),
model,
"giftInfo"
);
log.debug("stepcntRewardSummary ModelMap content: {}", model);
return "sopmal_m/bnft/stepcnt/StepcntRewardSummary";
}
/**
* 이번 달 마일리지 획득 현황 조회 (AJAX용)
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 마일리지 획득 현황을 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/getCurrentMonthMileageSum", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> getCurrentMonthMileageSum(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("getCurrentMonthMileageSum StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getCurrentMonthMileageSum", vo),
ReplyFromResrc::getReply
);
}
/**
* 깜짝선물 화면
*
* @param model ModelMap 객체
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 뷰 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/stepcntSurpriseGift")
public String stepcntSurpriseGift(ModelMap model, StepcntVO vo, HttpSession session) {
log.debug("stepcntSurpriseGift StepcntVO chk ::: {}", vo);
// 오늘의 깜짝선물 보상 조건 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/getTodayGiftRewardStepCondition", vo),
model,
"giftCondition"
);
// 현재 걸음 수 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectStepcntBenefitInfo", vo),
model,
"currentStepInfo"
);
log.debug("stepcntSurpriseGift ModelMap content: {}", model);
return "sopmal_m/bnft/stepcnt/StepcntSurpriseGift";
}
/**
* 깜짝선물 수령
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 수령 결과를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/receiveGift", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> receiveGift(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("receiveGift StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/receiveGift", vo),
ReplyFromResrc::getReply
);
}
/**
* 마일리지 수령
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 수령 결과를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/receiveMileage", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> receiveMileage(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("receiveMileage StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/receiveMileage", vo),
ReplyFromResrc::getReply
);
}
/**
* 만보기 서비스 정보 조회 (AJAX용)
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 만보기 서비스 정보를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectStepcntBenefitInfo", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> selectStepcntBenefitInfo(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("selectStepcntBenefitInfo StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectStepcntBenefitInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 만보기 세팅팅 화면
*
* @param model ModelMap 객체
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 뷰 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/stepcntSettings")
public String stepcntSettings(ModelMap model, StepcntVO vo) {
// BNF_INNB 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectBnfInnb", vo),
model,
"bnfInnb"
);
return "sopmal_m/bnft/stepcnt/StepcntSettings";
}
/**
* 만보기 참여 안내 조회(AJAX용)
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 만보기 참여 안내를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectStepcntGuide", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> selectStepcntGuide(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("selectStepcntGuide StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/selectStepcntGuide", vo),
ReplyFromResrc::getReply
);
}
/**
* 만보기 동의 상태 확인 (AJAX용)
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 동의 상태 정보를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/checkCurrentStepcntAgreement", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> checkCurrentStepcntAgreement(@Validated @RequestBody StepcntVO vo, HttpSession session) {
log.debug("checkCurrentStepcntAgreement StepcntVO chk ::: {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/checkCurrentStepcntAgreement", vo),
ReplyFromResrc::getReply
);
}
/**
* 만보기 혜택 동의 상태 저장/업데이트
*
* @param vo StepcntVO 객체
* @param session HttpSession 객체
* @return 처리 결과를 포함한 응답
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateStepcntAgreement", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateStepcntAgreement(@Validated @RequestBody StepcntVO vo, HttpSession session) {
long bnfInnb = (long) session.getAttribute("bnfInnb");
vo.setBnfInnb(bnfInnb);
log.debug("updateStepcntAgreement StepcntVO chk ::: {}", vo);
log.debug("updateStepcntAgreement 요청 전송: {}", vo);
ResponseEntity<WnbtResponse> response = responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/insertStepcntAgreement", vo),
ReplyFromResrc::getReply
);
log.debug("updateStepcntAgreement 응답 결과: {}", response.getBody());
return response;
}
}

View File

@@ -0,0 +1,94 @@
package com.wb.domainserver.domain.sopmal.bnft.stepcnt.vo;
import java.math.BigDecimal;
import java.sql.Date;
import lombok.Data;
@Data
public class StepcntVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 혜택 제목 */
private String bnfSj;
/** 화면 대표 이미지 */
private String scrReprsntImg;
/** 화면 대표 링크 URL */
private String scrReprsntLinkUrl;
/** 화면 보상 이미지 */
private String scrRwdImg;
/** 화면 보상 링크 URL */
private String scrRwdLinkUrl;
/** 혜택 안내 */
private String bnfWordsCn;
/** 진행기간 시작일시 */
private String bnfBgnDt;
/** 진행기간 종료일시 */
private String bnfEndDt;
/** 사용 여부 */
private String useAt;
/** 충전 필요 금액 */
private String amtForChg;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 마일리지 금액 */
private BigDecimal mlgRwdAmt;
/** 쿠폰 고유번호 */
private Long couponInnb;
/** 표시명 */
private String itmNm;
/** 당첨 수량 */
private Integer przwinQy;
/** 당첨 확률 */
private BigDecimal przwinPrc;
/** 할인 금액 */
private BigDecimal dscntAmt;
/** 할인 비율 */
private BigDecimal dscntRt;
/** 보상 조건 횟수 */
private Integer rwdCndCnt;
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 참여 일시 */
private Date bnfPrtDt;
/** 회원 고유번호 */
private Long mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 참여 대상 내용 */
private String prtTargetCn;
/** 혜택 보상 수령 고유번호 */
private Long bnfRcvInnb;
/** 상품 고유번호 */
private Long goodsInnb;
/** 혜택 동의 고유번호 */
private Long bnfAgreInnb;
/** 혜택 동의 구분 코드 */
private String bnfAgreDvCd;
/** 동의 여부 */
private String agreeYn;
/** 걸음 수 */
private Integer stepCount;
/** 총 걸음 수 */
private Integer totalSteps;
/** 등록자 */
private Integer regUsr;
/** 등록일시 */
private Date registDt;
/** 수정자 */
private Integer updUsr;
/** 수정일시 */
private Date updtDt;
/** 걸음 수 데이터 */
private Integer stepCnt;
/** 년월 */
private String yearMonth;
}

View File

@@ -0,0 +1,897 @@
package com.wb.domainserver.domain.sopmal.csc.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.csc.vo.CmVO;
import com.wb.domainserver.domain.sopmal.csc.vo.GnrlBbscttVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.*;
import com.wb.domainserver.util.cookie.CookieUtil;
import com.wb.domainserver.util.file.service.FileStorageService;
import com.wb.domainserver.util.string.StringUtil;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 고객센터 사용자 controller
* @author 개발자 성명을 입력해주세요.
* @since 2024-03-06
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-06 김혜인. 최초 생성
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/sopmal/csc")
public class CscController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/** 파일 업로드 */
@Autowired
private FileStorageService filestore;
/************************************************************
고객센터 목록 폼
* **********************************************************/
/**
* 모바일 고객센터 메인
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCscMainForm")
public String selectCscMainForm(HttpServletRequest request, ModelMap model, GnrlBbscttVO bbsctt) {
bbsctt.setServerDv("sopmal");
//공지사항과 자주묻는 질문 게시글 조회 , 고객센터 정보 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOCscMainForm", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request) + "/csc/CscMain";
}
/**
* 모바일 인피니티 스크롤 리스트 조회
* @param bbsctt
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectAjaxListInqire")
public ResponseEntity<?> selectAjaxListInqire(GnrlBbscttVO bbsctt) {
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 공지사항,FAQ (고객센터 사이드 O)
*
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCscListForm")
public String selectCscListForm(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqireForm", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/CscListRForm";
}
/**
* 이벤트, 매거진, 일반게시판 (고객센터 사이드 X)
*
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectSubPageListForm")
public String selectSubPageListForm(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqireForm", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/SubPageListRForm";
}
/************************************************************
게시글 목록
* **********************************************************/
/**공지사항 목록 조회
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectNoticeListInqire")
public String selectNoticeListInqire(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/NoticeListR";
}
/**FAQ 목록 조회
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectFaqListInqire")
public String selectFaqListInqire(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"resultMap"
);
model.addAttribute("pageIndex", bbsctt.getPageIndex());
return Util.getDeviceType(request)+"/csc/FaqListR";
}
/**이벤트 목록 조회
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectEvtListInqire")
public String selectEvtListInqire(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/EvtListR";
}
/**이벤트 결과
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectEvtResultListInqire")
public String selectEvtResultListInqire(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/EvtResultListR";
}
/**매거진
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectMgznListInqire")
public String selectMgznListInqire(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/MgznListR";
}
/************************************************************
일반 게시글 > 리스트형,갤러리형,아코디언형 목록
* **********************************************************/
/**리스트형 목록
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCscListTy")
public String selectCscListTySrch(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/CscListTyR";
}
/**아코디언형 목록
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCscAcordionTy")
public String selectCscAcordionTySrch(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/CscAcordionTyR";
}
/**갤러리형 목록
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCscGalaryTy")
public String selectCscGalaryTySrch(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/CscGalaryTyR";
}
/************************************************************
게시글 목록 메소드
* **********************************************************/
/**
* 게시글 비밀번호 조회
* @param bbsctt 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbscttComparPassword" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> selectBbscttComparPassword(GnrlBbscttVO bbsctt){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttComparPassword", bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 게시글 추천,비추천
* @param bbsctt 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBbscttRecomendUpdt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateBbscttRecomendUpdt( GnrlBbscttVO bbsctt){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttRecomendUpdt", bbsctt),
ReplyFromResrc::getReply
);
}
/************************************************************
게시글 상세
* **********************************************************/
/**게시글 상세 조회
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBbscttDtlInqire")
public String selectBbscttDtlInqire(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt) {
bbsctt.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttDtlSopmalInqirePopup", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/BbscttDtlR";
}
/**아코디언형 상세 조회
* @param bbsctt
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBbscttCn")
public ResponseEntity<?> selectBbscttCn(GnrlBbscttVO bbsctt) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttCn", bbsctt),
ReplyFromResrc::getReply
);
}
/************************************************************
이용안내
***********************************************************/
/**이용안내 조회 폼
* @param model,bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectUseGuidanceForm")
public String selectUseGuidanceForm(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt) {
bbsctt.setServerDv("sopmal");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqireForm", bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/UseGuidanceR";
}
/**이용안내 조회
* @param bbsctt
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectUseGuidanceInqire")
public ResponseEntity<?> selectUseGuidanceInqire(GnrlBbscttVO bbsctt) {
//게시글 노출 항목 설정값과 게시판 목록 조회
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOUseGuidanceCn", bbsctt),
ReplyFromResrc::getReply
);
}
/*******************************************************************************
* 댓글 서비스 시작
*********************************************************************************/
/**
* 댓글 조회
* @param vo 파라미터 vo
* @param model
* @return GnrlBbscttDtlPopupR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmList")
public String selectCmList(HttpServletRequest request, ModelMap model ,CmVO vo){
vo.setReqPageDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/selectBOCmList", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/CmListR";
}
/**
* 댓글 조회 ajax
* @param vo 파라미터 vo
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmListAjax")
public ResponseEntity<WnbtResponse> selectCmListAjax(CmVO vo){
vo.setReqPageDv("sopmal");
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/selectBOCmList", vo),
ReplyFromResrc::getReply
);
}
/**
* 댓글 내용 조회(비밀댓글 일시)
* @param cm 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmRegusrCnfirm")
public ResponseEntity<WnbtResponse> selectCmRegusrCnfirm(CmVO cm){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/selectBOCmRegusrCnfirm", cm),
ReplyFromResrc::getReply
);
}
/**
* 댓글 등록
* @param cm 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertBbscttCmRegist")
public ResponseEntity<WnbtResponse> insertBbscttCmRegist(HttpServletRequest request , @Validated CmVO cm, BindingResult bindingResult){
List<Map<String, String>> errorList = new ArrayList<>();
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}else if(true) {
//작성자구분이 99 이고 비밀번호 없을 시
if("99".equals(cm.getRegusrDvCd())) {
if(StringUtil.isEmpty(cm.getPassword())){
errorList.add(ValidateResultConverter.setErrorMap("password", gconeMessageSource.getMessage("errors.required", new Object[]{"비밀번호"})));
}
}
}
if(errorList != null && errorList.size() > 0) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
cm.setReqPageDv("sopmal");
//ip주소 get
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = (String) req.get("XForwardedFor");
cm.setIp(ip);
String agentId = "";
// 쿠키를 가져옴
Cookie[] cookies = request.getCookies();
//gc_agent_id 쿠키 있을 경우 가져옴
if (CookieUtil.hasAgentCookie(request.getCookies())) {
agentId = CookieUtil.getAgentCookieValue(request.getCookies());
cm.setAgentId(agentId);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/insertBOCmRegist", cm),
ReplyFromResrc::getReply
);
}
/**
* 댓글 수정
* @param cm 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBbscttCmUpdt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateBbscttCmUpdt(@Validated CmVO cm, BindingResult bindingResult){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
cm.setReqPageDv("sopmal");
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/updateBOCmUpdt", cm),
ReplyFromResrc::getReply
);
}
/**
* 댓글 논리 삭제
* @param cm 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteBbscttCmDel" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteBbscttCmDel(CmVO cm, BindingResult bindingResult){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
cm.setReqPageDv("sopmal");
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/deleteBOCmDel", cm),
ReplyFromResrc::getReply
);
}
/**
* 댓글 비밀번호 조회
* @param cm 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectComparPassword" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> selectComparPassword(CmVO cm){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/selectBOComparPassword", cm),
ReplyFromResrc::getReply
);
}
/**
* 댓글 추천,비추천
* @param cm 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateCmRecomendUpdt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateCmRecomendUpdt(CmVO cm){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/updateBOCmRecomendUpdt", cm),
ReplyFromResrc::getReply
);
}
/*******************************************************************************
* 게시글 등록 서비스 시작
*********************************************************************************/
/**
* 게시글 작성 등록 폼 페이지 이동
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBbscttRegistForm")
public String selectBbscttRegistForm(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttRegistPopupForm",bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/BbscttRegistC";
}
/**
* 게시글 작성 등록 폼 모달
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBbscttRegistPopupForm")
public String selectBbscttRegistPopupForm(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//BO에서 API 호출
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttRegistPopupForm",bbsctt)
);
model.addAttribute("resultMap", resultMap);
model.addAttribute("bbscttVO", resultMap);
return Util.getDeviceType(request)+"/csc/BbscttRegistPopupC";
}
/**
* 게시글 등록
*
* @param bbscttVO 파라미터 vo
* @param bindingResult
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertBbscttRegist", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertBbscttRegist(HttpServletRequest request, @Validated GnrlBbscttVO bbscttVO, BindingResult bindingResult) {
/*bbsTyCD가 리뷰혹은 한달리뷰인경우*/
if ("06".equals(bbscttVO.getBbsTyCd()) || "07".equals(bbscttVO.getBbsTyCd())) {
bbscttVO.setRvwBbscttDv("rvw");
}
List<Map<String, String>> errorList = new ArrayList<>();
//validation체크
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
} else if (true) {
//작성자가 비회원일때 비밀번호 없을 시
if ("99".equals(bbscttVO.getRegusrDvCd())) {
if (StringUtil.isEmpty(bbscttVO.getPassword())) {
errorList.add(ValidateResultConverter.setErrorMap("password", gconeMessageSource.getMessage("errors.required", new Object[]{"비밀번호"})));
}
}
//필수 입력 여부설정이 Y 이고 입력 여부가 N일 시 validation 체크(추가입력항목,입력항목)
if (bbscttVO.getQesitmEssntlAtArr() != null) {
for (int idx = 0; idx < bbscttVO.getQesitmEssntlAtArr().length; idx++) {
if ("Y".equals(bbscttVO.getQesitmEssntlAtArr()[idx]) && "N".equals(bbscttVO.getQesitmAtArr()[idx])) {
errorList.add(ValidateResultConverter.setErrorMap("answCnArr", gconeMessageSource.getMessage("errors.required", new Object[]{bbscttVO.getQesitmNmArr()[idx]})));
}
}
}
/*한달리뷰 작성시 사진첨부 안할경우 validation 체크됨*/
if ("goods_review_month".equals(bbscttVO.getBbsId())) {
if ("N".equals(bbscttVO.getFilExtAt())) {
errorList.add(ValidateResultConverter.setErrorMap("files", gconeMessageSource.getMessage("errors.required", new Object[]{"사진첨부"})));
}
}
}
if (!CollectionUtils.isEmpty(errorList)) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
/*에이전트 get*/
String agentId = "";
// 쿠키를 가져옴
Cookie[] cookies = request.getCookies();
//gc_agent_id 쿠키 있을 경우 가져옴
if (CookieUtil.hasAgentCookie(request.getCookies())) {
agentId = CookieUtil.getAgentCookieValue(request.getCookies());
bbscttVO.setAgentId(agentId);
}
//ip주소 get
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = (String) req.get("XForwardedFor");
bbscttVO.setIp(ip);
/*서버구분 set*/
bbscttVO.setServerDv("sopmal");
bbscttVO.setExpsrAt("Y");
//파일 경로 설정
String sopmalCd = bbscttVO.getSopmalCd();
if(bbscttVO.getSopmalCd().isEmpty()){
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
sopmalCd = user.getSopmalCd();
}
if (StringUtil.isEmpty(sopmalCd)) {
log.info("게시글 등록 쇼핑몰 코드 누락 됌!!!!!!! : {}", sopmalCd);
}
request.setAttribute("shopCd", sopmalCd);
request.setAttribute("pathGubun", "BDIG");//게시판 일반첨부파일 구분
request.setAttribute("subPathId", bbscttVO.getBbsId()); //게시판일 경우에만 셋팅
request.setAttribute("validExp", bbscttVO.getAcceptFileExtensions()); //게시판 중 BDFL 일경우만 셋팅
//파일 업로드
if ("Y".equals(bbscttVO.getFilAtch())) {
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
ulpladFileMap = filestore.fileUpload(request);
bbscttVO.setFileInfo(ulpladFileMap);
bbscttVO.setFilDvCd("01");
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/insertBOBbscttRegist", bbscttVO),
ReplyFromResrc::getReply
);
}
/**
* 게시글 수정 폼 페이지 이동
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectBbscttUpdtForm")
public String selectBbscttUpdtForm(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttUpdtPopupForm",bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/BbscttUpdtU";
}
/**
* 게시글 수정 폼 팝업 이동
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectBbscttUpdtPopupForm")
public String selectBbscttUpdtPopupForm(HttpServletRequest request, ModelMap model , GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttUpdtPopupForm",bbsctt),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/csc/BbscttUpdtPopupU";
}
/**
* 게시글 수정
* @param bbsctt
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateBbscttupdt" , method = RequestMethod.POST)
public ResponseEntity<?> updateBbscttupdt(HttpServletRequest request, @Validated GnrlBbscttVO bbsctt, BindingResult bindingResult) {
List<Map<String, String>> errorList = new ArrayList<>();
//validation체크
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
} else if (true) {
//작성자가 비회원일때 비밀번호 없을 시
if("99".equals(bbsctt.getRegusrDvCd()) ) {
if(StringUtil.isEmpty(bbsctt.getPassword())){
errorList.add(ValidateResultConverter.setErrorMap("password", gconeMessageSource.getMessage("errors.required", new Object[]{"비밀번호"})));
}
}
//필수 입력 여부설정이 Y 이고 입력 여부가 N일 시 validation 체크(추가입력항목,입력항목)
if (bbsctt.getQesitmEssntlAtArr() != null) {
for (int idx = 0; idx < bbsctt.getQesitmEssntlAtArr().length; idx++) {
if ("Y".equals(bbsctt.getQesitmEssntlAtArr()[idx]) && "N".equals(bbsctt.getQesitmAtArr()[idx])) {
errorList.add(ValidateResultConverter.setErrorMap("answCnArr", gconeMessageSource.getMessage("errors.required", new Object[]{bbsctt.getQesitmNmArr()[idx]})));
}
}
}
}
if (errorList != null
&& errorList.size() > 0) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
/*에이전트 get*/
String agentId = "";
// 쿠키를 가져옴
Cookie[] cookies = request.getCookies();
//gc_agent_id 쿠키 있을 경우 가져옴
if (CookieUtil.hasAgentCookie(request.getCookies())) {
agentId = CookieUtil.getAgentCookieValue(request.getCookies());
bbsctt.setAgentId(agentId);
}
//ip주소 get
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = (String) req.get("XForwardedFor");
bbsctt.setIp(ip);
//사용자 서버구분
bbsctt.setServerDv("sopmal");
//사용자 게시글은 항시 상시 노출
bbsctt.setExpsrAt("Y");
//파일 경로 설정
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
request.setAttribute("shopCd", user.getSopmalCd());
request.setAttribute("pathGubun", "BDIG");//게시판 일반첨부파일 구분
request.setAttribute("subPathId", bbsctt.getBbsId()); //게시판일 경우에만 셋팅
request.setAttribute("validExp", bbsctt.getAcceptFileExtensions()); //게시판 중 BDFL 일경우만 셋팅
if ("Y".equals(bbsctt.getFilAtch())) {
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
ulpladFileMap = filestore.fileUpload(request);
bbsctt.setFileInfo(ulpladFileMap);
bbsctt.setFilDvCd("01");
}
//BO에서 API 호출
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttUpdt",bbsctt),
ReplyFromResrc::getReply
);
}
/**ㄴ
* 게시글 삭제
* @param bbsctt
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/deleteBbscttDel" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteBbscttDel(GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//BO에서 API 호출
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttDel",bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 게시글 권한 체크 및 상세 조회
* @param request
* @param model
* @param seq
* @param bbsId
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = {"/selectBbscttAuth", "/selectBbscttAuth/{seq}/{bbsId}"})
public String selectBbscttAuth(HttpServletRequest request,
ModelMap model,
GnrlBbscttVO bbsctt) {
bbsctt.setServerDv("sopmal");
// seq와 bbsId가 있는 경우 설정
if (bbsctt.getAuthDv() == null) {
// 기본 설정
bbsctt.setPageIndex(1);
bbsctt.setUseAt("Y");
bbsctt.setExpsrAt("Y");
bbsctt.setReqUrl("subPage");
bbsctt.setAuthDv("CM");
// 외부 API 호출 및 처리
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOBbscttSetupInfo",bbsctt)
);
if (resultMap != null && resultMap.containsKey("bbsTyCd")) {
bbsctt.setBbsTyCd((String) resultMap.get("bbsTyCd"));
}
}
// 권한 체크 로직 호출
String url = selectAuth(request, model, bbsctt);
return url;
}
/*권한체크 공통*/
public String selectAuth (HttpServletRequest request,ModelMap model,GnrlBbscttVO bbsctt) {
//BO에서 API 호출
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttAuth",bbsctt)
);
bbsctt.setAuthResult((String) resultMap.get("resultAuth"));
bbsctt.setBbsNm((String) resultMap.get("bbsNm"));
String url = null;
if ("Y".equals(bbsctt.getAuthResult())) {
if ("REDNG".equals(bbsctt.getAuthDv())) {//목록 이동
if ("csc".equals(bbsctt.getReqUrl())) {
url = this.selectCscListForm(request, model, bbsctt); //고객센터
} else if ("subPage".equals(bbsctt.getReqUrl())) {
url = this.selectSubPageListForm(request, model, bbsctt); //서브페이지
} else if ("useGuidance".equals(bbsctt.getReqUrl())) {
url = this.selectUseGuidanceForm(request, model, bbsctt); //이용안내
}
} else if ("REGIST".equals(bbsctt.getAuthDv())) { //등록 이동
if ("modal".equals(bbsctt.getReqUrl())) {
url = this.selectBbscttRegistPopupForm(request, model, bbsctt);//등록팝업
} else {
url = this.selectBbscttRegistForm(request, model, bbsctt);//등록페이지
}
} else if ("CM".equals(bbsctt.getAuthDv())) { //상세 이동(댓글 권한이 있는)
url = this.selectBbscttDtlInqire(request, model, bbsctt);
}
} else if ("N".equals(bbsctt.getAuthResult()) || "NN".equals(bbsctt.getAuthResult())) {
if ("CM".equals(bbsctt.getAuthDv())) { //상세 이동(댓글 권한이 없는)
url = this.selectBbscttDtlInqire(request, model, bbsctt);
} else {
model.addAttribute("bbscttVO", bbsctt);
url = Util.getDeviceType(request) + "/csc/RejectAuthR";//기능 권한 거부 안내 페이지 이동
}
} else {//비회원 회원전환
if (!"modal".equals(bbsctt.getReqUrl())) {
String accessUri = request.getRequestURI()+"?"+request.getQueryString(); // 현재 요청된 URI
model.addAttribute("accessUrl",accessUri);
url = Util.getDeviceType(request) + "/mbr/UsrLoginR";
} else {
url = Util.getDeviceType(request) + "/goods/loginPopR";
}
}
return url;
}
/**
* 게시글 상세 이동 여부 판단
*
* @param bbsctt
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBbscttDtlMovePosblAt")
public ResponseEntity<WnbtResponse> selectBbscttDtlMovePosblAt(GnrlBbscttVO bbsctt) {
bbsctt.setServerDv("sopmal");
//BO에서 API 호출
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttDtlMovePosblAt", bbsctt),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,39 @@
package com.wb.domainserver.domain.sopmal.csc.controller;
import com.wb.domainserver.domain.sopmal.csc.vo.PromVO;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/sopmal/prom")
public class PromController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/promJoin", method = RequestMethod.POST)
public ResponseEntity<?> promJoin(HttpServletRequest request, @RequestBody PromVO promVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/prom/promJoin", promVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,72 @@
package com.wb.domainserver.domain.sopmal.csc.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class CmVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 댓글고유번호 */
private String cmInnb;
/** 게시글고유번호 */
private String bbscttInnb;
/** 게시판ID */
private String bbsId;
/** 부모댓글고유번호 */
private String parntsCmInnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 작성자ID */
private String regusrId;
/** 작성자명 */
@NotBlank(message = "작성자명")
@Length(min = 0, max = 25, message = "작성자명")
private String regusrNm;
/** DEPTH */
private Integer depth;
/** 내용 */
@NotBlank(message = "내용")
private String cn;
/** 비밀번호 */
private String password;
/** 비밀댓글여부 */
private String secretBbscttAt;
/** IP */
private String ip;
/** AGENT_ID */
private String agentId;
/** 사용여부 */
private String useAt;
/** 삭제작업자 */
private Integer delusr;
/**작성자 구분 코드*/
private String regusrDvCd;
/**쇼핑몰코드*/
private String sopmalCd;
/** 신규댓글 */
private String newAt;
/** 댓글삭제리스트 */
private String[] delCmInnbArr;
/*요청페이지구분 쇼핑몰인지 관리자인지*/
private String reqPageDv;
/*회원 구분 코드*/
private String mbrDvCd;
/*추천비추천구분*/
private String recomendDv;
/*비밀번호 확인 여부*/
private String pwCnfirmAt;
/*댓글 idx*/
private String cmIdx;
/*대댓글 idx*/
private String answCmIdx;
/*댓글 권한*/
private String authResult;
}

View File

@@ -0,0 +1,5 @@
package com.wb.domainserver.domain.sopmal.csc.vo;
public class CscVO {
}

View File

@@ -0,0 +1,419 @@
package com.wb.domainserver.domain.sopmal.csc.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import com.wb.domainserver.domain.sopmal.mpage.act.vo.BbsFormAnswVO;
import com.wb.domainserver.domain.sopmal.mpage.act.vo.BbsFormVO;
import com.wb.domainserver.domain.sopmal.mpage.act.vo.DelInfoVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class GnrlBbscttVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드 */
private String sopmalCd;
/**
* 리뷰정보 (fm_shop_goods)
*/
/** 게시글 고유정보 */
private Integer bbscttInnb;
private Integer seq;
/** 게시판 고유번호 */
private Integer bbsInnb;
/** 판매상품 고유번호 */
private Integer sleGoodsInnb;
/** 주문상품고유번호 */
private Integer ordrGoodsInnb;
/** 주문상품옵션고유번호 */
private Integer ordrGoodsOptnInnb;
/*주문고유번호*/
private String ordrInnb;
/** 주문상품옵션구분코드 */
private String ordrGoodsOptnDvCd;
/** 베스트여부 */
private String bstAt;
/** 등록 회원고유번호 */
private Integer mbrInnb;
/** (등록아이디) */
private String mbrid;
/** (등록자명) */
private String mbrNm;
/** 내용 */
@NotBlank(message = "내용")
private String cn;
/** 조회건수 */
private Integer inqireCnt;
/** 댓글건수 */
private Integer cmCnt;
/** (다중",") */
private Integer evlScore;
/** 평균점수 */
private Integer avrgScore;
/** 에디터 사용여부 */
private String editrUseAt;
/** 포토리뷰여부 */
private String photoRvwAt;
/** IP */
private String ip;
/** AGENT_ID */
private String agentId;
/** 삭제여부 */
private String delAt;
/** 삭제일시 */
private String delDt;
/** 노출등록자이름 */
private Integer expsrRegusrNm;
// 추가항목 정보(FM_BOARD_ADDITM)
private List<BbsFormVO> bbsFormVoList;
// 추가 답변 내용 (FM_BOARD_ADDITM)
private List<BbsFormAnswVO> bbsFormAnswList;
//게시글 정보 (FM_BOARDMANAGER)
/** 비밀글 사용여부 */
private Boolean secretBbcttUseAt;
// 상품정보 (fm_shop_goods)
/** 상품 이름 */
private String goodsNm;
/** 상품 설명 */
private String goodsDc;
/** 상품 간략설명 */
private String srtDc;
/** 상품 가격 */
private Integer slePric;
// 상품이미지 정보(fm_goods_image)
/** 상품 이미지 위치 */
private String img;
// 리뷰 댓글정보(fm_boardcomment)
/** 댓글 고유번호*/
private Integer cmInnb;
/** 댓글 등록자 구분 */
private String commetRegusrDv;
/** 댓글 작성자 */
private String commetMbrNm;
/** 댓글 작성자 아이디*/
private String commetmbrId;
/** 댓글 ip*/
private String commetIp;
/** 댓글 내용 */
private String commetCn;
/** 댓글 등록일 */
private String commetRegustDt;
// 검색조건
/** 검색어*/
private String searchWord;
/** 비밀글 제외 여부*/
private String serchSecrtBbscttUseAt;
/** 삭제글 제외 여부 */
private String serchDelAt;
/** 사진포함 여부*/
private String serchPhotoRvwAt;
/** 검색 시작일*/
private String saerchStatrDate;
/** 검색 종료일*/
private String saerchEndDate;
/** 세부항목 검색(내용 고유번호)*/
private String[] searchFormItm;
/** 베스트 후기 포함 여부*/
private String searchBstAt;
/** 네이버페이 포함 여부*/
private String searchNpayAt;
/** 주문번호 검색*/
private String searchOrderInnb;
/** 댓글 여부*/
private String searchCommetAt;
/**
* 첨부파일 정보
*/
/* 파일 고유번호 */
private String bbscttAtchmnfilInnb;
/** 원본파일명 */
private String orginlFilNm;
/** 변환파일명 */
private String sysFilNm;
/** 파일타입 */
private String filTy;
/** 파일크기 */
private String filMg;
/** 파일경로 */
private String filCours;
/** 파일정보 */
private List<HashMap<String, Object>> fileInfo;
/*파일 존재여부*/
private String filExtAt;
/*현존 파일 정보*/
private String extFiles;
/*기존 파일 정보*/
private String filesInfo;
/*기존 파일 변화 여부*/
private String extFilChangeAt;
/*대표이미지 첨부 구분*/
private String represntFilAt;
/*파일 수정여부*/
private String filChangeAt;
/*파일 허용 확장자*/
private String acceptFileExtensions;
/*파일 구분 코드*/
private String filDvCd;
/** 댓글 리스트 */
private String[] cmList;
private String boardAnswInnb;
private String bbsNm;
/** 항목고유번호 리스트 */
private String[] itmInnbAns;
/** 답변내용 리스트 */
private String[] answCnAns;
private String[] qesitmInnbAns;
/** 항목고유번호 (분류) */
private String itmInnbDiv;
/** 답변내용 (분류) */
private String answCnDiv;
private String qesitmInnbDiv;
/*
* 상세 조회
*/
/*상품고유번호*/
private String goodsInnb;
/*추천상품고유번호*/
private String recomendGoodsInnb;
/** 상세조회와 페이지 구분처리 */
private String dtlPop;
/*상품 고유번호 배열*/
private String[] goodsInnbArr;
/*주문고유번호*/
private String[] ordrInnbArr;
/**
* 게시글 정보
*/
/** 부모게시글고유번호 */
private String parntsBbscttInnb;
/** 게시판ID */
private String bbsId;
/** DEPTH */
private Integer depth;
/*회원구분코드*/
private String mbrDvCd;
/** 등록자구분코드 */
private String regusrDvCd;
/** 등록자ID */
private String regusrId;
/** 등록자명 */
private String regusrNm;
/** 비밀번호 */
private String password;
/** 제목 */
@NotBlank(message = "제목")
@Length(min = 0, max = 100, message = "제목")
private String sj;
/** 댓글사용여부 */
private String cmUseAt;
/** 추천건수 */
private Integer recomendCnt;
/** 비추천건수 */
private Integer nonrecomendCnt;
/** 정렬순서 */
private Integer sortOrdr;
/** 정렬순서여부 */
private String sortOrdrAt;
/** 비밀글여부 */
private String secretBbscttAt;
/** 공지여부 */
private String ntcAt;
/** 노출여부 */
private String expsrAt;
/** 온라인여부 */
private String onlineAt;
/** 오프라인여부 */
private String oflneAt;
/** 게시기간설정여부 */
private String ntcePdSetupAt;
/** 게시시작일자 */
private String ntceBgnDe;
/** 게시종료일자 */
private String ntceEndDe;
/** 공지기간설정여부 */
private String ntcPdSetupAt;
/** 공지시작일자 */
private String ntcBgnDe;
/** 공지종료일자 */
private String ntcEndDe;
/** 메인노출여부 */
private String mainExpsrAt;
/** NPay 게시글 일련번호 */
private String npayBbscttSnb;
/** NPay 답변 전송여부*/
private String npayAnswTrnsmisAt;
/** NPay 답변번호*/
private String npayAnswNb;
/** NPay 상품주문번호*/
private String npayGoodsOrdrnb;
/** NPay 리뷰유형코드*/
private String npayRvwTyCd;
/** 사용여부 */
private String useAt;
/*답변 번호*/
private String answMbtlnb;
/*답변 여부*/
private String answSmsRecptn;
/**
* 검색조건
*/
/** 검색구분 */
private String srchDv;
/** 검색어 */
private String srchKeyword;
/*검색어 배열(상품상세 키워드 검색)*/
private String[] srchKeywordArr;
/** 검색 시작일 */
private String srchStartDt;
/** 검색 종료일 */
private String srchEndDt;
/** 게시판 이름 코드 */
private String bbsTyCd;
/** 답변 상태 */
private String answSttus;
/** 분류명 */
private String srchitmInnb;
/** 네이버페이 후기 여부*/
private String npayAt;
/** 주문번호 후기 여부*/
private String srchOrdrInnb;
/** 댓글 여부*/
private String srchCmAt;
/** 기간 */
private String datePeriod;
/** 항목내용 */
private String itmCn;
/* 사용자 > 상품 상세 > 리뷰 정렬*/
private String sortDv;
/**
* 게시글추가문항답변
*/
/** 문항답변고유번호 */
private String qesitmAnswInnb;
/** 문항고유번호 */
private String qesitmInnb;
/** 문항필수여부 */
private String qesitmEssntlAt;
/** 문항사용여부 */
private String qesitmUseAt;
/** 문항순서 */
private String qesitmOrdr;
/** 항목고유번호 */
private String itmInnb;
/** 답변내용 */
private String answCn;
/** 문항필수여부(배열) */
private String[] qesitmEssntlAtArr;
/** 문항고유번호(배열) */
private String[] qesitmInnbArr;
/** 문항 명(배열) */
private String[] qesitmNmArr;
/** 항목고유번호(배열) */
private String[] itmInnbArr;
/** 답변내용(배열) */
private String[] answCnArr;
/** 답변 여부(배열) */
private String[] qesitmAtArr;
/** 타입 코드 */
private String[]itmTyCdArr;
/** 리뷰 문항 필수 여부 배열*/
private String[] rvwQesitmEssntlAtArr;
/** 리뷰 문항 명 배열*/
private String[] rvwQesitmNmArr;
/** 리뷰 답변 여부 배열*/
private String[] rvwQesitmAtArr;
/** 리뷰 문항고유번호 배열*/
private String[] rvwQesitmInnbArr;
/** 리뷰 평점 배열*/
private String[] evlScoreArr;
/** 리뷰 항목고유번호 배열*/
private String[] rvwItmInnbArr;
/** 선택삭제 게시글리스트 */
private String[] delBbscttInnbArr;
/**
* 권한
*/
//권한 구분 (REDNG : 읽기권한, REGIST: 쓰기권한, CM: 댓글등록권한)
private String authDv;
//권한 결과값
private String authResult;
/*
* 요청 값
*/
/*요청 페이지 구분(고객센터=>csc , 서브페이지=>subPage, 이용안내 => useGudiance, crm => crm, modal => modal)*/
private String reqUrl;
/*상품 qna 등록 시 페이지 구분*/
private String reqDv;
/* 서버 구분 sopmal or mngr*/
private String serverDv;
/*상세 구분*/
private String dtlAt;
/*사용자 등록,수정시 목록이동 or 등록,수정폼 유지*/
private String listAt;
/*리뷰,게시글 구분*/
private String rvwBbscttDv;
/*게시판 추천 구분*/
private String recomendDv;
/*비밀번호 확인 여부*/
private String pwCnfirmAt;
/**
* 게시판 설정
*/
/* 파일 첨부 여부*/
private String filAtch;
/*게시글발송방식코드*/
private String bbscttSndngMthCd;
/*갤러리형 col 개수*/
private String pgeWthCnt;
/*sms 관련*/
private String bbscttSndngDvCd;
/*스킨타입코드*/
private String sknTyCd;
/*스킨타입코드*/
private String prevNext;
/*삭제 관련*/
/*회수 마일리지 관련 정보*/
private List<DelInfoVO> delInfoArr;
/*crud 행위 구분*/
private String crudDv;
/*나의리뷰 dv 구분*/
private String divDv;
/*서브페이지 고객센터 표시 여부*/
private String cscAt;
}

View File

@@ -0,0 +1,48 @@
package com.wb.domainserver.domain.sopmal.csc.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
public class PromVO {
// GC_PROM 테이블 관련 필드
private Long promInnb; // 게시판 이벤트 고유번호
private String sopmalCd; // 쇼핑몰코드
private String promNm; // 이벤트 제목
private String promDesc; // 이벤트 설명
private String promType; // 이벤트 유형 (복권, 룰렛 등)
private String promRule; // 참여 룰 (once, daily)
private String bbsId; // 게시판 아이디
private Long bbscttInnb; // 게시글 고유번호
private LocalDateTime bgnDt; // 시작일
private LocalDateTime endDt; // 종료일
private String useAt; // 사용 여부 (Y/N)
private LocalDateTime registDt; // 등록일시
private LocalDateTime updtDt; // 수정일시
// GC_PROM_JOIN 테이블 관련 필드
private Long promJoinInnb; // 게시판 이벤트 당첨 고유번호
private Long mbrInnb; // 회원고유번호
private LocalDate joinDt; // 참여날짜
private Integer sortOrdr; // 룰렛 UI에서 표시할 순서 정렬용
private String rewardTy; // 보상 유형 (coupon, mileage)
private BigDecimal accmlmnyAmt; // 적립금액
private Long couponInnb; // 쿠폰발송 고유번호
private Long couponSndngInnb; // 쿠폰발송 고유번호
private String rewardDc; // 보상 설명
// GC_PROM_REWARD 테이블 관련 필드
private Long promRewardInnb; // 게시판 이벤트 보상 고유번호
private BigDecimal probability; // 지급 확률 (%)
// 추가 유틸리티 필드
private String mbrId; // 회원 ID (조회용)
private String mbrNm; // 회원명 (조회용)
private String joinYn; // 참여여부 (Y/N) - 조회용
private String winYn; // 당첨여부 (Y/N) - 조회용
}

View File

@@ -0,0 +1,488 @@
package com.wb.domainserver.domain.sopmal.goods.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.csc.vo.GnrlBbscttVO;
import com.wb.domainserver.domain.sopmal.goods.vo.GoodsVO;
import com.wb.domainserver.domain.sopmal.mpage.act.vo.RvwVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.KakaoProperties;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.string.StringUtil;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
@Controller
@RequestMapping("/sopmal/goods")
@Slf4j
public class GoodsController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private KakaoProperties kakaoProperties;
/**
* 상품 검색 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsSrchForm")
public String selectGoodsSrchForm(HttpServletRequest request,
GoodsVO vo,
ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/GoodsSrchRForm";
}
/**
* 상품 검색 리스트
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsSrchList")
public String selectGoodsSrchList(HttpServletRequest request,
GoodsVO vo,
ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOUserGoodsList", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/GoodsSrchR";
}
/**
* 상품명 검색어 조회
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectSrchGoodsNm")
public ResponseEntity<WnbtResponse> selectSrchGoodsNm(GoodsVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOSrchGoodsNm", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 목록 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsListForm")
public String selectGoodsListForm(HttpServletRequest request,
GoodsVO vo,
ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOUserGoodsListForm", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/GoodsListRForm";
}
/**
* 상품 목록 리스트
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsList")
public String selectGoodsList(HttpServletRequest request,
GoodsVO vo,
ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOUserGoodsList", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/GoodsListR";
}
/**
* 모바일 상품 목록 리스트(인피티니스크롤 상품 추가)
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsListInqire")
public ResponseEntity<?> selectGoodsListIns(HttpServletRequest request,
GoodsVO vo,
ModelMap model) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOUserGoodsList", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 상세
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsDtl")
public String selectGoodsDtl(HttpServletRequest request, GoodsVO vo, ModelMap model) {
//광고유입코드 저장
if(!StringUtil.isEmpty((String) request.getAttribute("adTraceCd"))){
vo.setAdTraceCd((String) request.getAttribute("adTraceCd"));
}
//ep 코드 저장
if(!StringUtil.isEmpty((String) request.getAttribute("epCd"))){
vo.setEpCd((String) request.getAttribute("epCd"));
}
//접속환경 저장
if(!StringUtil.isEmpty((String) request.getAttribute("env"))){
vo.setEnv((String) request.getAttribute("env"));
}
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsDtlInfo", vo)
);
String kakaoKey = "";
if(resultMap.containsKey("sopmalCd")){
kakaoKey = kakaoProperties.getKeyForDomain(resultMap.get("sopmalCd").toString());
}
// 네이버 페이 config Data gethering
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
Map<String, Object> param = new HashMap<String, Object>();
param.put("sopmalCd", user.getSopmalCd());
Map<String,Object> naverKey = responseHandler.handleResponseAsMap(
//sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/npay/config/loadNpayConfigDetail", param)
sendToResrc.ofGetWithParam(RESRC.GCONEBO, "/gcone/ordr/npay/config/loadNpayConfigDetail", param)
);
Map<String,Object> naverMap = (Map<String, Object>) naverKey.get("npayConfigDetail");
model.addAttribute("kakaoKey", kakaoKey);
model.addAttribute("resultMap", resultMap);
// 네이버 페이 사용 여부
model.addAttribute("naverPayYn", naverKey.get("naverPayYn").toString());
// 네이버 페이 공통인증키
model.addAttribute("commonCertiKey", naverMap.get("commonCertiKey").toString());
// 네이버 페이 BUTTON_KEY
model.addAttribute("buttonKey", naverMap.get("buttonKey").toString());
return Util.getDeviceType(request)+"/goods/GoodsDtlR";
}
/**
* 상품 상세 > 쿠폰받기 팝업
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsCouponListPopup")
public String selectCouponListPopup(HttpServletRequest request, @RequestBody GoodsVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsCouponListPopup", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/couponListPopupR";
}
/**
* 상품 상세 > 옵션 조회
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsOptnInfo")
public ResponseEntity<?> selectGoodsOptnInfo(HttpServletRequest request, @RequestBody GoodsVO vo, ModelMap model) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsOptnInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 상세 > 함께하면 좋은 상품(관련상품) 팝업
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRelateGoodsPopup")
public String selectRelateGoodsPopup(HttpServletRequest request, @RequestBody GoodsVO vo,ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBORelateGoodsPopup", vo),
model,
"relateResultMap"
);
return Util.getDeviceType(request)+"/goods/RelateGoodsPopupR";
}
/**
* 상품 목록 > 장바구니 버튼 팝업
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectAddCartGoodsPopup")
public String selectAddCartGoodsPopup(HttpServletRequest request, @RequestBody GoodsVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBORelateGoodsPopup", vo),
model,
"addCartResultMap"
);
return Util.getDeviceType(request)+"/goods/GoodsAddCartPopUpR";
}
/**
* 상품 상세 > 리뷰 혜택 정보 조회
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRvwBnefInfo")
public ResponseEntity<?> selectRvwBnefInfo(RvwVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBORvwBnefInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 상세 > 리뷰 목록 조회 폼
*
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsDtlRvwListForm")
public String selectGoodsDtlRvwListForm(HttpServletRequest request, RvwVO vo, ModelMap model) {
if(!"sopmal".equals(Util.getDeviceType(request))){ //모바일일 시 같이 파일 같이 가져오기
vo.setDiviceDv("mobile");
}
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOGoodsRvwForm", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/RvwListRForm";
}
/**
* 상품 상세 > 리뷰 목록 조회
*
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsDtlRvwList")
public String selectGoodsDtlRvwList(HttpServletRequest request, RvwVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOGoodsRvwList", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/RvwListR";
}
/**
* 상품 상세 > 리뷰 목록 조회 ajax
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsDtlRvwListAjax")
public ResponseEntity<?> selectGoodsDtlRvwListAjax(GnrlBbscttVO vo) {
//게시글 노출 항목 설정값과 게시판 목록 조회
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOGoodsRvwList", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 상세 > 스토어 pick
*
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsDtlStorePickDtl")
public String selectGoodsDtlStorePickDtl(HttpServletRequest request, RvwVO vo, ModelMap model) {
vo.setPageIndex(1);
vo.setPageUnit(100);
vo.setBstAt("Y");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOGoodsRvwPhoto", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/StorePickDtlR";
}
/**
* 상품 상세 > 리뷰 상세 포토리스트
*
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsDtlRvwPhoto")
public String selectGoodsDtlRvwPhoto(HttpServletRequest request, RvwVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOGoodsRvwPhoto", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/RvwPhotoListR";
}
/**
* 상품 상세 > 리뷰 상세 포토리스트 이미지 추가 ajax
*
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsDtlRvwPhotoAjax")
public ResponseEntity<?> selectGoodsDtlRvwPhotoAjax(RvwVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOGoodsRvwPhoto", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 상세 > QnA목록조회
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsDtlQnaList")
public String selectGoodsDtlQnaList(HttpServletRequest request, GnrlBbscttVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOGoodsQnaList", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/QnaListR";
}
/**
* 상품 상세 > QnA목록조회 ajax
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsDtlQnaListAjax")
public ResponseEntity<?> selectGoodsDtlQnaListAjax(GnrlBbscttVO vo) {
//게시글 노출 항목 설정값과 게시판 목록 조회
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOGoodsQnaList", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 상세 > 반품 정보 jsp 호출
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGoodsReturnInfo")
public String selectGoodsReturnInfo(HttpServletRequest request, GoodsVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGetGoodsCmnuseInfo", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/goods/ReturnInfoR";
}
}

View File

@@ -0,0 +1,21 @@
package com.wb.domainserver.domain.sopmal.goods.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CategoryLinkVO extends AbstractVO {
/** 카테고리연결상품고유번호 */
private long ctgryGoodsEsntlNb;
/** 상품고유번호 */
private long goodsInnb;
/** 카테고리ID */
private long ctgryId;
/** 대표카테고리여부 */
private String reprsntCtgryAt;
/** 상품순서 */
private double goodsOrdr;
}

View File

@@ -0,0 +1,28 @@
package com.wb.domainserver.domain.sopmal.goods.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsAdditionVO extends AbstractVO {
/** 상품추가정보 고유번호 */
private long goodsAditInfoInnb;
/** 상품고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 추가정보제목 */
private String infoSj;
/** 추가정보내용 */
private String infoCn;
/** 노출시작일시 */
private Date expsrBgnDt;
/** 노출종료일시 */
private Date expsrEndDt;
}

View File

@@ -0,0 +1,21 @@
package com.wb.domainserver.domain.sopmal.goods.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsIconVO extends AbstractVO {
/** 상품아이콘 고유번호*/
private long goodsIconInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 상품고유번호*/
private long goodsInnb;
/** 아이콘코드*/
private String iconCd;
}

View File

@@ -0,0 +1,25 @@
package com.wb.domainserver.domain.sopmal.goods.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsImageVO extends AbstractVO {
/** 상품이미지 고유번호 */
private long goodsImgInnb;
/** 상품고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 이미지종류 */
private String imgKnd;
/** 컷번호 */
private long cutNb;
/** 이미지경로 */
private String img;
}

View File

@@ -0,0 +1,78 @@
package com.wb.domainserver.domain.sopmal.goods.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsOptionVO extends AbstractVO {
/** 상품옵션 고유번호 */
private long goodsOptnInnb;
/** 옵션 유형 */
private String optnTy;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 상품고유번호 */
private long goodsInnb;
/** 옵션 코드 */
private String optnCd;
/** 옵션명 1 */
private String optnNm1;
/** 옵션명 2 */
private String optnNm2;
/** 옵션명 3 */
private String optnNm3;
/** 옵션명 4 */
private String optnNm4;
/** 옵션값 1 */
private String optnVal1;
/** 옵션값 2 */
private String optnVal2;
/** 옵션값 3 */
private String optnVal3;
/** 옵션값 4 */
private String optnVal4;
/** 옵션코드 1 */
private String optnCd1;
/** 옵션코드 2 */
private String optnCd2;
/** 옵션코드 3 */
private String optnCd3;
/** 옵션코드 4 */
private String optnCd4;
/** 옵션별가격 1 */
private double acctoOptnPric1;
/** 옵션별가격 2 */
private double acctoOptnPric2;
/** 옵션별가격 3 */
private double acctoOptnPric3;
/** 옵션별가격 4 */
private double acctoOptnPric4;
/** 옵션정보 */
private String optnInfo;
/** 재고수량 */
private long invntryQy;
/** 가용재고수량 */
private long usefulInvntryQy;
/** 공급가 */
private double splpric;
/** 소비자가 */
private double cnsmrpric;
/** 판매가 */
private double slepric;
/** 마일리지적립구분코드 */
private double mlgAccmlRt;
/** 마일리지 적립금액 */
private double mlgAccmlmnyAmt;
/** 마일리지 유효월수 */
private long mlgValidMtCnt;
/** 구매자별 추가혜택여부 */
private String purchsrAcctoAditBnefAt;
/** 옵션관계번호 */
private long optnRelateNb;
/** 옵션노출여부 */
private String optnExpsrAt;
}

View File

@@ -0,0 +1,18 @@
package com.wb.domainserver.domain.sopmal.goods.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsRelateVO extends AbstractVO {
/** 관련상품 고유번호 */
private long relateGoodsInnb;
/** 상품 고유번호 */
private long goodsInnb;
/** 관련 판매상품 고유번호 */
private long relateSleGoodsInnb;
}

View File

@@ -0,0 +1,436 @@
package com.wb.domainserver.domain.sopmal.goods.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsVO extends AbstractVO {
/*************************************
* 상품 GOODS START
* **********************************/
/** 상품고유번호 */
private String goodsInnb;
/*as-is 상품고유번호*/
private String no;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 배송그룹 고유번호 */
private long dlvyGroupInnb;
/** 공용정보 고유번호 */
private long cmnuseInfoInnb;
/** 버전번호 */
private long verNb;
/** 사업자 고유번호 */
private long bsnmInnb;
/** 상품종류 */
private String goodsKndCd;
/** 상품코드 */
private String goodsCd;
/** 대표상품코드 */
private String reprsntGoodsCd;
/** 상품명 */
@NotBlank(message = "상품명")
private String goodsNm;
/** ? */
private String textMarktGoodsNm;
/** 부가세 */
private String taxAt;
/** 상품상태 */
private String goodsSttusCd;
/** 재고정책 */
private String invntryPolicyCd;
/** 가용재고제한수량 */
private long avlinvLmttQy;
/** 짧은설명 */
private String srtDc;
/** 키워드 */
private String kwrd;
/** 상품설명 */
private String goodsDc;
/** 모바일상품설명 */
private String mblGoodsDc;
/** 모바일상품설명 PC 동일여부 */
private String mblGoodsDcPcSameAt;
/** 가격대체문구사용여부 */
private String pricRplcWordsUseAt;
/** 가격대체문구 */
private String pricRplcWords;
/** 버튼대체문구사용여부 */
private String buttonRplcWordsUseAt;
/** 버튼대체문구 */
private String buttonRplcWords;
/** 버튼대체문구링크URL */
private String buttonRplcWordsUrl;
/** 버튼대체문구링크구분 */
private String buttonRplcWordsDvCd;
/** 구매수량 유형 */
private String purchsQyTyCd;
/** 최소구매수량 */
private long mummPurchsQy;
/** 최대구매수량 */
private long mxmmPurchsQy;
/** 결제수단설정 */
private String setleMnSetupCd;
/** 상품노출유형 */
private String goodsExpsrTyCd;
/** 노출구분 */
private String expsrDvCd;
/** 노출시작일시 */
private Date expsrBgnDt;
/** 노출종료 */
private Date expsrEndDt;
/** 노출설정앞문구 */
private String expsrSetupFwords;
/** 리뷰그룹번호 */
private String rvwGroupNb;
/** 리뷰작성가능여부 */
private String rvwWritngPosblAt;
/** 입점마케팅연동상태 */
private String tentMarktIntrlckSttus;
/** 예약상품배송일자 */
private String resveGoodsDlvyDe;
/** 예약상품안내문구내용 */
private String resveGoodsGuidanceWordsCn;
/** 예약상품재고수 */
private long resveGoodsInvntryCnt;
/** 배송안내문구내용 */
private String dlvyGuidanceWordsCn;
/** 청약철회가능여부 */
private String subscrptWthdrawPosblAt;
/** 개별취소가능여부 */
private String indvdlzCanclPosblAt;
/** 개별출고가능여부 */
private String indvdlzDlivyPosblAt;
/** 개별반품교환가능여부 */
private String indvdlzReturnExchngPosblAt;
/** EP 코드 */
private String epCd;
/** 광고유입코드 */
private String adTraceCd;
/** 접속환경 */
private String env;
/*************************************
* 상품 GOODS END
* **********************************/
/*************************************
* 옵션 GOODS_OPTION START
* **********************************/
/** 상품옵션 고유번호 */
private String goodsOptnInnb;
/** 옵션 유형 */
private String optnTy;
// /** 쇼핑몰코드 */
// private String sopmalCd;
// /** 상품고유번호 */
// private long goodsInnb;
/** 옵션 코드 */
private String optnCd;
/** 옵션명 1 */
private String optnNm1;
/** 옵션명 2 */
private String optnNm2;
/** 옵션명 3 */
private String optnNm3;
/** 옵션명 4 */
private String optnNm4;
/** 옵션값 1 */
private String optnVal1;
/** 옵션값 2 */
private String optnVal2;
/** 옵션값 3 */
private String optnVal3;
/** 옵션값 4 */
private String optnVal4;
/** 옵션코드 1 */
private String optnCd1;
/** 옵션코드 2 */
private String optnCd2;
/** 옵션코드 3 */
private String optnCd3;
/** 옵션코드 4 */
private String optnCd4;
/** 옵션별가격 1 */
private double acctoOptnPric1;
/** 옵션별가격 2 */
private double acctoOptnPric2;
/** 옵션별가격 3 */
private double acctoOptnPric3;
/** 옵션별가격 4 */
private double acctoOptnPric4;
/** 옵션정보 */
private String optnInfo;
/** 재고수량 */
private Integer invntryQy;
/** 가용재고수량 */
private String usefulInvntryQy;
/** 공급가 */
private Integer splpric;
/** 소비자가 */
private Integer cnsmrpric;
/** 판매가 */
private Integer slepric;
/** 마일리지적립구분코드 */
private double mlgAccmlRt;
/** 마일리지적립구분코드 */
private double mlgAccmlCd;
/** 마일리지 적립금액 */
private double mlgAccmlAmt;
/** 구매자별 추가혜택여부 */
private String purchsrAcctoAditBnefAt;
/** 옵션관계번호 */
private long optnRelateNb;
/** 옵션노출여부 */
private String optnExpsrAt;
/** 기준구분여부 */
private String stdrDvAt;
/*************************************
* 옵션 GOODS_OPTION END
* **********************************/
/*************************************
* 관련상품 GOODS_RELATE START
* **********************************/
/** 관련상품 고유번호 */
private long relateGoodsInnb;
// /** 상품 고유번호 */
// private long goodsInnb;
/** 관련 판매상품 고유번호 */
private long relateSleGoodsInnb;
/*************************************
* 관련상품 GOODS_RELATE END
* **********************************/
/*************************************
* 배너 SHOP_GOODS_BANNER START
* **********************************/
// /** 상품고유번호*/
// private long goodsInnb;
/** 배너고유번호*/
private long bannerInnb;
/*************************************
* 배너 SHOP_GOODS_BANNER END
* **********************************/
/** 추가정보 */
private List<GoodsAdditionVO> goodsAdditionVOList;
/*************************************
* 할인(프로모션) SHOP_GOODS_DSCNT START
* **********************************/
/** 판매상품할인정책고유번호 */
private long sleGoodsDscntInnb;
// /** 상품고유번호 */
// private long goodsInnb;
// /** 쇼핑몰코드 */
// private String sopmalCd;
/** 할인시작구매수량 */
private long dscntBgnPurchsQy;
/** 할인종료구매수량 */
private long dscntEndPurchsQy;
/** 할인구분코드 */
private String dscntDvCd;
/** 할인금액 */
private double dscntAmt;
/*************************************
* 할인(프로모션) SHOP_GOODS_DSCNT END
* **********************************/
/*************************************
* 아이콘 GOODS_ICON START
* **********************************/
/** 상품아이콘 고유번호*/
// private long goodsIconInnb;
// /** 상품고유번호*/
// private long goodsInnb;
/** 아이콘코드*/
// private String iconCd;
private List<GoodsIconVO> goodsIconVOList;
/*************************************
* 아이콘 GOODS_ICON END
* **********************************/
/*************************************
* 이미지 GOODS_IMAGE START
* **********************************/
/** 상품이미지 고유번호 */
private long goodsImgInnb;
// /** 상품고유번호 */
// private long goodsInnb;
// /** 쇼핑몰코드 */
// private String sopmalCd;
/** 이미지종류 */
private String imgKnd;
/** 컷번호 */
private long cutNb;
/** 이미지경로 */
private String img;
/*************************************
* 이미지 GOODS_IMAGE END
* **********************************/
/*************************************
* 카테고리연결 CATEGORY_LINK START
* **********************************/
/** 카테고리연결상품고유번호 */
private long ctgryGoodsEsntlNb;
// /** 상품고유번호 */
// private long goodsInnb;
/** 카테고리ID */
private String ctgryId;
/** 카테고리CD */
private String code;
/** 대표카테고리여부 */
private String reprsntCtgryAt;
/** 상품순서 */
private double goodsOrdr;
/*************************************
* 카테고리연결 CATEGORY_LINK END
* **********************************/
/** 주문고유번호 */
private String ordrInnb;
/** 회원고유번호 */
private String mbrInnb;
/** 회원구분 */
private String mbrDvCd;
/** 상위 카테고리 */
private String upperCtgryId;
/** 노출 코드 */
private String expsrCd;
/** 가격 구분 */
private String pricDv;
/** 시작 가격 */
private String startPric;
/** 종료 가격 */
private String endPric;
/** 판매 상태 */
private String[] goodsDftinfoSttus;
/** 일자 구분 */
private String dateDv;
/** 시작 일자 */
private String startDate;
/** 종료 일자 */
private String endDate;
/** 재고에따른 판매 */
private String goodsDftinfoInvntryPolicy;
/** 상품옵션 고유번호 배열*/
private String[] goodsOptnInnbs;
/** 상품옵션 구분 */
private String goodsOptnDv;
/** 개수 */
private int qy;
/** 입력옵션 텍스트 */
private String inputOptn;
/** 입력옵션 텍스트 */
private String inputOptnText;
/** 이벤트 고유번호 배열*/
private String[] evtInnbs;
/** 이벤트 구분 */
private String evtDv;
/** 쿠폰 고유번호 */
private String couponInnb;
/** 다운로드쿠폰 고유번호 */
private String dwldCouponInnb;
/** 쿠폰 혜택구분 */
private String bnefDv;
/** 중복할인여부 */
private String dplctDscntAt;
/** 타쿠폰동시사용여부 */
private String otrCouponSmtmUseAt;
/** 적용쿠폰 */
private String usedCoupons;
/** 검색_정렬구분 */
private String sortDv;
/** 검색 타입 */
private String srchType;
/** 검색어 */
private String srchStr;
private List<HashMap<String, Object>> delInnbArr;
private List<HashMap<String, Object>> fileInfo;
/*************************************
* 상품수정로그 FM_GOODS_ADMIN_LOG START
* **********************************/
/** 상품수정로그 고유번호 */
private long goodsUpdtLogInnb;
/** 항목명 */
private String itmNm;
/** 변경전값 */
private String chngBfeVal;
/** 변경후값 */
private String chngAfeVal;
/** 수정자 이름 */
private String regusrNm;
/** 회차 */
private double round;
/** 아이피 */
private String ip;
/*************************************
* 상품수정로그 FM_GOODS_ADMIN_LOG END
* **********************************/
private String priceRange;
/** 회원ID */
private String mbrId;
/** 세션아이디 */
private String sesionId;
/** 옵션관계번호 배열 */
private String[] optnRelateNbs;
}

View File

@@ -0,0 +1,16 @@
package com.wb.domainserver.domain.sopmal.goods.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ShopGoodsBannerVO extends AbstractVO {
/** 상품고유번호*/
private long goodsInnb;
/** 배너고유번호*/
private long bannerInnb;
}

View File

@@ -0,0 +1,27 @@
package com.wb.domainserver.domain.sopmal.goods.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ShopGoodsDscntVO extends AbstractVO {
/** 판매상품할인정책고유번호 */
private long sleGoodsDscntInnb;
/** 상품고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 할인시작구매수량 */
private long dscntBgnPurchsQy;
/** 할인종료구매수량 */
private long dscntEndPurchsQy;
/** 할인구분코드 */
private String dscntDvCd;
/** 할인금액 */
private double dscntAmt;
}

View File

@@ -0,0 +1,172 @@
package com.wb.domainserver.domain.sopmal.login.controller;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.Shop;
import com.wb.domainserver.domain.gcone.login.service.LoginService;
import com.wb.domainserver.domain.gcone.login.vo.LoginRequest;
import com.wb.domainserver.domain.gcone.login.vo.LoginUser;
import com.wb.domainserver.realm.RealmContextHolder;
import com.wb.domainserver.realm.util.UrlExtractor;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.CookieUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriUtils;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Controller
@RequiredArgsConstructor
@RequestMapping("/sopmal")
public class LoginController {
private final LoginService service;
private final BOMaSopmalService bomaSopmalService;
/**
* 사용자 로그인 페이지 진입시 이전 경로 저장 및 로그인 페이지 이동 처리
* @return
*/
@Policy(value = AuthPolicy.PUBLIC)
@GetMapping("/login")
@ResponseBody
public void login(HttpServletRequest request, HttpServletResponse response) throws IOException {
String realm = RealmContextHolder.getRealm();
String redirectUri = request.getParameter("redirect_uri");
String sopmalCd = RealmContextHolder.getSopmalCdRealm();
response.sendRedirect("/sopmal/login/page/"+realm+"?redirect_uri=%s&sopmalCd=%s".formatted(UriUtils.encode(redirectUri, StandardCharsets.UTF_8), UriUtils.encode(sopmalCd, StandardCharsets.UTF_8)));
}
/**
* 로그인 처리
* @return
*/
@Policy(value = AuthPolicy.PUBLIC)
@PostMapping(value = "/login/{realm}")
@ResponseBody
public ResponseEntity<WnbtResponse> loginProcess(@PathVariable String realm,
@RequestBody LoginRequest loginRequest,
HttpServletRequest request,
HttpServletResponse response
) {
//회원정보 조회
LoginUser loginUser = null;
log.debug("realm :: {}", realm);
loginUser = service.mbrLogin(loginRequest);
//로그인 처리
service.createLoginToken(loginUser, request, response);
Map<String, Object> message = new HashMap<>();
message.put("result", "success");
message.put("redirectUri", loginRequest.getRedirectUri());
return ResponseEntity.ok(WnbtResponse.builder()
.resBody(new WnbtResponseBody(message))
.build());
}
/**
* 로그인 페이지 이동
* @return
*/
@Policy(value = AuthPolicy.PUBLIC)
@GetMapping(value = "/login/page/{realm}")
public String loginPage(HttpServletRequest request, @PathVariable String realm, ModelMap model) {
String redirectUri = request.getParameter("redirect_uri");
String accessUrl = StringUtils.hasText(request.getParameter("access_url"))? request.getParameter("access_url") : RealmContextHolder.getOriginalHostRealm();
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
String sopmalCd = request.getParameter("sopmalCd");
if(sopmalCd == null){
sopmalCd = user.getSopmalCd();
}
//쇼핑몰 테마 등 정보 조회
Shop shopInfo = bomaSopmalService.selectSopmalInfo(sopmalCd);
model.addAttribute("redirectUri", redirectUri);
model.addAttribute("accessUrl", accessUrl);
model.addAttribute("sopmalCd", sopmalCd);
model.addAttribute("realm", realm);
model.addAttribute("shopInfo", shopInfo);
String loginPage = "login";
String loginPath = "login/";
//사용자 일경우 디바이스 타입에 따라 조절
String deviceType = "MO".equals(request.getAttribute("env"))?"-mobile":"";
loginPage += deviceType;
return loginPath + loginPage;
}
/**
* 엑세스토큰 만료시 refreshToken 검증 요청
* 요청은 jwtAuthenticationFilter에서 redirect 처리하여 도달함
* 요청 후 원래 가려는 페이지로 redirect 처리
* */
@Policy(value = AuthPolicy.PUBLIC)
@GetMapping("/tokens/refresh")
public void refreshToken(HttpServletRequest request, HttpServletResponse response) throws IOException {
String refreshToken = "";
refreshToken = CookieUtils.getCookieValue("RFT", request);
//리프레쉬 토큰이 없으면 로그인 화면으로 이동 처리
if(!StringUtils.hasText(refreshToken)){
//엑세스토큰 삭제
CookieUtils.deleteCookie("ACT", "/", request, response);
//토큰만료 검증쿠키 삭제
CookieUtils.deleteCookie("token_expire", "/", request, response);
response.sendRedirect("/sopmal/login/page/" + RealmContextHolder.getRealm() + "?redirect_uri=" + URLEncoder.encode(request.getParameter("redirect_uri"), StandardCharsets.UTF_8));
}else{
//리프레쉬 토큰 있을 경우(존재한다는 자체가 refresh토큰이 만료된 상태가 아님)
service.createRenewLoginToken(request, response);
}
//리다이렉트 url 있을 경우 해당 url로 이동
if(StringUtils.hasText(request.getParameter("redirect_uri")) && !"/login".contains(request.getParameter("redirect_uri"))){
response.sendRedirect(request.getParameter("redirect_uri"));
}else{
response.sendRedirect(UrlExtractor.getOriginalHost(request));
}
}
}

View File

@@ -0,0 +1,62 @@
package com.wb.domainserver.domain.sopmal.lotteryscratch.controller;
import com.wb.domainserver.domain.sopmal.lotteryscratch.vo.LotteryScratchVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Slf4j
@Controller
@RequestMapping("/sopmal/lottery")
public class LotteryScratchController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 복권긁기 확률별 첫 화면세팅
*
* @param bbsctt
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectScratchPage")
public ResponseEntity<WnbtResponse> selectScratchPage(LotteryScratchVO lotteryScratchVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/lottery/selectScratchPage", lotteryScratchVO),
ReplyFromResrc::getReply
);
}
/**
* 복권긁기 참여 여부 체크
*
* @param bbsctt
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping("selectEventJoinUser")
public ResponseEntity<WnbtResponse> selectEventJoinUser(LotteryScratchVO lotteryScratchVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/lottery/selectBOEventJoinUser", lotteryScratchVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,20 @@
package com.wb.domainserver.domain.sopmal.lotteryscratch.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class LotteryScratchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 참여 여부 체크 (월/일) */
private String joinCheckDvCd;
}

View File

@@ -0,0 +1,677 @@
package com.wb.domainserver.domain.sopmal.main.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.domain.gcone.setup.site.service.BOSiteService;
import com.wb.domainserver.domain.gcone.setup.site.vo.BOPrevewVO;
import com.wb.domainserver.domain.gcone.setup.site.vo.BOSiteVO;
import com.wb.domainserver.domain.sample.vo.PrevewVO;
import com.wb.domainserver.domain.sopmal.main.vo.BrandVO;
import com.wb.domainserver.domain.sopmal.main.vo.MaSopmalVO;
import com.wb.domainserver.domain.sopmal.main.vo.MainVO;
import com.wb.domainserver.domain.sopmal.main.vo.StrVO;
import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyOrdrDlvyVO;
import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyRefundVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.*;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Controller
public class MainController {
@Autowired
private BOSiteService service;
@Autowired
WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
@Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")
String issuerUri;
@Autowired
private KakaoProperties kakaoProperties;
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value= {"/","/index", "/sopmal/index"})
public String index(HttpServletRequest request, ModelMap model, BOPrevewVO prevewVO){
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(2);
paginationInfo.setRecordCountPerPage(10);
paginationInfo.setPageSize(10);
paginationInfo.setTotalRecordCount(0);
MultiValueMap<String, Object> paramMap = MultiValueMapConverter.convert(new ObjectMapper(), paginationInfo);
model.addAttribute("paginationInfo", paginationInfo);
// 세션 객체 가져오기
HttpSession session = request.getSession();
String sessionId = session.getId(); // 세션 아이디 가져오기
prevewVO.setSessionId(sessionId);
// 쿠키를 가져옴
Cookie[] cookies = request.getCookies();
String cookieValue = "";
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("goodsInnb".equals(cookie.getName() )) {
cookieValue = cookie.getValue();
break;
}
}
}
String[] tempCookieValue = cookieValue.split(":");
List<String> filterList = new ArrayList<>();
for(int i = 0; i < tempCookieValue.length; i++) {
if(!"".equals(tempCookieValue[i]) ) {
filterList.add(tempCookieValue[i]);
}
}
String[] cookieValArr = filterList.toArray(new String[filterList.size()]);
prevewVO.setCookieValArr(cookieValArr);
//기본 PC로 설정
String env = "P";
//모바일 일 경우 모바일 설정
if(!ObjectUtils.isEmpty(request.getAttribute("env"))){
if("MO".equalsIgnoreCase(String.valueOf(request.getAttribute("env")))){
env = "M";
}
}
prevewVO.setEnv(env);
BOSiteVO siteVO = new BOSiteVO();
// 작성자 정보 할당
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){
siteVO.setSopmalCd(user.getSopmalCd()); // 쇼핑몰코드
}
siteVO.setMainSetupInnb(prevewVO.getMainSetupInnb());
siteVO.setMainSiteInnb(prevewVO.getMainSiteInnb());
siteVO.setMbrDvCd(user.getMbrDvCd());
siteVO.setMbrInnb( user.getUserInnb() );
siteVO.setSessionId(prevewVO.getSessionId());
siteVO.setCookieValArr(prevewVO.getCookieValArr());
siteVO.setEnv(prevewVO.getEnv());
Map<String, Object> message = new HashMap<>();
message = service.selectBOMainSiteDesignListInqire(siteVO);
message.put("loginFlag", user.getMbrId());
model.addAttribute("resultMap", message);
String diviceTy = Util.getDeviceType(request);
model.addAttribute("prevewVO", prevewVO);
if("sopmal".equals(diviceTy)){
return "index";
}else{
return "mobileMain";
}
}
/**
* 메인 화면 이동
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sopmal/main/selectMain")
public String selectMain(){
return "sopmal/main/main";
}
/**
* 비회원 휴대폰번호 확인
* @return OrdrDtlR.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sopmal/main/selectNMbrMbtlnbInqire")
public ResponseEntity<WnbtResponse> selectNMbrMbtlnbInqire(HttpServletRequest request, ModelMap model, MyOrdrDlvyVO ordrDlvyVO) throws Exception {
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBONMbrMbtlnbInqire", ordrDlvyVO),
// model,
// "data"
// );
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO));
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBONMbrMbtlnbInqire", ordrDlvyVO),
ReplyFromResrc::getReply
);
}
/**
* 비회원 주문 조회
* @return OrdrDtlR.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sopmal/main/selectNMbrOrdrDtlInqire")
public String selectNMbrOrdrDtlInqire(HttpServletRequest request, ModelMap model, MyOrdrDlvyVO ordrDlvyVO) throws Exception {
log.debug("비회원 주문 조회 파라미터 =>{}", ordrDlvyVO);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrOrdrDtlInqire", ordrDlvyVO),
model,
"data"
);
String referer = request.getHeader("referer");
//api에서 넘어 올 시
String giftApiAt = "N";
if(referer != null){
if(referer.indexOf("svc.gcone.co.kr") > 0){
giftApiAt = "Y";
}
}
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO));
model.addAttribute("giftApiAt",giftApiAt);
return Util.getDeviceType(request) + "/mpage/ordr/NmbrOrdrDtlR";
}
/**
* 비회원 반품 취소 환불 상세 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sopmal/main/selectNMbrRtngudCanclRefndDtlInqire")
public String selectNMbrRtngudCanclRefndDtlInqire(MyRefundVO refundVO, ModelMap model, HttpServletRequest request){
refundVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/Rtngudrefnd/selectBONMbrRtngudRefndDtlInqire", refundVO),
model,
"resultMap"
);
model.addAttribute("paramVO", refundVO);
return Util.getDeviceType(request) + "/mpage/ordr/NmbrRtngudCanclRefndDtlR";
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 주문/배송 목록 조회
* @param ordrDlvyVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/sopmal/main/selectNMbrOrdrListInqireAjax")
public String selectNMbrOrdrListInqireAjax(ModelMap model, MyOrdrDlvyVO ordrDlvyVO) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrOrdrListInqireAjax", ordrDlvyVO),
model,
"data"
);
return "sopmal/mpage/ordr/OrdrDlvyListRList";
}
/**
* 매장안내 폼 이동
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectStrListForm")
public String selectStrListForm(StrVO strVO, ModelMap model, HttpServletRequest request) {
strVO.setServerDv("sopmal");
model.addAttribute("paramVO", strVO);
// return "sopmal/main/StrListFormR";
return Util.getDeviceType(request) + "/main/StrListFormR";
}
/**
* 매장 안내 조회
* @param gradVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectStrGuidance")
public String selectStrGuidance(StrVO strVO, ModelMap model, HttpServletRequest request) {
strVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/itrnt/str/selectBOStrGuidance", strVO),
model,
"resultMap"
);
model.addAttribute("paramVO", strVO);
// return "sopmal/main/StrGuidanceR";
return Util.getDeviceType(request) + "/main/StrGuidanceR";
}
/**
* 매장 검색 목록 폼 이동
* @param gradVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectStrListSrchForm")
public String selectStrListSrchForm(StrVO strVO, ModelMap model, HttpServletRequest request) {
strVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/itrnt/str/selectBOStrListForm", strVO),
model,
"resultMap"
);
model.addAttribute("paramVO", strVO);
// return "sopmal/main/StrSrchListFormR";
return Util.getDeviceType(request) + "/main/StrSrchListFormR";
}
/**
* 매장 검색 목록 조회
* @param gradVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectStrListInqire")
public String selectStrListInqire(StrVO strVO, ModelMap model, HttpServletRequest request) {
strVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/itrnt/str/selectBOStrListInqire", strVO),
model,
"resultMap"
);
model.addAttribute("paramVO", strVO);
// return "sopmal/main/StrSrchListR";
return Util.getDeviceType(request) + "/main/StrSrchListR";
}
/**
* 마이페이지 > 매장 검색 목록 조회 > 스크롤
* @param strVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectStrListScrolInqire")
public ResponseEntity<?> selectStrListScrolInqire(StrVO strVO) {
strVO.setServerDv("sopmal");
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/itrnt/str/selectBOStrListInqire", strVO),
ReplyFromResrc::getReply
);
}
/**
* 매장 검색 목록 폼 공통코드 반환
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/sopmal/main/selecSidoGunguCmmnCdArray")
public ResponseEntity<WnbtResponse> selecSidoGunguCmmnCdArray(StrVO strVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/itrnt/str/selecBOSidoGunguCmmnCdArray", strVO),
ReplyFromResrc::getReply
);
}
/**
* 매장 상세 조회
* @param gradVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectStrDtlInqire")
public String selectStrDtlInqire(StrVO strVO, ModelMap model, HttpServletRequest request) {
strVO.setServerDv("sopmal");
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/itrnt/str/selectBOStrDtlInqire", strVO),
// model,
// "resultMap"
// );
model.addAttribute("strVO", strVO);
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/itrnt/str/selectBOStrDtlInqire", strVO)
);
String kakaoKey = "";
if(resultMap.containsKey("paramVO")){
Map<String, Object> paramVO = (Map<String, Object>) resultMap.get("paramVO");
if(!ObjectUtils.isEmpty(paramVO.get("sopmalCd"))){
kakaoKey = kakaoProperties.getKeyForDomain(paramVO.get("sopmalCd").toString());
}
}
model.addAttribute("kakaoKey", kakaoKey);
model.addAttribute("resultMap", resultMap);
// return "sopmal/main/StrDtlInqireR";
return Util.getDeviceType(request) + "/main/StrDtlInqireR";
}
/**
* 약관조회
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectIndvdlInfoProcsCn")
public ResponseEntity<WnbtResponse> selectIndvdlInfoProcsCn(MaSopmalVO maSopmalVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOClauseInformationSopmal", maSopmalVO),
ReplyFromResrc::getReply
);
}
/**
* 약관 내용 조회
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectClause")
public String selectClause(MaSopmalVO vo, ModelMap model, HttpServletRequest request) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOClauseInformationSopmal", vo),
model,
"resultMap"
);
model.addAttribute("maSopmalVO",vo);
return Util.getDeviceType(request) + "/main/ClauseDtlR";
}
/**
* 브랜드 스토리
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectBrandStroyForm")
public String selectBrandStroyForm(ModelMap model, HttpServletRequest request, BrandVO vo) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
model.addAttribute("sopmalCd", user.getSopmalCd());
model.addAttribute("dv", vo.getDv());
return Util.getDeviceType(request) + "/main/BrandStoryR";
}
/**
* 브랜드 스토리 html
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectiframeBrandStroyForm")
public String selectiframeBrandStroyForm(ModelMap model, HttpServletRequest request, BrandVO vo) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
model.addAttribute("sopmalCd",user.getSopmalCd());
model.addAttribute("dv",vo.getDv());
String deviceType = Util.getDeviceType(request);
String fileDv = "";
if("sopmal".equals(deviceType)){
fileDv = "pc";
}else{
fileDv = "mobile";
}
String sopmalCd = user.getSopmalCd();
String url = "html/" + fileDv + "/" + sopmalCd + "/brandStory";
if("CH".equals(sopmalCd) && "mobile".equals(fileDv)){
String dv = vo.getDv();
log.debug("확인 {}", sopmalCd+" / "+ fileDv+" / "+dv);
if (dv == null) {
dv = "company";
}
if ("company".equals(dv)) {
url = "html/" + fileDv + "/" + sopmalCd + "/BrandStory";
} else if ("ceo".equals(dv)) {
url = "html/" + fileDv + "/" + sopmalCd + "/Ceo";
} else if ("technology".equals(dv)) {
url = "html/" + fileDv + "/" + sopmalCd + "/Technology";
} else if ("history".equals(dv)) {
url = "html/" + fileDv + "/" + sopmalCd + "/History";
} else if ("map".equals(dv)) {
url = "html/" + fileDv + "/" + sopmalCd + "/Map";
} else if ("way".equals(dv)) {
url = "html/" + fileDv + "/" + sopmalCd + "/Way";
} else if ("script".equals(dv)) {
url = "html/" + fileDv + "/" + sopmalCd + "/Script";
}
}
return url;
}
/**
* 브랜드 가치
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectBrandValueForm")
public String selectBrandValueForm(ModelMap model, HttpServletRequest request) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
model.addAttribute("sopmalCd",user.getSopmalCd());
return Util.getDeviceType(request) + "/main/BrandValueR";
}
/**
* 브랜드 가치 html
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectiframeBrandValueForm")
public String selectiframeBrandValueForm(ModelMap model, HttpServletRequest request) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
model.addAttribute("sopmalCd", user.getSopmalCd());
String deviceType = Util.getDeviceType(request);
String fileDv = "";
if ("sopmal".equals(deviceType)) {
fileDv = "pc";
} else {
fileDv = "mobile";
}
String SopmalCd = user.getSopmalCd();
String url = "html/" + fileDv + "/"+SopmalCd+"/brandValue";
return url;
}
/**
* 자담유 > 네가지약속 (모바일)
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectNBPromise")
public String selectNBPromise(ModelMap model, HttpServletRequest request) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
model.addAttribute("sopmalCd", user.getSopmalCd());
return Util.getDeviceType(request) + "/main/NbPromise";
}
/**
* 자담유 > 성분 불만제로 (모바일)
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectNbIngrdient")
public String selectNbIngrdient(ModelMap model, HttpServletRequest request) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
model.addAttribute("sopmalCd", user.getSopmalCd());
return Util.getDeviceType(request) + "/main/NbIngrdient";
}
/**
* 자담유 > 네가지약속html
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectNbPromiseHtml")
public String selectNbPromiseHtml(ModelMap model, HttpServletRequest request) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
model.addAttribute("sopmalCd", user.getSopmalCd());
String deviceType = Util.getDeviceType(request);
String fileDv = "";
if ("sopmal".equals(deviceType)) {
fileDv = "pc";
} else {
fileDv = "mobile";
}
String SopmalCd = user.getSopmalCd();
String url = "html/" + fileDv + "/" + SopmalCd + "/promise";
return url;
}
/**
* 자담유 > 성분 불만제로html
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/sopmal/main/selectNbIngredientHtml")
public String selectNbIngredientHtml(ModelMap model, HttpServletRequest request) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
model.addAttribute("sopmalCd", user.getSopmalCd());
String deviceType = Util.getDeviceType(request);
String fileDv = "";
if ("sopmal".equals(deviceType)) {
fileDv = "pc";
} else {
fileDv = "mobile";
}
String SopmalCd = user.getSopmalCd();
String url = "html/" + fileDv + "/" + SopmalCd + "/ingredient";
return url;
}
/**
* 쇼핑몰 로그아웃
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sopmal/main/logout")
public String adminLogout(HttpServletRequest request, HttpSession session) {
session.invalidate();
request.getSession().invalidate();
request.getSession(true);
String returnUrl = issuerUri+"/login-AF";
return "redirect:"+returnUrl;
}
/**
* 햄버거메뉴 > 회원정보get
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sopmal/main/selectMbrInfo")
public ResponseEntity<?> selectMbrInfo(HttpServletRequest request, MyOrdrDlvyVO ordrDlvyVO) {
// 쿠키를 가져옴
Cookie[] cookies = request.getCookies();
String cookieValue = "";
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("goodsInnb".equals(cookie.getName() )) {
cookieValue = cookie.getValue();
break;
}
}
}
String[] tempCookieValue = cookieValue.split(":");
List<String> filterList = new ArrayList<>();
for(int i = 0; i < tempCookieValue.length; i++) {
if(!"".equals(tempCookieValue[i]) ) {
filterList.add(tempCookieValue[i]);
}
}
String[] cookieValArr = filterList.toArray(new String[filterList.size()]);
ordrDlvyVO.setCookieValArr(cookieValArr);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", ordrDlvyVO),
ReplyFromResrc::getReply
);
}
/**
* 메인 화면 쇼핑몰 카테고리별 타입
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/sopmal/main/selectMainSiteDesignCtgryListInqire")
public ResponseEntity<?> selectMainSiteDesignCtgryListInqire(HttpServletRequest request, MainVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/ajax/gcone/setup/site/selectBOMainSiteDesignCtgryListInqire", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,12 @@
package com.wb.domainserver.domain.sopmal.main.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BrandVO extends AbstractVO {
private String dv;
}

View File

@@ -0,0 +1,23 @@
package com.wb.domainserver.domain.sopmal.main.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 쇼핑몰 VO
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-08-06 김혜인 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MaSopmalVO {
/*약관 구분 코드*/
private String stplatDvCd;
}

View File

@@ -0,0 +1,16 @@
package com.wb.domainserver.domain.sopmal.main.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MainVO extends AbstractVO {
private String ordr;
private String expsrOrdr;
}

View File

@@ -0,0 +1,60 @@
package com.wb.domainserver.domain.sopmal.main.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 인트라넷 매장
* @author 추지훈
* @since 2024-03-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-11 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class StrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 매장 고유번호 */
private Integer strInnb;
/** 검색_매장검색어 - 매장명*/
private String srchKeyword;
/** 검색_시, 도 */
private String srchCtyDo;
/** 검색_군, 구 */
private String srchCtyGunGu;
private String serverDv;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,241 @@
package com.wb.domainserver.domain.sopmal.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MbrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** fm_member */
/** 회원고유번호 */
private String mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/**대표 사이트 코드*/
private String mainSopmalCd;
/** 회원등급 */
private String mbrGradInnb;
/**가입경로코드*/
private String joinCoursCd;
/** 유입경로도메인 */
private String inflowCoursDomn;
/** 가입환경코드 */
private String sbscrbEnvrnCd;
/** 회원유형코드 */
private String mbrTyCd;
/** 회원ID */
@NotBlank(message = "아이디")
private String mbrId;
/** 회원비밀번호 */
@NotBlank(message = "비밀번호")
private String mbrPassword;
/** 회원비밀번호 확인 */
private String mbrPasswordChk;
/** 비밀번호변경일자 */
private String passwordChngDe;
/** 회원명 */
@NotBlank(message = "이름")
private String mbrNm;
/** 이메일 */
@NotBlank(message = "이메일")
private String email;
/** 이메일수신여부 */
private String emailRecptnAt;
/** 휴대폰 번호 */
@NotBlank(message = "휴대전화")
private String mbtlnb;
/** SMS수신여부 */
private String smsRecptnAt;
/** 전화번호 */
private String telnb;
/** 우편번호 */
@NotBlank(message = "우편번호")
private String zip;
/** 도로명; 지번 */
private String adresDv;
/** 지번주소 */
private String lnbAdres;
/** 도로명주소 */
// @NotBlank(message = "도로명주소")
private String rnmAdres;
/** 상세주소 */
@NotBlank(message = "상세주소")
private String dtlAdres;
/** 성별 */
@NotBlank(message = "성별")
private String sex;
/** 생년월일 */
@NotBlank(message = "생년월일")
private String brthDe;
/** 상태 */
private String sttus;
/** 상태 */
private String unitySvcCnsOffrInfo;
/** 통합서비스정보제공동의 */
private String indvdlInfoValidPd;
/** 광고수신동의변경일시 */
private String advrtsRecptnAgreUpdtDt;
/** 광고수신동의전송일시 */
private String advrtsRecptnAgreTrnsmisDt;
/** GCONE 가입여부 */
private String gconeSbscrbAt;
/** 관리자메모 */
private String mngrMemo;
/** 관리자로그 */
private String mngrLog;
/** 주문번호 */
private String ordrInnb;
// 외부연동 회원 ( kakao; naver; pos )
/** 외부연동순번 */
private Integer extrlIntrlckSnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 외부연동구분코드 */
private String extrlIntrlckDvCd;
/** 외부연동ID */
private String extrlIntrlckId;
/** 가입구분코드 */
private String sbscrbDvCd;
/** 약정코드 */
private String stplatDvCds;
/** 약정코드 동의여부 */
private String stplatDvCdAts;
/** 외부연동 회원(기존 가입 통합) */
private String extMember;
/** fm_member_join */
/** 약정코드 */
private String marktRecptnAgreAt;
/** 약정코드 */
private String marktRecptnAgreUpdtDt;
/** fm_member_login */
/** 약정코드 */
private String conectLogInnb;
/** 약정코드 */
private String conectEnvrn;
/** 약정코드 */
private String conectIp;
/** 약정코드 */
private String loginTy;
/** fm_clause_agre */
/** 약정코드 */
private String stplatAgreInnb;
/** 약정코드 */
private String sopmalStplatInnb;
/** fm_marketing_agree_log */
/** 약정코드 */
private String advrtsRecptnAgreChngInnb;
private String marktAgreeInnb;
/** fm_delivery_address */
/** 약정코드 */
private String adbkInnb;
/** 약정코드 */
private String dlvylcDcCn;
/** 약정코드 */
private String recpntNm;
/** 약정코드 */
private String dftDlvylcAt;
/** 약정코드 */
private String recentDlvylcAt;
/** fm_extrl_member */
/** 약정코드 */
private String emailAdres;
/** 약정코드 */
private String sexdstnCd;
/** POS 매장 고유번호 */
private String strInnb;
/** gc_crtnb */
/** 인증번호 발송 고유번호 */
private String sndngInnb;
/** 인증번호 */
private String crtnb;
/** 회원가입환경코드 */
private String joinEnvrnCd;
/** 회원가입방법코드 */
private String joinMthCd;
/** 개인식별코드(URL용) */
private String code;
/** POS코드 */
private String storeCode;
/** 회원가입방법코드 */
private String currentUrl;
}

View File

@@ -0,0 +1,299 @@
package com.wb.domainserver.domain.sopmal.mpage.act.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.csc.vo.GnrlBbscttVO;
import com.wb.domainserver.domain.sopmal.mpage.act.vo.RvwVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.*;
import com.wb.domainserver.util.file.service.FileStorageService;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* MyActController Class (back)
*
* @author 홍길동
* @since 2024-02-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-05 김혜인 최초 생성
*
* </pre>
*/
@Controller
@RequestMapping("/sopmal/mpage/act")
@Slf4j
public class MyActController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/** 파일 업로드 */
@Autowired
private FileStorageService filestore;
/**
* 상품 Q&A 조회
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectGoodsQnaInqire")
public String selectGoodsQnaInqire(HttpServletRequest request, ModelMap model, GnrlBbscttVO bbsctt){
bbsctt.setBbsTyCd("05");
bbsctt.setServerDv("sopmal");
bbsctt.setReqUrl("mpage");
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire",bbsctt),
model,
"resultMap"
);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
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")
public ResponseEntity<?> selectGoodsQnaInqireAjax(GnrlBbscttVO bbsctt){
bbsctt.setBbsTyCd("05");
bbsctt.setServerDv("sopmal");
bbsctt.setReqUrl("mpage");
//게시글 노출 항목 설정값과 게시판 목록 조회
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")
public ResponseEntity<?> selectFileInfo(HttpServletRequest request, ModelMap model, GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//BO에서 API 호출
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,GnrlBbscttVO bbsctt){
bbsctt.setServerDv("sopmal");
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttUpdtPopupForm",bbsctt),
model,
"resultMap"
);
model.addAttribute("bbsctt", bbsctt);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire",bbsctt),
model,
"mpageResultMap"
);
return Util.getDeviceType(request)+"/mpage/act/MyGoodsQnaDtlUpdtU";
}
/**
* 나의 리뷰 조회 폼
* @param bbsctt
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMyRvwInqireForm")
public String selectMyRvwInqireForm(HttpServletRequest request, ModelMap model,GnrlBbscttVO bbsctt){
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBORvwBnefInfo",bbsctt),
model,
"mlgAccmlNtc"
);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
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
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectWritngPosblRvwInqire")
public String selectWritngPosblRvwInqire(HttpServletRequest request, ModelMap model,RvwVO rvwVO){
rvwVO.setRvwBbscttDv("rvw");
rvwVO.setServerDv("sopmal");
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOWritPosblRvw",rvwVO),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/mpage/act/WritngPosblRvwR";
}
/**
* 나의 리뷰 조회 작성 가능한 리뷰 ajax(인피니트스크롤)
* @param rvwVO
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectWritngPosblRvwInqireAjax")
public ResponseEntity<?> selectWritngPosblRvwInqireAjax(RvwVO rvwVO){
rvwVO.setRvwBbscttDv("rvw");
rvwVO.setServerDv("sopmal");
//BO에서 API 호출
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOWritPosblRvw",rvwVO),
ReplyFromResrc::getReply
);
}
/**
* 나의 리뷰 조회 (나의 리뷰)
* @param rvwVO
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMyRvwInqire")
public String selectMyRvwInqire(HttpServletRequest request, ModelMap model,RvwVO rvwVO){
rvwVO.setReqUrl("mpage");
rvwVO.setServerDv("sopmal");
rvwVO.setUseAt("Y");
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOMyRvwListInqire",rvwVO),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/mpage/act/MyRvwR";
}
/**
* 나의 리뷰 조회 (나의 리뷰) ajax (인피니트스크롤)
* @param rvwVO
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMyRvwInqireAjax")
public ResponseEntity<?> selectMyRvwInqireAjax(RvwVO rvwVO){
rvwVO.setReqUrl("mpage");
rvwVO.setServerDv("sopmal");
rvwVO.setUseAt("Y");
//BO에서 API 호출
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOMyRvwListInqire",rvwVO),
ReplyFromResrc::getReply
);
}
/**
* 리뷰 작성 등록 폼
* @param rvwVO
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRvwWritngPopupForm")
public String selectRvwWritngPopupForm(HttpServletRequest request, ModelMap model, RvwVO rvwVO){
rvwVO.setRvwBbscttDv("rvw");
rvwVO.setServerDv("sopmal");
//리뷰 등록 가능 여부 true시 등록폼 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttRegistPopupForm",rvwVO),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/mpage/act/RvwWritngPopupC";
}
/**
* 게시글 삭제
*
* @param bbsctt
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/deleteRvwBbscttDel", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteRvwBbscttDel(@RequestBody GnrlBbscttVO bbsctt) {
bbsctt.setServerDv("sopmal");
//BO에서 API 호출
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttDel",bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 리뷰 간편 등록
*
* @param vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRvwEasyRegistForm", method = RequestMethod.POST)
public String selectRvwEasyRegistForm(@RequestBody RvwVO vo, ModelMap model, HttpServletRequest request) {
vo.setRvwBbscttDv("rvw");
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttRegistPopupForm", vo),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/mpage/act/RvwEasyRegistC";
}
}

View File

@@ -0,0 +1,21 @@
package com.wb.domainserver.domain.sopmal.mpage.act.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BbsFormAnswVO extends AbstractVO{/**
*
*/
private static final long serialVersionUID = 1030532645994110994L;
// 답변 출력
/** 게시글 고유번호 */
private Integer bbscttInnb;
/** 문항 고유번호 */
private Integer qesitmInnb;
/** 답변내용 */
private String answCn;
}

View File

@@ -0,0 +1,24 @@
package com.wb.domainserver.domain.sopmal.mpage.act.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BbsFormItmVO extends AbstractVO{
/**
*
*/
private static final long serialVersionUID = 8087305150158091337L;
/** 문항 번호*/
private String qesitmInnb;
/** 항목고유 id*/
private String itmInnb;
/** 항목내용*/
private String itmCn;
/** 항목순서*/
private Integer itmOrdr;
}

View File

@@ -0,0 +1,39 @@
package com.wb.domainserver.domain.sopmal.mpage.act.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class BbsFormVO extends AbstractVO{
/**
*
*/
private static final long serialVersionUID = 1607485104712731512L;
/** 게시판 문항 고유번호*/
private String qesitmInnb;
/** 게시판 id*/
private String bbsInnb;
/** 추가항목구분 */
private String aditItmDv;
/** 문항명 */
private String qesitmNm;
/** 문항설명 */
private String qesitmDc;
/** 문항유형 */
private String itmTy;
/** 문항순서 */
private Integer qesitmOrdr;
/** 사용여부 */
private String useAt;
/** 게시판 문항의 요소들*/
private List<BbsFormItmVO> bbsFormItmList;
}

View File

@@ -0,0 +1,58 @@
package com.wb.domainserver.domain.sopmal.mpage.act.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class CmVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 댓글고유번호 */
private String cmInnb;
/** 게시글고유번호 */
private String bbscttInnb;
/** 게시판ID */
private String bbsId;
/** 부모댓글고유번호 */
private String parntsCmInnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 회원ID */
private String mbrid;
/** 회원명 */
private String mbrNm;
/** DEPTH */
private Integer depth;
/** 내용 */
@NotBlank(message = "내용")
@Length(min = 0, max = 100, message = "내용")
private String cn;
/** 비밀번호 */
private String password;
/** 비밀댓글여부 */
private String secretBbscttAt;
/** IP */
private String ip;
/** 사용여부 */
private String useAt;
/** 삭제작업자 */
private Integer delusr;
/** 삭제일시 */
private Date delDt;
/**작성자 구분 코드*/
private String regusrDvCd;
/**쇼핑몰코드*/
private String sopmalCd;
/** 신규댓글 */
private String newCm;
/** 댓글삭제리스트 */
private String[] delCmInnbArr;
/*요청페이지구분 쇼핑몰인지 관리자인지*/
private String reqPageDv;
}

View File

@@ -0,0 +1,23 @@
package com.wb.domainserver.domain.sopmal.mpage.act.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class DelInfoVO{
/** 삭제 회원 구분 코드 */
private String mbrDvCd;
/** 삭제 회원 고유번호 */
private String regusrDvCd;
/** 삭제 회원 고유번호 */
private String regusr;
/** 상품 고유번호 */
private String goodsInnb;
/** 게시글 고유번호*/
private String bbscttInnb;
}

View File

@@ -0,0 +1,394 @@
package com.wb.domainserver.domain.sopmal.mpage.act.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class RvwVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드 */
private String sopmalCd;
/**
* 리뷰정보 (fm_shop_goods)
*/
/** 게시글 고유정보 */
private Integer bbscttInnb;
/** 게시판 고유번호 */
private Integer bbsInnb;
/** 판매상품 고유번호 */
private Integer sleGoodsInnb;
/** 주문상품고유번호 */
private Integer ordrGoodsInnb;
/** 주문상품옵션고유번호 */
private Integer ordrGoodsOptnInnb;
/*주문고유번호*/
private String ordrInnb;
/** 주문상품옵션구분코드 */
private String ordrGoodsOptnDvCd;
/** 베스트여부 */
private String bstAt;
/** 등록 회원고유번호 */
private Integer mbrInnb;
/** (등록아이디) */
private String mbrid;
/** (등록자명) */
private String mbrNm;
/** 내용 */
private String cn;
/** 조회건수 */
private Integer inqireCnt;
/** 댓글건수 */
private Integer cmCnt;
/** (다중",") */
private Integer evlScore;
/** 평균점수 */
private Integer avrgScore;
/** 에디터 사용여부 */
private String editrUseAt;
/** 포토리뷰여부 */
private String photoRvwAt;
/** IP */
private String ip;
/** 삭제여부 */
private String delAt;
/** 삭제일시 */
private String delDt;
/** 노출등록자이름 */
private Integer expsrRegusrNm;
// 추가항목 정보(FM_BOARD_ADDITM)
private List<com.wb.domainserver.domain.sopmal.mpage.act.vo.BbsFormVO> bbsFormVoList;
// 추가 답변 내용 (FM_BOARD_ADDITM)
private List<com.wb.domainserver.domain.sopmal.mpage.act.vo.BbsFormAnswVO> bbsFormAnswList;
//게시글 정보 (FM_BOARDMANAGER)
/** 비밀글 사용여부 */
private Boolean secretBbcttUseAt;
// 상품정보 (fm_shop_goods)
/** 상품 이름 */
private String goodsNm;
/** 상품 설명 */
private String goodsDc;
/** 상품 간략설명 */
private String srtDc;
/** 상품 가격 */
private Integer slePric;
// 상품이미지 정보(fm_goods_image)
/** 상품 이미지 위치 */
private String img;
// 리뷰 댓글정보(fm_boardcomment)
/** 댓글 고유번호*/
private Integer cmInnb;
/** 댓글 등록자 구분 */
private String commetRegusrDv;
/** 댓글 작성자 */
private String commetMbrNm;
/** 댓글 작성자 아이디*/
private String commetmbrId;
/** 댓글 ip*/
private String commetIp;
/** 댓글 내용 */
private String commetCn;
/** 댓글 등록일 */
private String commetRegustDt;
// 검색조건
/** 검색어*/
private String searchWord;
/** 비밀글 제외 여부*/
private String serchSecrtBbscttUseAt;
/** 삭제글 제외 여부 */
private String serchDelAt;
/** 사진포함 여부*/
private String serchPhotoRvwAt;
/** 검색 시작일*/
private String saerchStatrDate;
/** 검색 종료일*/
private String saerchEndDate;
/** 세부항목 검색(내용 고유번호)*/
private String[] searchFormItm;
/** 베스트 후기 포함 여부*/
private String searchBstAt;
/** 네이버페이 포함 여부*/
private String searchNpayAt;
/** 주문번호 검색*/
private String searchOrderInnb;
/** 댓글 여부*/
private String searchCommetAt;
/**
* 첨부파일 정보
*/
/* 파일 고유번호 */
private String bbscttAtchmnfilInnb;
/** 원본파일명 */
private String orginlFilNm;
/** 변환파일명 */
private String sysFilNm;
/** 파일타입 */
private String filTy;
/** 파일크기 */
private String filMg;
/** 파일경로 */
private String filCours;
/** 파일정보 */
private List<HashMap<String, Object>> fileInfo;
/*파일 존재여부*/
private String filExtAt;
/*현존 파일 정보*/
private String extFiles;
/*기존 파일 정보*/
private String filesInfo;
/*기존 파일 변화 여부*/
private String extFilChangeAt;
/*대표이미지 첨부 구분*/
private String represntFilAt;
/*파일 수정여부*/
private String filChangeAt;
/*파일 허용 확장자*/
private String acceptFileExtensions;
/** 댓글 리스트 */
private String[] cmList;
private String boardAnswInnb;
private String bbsNm;
/** 항목고유번호 리스트 */
private String[] itmInnbAns;
/** 답변내용 리스트 */
private String[] answCnAns;
private String[] qesitmInnbAns;
/** 항목고유번호 (분류) */
private String itmInnbDiv;
/** 답변내용 (분류) */
private String answCnDiv;
private String qesitmInnbDiv;
/*
* 상세 조회
*/
/*상품고유번호*/
private String goodsInnb;
/*추천상품고유번호*/
private String recomendGoodsInnb;
/** 상세조회와 페이지 구분처리 */
private String dtlPop;
/*상품 고유번호 배열*/
private String[] goodsInnbArr;
/*주문고유번호*/
private String[] ordrInnbArr;
/**
* 게시글 정보
*/
/** 부모게시글고유번호 */
private String parntsBbscttInnb;
/** 게시판ID */
private String bbsId;
/** DEPTH */
private Integer depth;
/*회원구분코드*/
private String mbrDvCd;
/** 등록자구분코드 */
private String regusrDvCd;
/** 등록자ID */
private String regusrId;
/** 등록자명 */
private String regusrNm;
/** 비밀번호 */
@Length(min = 0, max = 20, message = "비밀번호")
private String password;
/** 제목 */
@NotBlank(message = "제목")
@Length(min = 0, max = 100, message = "제목")
private String sj;
/** 댓글사용여부 */
private String cmUseAt;
/** 추천건수 */
private Integer recomendCnt;
/** 비추천건수 */
private Integer nonrecomendCnt;
/** 정렬순서 */
private Integer sortOrdr;
/** 정렬순서여부 */
private String sortOrdrAt;
/** 비밀글여부 */
private String secretBbscttAt;
/** 공지여부 */
private String ntcAt;
/** 노출여부 */
private String expsrAt;
/** 온라인여부 */
private String onlineAt;
/** 오프라인여부 */
private String oflneAt;
/** 게시기간설정여부 */
private String ntcePdSetupAt;
/** 게시시작일자 */
private String ntceBgnDe;
/** 게시종료일자 */
private String ntceEndDe;
/** 공지기간설정여부 */
private String ntcPdSetupAt;
/** 공지시작일자 */
private String ntcBgnDe;
/** 공지종료일자 */
private String ntcEndDe;
/** 메인노출여부 */
private String mainExpsrAt;
/** NPay 게시글 일련번호 */
private String npayBbscttSnb;
/** NPay 답변 전송여부*/
private String npayAnswTrnsmisAt;
/** NPay 답변번호*/
private String npayAnswNb;
/** NPay 상품주문번호*/
private String npayGoodsOrdrnb;
/** NPay 리뷰유형코드*/
private String npayRvwTyCd;
/** AGENT */
private String agent;
/** 사용여부 */
private String useAt;
/**
* 검색조건
*/
/** 검색구분 */
private String srchDv;
/** 검색어 */
private String srchKeyword;
/*검색어 배열(상품상세 키워드 검색)*/
private String[] srchKeywordArr;
/** 검색 시작일 */
private String srchStartDt;
/** 검색 종료일 */
private String srchEndDt;
/** 게시판 이름 코드 */
private String bbsTyCd;
/** 답변 상태 */
private String answSttus;
/** 분류명 */
private String srchitmInnb;
/** 네이버페이 후기 여부*/
private String npayAt;
/** 주문번호 후기 여부*/
private String srchOrdrInnb;
/** 댓글 여부*/
private String srchCmAt;
/** 기간 */
private String datePeriod;
/** 항목내용 */
private String itmCn;
/* 사용자 > 상품 상세 > 리뷰 정렬*/
private String sortDv;
/**
* 게시글추가문항답변
*/
/** 문항답변고유번호 */
private String qesitmAnswInnb;
/** 문항고유번호 */
private String qesitmInnb;
/** 문항필수여부 */
private String qesitmEssntlAt;
/** 문항사용여부 */
private String qesitmUseAt;
/** 문항순서 */
private String qesitmOrdr;
/** 항목고유번호 */
private String itmInnb;
/** 답변내용 */
private String answCn;
/** 문항필수여부(배열) */
private String[] qesitmEssntlAtArr;
/** 문항고유번호(배열) */
private String[] qesitmInnbArr;
/** 문항 명(배열) */
private String[] qesitmNmArr;
/** 항목고유번호(배열) */
private String[] itmInnbArr;
/** 답변내용(배열) */
private String[] answCnArr;
/** 답변 여부(배열) */
private String[] qesitmAtArr;
/** 타입 코드 */
private String[]itmTyCdArr;
/** 리뷰 문항 필수 여부 배열*/
private String[] rvwQesitmEssntlAtArr;
/** 리뷰 문항 명 배열*/
private String[] rvwQesitmNmArr;
/** 리뷰 답변 여부 배열*/
private String[] rvwQesitmAtArr;
/** 리뷰 문항고유번호 배열*/
private String[] rvwQesitmInnbArr;
/** 리뷰 평점 배열*/
private String[] evlScoreArr;
/** 리뷰 항목고유번호 배열*/
private String[] rvwItmInnbArr;
/** 선택삭제 게시글리스트 */
private String[] delBbscttInnbArr;
/**
* 권한
*/
//권한 구분 (REDNG : 읽기권한, REGIST: 쓰기권한, CM: 댓글등록권한)
private String authDv;
//권한 결과값
private String authResult;
/*
* 요청 값
*/
/*요청 페이지 구분(고객센터=>csc , 서브페이지=>subPage, 이용안내 => useGudiance, crm => crm)*/
private String reqUrl;
/* 서버 구분 sopmal or mngr*/
private String serverDv;
/*상세 구분*/
private String dtlAt;
/*사용자 등록,수정시 목록이동 or 등록,수정폼 유지*/
private String listAt;
/*리뷰,게시글 구분*/
private String rvwBbscttDv;
/**
* 게시판 설정
*/
/* 파일 첨부 여부*/
private String filAtch;
/*게시글발송방식코드*/
private String bbscttSndngMthCd;
/*sms 관련*/
private String bbscttSndngDvCd;
/*삭제 관련*/
/*회수 마일리지 관련 정보*/
private List<DelInfoVO> delInfoArr;
/*모바일 pc 구분*/
private String diviceDv;
}

View File

@@ -0,0 +1,446 @@
package com.wb.domainserver.domain.sopmal.mpage.bnef.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.mpage.bnef.vo.MyBnefCashVO;
import com.wb.domainserver.domain.sopmal.mpage.bnef.vo.MyBnefCouponVO;
import com.wb.domainserver.domain.sopmal.mpage.bnef.vo.MyBnefMbrGradVO;
import com.wb.domainserver.domain.sopmal.mpage.bnef.vo.MyBnefMlgVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/sopmal/mpage/bnef")
@Slf4j
public class MyBnefController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 회원 등급 혜택 조회
* @param request
* @param model
* @param gradVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectMbrGradInqire")
public String selectCscMainForm(HttpServletRequest request, ModelMap model, MyBnefMbrGradVO gradVO) {
gradVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/setup/gradbnef/selectBOMbrGradListInqire", gradVO),
model,
"resultMap"
);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", gradVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/bnef/MbrGradR";
}
/**
* 마이페이지 > 마일리지 내역 이동
* @param mlgVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectMlgDtlsInqireForm")
public String selectMlgDtlsInqireForm(MyBnefMlgVO mlgVO, ModelMap model, HttpServletRequest request) {
mlgVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOMlgManagePopupForm", mlgVO),
model,
"resultMap"
);
model.addAttribute("paramVO", mlgVO);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", mlgVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/bnef/MlgDtlsRForm";
}
/**
* 마이페이지 > 마일리지 목록 조회
* @param mlgVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectMlgDtlsInqire")
public String selectMlgDtlsInqire(MyBnefMlgVO mlgVO, ModelMap model, HttpServletRequest request) {
mlgVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOMlgListInqire", mlgVO),
model,
"resultMap"
);
model.addAttribute("paramVO", mlgVO);
return Util.getDeviceType(request) + "/mpage/bnef/MlgDtlsR";
}
/**
* 마이페이지 > 마일리지 목록 조회 > 스크롤
* @param mlgVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectMlgDtlsScrolInqire")
public ResponseEntity<WnbtResponse> selectMlgDtlsScrolInqire(MyBnefMlgVO mlgVO) {
mlgVO.setServerDv("sopmal");
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOMlgListInqire", mlgVO),
ReplyFromResrc::getReply
);
}
/**
* 쿠폰 내역 폼 이동
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCouponDtlsForm")
public String selectCouponDtlsForm(MyBnefCouponVO couponVO, ModelMap model, HttpServletRequest request) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBOHoldCouponDtlsForm", couponVO),
model,
"resultMap"
);
model.addAttribute("paramVO", couponVO);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", couponVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/bnef/CouponDtlsRForm";
}
/**
* 사용가능 쿠폰 조회
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCouponUsePosblDtlsInqire")
public String selectCouponUsePosblDtlsInqire(MyBnefCouponVO couponVO, ModelMap model, HttpServletRequest request) {
couponVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBOCouponUsePosblDtlsInqire", couponVO),
model,
"resultMap"
);
model.addAttribute("paramVO", couponVO);
return Util.getDeviceType(request) + "/mpage/bnef/UsePosblCouponDtlsR";
}
/**
* 마이페이지 > 쿠폰 > 사용가능 쿠폰 조회 > 스크롤
* @param couponVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCouponUsePosblDtlsScrolInqire")
public ResponseEntity<WnbtResponse> selectCouponUsePosblDtlsScrolInqire(MyBnefCouponVO couponVO) {
couponVO.setServerDv("sopmal");
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBOCouponUsePosblDtlsInqire", couponVO),
ReplyFromResrc::getReply
);
}
/**
* 쿠폰 다운로드 가능 조회
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectDwldCouponDtlsInqire")
public String selectDwldCouponDtlsInqire(MyBnefCouponVO couponVO, ModelMap model, HttpServletRequest request) {
couponVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBODwldCouponDtlsInqire", couponVO),
model,
"resultMapDwld"
);
model.addAttribute("paramVO", couponVO);
// return "sopmal/mpage/bnef/DwldCouponDtlsR";
return Util.getDeviceType(request) + "/mpage/bnef/DwldCouponDtlsR";
}
/**
* 마이페이지 > 쿠폰 > 다운로드 가능 쿠폰 조회 > 스크롤
* @param couponVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectDwldCouponDtlsScrolInqire")
public ResponseEntity<WnbtResponse> selectDwldCouponDtlsScrolInqire(MyBnefCouponVO couponVO) {
couponVO.setServerDv("sopmal");
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBODwldCouponDtlsInqire", couponVO),
ReplyFromResrc::getReply
);
}
/**
* 쿠폰 정보 조회 팝업
*
* @param CouponVO couponVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCouponDtlInfoInqirePopup")
public String selectCouponDtlInfoInqirePopup(MyBnefCouponVO couponVO, ModelMap model, HttpServletRequest request) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBOCouponInfoInqirePopup", couponVO),
model,
"resultMap"
);
// return "sopmal/mpage/bnef/UsePosblCouponDtlPopupR";
return Util.getDeviceType(request) + "/mpage/bnef/UsePosblCouponDtlPopupR";
}
/**
* 쿠폰 정보 조회 팝업
*z
* @param CouponVO couponVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDwldYCouponDtlInfoInqirePopup")
public String selectDwldYCouponDtlInfoInqirePopup(MyBnefCouponVO couponVO, ModelMap model, HttpServletRequest request) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBODwldYCouponInfoInqirePopup", couponVO),
model,
"resultMap"
);
// return "sopmal/mpage/bnef/UsePosblCouponDtlPopupR";
return Util.getDeviceType(request) + "/mpage/bnef/UsePosblCouponDtlPopupR";
}
/**
* 쿠폰 코드 등록 오프라인 쿠폰 등록 ( 인증번호 쿠폰 )
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertCouponRegist")
public ResponseEntity<WnbtResponse> insertCouponRegist(@Validated MyBnefCouponVO couponVO, BindingResult bindingResult) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/insertBOCodeCouponRegist", couponVO),
ReplyFromResrc::getReply
);
}
/**
* (모든) 쿠폰 다운로드
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertDwldCouponAllRegist")
public ResponseEntity<WnbtResponse> insertDwldCouponAllRegist(@Validated MyBnefCouponVO couponVO, BindingResult bindingResult) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/insertBODwldCouponAllRegist", couponVO),
ReplyFromResrc::getReply
);
}
/**
* 쿠폰 다운로드
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertDwldCouponRegist")
public ResponseEntity<WnbtResponse> insertDwldCouponRegist(@Validated MyBnefCouponVO couponVO, BindingResult bindingResult) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/insertBODwldCouponAllRegist", couponVO),
ReplyFromResrc::getReply
);
}
/**
* 쿠폰 다운로드 여부 조회 (이벤트 페이지)
*
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCouponDownYn")
public ResponseEntity<WnbtResponse> selectCouponDownYn(@Validated MyBnefCouponVO couponVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectCouponDownYn", couponVO),
ReplyFromResrc::getReply
);
}
/***************************************************************
* 마이페이지 > 충전형 마일리지 관련 서비스 시작
***************************************************************/
/**
* 마이페이지 > 충전형 마일리지 내역 이동
* @param mlgVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCashDtlsInqireForm")
public String selectCashDtlsInqireForm(MyBnefMlgVO mlgVO, ModelMap model, HttpServletRequest request) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOCashBlce", mlgVO),
model,
"resultMap"
);
model.addAttribute("paramVO", mlgVO);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 충전형 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", mlgVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/bnef/CashDtlsRForm";
}
/**
* 마이페이지 > 충전형 마일리지 목록 조회
* @param mlgVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCashDtlsInqire")
public String selectCashDtlsInqire(MyBnefMlgVO mlgVO, ModelMap model, HttpServletRequest request) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOCashList", mlgVO),
model,
"resultMap"
);
model.addAttribute("paramVO", mlgVO);
return Util.getDeviceType(request) + "/mpage/bnef/CashDtlsR";
}
/**
* 마이페이지 > 충전형 마일리지 목록 조회 > 스크롤
* @param mlgVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectCashDtlsScrolInqire")
public ResponseEntity<WnbtResponse> selectCashDtlsScrolInqire(MyBnefMlgVO mlgVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOCashList", mlgVO),
ReplyFromResrc::getReply
);
}
/**
* 마이페이지 > 충전형 마일리지 > 상품권번호조회
* @param mlgVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectGiftCardCrtfcNb")
public ResponseEntity<WnbtResponse> selectGiftCardCrtfcNb(MyBnefCashVO vo) {
if (vo.getCrtfcNb() == null || vo.getCrtfcNb().isEmpty()) {
throw new WnbtRestException("상품권 인증번호를 입력해주세요");
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOGiftCardCrtfcNb", vo),
ReplyFromResrc::getReply
);
}
/**
* 마이페이지 > 충전형 마일리지 > 상품권 등록
* @param mlgVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertGiftCard")
public ResponseEntity<WnbtResponse> insertGiftCard(MyBnefCashVO vo) {
if (vo.getPinNb() == null || vo.getPinNb().isEmpty()) {
throw new WnbtRestException("상품권 pin 번호를 입력해주세요");
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/insertBOCashReg", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,19 @@
package com.wb.domainserver.domain.sopmal.mpage.bnef.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyBnefCashVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/*상품권 인증번호*/
private String crtfcNb;
/*상품권 pin 번호*/
private String pinNb;
}

View File

@@ -0,0 +1,194 @@
package com.wb.domainserver.domain.sopmal.mpage.bnef.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigInteger;
import java.util.List;
/**
*
* 마이페이지 쿠폰 VO
* @author 추지훈.
* @since 2024-03-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-05 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyBnefCouponVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* 쿠폰정보
*/
/** 다운로드 쿠폰 고유번호 */
private BigInteger dwldCouponInnb;
/** 쿠폰 고유번호 */
private Integer couponInnb;
/** 회원 고유번호 */
private Integer mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 회원 명 */
private String mbrNm;
/** 회원 휴대폰번호 */
private String mbtlnb;
/** 쿠폰팩 고유번호 */
private Integer cupnpkInnb;
/** 오프라인쿠폰 고유번호 */
private Integer oflneCouponInnb;
/** 쿠폰 발송 고유번호 */
private Integer couponSndngInnb;
/** 쿠폰 발송 유형코드 */
private String couponSndngTy;
/** 발송구분 */
private String sndngDv;
/** 발송대상 구분 */
private String sndngTrgetDv;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 다운로드 쿠폰팩명 */
private String cupnpkNm;
/** 다운로드 쿠폰팩 설명 */
private String cupnpkDc;
/** 다운로드 쿠폰명 */
private String coupNm;
/** 다운로드 쿠폰 설명 */
private String couponDc;
/** 사용환경코드 */
private String useEnvrnCd;
/** 단독사용, 공동사용 */
private String otrCouponSmtmUseAt;
/** 중복다운로드여부 */
private String dplctDwldAt;
/** 중복할인여부 */
private String dplctDscntAt;
/** 사용가능금액 */
private String usePosblAmt;
/** 상품카테고리 제한구분( 전체상품(all), 상품/카테고리(issue) ) */
private String goodsCtgryLmttDv;
/** 유효기간시작일시 */
private String validpdBgnDt;
/** 유효기간시작일시 포맷 yyyy-mm-dd */
private String validpdBgnDe;
/** 유효기간종료일시 */
private String validpdEndDt;
/** 유효기간종료일시 포맷 yyyy-mm-dd */
private String validpdEndDe;
/** 유효기간 남은 일수 */
private String validpdDay;
/** 쿠폰 사용여부 */
private String couponUseAt;
/** 쿠폰 사용 일시 */
private String couponUseDt;
/** 오프라인쿠폰 인증번호 */
private String oflneCouponCrtnb;
/** 사용처구분 */
private String useplcDv;
/** 복원 원본쿠폰 */
private String recovryOrginlCoupon;
/** 사용자 다운로드할 쿠폰 목록 */
private List<UserDwldVO> downloadCouponList;
// 쿠폰 혜택
/** 다운로드 쿠폰 혜택 고유번호 */
private Integer dwldCouponBnefInnb;
/** 혜택구분 */
private String bnefDv;
/** 상품할인구분 */
private String goodsDscntDv;
/** 추가할인금액 */
private String aditDscntAmt;
/** 추가할인비율 */
private String aditDscntRt;
/** 할인최대금액 */
private String dscntMxmmAmt;
/** 무료, 금액 */
private String dlvyAmtDscntDv;
/** 배송비할인금액 */
private String dlvyAmtDscntAmt;
/** 배송비최대할인금액 */
private String dlvyAmtMxmmDscntAmt;
// 쿠폰 적용 상품
/** 쿠폰 적용상품 고유번호 */
private Integer dwldCouponApplcGoodsInnb;
/** 상품적용구분 */
private String goodsApplcDv;
/** 판매상품 고유번호 */
private Integer sleGoodsInnb;
/** 혜택 적용 판매상품 고유번호 리스트 */
private List<Integer> sleGoodsInnbList;
/** 혜택 제외 판매상품 고유번호 리스트 */
private List<Integer> ExclSleGoodsInnbList;
/** 카테고리 ID */
private Integer ctgryId;
/** 혜택 적용 카테고리 ID 리스트 */
private List<Integer> ctgryIdList;
/** 혜택 제외 카테고리 ID 리스트 */
private List<Integer> ExclCtgryIdList;
// 검색조건
/** 검색_회원아이디, 회원명 */
private String searchKeyword;
/** 검색_발급일 시작 */
private String srchStartDate;
/** 검색_발급일 종료 */
private String srchEndDate;
/** 검색_다운로드쿠폰사용여부 */
private String srchUseAt;
/** 쿠폰 발급 혹은 쿠폰 등록 시 쿠폰 고유번호 */
private String couponArray;
/** 쿠폰 발급 혹은 쿠폰 등록 시 쿠폰 쇼핑몰 코드*/
private String[] sopmalArray;
/** 쿠폰 다운로드 시 쿠폰 쇼핑몰 코드 */
private String couponSopmalCd;
/** 쿠폰 다운로드 시 쿠폰 발송 고유번호 배열 */
private String couponSndngArray;
/** 그룹 코드 */
private String groupCd;
/** 주문 고유번호 ( 주문 쿠폰 사용 내역 조회 ) */
private String ordrInnb;
/** JSON 형태의 회원 리스트 ( 발급하기 ) */
private String jsonMbrList;
private String serverDv;
}

View File

@@ -0,0 +1,44 @@
package com.wb.domainserver.domain.sopmal.mpage.bnef.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 마이페이지 쿠폰 VO
* @author 추지훈.
* @since 2024-03-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-05 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyBnefMbrGradVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* 회원 등급 정보
*/
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 모바일_서버구분 */
private String serverDv;
}

View File

@@ -0,0 +1,113 @@
package com.wb.domainserver.domain.sopmal.mpage.bnef.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyBnefMlgVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* 마일리지 정보
*/
/** 마일리지 고유번호 */
private Integer mlgInnb;
/** 주문고유번호 */
private Integer ordrInnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 게시글고유번호 */
private Integer bbscttInnb;
/** 주문코드 */
private String ordrCd;
/** 마일리지구분 */
private String mlgDvCd;
/** 마일리지적립구분 */
private String mlgAccmlDvCd;
/** 마일리지적용구분 */
/** 적립(지급) : 리뷰(일반,포토,한달),구매,이벤트, 관리자 사용(차감, 소멸) : 구매, 관리자, 기간만료 */
private String mlgApplcDvCd;
/** 마일리지적용사유 */
private String mlgApplcResn;
/** 적립금액 */
private BigDecimal accmlmnyAmt;
/** 잔액 */
private BigDecimal blce;
/** 손실 */
private BigDecimal loss;
/** 사용가능시작일시 */
private Date usePosblBgnDt;
/** 사용가능종료일시 */
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX")
private Date usePosblEndDt;
/** 주문정보 */
private String ordrInfo;
/** 관리코드 */
private String manageCd;
/** 관리메모 */
private String manageMemo;
/** 만료여부 */
private String endAt;
/** 취소여부 */
private String canclAt;
/** 취소일시 */
private Date canclDt;
/** 소멸 배치 묶음 */
private String extshBatchBundle;
/** 온오프 구분 */
private String onlineOflneDvCd;
/** 매장고뷰번호 */
private Integer strInnb;
/** 매장코드 */
private String strCd;
/** 매장명 */
private Integer strnm;
/** 매장구분 */
private String strDvCd;
/** 포스코드 */
private String posCd;
/** 등록자구분 */
private String regusrDvCd;
/** 수정자구분 */
private String updusrDvCd;
/** 마일리지 유효기간 */
private long mlgValidDt;
// 검색
/** 검색_마일리지 적립 구분코드 */
private String srchMlgAccmlDvCd;
/** 검색_브랜드명 */
private String srchSopmalCd;
/** 검색_시작날짜 */
private String srchStartDate;
/** 검색_종료날짜 */
private String srchEndDate;
/** 유효기간 수정_종료일자 */
private String usePosblEndDtStr;
private String serverDv;
// 사용자 > 마일리지 내역
private String bgnDt;
private String endDt;
}

View File

@@ -0,0 +1,63 @@
package com.wb.domainserver.domain.sopmal.mpage.bnef.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigInteger;
/**
*
* 쿠폰 VO
* @author 추지훈
* @since 2023-12-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-11 추지훈 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class UserDwldVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 다운로드쿠폰 고유번호 */
private BigInteger dwldCouponInnb;
/** 쿠폰 고유번호 */
private Integer couponInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 회원고유번호 */
private Integer mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 쿠폰팩고유번호 */
private Integer cupnpkInnb;
/** 오프라인쿠폰 고유번호 */
private Integer oflneCouponInnb;
/** 쿠폰발송 고유번호 */
private Integer couponSndngInnb;
/** 쿠폰팩 명 */
private String cupnpkNm;
/** 쿠폰팩 설명 */
private String cupnpkDc;
/** 회원 명 */
private String mbrNm;
/** 휴대폰번호 */
private String mbtlnb;
/** 오프라인쿠폰 인증번호 */
private String oflneCouponCrtnb;
/** 사용처 구분 */
private String useplcDvCd;
}

View File

@@ -0,0 +1,666 @@
package com.wb.domainserver.domain.sopmal.mpage.mbr.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.wb.domainserver.domain.sopmal.csc.vo.GnrlBbscttVO;
import com.wb.domainserver.domain.sopmal.mbr.vo.MbrVO;
import com.wb.domainserver.domain.sopmal.mpage.mbr.vo.*;
import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyOrdrDlvyVO;
import com.wb.domainserver.util.string.StringUtil;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.BoResultMapConverter;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter;
import lombok.extern.slf4j.Slf4j;
/**
*
* 마이페이지 회원
* @author 추지훈.
* @since 2024-02-29
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-29 추지훈. 최초 생성
* 2024-10-11 이대환. 회원정보수정 수정
*
* </pre>
*/
@Controller
@RequestMapping("/sopmal/mpage/mbr")
@Slf4j
public class MyMbrController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 사용자 > 마이페이지 > 메인 화면 이동
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMpageMainInqire")
public String selectMpageMainInqire(HttpServletRequest request, ModelMap model, MyOrdrDlvyVO ordrDlvyVO) throws Exception {
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO));
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMpageOrdrSttusInqire", ordrDlvyVO),
model,
"ordrSttusMap"
);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOWslistInqire", ordrDlvyVO),
model,
"wishListMap"
);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", ordrDlvyVO),
model,
"mpageResultMap"
);
String diviceTy = Util.getDeviceType(request);
if("sopmal".equals(diviceTy)){ //pc버전만 조회
//qna 조회
GnrlBbscttVO bbsctt = new GnrlBbscttVO();
bbsctt.setBbsTyCd("05");
bbsctt.setBbsId("goods_qna");
bbsctt.setServerDv("sopmal");
bbsctt.setReqUrl("mpage");
bbsctt.setPageUnit(5);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"qnaResultMap"
);
//리뷰 조회
bbsctt.setUseAt("Y");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOMyRvwListInqire", bbsctt),
model,
"rvw"
);
}
return diviceTy + "/mpage/main/MpageMainR";
}
/**
* 회원 비밀번호 확인 폼 이동
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMbrInfoUpdtPasswordCnfirmForm")
public String selectMbrInfoUpdtPasswordCnfirmForm(MyMbrVO mymbrVO, ModelMap model, HttpServletRequest request){
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOExtrlIntrlckAt", mymbrVO)
);
mymbrVO.setExtrlIntrlckAt((String) resultMap.get("extrlIntrlckAt"));
if(mymbrVO.getExtrlIntrlckAt().equals("Y")) {
return selectMbrInfoUpdtForm(mymbrVO, model, request);
}
return Util.getDeviceType(request) + "/mpage/mbr/MbrInfoUpdtPasswordCnfirmR";
}
/**
* 회원 비밀번호 확인
* @param mymbrVO
* @param bindingResult
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrInfoUpdtPasswordCnfirm")
public ResponseEntity<WnbtResponse> selectMbrInfoUpdtPasswordCnfirm(MyMbrVO mymbrVO){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrPasswordCnfirm", mymbrVO),
ReplyFromResrc::getReply
);
}
/**
* 마이페이지 회원 정보 수정 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMbrInfoUpdtForm")
public String selectMbrInfoUpdtForm(MyMbrVO mymbrVO, ModelMap model, HttpServletRequest request){
mymbrVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrInfoUpdtInqire", mymbrVO),
model,
"resultMap"
);
return Util.getDeviceType(request) + "/mpage/mbr/MbrInfoUpdtU";
}
/**
* 회원 정보 수정 (아이디 수정)
* @param mymbrVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateMbrIdUpdt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateMbrIdUpdt(@Validated MyMbrIdChngVO mymbrVO, BindingResult bindingResult){
// 정합성 검사
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
/*1 비밀번호 정규 표현식 확인*/
String password = mymbrVO.getNewPassword();
String pwPattern = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*\\W)?[a-zA-Z\\d\\W]{6,20}$|^(?=.*[a-zA-Z])(?=.*\\W)(?=.*\\d)?[a-zA-Z\\W\\d]{6,20}$|^(?=.*\\d)(?=.*\\W)(?=.*[a-zA-Z])?[a-zA-Z\\d\\W]{6,20}$";
Matcher matcher = Pattern.compile(pwPattern).matcher(password);
if (!matcher.matches()) {
throw new WnbtRestException("비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 6~20자로 입력해주세요.");
}
/*2 변경 비밀번호 확인*/
if (!password.equals(mymbrVO.getCheckPassword())) {
throw new WnbtRestException("비밀번호가 일치하지 않습니다.");
}
/*3 아이디 비밀번호 동일 확인*/
if (password.equals(mymbrVO.getMbrId())) {
throw new WnbtRestException("비밀번호는 아이디와 동일할 수 없습니다.");
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrIdUpdt", mymbrVO),
ReplyFromResrc::getReply
);
}
/**
* 회원 정보 수정 (비밀번호 수정)
* @param mymbrVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateMbrPasswordUpdt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateMbrPasswordUpdt(@Validated MyMbrPwdChngVO mymbrVO, BindingResult bindingResult){
// 정합성 검사
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//비밀번호 변경시
/*1 비밀번호 변경 시 현재 비밀번호 확인*/
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrPasswordCnfirm", mymbrVO)
);
int result = (int) resultMap.get("result");
if (result == 0) {
throw new WnbtRestException("현재 비밀번호가 일치하지 않습니다");
}
/*2 비밀번호 정규 표현식 확인*/
String password = mymbrVO.getNewPassword();
String pwPattern = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*\\W)?[a-zA-Z\\d\\W]{6,20}$|^(?=.*[a-zA-Z])(?=.*\\W)(?=.*\\d)?[a-zA-Z\\W\\d]{6,20}$|^(?=.*\\d)(?=.*\\W)(?=.*[a-zA-Z])?[a-zA-Z\\d\\W]{6,20}$";
Matcher matcher = Pattern.compile(pwPattern).matcher(password);
if (!matcher.matches()) {
throw new WnbtRestException("비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 6~20자로 입력해주세요.");
}
/*3 변경 비밀번호 확인*/
if (!password.equals(mymbrVO.getCheckPassword())) {
throw new WnbtRestException("변경 비밀번호가 일치하지 않습니다.");
}
/*4 아이디 비밀번호 동일 확인*/
if (responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOIdPasswordDuplicateAt", mymbrVO)
).get("idPasswordDuplicateAt").equals("Y")) {
throw new WnbtRestException("비밀번호는 아이디와 동일할 수 없습니다.");
}
/*5 기존 비밀번호 동일 확인*/
if (password.equals(mymbrVO.getMbrPassword())) {
throw new WnbtRestException("현재 비밀번호와 동일한 비밀번호를 재사용할 수 없습니다.");
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrPasswordUpdt", mymbrVO),
ReplyFromResrc::getReply
);
}
@Policy(AuthPolicy.PUBLIC)@RequestMapping(value="/selectCrtnbSndng")public String selectCrtnbSndng(){return "/0";}
/**
* 회원 정보 수정 (휴대폰번호 수정)
* @param mymbrVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateMbrMblphonInfoUpdt")
public ResponseEntity<WnbtResponse> updateMbrMblphonInfoUpdt(@Validated MyMbrVO mymbrVO, BindingResult bindingResult){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrMblphonInfoUpdt", mymbrVO),
ReplyFromResrc::getReply
);
}
/**
* 회원 정보 수정 (이메일 수정)
* @param mymbrVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateMbrEmailInfoUpdt")
public ResponseEntity<WnbtResponse> updateMbrEmailInfoUpdt(@Validated MyMbrEmailChngVO mymbrVO, BindingResult bindingResult){
// 정합성 검사
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrEmailInfoUpdt", mymbrVO),
ReplyFromResrc::getReply
);
}
/**
* 계정 연동 활성화
* @param mymbrVO
* @param bindingResult
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/insertAcntCnncSttusRegist" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertAcntCnncSttusRegist(MyMbrVO mymbrVO, BindingResult bindingResult){
// 정합성 검사
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/insertBOAcntCnncSttusRegist", mymbrVO),
ReplyFromResrc::getReply
);
}
/**
* 계정 연동 비활성화
* @param mymbrVO
* @param bindingResult
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/deleteAcntCnncSttusDel" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteAcntCnncSttusDel(MyMbrVO mymbrVO, BindingResult bindingResult){
// 정합성 검사
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/deleteBOAcntCnncSttusDel", mymbrVO),
ReplyFromResrc::getReply
);
}
/**
* 마이페이지 회원 정보 수정
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateMbrInfoUpdt")
public ResponseEntity<WnbtResponse> updateMbrInfoUpdt(@Validated MyMbrVO mymbrVO, BindingResult bindingResult){
mymbrVO.setServerDv("sopmal");
// 정합성 검사
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
mymbrVO.setMbtlnb(mymbrVO.getMbtlnb().replace("-",""));
//모바일일 시 진행
if("mobile".equals(mymbrVO.getUtilDv())){
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrMbtlnbCompare", mymbrVO)
);
int result = (Integer) resultMap.get("result");
if(result == 0){
if(!"Y".equals(mymbrVO.getMbtlnbChngAt())){
throw new WnbtRestException("휴대폰 인증이 필요합니다.");
}
}
}
if (mymbrVO.getBrthDe() != null) {
mymbrVO.setBrthDe(mymbrVO.getBrthDe().replace(",", ""));
}
if (mymbrVO.getMarktRecptnAgreAt() == null || mymbrVO.getMarktRecptnAgreAt().isEmpty()) {
mymbrVO.setMarktRecptnAgreAt("N");
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrInfoUpdt", mymbrVO),
ReplyFromResrc::getReply
);
}
/**
* 회원 탈퇴 화면 이동
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectMbrSecsnForm")
public String selectMbrSecsnForm(ModelMap model, HttpServletRequest request, MyMbrVO mymbrVO) {
mymbrVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrSecsnForm", mymbrVO),
model,
"resultMap"
);
return Util.getDeviceType(request) + "/mpage/mbr/MbrSecsnU";
}
/**
* 회원 탈퇴 ( 탈퇴엔 등록, 회원에는 수정 )
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateMbrSecsn")
public ResponseEntity<WnbtResponse> updateMbrSecsn(@Validated WithdrawalVO vo, BindingResult bindingResult, HttpServletRequest request){
//validation 체크
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
vo.setServerDv("sopmal");
//ip주소 get
Map<String, String> requestInfo = Util.getRequestInfo(request);
String ip = (String) requestInfo.get("XForwardedFor");
vo.setRegistIp(ip);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrSecsn", vo),
ReplyFromResrc::getReply
);
}
/**
* 배송지 관리 목록 조회 이동
* @param dlvylcVO
* @param ModelMap
* @return MbrDlvylcListInqireR.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping("/selectDlvylcManagePopupForm")
public String selectMbrDlvylcListInqire(HttpServletRequest request, DlvylcVO dlvylcVO) {
return Util.getDeviceType(request)+"/mpage/mbr/DlvylcManageRForm";
}
/**
* 배송지 관리
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectDlvylcManagePopup")
public String selectDlvylcManagePopup(HttpServletRequest request, DlvylcVO dlvylcVO, ModelMap model){
String jspPath = "";
dlvylcVO.setServerDv("sopmal");
//popUp or page 호출인지에 따라 페이지유닛 및 경로 분기
if("Y".equals(dlvylcVO.getIsPop())) {
if("N".equals(dlvylcVO.getIsMobile())){ //모바일 여부에 따른 팝업 페이지 유닛 분기
dlvylcVO.setPageUnit(3);
}else{
dlvylcVO.setPageUnit(100);
}
jspPath = Util.getDeviceType(request)+"/mpage/mbr/DlvylcManagePopupR";
} else {
if ("N".equals(dlvylcVO.getIsMobile())) { //모바일 여부에 따른 팝업 페이지 유닛 분기
dlvylcVO.setPageUnit(3);
} else {
dlvylcVO.setPageUnit(100);
}
jspPath = Util.getDeviceType(request)+"/mpage/mbr/DlvylcManageR";
}
dlvylcVO.setServerDv("sopmal");
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrDlvylcListInqire", dlvylcVO),
model,
"resultMap"
);
//기존 페이지 유지
model.addAttribute("pageIndex", dlvylcVO.getPageIndex());
model.addAttribute("formId", dlvylcVO.getFormId());
//배송지 관리 팝업 > 콜백 함수 이름 전달
if("Y".equals(dlvylcVO.getIsPop())) {
model.addAttribute("callbackNm", dlvylcVO.getCallbackNm());
}
return jspPath;
}
/**
* 배송지 수정 상세 조회
* @param dlvylcVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectDlvylcUpdtPopupForm")
public String selectDlvylcUpdtPopupForm(HttpServletRequest request, ModelMap model, DlvylcVO dlvylcVO){
dlvylcVO.setServerDv("sopmal");
//BO API 호출하여 상세 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBODlvylcUpdtPopupForm",dlvylcVO),
model,
"dtlDlvylc"
);
model.addAttribute("pageIndex",dlvylcVO.getPageIndex());
return Util.getDeviceType(request)+"/mpage/mbr/DlvylcUpdtPopupU";
}
/**
* 배송지 수정 상세 조회
* @param dlvylcVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectDlvylcUpdtMobilePopupForm")
public String selectDlvylcUpdtMobilePopupForm(HttpServletRequest request, ModelMap model, DlvylcVO dlvylcVO){
Map<String, Object> paramMap = new HashMap<>();
dlvylcVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBODlvylcUpdtPopupForm", dlvylcVO),
model,
"dtlDlvylc"
);
//모델 객체에 상세 조회 및 페이지 인덱스,회원고유번호 담음
// model.addAttribute("dtlDlvylc",BoResultMapConverter.convert(new ObjectMapper(), reply.getReply()));
model.addAttribute("pageIndex",dlvylcVO.getPageIndex());
return Util.getDeviceType(request)+"/mpage/mbr/DlvylcUpdtMobilePopupU";
}
/**
* 배송지 수정
* @param dlvylcVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value="/updateDlvylcUpdt")
public ResponseEntity<WnbtResponse> updateDlvylcUpdt(@Validated DlvylcVO dlvylcVO,
BindingResult bindingResult){
//입력값 정합성 점검결과 처리
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//휴대폰번호 정합성 체크
String mbtlnb = dlvylcVO.getMbtlnb();
mbtlnb = mbtlnb.replace("-", "");
int mbtlnbLen = mbtlnb.length();
if (!(mbtlnbLen >= 8 && mbtlnbLen <= 12)) {
throw new WnbtRestException("번호는 8자~12자 입니다.");
}
//도로명 지번 분기처리 하여 vo에 set함
if("01".equals(dlvylcVO.getAdresDv())) {
dlvylcVO.setRnmAdres(dlvylcVO.getAdres());
dlvylcVO.setLnbAdres(null);
}else if("02".equals(dlvylcVO.getAdresDv())){
dlvylcVO.setLnbAdres(dlvylcVO.getAdres());
dlvylcVO.setRnmAdres(null);
}
dlvylcVO.setServerDv("sopmal");
//BO API 호출 => 배송지 수정
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBODlvylcUpdt", dlvylcVO),
ReplyFromResrc::getReply
);
}
/**
* 배송지 등록 팝업 이동
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectDlvylcRegistForm")
public String selectDlvylcRegistForm(HttpServletRequest request, ModelMap model, DlvylcVO dlvylcVO){
model.addAttribute("vo",dlvylcVO);
return Util.getDeviceType(request)+"/mpage/mbr/DlvylcRegistPopupC";
}
/**
* 배송지 등록
* @param dlvylcVO
* @param bindingResult
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value="/insertDlvylcRegist")
public ResponseEntity<WnbtResponse> insertDlvylcRegist(@Validated DlvylcVO dlvylcVO,
BindingResult bindingResult){
//입력값 정합성 점검결과 처리
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//휴대폰번호 정합성 체크
String mbtlnb = dlvylcVO.getMbtlnb();
mbtlnb = mbtlnb.replace("-","");
int mbtlnbLen = mbtlnb.length();
if(!(mbtlnbLen >= 8 && mbtlnbLen <= 12)){
throw new WnbtRestException("번호는 8자~12자 입니다.");
}
dlvylcVO.setServerDv("sopmal");
//등록 jsp에서 넘어온 주소를 도로명 지번 분기처리 하여 vo에 set함
if("01".equals(dlvylcVO.getAdresDv())) {
dlvylcVO.setRnmAdres(dlvylcVO.getAdres());
dlvylcVO.setLnbAdres(null);
}else if("02".equals(dlvylcVO.getAdresDv())){
dlvylcVO.setLnbAdres(dlvylcVO.getAdres());
dlvylcVO.setRnmAdres(null);
}
//BO API 호출 => 배송지 등록
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBODlvylcRegist", dlvylcVO),
ReplyFromResrc::getReply
);
}
/**
* 배송지 삭제
* @param dlvylcVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value="/deleteDlvylcDel")
public ResponseEntity<WnbtResponse> deleteDlvylcDel(DlvylcVO dlvylcVO){
dlvylcVO.setServerDv("sopmal");
//BO API 호출 => 배송지 삭제
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/deleteBODlvylcDel", dlvylcVO),
ReplyFromResrc::getReply
);
}
/**
* 기본배송지 수정
* @param dlvylcVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value="/updatedftDlvylcAtUpdt")
public ResponseEntity<WnbtResponse> updatedftDlvylcAtUpdt(DlvylcVO dlvylcVO){
dlvylcVO.setServerDv("sopmal");
//BO API 호출 => 기본배송지 수정
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBOdftDlvylcAtUpdt", dlvylcVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,62 @@
package com.wb.domainserver.domain.sopmal.mpage.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
@Data
@EqualsAndHashCode(callSuper = false)
public class DlvylcVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/** 주소록 고유번호 */
private Integer adbkInnb;
/** 회원고유번호 */
private String mbrInnb;
/**회원구분코드*/
private String mbrDvCd;
/** 배송지설명내용 */
@NotBlank(message = "배송지 설명")
private String dlvylcDcCn;
/** 받는사람명 */
@NotBlank(message = "받으시는 분")
private String recpntNm;
/** 전화번호 */
//private String telnb;
/** 휴대폰번호 */
@NotBlank(message = "휴대전화번호")
private String mbtlnb;
private String telnb;
/** 우편번호 */
@NotBlank(message = "우편번호")
@Length(min=1, max=5)
private String zip;
/** 도로명,지번 구분 */
private String adresDv;
/** 도로명 or 지번 주소 */
private String adres;
/** 지번주소 */
private String lnbAdres = "";
/** 도로명주소 */
private String rnmAdres = "";
/** 상세주소 */
@NotBlank(message = "상세주소")
private String dtlAdres;
/** 기본배송지여부 */
private String dftDlvylcAt = "N";
/** 최근배송지여부 */
private String recentDlvylcAt;
/** popUp 여부 확인 */
private String isPop;
/*모바일 여부 확인*/
private String isMobile;
/**오더링 방법 */
private String ordering;
/**콜백함수 이름 */
private String callbackNm;
/*서버구분*/
private String serverDv;
/** formId */
private String formId;
}

View File

@@ -0,0 +1,24 @@
package com.wb.domainserver.domain.sopmal.mpage.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyMbrEmailChngVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/*id*/
@NotBlank(message = "아이디")
private String id;
/*도메인*/
@NotBlank(message = "도메인")
private String domain;
/*이메일주소*/
private String email;
}

View File

@@ -0,0 +1,47 @@
package com.wb.domainserver.domain.sopmal.mpage.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyMbrIdChngVO extends AbstractVO {
private static final long serialVersionUID = 1L;
// fm_member
/** 회원고유번호 */
private String mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 회원유형코드 */
private String mbrTyCd;
/** 회원비밀번호 */
@NotBlank(message = "신규 아이디")
private String mbrId;
/** 변경할 비밀번호 */
@NotBlank(message = "신규 비밀번호")
private String newPassword;
/** 변경할 비밀번호 확인 비밀번호 */
private String checkPassword;
/** 비밀번호변경일자 */
private String passwordChngDe;
}

View File

@@ -0,0 +1,47 @@
package com.wb.domainserver.domain.sopmal.mpage.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyMbrPwdChngVO extends AbstractVO {
private static final long serialVersionUID = 1L;
// fm_member
/** 회원고유번호 */
private String mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 회원유형코드 */
private String mbrTyCd;
/** 회원비밀번호 */
@NotBlank(message = "기존 비밀번호")
private String mbrPassword;
/** 변경할 비밀번호 */
@NotBlank(message = "변경할 비밀번호")
private String newPassword;
/** 변경할 비밀번호 확인 비밀번호 */
private String checkPassword;
/** 비밀번호변경일자 */
private String passwordChngDe;
}

View File

@@ -0,0 +1,171 @@
package com.wb.domainserver.domain.sopmal.mpage.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyMbrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
// fm_member
/** 회원고유번호 */
private String mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 회원등급 */
private String mbrGradInnb;
/** 유입경로번호 */
private String inflowCoursNb;
/** 가입환경코드 */
private String sbscrbEnvrnCd;
/** 회원유형코드 */
private String mbrTyCd;
/** 회원ID */
private String mbrid;
/** 회원비밀번호 */
private String mbrPassword;
/** 변결할 비밀번호 */
private String newPassword;
/** 비밀번호변경일자 */
private String passwordChngDe;
/** 회원명 */
private String mbrNm;
/** 이메일 */
private String email;
/** 이메일수신여부 */
private String emailRecptnAt;
/** 휴대폰 번호 */
private String mbtlnb;
/** 휴대폰 번호 변경 여부*/
private String mbtlnbChngAt;
/** SMS수신여부 */
private String smsRecptnAt;
/** 전화번호 */
private String telnb;
/** 우편번호 */
@NotBlank(message = "우편번호")
private String zip;
/** 도로명; 지번 */
private String adresDv;
/** 지번주소 */
private String lnbAdres;
/** 도로명주소 */
// @NotBlank(message = "도로명주소")
private String rnmAdres;
/** 상세주소 */
@NotBlank(message = "상세주소")
private String dtlAdres;
/** 성별 */
private String sexdstn;
/** 생년월일 */
@NotBlank(message = "생년월일")
private String brthDe;
/** 상태 */
private String sttus;
/** 상태 */
private String unitySvcCnsOffrInfo;
/** 통합서비스정보제공동의 */
private String indvdlInfoValidPd;
/** 광고수신동의변경일시 */
private String advrtsRecptnAgreUpdtDt;
/** 광고수신동의전송일시 */
private String advrtsRecptnAgreTrnsmisDt;
/** GCONE 가입여부 */
private String gconeSbscrbAt;
/** 관리자메모 */
private String mngrMemo;
/** 관리자로그 */
private String mngrLog;
/** 주문번호 */
private String ordrInnb;
// 외부연동 회원 ( kakao; naver; pos )
/** 외부연동순번 */
private Integer extrlIntrlckSnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 외부연동구분코드 */
private String extrlIntrlckDvCd;
/** 외부연동ID */
private String extrlIntrlckId;
/** 가입구분코드 */
private String sbscrbDvCd;
/** 외부연동여부 */
private String extrlIntrlckAt;
// fm_member_join
/** 마케팅 수신 동의 여부 */
private String marktRecptnAgreAt;
/** 마케팅 발신 동의 여부 */
private String beforeMarktRecptnAgreAt;
// 회원 탈퇴 fm_member_withdrawal
/**회원 고유번호 배열*/
private String[] mbrArr;
/**탈퇴사유*/
private String secsnResn;
/**등록아이피*/
private String registIp;
/**메모*/
private String memo;
/** 회원 탈퇴 고유번호 */
private Integer withdrawalMbrInnb;
/*서버구분*/
private String serverDv;
/*수정 행위 구분*/
private String updtDv;
/*모바일 pc 구분*/
private String utilDv;
}

View File

@@ -0,0 +1,80 @@
package com.wb.domainserver.domain.sopmal.mpage.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class WithdrawalVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* 회원 고유번호 배열
*/
private String[] mbrarr;
/**
* 회원고유번호
*/
private String mbrInnb;
/*회원구분코드 배열*/
private List<String> mbrDvCdArr;
/**
* 회원구분코드
*/
private String mbrDvCd;
/**
* 회원명
*/
private String mbrNm;
/**
* 이메일
*/
private String email;
/**
* 휴대폰번호
*/
private String mbtlnb;
/**
* 전화번호
*/
private String telnb;
/**
* 우편번호
*/
private String zip;
/**
* 도로명, 지번
*/
private String adresDv;
/**
* 도로명주소
*/
private String rnmAdres;
/**
* 상세주소
*/
private String dtlAdres;
/**
* 성별
*/
private String sexdstn;
/**
* 일자는 01로 입력
*/
private String brthDe;
/**
* 탈퇴사유
*/
@NotBlank(message = "탈퇴 사유")
private String secsnResn;
/**
* 등록아이피
*/
private String registIp;
/*서버구분*/
private String serverDv;
}

View File

@@ -0,0 +1,886 @@
package com.wb.domainserver.domain.sopmal.mpage.ordr.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.mpage.ordr.vo.*;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.cookie.CookieUtil;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Base64Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.HashMap;
@Controller
@RequestMapping("/sopmal/mpage/ordr")
@Slf4j
public class MyOrdrController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/* ####################################
사용자 > 마이페이지 > MY쇼핑 > 주문/배송조회 시작
#################################### */
/**
* 마이 페이지 > MY쇼핑 > 마이페이지 상단 내 정보
* @return OrdrDlvyListR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMpageInfoRefreshInqire")
public String selectMpageInfoRefreshInqire(HttpServletRequest request, ModelMap model, MyOrdrDlvyVO ordrDlvyVO) throws Exception {
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO));
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", ordrDlvyVO),
model,
"mpageResultMap"
);
// return Util.getDeviceType(request) + "/mpage/MypageRight";
return "comm/mpage/MypageRight";
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 주문/배송 목록 조회 화면 이동
* @return OrdrDlvyListR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrOrdrListInqire")
public String selectMbrOrdrListInqire(HttpServletRequest request, ModelMap model, MyOrdrDlvyVO ordrDlvyVO) throws Exception {
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO));
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", ordrDlvyVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/OrdrDlvyListR";
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 주문/배송 목록 조회
* @param ordrDlvyVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrOrdrListInqireAjax")
public String selectMbrOrdrListInqireAjax(ModelMap model, MyOrdrDlvyVO ordrDlvyVO) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrOrdrListInqireAjax", ordrDlvyVO),
model,
"data"
);
return "sopmal/mpage/ordr/OrdrDlvyListRList";
}
/**
* 마이 페이지 > MY쇼핑 > 마이페이지 > 주문/배송 목록 조회
* @param ordrDlvyVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrOrdrListInqireMapge")
public String selectMbrOrdrListInqireMapge(ModelMap model, MyOrdrDlvyVO ordrDlvyVO) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrOrdrListInqireAjax", ordrDlvyVO),
model,
"data"
);
return "sopmal/mpage/ordr/OrdrDlvyListMpageRList";
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 주문/배송 목록 조회 (스크롤)
* @param ordrDlvyVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrOrdrListInqireScrollAjax")
public ResponseEntity<WnbtResponse> selectMbrOrdrListInqireScrollAjax(ModelMap model, MyOrdrDlvyVO ordrDlvyVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrOrdrListInqireAjax", ordrDlvyVO),
ReplyFromResrc::getReply
);
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 주문 취소 상태 수정
* @param ordrDlvyVO
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateCanclOrdr")
public ResponseEntity<WnbtResponse> updateCanclOrdr(MyOrdrDlvyVO ordrDlvyVO) throws JsonProcessingException {
/**
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBOCanclOrdr", ordrDlvyVO)
);
if ("1".equals(resultMap.get("status"))) {
List<Map<String, String>> errorList = new ArrayList<>();
errorList.add(ValidateResultConverter.setErrorMap("error", (String) resultMap.get("message")));
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
WnbtResponse response = WnbtResponse.builder().resBody(new WnbtResponseBody(new ObjectMapper().writeValueAsString(resultMap))).build();
*/
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBOCanclOrdr", ordrDlvyVO),
ReplyFromResrc::getReply
);
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 주문 기준 구매 확정
* @param ordrVO
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updatePurchsDcsnByOrdr")
public ResponseEntity<WnbtResponse> updateBOPurchsDcsnByOrdr(MyOrdrVO ordrVO) throws JsonProcessingException {
/**
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBOPurchsDcsnByOrdr", ordrVO)
);
if ("1".equals(resultMap.get("status"))) {
List<Map<String, String>> errorList = new ArrayList<>();
errorList.add(ValidateResultConverter.setErrorMap("error", (String) resultMap.get("message")));
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
WnbtResponse response = WnbtResponse.builder().resBody(new WnbtResponseBody(new ObjectMapper().writeValueAsString(resultMap))).build();
*/
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBOPurchsDcsnByOrdr", ordrVO),
ReplyFromResrc::getReply
);
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 상품 기준 구매 확정
* @param ordrVO
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updatePurchsDcsnByItem")
public ResponseEntity<WnbtResponse> updatePurchsDcsnByItem(MyOrdrVO ordrVO) throws JsonProcessingException {
/**
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updatePurchsDcsnByItem", ordrVO)
);
if ("1".equals(resultMap.get("status"))) {
List<Map<String, String>> errorList = new ArrayList<>();
errorList.add(ValidateResultConverter.setErrorMap("error", (String) resultMap.get("message")));
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
WnbtResponse response = WnbtResponse.builder().resBody(new WnbtResponseBody(new ObjectMapper().writeValueAsString(resultMap))).build();
*/
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updatePurchsDcsnByItem", ordrVO),
ReplyFromResrc::getReply
);
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 주문/배송 상세 조회 화면 이동
* @return OrdrDtlR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrOrdrDtlInqire")
public String selectOrdrDtlInqire(HttpServletRequest request, ModelMap model, MyOrdrDlvyVO ordrDlvyVO) throws Exception {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrOrdrDtlInqire", ordrDlvyVO),
model,
"data"
);
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrDlvyVO));
model.addAttribute("vo", ordrDlvyVO);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", ordrDlvyVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/OrdrDtlR";
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 배송지 수정
* @param param
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateDlvylc")
public ResponseEntity<WnbtResponse> updateDlvylc(@RequestBody HashMap<String, Object> param) throws JsonProcessingException {
/**
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBODlvylc", param)
);
if ("1".equals(resultMap.get("status"))) {
List<Map<String, String>> errorList = new ArrayList<>();
errorList.add(ValidateResultConverter.setErrorMap("error", (String) resultMap.get("message")));
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
WnbtResponse response = WnbtResponse.builder().resBody(new WnbtResponseBody(new ObjectMapper().writeValueAsString(resultMap))).build();
// return ResponseEntity.status(HttpStatus.OK).body(response);
*/
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBODlvylc", param),
ReplyFromResrc::getReply
);
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 결제취소 팝업 화면 이동
* @return OrdrSetleCanclPopup.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectSetleCanclPopupForm")
public String selectSetleCanclPopupForm(HttpServletRequest request,ModelMap model, MyOrdrDlvyVO ordrDlvyVO) throws JsonProcessingException {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOSetleCanclRefndRegist", ordrDlvyVO),
model,
"data"
);
ObjectMapper objectMapper = new ObjectMapper();
model.addAttribute("adscript", Base64Util.encode(objectMapper.writeValueAsString(model.getAttribute("data"))));
return Util.getDeviceType(request) + "/mpage/ordr/OrdrSetleCanclPopup";
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 결제취소 등록
* @param param
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertSetleCanclRegist")
public ResponseEntity<WnbtResponse> registSetleCancl(@RequestBody HashMap<String, Object> param) throws JsonProcessingException {
/**
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBOSetleCanclRegist", param)
);
if ("1".equals(resultMap.get("status"))) {
List<Map<String, String>> errorList = new ArrayList<>();
errorList.add(ValidateResultConverter.setErrorMap("error", (String) resultMap.get("message")));
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
WnbtResponse response = WnbtResponse.builder().resBody(new WnbtResponseBody(new ObjectMapper().writeValueAsString(resultMap))).build();
*/
// return ResponseEntity.status(HttpStatus.OK).body(response);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBOSetleCanclRegist", param),
ReplyFromResrc::getReply
);
}
/* ####################################
사용자 > 마이페이지 > MY쇼핑 > 주문/배송조회 종료
#################################### */
/* ####################################
사용자 > 마이페이지 > MY쇼핑 > 개인결제 시작
#################################### */
/**
* 마이 페이지 > MY쇼핑 > 개인결제 > 개인결제 목록 화면 이동
* @return IndvdlSetleR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectIndvdlSetleInqire")
public String selectIndvdlSetleInqire(HttpServletRequest request, ModelMap model, MyIndvdlSetleVO indvdlSetleVO) {
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", indvdlSetleVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/IndvdlSetleR";
}
/**
* 마이 페이지 > MY쇼핑 > 개인결제 > 개인결제 목록 조회
* @param indvdlSetleVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectIndvdlSetleInqireAjax")
public String selectIndvdlSetleInqireAjax(HttpServletRequest request, ModelMap model, MyIndvdlSetleVO indvdlSetleVO) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOIndvdlSetleInqireAjax", indvdlSetleVO),
model,
"data"
);
return Util.getDeviceType(request) + "/mpage/ordr/IndvdlSetleRList";
}
/**
* 마이 페이지 > MY쇼핑 > 개인결제 > 개인결제 목록 조회 (스크롤)
* @param indvdlSetleVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectIndvdlSetleInqireScrollAjax")
public ResponseEntity<WnbtResponse> selectIndvdlSetleInqireScrollAjax(ModelMap model, MyIndvdlSetleVO indvdlSetleVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOIndvdlSetleInqireAjax", indvdlSetleVO),
ReplyFromResrc::getReply
);
}
/* ####################################
사용자 > 마이페이지 > MY쇼핑 > 개인결제 종료
#################################### */
/**
* 배송 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectDlvyInqire")
public String selectDlvyInqire(MyDlivyVO dlivyVO, ModelMap model, HttpServletRequest request){
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBOOrdrDlvyDtlsInqire", dlivyVO),
model,
"resultMap"
);
// return "sopmal/mpage/ordr/DlvyInqireR";
return Util.getDeviceType(request) + "/mpage/ordr/DlvyInqireR";
}
/**
* 반품 취소 환불 조회 이동
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectRtngudCanclRefndForm")
public String selectRtngudCanclRefndForm(MyRefundVO refundVO, ModelMap model, HttpServletRequest request) throws JsonProcessingException {
refundVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/Rtngudrefnd/selectBORtngudRefndListInqireForm", refundVO),
model,
"resultMap"
);
model.addAttribute("paramVO", refundVO);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", refundVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/RtngudCanclRefndListFormR";
}
/**
* 반품 취소 환불 목록 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectRtngudCanclRefndInqire")
public String selectRtngudCanclRefndInqire(MyRefundVO refundVO, ModelMap model, HttpServletRequest request){
refundVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/Rtngudrefnd/selectBOMbrRefundListInqire", refundVO),
model,
"resultMap"
);
model.addAttribute("paramVO", refundVO);
// return "sopmal/mpage/ordr/RtngudCanclRefndListR";
return Util.getDeviceType(request) + "/mpage/ordr/RtngudCanclRefndListR";
}
/**
* 마이페이지 > 반품/환불 목록 조회 > 스크롤
* @param mlgVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRtngudCanclRefndScrolInqire")
public ResponseEntity<?> selectRtngudCanclRefndScrolInqire(MyRefundVO refundVO) {
refundVO.setServerDv("sopmal");
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/Rtngudrefnd/selectBOMbrRefundListInqire", refundVO),
result -> ResponseEntity.status(HttpStatus.OK).body(result)
);
}
/**
* 반품 취소 환불 상세 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectRtngudCanclRefndDtlInqire")
public String selectRtngudCanclRefndDtlInqire(MyRefundVO refundVO, ModelMap model, HttpServletRequest request){
refundVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/Rtngudrefnd/selectBORtngudRefndDtlInqire", refundVO),
model,
"resultMap"
);
model.addAttribute("paramVO", refundVO);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", refundVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/RtngudCanclRefndDtlR";
}
/**
* 반품 취소 환불 정보 수정
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateRtngudCanclRefndUpdt")
public ResponseEntity<WnbtResponse> updateRtngudCanclRefndUpdt(MyRefundVO refundVO, ModelMap model){
log.debug("ordrVO is {}", refundVO);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/Rtngudrefnd/updateBOOrderReUpdt", refundVO),
ReplyFromResrc::getReply
);
}
/**
* 마이 페이지 > MY쇼핑 > 주문/배송조회 > 반품/환불 신청 팝업 이동
* @return
* @author 추지훈
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectRetrunRegistPopupForm")
public String selectRetrunRegistPopupForm(HttpServletRequest request,ModelMap model, MyOrdrDlvyVO ordrDlvyVO) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOSetleCanclRefndRegist", ordrDlvyVO),
model,
"data"
);
return Util.getDeviceType(request) + "/mpage/ordr/RefundRegistPopupC";
}
/**
* 선물함 목록 폼 이동
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectGiftListInqireForm")
public String selectGiftListInqireForm(MyOrdrShippingVO ordrShippingVO, ModelMap model, HttpServletRequest request) throws JsonProcessingException {
log.debug("선물함 이동 ordrShippingVO is {}", ordrShippingVO);
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(ordrShippingVO));
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOUserGiftOrdrListInqireForm", ordrShippingVO),
model,
"resultMap"
);
// model.addAttribute("paramVO", ordrShippingVO);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", ordrShippingVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/GiftListFormR";
}
/**
* 선물함 목록 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectGiftListInqire")
public String selectGiftListInqire(MyOrdrShippingVO ordrShippingVO, ModelMap model, HttpServletRequest request){
log.debug("ordrShippingVO is {}", ordrShippingVO);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOUserGiftOrdrListInqireAjax", ordrShippingVO),
model,
"resultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/GiftListR";
}
/**
* 마이 페이지 > MY쇼핑 > 선물함 > 선물함 목록 조회 (스크롤)
* @param ordrDlvyVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrGfitListInqireScrollAjax")
public ResponseEntity<WnbtResponse> selectMbrGfitListInqireScrollAjax(ModelMap model, MyOrdrDlvyVO ordrDlvyVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOUserGiftOrdrListInqireAjax", ordrDlvyVO),
ReplyFromResrc::getReply
);
}
/**
* 선물함 > 선물 조회 팝업
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectGiftOrdrSittnPopupForm")
public String selectGiftOrdrSittnPopupForm(MyOrdrShippingVO ordrShippingVO, ModelMap model, HttpServletRequest request){
log.debug("ordrShippingVO is {}", ordrShippingVO);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOUserGiftShippSittnPopup", ordrShippingVO),
model,
"resultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/GiftOrdrSittnPopupR";
}
/**
* 위시리스트 폼 이동
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectWslistInqireForm")
public String selectWslistInqireForm(MyWishVO wishVO, ModelMap model, HttpServletRequest request){
wishVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOWslistInqireForm", wishVO),
model,
"resultMap"
);
model.addAttribute("paramVO", wishVO);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", wishVO),
model,
"mpageResultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/WslistInqireRForm";
}
/**
* 위시리스트 추가
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/insertWslistGoods")
public ResponseEntity<WnbtResponse> insertWslistGoods(MyWishVO wishVO, HttpServletRequest request){
String agentId = "";
Cookie[] cookies = request.getCookies();
if(cookies != null){
if (CookieUtil.hasAgentCookie(request.getCookies())) {
agentId = CookieUtil.getAgentCookieValue(request.getCookies());
wishVO.setAgentId(agentId);
}
}
wishVO.setIp(request.getAttribute("LoggingClientIp").toString());
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/insertBOWslistGoods", wishVO),
ReplyFromResrc::getReply
);
}
/**
* 위시리스트 목록 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectWslistInqire")
public String selectWslistInqire(MyWishVO wishVO, ModelMap model, HttpServletRequest request){
wishVO.setServerDv("sopmal");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOWslistInqire", wishVO),
model,
"resultMap"
);
model.addAttribute("paramVO", wishVO);
// return "sopmal/mpage/ordr/WslistInqireR";
return Util.getDeviceType(request) + "/mpage/ordr/WslistInqireR";
}
/**
* 마이페이지 > 위시리스트 목록 조회 > 스크롤
* @param mlgVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectWslistScrolInqire")
public ResponseEntity<?> selectWslistScrolInqire(MyWishVO wishVO) {
wishVO.setServerDv("sopmal");
return responseHandler.handleMapResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOWslistInqire", wishVO),
result -> ResponseEntity.status(HttpStatus.OK).body(result)
);
}
/**
* 상품 옵션 선택 팝업
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectGoodsOptnSlcPopup")
public String selectGoodsOptnSlcPopup(@RequestBody MyWishVO wishVO, ModelMap model, HttpServletRequest request){
// ReplyFromResrc reply = sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBORelateGoodsPopup", wishVO);
// model.addAttribute("resultMap", BoResultMapConverter.convert(new ObjectMapper(), reply.getReply()));
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBORelateGoodsPopup", wishVO),
model,
"resultMap"
);
return Util.getDeviceType(request)+"/mpage/ordr/GoodsSlcPopupR";
}
/**
* 위시리스트 상품 삭제
* @param wishVO
* @param bindingResult
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/deleteWslistGoodsDel" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteWslistGoodsDel(@Validated MyWishVO wishVO, BindingResult bindingResult ){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/deleteBOWslistGoodsDel", wishVO),
ReplyFromResrc::getReply
);
}
/**
* 정기 배송 관리 목록 폼 이동
* @param ordrShippingVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectFdrmDlvyInqireForm")
public String selectFdrmDlvyInqireForm(MyOrdrShippingVO ordrShippingVO, ModelMap model){
log.debug("wishVO is {}", ordrShippingVO);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOFdrmDlvyForm", ordrShippingVO),
model,
"resultMap"
);
model.addAttribute("paramVO", ordrShippingVO);
// 마이페이지 > 상단 회원 정보 ( 등금, 이름, 마일리지, 쿠폰, 위시리스트, 배송중, 등급산정기준 )
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMpageInfoInqire", ordrShippingVO),
model,
"mpageResultMap"
);
return "sopmal/mpage/ordr/FdrmDlvyFormR";
}
/**
* 정기 배송 관리 목록 조회
* @param ordrShippingVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectFdrmDlvyInqire")
public String selectFdrmDlvyInqire(MyOrdrShippingVO ordrShippingVO, ModelMap model){
log.debug("wishVO is {}", ordrShippingVO);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOFdrmDlvyInqire", ordrShippingVO),
model,
"resultMap"
);
return "sopmal/mpage/ordr/FdrmDlvyR";
}
/**
* 정기 배송 > 배송 주기 변경 팝업
* @param ordrShippingVO
* @param model
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectFdrmDlvyCycleChngForm")
public String selectFdrmDlvyCycleChngForm(MyOrdrShippingVO ordrShippingVO, ModelMap model){
log.debug("wishVO is {}", ordrShippingVO);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOFdrmDlvyCycleChngForm", ordrShippingVO),
model,
"resultMap"
);
return "sopmal/mpage/ordr/FdrmDlvyCycleChngU";
}
/**
* 정기 배송 > 배송 해지
* @param ordrShippingVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateFdrmDlvyCycleChng ")
public ResponseEntity<WnbtResponse> updateFdrmDlvyCycleChng (MyOrdrShippingVO ordrShippingVO){
log.debug("ordrShippingVO is {}", ordrShippingVO);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOFdrmDlvyCycleChng", ordrShippingVO),
ReplyFromResrc::getReply
);
}
/**
* 현금영수증 수정 발급
*
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateCashReceipt")
public ResponseEntity<WnbtResponse> updateCashReceipt(MyOrdrVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/selngpruf/updateCashReceipt", vo),
ReplyFromResrc::getReply
);
}
/**
* 현금영수증 정보수정
*
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateCashReceiptInfo")
public ResponseEntity<WnbtResponse> updateCashReceiptInfo(MyOrdrVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/selngpruf/updateBOCshRcipt", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,120 @@
package com.wb.domainserver.domain.sopmal.mpage.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @author 추지훈
* @since 2024-03-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-11 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyDlivyVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**출고고유번호*/
private String dlivyInnb;
/**주문고유번호*/
private String ordrInnb;
/**쇼핑몰코드*/
private String sopmalCd;
/**주문배송고유번호*/
private String ordrDlvyInnb;
/**출고코드번호*/
private String dlivyCdNb;
/**출고준비(45), 출고완료(55), 배송중(65), 배송완료(75)*/
private String dlivySttusCd;
/**상태변경일시*/
private String sttusUpdtDt;
/**택배사코드*/
private String hdrycpnCd;
/**택배사코드 명*/
private String hdrycpnNm;
/**송장번호*/
private String invcnb;
/**출고일시*/
private String dlivyDt;
/**출고완료일시*/
private String dlivyComptDt;
/**배송완료일시*/
private String dlvyComptDt;
/**배송그룹코드*/
private String dlvyGroupCd;
/**관리자 고유번호*/
private String mngrInnb;
/** 중요주문여부 */
private String imprtncOrdrAt;
/**배송주기*/
private String dlvyCycleCd;
/** 구매확정구분코드 */
private String purchsDcsnDvCd;
// 출고 상품
/** 출고상품고유번호 */
private String dlivyGoodsInnb;
/** 주문상품옵션고유번호 */
private String ordrGoodsOptnInnb;
/** 옵션유형 */
private String optnTy;
// 배송그룹 / 밥법 변경
/** 배송 그룹 코드 */
private String DlvyGroupCd;
// 스위트래커 배송 추적
/** 주문배송추적고유번호 */
private Integer ordrDlvyTraceInnb;
/** 스윗트래커송장코드 */
private String stInvcCd;
/** 상세내용 - 배송 추적 내용 json */
private String dtlCn;
// 배송 추적 : 배송정보
/** 우편번호 */
private String dlvylcZip;
/** 주소 구분 코드 */
private String dlvylcAdresDvCd;
/** 도로명 주소 */
private String dlvylcRnmAdres;
/** 지번 주소 */
private String dlvylcLnbAdres;
/** 상세 주소 */
private String dlvylcAdresDtl;
}

View File

@@ -0,0 +1,13 @@
package com.wb.domainserver.domain.sopmal.mpage.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyIndvdlSetleVO extends AbstractVO {
private String sopmalCd; // 쇼핑몰코드
private String ordrInnb; // 주문번호
}

View File

@@ -0,0 +1,34 @@
package com.wb.domainserver.domain.sopmal.mpage.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyOrdrDlvyVO extends AbstractVO {
private String sopmalCd; // 쇼핑몰코드
private String srchwrd; // 검색어
private String bgnDt; // 검색 시작 일자
private String endDt; // 검색어 종료 일자
private String dateRange; // 기간
private String ordrInnb; // 주문번호
private String ordrDlvyInnb; // 주문배송고유번호
private String serverDv; // 서버 구분
private String mbtlnb; // 주문자 휴대폰번호
private String mpageAt; // 마이페이지 여부
private String[] cookieValArr;//쿠키
/** 현재 주문 상태 */
private String currOrdrSttusCd;
}

View File

@@ -0,0 +1,145 @@
package com.wb.domainserver.domain.sopmal.mpage.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @author 추지훈
* @since 2024-03-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-11 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyOrdrShippingVO extends AbstractVO {
private static final long serialVersionUID = 1L;
public MyOrdrShippingVO() {}
public MyOrdrShippingVO(String sopmalCd, String ordrInnb) {
this.sopmalCd = sopmalCd;
this.ordrInnb = ordrInnb;
}
/** 주문고유번호 */
private String ordrInnb;
/** 주문배송고유번호 */
private String ordrDlvyInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 받는자명 */
private String recpntNm;
/** 받는자전화번호 */
private String recpntTelnb;
/** 받는자휴대폰번호 */
private String recpntMbtlnb;
/** 배송지우편번호 */
private String dlvylcZip;
/** 지번(zibun), 도로명(street) */
private String dlvylcAdresDvCd;
/** 배송지지번주소 */
private String dlvylcLnbAdres;
/** 배송지도로명주소 */
private String dlvylcRnmAdres;
/** 배송지주소상세 */
private String dlvylcAdresDtl;
/** 추적배송지주소 */
private String traceDlvylcAdres;
/** 배송지그룹번호 */
private int dlvylcGroupNb;
/** 택배, POS주문, 기타(프레쉬배송?) */
private String dlvyMthCd;
/** 반품배송비금액 */
private int rtngudDlvyAmtAmt;
/** 관리자무료배송비사용여부 */
private String mngrFreeDlvyAmtUseAt;
/** 실배송금액 */
private int rlDlvyAmt;
/** 무료배송조건금액 */
private int freeDlvyCndAmt;
/** 기본배송비금액 */
private int dftDlvyAmtAmt;
/** 예약발송여부 */
private String resveSndngAt;
/** 예약발송구분코드 */
private String resveSndngDvCd;
/** 예약발송일자 */
private String resveSndngDe;
/** 배송메시지내용 */
private String dlvyMssageCn;
/** 선물메시지내용 */
private String giftMssageCn;
/** 관리자 고유번호 */
private Integer mngrInnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 사용여부 */
// private String useAt;
/** 오더링 방법 */
private String ordering;
/** 송장번호 */
private String invcnb;
/** 배송주기 코드 */
private String dlvyCycleCd;
// 검색
private String srchwrd; // 검색어
private String bgnDt; // 검색 시작 일자
private String endDt; // 검색어 종료 일자
private String dateRange; // 기간
}

View File

@@ -0,0 +1,47 @@
package com.wb.domainserver.domain.sopmal.mpage.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyOrdrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 주문고유번호 */
private String ordrInnb;
/** 주문상품고유번호 */
private String ordrGoodsInnb;
/** 주문상품옵션고유번호 */
private String ordrGoodsOptnInnb;
/** 주문배송 고유번호 */
private String ordrDlvyInnb;
/** 옵션 구분 */
private String optnTy;
/** 인증번호 */
private String crtnb;
/** 발급대상구분코드 개인(01), 사업자(02) */
private String issuTrgetDvCd;
/** 주문자명 */
private String ordrrNm;
/** 주문자이메일주소 */
private String ordrrEmail;
/** 매출증빙고유번호 */
private String selngPrufInnb;
}

View File

@@ -0,0 +1,185 @@
package com.wb.domainserver.domain.sopmal.mpage.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @author 추지훈
* @since 2024-03-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-11 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyRefundVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**상세 내용*/
public String dtlCn;
/**주문 배송 추적 고유번호*/
public String ordrDlvyTraceInnb;
/**쇼핑몰 코드*/
public String sopmalCd;
/**검색어*/
public String srchwrd;
/**검색구분*/
public String srchDv;
/**검색시작일*/
public String bgnDt;
/**검색종료일*/
public String endDt;
//날짜 검색 구분
private String srchDtDv;
//** 반품처리상태 */
private String[] returnProcsStuusCd;
//** 환불처리상태 */
private String[] refundProcsSttusCd;
/** 회원 고유번호 */
private Integer mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
//** 회수방법(반품) */
private String srchReturnMthCd;
/** 반품환불 고유번호 */
private String orderReInnb;
/*주문고유번호*/
private String ordrInnb;
/*환불신청일시*/
private String refundReqstDt;
/*환불완료일시*/
private String refundComptDt;
/*신청(request), 처리중(ing), 완료(complete)*/
private String refundTyCd;
/*전체취소(full), 부분취소(partial)*/
private String refundScopeCd;
/*환불사유내용*/
private String refundResnCn;
/*계좌이체(account), 무통장(bank), 신용카드(card), 수동(manual), ?(payco_coupon), 포스기기(pos)*/
private String refundMthCd;
/*환불계좌은행명*/
private String refundAcntBnnkNm;
/*환불계좌예금주명*/
private String refundAcntDpstrNm;
/*환불계좌번호*/
private String refundAcntnb;
/*환불금액*/
private String refundAmt;
/*환불적립금액*/
private Integer refundAccmlmnyAmt;
/*배송비환불총금액*/
private Integer dlvyAmtTotRefundAmt;
/*쿠폰할인보정금액*/
private Integer coupDscntRevisnAmt;
/*적립금보정금액*/
private Integer accmlmnyRevisnAmt;
/*에누리보정금액*/
private Integer enuriRevisnAmt;
/*적립금유효일자*/
private String accmlmnyValidDe;
/*다운로드쿠폰 고유번호*/
private String dwldCouponInnb;
/*상태메모내용*/
private String sttusMemoCn;
/*관리자메모내용*/
private String mngrMemoCn;
/*관리자 고유번호*/
private String mngrInnb;
/*스마트쇼핑환불신청일시*/
private String smrtShopngRefndReqstDt;
/*스마트쇼핑환불완료일시*/
private String smrtShopngRefndComptDt;
/*cancel_done, refund_request*/
private String smrtShopngRefndProcsSttusCd;
/*스마트쇼핑클레임발생금액*/
private Integer smrtShopngClaimOccrrncAmt;
/*스마트쇼핑초도배송비금액*/
private Integer smrtShopngFrsttmeDlvyAmtAmt;
/*반품환불보류상품번호내용*/
private String returnRefndDferGoodsNbCn;
/*사용여부*/
private String useAt;
/*처리대상자 구분*/
private String procsTargetDv;
/**신청(request), 완료(complete), 철회(retraction)*/
private String returnProcsSttusCd;
/**반품사유코드*/
private String returnResnCd;
/**고객-단순변심,고객-오주문,본사-배송지연,본사-상품불량,본사-상품파손,본사-상품품절,본사-오배송*/
private String returnDtlResnCd;
/**반품사유내용*/
private String returnResnCn;
/**고객이배송(user),상점이회수(shop)*/
private String returnMthCd;
/** 반품고객전화번호 */
private String returnCstmrTelnb;
/** 반품고객휴대폰번호 */
private String returnCstmrMbtlnb;
/** 반품배송비금액 */
private String returnDlvyAmt;
/** company,provider */
private String returnDlvyAmtRecptTrgetCd;
/**구매자(buyer), 판매자(seller)*/
private String returnDlvyRspnsblCd;
/**직접 송금(A), 환불금액에서 차감(M), 택배상자 동봉(D)*/
private String returnDlvyPymntTyCd;
/**반품배송비입금자명*/
private String returnDlvyAmtRcpmnyerNm;
/**반품배송비입금계좌번호*/
private String returnDlvyAmtRcpmnyAcntnb;
/**회수지우편번호*/
private String zip;
/**지번(zibun), 도로명(street)*/
private String adresDvCd;
/**회수지지번주소*/
private String lnbAdres;
/**회수지도로명주소*/
private String rnmAdres;
/**회수지주소상세*/
private String dtlAdres;
/**반품접수일시*/
private String returnRceptDt;
/**반품완료일시*/
private String returnComptDt;
/**스마트쇼핑반품요청일시*/
private String smrtShopngReturnReqstDt;
/**스마트쇼핑반품완료일시*/
private String smrtShopngReturnComptDt;
/**return_request, collect_done, return_deliveryfee, return_done, exchange_done*/
private String smrtShopngReturnProcsSttusCd;
/** 지번 or 도로명 주소 */
private String lnbOrRnmAdres;
/** 반품 환불 상품 옵션 리스트 */
// private List<OrderReItemVO> orderReItemVOList;
private String serverDv;
}

View File

@@ -0,0 +1,62 @@
package com.wb.domainserver.domain.sopmal.mpage.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 위시리스트 VO
*
* @author 추지훈
* @since 2024-03-21
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-21 추지훈 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyWishVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 위시리스트 고유번호 */
private String wslistInnb;
/** 상품 고유번호 */
private Integer goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 회원 고유번호 */
private Integer mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** AGENT */
private String agent;
/** AGENTID */
private String agentId;
/** IP */
private String ip;
/** 위시리스트 고유번호 배열 */
private String[] wslistInnbArr;
private String serverDv;
}

View File

@@ -0,0 +1,194 @@
package com.wb.domainserver.domain.sopmal.nmbr.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.sopmal.nmbr.vo.MyDlivyVO;
import com.wb.domainserver.domain.sopmal.nmbr.vo.MyOrdrDlvyVO;
import com.wb.domainserver.domain.sopmal.nmbr.vo.MyOrdrVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.HashMap;
@Controller
@RequestMapping("/sopmal/nmbr/ordr")
@Slf4j
public class MyOrdrNmbrController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 비회원 주문 상세 조회 > 주문 취소 상태 수정
* @param ordrDlvyVO
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateCanclOrdr")
public ResponseEntity<WnbtResponse> updateCanclOrdr(MyOrdrDlvyVO ordrDlvyVO) throws JsonProcessingException {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBOCanclOrdr", ordrDlvyVO),
ReplyFromResrc::getReply
);
}
/**
* 비회원 주문 상세 조회 > 상품 기준 구매 확정
* @param ordrVO
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updatePurchsDcsnByItem")
public ResponseEntity<WnbtResponse> updatePurchsDcsnByItem(MyOrdrVO ordrVO) throws JsonProcessingException {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updatePurchsDcsnByItem", ordrVO),
ReplyFromResrc::getReply
);
}
/**
* 비회원 주문 상세 조회 > 배송지 조회
* @param param
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectOrdrDlvylc")
public ResponseEntity<WnbtResponse> selectOrdrDlvylc(MyOrdrDlvyVO ordrDlvyVO){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOOrdrDlvylc", ordrDlvyVO),
ReplyFromResrc::getReply
);
}
/**
* 비회원 주문 상세 조회 > 배송지 수정
* @param param
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateDlvylc")
public ResponseEntity<WnbtResponse> updateDlvylc(MyOrdrDlvyVO ordrDlvyVO){
if("01".equals(ordrDlvyVO.getDlvylcAdresDvCd())){//주소구분에 따라 지번,도로명주소 set
ordrDlvyVO.setDlvylcRnmAdres(ordrDlvyVO.getAdres());
}else{
ordrDlvyVO.setDlvylcLnbAdres(ordrDlvyVO.getAdres());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBODlvylc", ordrDlvyVO),
ReplyFromResrc::getReply
);
}
/**
* 비회원 주문 상세 조회 > 결제취소 화면 이동
* @return OrdrSetleCanclPopup.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectSetleCanclPopupForm")
public String selectSetleCanclPopupForm(HttpServletRequest request,ModelMap model, MyOrdrDlvyVO ordrDlvyVO) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOSetleCanclRefndRegist", ordrDlvyVO),
model,
"data"
);
return Util.getDeviceType(request) + "/mpage/ordr/OrdrSetleCanclPopup";
}
/**
* 비회원 주문 상세 조회 > 결제취소 등록
* @param param
* @return ResponseEntity<WnbtResponse>
* @throws JsonProcessingException
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertSetleCanclRegist")
public ResponseEntity<WnbtResponse> registSetleCancl(@RequestBody HashMap<String, Object> param) throws JsonProcessingException {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBOSetleCanclRegist", param),
ReplyFromResrc::getReply
);
}
/**
* 배송 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectDlvyInqire")
public String selectDlvyInqire(MyDlivyVO dlivyVO, ModelMap model, HttpServletRequest request){
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBOOrdrDlvyDtlsInqire", dlivyVO),
model,
"resultMap"
);
return Util.getDeviceType(request) + "/mpage/ordr/DlvyInqireR";
}
/**
* 비회원 주문 상세 조회 > 반품/환불 신청 이동
* @return
* @author 추지훈
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectRetrunRegistPopupForm")
public String selectRetrunRegistPopupForm(HttpServletRequest request,ModelMap model, MyOrdrDlvyVO ordrDlvyVO) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOSetleCanclRefndRegist", ordrDlvyVO),
model,
"data"
);
return Util.getDeviceType(request) + "/mpage/ordr/RefundRegistPopupC";
}
/**
* 비회원 주문 상세 조회 > 현금영수증 수정
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateCashReceipt")
public ResponseEntity<WnbtResponse> updateCashReceipt (MyOrdrVO vo){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/selngpruf/updateCashReceipt", vo),
ReplyFromResrc::getReply
);
}
/**
* 비회원 반품/환불 상세 조회 > 반품 취소 환불 정보 수정
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/updateRtngudCanclRefndUpdt")
public ResponseEntity<WnbtResponse> updateRtngudCanclRefndUpdt( com.wb.domainserver.domain.sopmal.mpage.ordr.vo.MyRefundVO refundVO, ModelMap model){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/Rtngudrefnd/updateBOOrderReUpdt", refundVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,120 @@
package com.wb.domainserver.domain.sopmal.nmbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @author 추지훈
* @since 2024-03-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-11 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyDlivyVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**출고고유번호*/
private String dlivyInnb;
/**주문고유번호*/
private String ordrInnb;
/**쇼핑몰코드*/
private String sopmalCd;
/**주문배송고유번호*/
private String ordrDlvyInnb;
/**출고코드번호*/
private String dlivyCdNb;
/**출고준비(45), 출고완료(55), 배송중(65), 배송완료(75)*/
private String dlivySttusCd;
/**상태변경일시*/
private String sttusUpdtDt;
/**택배사코드*/
private String hdrycpnCd;
/**택배사코드 명*/
private String hdrycpnNm;
/**송장번호*/
private String invcnb;
/**출고일시*/
private String dlivyDt;
/**출고완료일시*/
private String dlivyComptDt;
/**배송완료일시*/
private String dlvyComptDt;
/**배송그룹코드*/
private String dlvyGroupCd;
/**관리자 고유번호*/
private String mngrInnb;
/** 중요주문여부 */
private String imprtncOrdrAt;
/**배송주기*/
private String dlvyCycleCd;
/** 구매확정구분코드 */
private String purchsDcsnDvCd;
// 출고 상품
/** 출고상품고유번호 */
private String dlivyGoodsInnb;
/** 주문상품옵션고유번호 */
private String ordrGoodsOptnInnb;
/** 옵션유형 */
private String optnTy;
// 배송그룹 / 밥법 변경
/** 배송 그룹 코드 */
private String DlvyGroupCd;
// 스위트래커 배송 추적
/** 주문배송추적고유번호 */
private Integer ordrDlvyTraceInnb;
/** 스윗트래커송장코드 */
private String stInvcCd;
/** 상세내용 - 배송 추적 내용 json */
private String dtlCn;
// 배송 추적 : 배송정보
/** 우편번호 */
private String dlvylcZip;
/** 주소 구분 코드 */
private String dlvylcAdresDvCd;
/** 도로명 주소 */
private String dlvylcRnmAdres;
/** 지번 주소 */
private String dlvylcLnbAdres;
/** 상세 주소 */
private String dlvylcAdresDtl;
}

View File

@@ -0,0 +1,13 @@
package com.wb.domainserver.domain.sopmal.nmbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyIndvdlSetleVO extends AbstractVO {
private String sopmalCd; // 쇼핑몰코드
private String ordrInnb; // 주문번호
}

View File

@@ -0,0 +1,42 @@
package com.wb.domainserver.domain.sopmal.nmbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyOrdrDlvyVO extends AbstractVO {
private String sopmalCd; // 쇼핑몰코드
private String srchwrd; // 검색어
private String bgnDt; // 검색 시작 일자
private String endDt; // 검색어 종료 일자
private String dateRange; // 기간
private String ordrInnb; // 주문번호
private String ordrDlvyInnb; // 주문배송고유번호
private String serverDv; // 서버 구분
private String mbtlnb; // 주문자 휴대폰번호
private String mpageAt; // 마이페이지
private String recpntNm;
private String recpntMbtlnb;
private String dlvylcZip;
private String dlvylcAdresDvCd;
private String dlvylcLnbAdres;
private String dlvylcRnmAdres;
private String dlvylcAdresDtl;
private String adres;
/** 현재 주문 상태 */
private String currOrdrSttusCd;
}

View File

@@ -0,0 +1,145 @@
package com.wb.domainserver.domain.sopmal.nmbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @author 추지훈
* @since 2024-03-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-11 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyOrdrShippingVO extends AbstractVO {
private static final long serialVersionUID = 1L;
public MyOrdrShippingVO() {}
public MyOrdrShippingVO(String sopmalCd, String ordrInnb) {
this.sopmalCd = sopmalCd;
this.ordrInnb = ordrInnb;
}
/** 주문고유번호 */
private String ordrInnb;
/** 주문배송고유번호 */
private String ordrDlvyInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 받는자명 */
private String recpntNm;
/** 받는자전화번호 */
private String recpntTelnb;
/** 받는자휴대폰번호 */
private String recpntMbtlnb;
/** 배송지우편번호 */
private String dlvylcZip;
/** 지번(zibun), 도로명(street) */
private String dlvylcAdresDvCd;
/** 배송지지번주소 */
private String dlvylcLnbAdres;
/** 배송지도로명주소 */
private String dlvylcRnmAdres;
/** 배송지주소상세 */
private String dlvylcAdresDtl;
/** 추적배송지주소 */
private String traceDlvylcAdres;
/** 배송지그룹번호 */
private int dlvylcGroupNb;
/** 택배, POS주문, 기타(프레쉬배송?) */
private String dlvyMthCd;
/** 반품배송비금액 */
private int rtngudDlvyAmtAmt;
/** 관리자무료배송비사용여부 */
private String mngrFreeDlvyAmtUseAt;
/** 실배송금액 */
private int rlDlvyAmt;
/** 무료배송조건금액 */
private int freeDlvyCndAmt;
/** 기본배송비금액 */
private int dftDlvyAmtAmt;
/** 예약발송여부 */
private String resveSndngAt;
/** 예약발송구분코드 */
private String resveSndngDvCd;
/** 예약발송일자 */
private String resveSndngDe;
/** 배송메시지내용 */
private String dlvyMssageCn;
/** 선물메시지내용 */
private String giftMssageCn;
/** 관리자 고유번호 */
private Integer mngrInnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 사용여부 */
// private String useAt;
/** 오더링 방법 */
private String ordering;
/** 송장번호 */
private String invcnb;
/** 배송주기 코드 */
private String dlvyCycleCd;
// 검색
private String srchwrd; // 검색어
private String bgnDt; // 검색 시작 일자
private String endDt; // 검색어 종료 일자
private String dateRange; // 기간
}

View File

@@ -0,0 +1,36 @@
package com.wb.domainserver.domain.sopmal.nmbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MyOrdrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 주문고유번호 */
private String ordrInnb;
/** 주문상품고유번호 */
private String ordrGoodsInnb;
/** 주문상품옵션고유번호 */
private String ordrGoodsOptnInnb;
/** 주문배송 고유번호 */
private String ordrDlvyInnb;
/** 옵션 구분 */
private String optnTy;
/**현금영수증 관련*/
/*인증번호*/
private String crtnb;
/*발급대상구분코드*/
private String issuTrgetDvCd;
}

View File

@@ -0,0 +1,185 @@
package com.wb.domainserver.domain.sopmal.nmbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @author 추지훈
* @since 2024-03-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-11 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyRefundVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**상세 내용*/
public String dtlCn;
/**주문 배송 추적 고유번호*/
public String ordrDlvyTraceInnb;
/**쇼핑몰 코드*/
public String sopmalCd;
/**검색어*/
public String srchwrd;
/**검색구분*/
public String srchDv;
/**검색시작일*/
public String bgnDt;
/**검색종료일*/
public String endDt;
//날짜 검색 구분
private String srchDtDv;
//** 반품처리상태 */
private String[] returnProcsStuusCd;
//** 환불처리상태 */
private String[] refundProcsSttusCd;
/** 회원 고유번호 */
private Integer mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
//** 회수방법(반품) */
private String srchReturnMthCd;
/** 반품환불 고유번호 */
private String orderReInnb;
/*주문고유번호*/
private String ordrInnb;
/*환불신청일시*/
private String refundReqstDt;
/*환불완료일시*/
private String refundComptDt;
/*신청(request), 처리중(ing), 완료(complete)*/
private String refundTyCd;
/*전체취소(full), 부분취소(partial)*/
private String refundScopeCd;
/*환불사유내용*/
private String refundResnCn;
/*계좌이체(account), 무통장(bank), 신용카드(card), 수동(manual), ?(payco_coupon), 포스기기(pos)*/
private String refundMthCd;
/*환불계좌은행명*/
private String refundAcntBnnkNm;
/*환불계좌예금주명*/
private String refundAcntDpstrNm;
/*환불계좌번호*/
private String refundAcntnb;
/*환불금액*/
private String refundAmt;
/*환불적립금액*/
private Integer refundAccmlmnyAmt;
/*배송비환불총금액*/
private Integer dlvyAmtTotRefundAmt;
/*쿠폰할인보정금액*/
private Integer coupDscntRevisnAmt;
/*적립금보정금액*/
private Integer accmlmnyRevisnAmt;
/*에누리보정금액*/
private Integer enuriRevisnAmt;
/*적립금유효일자*/
private String accmlmnyValidDe;
/*다운로드쿠폰 고유번호*/
private String dwldCouponInnb;
/*상태메모내용*/
private String sttusMemoCn;
/*관리자메모내용*/
private String mngrMemoCn;
/*관리자 고유번호*/
private String mngrInnb;
/*스마트쇼핑환불신청일시*/
private String smrtShopngRefndReqstDt;
/*스마트쇼핑환불완료일시*/
private String smrtShopngRefndComptDt;
/*cancel_done, refund_request*/
private String smrtShopngRefndProcsSttusCd;
/*스마트쇼핑클레임발생금액*/
private Integer smrtShopngClaimOccrrncAmt;
/*스마트쇼핑초도배송비금액*/
private Integer smrtShopngFrsttmeDlvyAmtAmt;
/*반품환불보류상품번호내용*/
private String returnRefndDferGoodsNbCn;
/*사용여부*/
private String useAt;
/*처리대상자 구분*/
private String procsTargetDv;
/**신청(request), 완료(complete), 철회(retraction)*/
private String returnProcsSttusCd;
/**반품사유코드*/
private String returnResnCd;
/**고객-단순변심,고객-오주문,본사-배송지연,본사-상품불량,본사-상품파손,본사-상품품절,본사-오배송*/
private String returnDtlResnCd;
/**반품사유내용*/
private String returnResnCn;
/**고객이배송(user),상점이회수(shop)*/
private String returnMthCd;
/** 반품고객전화번호 */
private String returnCstmrTelnb;
/** 반품고객휴대폰번호 */
private String returnCstmrMbtlnb;
/** 반품배송비금액 */
private String returnDlvyAmt;
/** company,provider */
private String returnDlvyAmtRecptTrgetCd;
/**구매자(buyer), 판매자(seller)*/
private String returnDlvyRspnsblCd;
/**직접 송금(A), 환불금액에서 차감(M), 택배상자 동봉(D)*/
private String returnDlvyPymntTyCd;
/**반품배송비입금자명*/
private String returnDlvyAmtRcpmnyerNm;
/**반품배송비입금계좌번호*/
private String returnDlvyAmtRcpmnyAcntnb;
/**회수지우편번호*/
private String zip;
/**지번(zibun), 도로명(street)*/
private String adresDvCd;
/**회수지지번주소*/
private String lnbAdres;
/**회수지도로명주소*/
private String rnmAdres;
/**회수지주소상세*/
private String dtlAdres;
/**반품접수일시*/
private String returnRceptDt;
/**반품완료일시*/
private String returnComptDt;
/**스마트쇼핑반품요청일시*/
private String smrtShopngReturnReqstDt;
/**스마트쇼핑반품완료일시*/
private String smrtShopngReturnComptDt;
/**return_request, collect_done, return_deliveryfee, return_done, exchange_done*/
private String smrtShopngReturnProcsSttusCd;
/** 지번 or 도로명 주소 */
private String lnbOrRnmAdres;
/** 반품 환불 상품 옵션 리스트 */
// private List<OrderReItemVO> orderReItemVOList;
private String serverDv;
}

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