초기소스

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,483 @@
package com.wb.domainserver.domain.mngr.bbs.bbsmngr.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.bbs.bbsmngr.vo.BbsmngrVO;
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.communicate.ValidateResultConverter;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
/**
* BbsmngrController Class (front)
*
* @author 최범식
* @since 2023-12-12
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-12 최범식 최초 생성
* 2024-04-25 추지훈 수정
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/mngr/bbs/bbsmngr")
public class BbsmngrController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Value("${mngrfo.common.board.nc.ntcntalkSndngFormInnb01}")
private String ntcntalkSndngFormInnb1;
@Value("${mngrfo.common.board.nc.ntcntalkSndngFormInnb02}")
private String ntcntalkSndngFormInnb2;
/**
* 게시판 화면
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbsListInqireForm")
public String selectBbsListInqireForm(BbsmngrVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOBbsListInqireFrom", vo),
model,
"resultMap"
);
return "mngr/bbs/bbsmngr/BbsListRForm";
}
/**
* 게시판 목록 조회
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbsListInqire")
public String selectBbsListInqire(BbsmngrVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOBbsListInqire", vo),
model,
"resultMap"
);
return "mngr/bbs/bbsmngr/BbsListR";
}
/**
* 안내 허용 도메인 파일 팝업
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectGuidancePermDomnFilPopup", method = RequestMethod.GET)
public ResponseEntity<WnbtResponse> selectGuidancePermDomnFilPopup(BbsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOSlangDftSetupPopupForm", vo),
ReplyFromResrc::getReply
);
}
/**
* 안내 허용 도메인 파일 수정
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateGuidancePermDomnFil" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGuidancePermDomnFil(BbsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/updateBOSlangSetupRegist", vo),
ReplyFromResrc::getReply
);
}
/**
* 비속어 기본 설정 팝업
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectSlangDftSetupPopupForm", method = RequestMethod.GET)
public ResponseEntity<WnbtResponse> selectSlangDftSetupPopupForm(BbsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOSlangDftSetupPopupForm", vo),
ReplyFromResrc::getReply
);
}
/**
* 비속어 설정 저장
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateSlangSetupRegist" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateSlangSetupRegist(BbsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/updateBOSlangSetupRegist", vo),
ReplyFromResrc::getReply
);
}
/**
* 게시판 등록화면
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbsRegistForm")
public String selectBbsRegistForm(BbsmngrVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setNtcntalkSndngFormInnbArr(new String[] {ntcntalkSndngFormInnb1, ntcntalkSndngFormInnb2});
vo.setSopmalCd(authSopmalCd);
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOBbsRegistForm",vo)
);
ObjectMapper objectMapper = new ObjectMapper();
try {
resultMap.put("updBbsList", objectMapper.writeValueAsString(resultMap.get("updBbsList")));
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch(Exception e) {
log.error(e.getMessage(), e);
}
model.addAttribute("resultMap", resultMap);
return "mngr/bbs/bbsmngr/BbsRegistC";
}
/**
* 게시판 등록
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertBbsRegist", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertBbsRegist(@Validated BbsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd, BindingResult bindingResult){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
List<Map<String, String>> errorList = new ArrayList<>();
if (vo.getPgeVtcCnt() <= 0) {
errorList.add(ValidateResultConverter.setErrorMap("pgeVtcCnt", gconeMessageSource.getMessage("errors.required", new Object[]{"페이지세로건수는 최소 1 입니다."})));
}
//메시지 문자 내용 없을 시
if ("01".equals(vo.getBbscttSndngMthCd())) {
List<String> nullChk = new ArrayList<>();
if (vo.getSmsCnArr() != null) {
for (int i = 0; i < vo.getSmsCnArr().length; i++) {
if (StringUtil.isEmpty(vo.getSmsCnArr()[i])) {
nullChk.add("Y");
}
}
}
if (nullChk != null) {
if (nullChk.size() == 2) {
errorList.add(ValidateResultConverter.setErrorMap("smsCnArr", gconeMessageSource.getMessage("errors.required", new Object[]{"문자 양식"})));
}
}
}
//파일 첨부 사용 시 파일 확장자 없을 때
if ("Y".equals(vo.getFilAtchUseAt())) {
if (StringUtil.isEmpty(vo.getFilPermFilExtsn())) {
errorList.add(ValidateResultConverter.setErrorMap("smsCnArr", gconeMessageSource.getMessage("errors.required", new Object[]{"파일 첨부 허용 파일 확장자"})));
} else {//띄어쓰기, 앞 뒤 공백 제거
vo.setFilPermFilExtsn(vo.getFilPermFilExtsn().replace(" ", "").trim());
}
}
if (errorList != null && errorList.size() > 0) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/insertBOBbsRegist", vo),
ReplyFromResrc::getReply
);
}
/**
* 게시판 아이디 중복확인
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbsIdDplctCnfirm", method = RequestMethod.GET)
public ResponseEntity<WnbtResponse> selectBbsIdDplctCnfirm(BbsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
List<Map<String, String>> errorList = new ArrayList<>();
final String REGEX_ID = "^[A-Za-z[0-9]-_$]{6,30}$";
Pattern boardId = Pattern.compile(REGEX_ID);
if (!boardId.matcher(vo.getBbsId()).matches()) {
errorList.add(ValidateResultConverter.setErrorMap("boradId", gconeMessageSource.getMessage("errors.boardId", new Object[] {"게시판 아이디"})));
}
if(errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOBbsIdDplctCnfirm", vo),
ReplyFromResrc::getReply
);
}
/**
* 게시판 수정 폼
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbsDtlUpdtForm")
public String selectBbsDtlUpdtForm(BbsmngrVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setNtcntalkSndngFormInnbArr(new String[] {ntcntalkSndngFormInnb1, ntcntalkSndngFormInnb2});
vo.setSopmalCd(authSopmalCd);
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOBbsDtlUpdtForm",vo)
);
ObjectMapper objectMapper = new ObjectMapper();
try {
resultMap.put("updBbsList", objectMapper.writeValueAsString(resultMap.get("updBbsList")));
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch(Exception e) {
log.error(e.getMessage(), e);
}
model.addAttribute("resultMap", resultMap);
return "mngr/bbs/bbsmngr/BbsDtlUpdtU";
}
/**
* 게시판 수정
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBbsUpdt")
public ResponseEntity<WnbtResponse> updateBbsUpdt(@Validated BbsmngrVO vo, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
List<Map<String, String>> errorList = new ArrayList<>();
if("0".equals(vo.getGnrlRvwMlgValidMtCnt())){
throw new WnbtRestException("일반후기 마일리지 유효 월 수는 0 이상 이여야 합니다");
}
if("0".equals(vo.getPhotoRvwMlgValidMtCnt())){
throw new WnbtRestException("포토후기 마일리지 유효 월 수는 0 이상 이여야 합니다");
}
if(vo.getAditPymntMlgAccmlmnyAmt() != null && "0".equals(vo.getAditPymntMlgValidMtCnt())){
throw new WnbtRestException("추가지급 마일리지 유효 월 수는 0 이상 이여야 합니다");
}
//메시지 문자 내용 없을 시
if ("01".equals(vo.getBbscttSndngMthCd())){
List<String> nullChk = new ArrayList<>();
if(vo.getSmsCnArr() != null){
for (int i = 0; i < vo.getSmsCnArr().length; i++) {
if (StringUtil.isEmpty(vo.getSmsCnArr()[i])) {
nullChk.add("Y");
}
}
}
if(nullChk != null){
if (nullChk.size() == 2) {
errorList.add(ValidateResultConverter.setErrorMap("smsCnArr", gconeMessageSource.getMessage("errors.required", new Object[]{"문자 양식"})));
}
}
}
//파일 첨부 사용 시 파일 확장자 없을 때
if ("Y".equals(vo.getFilAtchUseAt())){
if(StringUtil.isEmpty(vo.getFilPermFilExtsn())){
errorList.add(ValidateResultConverter.setErrorMap("smsCnArr", gconeMessageSource.getMessage("errors.required", new Object[]{"파일 첨부 허용 파일 확장자"})));
}else{//띄어쓰기, 앞 뒤 공백 제거
vo.setFilPermFilExtsn(vo.getFilPermFilExtsn().replace(" ","").trim());
}
}
if(errorList != null && errorList.size() > 0) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/updateBOBbsUpdt", vo),
ReplyFromResrc::getReply
);
}
/**
* 게시판 복사 폼
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbsCopyForm")
public String selectBbsCopyForm(BbsmngrVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setNtcntalkSndngFormInnbArr(new String[] {ntcntalkSndngFormInnb1, ntcntalkSndngFormInnb2});
vo.setSopmalCd(authSopmalCd);
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOBbsDtlUpdtForm",vo)
);
ObjectMapper objectMapper = new ObjectMapper();
try {
resultMap.put("updBbsList", objectMapper.writeValueAsString(resultMap.get("updBbsList")));
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch(Exception e) {
log.error(e.getMessage(), e);
}
model.addAttribute("resultMap", resultMap);
return "mngr/bbs/bbsmngr/BbsCopyC";
}
/**
* 게시판 삭제
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteBbsDel")
public ResponseEntity<WnbtResponse> deleteBbsDel(BbsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/updateBOBbsDel", vo),
ReplyFromResrc::getReply
);
}
/**
* 게시글 대시보드 조회폼
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbscttDshboardInqireForm")
public String selectBbscttDshboardInqireForm(BbsmngrVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOBbscttDshboardInqireForm",vo)
);
ObjectMapper objectMapper = new ObjectMapper();
try {
resultMap.put("updBbsList", objectMapper.writeValueAsString(resultMap.get("updBbsList")));
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch(Exception e) {
log.error(e.getMessage(), e);
}
model.addAttribute("resultMap", resultMap);
return "mngr/bbs/bbsmngr/BbscttDshboardForm";
}
/**
* 게시글 대시보드 조회
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbscttDshboardInqire")
public String selectBbscttDshboardInqire(BbsmngrVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOBbscttDshboardInqire", vo),
model,
"resultMap"
);
return "mngr/bbs/bbsmngr/BbscttDshboardR";
}
/**
* 주요 게시판 보기 설정 팝업
* @param BbsmngrVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMainBbsExpsrSetupPopupForm")
public ResponseEntity<WnbtResponse> selectMainBbsExpsrSetupPopupForm(BbsmngrVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/selectBOMainBbsExpsrSetupPopupForm", vo),
ReplyFromResrc::getReply
);
}
/**
* 주요 게시판 보기 설정 수정
* @param BbsmngrVO 게시판 등록 파라미터 VO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateMainBbsExpsrSetupUpdt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateMainBbsExpsrSetupUpdt(BbsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/bbs/updateBOMainBbsExpsrSetupUpdt", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,329 @@
package com.wb.domainserver.domain.mngr.bbs.bbsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
import java.util.Map;
@Data
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class BbsmngrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 게시판 게시판 번호 */
private String rnum;
/** 게시판 게시판 ID */
@NotEmpty(message = "게시판 ID")
private String bbsId;
/** 게시판 쇼핑몰 코드 */
private String sopmalCd;
/** 게시판 설정정보 고유번호 */
private String setupInfoInnb;
/** 게시판 게시판명 */
@NotEmpty(message = "게시판명")
private String bbsNm;
/** 게시판 게시판 유형 */
private String bbsTyCd;
/** 게시판 게시판 유형명 */
private String bbsTyNm;
/** 게시판 스킨 (리스트형, 갤러리형, 아코디언형) */
private String sknTyCd;
/** 게시판 읽기 사용여부 */
private String bbscttRedngUseAt;
/** 게시판 읽기 전체 | 회원 */
private String bbscttRedngAuthorDvCd;
/** 게시판 쓰기 사용여부 */
private String bbscttRegistUseAt;
/** 게시판 쓰기 전체 | 회원 */
private String bbscttRegistAuthorDvCd;
/** 게시판 답글 사용여부 */
private String answRegistUseAt;
/** 게시판 답글 전체 | 회원 */
private String answRegistAuthorDvCd;
/** 게시판 댓글 사용여부 */
private String cmRegistUseAt;
/** 게시판 댓글 전체 | 회원 */
private String cmRegistAuthorDvCd;
/** 게시판 게시글평가사용여부 */
private String bbscttEvlUseAt;
/** 게시판 추천/비추천, 추천 */
private String bbscttEvlRecomendStep;
/** 게시판 댓글평가사용여부 */
private String cmEvlUseAt;
/** 게시판 추천/비추천, 추천 */
private String cmEvlRecomendStep;
/** 게시판 기본내용사용여부 */
private String dftCnUseAt;
/** 게시판 기본내용 */
private String dftCn;
/** 게시판 모바일기본내용사용여부 */
private String mblDftCnUseAt;
/** 게시판 모바일기본내용 */
private String mblDftCn;
/** 게시판 비밀글사용여부 */
private String secretBbscttUseAt;
/** 게시판 자동등록방지사용여부 */
private String atmcRegistPrvnUseAt;
/** 게시판 파일첨부사용여부 */
private String filAtchUseAt;
/** 게시판 댓글설정사용여부 */
private String cmSetupUseAt;
/** 게시판 추천상품노출여부 */
private String recomendGoodsExpsrAt;
/** 게시판 비속어 개별 | 통합 */
private String slangFlterUseAt;
/** 게시판 페이지세로건수 */
private Integer pgeVtcCnt;
/** 게시판 페이지가로건수 */
private Integer pgeWthCnt;
/** 게시판 아이디(등급),아이디, 이름(등급),이름,이름(아이디,등급),이름(아이디) */
private String wrterIndictTyCd;
/** 게시판 관리자명 */
private String mngrNm;
/** 게시판 게시글발송방식코드 */
private String bbscttSndngMthCd;
/** 게시판 리뷰노출여부 */
private String bbsExpsrAt;
/** 게시판 상품상세페이지 노출건수 */
private String goodsDtlPgeExpsrCnt;
/** 게시판 신규게시물기준일수 */
private String newNttStdrDeCnt;
/** 게시판 인기게시물기준조회건수 */
private String popularNttStdrInqireCnt;
/** 리스트표시여부_번호 */
private String innbYn;
/** 리스트표시여부_제목 */
private String sjYn;
/** 리스트표시여부_내용 */
private String cnYn;
/** 리스트표시여부_작성자 */
private String regusrNmYn;
/** 리스트표시여부_등록일 */
private String registDtYn;
/** 리스트표시여부_공지기간 */
private String ntcDeYn;
/** 리스트표시여부_조회수 */
private String inqireCntYn;
/** 게시판 마일리지 */
/** 게시판 작성글자수 */
private String writngChrCnt;
/** 게시판 일반후기마일리지적립금액 */
private String gnrlRvwMlgAccmlmnyAmt;
/** 게시판 일반후기마일리지유효월수 */
private String gnrlRvwMlgValidMtCnt;
/** 게시판 포토후기마일리지적립금액 */
private String photoRvwMlgAccmlmnyAmt;
/** 게시판 포토후기마일리지유효월수 */
private String photoRvwMlgValidMtCnt;
/** 게시판 추가마일리지지급시작일자 */
private String aditMlgPymntBgnDe;
/** 게시판 추가마일리지지급종료일자 */
private String aditMlgPymntEndDe;
/** 게시판 추가지급마일리지적립금액 */
private String aditPymntMlgAccmlmnyAmt;
/** 게시판 추가지급마일리지유효월수 */
private String aditPymntMlgValidMtCnt;
/** 게시판 마일리지 자동 지급 여부 */
private String goodsRvwMlgPymntAt;
/** 게시판 주요게시판여부 */
private String mainBbsAt;
/** 게시판 주요게시판노출순서 */
private String mainBbsExpsrOrdr;
/** 게시판 전체 | 회원 */
private String[] redngAuthorDvCdArr;
private String[] registAuthorDvCdArr;
private String[] answRegistAuthorDvCdArr;
private String[] cmRegistAuthorDvCdArrArr;
private String[] bbscttRedngAuthorDvCd_c;
private String[] bbscttRegistAuthorDvCd_c;
private String[] answRegistAuthorDvCd_c;
private String[] cmRegistAuthorDvCd_c;
/** 게시판 기능 권한 [] 값 */
private String bbscttRedngAuthorDvCdNm;
private String bbscttRegistAuthorDvCdNm;
private String answRegistAuthorDvCdNm;
private String cmRegistAuthorDvCdNm;
/** 게시판읽기 권한 회원 _ 전체여부 */
private String bbscttRedngAuthorDvCd_c_all;
/** 게시판쓰기 권한 회원 _ 전체여부 */
private String bbscttRegistAuthorDvCd_c_all;
/** 답변쓰기 권한 회원 _ 전체여부 */
private String answRegistAuthorDvCd_c_all;
/** 댓글쓰기 권한 회원 _ 전체여부 */
private String cmRegistAuthorDvCd_c_all;
public void setBbscttRedngAuthorDvCd_c(String[] bbscttRedngAuthorDvCd_c) {
this.redngAuthorDvCdArr = bbscttRedngAuthorDvCd_c;
}
public void setBbscttRegistAuthorDvCd_c(String[] bbscttRegistAuthorDvCd_c) {
this.registAuthorDvCdArr = bbscttRegistAuthorDvCd_c;
}
public void setAnswRegistAuthorDvCd_c(String[] answRegistAuthorDvCd_c) {
this.answRegistAuthorDvCdArr = answRegistAuthorDvCd_c;
}
public void setCmRegistAuthorDvCd_c(String[] cmRegistAuthorDvCd_c) {
this.cmRegistAuthorDvCdArrArr = cmRegistAuthorDvCd_c;
}
/** 게시판 검색어 */
private String srchWord;
/** 게시판 타입 검색어 */
private String[] srchBbsTyCdArr;
private String srchBbsTyCd;
/** 게시판 스킨 검색어 */
private String[] srchSknTyCdArr;
private String srchSknTyCd;
private String pageDv;
/** boardform */
/** 문항 고유번호 */
private String qesitmInnb;
/** 문항 고유번호 "분류" */
private String inputDvInnb;
/** 문항 고유번호 "별점관리" */
private String scoreInnb;
/** 점수 표시 */
private String qesitmInnb_s;
/** 분류명 */
private String oldDvQesitmInnbs;
/** 입력항목 */
private String oldIpQesitmInnbs;
/** 분류명 */
private String[] qesitmInnb_d;
/** 입력항목 */
private String[] qesitmInnb_i;
/** 문항명 */
private String qesitmNm;
/** 입력항목 */
private String[] qesitmNm_i;
/** 분류명 */
private String[] qesitmNm_d;
private String starDelList;
/** 문항설명 */
private String qesitmDc;
private String[] qesitmDc_i;
/** 추가입력, 추가평가, 분류관리, 별점 */
private String aditItmDvCd;
/** 입력항목 */
private String[] aditItmDv_i;
/** 문항필수여부 */
private String qesitmEssntlAt;
private String[] qesitmEssntlAt_i;
/** 문항사용여부 */
private String qesitmUseAt;
private String[] qesitmUseAt_i;
/** 라디오,셀렉트,체크,텍스트,이미지, 점수 */
private String itmTyCd;
private String itmTyCdNm;
/** 입력항목|공지|이벤트 */
private String[] itmTy_i;
/** 문항순서 */
private String qesitmOrdr;
/** 이미지, 점수 (항목구분 : 별점평가 인 경우만 입력) */
private String scoreIndictMthCd;
/** boardform_itm */
/** 항목 고유번호 */
private String itmInnb;
private String[] oldItmInnbs;
private String olddvItmInnbs;
private String[] itmInnb_i;
/** 항목 내용 */
private String itmCn;
private String[] itmCn_i;
/** 항목 순서 */
private String itmOrdr;
/** board_rpus_answ */
/** 게시판 자주쓰는답변 고유번호 */
private String rpuseAnswInnb;
private String oldRpusInnbs;
/** 게시판 내용 */
private String cn;
private List<String> cnArr;
/** 게시판 정렬순서 */
private String sortOrdr;
/** board_auth */
/** 기능권한 고유번호 */
private String fnctAuthorInnb;
/** 회원등급 고유번호 */
private String mbrGradInnb;
/** 회원등급그룹 고유번호 */
private String mbrGradGroupInnb;
/** 기능구분코드 */
private String fnctDvCd;
/** board_design_item */
/** 게시판 표시항목 고유번호 */
private String indictItmInnb;
private String[] rpuseAnswInnbArr;
/** 게시판 항목명 */
private String itmNm;
private String[] itmNmArr;
/** board_setup_info */
/** 게시판 마스킹비속어 */
private String mskgSlang;
/** 게시판 허용도메인 */
private String permDomn;
/** 게시판 허용파일확장자 */
private String filPermFilExtsn;
/** 게시판 허용이미지확장자 */
private String permImgExtsn;
/** board_sms */
/** SMS 게시글발송구분코드 */
private String bbscttSndngDvCd;
private String[] sndngDvCdArr;
/** SMS 알림톡 발송양식 고유번호 */
private String ntcntalkSndngFormInnb;
private String[] ntcntalkSndngFormInnbArr;
/** SMS 내용 */
private String smsCn;
private String[] smsCnArr;
/** SMS 알림발송고유번호 */
private String ntcnSndngInnb;
private String[] ntcnSndngInnbArr;
/** 게시판 기능권한 */
private List<Map<String, Object>> authorList;
/** 게시판 추가 문항 + 항목 */
private Map<String, Object> addItems;
/** 게시판 분류 항목 */
private Map<String, Object> divItems;
/** 게시판 자주쓰는 질문 */
private List<Map<String, Object>> rpusAnsList;
/** 게시판 디자인 + 운영 사이트 표시항목 */
private Map<String, Object> design;
/** 게시판 메시지 발송 */
private Map<String, Object> smsSndng;
/** 주요 게시판 > 비노출 */
private String[] nonExpArr;
/** 주요 게시판 > 노출 */
private String[] expArr;
}

View File

@@ -0,0 +1,113 @@
package com.wb.domainserver.domain.mngr.bbs.cm.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;
/**
* AGNET_ID
*/
private String agentId;
/**
* 사용여부
*/
private String useAt;
/**
* 삭제작업자
*/
private Integer delusr;
/**
* 삭제일시
*/
private Date delDt;
/**
* 작성자 구분 코드
*/
private String regusrDvCd;
/**
* 쇼핑몰코드
*/
private String sopmalCd;
/**
* 신규댓글
*/
private String newCm;
/**
* 댓글삭제리스트
*/
private String[] delCmInnbArr;
/*
* 요청 값
*/
/*요청 페이지 구분(고객센터=>csc , 서브페이지=>subPage, 이용안내 => useGudiance, crm => crm)*/
private String reqUrl;
/* 서버 구분 sopmal or mngr*/
private String serverDv;
/*상세 구분*/
private String dtlAt;
/*사용자 등록,수정시 목록이동 or 등록,수정폼 유지*/
private String listAt;
}

View File

@@ -0,0 +1,147 @@
package com.wb.domainserver.domain.mngr.bbs.cnslt.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.bbs.cnslt.vo.CnsltVO;
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.*;
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.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/mngr/bbs/cnslt")
@Slf4j
public class CnsltController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 고객상담 통합게시판 목록 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCstmrCnsltUnityBbscttListInqireForm")
public String selectCstmrCnsltUnityBbscttListInqireForm(CnsltVO cnsltVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
cnsltVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/selectBOCstmrCnsltUnityBbscttListInqireForm", cnsltVO),
model,
"resultMap"
);
return "mngr/bbs/cnslt/CstmrCnsltUnityBbscttListRForm";
}
/**
* 고객사담 통합게시판 목록 조회
* @param cnsltVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCstmrCnsltUnityBbscttListInqire")
public String selectCstmrCnsltUnityBbscttListInqire(CnsltVO cnsltVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
cnsltVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/selectBOCstmrCnsltUnityBbscttListInqire", cnsltVO),
model,
"resultMap"
);
return "mngr/bbs/cnslt/CstmrCnsltUnityBbscttListR";
}
/**
* 고객상담 상세 내역 팝업
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCstmrCnsltDtlUpdtInqirePopup")
public String selectCstmrCnsltDtlUpdtInqirePopup(CnsltVO cnsltVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
cnsltVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/selectBOCnsltDtlUpdtInqirePopup", cnsltVO),
model,
"resultMap"
);
return "mngr/bbs/cnslt/CstmrCnsltDtlUpdtPopupU";
}
/**
* 상담 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateCstmrCnsltUpdt")
public ResponseEntity<WnbtResponse> updateCstmrCnsltUpdt(@Validated CnsltVO cnsltVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
// 정합성 검사
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
} else {
List<Map<String, String>> errorList = new ArrayList<>();
if (cnsltVO.getCnsltCn() == null || cnsltVO.getCnsltCn().isEmpty()) {
errorList.add(ValidateResultConverter.setErrorMap("cnsltCn",
gconeMessageSource.getMessage("errors.required", new Object[] { "상담 내용" })));
}
if (errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
}
if (cnsltVO.getOrdrNb() != null && cnsltVO.getOrdrNb() == "") {
cnsltVO.setOrdrNb(null);
}
if (cnsltVO.getDlivyInnb() != null && cnsltVO.getDlivyInnb() == "") {
cnsltVO.setDlivyInnb(null);
}
if (cnsltVO.getGoodsInqryBbscttNb() != null && cnsltVO.getGoodsInqryBbscttNb() == "") {
cnsltVO.setGoodsInqryBbscttNb(null);
}
if (cnsltVO.getGoodsRvwBbscttNb() != null && cnsltVO.getGoodsRvwBbscttNb() == "") {
cnsltVO.setGoodsRvwBbscttNb(null);
}
cnsltVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/updateBOCnsltUpdt", cnsltVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,132 @@
package com.wb.domainserver.domain.mngr.bbs.cnslt.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 관리자 - 상담 VO
* @author 추지훈
* @since 2024-01-26
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-01-26 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CnsltVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/**
* 상담 컬럼
*/
/** 상담내역고유번호 */
private Integer cnsltDtlsInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 회원고유번호 */
private Integer mbrInnb;
/** 회원 아이디 */
private String mbrid;
/** 회원명 */
private String mbrNm;
/** 회원 핸드폰번호 */
private String mbtlnb;
/** 회원명 이메일*/
private String email;
/** 회원구분코드 */
private String mbrDvCd;
/** 관리자 고유번호 */
private String mngrInnb;
/** 관리자이름 */
private String mngrNm;
/** 상담분류 */
private String cnsltCl;
/** 관련주문번호 */
private String ordrNb;
/** 관련주문번호 */
private String ordrInnb;
/** 출고코드 */
private String dlivyInnb;
/** 반품코드 */
private String rtngudCdNb;
/** 환불코드 */
private String refndCdNb;
/** 관련상품문의 */
private String goodsInqryBbscttNb;
/** 관련상담번호 */
private String goodsRvwBbscttNb;
/** 처리상태 */
private String procsSttusCd;
/** 처리일시 */
private String procsDt;
/** 상담내용 */
private String cnsltCn;
/** 전화구분코드 */
private String telnbDvCd;
/** 대분류 */
private String lrgeCl;
/** 중분류 */
private String middlCl;
/** 소분류 */
private String smllCl;
/** 녹취 key */
private String recrdKy;
/** 전화번호 */
private String telnb;
/**
* 검색
*/
/** 검색_검색어 구분 */
private String srchKeywordDv;
/** 검색_검색어 */
private String srchKeyword;
/** 검색_등록일 구분 */
private String srchDtDv;
/** 검색_시작일 */
private String srchStartDate;
/** 검색_종료일 */
private String srchEndDate;
/** 검색_상담자 */
private String srchMngrNm;
/** 검색_처리 여부 */
private String[] srchProcsSttusCd;
/** 검색_관련번호 구분 */
private String srchRelateDv;
/** 검색_관련번호 */
private String srchRelateNm;
/** 검색_상담내용 */
private String srchCnsltCn;
/** 녹취 키 */
private String customer_record_key;
/** menu 인덱스*/
private String menuIdx;
}

View File

@@ -0,0 +1,740 @@
package com.wb.domainserver.domain.mngr.bbs.gnrlsctt.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.bbs.cm.vo.CmVO;
import com.wb.domainserver.domain.mngr.bbs.gnrlsctt.service.GnrlbbscttService;
import com.wb.domainserver.domain.mngr.bbs.gnrlsctt.vo.GnrlscttVO;
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.*;
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.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
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 김혜지
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-01-05 김혜지 최초 생성
*
* </pre>
* @since 2024-01-05
*/
@Slf4j
@Controller
@RequestMapping("/mngr/bbs/gnrlsctt")
public class GnrlscttController {
/**
* WebClient 호출을 위한 wrapper
*/
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private FileStorageService filestore;
@Autowired
private GnrlbbscttService service;
/**
* 게시글 목록 조회(검색 section)
*
* @param vo 파라미터 vo
* @param model
* @return GnrlBbscttListRForm.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBbscttListInqireForm")
public String selectBbscttListInqireForm(GnrlscttVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setRvwBbscttDv("bbsctt");
vo.setServerDv("mngr");
vo.setSopmalCd(authSopmalCd);
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqireForm", vo),
model,
"resultMap"
);
return "mngr/bbs/gnrlsctt/GnrlBbscttListRForm";
}
/**
* 일반게시글 목록 조회 (리스트 section)
* @param vo 파라미터 vo
* @param model
* @return GnrlBbscttListR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBbscttListInqire")
public String selectBbscttListInqire(GnrlscttVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
//쇼핑몰코드 set
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", vo),
model,
"resultMap"
);
model.addAttribute("vo", vo);
String bbsTyCd = vo.getBbsTyCd();
String returnUrl = "";
switch (bbsTyCd) {
case "01" :
returnUrl = "mngr/bbs/gnrlsctt/GnrlBbscttListR";
break;
case "02" :
returnUrl = "mngr/bbs/gnrlsctt/NoticeListR";
break;
case "03" :
returnUrl = "mngr/bbs/gnrlsctt/EvtBbscttListR";
break;
case "04" :
returnUrl = "mngr/bbs/gnrlsctt/FaqListR";
break;
case "05" :
returnUrl = "mngr/bbs/gnrlsctt/GoodsQnaBbscttListR";
break;
case "08" :
returnUrl = "mngr/bbs/gnrlsctt/GnrlBbscttListR";
break;
case "09" :
returnUrl = "mngr/bbs/gnrlsctt/MgzListR";
break;
case "10" :
returnUrl = "mngr/bbs/gnrlsctt/useGuidanceListR";
break;
case "11" :
returnUrl = "mngr/bbs/gnrlsctt/EvtResultListR";
break;
}
return returnUrl;
}
/**
* 일반게시글 상세 조회 팝업
* @param vo 파라미터 vo
* @param model
* @return GnrlBbscttDtlPopupR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbscttDtlInqirePopup")
public String selectBbscttDtlInqirePopup(HttpServletRequest request, ModelMap model, GnrlscttVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
/*agentId,ip set*/
Map<String,String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String agentId =req.get("userAgent");
vo.setAgentId(agentId);
String ip = req.get("XForwardedFor");
vo.setIp(ip);
//쇼핑몰 set
vo.setServerDv("mngr");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttDtlInqirePopup", vo),
model,
"resultMap"
);
model.addAttribute("ip", ip);
model.addAttribute("dtlPop",vo.getDtlPop());
return "mngr/bbs/gnrlsctt/GnrlBbscttDtlPopupR";
}
/**
* 일반게시글 상세 댓글 조회
* @param vo 파라미터 vo
* @param model
* @return GnrlBbscttDtlPopupR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmList")
public String selectCmList(HttpServletRequest request, CmVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setServerDv("mngr");
//ip주소 get
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = req.get("XForwardedFor");
vo.setIp(ip);
//쇼핑몰 set
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/selectBOCmList", vo),
model,
"resultMap"
);
model.addAttribute("cmVO", vo);
model.addAttribute("ip", ip);
return "mngr/bbs/gnrlsctt/CmListR";
}
/**
* 마일리지 회수 금액 조회
*
* @param bbsctt 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMlgRtrvlAmt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> selectMlgRtrvlAmt(GnrlscttVO bbsctt, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
//쇼핑몰코드 set
bbsctt.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOMlgRtrvlAmt", bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 게시글 논리 삭제
* @param bbsctt 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBbscttDel" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateBbscttDel(GnrlscttVO bbsctt, @CookieValue(value = "authSopmalCd") String authSopmalCd){
//쇼핑몰코드 set
bbsctt.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttDel", bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 일반게시글 등록 팝업
* @param vo 파라미터 vo
* @param model
* @return GnrlBbscttRegistPopupC.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbscttRegistPopupForm")
public String selectBbscttRegistPopupForm(HttpServletRequest request, GnrlscttVO bbsctt, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
//쇼핑몰코드 set
bbsctt.setServerDv("mngr");
bbsctt.setSopmalCd(authSopmalCd);
//ip주소 get
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = req.get("XForwardedFor");
bbsctt.setIp(ip);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttRegistPopupForm", bbsctt),
model,
"resultMap"
);
model.addAttribute("ip", ip);
return "mngr/bbs/gnrlsctt/GnrlBbscttRegistPopupC";
}
/**
* 일반게시글 등록
* @param bbsctt 파라미터 vo
* @param BindingResult
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertBbscttRegist" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertBbscttRegist( HttpServletRequest request,@Validated GnrlscttVO bbsctt, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd){
List<Map<String, String>> errorList = new ArrayList<>();
//validation체크
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}else if(true) {
//노출 여부가 'Y'이고 노출 기간 제한 '기본'일 시 날짜 지정 여부 체크
if ("Y".equals(bbsctt.getExpsrAt()) && "Y".equals(bbsctt.getNtcePdSetupAt())) {
if (StringUtil.isEmpty(bbsctt.getNtceBgnDe())) {
errorList.add(ValidateResultConverter.setErrorMap("ntceBgnDe", gconeMessageSource.getMessage("errors.required", new Object[]{"노출 시작일"})));
}
if (StringUtil.isEmpty(bbsctt.getNtceEndDe())) {
errorList.add(ValidateResultConverter.setErrorMap("ntceEndDe", gconeMessageSource.getMessage("errors.required", new Object[]{"노출 종료일"})));
}
}
//공지글 등록 여부가 'Y'이고 공지 기간 제한 '기본'일 시 날짜 지정 여부 체크
if ("Y".equals(bbsctt.getNtcAt()) && "Y".equals(bbsctt.getNtcPdSetupAt())) {
if (StringUtil.isEmpty(bbsctt.getNtcBgnDe())) {
errorList.add(ValidateResultConverter.setErrorMap("ntcBgnDe", gconeMessageSource.getMessage("errors.required", new Object[]{"공지 시작일"})));
}
if (StringUtil.isEmpty(bbsctt.getNtcEndDe())) {
errorList.add(ValidateResultConverter.setErrorMap("ntcEndDe", gconeMessageSource.getMessage("errors.required", new Object[]{"공지 종료일"})));
}
}
//비밀글 여부가 'Y'이고 비밀번호 없을 시
if("Y".equals(bbsctt.getSecretBbscttAt())) {
if(StringUtil.isEmpty(bbsctt.getPassword())){
errorList.add(ValidateResultConverter.setErrorMap("password", gconeMessageSource.getMessage("errors.required", new Object[]{"비밀번호"})));
}
}
//순서 여부가 'Y'이고 순서 값 없을 시
if("Y".equals(bbsctt.getSortOrdrAt())) {
if(bbsctt.getSortOrdr()== null){
errorList.add(ValidateResultConverter.setErrorMap("sortOrdr", gconeMessageSource.getMessage("errors.required", new Object[]{"순서"})));
}
}
//게시판 스킨타입이 갤러리형이고 대표이미지 없을 시
if ("02".equals(bbsctt.getSknTyCd()) && "N".equals(bbsctt.getRepresntFilAt())) {
errorList.add(ValidateResultConverter.setErrorMap("represntFilAt", 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));
}
//쇼핑몰코드 set
bbsctt.setServerDv("mngr");
bbsctt.setSopmalCd(authSopmalCd);
/*agentId,ip set*/
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = req.get("XForwardedFor");
bbsctt.setIp(ip);
String agentId = "";
// 쿠키를 가져옴
Cookie[] cookies = request.getCookies();
//agentId 쿠키 있을 경우 가져옴
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("agent_id")) {
agentId = cookie.getValue();
bbsctt.setAgentId(agentId);
}
}
}
//파일 경로 설정 (등록)
List<HashMap<String, Object>> file = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", bbsctt.getSopmalCd());
request.setAttribute("subPathId", bbsctt.getBbsId());
request.setAttribute("pathGubun", "BDIG");
if ("Y".equals(bbsctt.getRepresntFilAt())) { //대표이미지 업로드 할 경우
List<HashMap<String, Object>> represntUlpladFileList = new ArrayList<HashMap<String, Object>>();
represntUlpladFileList = filestore.fileUpload(request); //BDIG로 경로 구분 get
//대표 이미지 파일 등록
HashMap<String, Object> representUlpladFileMap = new HashMap<String, Object>();
representUlpladFileMap = represntUlpladFileList.get(0); //첫번재 파일 정보만 get(대표이미지 첫번째)
bbsctt.setRepresntFileInfo(representUlpladFileMap); //대표이미지 파일 정보 set
represntUlpladFileList.remove(0); //대표이미지 정보 삭제
//파일 첨부 등록
//일반 파일 첨부일 경우
if(represntUlpladFileList.size() > 0){
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("pathGubun", "BDFL");//게시판 일반첨부파일 구분
request.setAttribute("validExp", bbsctt.getFilPermFilExtsn());//게시판 일반첨부파일 구분
ulpladFileMap = filestore.fileUpload(request); //경로구분이 바뀐 주소로 set
bbsctt.setFileInfo(ulpladFileMap); //파일 set
}
} else {
//파일 첨부 등록
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("pathGubun", "BDFL");//게시판 일반첨부파일 구분
request.setAttribute("validExp", bbsctt.getFilPermFilExtsn());//게시판 일반첨부파일 구분
ulpladFileMap = filestore.fileUpload(request);
bbsctt.setFileInfo(ulpladFileMap);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/insertBOBbscttRegist", bbsctt),
ReplyFromResrc::getReply
);
}
/******************************************************
* 게시글 수정 팝업
******************************************************/
/**
* 일반게시글 수정 팝업
* @param bbsctt 파라미터 vo
* @param model
* @return GnrlBbscttUpdtPopupU.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBbscttUpdtPopupForm")
public String selectBbscttUpdtPopupForm(GnrlscttVO bbsctt, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
//쇼핑몰코드 set
bbsctt.setServerDv("mngr");
bbsctt.setSopmalCd(authSopmalCd);
//게시글 상세 조회 및 게시판 설정 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttUpdtPopupForm", bbsctt),
model,
"resultMap"
);
model.addAttribute("dtlPop", bbsctt.getDtlPop());
return "mngr/bbs/gnrlsctt/GnrlBbscttUpdtPopupU";
}
/**
* 일반게시글 수정
* @param bbsctt 파라미터 vo
* @param bindingResult
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBbscttUpdt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateBbscttUpdt( HttpServletRequest request,@Validated GnrlscttVO bbsctt, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd){
List<Map<String, String>> errorList = new ArrayList<>();
//validation체크
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}else if(true) {
//노출 여부가 'Y'이고 노출 기간 제한 '기본'일 시 날짜 지정 여부 체크
if ("Y".equals(bbsctt.getExpsrAt()) && "Y".equals(bbsctt.getNtcePdSetupAt())) {
if (StringUtil.isEmpty(bbsctt.getNtceBgnDe())) {
errorList.add(ValidateResultConverter.setErrorMap("ntceBgnDe", gconeMessageSource.getMessage("errors.required", new Object[]{"노출 시작일"})));
}
if (StringUtil.isEmpty(bbsctt.getNtceEndDe())) {
errorList.add(ValidateResultConverter.setErrorMap("ntceEndDe", gconeMessageSource.getMessage("errors.required", new Object[]{"노출 종료일"})));
}
}
//공지글 등록 여부가 'Y'이고 공지 기간 제한 '기본'일 시 날짜 지정 여부 체크
if ("Y".equals(bbsctt.getNtcAt()) && "Y".equals(bbsctt.getNtcPdSetupAt())) {
if (StringUtil.isEmpty(bbsctt.getNtcBgnDe())) {
errorList.add(ValidateResultConverter.setErrorMap("ntcBgnDe", gconeMessageSource.getMessage("errors.required", new Object[]{"공지 시작일"})));
}
if (StringUtil.isEmpty(bbsctt.getNtcEndDe())) {
errorList.add(ValidateResultConverter.setErrorMap("ntcEndDe", gconeMessageSource.getMessage("errors.required", new Object[]{"공지 종료일"})));
}
}
//게시판 스킨타입이 갤러리형이고 대표이미지 없을 시
if("02".equals(bbsctt.getSknTyCd())&& "N".equals(bbsctt.getRepresntFilAt())){
errorList.add(ValidateResultConverter.setErrorMap("represntFilAt", gconeMessageSource.getMessage("errors.required", new Object[]{"대표이미지"})));
}
//순서 여부가 'Y'이고 순서 값 없을 시
if("Y".equals(bbsctt.getSortOrdrAt())) {
if(bbsctt.getSortOrdr()== null){
errorList.add(ValidateResultConverter.setErrorMap("sortOrdr", 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));
}
//쇼핑몰코드 set
bbsctt.setServerDv("mngr");
bbsctt.setSopmalCd(authSopmalCd);
//파일 경로 설정 (수정)
List<HashMap<String, Object>> file = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", bbsctt.getSopmalCd()); //쇼핑몰 코드
request.setAttribute("subPathId", bbsctt.getBbsId()); //게시판 아이디
request.setAttribute("pathGubun", "BDIG"); //이미지 경로 set
if ("Y".equals(bbsctt.getRepresntFilAt())) { //대표이미지 업로드 할 경우
List<HashMap<String, Object>> represntUlpladFileList = new ArrayList<HashMap<String, Object>>();
if ("Y".equals(bbsctt.getRepresntFilChangeAt())) {//대표이미지 파일을 변경할 경우
represntUlpladFileList = filestore.fileUpload(request); //BDIG로 경로 구분 get
//대표 이미지 파일 등록
HashMap<String, Object> representUlpladFileMap = new HashMap<String, Object>();
representUlpladFileMap = represntUlpladFileList.get(0); //첫번재 파일 정보만 get(대표이미지 첫번째)
bbsctt.setRepresntFileInfo(representUlpladFileMap); //대표이미지 파일 정보 set
represntUlpladFileList.remove(0);
//파일 첨부 등록
if (represntUlpladFileList.size() > 0) {
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
//일반 파일 첨부일 경우
if ("N".equals(bbsctt.getDropzoneAt())) {
request.setAttribute("pathGubun", "BDFL");//게시판 일반첨부파일 구분
request.setAttribute("validExp", bbsctt.getFilPermFilExtsn());//게시판 일반첨부파일 구분
}
ulpladFileMap = filestore.fileUpload(request); //경로구분이 바뀐 주소로 set
if ("Y".equals(bbsctt.getRepresntFilChangeAt())) {//대표이미지 파일을 변경할 경우
ulpladFileMap.remove(0);
}
bbsctt.setFileInfo(ulpladFileMap); //파일 set
}
}else{
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
//일반 파일 첨부일 경우
if ("N".equals(bbsctt.getDropzoneAt())) {
request.setAttribute("pathGubun", "BDFL");//게시판 일반첨부파일 구분
request.setAttribute("validExp", bbsctt.getFilPermFilExtsn());//게시판 일반첨부파일 구분
}
ulpladFileMap = filestore.fileUpload(request); //경로구분이 바뀐 주소로 set
bbsctt.setFileInfo(ulpladFileMap); //파일 set
}
} else {
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
//파일 첨부 등록
if ("N".equals(bbsctt.getDropzoneAt())) {
request.setAttribute("pathGubun", "BDFL");//게시판 일반첨부파일 구분
request.setAttribute("validExp", bbsctt.getFilPermFilExtsn());//게시판 일반첨부파일 구분
}
ulpladFileMap = filestore.fileUpload(request);
bbsctt.setFileInfo(ulpladFileMap);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttUpdt", bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 댓글 등록
* @param cm 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertBbscttCmRegist")
public ResponseEntity<WnbtResponse> insertBbscttCmRegist(HttpServletRequest request ,@Validated CmVO cm, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//쇼핑몰코드 set
cm.setServerDv("mngr");
cm.setSopmalCd(authSopmalCd);
//ip주소 get
Map<String,String> req = Util.getRequestInfo(request);
String ip = req.get("XForwardedFor");
cm.setIp(ip);
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, @CookieValue(value = "authSopmalCd") String authSopmalCd){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//쇼핑몰코드 set
cm.setServerDv("mngr");
cm.setSopmalCd(authSopmalCd);
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, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//쇼핑몰코드 set
cm.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cm/deleteBOCmDel", cm),
ReplyFromResrc::getReply
);
}
/**
* FAQ 노출여부 수정
*
* @param bbsctt 파라미터 vo
* @param bindingResult
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateBbscttExpsrAt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateBbscttExpsrAt(GnrlscttVO bbsctt, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//쇼핑몰코드 set
bbsctt.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttExpsrAt", bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 일반게시글 답변 등록 팝업
*
* @param bbsctt 파라미터 vo
* @param model
* @return GnrlBbscttUpdtPopupU.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBbscttAnswRegistPopupForm")
public String selectBbscttAnswRegistPopupForm(GnrlscttVO bbsctt, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
bbsctt.setServerDv("mngr");
//쇼핑몰코드 set
bbsctt.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/bbs/gnrlbbsctt/selectBOBbscttAnswRegistPopupForm", bbsctt),
model,
"resultMap"
);
model.addAttribute("dtlPop", bbsctt.getDtlPop());
return "mngr/bbs/gnrlsctt/GnrlBbscttAnswRegistPopupC";
}
/**
* 일반게시글 답변 등록
* @param bbsctt 파라미터 vo
* @param bindingResult
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertBbscttAnswRegist")
public ResponseEntity<WnbtResponse> insertBbscttAnswRegist(HttpServletRequest request, @Validated GnrlscttVO bbsctt, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
bbsctt.setServerDv("mngr");
//쇼핑몰코드 set
bbsctt.setSopmalCd(authSopmalCd);
/*agentId,ip set*/
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = req.get("XForwardedFor");
bbsctt.setIp(ip);
String agentId = "";
// 쿠키를 가져옴
Cookie[] cookies = request.getCookies();
//agentId 쿠키 있을 경우 가져옴
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("agent_id")) {
agentId = cookie.getValue();
bbsctt.setAgentId(agentId);
}
}
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/insertBOBbscttRegist", bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 일반게시글 답변 수정 팝업
*
* @param bbsctt 파라미터 vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBbscttAnswUpdtPopupForm")
public String selectBbscttAnswUpdtPopupForm(GnrlscttVO bbsctt, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
//쇼핑몰코드 set
bbsctt.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/bbs/gnrlbbsctt/selectBOBbscttAnswUpdtPopupForm", bbsctt),
model,
"resultMap"
);
model.addAttribute("dtlPop", bbsctt.getDtlPop());
return "mngr/bbs/gnrlsctt/GnrlBbscttAnswUpdtPopupU";
}
/**
* 일반게시글 답변 수정
*
* @param bbsctt 파라미터 vo
* @param bindingResult
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateBbscttAnswUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateBbscttAnswUpdt(@Validated GnrlscttVO bbsctt, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//쇼핑몰코드 set
bbsctt.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttUpdt", bbsctt),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,36 @@
package com.wb.domainserver.domain.mngr.bbs.gnrlsctt.mapper;
import com.wb.domainserver.domain.mngr.bbs.gnrlsctt.vo.GnrlscttVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* 일반게시글 관리 Mapper
*
* @author 김혜지
* @since 2024-01-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-01-05 김혜지 최초 생성
*
* </pre>
*/
@Mapper
@Repository
public interface GnrlbbscttMapper {
/*******************
* 게시글 상세 조회
*******************/
/** 게시글 상세조회 */
public DataMap selectBOBbscttDtlInqirePopup(GnrlscttVO bbsctt);
}

View File

@@ -0,0 +1,58 @@
package com.wb.domainserver.domain.mngr.bbs.gnrlsctt.service;
import com.wb.domainserver.domain.mngr.bbs.gnrlsctt.mapper.GnrlbbscttMapper;
import com.wb.domainserver.domain.mngr.bbs.gnrlsctt.vo.GnrlscttVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* 게시글 관리 Service
*
* @author 김혜지
* @since 2024-01-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-01-05 김혜지 최초 생성
*
* </pre>
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class GnrlbbscttService {
@Autowired
private GnrlbbscttMapper mapper;
/*************************************************************************************
* 상세조회 service시작
*****************************************************************************************/
/**
* 게시글 상세조회
*
* @param bbsctt 파라미터VO
* @return BOGnrlbbscttVO 상세조회 결과
*/
public Map<String, Object> selectBOBbscttDtlInqirePopup(GnrlscttVO bbsctt) {
Map<String, Object> map = new HashMap<String, Object>();
//게시글 상세 조회
DataMap bbscttInfo = new DataMap();
bbscttInfo = mapper.selectBOBbscttDtlInqirePopup(bbsctt);
map.put("dataMap", bbscttInfo);
return map;
}
}

View File

@@ -0,0 +1,331 @@
package com.wb.domainserver.domain.mngr.bbs.gnrlsctt.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;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class GnrlscttVO extends AbstractVO {
private static final long serialVersionUID = 1L;
//게시판 검색 조건 쇼핑몰 코드
private String sopmalCd;
/**
* 게시글 정보
*/
/*회원고유번호*/
private Integer mbrInnb;
/*회원고유번호*/
private String MbrDvCd;
/** 게시글고유번호 */
private String bbscttInnb;
/** 부모게시글고유번호 */
private String parntsBbscttInnb;
/** 게시판ID */
private String bbsId;
/** DEPTH */
private Integer depth;
/** 등록자구분코드 */
private String regusrDvCd;
/** 등록자ID */
private String regusrId;
/** 등록자명 */
private String regusrNm;
/** 비밀번호 */
private String password;
@NotBlank(message = "내용")
@Length(max = 16777215, message = "내용")
/** 내용 */
private String cn;
/** 제목 */
@NotBlank(message = "제목")
@Length(min = 0, max = 100, message = "제목")
private String sj;
/** 조회건수 */
private Integer inqireCnt;
/** 댓글사용여부 */
private String cmUseAt;
/** 추천건수 */
private Integer recomendCnt;
/** 비추천건수 */
private Integer nonrecomendCnt;
/** 정렬순서 */
private Integer sortOrdr;
/** 정렬순서여부 */
private String sortOrdrAt;
/** 대표이미지원본파일명 */
private String reprsntImgOrginlFilNm;
/** 대표이미지시스템파일명 */
private String reprsntImgSysFilNm;
/** 비밀글여부 */
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;
/** 베스트여부 */
private String bstAt;
/** 포토리뷰여부 */
private String photoRvwAt;
/** NPay 게시글 일련번호 */
private String npayBbscttSnb;
/** NPay 답변 전송여부*/
private String npayAnswTrnsmisAt;
/** NPay 답변번호*/
private String npayAnswNb;
/** NPay 상품주문번호*/
private String npayGoodsOrdrnb;
/** NPay 리뷰유형코드*/
private String npayRvwTyCd;
/** IP */
private String ip;
/** agentId */
private String agentId;
/** 사용여부 */
private String useAt;
/** 삭제작업자 */
private Integer delusr;
/** 삭제일시 */
private Date delDt;
/**
* 검색조건
*/
/** 검색구분 */
private String srchDv;
/** 검색어 */
private String srchKeyword;
/** 검색 시작일 */
private String srchStartDt;
/** 검색 종료일 */
private String srchEndDt;
/** 게시판 이름 코드 */
private String bbsTyCd;
/** 답변 상태 */
private String answSttus;
/** 분류명 */
private String srchitmInnb;
/** 기간 */
private String datePeriod;
/** 순번 */
private Integer rnum;
/** 항목내용 */
private String itmCn;
/** 대시보드여부 */
private String dashAt;
/**
* 게시글추가문항답변
*/
/** 문항답변고유번호 */
private String qesitmAnswInnb;
/** 문항고유번호 */
private String qesitmInnb;
/** 문항필수여부 */
private String qesitmEssntlAt;
/** 문항사용여부 */
private String qesitmUseAt;
/** 문항순서 */
private String qesitmOrdr;
/** 항목고유번호 */
private String itmInnb;
/** 답변내용 */
private String answCn;
/** 평가점수 */
private String evlScore;
/** 문항필수여부(배열) */
private String[] qesitmEssntlAtArr;
/** 문항고유번호(배열) */
private String[] qesitmInnbArr;
/** 문항 명(배열) */
private String[] qesitmNmArr;
/** 항목고유번호(배열) */
private String[] itmInnbArr;
/** 답변내용(배열) */
private String[] answCnArr;
/** 답변 여부(배열) */
private String[] qesitmAtArr;
/** 선택삭제 게시판리스트 */ // 필요없을듯
//private String[] delBbsIdArr;
/** 선택삭제 게시글리스트 */
private String[] delBbscttInnbArr;
/**
* 첨부파일 정보
*/
/* 파일 고유번호 */
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 HashMap<String, Object> represntFileInfo;
/*파일 존재여부*/
private String filExtAt;
/*현존 파일 정보*/
private String extFiles;
/*기존 파일 정보*/
private String filesInfo;
/*기존 파일 변화 여부*/
private String extFilChangeAt;
/*대표이미지 첨부 구분*/
private String represntFilAt;
/*파일 수정여부*/
private String represntFilChangeAt;
/*파일 첨부 허용 확장자*/
private String filPermFilExtsn;
/*드롭존 존재 여부*/
private String dropzoneAt;
/*파일 구분*/
private String filDvCd;
/** 댓글 리스트 */
private String[] cmList;
private String boardAnswInnb;
private String oldFileName;
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[] goodsInnbArr;
/*주문상품옵션고유번호*/
private String ordrGoodsOptnInnb;
/*주문상품옵션고유번호 배열*/
private String[] ordrGoodsOptnInnbArr;
/*추천상품고유번호*/
private String recomendGoodsInnb;
/** 상세조회와 페이지 구분처리 */
private String dtlPop;
/**
* 게시판 설정
*/
/** 설정고유번호 */
private String setupInfoInnb;
/** 비속어필터사용여부 */
private String slangFlterUseAt;
/** 마스킹비속어 */
private String mskgSlang;
/*스킨타입코드*/
private String sknTyCd;
/*추천상품노출여부*/
private String recomendGoodsExpsrAt;
/* 갤러리형 목록 조회 행 개수*/
private String pgeVtcCnt;
/* 갤러리형 목록 조회 열 개수*/
private String pgeWthCnt;
/*이전글다음글 조회 여부*/
private String prevNext;
/*게시글발송방식코드*/
private String bbscttSndngMthCd;
/*sms 관련*/
private String bbscttSndngDvCd;
/*
* 메시지 발송
*/
/*답변 휴대폰번호*/
private String answMbtlnb;
/*답변수신여부*/
private String answSmsRecptn;
/*답변 타겟 작성자 아이디*/
private String answRegusrId;
/*답변 타겟 작성자 이름*/
private String answRegusrNm;
/*답변 타겟 작성자 고유번호*/
private Integer answRegusr;
/**
* 권한
*/
//관리자 인지 사용자인지
private String AuthDv;
//사용자 고유번호
private Integer AuthInnb;
/*
* 요청 값
*/
/*요청 페이지 구분(고객센터=>csc , 서브페이지=>subPage, 이용안내 => useGudiance, crm => crm)*/
private String reqUrl;
/* 서버 구분 sopmal or mngr*/
private String serverDv;
/*상세 구분*/
private String dtlAt;
/*사용자 등록,수정시 목록이동 or 등록,수정폼 유지*/
private String listAt;
/*리뷰,게시글 구분*/
private String rvwBbscttDv;
/*공지여부 'Y' 개수*/
private Integer nonNtcCnt;
/*공지여부 'N' 개수*/
private Integer ntcCnt;
/*총 건수*/
private Integer totCnt;
/*비밀번호 변경 여부*/
private String passwordChngAt;
/*스크립트 내용*/
private String cnScript;
}

View File

@@ -0,0 +1,424 @@
package com.wb.domainserver.domain.mngr.bbs.rvw.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.bbs.rvw.vo.RvwVO;
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.*;
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.util.CollectionUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@Slf4j
@RequestMapping("/mngr/bbs/rvw")
public class RvwController {
/**
* WebClient 호출을 위한 wrapper
*/
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private FileStorageService filestore;
/**
* 게시글 목록 조회 팝업 (검색 section)
*
* @param vo 파라미터 vo
* @return GnrlBbscttListRForm.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRvwListInqireForm")
public String selectRvwListInqireForm(RvwVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setRvwBbscttDv("rvw");
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqireForm", vo),
model,
"resultMap"
);
return "mngr/bbs/rvw/RvwListRForm";
}
/**
* 리뷰 목록 조회 (리스트 section)
*
* @param vo 파라미터 vo
* @return GnrlBbscttListR.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRvwListInqire")
public String selectRvwListInqire(RvwVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
//게시글 노출 항목 설정값과 게시판 목록 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", vo),
model,
"resultMap"
);
return "mngr/bbs/rvw/RvwListR";
}
/**
* 베스트 후기 수정(리스트 section)
*
* @param rvwVO 파라미터 vo
* @return GnrlBbscttListR.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateRvwBstAt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateRvwBstAt(RvwVO rvwVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
rvwVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBORvwBstAt", rvwVO),
ReplyFromResrc::getReply
);
}
/**
* 리뷰 메인노츨 수정
*
* @param rvwVO 파라미터 vo
* @return GnrlBbscttListR.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateRvwMainExpsrAt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateRvwMainExpsrAt(RvwVO rvwVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
rvwVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBORvwMainExpsrAt", rvwVO),
ReplyFromResrc::getReply
);
}
/**
* 리뷰 상세 조회 팝업
*
* @param vo 파라미터 vo
* @return GnrlBbscttDtlPopupR.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRvwDtlInqirePopup")
public String selectRvwDtlInqirePopup(RvwVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setRvwBbscttDv("rvw");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttDtlInqirePopup", vo),
model,
"resultMap"
);
model.addAttribute("dtlPop", vo.getDtlPop());
return "mngr/bbs/rvw/RvwDtlPopupR";
}
/**
* 게시글 논리 삭제
*
* @param bbsctt 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateRvwDel", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateRvwDel(@RequestBody RvwVO bbsctt, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
bbsctt.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttDel", bbsctt),
ReplyFromResrc::getReply
);
}
/**
* 리뷰 등록 팝업
*
* @param bbsctt 파라미터 vo
* @return GnrlBbscttRegistPopupC.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRvwRegistPopupForm")
public String selectRvwRegistPopupForm(HttpServletRequest request, RvwVO rvwVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
//ip주소 get
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = req.get("XForwardedFor");
rvwVO.setIp(ip);
rvwVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttRegistPopupForm", rvwVO),
model,
"resultMap"
);
model.addAttribute("ip", ip);
return "mngr/bbs/rvw/RvwRegistPopupC";
}
/**
* 리뷰 등록
*
* @param bbsctt 파라미터 vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertRvwRegist", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertRvwRegist(HttpServletRequest request, @Validated RvwVO rvwVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
List<Map<String, String>> errorList = new ArrayList<>();
//validation체크
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
} else if (true) {
//순서 여부가 'Y'이고 순서 값 없을 시
if ("Y".equals(rvwVO.getSortOrdrAt())) {
if (rvwVO.getSortOrdr() == null) {
errorList.add(ValidateResultConverter.setErrorMap("sortOrdr", gconeMessageSource.getMessage("errors.required", new Object[]{"순서"})));
}
}
//필수 입력 여부설정이 Y 이고 입력 여부가 N일 시 validation 체크(추가입력항목,입력항목)
if (rvwVO.getQesitmEssntlAtArr() != null) {
for (int idx = 0; idx < rvwVO.getQesitmEssntlAtArr().length; idx++) {
if ("Y".equals(rvwVO.getQesitmEssntlAtArr()[idx]) && "N".equals(rvwVO.getQesitmAtArr()[idx])) {
errorList.add(ValidateResultConverter.setErrorMap("answCnArr", gconeMessageSource.getMessage("errors.required", new Object[]{rvwVO.getQesitmNmArr()[idx]})));
}
}
}
//필수 입력 여부설정이 Y 이고 입력 여부가 N일 시 validation 체크(리뷰)
if (rvwVO.getRvwQesitmEssntlAtArr() != null) {
for (int idx = 0; idx < rvwVO.getRvwQesitmEssntlAtArr().length; idx++) {
if ("Y".equals(rvwVO.getRvwQesitmEssntlAtArr()[idx]) && "N".equals(rvwVO.getRvwQesitmAtArr()[idx])) {
errorList.add(ValidateResultConverter.setErrorMap("evlScoreArr", gconeMessageSource.getMessage("errors.required", new Object[]{rvwVO.getRvwQesitmNmArr()[idx]})));
}
}
}
if (rvwVO.getGoodsInnbArr() == null) {
errorList.add(ValidateResultConverter.setErrorMap("goodsInnbArr", gconeMessageSource.getMessage("errors.required", new Object[]{"상품 정보"})));
}
}
if (errorList != null
&& errorList.size() > 0) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
//ip주소 get
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = req.get("XForwardedFor");
rvwVO.setIp(ip);
rvwVO.setSopmalCd(authSopmalCd);
//파일 경로 설정
request.setAttribute("shopCd", rvwVO.getSopmalCd());
request.setAttribute("pathGubun", "BDIG");//게시판 이미지 구분
request.setAttribute("subPathId", rvwVO.getBbsId()); //게시판일 경우에만 셋팅
request.setAttribute("validExp", rvwVO.getAcceptFileExtensions()); //게시판 중 BDFL 일경우만 셋팅
//파일 업로드
if ("Y".equals(rvwVO.getFilAtch())) {
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
ulpladFileMap = filestore.fileUpload(request);
rvwVO.setFileInfo(ulpladFileMap);
rvwVO.setFilDvCd("01");
if (!CollectionUtils.isEmpty(rvwVO.getFileInfo())) {
rvwVO.setPhotoRvwAt("Y");
}
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/insertBOBbscttRegist", rvwVO),
ReplyFromResrc::getReply
);
}
/******************************************************
* 게시글 수정 팝업
******************************************************/
/**
* 리뷰 수정 팝업
*
* @param bbsctt 파라미터 vo
* @param model
* @return GnrlBbscttUpdtPopupU.jsp
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectRvwUpdtPopupForm")
public String selectRvwUpdtPopupForm(RvwVO bbsctt, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
bbsctt.setRvwBbscttDv("rvw");
bbsctt.setSopmalCd(authSopmalCd);
//게시글 상세 조회 및 게시판 설정 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttUpdtPopupForm", bbsctt),
model,
"resultMap"
);
model.addAttribute("dtlPop", bbsctt.getDtlPop());
return "mngr/bbs/rvw/RvwUpdtPopupU";
}
/**
* 리뷰 수정
*
* @param bbsctt 파라미터 vo
* @param bindingResult
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateRvwUpdt", method = RequestMethod.POST)
@SuppressWarnings("unchecked")
public ResponseEntity<WnbtResponse> updateRvwUpdt(HttpServletRequest request, @Validated RvwVO rvwVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
List<Map<String, String>> errorList = new ArrayList<>();
//validation체크
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
} else if (true) {
//순서 여부가 'Y'이고 순서 값 없을 시
if ("Y".equals(rvwVO.getSortOrdrAt())) {
if (rvwVO.getSortOrdr() == null) {
errorList.add(ValidateResultConverter.setErrorMap("sortOrdr", gconeMessageSource.getMessage("errors.required", new Object[]{"순서"})));
}
}
//필수 입력 여부설정이 Y 이고 입력 여부가 N일 시 validation 체크(추가입력항목,입력항목)
if (rvwVO.getQesitmEssntlAtArr() != null) {
for (int idx = 0; idx < rvwVO.getQesitmEssntlAtArr().length; idx++) {
if ("Y".equals(rvwVO.getQesitmEssntlAtArr()[idx]) && "N".equals(rvwVO.getQesitmAtArr()[idx])) {
errorList.add(ValidateResultConverter.setErrorMap("answCnArr", gconeMessageSource.getMessage("errors.required", new Object[]{rvwVO.getQesitmNmArr()[idx]})));
}
}
}
//필수 입력 여부설정이 Y 이고 입력 여부가 N일 시 validation 체크(리뷰)
if (rvwVO.getRvwQesitmEssntlAtArr() != null) {
for (int idx = 0; idx < rvwVO.getRvwQesitmEssntlAtArr().length; idx++) {
if ("Y".equals(rvwVO.getRvwQesitmEssntlAtArr()[idx]) && "N".equals(rvwVO.getRvwQesitmAtArr()[idx])) {
errorList.add(ValidateResultConverter.setErrorMap("evlScoreArr", gconeMessageSource.getMessage("errors.required", new Object[]{rvwVO.getRvwQesitmNmArr()[idx]})));
}
}
}
}
if (errorList != null && errorList.size() > 0) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
//ip주소 get
Map<String, String> req = new HashMap<>();
req = Util.getRequestInfo(request);
String ip = req.get("XForwardedFor");
rvwVO.setIp(ip);
//쇼핑몰설정 set
rvwVO.setSopmalCd(authSopmalCd);
//파일 경로 설정
request.setAttribute("shopCd", rvwVO.getSopmalCd());
request.setAttribute("pathGubun", "BDIG");//게시판 일반첨부파일 구분
request.setAttribute("subPathId", rvwVO.getBbsId()); //게시판일 경우에만 셋팅
request.setAttribute("validExp", rvwVO.getAcceptFileExtensions()); //게시판 중 BDFL 일경우만 셋팅
//파일 업로드
if ("Y".equals(rvwVO.getFilAtch())) {
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
ulpladFileMap = filestore.fileUpload(request);
rvwVO.setFileInfo(ulpladFileMap);
rvwVO.setFilDvCd("01");
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/updateBOBbscttUpdt", rvwVO),
ReplyFromResrc::getReply
);
}
/**
* 추가입력항목 조회
*
* @param bbsctt
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectItmCnListAjax")
public ResponseEntity<WnbtResponse> selectItmCnListAjax(RvwVO bbsctt, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
bbsctt.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOItmCnListAjax", bbsctt),
ReplyFromResrc::getReply
);
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectRvwLgqyRegistPopupForm")
public String selectRvwLgqyRegistPopupForm(RvwVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return "/mngr/bbs/rvw/RvwLgqyRegistPopupC";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertRvwLgqyRegist", method = RequestMethod.POST)
public String insertRvwLgqyRegist(RvwVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return "/";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectRvwLgqyRegistListInqire")
public String selectRvwLgqyRegistListInqire(RvwVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return "/mngr/bbs/rvw/RvwLgqyRegistListR";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertRvwLgqyRegistBng", method = RequestMethod.POST)
public String insertRvwLgqyRegistBng(RvwVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return "/";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteRvwLgqyRegistDel", method = RequestMethod.POST)
public String deleteRvwLgqyRegistDel(RvwVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return "/0";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectRvwLgqyRegistDtlUpdtPopupForm")
public String selectRvwLgqyRegistDtlUpdtPopupForm(RvwVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return "/mngr/bbs/rvw/RvwLgqyRegistDtlUpdtPopupU";
}
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateRvwLgqyRegistUpdt", method = RequestMethod.POST)
public String updateRvwLgqyRegistUpdt(RvwVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return "/";
}
}

View File

@@ -0,0 +1,21 @@
package com.wb.domainserver.domain.mngr.bbs.rvw.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.mngr.bbs.rvw.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.mngr.bbs.rvw.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,26 @@
package com.wb.domainserver.domain.mngr.bbs.rvw.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;
/*회수 금액*/
private String rtrvlMlgAmt;
}

View File

@@ -0,0 +1,329 @@
package com.wb.domainserver.domain.mngr.bbs.rvw.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;
/**
* 게시글 정보
*/
/** 게시글고유번호 */
private String bbscttInnb;
/** 부모게시글고유번호 */
private String parntsBbscttInnb;
/** 게시판ID */
private String bbsId;
/** DEPTH */
private Integer depth;
/** 등록자구분코드 */
private String regusrDvCd;
/** 등록자ID */
private String regusrId;
/** 등록자ID 직접등록여부 */
private String regusrIdAt;
/** 등록자명 */
private String regusrNm;
/** 비밀번호 */
@Length(min = 0, max = 20, message = "비밀번호")
private String password;
/** 제목 */
@NotBlank(message = "제목")
@Length(min = 0, max = 100, message = "제목")
private String sj;
@NotBlank(message = "내용")
@Length(max = 16777215, message = "내용")
/** 내용 */
private String cn;
/** 조회건수 */
private Integer inqireCnt;
/** 댓글사용여부 */
private String cmUseAt;
/** 추천건수 */
private Integer recomendCnt;
/** 비추천건수 */
private Integer nonrecomendCnt;
/** 정렬순서 */
private Integer sortOrdr;
/** 정렬순서여부 */
private String sortOrdrAt;
/** 대표이미지원본파일명 */
private String reprsntImgOrginlFilNm;
/** 대표이미지시스템파일명 */
private String reprsntImgSysFilNm;
/** 비밀글여부 */
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;
/** 베스트여부 */
private String bstAt;
/** 포토리뷰여부 */
private String photoRvwAt;
/** NPay 게시글 일련번호 */
private String npayBbscttSnb;
/** NPay 답변 전송여부*/
private String npayAnswTrnsmisAt;
/** NPay 답변번호*/
private String npayAnswNb;
/** NPay 상품주문번호*/
private String npayGoodsOrdrnb;
/** NPay 리뷰유형코드*/
private String npayRvwTyCd;
/** IP */
private String ip;
/** agentId */
private String agentId;
/** 사용여부 */
private String useAt;
/** 삭제작업자 */
private Integer delusr;
/**
* 검색조건
*/
/** 검색구분 */
private String srchDv;
/** 검색어 */
private String srchKeyword;
/** 검색 시작일 */
private String srchStartDt;
/** 검색 종료일 */
private String srchEndDt;
/** 게시판 이름 코드 */
private String bbsTyCd;
/** 답변 상태 */
private String answSttus;
/** 분류명 */
private String srchitmInnb;
/** 기간 */
private String datePeriod;
/** 순번 */
private Integer rnum;
/** 항목내용 */
private String itmCn;
/** 대시보드 구분 */
private String dashAt;
/*주문번호검색*/
private String srchOrdrInnb;
/*네이버페이후기검색*/
private String npayAt;
/**
* 게시글추가문항답변
*/
/** 문항답변고유번호 */
private String qesitmAnswInnb;
/** 문항고유번호 */
private String qesitmInnb;
/** 문항필수여부 */
private String qesitmEssntlAt;
/** 문항사용여부 */
private String qesitmUseAt;
/** 문항순서 */
private String qesitmOrdr;
/** 항목고유번호 */
private String itmInnb;
/** 답변내용 */
private String answCn;
/** 평가점수 */
private String evlScore;
/** 문항필수여부(배열) */
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[] delBbsIdArr;
/** 선택삭제 게시글리스트 */
private String[] delBbscttInnbArr;
/**
* 첨부파일 정보
*/
/* 파일 고유번호 */
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 filAtch;
/*파일 확장자*/
private String AcceptFileExtensions;
/*파일 구분*/
private String filDvCd;
/** 댓글 리스트 */
private String[] cmList;
private String boardAnswInnb;
private String oldFileName;
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[] goodsInnbArr;
/*주문상품옵션고유번호*/
private String ordrGoodsOptnInnb;
/*주문상품옵션고유번호 배열*/
private String[] ordrGoodsOptnInnbArr;
/*추천상품고유번호*/
private String recomendGoodsInnb;
/** 상세조회와 페이지 구분처리 */
private String dtlPop;
/** 재구매여부 */
private List<String> reOrderAtArr;
/**
* 게시판 설정
*/
/** 설정고유번호 */
private String setupInfoInnb;
/** 비속어필터사용여부 */
private String slangFlterUseAt;
/** 마스킹비속어 */
private String mskgSlang;
/*스킨타입코드*/
private String sknTyCd;
/*추천상품노출여부*/
private String recomendGoodsExpsrAt;
/* 갤러리형 목록 조회 행 개수*/
private String pgeVtcCnt;
/* 갤러리형 목록 조회 열 개수*/
private String pgeWthCnt;
/*이전글다음글 조회 여부*/
private String prevNext;
/**
* 리뷰
*/
// 추가항목 정보(FM_BOARD_ADDITM)
private List<BbsFormVO> bbsFormVoList;
/**
* 권한
*/
//권한 구분 (REDNG : 읽기권한, REGIST: 쓰기권한, CM: 댓글등록권한)
private String AuthDv;
/*
* 요청 값
*/
/*요청 페이지 구분(고객센터=>csc , 서브페이지=>subPage, 이용안내 => useGudiance, crm => crm)*/
private String reqUrl;
/* 서버 구분 sopmal or mngr*/
private String serverDv;
/*상세 구분*/
private String dtlAt;
/*사용자 등록,수정시 목록이동 or 등록,수정폼 유지*/
private String listAt;
/*리뷰,게시글 구분*/
private String rvwBbscttDv;
/*페이징 관련*/
/*공지여부 'Y' 개수(공지사항,매거진,일반)*/
private Integer ntcCnt;
/*베스트여부 'Y'개수 (리뷰)*/
private Integer bstCnt;
/*총 건수*/
private Integer totCnt;
/*삭제 관련*/
/*회수 마일리지 관련 정보*/
private List<DelInfoVO> delInfoArr;
/*마일리지 수동 회수 여부*/
private String mlgPassivRtrvlAt;
}