초기소스

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,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) - 조회용
}