초기소스

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,44 @@
package com.wb.domainserver.domain.mngr.alarm.controller;
import com.wb.domainserver.domain.mngr.alarm.vo.AlarmSrchVo;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "/mngr/alarm")
@Slf4j
public class AlarmController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/select/selectAlarmCount")
public ResponseEntity<WnbtResponse> selectAlarmCount(@CookieValue(value = "authSopmalCd") String authSopmalCd, AlarmSrchVo vo) {
log.debug("selectAlarmCount()");
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/alarm/select/selectAlarmCount",vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,14 @@
package com.wb.domainserver.domain.mngr.alarm.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class AlarmSrchVo extends AbstractVO {
private static final long serialVersionUID = 1L;
private String sopmalCd;
}

View File

@@ -0,0 +1,162 @@
package com.wb.domainserver.domain.mngr.analytics.controller;
import com.wb.domainserver.domain.mngr.analytics.vo.AnalyticsErpGoodsSrchVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping(value = "/mngr/analytics")
@Slf4j
public class AnalyticsController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 매출일지 리스트
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value ="/select/sales-journal")
public String selectSummaryList (AnalyticsErpGoodsSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
log.debug("selectSummaryList()");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/analytics/select/sales-journal", ""),
model,
"resultMap"
);
return "mngr/analytics/SalesJournal";
}
/**
* ERP 제상품 현황 화면
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value ="/select/erp-goods")
public String selectErpGoodsList (AnalyticsErpGoodsSrchVO vo , ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
log.debug("selectErpGoodsList()");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/analytics/select/erp-goods", vo),
model,
"resultMap"
);
return "mngr/analytics/ErpGoods";
}
/**
* ERP 제상품현황 리스트
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value ="/select/erp-goodsR")
public String selectErpGoodsListR (AnalyticsErpGoodsSrchVO vo , ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
log.debug("selectErpGoodsListR()");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/analytics/select/erp-goodsR", vo),
model,
"resultMap"
);
return "mngr/analytics/ErpGoodsR";
}
/**
* ERP 세트상품 화면
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value ="/select/erp-set-goods")
public String selectErpSetGoodsList (AnalyticsErpGoodsSrchVO vo , ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
log.debug("selectErpSetGoodsList()");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/analytics/select/erp-set-goods", vo),
model,
"resultMap"
);
return "mngr/analytics/ErpSetGoods";
}
/**
* ERP 세트상품 리스트
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value ="/select/erp-set-goodsR")
public String selectErpSetGoodsListR (AnalyticsErpGoodsSrchVO vo , ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
log.debug("selectErpSetGoodsListR()");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/analytics/select/erp-set-goodsR", vo),
model,
"resultMap"
);
return "mngr/analytics/ErpSetGoodsR";
}
/**
* 제상품 내역 업데이트
* @param jsonData 게시판 등록 파라미터 jsonData
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/update/erp-goods" , method= RequestMethod.POST)
@ResponseBody
public ResponseEntity<WnbtResponse> updatePuriOrder(@RequestBody List<Map<String,Object>> jsonData){
log.debug(" 검색 파라미터 확인 231: {}", jsonData);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/analytics/update/erp-goods", jsonData),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,25 @@
package com.wb.domainserver.domain.mngr.analytics.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class AnalyticsErpGoodsSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
private String sopmalCd;
private String brandCd;
private String barcode;
private String goodsName;
private String setCode;
private String setGoodsName;
}

View File

@@ -0,0 +1,105 @@
package com.wb.domainserver.domain.mngr.api.controller;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.mngr.api.service.ApiService;
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.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.Map;
@Controller
@RequestMapping(value = "/mngr/api")
@Slf4j
public class ApiController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private ApiService service;
/**
* Order Api
* 주문내역 api
*/
@ResponseBody
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value ="/select/selectOrderList", method = RequestMethod.POST)
public String selectOrderList (@RequestBody Map<String, Object> requestBody, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd, HttpServletResponse response, HttpServletRequest request) throws IOException {
String clientIp = request.getHeader("X-Forwarded-For");
String agentId = request.getHeader("agent_id");
String sessionId = request.getHeader("session_id");
DataMap logParams = new DataMap();
if (!StringUtil.isEmpty(clientIp) && clientIp.contains(",")) {
clientIp = clientIp.split(",")[0];
}
log.debug("clientIp :: {}", clientIp);
if (!clientIp.startsWith("221.139.65.203")) {
response.sendError(HttpServletResponse.SC_FORBIDDEN,"Forbidden: 외부 네트워크 접근 금지");
service.insertMngrApiAccessLog(request,response,"N","외부 네트워크 접근 금지","");
return null;
}
log.debug("selectOrderList()");
log.debug("✅ 받은 요청 바디: " + requestBody);
requestBody.put("authSopmalCd", authSopmalCd);
String listStr = "";
String clearDataStr = "";
ResponseEntity<WnbtResponse> boResponse = responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/api/select/selectOrderList", requestBody),
ReplyFromResrc::getReply
);
// CSV 추출
Object resultObj = boResponse.getBody().getResBody().getResult();
if (resultObj instanceof String) {
ObjectMapper mapper = new ObjectMapper();
JsonNode outerJson = mapper.readTree((String) resultObj);
JsonNode listNode = outerJson.get("list");
JsonNode clearDataNode = outerJson.get("clearData");
if (listNode != null && !listNode.isNull()) {
listStr = listNode.toString();
} else {
log.warn("⚠️ 'list' 필드가 존재하지 않음");
}
if (clearDataNode != null && !clearDataNode.isNull()) {
clearDataStr = clearDataNode.toString();
} else {
log.warn("⚠️ 'clearDataStr' 필드가 존재하지 않음");
}
}
int clearDataStrLength = Math.min(clearDataStr.length(), 1000);
String responseData = clearDataStr.substring(0,clearDataStrLength);
service.insertMngrApiAccessLog(request,response,"Y","",responseData);
return listStr;
}
}

View File

@@ -0,0 +1,116 @@
package com.wb.domainserver.domain.mngr.api.service;
import com.wb.domainserver.domain.log.mapper.LogMapper;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.io.IOException;
@Service
@Slf4j
@RequiredArgsConstructor
public class ApiService {
private final LogMapper mapper;
public void insertMngrApiAccessLog(HttpServletRequest request, HttpServletResponse response, String successFlag, String failMsg, String responseData) throws IOException {
String sessionId = request.getHeader("session_id");
String userAgent = request.getHeader("User-Agent");
String clientIp = request.getHeader("X-Forwarded-For");
String agentId = "";
String authSopmalCd = "";
DataMap dataMap = new DataMap();
// 호출된 메소드 이름
String methodName = "selectOrderList";
// 요청 URL
String url = request.getRequestURI();
// 요청 파라미터
String postParam = "";
if ("POST".equalsIgnoreCase(request.getMethod())) {
if ("application/json".equalsIgnoreCase(request.getContentType())) {
try {
postParam = new String(request.getInputStream().readAllBytes(), request.getCharacterEncoding());
} catch (IOException e) {
e.printStackTrace();
}
}
}
// agentId 가져오기
if (request.getCookies() != null) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("agent_id")) {
agentId = cookie.getValue();
break;
}
}
}
//접속환경
String env;
String upperUseAgent = userAgent.toUpperCase();
if (upperUseAgent.contains("MOBILE") || upperUseAgent.contains("ANDROID") || upperUseAgent.contains("IPHONE")) {
env = "MO";
} else if (upperUseAgent.contains("TABLET") || upperUseAgent.contains("IPAD")) {
env = "MO";
} else {
env = "PC";
}
//ip 분리
if (!StringUtil.isEmpty(clientIp) && clientIp.contains(",")) {
clientIp = clientIp.split(",")[0];
}
if (request.getCookies() != null) {
for (Cookie cookie : request.getCookies()) {
if (cookie.getName().equals("authSopmalCd")) {
authSopmalCd = cookie.getValue();
break;
}
}
}
//sessionId 정보
String jSessionId = "";
if (request.getCookies() != null) {
for (Cookie cookie : request.getCookies()) {
if (cookie.getName().equals("JSESSIONID")) {
jSessionId = cookie.getValue();
break;
}
}
}
log.debug("clientIp :: {}", clientIp);
dataMap.put("sesionId", sessionId);
dataMap.put("reqstMth", methodName);
dataMap.put("agentId",agentId);
dataMap.put("ip",clientIp);
dataMap.put("conectEnvrnDv", env);
dataMap.put("reqstData", postParam);
dataMap.put("sopmalCd", authSopmalCd);
dataMap.put("conectUrl",url);
dataMap.put("jSessionId", jSessionId);
dataMap.put("successYn", successFlag);
dataMap.put("errorCode",failMsg);
dataMap.put("responseData", responseData);
mapper.insertMngrApiAccessLog(dataMap);
}
}

View File

@@ -0,0 +1,19 @@
package com.wb.domainserver.domain.mngr.api.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ApiSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
private String sopmalCd;
private String timeStamp;
private String data;
private String hash;
}

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;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,993 @@
package com.wb.domainserver.domain.mngr.bnft.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.bnft.vo.BnftSttusVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
*
* 혜택별 통계관리 FO Controller
*
* @author 이훈영
* @since 2024-10-07
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-10-07 이훈영 최초 생성
*
* </pre>
*/
@Controller
@RequestMapping("/mngr/bnft/sttus")
@Slf4j
public class BnftStatsController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 혜택 출석 기간별내역 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftAtendPdSttusForm")
public String selectBnftPdSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setBnfDvCd("010");
// Session -> Cookie 방식 변경
vo.setSopmalCd(authSopmalCd);
// 현재 년, 월
LocalDate currDate = LocalDate.now();
String srchYear = currDate.format(DateTimeFormatter.ofPattern("yyyy"));
String srchMonth = currDate.format(DateTimeFormatter.ofPattern("MM"));
vo.setSrchYear(srchYear);
vo.setSrchMonth(srchMonth);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOselectBOBnftPdSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/AtendPdSttusForm";
}
/**
* 혜택 출석 기간별내역 월별내역 조회
*
* @param BnftSttusVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftAtendPdMonSttusInqire")
public ResponseEntity<WnbtResponse> selectBnftAtendPdMonSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPdMonSttusInqire", vo),
ReplyFromResrc::getReply
);
}
/**
* 혜택 출석 회원별내역 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftAtendMbrSttusForm")
public String selectBnftMemberSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setBnfDvCd("010");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftMbrSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/AtendMbrSttusForm";
}
/**
* 혜택 출석 회원별내역 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftAtendMbrSttusInqire")
public String selectBnftMemberSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftMbrSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/AtendMbrSttusList";
}
/**
* 혜택 만보기 기간별내역 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftStepcntPdSttusForm")
public String selectBnftStepcntPdSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setBnfDvCd("020");
vo.setSopmalCd(authSopmalCd);
// 현재 년, 월
LocalDateTime currDtTme = LocalDateTime.now();
String srchYear = currDtTme.format(DateTimeFormatter.ofPattern("yyyy"));
String srchMonth = currDtTme.format(DateTimeFormatter.ofPattern("MM"));
String srchCurrDt = currDtTme.format(DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH:mm:ss"));
vo.setSrchYear(srchYear);
vo.setSrchMonth(srchMonth);
vo.setSrchCurrDt(srchCurrDt);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOselectBOBnftPdSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/StepcntPdSttusForm";
}
/**
* 혜택 만보기 기간별내역 월별내역 조회
*
* @param BnftSttusVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftStepcntPdMonSttusInqire")
public ResponseEntity<WnbtResponse> selectBnftStepcntPdMonSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPdMonSttusInqire", vo),
ReplyFromResrc::getReply
);
}
/**
* 혜택 만보기 회원별내역 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftStepcntMbrSttusForm")
public String selectBnftStepcntMbrSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setBnfDvCd("020");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftMbrSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/StepcntMbrSttusForm";
}
/**
* 혜택 만보기 회원별내역 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftStepcntMbrSttusInqire")
public String selectBnftStepcntMbrSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftMbrSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/StepcntMbrSttusList";
}
/**
* 혜택 행운복권 당첨자내역 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftLucklottSttusForm")
public String selectBnftLucklottSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setBnfDvCd("030");
vo.setSopmalCd(authSopmalCd);
// 현재 년, 월
LocalDateTime currDtTme = LocalDateTime.now();
String srchCurrDt = currDtTme.format(DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH:mm:ss"));
vo.setSrchCurrDt(srchCurrDt);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPrzwinSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/LucklottSttusForm";
}
/**
* 혜택 행운복권 당첨자내역 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftLucklottSttusInqire")
public String selectBnftLucklottSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setBnfDvCd("030");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPrzwinSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/LucklottSttusList";
}
/**
* 혜택 룰렛게임 당첨자내역 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftRougameSttusForm")
public String selectBnftRougameSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setBnfDvCd("040");
vo.setSopmalCd(authSopmalCd);
// 현재 년, 월
LocalDateTime currDtTme = LocalDateTime.now();
String srchCurrDt = currDtTme.format(DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH:mm:ss"));
vo.setSrchCurrDt(srchCurrDt);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPrzwinSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/RougameSttusForm";
}
/**
* 혜택 룰렛게임 당첨자내역 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftRougameSttusInqire")
public String selectBnftRougameSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
log.debug("BnftSttusVO is {}", vo);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPrzwinSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/RougameSttusList";
}
/**
* 혜택 캡슐만들기 참여현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftCpslmknSttusForm")
public String selectBnftCpslmknSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setBnfDvCd("050");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftCpslmknSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/CpslmknSttusForm";
}
/**
* 혜택 캡슐만들기 참여내역 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftCpslmknSttusInqire")
public String selectBnftCpslmknSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
log.debug("BnftSttusVO is {}", vo);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftCpslmknSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/CpslmknSttusList";
}
/**
* 혜택 캡슐만들기 참여현황 상세 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftCpslmknSttusDtlsForm")
public String selectBnftCpslmknSttusDtlsForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftCpslmknSttusDtlsInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/CpslmknSttusDtlsForm";
}
/**
* 혜택 이벤트보기 참여현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftEvntviewSttusForm")
public String selectBnftEvntviewSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setBnfDvCd("060");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftEvntviewSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/EvntviewSttusForm";
}
/**
* 혜택 이벤트보기 참여내역 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftEvntviewSttusInqire")
public String selectBnftEvntviewSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftEvntviewSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/EvntviewSttusList";
}
/**
* 혜택 라이브쇼핑 참여현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftLvshopSttusForm")
public String selectBnftLvshopSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setBnfDvCd("070");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftLvshopSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/LvshopSttusForm";
}
/**
* 혜택 라이브쇼핑 참여현황 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftLvshopSttusInqire")
public String selectBnftLvshopSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftLvshopSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/LvshopSttusList";
}
/**
* 혜택 할인소식공유 참여현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftDiscsharSttusForm")
public String selectBnftDiscsharSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
//responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftDiscsharSttusInqire", vo),
// model,
// "resultMap"
//);
return "mngr/bnft/sttus/DiscsharSttusForm";
}
/**
* 혜택 베스트리뷰 참여현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftConrevSttusForm")
public String selectBnftConrevSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setBnfDvCd("090");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftConrevSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/ConrevSttusForm";
}
/**
* 혜택 베스트리뷰 참여현황 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftConrevSttusInqire")
public String selectBnftConrevSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftConrevSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/ConrevSttusList";
}
/**
* 혜택 섭취챌린지 참여현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftIntakchlSttusForm")
public String selectBnftIntakchlSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setBnfDvCd("100");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftIntakchlSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/IntakchlSttusForm";
}
/**
* 혜택 섭취챌린지 참여현황 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftIntakchlSttusInqire")
public String selectBnftIntakchlSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftIntakchlSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/IntakchlSttusList";
}
/**
* 혜택 섭취챌린지 참여현황 상세 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftIntakchlSttusDtlsForm")
public String selectBnftIntakchlSttusDtlsForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
log.debug("@@@@ BnftSttusVO is {}", vo);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftIntakchlSttusDtlsInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/IntakchlSttusDtlsForm";
}
/**
* 혜택 관심분야 설정현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftHlthsetSttusForm")
public String selectBnftHlthsetSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setBnfDvCd("120");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftHlthsetSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/HlthsetSttusForm";
}
/**
* 혜택 관심분야 월별내역 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftHlthsetMonSttusForm")
public String selectBnftHlthsetMonSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setBnfDvCd("120");
// 현재 년
LocalDate currDate = LocalDate.now();
String srchYear = currDate.format(DateTimeFormatter.ofPattern("yyyy"));
vo.setSrchYear(srchYear);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftHlthsetMonSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/HlthsetMonSttusForm";
}
/**
* 혜택 관심분야 월별내역 조회
*
* @param BnftSttusVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftHlthsetMonSttusInqire")
public ResponseEntity<WnbtResponse> selectBnftHlthsetMonSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftHlthsetMonSttusInqire", vo),
ReplyFromResrc::getReply
);
}
/**
* 혜택 OX퀴즈 참여현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftOxquizSttusForm")
public String selectBnftOxquizSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setBnfDvCd("130");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftOxquizSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/OxquizSttusForm";
}
/**
* 혜택 OX퀴즈 참여현황 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftOxquizSttusInqire")
public String selectBnftOxquizSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftOxquizSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/OxquizSttusList";
}
/**
* 혜택 OX퀴즈 참여현황 상세 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftOxquizSttusDtlsForm")
public String selectBnftOxquizSttusDtlsForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftOxquizSttusDtlsInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/OxquizSttusDtlsForm";
}
/**
* 혜택 모바일스탬프 기간별내역 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftPurstmpPdSttusForm")
public String selectBnftPurstmpPdSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPurstmpPdSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/PurstmpPdSttusForm";
}
/**
* 혜택 모바일스탬프 월별내역 조회
*
* @param BnftSttusVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftPurstmpPdSttusInqire")
public ResponseEntity<WnbtResponse> selectBnftPurstmpPdSttusSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPurstmpPdSttusInqire", vo),
ReplyFromResrc::getReply
);
}
/**
* 혜택 모바일스탬프 기간별내역 상세 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftPurstmpPdSttusDtlsForm")
public String selectBnftPurstmpPdSttusDtlsForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPurstmpPdSttusDtlsForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/PurstmpPdSttusDtlsForm";
}
/**
* 혜택 모바일스탬프 일별내역 조회
*
* @param BnftSttusVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftPurstmpPdSttusDtlsInqire")
public ResponseEntity<WnbtResponse> selectBnftPurstmpPdSttusDtlsInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPurstmpPdSttusDtlsInqire", vo),
ReplyFromResrc::getReply
);
}
/**
* 혜택 모바일스탬프 매장별현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftPurstmpStrSttusForm")
public String selectBnftPurstmpStrSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPurstmpStrSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/PurstmpStrSttusForm";
}
/**
* 혜택 모바일스탬프 매장별내역 조회
*
* @param BnftSttusVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftPurstmpStrSttusInqire")
public ResponseEntity<WnbtResponse> selectBnftPurstmpStrSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftPurstmpStrSttusInqire", vo),
ReplyFromResrc::getReply
);
}
/**
* 혜택 QR코드이벤트 참여현황 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftQrevntSttusForm")
public String selectBnftQrevntSttusForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setBnfDvCd("150");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftQrevntSttusForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/QrevntSttusForm";
}
/**
* 혜택 QR코드이벤트 참여현황 목록 조회
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftQrevntSttusInqire")
public String selectBnftQrevntSttusInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftQrevntSttusInqire", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/QrevntSttusList";
}
/**
* 혜택 QR코드이벤트 참여현황 상세 화면 이동
*
* @param BnftSttusVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftQrevntSttusDtlsForm")
public String selectBnftQrevntSttusDtlsForm(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftQrevntSttusDtlsForm", vo),
model,
"resultMap"
);
return "mngr/bnft/sttus/QrevntSttusDtlsForm";
}
/**
* 혜택 QR코드이벤트 상세 내역 조회
*
* @param BnftSttusVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBnftQrevntSttusDtlsInqire")
public ResponseEntity<WnbtResponse> selectBnftQrevntSttusDtlsInqire(BnftSttusVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bnft/sttus/selectBOBnftQrevntSttusDtlsInqire", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,68 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.HashMap;
import java.util.List;
/**
*
* 혜택 메뉴 VO
* @author 이훈영
* @since 2024-09-08
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-09-08 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftBannerVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 혜택 배너 고유번호 */
private Long bnfBannerInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 배너 제목 */
private String bannerSj;
/** 링크 */
private String linkUrl;
/** 이미지파일경로 */
private String imgFilCours;
/** 이미지파일명 */
private String imgFilNm;
/** 정렬순서 */
private Integer sortOrdr;
/** 사용여부 */
private String useAt;
/** 삭제여부 */
private String delAt;
/** 항목Index */
private Integer divIdx;
/** 이미지 파일 업로드 */
private List<HashMap<String, Object>> fileInfo;
/** 배너항목 배열선언 */
private Long[] arrBnfBannerInnb;
private String[] arrBannerSj;
private String[] arrLinkUrl;
private String[] arrImgFilCours;
private String[] arrImgFilNm;
private Integer[] arrSortOrdr;
private String[] arrUseAt;
private String[] arrDelAt;
private Integer[] arrDivIdx;
}

View File

@@ -0,0 +1,50 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 혜택 초록잎설정 VO
* @author 이훈영
* @since 2024-09-02
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-09-02 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftCpslVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 혜택 구분코드 */
private String bnfDvCd;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 화면표시여부 */
private String indictAt;
/** 스페셜 여부 */
private String specialAt;
/** 지급 개수 */
private Integer pymntCnt;
/** 스페셜 개수 */
private Integer specialCnt;
/** 배열선언 */
private String[] arrBnfDvCd;
private String[] arrIndictAt;
private String[] arrSpecialAt;
private Integer[] arrPymntCnt;
private Integer[] arrSpecialCnt;
}

View File

@@ -0,0 +1,44 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 혜택 안내문 정보 VO
* @author 이훈영
* @since 2024-09-03
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-09-03 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftGdccVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 혜택 안내문 고유번호 */
private Long bnfGdccInnb;
/** 혜택 구분코드 */
private String bnfDvCd;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 안내문1 */
private String wordsCn1;
/** 안내문2 */
private String wordsCn2;
/** 안내문3 */
private String wordsCn3;
}

View File

@@ -0,0 +1,62 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 혜택 관심분야 VO
* @author 이훈영
* @since 2024-06-18
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-07-18 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftIntrstVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 혜택 관심분야 고유번호 */
private Long bnfIntrstInnb;
/** 관심분야명 */
private String intrstNm;
/** 관심분야 선택전 이미지파일경로 */
private String bfeImgFilCours;
/** 관심분야 선택전 이미지파일명 */
private String bfeImgFilNm;
/** 관심분야 선택후 이미지파일경로 */
private String aftImgFilCours;
/** 관심분야 선택후 이미지파일명 */
private String aftImgFilNm;
/** 관심분야 정렬순서 */
private Integer sortOrdr;
/** 관심분야 사용여부 */
private String useAt;
/** 관심분야 삭제여부 */
private String delAt;
/** 관심분야 항목Index */
private Integer divIdx;
/** 관심분야항목 배열선언 */
private Long[] arrBnfIntrstInnb;
private String[] arrIntrstNm;
private String[] arrBfeImgFilCours;
private String[] arrBfeImgFilNm;
private Integer[] arrSortOrdr;
private String[] arrUseAt;
private String[] arrDelAt;
private Integer[] arrDivIdx;
}

View File

@@ -0,0 +1,52 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 혜택 초록잎설정 VO
* @author 이훈영
* @since 2024-09-02
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-09-02 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftMenuVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 혜택 구분코드 */
private String bnfDvCd;
/** 혜택 구분명 */
private String bnfDvNm;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 화면표시여부 */
private String indictAt;
/** 메뉴 제목 1 */
private String menuSj1;
/** 메뉴 제목 2 */
private String menuSj2;
/** 정렬순서 */
private Integer sortOrdr;
/** 배열선언 */
private String[] arrBnfDvCd;
private String[] arrIndictAt;
private String[] arrMenuSj1;
private String[] arrMenuSj2;
private Integer[] arrSortOrdr;
}

View File

@@ -0,0 +1,87 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 혜택 참여/보상 VO
* @author 이훈영
* @since 2024-06-18
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-07-18 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftPrtRcvVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 혜택 구분 코드명 */
private String bnfDvCdNm;
/// 혜택 참여 정보
/** 혜택 참여 고유번호 */
private Long bnfPrtInnb;
/** 혜택 참여일시 */
private String bnfPrtDt;
/** 회원고유번호 */
private Long mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 회원구분코드명 */
private String mbrDvCdNm;
/** 회원ID */
private Long mbrId;
/** 회원명 */
private Long mbrNm;
/** 회원 휴대폰번호 */
private Long mbrCellNo;
/// 혜택 보상수령 내역
/** 혜택 보상수령 고유번호 */
private Long bnfRcvInnb;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 항목 구분 코드명 */
private String bnfRwdCateDvCdNm;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 보상 상품 구분 코드명 */
private String bnfRwdGodsDvCdNm;
/** 보상 마일리지 금액 */
private Double mlgRwdAmt;
/** 보상 쿠폰고유번호 */
private Long couponInnb;
/** 보상 쿠폰명 */
private Long couponName;
/** 혜택 구매확정 수신 로그 고유번호 */
private Long bnfPurchsRcvLogInnb;
// 참여기회 충전내역
/** 혜택 참여기회 충전 고유번호 */
private Long bnfChgInnb;
/** 구매식별 고유번호 */
private Long purchsInnb;
/** 구매금액 */
private Double purchsAmt;
/** 충전수 */
private int chgCnt;
/** 충전필요금액 */
private Double amtForChg;
}

View File

@@ -0,0 +1,62 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 혜택 알림관리 이벤트별알림 VO
* @author 이훈영
* @since 2024-09-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-09-19 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftPushEvtVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 혜택 알림 이벤트별 설정 고유번호 */
private Long bnfPushEvtSetupInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 알림 조건 구분 코드 */
private String bnfPushCndDvCd;
/** 알림 조건 구분 명 */
private String bnfPushCndDvNm;
/** 알림 제목 */
private String pushSj;
/** 알림 내용 */
private String pushCn;
/** 알림 시간 */
private String pushTme;
/** 알림 주기 구분 */
private String pushCycleDv;
/** 알림 제한 횟수 */
private Integer pushLmttCnt;
/** 사용여부 */
private String useAt;
/** 항목 배열선언 */
private Long[] arrBnfPushEvtSetupInnb;
private String[] arrBnfPushCndDvCd;
private String[] arrBnfPushCndDvNm;
private String[] arrPushSj;
private String[] arrPushCn;
private String[] arrPushTme;
private String[] arrPushCycleDv;
private Integer[] arrPushLmttCnt;
private String[] arrUseAt;
}

View File

@@ -0,0 +1,172 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.HashMap;
import java.util.List;
/**
*
* 혜택 알림메세지 VO
* @author 이훈영
* @since 2024-09-23
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-09-23 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftPushVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰코드 */
private String sopmalCd;
// 알림 내용 항목
/** 혜택 알림 정보 고유번호 */
private Long bnfPushInfoInnb;
/** 알림 대상 구분 코드 */
private String bnfPushTrgetDvCd;
/** 알림 대상 구분 명 */
private String bnfPushTrgetDvNm;
/** 알림 대상 구분 */
private String trgetDv;
/** 알림 대상 전체수 */
private Integer trgetAllCnt;
/** 알림 제목 */
private String pushSj;
/** 알림 내용 */
private String pushCn;
/** 알림 내용 - 개행처리 */
private String pushCnRpl;
/** 알림 발송 일시 */
private String pushSendDt;
/** 알림 발송 일자 */
private String pushSendDe;
/** 알림 발송 시간 */
private String pushSendTme;
/** 이미지파일경로 */
private String imgFilCours;
/** 이미지파일명 */
private String imgFilNm;
/** 예약 여부 */
private String resveAt;
/** 예약 상태 */
private String resveSttus;
/** 삭제 여부 */
private String delAt;
/** 알림 유형 */
private String pushType;
/** callback 데이터 */
private String pushData;
/** callback 데이터 - url */
private String dataUrl;
/** callback 데이터 - key */
private String dataKey;
/** callback 데이터 - ext */
private String dataExt;
// 알림 발송 항목
/** 혜택 알림 발송내역 고유번호 */
private Long bnfPushSndngDtlsInnb;
/** 혜택 알림 이벤트별 설정 고유번호 */
private Long bnfPushEvtSetupInnb;
/** 발송 여부 */
private String sndngAt;
/** 발송 상태 */
private String sndngSttus;
/** 발송 대상수 */
private Integer sndngTrgetCnt;
/** 발송 성공수 */
private Integer sndngSuccesCnt;
/** 발송 실패수 */
private Integer sndngFailrCnt;
/** 에러코드 */
private Integer errorCode;
// 알림 설정
/** 테스트 대상 회원ID 문자열 */
private String trgetMbrIds;
/** 발송제한 시작 시간1 */
private String lmttBgnTme1;
/** 발송제한 종료 시간1 */
private String lmttEndTme1;
/** 발송제한 시작 시간2 */
private String lmttBgnTme2;
/** 발송제한 종료 시간2 */
private String lmttEndTme2;
// 대상 회원 항목
/** 회원 디바이스 고유번호 */
private Long mbrDeviceInnb;
/** 회원 디바이스 고유번호 배열 */
private Long[] arrMbrDeviceInnb;
/** 회원고유번호 */
private Long mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 회원ID */
private String mbrId;
/** 회원명 */
private String mbrNm;
/** FCM 토큰 */
private String fcmToken;
/** FCM 토큰 배열 */
private String[] arrFcmToken;
/** 알림 동의 여부 */
private String pushAgreAt;
/** 디바이스 고유ID */
private String deviceId;
/** 운영체제 이름 */
private String deviceOsNm;
/** 운영체제 버전 */
private String deviceOsVer;
/** 앱 버전 */
private String deviceAppVer;
// 혜택별 동의 항목
/** 혜택 동의 고유번호 */
private Long bnfAgreInnb;
/** 혜택 구분코드 */
private String bnfDvCd;
/** 혜택 동의 구분코드 */
private String bnfAgreDvCd;
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 동의여부 */
private String agreAt;
/** 이미지 파일 업로드 */
private List<HashMap<String, Object>> fileInfo;
/** CDN URL */
private String imgCdnurl;
// 검색 조건
/** 검색구분 */
private String srchDv;
/** 검색_검색어 */
private String srchKeyword;
/** 검색_날짜_구분 */
private String srchPdDv;
/** 검색_상태_구분 */
private String srchSttDv;
/** 검색_사용여부_구분 */
private String srchUseAt;
/** 검색_시작일 */
private String srchStartDt;
/** 검색_종료일 */
private String srchEndDt;
}

View File

@@ -0,0 +1,50 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 혜택 퀴즈 VO
* @author 이훈영
* @since 2024-06-18
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-07-18 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftQuizVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 혜택 퀴즈 고유번호 */
private Long bnfQuizInnb;
/** 퀴즈 내용 */
private String quizCn;
/** 퀴즈 정답 */
private String quizCnsr;
/** 힌트보기 링크 */
private String hintUrl;
/** 퀴즈 삭제여부 */
private String delAt;
/** 퀴즈항목 배열선언 */
private Long[] arrBnfQuizInnb;
private String[] arrQuizCn;
private String[] arrQuizCnsr;
private String[] arrHintUrl;
private String[] arrDelAt;
}

View File

@@ -0,0 +1,66 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 혜택 보상 VO
* @author 이훈영
* @since 2024-06-18
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-06-18 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftRewardVO {
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 보상 항목 구분 코드 */
private String bnfRwdCateDvCd;
/** 보상 항목 구분 코드명 */
private String bnfRwdCateDvCdNm;
/** 보상 상품 구분 코드 */
private String bnfRwdGodsDvCd;
/** 보상 상품 구분 코드명 */
private String bnfRwdGodsDvCdNm;
/** 보상 마일리지 금액 */
private Double mlgRwdAmt;
/** 보상 쿠폰고유번호 */
private Long couponInnb;
/** 보상 쿠폰명 */
private Long couponName;
/** 보상 표시명 */
private String itmNm;
/** 보상 당첨수량 */
private Integer przwinQy;
/** 보상 당첨확률 */
private Float przwinPrc;
/** 보상 조건횟수 */
private Integer rwdCndCnt;
/** 보상항목 배열선언 */
private String[] arrBnfRwdCateDvCd;
private String[] arrBnfRwdGodsDvCd;
private Double[] arrMlgRwdAmt;
private Long[] arrCouponInnb;
private String[] arrItmNm;
private Integer[] arrPrzwinQy;
private Float[] arrPrzwinPrc;
private Integer[] arrRwdCndCnt;
}

View File

@@ -0,0 +1,96 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 혜택 현황내역 VO
* @author 이훈영
* @since 2024-10-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-10-11 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftSttusVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 혜택구분코드 */
private String bnfDvCd;
/** 혜택고유번호 */
private String bnfInnb;
// 회원별 내역
/** 회원 고유번호 */
private String mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 회원ID */
private String mbrId;
/** 회원명 */
private String mbrNm;
/** 최종참여일시 */
private String lastPrtDt;
/** 참여횟수 */
private Integer prtCnt;
/** 보상횟수1 */
private Integer rwdCnt1;
/** 보상횟수2 */
private Integer rwdCnt2;
/** 참여보상 마일리지 합계 */
private Double sumMlgAmt;
// 검색 조건
/** 검색구분 */
private String srchDv;
/** 검색_검색어 */
private String srchKeyword;
/** 검색_부분 */
private String srchPart;
/** 검색_숫자 */
private Integer srchNum;
/** 검색_숫자범위 */
private String srchNumRng;
/** 검색_년 */
private String srchYear;
/** 검색_월 */
private String srchMonth;
/** 검색_시작년 */
private String srchSttYear;
/** 검색_시작월 */
private String srchSttMonth;
/** 검색_종료년 */
private String srchEndYear;
/** 검색_종료월 */
private String srchEndMonth;
/** 검색_시작일 */
private String srchStartDt;
/** 검색_종료일 */
private String srchEndDt;
/** 검색_일시 */
private String srchCurrDt;
/** 검색_보상구분코드 */
private String[] srchRwdCateDv;
/** 검색_상태_구분 */
private String srchSttDv;
/** 검색_매장 */
private String srchStrInnb;
/** 검색_정렬 */
private String srchOrder;
}

View File

@@ -0,0 +1,159 @@
package com.wb.domainserver.domain.mngr.bnft.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.HashMap;
import java.util.List;
/**
*
* 혜택 VO
* @author 이훈영
* @since 2024-06-18
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-06-18 이훈영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BnftVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/// 혜택 기본 정보
/** 혜택 설정 고유번호 */
private Long bnfInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 혜택 구분 코드 */
private String bnfDvCd;
/** 혜택 구분 코드명 */
private String bnfDvCdNm;
/** 혜택 제목 */
private String bnfSj;
/** 사용여부 */
//private String useAt;
/** 진행기간 시작일시 */
private String bnfBgnDt;
/** 진행기간 종료일시 */
private String bnfEndDt;
/** 진행기간 시작일자 */
private String bnfBgnDe;
/** 진행기간 종료일자 */
private String bnfEndDe;
/** 진행기간 시작시간 */
private String bnfBgnTme;
/** 진행기간 종료시간 */
private String bnfEndTme;
/** 충전필요금액 */
private Double amtForChg;
/** 화면 대표 이미지 */
private String scrReprsntImg;
/** 화면 대표 이미지명 */
private String scrReprsntImgNm;
/** 화면 대표 링크 URL */
private String scrReprsntLinkUrl;
/** 화면 보상 이미지 */
private String scrRwdImg;
/** 화면 보상 이미지명 */
private String scrRwdImgNm;
/** 화면 보상 링크 URL */
private String scrRwdLinkUrl;
/** 혜택 안내 */
private String bnfWordsCn;
///혜택 내용설정 정보
/** 내용 제목 */
private String cnSj;
/** 내용 설명 */
private String cnDc;
/** 링크 */
private String linkUrl;
/** 이미지파일경로 */
private String imgFilCours;
/** 이미지파일명 */
private String imgFilNm;
/** 시작일시 */
private String cnBgnDt;
/** 종료일시 */
private String cnEndDt;
/** 시작일자 */
private String cnBgnDe;
/** 종료일자 */
private String cnEndDe;
/** 시작시간 */
private String cnBgnTme;
/** 종료시간 */
private String cnEndTme;
/** 유효일시 */
private String validDt;
/** 시간(초) */
private int tmeSecnd;
/** 안내내용 */
private String wordsCn;
/** 회원명 */
private String mbrNm;
/** 할인구분코드 */
private String dscntUnitDvCd;
/** 할인구분코드명 */
private String dscntUnitDvCdNm;
/** 할인금액 */
private Float dscntAmt;
/** 할인율 */
private Double dscntRt;
/** 혜택 설정 고유번호 */
private Long befBnfInnb;
/** 이미지 파일 업로드 */
private List<HashMap<String, Object>> fileInfo;
private List<HashMap<String, Object>> fileInfo2;
/// 혜택 동의 내역 -- 필요??
/** 혜택 동의 고유번호 */
private Long bnfAgreInnb;
/** 혜택 동의 구분코드 */
private String bnfAgreDvCd;
/** 혜택 동의 구분코드명 */
private String bnfAgreDvCdNm;
/** 동의여부 */
private String agreAt;
// 검색 조건
/** 검색구분 */
private String srchDv;
/** 검색_검색어 */
private String srchKeyword;
/** 검색_날짜_구분 */
private String srchPdDv;
/** 검색_상태_구분 */
private String srchSttDv;
/** 검색_사용여부_구분 */
private String srchUseAt;
/** 검색_시작일 */
private String srchStartDt;
/** 검색_종료일 */
private String srchEndDt;
/// 혜택 보상 VO
private BnftRewardVO rwdVO;
/// 혜택 관심분야 VO
private BnftIntrstVO intrstVO;
/// 혜택 퀴즈 VO
private BnftQuizVO quizVO;
}

View File

@@ -0,0 +1,255 @@
package com.wb.domainserver.domain.mngr.goods.banner.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.banner.vo.BannerVO;
import com.wb.domainserver.exception.WnbtRestException;
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.file.FileMngUtil;
import com.wb.domainserver.util.file.service.FileStorageService;
import jakarta.servlet.http.HttpServletRequest;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.HashMap;
import java.util.List;
@Slf4j
@Controller
@RequestMapping("/mngr/goods/banner")
public class BannerController {
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private FileMngUtil fileMngUtil;
@Value("${mngrfo.common.fileupload.uploaddirs.goods}")
private String uploadFilePath;
@Value("${mngrfo.common.fileupload.extensions.images}")
private String whiteListFileUploadExtensions;
@Autowired
private FileStorageService filestore;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 배너목록조회
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBannerListR")
public String selectBannerListR(BannerVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/selectBOBannerList", vo),
model,
"resultMap"
);
return "mngr/goods/banner/BannerListR";
}
/**
* 배너등록페이지이동
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBannerRegistForm")
public String selectBannerRegistForm(BannerVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/selectBOBannerRegistForm", vo),
model,
"resultMap"
);
return "mngr/goods/banner/BannerC";
}
/**
* 배너 등록
* @param vo
* @param model
* @param bindingResult
* @param request
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertBanner" , method = RequestMethod.POST)
public ResponseEntity<?> insertBanner(@Validated BannerVO vo, BindingResult bindingResult,
HttpServletRequest request,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
vo.setSopmalCd(authSopmalCd);
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun", "ETCM");
request.setAttribute("subPathId", "");
request.setAttribute("validExp", "");
List<HashMap<String, Object>> ulpladFileMap;
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/insertBOBanner", vo),
ReplyFromResrc::getReply
);
}
/**
* 배너수정페이지 및 상세조회
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBannerDtlForm" , method = RequestMethod.POST)
public String selectBannerDtlForm(BannerVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/selectBOBannerDtlForm", vo),
model,
"resultMap"
);
return "mngr/goods/banner/BannerDtlU";
}
/**
* 배너 수정
* @param vo
* @param model
* @param bindingResult
* @param request
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBannerDtl")
public ResponseEntity<?> updateBannerDtl(@Validated BannerVO vo, BindingResult bindingResult, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
vo.setSopmalCd(authSopmalCd);
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun", "ETCM");
request.setAttribute("subPathId", "");
request.setAttribute("validExp", "");
List<HashMap<String, Object>> ulpladFileMap;
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/updateBOBannerDtl", vo),
ReplyFromResrc::getReply
);
}
/**
* 배너삭제
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteBanner" , method = RequestMethod.POST)
public ResponseEntity<?> deleteBanner(BannerVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/deleteBOBanner", vo),
ReplyFromResrc::getReply
);
}
/**
* 배너 순서 지정 팝업
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBannerOrdrPopup" , method = RequestMethod.POST)
public String selectBannerOrdrPopup(BannerVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/selectBOBannerOrdrPopup", vo),
model,
"resultMap"
);
return "mngr/goods/banner/BannerOrdrPopupR";
}
/**
* 배너 순서 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBannerOrdr" , method = RequestMethod.POST)
public ResponseEntity<?> updateBannerOrdr( @RequestBody List<BannerVO> vo,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
for(BannerVO bannerVO : vo){
bannerVO.setSopmalCd(authSopmalCd);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/updateBOBannerOrdr", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,97 @@
package com.wb.domainserver.domain.mngr.goods.banner.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class BannerVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** table name : fm_goods_banner */
/** 배너 key */
private Integer bannerInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 배너 명 */
@NotBlank(message = "배너명")
private String bannerNm;
/** 노출위치구분 */
private String expsrlcDv;
/** 노출구분 */
private String expsrlcDvCd;
/** 배너 경로 */
private String bannerUrl;
/** 노출시작일시 */
private String expsrBgnDt;
/** 노출종료일시 */
private String expsrEndDt;
/** 원본파일명 */
private String orginlFilNm;
/** 시스템파일명 */
private String sysFilNm;
/** 파일용량 */
private String filMg;
/** 파일타입 */
private String filTy;
/** 파일경로 */
private String filCours;
/** 파일정보 */
private List<HashMap<String, Object>> fileInfo;
/** 추가 항목 */
/** 상품리스트 */
private String[] goodsIds;
/** 상품 갯수 */
private String goodsCnt;
/** 파일 사용 상태값 */
private String fileUse;
/** 노출 예약 시작 날짜 */
private String expsrBgnYmd;
/** 노출 예약 종료 날짜 */
private String expsrEndYmd;
/** 노출 예약 시작 시각 */
private String expsrBgnTime;
/** 노출 예약 종료 시각 */
private String expsrEndTime;
// 이벤트 적용 상품
/** 상품 적용 구분 코드 */
private String goodsApplcDvCd;
/** 선택한 카테고리 */
private String[] reprsntCtgryId;
/** 선택한 상품 */
private String[] relatedGoodsId;
/** 상품 고유번호 */
private String goodsInnb;
/** 이벤트 적용상품 고유번호 */
private Integer evtApplcGoodsInnb;
/** 상품적용구분 */
private String goodsApplcDv;
/** 판매상품 고유번호 */
private Integer sleGoodsInnb;
/** 혜택 적용 판매상품 고유번호 리스트 */
private List<Integer> sleGoodsInnbList;
/** 혜택 제외 판매상품 고유번호 리스트 */
private List<Integer> ExclSleGoodsInnbList;
/** 카테고리 ID */
private String ctgryId;
/** 혜택 적용 카테고리 ID 리스트 */
private List<Integer> ctgryIdList;
/** 혜택 제외 카테고리 ID 리스트 */
private List<Integer> ExclCtgryIdList;
/** 상위 카테고리 */
private String upperCtgryId;
/*배너순서*/
private String bannerOrdr;
}

View File

@@ -0,0 +1,165 @@
package com.wb.domainserver.domain.mngr.goods.cmnuse.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.cmnuse.vo.CmnuseVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Cmnuse Controller Class (front)
*
* @author
* @since 2024-02-10
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-10 최초 생성
*
* </pre>
*/
@Controller
@Slf4j
@RequestMapping("/mngr/goods/cmnuse")
public class CmnuseController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 공용 정보 목록 조회
* @param CmnuseVO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmnuseInfoList")
public String selectCmnuseInfoList(CmnuseVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/selectBOCmnuseInfoList", vo),
model,
"resultMap"
);
return "mngr/goods/cmnuse/CmnuseInfoListR";
}
/**
* 공용 정보 등록
* @param CmnuseVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertCmnuseInfo" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertCmnuseInfo(CmnuseVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/insertBOCmnuseInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 공용 정보 등록 화면 조회
* @param CmnuseVO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmnuseInfoForm")
public String selectCmnuseInfoForm(CmnuseVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return "mngr/goods/cmnuse/CmnuseInfoFormR";
}
/**
* 공용 정보 수정
* @param CmnuseVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateCmnuseInfoDtl", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateCmnuseInfoDtl(CmnuseVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/updateBOCmnuseInfoDtl", vo),
ReplyFromResrc::getReply
);
}
/**
* 공용 정보 수정 화면 조회
* @param CmnuseVO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmnuseInfoDtlForm")
public String selectCmnuseInfoDtlForm(CmnuseVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/selectBOCmnuseInfoDtlForm", vo),
model,
"resultMap"
);
return "mngr/goods/cmnuse/CmnuseInfoDtlFormR";
}
/**
* 공용 정보 삭제
* @param CmnuseVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteCmnuseInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteCmnuseInfo(CmnuseVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/deleteBOCmnuseInfo", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,28 @@
package com.wb.domainserver.domain.mngr.goods.cmnuse.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CmnuseVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 공용정보 고유번호 */
private String cmnuseInfoInnb;
/** 버전번호 */
private String verNb;
/** 사업자 고유번호 */
private String bsnmInnb;
/** 공용정보 타이틀 */
private String cmnuseInfoSj;
/** 정보내용 */
private String infoCn;
/** 사용여부 */
private String useAt;
/** 쇼핑몰 코드 */
private String sopmalCd;
}

View File

@@ -0,0 +1,180 @@
package com.wb.domainserver.domain.mngr.goods.goodsinfo.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.goodsinfo.vo.GoodsInfoVO;
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 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;
/**
* GoodsInfoController Controller Class (front)
*
* @author
* @since 2023-12-12
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-12 최범식 최초 생성
* 2024-02-14 이운산 상품정보수정선택 수정
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/mngr/goods/goodsinfo")
public class GoodsInfoController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 상품 정보 목록 조회
* @param GoodsInfoVO
* @return GoodsInfoListR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectGoodsInfoList")
public String selectBbsListInqire(GoodsInfoVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/selectBOGoodsInfoList", vo),
model,
"resultMap"
);
return "mngr/goods/goodsinfo/GoodsInfoListR";
}
/**
* 상품 정보 등록화면
* @param GoodsInfoVO
* @return GoodsInfoFormR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectGoodsInfoForm")
public String selectGoodsInfoForm(GoodsInfoVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
model.addAttribute("goodsExpsrInfoInnb", vo.getGoodsExpsrInfoInnb());
return "mngr/goods/goodsinfo/GoodsInfoFormR";
}
/**
* 상품 정보 등록
* @param GoodsInfoVO
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertGoodsInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertGoodsInfo(@Validated GoodsInfoVO vo, BindingResult bindingResult,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/insertBOGoodsInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 정보 수정화면
* @param GoodsInfoVO
* @param model 모델객체
* @return GoodsInfoDtlFormR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectGoodsInfoDtlForm")
public String selectGoodsInfoDtlForm(GoodsInfoVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/selectBOGoodsInfoDtlForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsinfo/GoodsInfoDtlFormR";
}
/**
* 상품 정보 수정
* @param GoodsInfoVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateGoodsInfoDtl")
public ResponseEntity<WnbtResponse> updateGoodsInfoDtl(@Validated GoodsInfoVO vo, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/updateBOGoodsInfoDtl", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 정보 삭제
* @param GoodsInfoVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteGoodsInfo")
public ResponseEntity<WnbtResponse> deleteGoodsInfo(GoodsInfoVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/updateBOGoodsInfoDel", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,53 @@
package com.wb.domainserver.domain.mngr.goods.goodsinfo.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class GoodsInfoVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 상품노출정보 고유번호 */
private String goodsExpsrInfoInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 상품정보설정 제목 */
@NotBlank(message = "상품 정보명")
private String goodsInfoSetupSj;
/** 상품명노출여부 */
private String goodsNmExpsrAt;
/** 상품명노출순서 */
private String goodsNmExpsrOrdr;
/** 대표설명노출여부 */
private String reprsntDcExpsrAt;
/** 대표설명노출순서 */
private String reprsntDcExpsrOrdr;
/** 가격노출여부 */
private String pricExpsrAt;
/** 가격노출순서 */
private String pricExpsrOrdr;
/** 배송노출여부 */
private String dlvyExpsrAt;
/** 배송노출순서 */
private String dlvyExpsrOrdr;
/** 리뷰 평점 노출여부 */
private String rvwEvlScreExpsrAt;
/** 리뷰 평점 노출순서 */
private String rvwEvlScreExpsrOrdr;
/** 아이콘 노출여부 */
private String iconExpsrAt;
/** 아이콘 노출순서 */
private String iconExpsrOrdr;
/** 사용여부 */
private String useAt;
/** 순서 DB 저장용도 아님*/
private String[] sortOrdr;
}

View File

@@ -0,0 +1,686 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.goodsmngr.vo.GoodsmngrVO;
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.file.service.FileStorageService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.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;
/**
* GoodsmngrController Controller Class (front)
*
* @author
* @since 2024-03-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-19 리브가 최초 생성
* -
*
* </pre>
*/
@Controller
@Slf4j
@RequestMapping("/mngr/goods/goodsmngr")
public class GoodsmngrController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/** 파일 업로드 */
@Autowired
private FileStorageService filestore;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 상품 목록 조회 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsListForm")
public String selectGoodsListForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setUpperCtgryId("1");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsListRForm";
}
/**
* 상품 목록 조회 리스트
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsList")
public String selectGoodsList(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsList", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsListR";
}
/**
* 카테고리별 상품 목록 조회 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCtgryGoodsListForm")
public String selectCtgryGoodsListForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setUpperCtgryId("1");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/CtgryGoodsListRForm";
}
/**
* 카테고리별 상품 목록 조회 리스트
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCtgryGoodsList")
public String selectCtgryGoodsList(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOCtgryGoodsList", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/CtgryGoodsListR";
}
/**
* 카테고리별 상품 목록 순서 수정
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateCtgryGoodsList")
public ResponseEntity<WnbtResponse> updateCtgryGoodsList(@RequestBody GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOCtgryGoodsList", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 등록 폼 조회
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectGoodsRegistForm")
public String selectGoodsRegistForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setUpperCtgryId("1");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsC";
}
/**
* 상품 등록
* @param vo
* @param request
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertGoodsInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertGoodsInfo(GoodsmngrVO vo, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
//파일 업로드 관련 START
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun","GDIG"); //이미지구분코드 - 상품
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
//파일 업로드 관련 END
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/insertBOGoods", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 삭제
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteGoods", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteGoods(GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/deleteBOGoods", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 상세 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsDtlForm")
public String selectGoodsDtlForm( GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsDtl", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsDtlU";
}
/**
* 상품 수정(카테고리)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlCtgryLink", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlCtgryLink(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlCtgryLink", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(기본정보)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlBscInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlBscInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlBscInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(판매정보)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlSelInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlSelInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlSelInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(판매정보 - 재고정책 수정에 따른 옵션 수량 변경)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlInvntryPolicyInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlInvntryPolicyInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlInvntryPolicyInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(구매대상자 제한 팝업)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlTrgterLmtt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlTrgterLmtt(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlTrgterLmtt", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(상품옵션정보)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlOptnInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlOptnInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlOptnInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(상품이미지)
* @param vo
* @param request
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlImg", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlImg(GoodsmngrVO vo, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
//파일 업로드 관련 START
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun","GDIG"); //이미지구분코드 - 상품
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
//파일 업로드 관련 END
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlImg", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(기타정보)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlEtcInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlEtcInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlEtcInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(관련상품)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlRelateGoods", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlRelateGoods(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlRelateGoods", vo),
ReplyFromResrc::getReply
);
}
/**
* 관리자 > 상품 구매대상자 제한 설정 팝업 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectGoodsPurchaseLimttPopupC")
public String selectGoodsPurchaseLimttPopupC(GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd,
ModelMap model) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectGoodsPurchaseLimttPopupForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsPurchaseLimttPopupC";
}
/**
* 관리자 > 상품 구매대상자 제한 설정 팝업 상세 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectGoodsPurchaseLimttPopupR")
public String selectGoodsPurchaseLimttPopupR(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectGoodsPurchaseLimttPopupFormR", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsPurchaseLimttPopupR";
}
/**
* 상품 검색 팝업 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsSrchPopupForm")
public String selectGoodsSrchPopupForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
model.addAttribute("paramVO", vo);
return "mngr/goods/goodsmngr/GoodsSrchPopupForm";
}
/**
* 상품 검색 팝업 리스트
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsSrchPopupList")
public String selectGoodsSrchPopupList(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsList", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsSrchPopupListR";
}
/**
* 재고 확인 팝업
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsInvntryPopup")
public String selectGoodsInvntryPopup(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectGoodsInvntry", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsInvntryPopup";
}
/**
* 관리자 변경이력 조회 (수정로그)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsLogDtl", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> selectGoodsLogDtl(@RequestBody GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsLogDtl", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 복사 등록 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsCopyForm")
public String selectGoodsCopyForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsCopyForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsCopyC";
}
/**
* 상품 일괄 업데이트 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBndeUpdtForm")
public String selectBndeUpdtForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOBndeUpdtForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/BndeUpdtU";
}
/**
* 상품 일괄 업데이트
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateBndeUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateBndeUpdt(GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOBndeUpdt", vo),
ReplyFromResrc::getReply
);
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,81 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsOptionVO extends AbstractVO {
/** 상품옵션 고유번호 */
private Integer goodsOptnInnb;
/** 옵션 유형 */
private String optnTy;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 상품고유번호 */
private long goodsInnb;
/** 상품옵션그룹번호 */
private Integer optnGroupNb;
/** 옵션명 1 */
private String optnNm1;
/** 옵션명 2 */
private String optnNm2;
/** 옵션명 3 */
private String optnNm3;
/** 옵션명 4 */
private String optnNm4;
/** 옵션값 1 */
private String optnVal1;
/** 옵션값 2 */
private String optnVal2;
/** 옵션값 3 */
private String optnVal3;
/** 옵션값 4 */
private String optnVal4;
/** 옵션코드 1 */
private String optnCd1;
/** 옵션코드 2 */
private String optnCd2;
/** 옵션코드 3 */
private String optnCd3;
/** 옵션코드 4 */
private String optnCd4;
/** 옵션정보 */
private String optnInfo;
/** 재고수량 */
private String invntryQy;
/** 판매재고수량 */
private String usefulInvntryQy;
/** 소비자가 */
private Integer cnsmrpric;
/** 판매가 */
private Integer slepric;
/**마일리정책코드*/
private String mlgPolicyCd;
/** 마일리지적립구분코드 */
private String mlgAccmlCd;
/** 마일리지 적립금액 */
private Integer mlgAccmlAmt;
/** 마일리지 유효월수*/
private Integer mlgValidMtCnt;
/** 옵션관계번호 */
private String optnRelateNb;
/** 추가구성옵션 > 옵션관계여부 */
private String optnRelateAt;
/** 옵션노출여부 */
private String optnExpsrAt;
/** 기준구분여부 */
private String stdrDvAt;
/** 재고품절시 노출여부*/
private String invntrySldoutExpsrAt;
/** 옵션순서*/
private Integer optnOrdr;
/** 옵션필수여부 */
private char optnEssntlAt;
/*복수할인여부*/
private String compnbDscntAt;
/*구간할인여부*/
private String sctnDscntAt;
}

View File

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

View File

@@ -0,0 +1,42 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsTrgterLmttVO extends AbstractVO {
/** 구매대상자제한 고유번호 */
private long goodsTrgterLmttInnb;
/** 상품고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 구매대상자제한 구분코드 */
private String goodsTrgterDvCd;
/** 회원등급 고유번호 */
private long mbrGradInnb;
/** 가격대체문구사용여부 */
private String pricRplcWordsUseAt;
/** 가격대체문구 */
private String pricRplcWords;
/** 가격대체문구링크URL */
private String pricRplcLink;
/** 가격대체문구링크 구분코드*/
private String pricRplcLinkDvCd;
/** 가격대체문구링크 연결창구분코드 */
private String pricRplcLinkBrwsrDvCd;
/** 버튼대체문구사용여부 */
private String buttonRplcWordsUseAt;
/** 버튼대체문구 */
private String buttonRplcWords;
/** 버튼대체문구링크URL */
private String buttonRplcLink;
/** 버튼대체문구링크 구분코드*/
private String buttonRplcLinkDvCd;
/** 버튼대체문구링크 연결창구분코드 */
private String buttonRplcLinkBrwsrDvCd;
}

View File

@@ -0,0 +1,523 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsmngrVO extends AbstractVO {
/*************************************
* 상품 GOODS START
* **********************************/
/** 상품고유번호 */
private String goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 배송그룹 고유번호 */
private String dlvyGroupInnb;
/** 공용정보 고유번호 */
private String cmnuseInfoInnb;
/** 버전번호 */
private long verNb;
/** 사업자 고유번호 */
private long bsnmInnb;
/** 상품종류 */
private String goodsKndCd;
/** 상품코드 */
private String goodsCd;
/** 대표상품코드 */
private String reprsntGoodsCd;
/** 상품명 */
@NotBlank(message = "상품명")
private String goodsNm;
/** 입점상품명 */
private String tentMarktGoodsNm;
/** 부가세 */
private String taxAt;
/** 상품상태 */
private String goodsSttusCd;
/*판매중지상태시 사용자 문구변경여부*/
private String selStpgeCustomWordsAt;
/*판매중지상태시 사용자 변경문구*/
private String selStpgeCustomWords;
/** 재고정책 */
private String invntryPolicyCd;
/** 가용재고제한수량 */
private String avlinvLmttQy;
/** 짧은설명 */
private String srtDc;
/** 키워드 */
private String kwrd;
/** 브랜드 */
private String brandCd;
/** 상품설명 */
private String goodsDc;
/** 모바일상품설명 */
private String mblGoodsDc;
/** 모바일상품설명 PC 동일여부 */
private String mblGoodsDcPcSameAt;
/** 구매수량 제한구분코드 */
private String purchsQyLmttDvCd;
/** 구매수량 유형 */
private String purchsQyTyCd;
/** 최소구매수량 */
private String mummPurchsQy;
/** 최대구매수량 */
private String mxmmPurchsQy;
/** 결제수단설정 */
private String setleMnSetupCd;
/** 상품노출유형 */
private String goodsExpsrTyCd;
/** 노출구분 */
private String expsrDvCd;
/** 노출시작일시 */
private String expsrBgnDt;
/** 노출종료 */
private String expsrEndDt;
/** 노출설정앞문구 */
private String expsrSetupFwords;
/** 리뷰그룹번호 */
private String rvwGroupNb;
/** 리뷰작성가능여부 */
private String rvwWritngPosblAt;
/** 입점마케팅 네이버 연동여부 */
private String naverEpIntrlckAt;
/** 입점마케팅 구글 연동여부 */
private String googleEpIntrlckAt;
/** 입점마케팅 메타 연동여부 */
private String metaEpIntrlckAt;
/** 입점마케팅 모비온 연동여부 */
private String mobionEpIntrlckAt;
/** 예약상품배송일자 */
private String resveGoodsDlvyDe;
/** 예약상품안내문구내용 */
private String resveGoodsGuidanceWordsCn;
/** 배송안내문구내용 */
private String dlvyGuidanceWordsCn;
/** 청약철회가능여부 */
private String subscrptWthdrawPosblAt;
/** 개별취소가능여부 */
private String indvdlzCanclPosblAt;
/** 개별출고가능여부 */
private String indvdlzDlivyPosblAt;
/** 개별반품교환가능여부 */
private String indvdlzReturnExchngPosblAt;
/** 대표설명 */
private String reprsntDc;
/** 한달리뷰작성가능여부 */
private String mtRvwWritngPosblAt;
/** 구매대상자제한구분코드 */
private String purchsTrgterLmttDvCd;
/*일반 상품 일괄 업데이트 여부*/
/*추가정보 수정여부*/
private String goodsAdditionUptAt;
/*
Y 현재정보 유지하면서 업데이트
N 현재 추가정보 삭제 후 업데이트
*/
private String goodsAdditionDeleteAt;
/*판매상태 수정여부*/
private String goodsSttusUptAt;
/*노출여부 수정여부*/
private String ExpsrDvUptAt;
/*공용정보 수정여부*/
private String cmnuseInfoUptAt;
/*배송그룹 수정여부*/
private String dlvyGroupUptAt;
/*배송 안내 문구 수정여부*/
private String dlvyGuidanceWordsCnUptAt;
/*입점마케팅 연동여부 수정여부 */
private String epIntrlckUptAt;
/*전체 상품 선택*/
private String goodsChoiceAll;
/*선택 상품 고유번호*/
private String[] goodsInnbs;
/*관리자 상품 검색 - 대표카테고리기준*/
private String reprsntCtgryAtY;
/*관리자 상품 검색 - 카테고리 미등록*/
private String ctgryNoRegAtY;
/*판매수량 초기화여부*/
private String usefulInvntryQyInit;
/*************************************
* 상품 GOODS END
* **********************************/
/*************************************
* 옵션 GOODS_OPTION START
* **********************************/
/** 입력옵션 */
private List<GoodsOptionVO> goodsInputOptionVOList;
private List<GoodsOptionVO> delGoodsInputOptionVOList;
/** 일반옵션 */
private List<GoodsOptionVO> goodsNormalOptionVOList;
private List<GoodsOptionVO> delGoodsNormalOptionVOList;
/** 추가구성옵션 */
private List<GoodsOptionVO> goodsAddedOptionVOList;
private List<GoodsOptionVO> delGoodsAddedOptionVOList;
/** 재고옵션 */
private List<GoodsOptionVO> goodsInvntryOptionVOList;
private List<GoodsOptionVO> delGoodsInvntryOptionVOList;
/** 상품옵션 고유번호 */
private String goodsOptnInnb;
/** 옵션 유형 */
private String optnTy;
// /** 쇼핑몰코드 */
// private String sopmalCd;
// /** 상품고유번호 */
// private long goodsInnb;
/** 옵션명 1 */
private String optnNm1;
/** 옵션명 2 */
private String optnNm2;
/** 옵션명 3 */
private String optnNm3;
/** 옵션명 4 */
private String optnNm4;
/** 옵션값 1 */
private String optnVal1;
/** 옵션값 2 */
private String optnVal2;
/** 옵션값 3 */
private String optnVal3;
/** 옵션값 4 */
private String optnVal4;
/** 옵션코드 1 */
private String optnCd1;
/** 옵션코드 2 */
private String optnCd2;
/** 옵션코드 3 */
private String optnCd3;
/** 옵션코드 4 */
private String optnCd4;
/** 옵션정보 */
private String optnInfo;
/** 재고수량 */
private Integer invntryQy;
/** 가용재고수량 */
private Integer usefulInvntryQy;
/** 공급가 */
private Integer splpric;
/** 소비자가 */
private Integer cnsmrpric;
/** 판매가 */
private Integer slepric;
/** 마일리지적립구분코드 */
private String mlgAccmlCd;
/** 마일리지 적립금액 */
private Integer mlgAccmlAmt;
/** 옵션관계번호 */
private long optnRelateNb;
/** 옵션노출여부 */
private String optnExpsrAt;
/** 기준구분여부 */
private String stdrDvAt;
/*************************************
* 옵션 GOODS_OPTION END
* **********************************/
/*************************************
* 관련상품(추천상품) GOODS_RELATE START
* **********************************/
/** 관련상품(추천상품) */
private List<GoodsRelateVO> goodsRelateVOList;
/** 관련상품 고유번호 */
private long relateGoodsInnb;
// /** 상품 고유번호 */
// private long goodsInnb;
/** 관련 판매상품 고유번호 */
// private long relateSleGoodsInnb;
/*************************************
* 관련상품 GOODS_RELATE END
* **********************************/
/*************************************
* 추가정보 GOODS_ADDITION START
* **********************************/
/** 추가정보 */
private List<GoodsAdditionVO> goodsAdditionVOList;
private List<GoodsAdditionVO> deleteAdditionVOList;
/*************************************
* 추가정보 GOODS_ADDITION END
* **********************************/
/*************************************
* 할인(프로모션) SHOP_GOODS_DSCNT START
* **********************************/
/** 판매상품할인정책고유번호 */
private long sleGoodsDscntInnb;
// /** 상품고유번호 */
// private long goodsInnb;
// /** 쇼핑몰코드 */
// private String sopmalCd;
/** 할인시작구매수량 */
private long dscntBgnPurchsQy;
/** 할인종료구매수량 */
private long dscntEndPurchsQy;
/** 할인구분코드 */
private String dscntDvCd;
/** 할인금액 */
private double dscntAmt;
/*************************************
* 할인(프로모션) SHOP_GOODS_DSCNT END
* **********************************/
/*************************************
* 아이콘 GOODS_ICON START
* **********************************/
/** 아이콘 */
private String goodsIconCd;
/** 상품아이콘 고유번호*/
// private long goodsIconInnb;
// /** 상품고유번호*/
// private long goodsInnb;
/** 아이콘코드*/
// private String iconCd;
/*************************************
* 아이콘 GOODS_ICON END
* **********************************/
/*************************************
* 이미지 GOODS_IMAGE START
* **********************************/
/** 상품이미지 고유번호 */
private long goodsImgInnb;
// /** 상품고유번호 */
// private long goodsInnb;
// /** 쇼핑몰코드 */
// private String sopmalCd;
/** 이미지종류 */
private String imgKnd;
/** 컷번호 */
private long cutNb;
/** 이미지경로 */
private String img;
//이미지정보
private List<GoodsImageVO> goodsImageVOList;
//삭제할 이미지 정보
private List<GoodsImageVO> delGoodsImageVOList;
/*************************************
* 이미지 GOODS_IMAGE END
* **********************************/
/*************************************
* 카테고리연결 CATEGORY_LINK START
* **********************************/
/** 카테고리 */
private List<CategoryLinkVO> goodsCategoryLinkVOList;
/** 카테고리연결상품고유번호 */
// private long ctgryGoodsEsntlNb;
// /** 상품고유번호 */
// private long goodsInnb;
/** 카테고리ID */
private String ctgryId;
/** 대표카테고리여부 */
// private String reprsntCtgryAt;
/** 상품순서 */
// private double goodsOrdr;
/*************************************
* 카테고리연결 CATEGORY_LINK END
* **********************************/
/*************************************
* 상품수정로그 FM_GOODS_ADMIN_LOG START
* **********************************/
/** 상품수정로그 고유번호 */
private long goodsUpdtLogInnb;
/** 항목명 */
private String itmNm;
/** 변경전값 */
private String chngBfeVal;
/** 변경후값 */
private String chngAfeVal;
/** 수정자 이름 */
private String regusrNm;
/** 회차 */
private double round;
/** 아이피 */
private String ip;
/*************************************
* 상품수정로그 FM_GOODS_ADMIN_LOG END
* **********************************/
/*************************************
* 상품 구매대상자제한 FM_GOODS_TRGTER_LMTT START
* **********************************/
/** 구매대상자 제한 > 회원 등급별 */
private List<GoodsTrgterLmttVO> goodsTrgterLmttMemGradVOList;
/** 구매대상자 제한 > 모든등급 */
private GoodsTrgterLmttVO goodsTrgterLmttMemAllVOList;
/** 구매대상자 제한 > 비회원 */
private GoodsTrgterLmttVO goodsTrgterLmttNoneVOList;
// private long goodsTrgterLmttInnb;
// private long goodsInnb;
// private String sopmalCd;
// private String goodsTrgterDvCd;
// private long mbrGradInnb;
// private String pricRplcWordsUseAt;
// private String pricRplcWords;
// private String pricRplcLink;
// private String pricRplcLinkDvCd;
// private String pricRplcLinkBrwsrDvCd;
// private String buttonRplcWordsUseAt;
// private String buttonRplcWords;
// private String buttonRplcLink;
// private String buttonRplcLinkDvCd;
// private String buttonRplcLinkBrwsrDvCd;
/*************************************
* 상품 구매대상자제한 FM_GOODS_TRGTER_LMTT END
* **********************************/
/** 주문고유번호 */
private String ordrInnb;
/** 회원고유번호 */
private String mbrInnb;
/** 회원구분 */
private String mbrDvCd;
/** 상위 카테고리 */
private String upperCtgryId;
/** 노출 코드 */
private String expsrCd;
/** 가격 구분 */
private String pricDv;
/** 시작 가격 */
private String startPric;
/** 종료 가격 */
private String endPric;
/** 판매 상태 */
private String[] goodsDftinfoSttus;
/** 일자 구분 */
private String dateDv;
/** 시작 일자 */
private String startDate;
/** 종료 일자 */
private String endDate;
/** 재고에따른 판매 */
private String goodsDftinfoInvntryPolicy;
/** 상품옵션 고유번호 배열*/
private String[] goodsOptnInnbs;
/** 상품옵션 구분 */
private String goodsOptnDv;
/** 개수 */
private int qy;
/** 입력옵션 텍스트 */
private String inputOptn;
/** 이벤트 고유번호 배열*/
private String[] evtInnbs;
/** 이벤트 고유번호 */
private String evtInnb;
/** 이벤트 구분 */
private String evtDv;
/** 쿠폰 고유번호 */
private String couponInnb;
/** 다운로드쿠폰 고유번호 */
private String dwldCouponInnb;
/** 쿠폰 혜택구분 */
private String bnefDv;
/** 중복할인여부 */
private String dplctDscntAt;
/** 타쿠폰동시사용여부 */
private String otrCouponSmtmUseAt;
/** 적용쿠폰 */
private String usedCoupons;
/** 검색_정렬구분 */
private String sortDv;
/** 검색 타입 */
private String srchType;
/** 검색어 */
private String srchStr;
/** 선택 삭제 */
private List<HashMap<String, Object>> delInnbArr;
/** 이미지 파일 업로드 */
private List<HashMap<String, Object>> fileInfo;
//실시간 수량배너 노출 설정
/** 실시간 수량배너 노출여부*/
private String rltmQyBannerExpsrAt;
/** 실시간수량배너 구분*/
private String rltmQyBannerDvCd;
/** 실시간 수량배너 이벤트 실판매 실재고수량*/
private Integer rltmRlQy;
/** 실시간 수량배너 이벤트 실판매 실재고판매수량*/
private Integer rltmRlSleQy;
/** 실시간 수량배너 이벤트 가판매 가재고수량*/
private Integer rltmVirtlQy;
/** 실시간 수량배너 이벤트가판매 가수량차감기준일시 */
private String rltmQyDdctStdrDt;
/** 실시간 수량배너 이벤트가판매 가수량차감시간*/
private Integer rltmQyDdctTme;
/** 실시간 수량배너 이벤트가판매 가수량차감수량*/
private Integer rltmDdctQy;
/** 실시간 수량배너 이벤트가판매 가차감제한수량 */
private Integer rltmDdctLimitQy;
/** 상품 목록을 퍼올릴 영역 */
private String selectedArea;
/*상품 순서 수정 리스트 */
private List<String> goodsOrdrList;
}

View File

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

View File

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

View File

@@ -0,0 +1,223 @@
package com.wb.domainserver.domain.mngr.goods.prsnt.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.goodsmngr.vo.GoodsmngrVO;
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.file.service.FileStorageService;
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;
@Controller
@RequestMapping("/mngr/goods/prsnt")
@Slf4j
public class PrsntController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/** 파일 업로드 */
@Autowired
private FileStorageService filestore;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 사은품 목록 조회 폼
* @param prsntSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectPrsntListForm")
public String selectPrsntListForm(ModelMap model, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOPrsntListForm", vo),
model,
"resultMap"
);
return "mngr/goods/prsnt/PrsntListRForm";
}
/**
* 사은품 목록 조회
* @param prsntSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectPrsntList")
public String selectPrsntList(ModelMap model,GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOPrsntList", vo),
model,
"resultMap"
);
return "mngr/goods/prsnt/PrsntListR";
}
/**
* 사은품 등록 폼
* @param prsntSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertPrsntForm")
public String insertPrsntForm(ModelMap model,GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
return "mngr/goods/prsnt/PrsntC";
}
/**
* 사은품 등록
* @param prsntVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertPrsnt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertPrsnt(@Validated GoodsmngrVO vo, BindingResult bindingResult , HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun","GDIG"); //이미지구분코드 - 상품
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/insertBOPrsnt", vo),
ReplyFromResrc::getReply
);
}
/**
* 사은품 상세조회
* @param prsntVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectPrsntDtlForm")
public String selectPrsntDtlForm(ModelMap model,GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOPrsntDtl", vo),
model,
"resultMap"
);
return "mngr/goods/prsnt/PrsntDtlU";
}
/**
* 사은품 수정
* @param prsntVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updatePrsntDtl" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updatePrsntDtl(@Validated GoodsmngrVO vo, BindingResult bindingResult , HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun","GDIG"); //이미지구분코드 - 상품
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOPrsnt", vo),
ReplyFromResrc::getReply
);
}
/**
* 사은품 삭제
* @param prsntVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deletePrsnt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deletePrsnt(GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/deleteBOGoods", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,5 @@
package com.wb.domainserver.domain.mngr.goods.prsnt.vo;
public class PrsntSrchVO {
}

View File

@@ -0,0 +1,5 @@
package com.wb.domainserver.domain.mngr.goods.prsnt.vo;
public class PrsntVO {
}

View File

@@ -0,0 +1,355 @@
package com.wb.domainserver.domain.mngr.login;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.admin.store.sopmal.vo.Shop;
import com.wb.domainserver.domain.admin.user.mngr.service.BOJobUserService;
import com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.domain.gcone.login.service.LoginService;
import com.wb.domainserver.domain.gcone.login.vo.LoginRequest;
import com.wb.domainserver.domain.gcone.login.vo.LoginUser;
import com.wb.domainserver.domain.gcone.mbr.mbr.service.BOMbrService;
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO;
import com.wb.domainserver.domain.gcone.ntcn.mssage.service.BOMssageService;
import com.wb.domainserver.realm.RealmContextHolder;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.security.jwt.service.TokenService;
import com.wb.domainserver.util.CookieUtils;
import com.wb.domainserver.util.dataaccess.DataMap;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Controller
@RequiredArgsConstructor
@RequestMapping(value="/mngr")
public class MngrLoginController {
private final LoginService service;
private final TokenService tokenService;
private final BOMaSopmalService bomaSopmalService;
private final BOJobUserService jobUserService;
private final BOCommonService commonService;
private final BOMbrService mbrService;
private final BOMaSopmalService maSopmalService;
private final BOMssageService boMssageService;
/**
* 사용자 로그인 페이지 진입시 이전 경로 저장 및 로그인 페이지 이동 처리
* @return
*/
@Policy(value = AuthPolicy.PUBLIC)
@GetMapping("/login")
@ResponseBody
public void login(HttpServletRequest request, HttpServletResponse response) throws IOException {
String realm = RealmContextHolder.getRealm();
String redirectUri = request.getParameter("redirect_uri");
String sopmalCd = RealmContextHolder.getSopmalCdRealm();
response.sendRedirect("/"+realm+"/login/page/"+realm+"?redirect_uri=%s&sopmalCd=%s".formatted(UriUtils.encode(redirectUri, StandardCharsets.UTF_8), UriUtils.encode(sopmalCd, StandardCharsets.UTF_8)));
}
/**
* 로그인 처리
* @return
*/
@Policy(value = AuthPolicy.PUBLIC)
@PostMapping(value = "/login/mngr", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<WnbtResponse> loginProcess(@RequestBody LoginRequest loginRequest,
HttpServletRequest request,
HttpServletResponse response
) {
log.debug("loginRequest :: {}", loginRequest);
//로그인 진행
LoginUser loginUser = null;
String realm = RealmContextHolder.getRealm();
loginRequest.setSopmalCd(RealmContextHolder.getSopmalCdRealm());
//접속이력정보 세팅
String ip = String.valueOf(request.getAttribute("LoggingClientIp"));
loginRequest.setConectIp(ip);
//접속브라우저 정보 저장
String userAgent = request.getHeader("User-Agent");
String browser = "Other";
log.debug("login userAgent :: {}", userAgent);
if(userAgent.contains("Trident")) { // IE
browser = "ie";
} else if(userAgent.contains("Edg")) { // Edge
browser = "edge";
} else if(userAgent.contains("Whale")) { // Naver Whale
browser = "whale";
} else if(userAgent.contains("Opera") || userAgent.contains("OPR")) { // Opera
browser = "opera";
} else if(userAgent.contains("Firefox")) { // Firefox
browser = "firefox";
} else if(userAgent.contains("Safari") && !userAgent.contains("Chrome")) { // Safari
browser = "safari";
} else if(userAgent.contains("Chrome")) { // Chrome
browser = "chrome";
}
loginRequest.setConectBrwsr(browser);
loginUser = service.mngrLogin(loginRequest);
log.debug("loginUser :: {}", loginUser);
service.createLoginToken(loginUser, request, response);
Map<String, Object> message = new HashMap<>();
message.put("result", "success");
message.put("redirectUri", loginRequest.getRedirectUri());
message.put("env", request.getAttribute("env"));
return ResponseEntity.ok(WnbtResponse.builder()
.resBody(new WnbtResponseBody(message))
.build());
}
/**
* 로그인 페이지 이동
* @return
*/
@GetMapping(value = "/login/page/mngr")
@Policy(value = AuthPolicy.PUBLIC)
public String loginPage(HttpServletRequest request, ModelMap model) {
String redirectUri = request.getParameter("redirect_uri");
String accessUrl = StringUtils.hasText(request.getParameter("access_url"))? request.getParameter("access_url") : RealmContextHolder.getOriginalHostRealm();
String sopmalCd = request.getParameter("sopmalCd");
//쇼핑몰 테마 등 정보 조회
Shop shopInfo = bomaSopmalService.selectSopmalInfo(sopmalCd);
model.addAttribute("redirectUri", redirectUri);
model.addAttribute("accessUrl", accessUrl);
model.addAttribute("sopmalCd", sopmalCd);
model.addAttribute("realm", RealmContextHolder.getRealm().toLowerCase());
model.addAttribute("shopInfo", shopInfo);
//디바이스 타입에 따라 조절
return "MO".equals(request.getAttribute("env"))?"login/login-MNGRM":"login/login-MNGR";
}
@Policy(value = AuthPolicy.PUBLIC)
@RequestMapping("/tokens/refresh")
public void refreshToken(HttpServletRequest request, HttpServletResponse response) throws IOException {
String realm = RealmContextHolder.getRealm().toLowerCase();
String refreshToken = CookieUtils.getCookieValue("RFT", request);
log.debug("refreshTokenValue :: {}", refreshToken);
//리프레쉬 토큰이 없으면 메인으로 이동 처리
if(!StringUtils.hasText(refreshToken)){
//엑세스토큰 삭제
CookieUtils.deleteCookie("ACT","/"+realm, request, response);
CookieUtils.deleteCookie("token_expire","/"+realm, request, response);
response.sendRedirect("/"+realm);
}
//리프레쉬 토큰 있을 경우(존재한다는 자체가 refresh토큰이 만료된 상태가 아님)
service.createRenewLoginToken(request, response);
String redirectUri = "/"+realm+"/main";
//리다이렉트 url 있을 경우 해당 url로 이동
if(StringUtils.hasText(request.getParameter("redirect_uri"))){
redirectUri = request.getParameter("redirect_uri");
}
response.sendRedirect(redirectUri);
}
/**
* 로그인 2차 인증
* @return
*/
@ResponseBody
@Policy(value = AuthPolicy.PUBLIC)
@PostMapping(value = "/login/loginCheck", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> loginCheck(@RequestBody LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
BOJobUserVO vo = new BOJobUserVO();
vo.setMngrId(loginRequest.getUsername());
vo.setPassword(loginRequest.getPassword());
String secretKey = commonService.selectSecretkey();
vo.setSecretKey(secretKey);
//회원정보 조회
DataMap result = service.selectBOJobUserCrtfcInfo(loginRequest, vo);
Map<String, Object> content = new HashMap<>();
content.put("result", result);
if(result != null){
String lmttIp = (String) result.get("lmttIp");
String mblphonCrtfcAt = (String) result.get("mblphonCrtfcAt");
String mngrNm = (String) result.get("mngrNm");
String mbtlnb = (String) result.get("mbtlnb");
String lmttIpAt = "N";
// String clientIp = String.valueOf(request.getAttribute("LoggingClientIp"));
String clientIp = request.getHeader("X-Forwarded-For");
log.debug("clientIp X-Forwarded-For {}", clientIp);
if (clientIp != null && clientIp.contains(",")) {
clientIp = clientIp.split(",")[0].trim();
log.debug("clientIp split {}", clientIp);
}
if (clientIp == null || clientIp.isEmpty()) {
clientIp = request.getRemoteAddr();
log.debug("clientIp getRemoteAddr: {}", clientIp);
}
log.debug("whitelist Ips {}", lmttIp);
if (lmttIp != null && !lmttIp.isEmpty()) {
for (String lmttIpOne : lmttIp.split("\\|")) {
if(lmttIpOne.trim().equals(clientIp)) {
lmttIpAt = "Y";
}
log.debug("whitelist Ip {}", lmttIpOne);
}
} else {
lmttIpAt = "Y";
}
content.put("lmttIpAt", lmttIpAt);
// 2차인증 여부
if (mblphonCrtfcAt.equals("Y")) {
content.put("mngrNm", mngrNm);
content.put("mbtlnb", mbtlnb);
}
content.put("mblphonCrtfcAt", mblphonCrtfcAt);
} else{
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 휴대폰 인증번호 생성
* @return ResponseEntity<?>
*/
@ResponseBody
@Policy(value = AuthPolicy.PUBLIC)
@RequestMapping(value = "/login/insertPhoneAuth", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> insertPhoneAuth(@RequestBody LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
BOMbrVO vo = new BOMbrVO();
vo.setMbrNm(loginRequest.getUsername());
vo.setMbtlnb(loginRequest.getMbtlnb());
vo.setSopmalCd(loginRequest.getSopmalCd());
int random = (int) (Math.random() * 900000) + 100000;
vo.setCrtnb(String.format("%06d", random));
DataMap content = new DataMap();
content = mbrService.insertBOPhoneAuth(vo);
/** 자동발송 데이터 세팅 */
Map<String, Object> sopmalInfoMap = new HashMap<>();
BOMaSopmalVO sopmalVo = new BOMaSopmalVO();
sopmalVo.setSopmalCd(vo.getSopmalCd());
sopmalInfoMap = maSopmalService.selectBOSopmalFooterInfo(sopmalVo);
DataMap sopmalInfo = (DataMap) sopmalInfoMap.get("sopmalInfo");
/** 개인 인증 자동발송 */
if (content.get("result").equals("success")) {
// boolean integrated = sopmalVo.getSopmalCd().equals("IS");
DataMap paramMap = new DataMap();
// 공통 필수입력 항목
// if(!integrated) {
//쇼핑몰 관리자
paramMap.put("formDvCd", "FORM_DV_MBR");
paramMap.put("formDtlDvCd", "05");
// }else {
// //통합몰 관리자, 통합관리자
// paramMap.put("messageCn", "관리자/통합관리자 본인확인 인증번호 [{authnum}]");
// }
paramMap.put("sopmalCd", vo.getSopmalCd());
paramMap.put("mbrInnb", vo.getMbrInnb());//비회원 = NULL
paramMap.put("recpntNm", vo.getMbrNm());
paramMap.put("recptnNb", vo.getMbtlnb());
// SMS
paramMap.put("shopName", sopmalInfo.get("sopmalNm"));
paramMap.put("authnum", vo.getCrtnb());
boMssageService.insertBOAtmcsndng(paramMap);
}
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
/**
* 휴대폰 인증
* @return ResponseEntity<?>
*/
@ResponseBody
@Policy(value = AuthPolicy.PUBLIC)
@RequestMapping(value = "/login/selectPhoneAuth", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> selectPhoneAuth(@RequestBody LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
BOMbrVO vo = new BOMbrVO();
vo.setSndngInnb(loginRequest.getSndngInnb());
vo.setMbtlnb(loginRequest.getMbtlnb());
vo.setCrtnb(loginRequest.getCrtnb());
DataMap content = new DataMap();
content = mbrService.selectBOPhoneAuth(vo);
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
}

View File

@@ -0,0 +1,143 @@
package com.wb.domainserver.domain.mngr.main.controller;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.gcone.main.service.BOMainService;
import com.wb.domainserver.realm.RealmContextHolder;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
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.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.util.UriUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping(value="/mngr")
public class MngrMainController {
@Autowired
private BOMainService service;
@Autowired
private BOMaSopmalService maSopmalService;
@Policy(AuthPolicy.PUBLIC)
@GetMapping(value="")
@ResponseBody
public void selectMngrRootInqire(HttpServletRequest request, HttpServletResponse response) throws IOException {
String realm = RealmContextHolder.getRealm().toLowerCase();
String redirectUri = request.getParameter("redirect_uri");
String sopmalCd = RealmContextHolder.getSopmalCdRealm();
response.sendRedirect("/"+realm+"/login/page/"+realm+"?redirect_uri=%s&sopmalCd=%s".formatted(UriUtils.encode(redirectUri, StandardCharsets.UTF_8), UriUtils.encode(sopmalCd, StandardCharsets.UTF_8)));
}
/**
* 관리자 index 화면
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/main")
public String selectMngrMainInqire(ModelMap model, HttpServletRequest request) {
// 응답 메세지 객체
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
DataMap vo = new DataMap();
vo.put("sopmalCd", user.getSopmalCd());
Map<String, Object> content = service.selectBOMngrMainInqire(vo);
model.addAttribute("resultMap", content);
return "mngr/index";
}
/**
* 관리자 index 화면 차트1 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMngrMainChart1Inqire")
public ResponseEntity<WnbtResponse> selectMngrMainChart1Inqire() {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
DataMap vo = new DataMap();
vo.put("sopmalCd", user.getSopmalCd());
// 응답 메세지 객체
List<DataMap> content = service.selectBOMngrMainChart1Inqire(vo);
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
/**
* 관리자 index 화면 차트2 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMngrMainChart2Inqire")
public ResponseEntity<WnbtResponse> selectMngrMainChart2Inqire(DataMap vo) {
// 응답 메세지 객체
List<DataMap> content = service.selectBOMngrMainChart2Inqire(vo);
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
/**
* 쇼핑몰 url 정보 조회
* @return map
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/getPcUrl")
@ResponseBody
public ResponseEntity<WnbtResponse> getPcUrl(BOMaSopmalVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
/*쇼핑몰 상세 조회 */
List<DataMap> sopmalInfoList = new ArrayList<>();
sopmalInfoList = maSopmalService.selectBOSopmalUpdtForm(vo);
DataMap sopmalInfo = new DataMap();
/*map형태로 추출*/
if (!CollectionUtils.isEmpty(sopmalInfoList)) {
sopmalInfo = sopmalInfoList.get(0);
}
DataMap content = new DataMap();
content.put("sopmalInfo", sopmalInfo);
return ResponseEntity.ok(
WnbtResponse.builder()
.resBody(new WnbtResponseBody(content))
.build()
);
}
}

View File

@@ -0,0 +1,38 @@
package com.wb.domainserver.domain.mngr.main.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MainVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 결제 금액 */
private BigDecimal setleAmt;
/** 환불 금액 */
private BigDecimal refundAmt;
/** 유입수 */
private BigInteger inflowCnt;
/** 결제수 */
private BigInteger setleCnt;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 검색조건 일, 주, 월 */
private String unitFlag;
/** 검색조건 시작일 */
private String srchStrtSndngDt;
/** 검색조건 종료일 */
private String srchEndSndngDt;
/** 검색조건 주문환경 코드 */
private List<String> srchOrdrEnvrnCds;
}

View File

@@ -0,0 +1,70 @@
package com.wb.domainserver.domain.mngr.matchmb.controller;
import com.wb.domainserver.domain.mngr.analytics.vo.AnalyticsErpGoodsSrchVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
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.Map;
@Controller
@RequestMapping(value = "/mngr/matchMember")
@Slf4j
public class MatchMemberController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 회원 매칭 화면
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value ="/view/match-member")
public String matchMember (AnalyticsErpGoodsSrchVO vo , ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
log.debug("matchMember()");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/match/view/match-member", vo),
model,
"resultMap"
);
return "mngr/match/MatchMember";
}
/**
* ERP 세트상품 리스트
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/select/match-member", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> selectMatchMember(@RequestBody Map<String,Object> jsonData){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/match/select/match-member", jsonData),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,15 @@
package com.wb.domainserver.domain.mngr.matchmb.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MatchMemberVO extends AbstractVO {
private static final long serialVersionUID = 1L;
private String sopmalCd;
}

View File

@@ -0,0 +1,276 @@
package com.wb.domainserver.domain.mngr.mbr.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.mbr.vo.*;
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.util.Util;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.Map;
/**
* 회원 Controller
*
* @author 김혜인
* @since 2024-01-15
* @version 1.0
* @see
*
* <pre>
* == (Modification debugrmation) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-01-15 김혜인 최초 생성
*
* </pre>
*/
@Controller
@RequestMapping("/mngr/mbr")
@Slf4j
public class MngrMbrController {
/**
* WebClient 호출을 위한 wrapper
*/
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 회원 목록 검색 폼 조회
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMbrListInqireForm")
public String selectMbrListInqireForm(ModelMap model, MbrSrchVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
//페이징값 가져오기
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mbr/selectBOMbrListInqireForm", vo),
model,
"resultMap"
);
return "mngr/mbr/MbrListInqireRForm";
}
/**
* 회원 목록 조회
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value= "/selectMbrListInqire" , method = RequestMethod.POST)
public String selectMbrListInqire(ModelMap model,MbrSrchVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
//BO 회원 목록조회 API 결과를 Map으로 변환하여 설정
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrListInqire", vo),
model,
"resultListMap"
);
model.addAttribute("vo",vo);
return "mngr/mbr/MbrListInqireR";
}
/**
* 리셀러 등록
* @param vo
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping(value="/updateMbrRslrMvmn")
public ResponseEntity<WnbtResponse> updateMbrRslrMvmn (@Validated MbrAppnVO vo, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//BO API 호출 => 리셀러 등록
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrRslr", vo),
ReplyFromResrc::getReply
);
}
/**
* 회원 탈퇴
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping(value="/updateMbrSecsnUpdt")
public ResponseEntity<WnbtResponse> updateMbrSecsnUpdt (@Validated WithdrawalVO vo,BindingResult bindingResult, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd){
//validation 체크
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//ip주소 get
Map<String,String> requestInfo = Util.getRequestInfo(request);
String ip = (String) requestInfo.get("XForwardedFor");
//쇼핑몰 코드 추가
vo.setSopmalCd(authSopmalCd);
//BO API 호출 => 리셀러 등록
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrSecsn", vo),
ReplyFromResrc::getReply
);
}
/**
* 마일리지 목록 검색 폼
* @param mlgSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMlgManagePopupForm")
public String selectMlgManagePopupForm(ModelMap model,MlgSrchVO mlgSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd){
//BO 회원 목록조회 API 결과를 Map으로 변환하여 설정
model.addAttribute("vo",mlgSrchVO);
return "mngr/mbr/MlgManagePopupCForm";
}
/**
* 마일리지 목록 조회
* @param mlgSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMlgManagePopup")
public String selectMlgManagePopup(ModelMap model,MlgSrchVO mlgSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd){
mlgSrchVO.setSopmalCd(authSopmalCd);
//BO 회원 목록조회 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mlg/selectBOMlgManagePopupForm", mlgSrchVO),
model,
"resultListMap"
);
return "mngr/mbr/MlgManagePopupR";
}
/**
* 회원 팝업 폼
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMbrSrchPopupRForm")
public String selectMbrSrchPopupRForm(ModelMap model, MbrSrchVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setPopDv("Y");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mbr/selectBOMbrListInqireForm", vo),
model,
"resultMap"
);
return "mngr/mbr/MbrSrchPopupRForm";
}
/**
* 회원 팝업 리스트 조회
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMbrSrchPopupRInqire")
public String selectMbrSrchPopupRInqire(ModelMap model, MbrSrchVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
//BO 회원 목록조회 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mbr/selectBOMbrListInqire", vo),
model,
"resultListMap"
);
model.addAttribute("vo",vo);
return "mngr/mbr/MbrSrchPopupR";
}
/**
* 발송 타겟 회원 조회(검색회원적용)
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectSndngTargtMbr")
public ResponseEntity<WnbtResponse> selectSndngTargtMbr(MbrSrchVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
/*검색어에 해당하는 회원 조회*/
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mbr/selectBOSndngTargtMbr", vo),
ReplyFromResrc::getReply
);
}
/**
* 회원 핸드폰번호, 이메일 정보 조회
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectSndngTargtMbrInfo")
public ResponseEntity<WnbtResponse> selectSndngTargtMbrInfo(MbrVO vo){
/*검색어에 해당하는 회원 조회*/
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mbr/selectBOSimpleMbrInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 마케팅 대상 팝업 폼
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMarketingTrgetSrchPopupForm")
public String selectMarketingTrgetSrchPopupForm(ModelMap model, MbrSrchVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setPopDv("Y");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mbr/selectBOMarketingTrgetSrchPopupForm", vo),
model,
"resultMap"
);
model.addAttribute("vo",vo);
return "mngr/mbr/MarketingTrgetSrchPopupRForm";
}
/**
* 마케팅 대상 팝업 리스트 조회
* @param vo
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMarketingTrgetSrchPopupInqire")
public ResponseEntity<WnbtResponse> selectMarketingTrgetSrchPopupInqire(MarktMbrSrchVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
/*검색어에 해당하는 회원 조회*/
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMarktTrgetCnt", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,85 @@
package com.wb.domainserver.domain.mngr.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MarktMbrSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**등급*/
private String srchGrad;
/**비회원 포함*/
private String nmbr;
/**가입일 시작*/
private String srchStrtRegistDt;
/**가입일 종료*/
private String srchEndRegistDt;
/**최종 로그인 일시 시작*/
private String srchStrtLastLoginDt;
/**최종 로그인 일시 종료*/
private String srchEndLastLoginDt;
/**생년 시작*/
private String srchStrtBrthYear;
/**생년 종료*/
private String srchEndBrthYear;
/**생월 시작*/
private String srchStrtBrthMonth;
/**생월 종료*/
private String srchEndBrthMonth;
/*마케팅 동의 여부*/
private String srchMarktRecptnAgreAt;
/**성별*/
private String srchSex;
/**080 수신 거부*/
private String deny;
/**블랙리스트*/
private String black;
/**매장회원*/
private String pos;
/**기존발송대상 체크*/
private String lgqySndngInnbChk;
/**대량메세지 발송 번호*/
private String lgqySndngInnbInput;
/**마일리지 시작*/
private String srchStrtMlg;
/**마일리지 종료*/
private String srchEndMlg;
/**장바구니 제품*/
private String srchCartGoodsInnbs;
/*구매 기준 검색 여부*/
private String stdrPurchsAt;
/**구매기간 기준 시작*/
private String stdrStrtPurchsPd;
/**구매기간 기준 종료*/
private String stdrEndPurchsPd;
/**기준 상품번호*/
private String stdrGoodsInnb;
/**기준 구매금액 시작*/
private String stdrStrtPurchsAmt;
/**기준 구매금액 종료*/
private String stdrEndPurchsAmt;
/**기준 구매건 시작*/
private String stdrStrtPurchsCnt;
/**기준 구매건 종료*/
private String stdrEndPurchsCnt;
/**구매기간 비교 시작*/
private String cmprStrtPurchsPd;
/**구매기간 비교 종료*/
private String cmprEndPurchsPd;
/**비교 상품번호*/
private String cmprGoodsInnb;
/**비교 구매금액 시작*/
private String cmprStrtPurchsAmt;
/**비교 구매금액 종료*/
private String cmprEndPurchsAmt;
/**비교 구매건 시작*/
private String cmprStrtPurchsCnt;
/**비교 구매건 종료*/
private String cmprEndPurchsCnt;
/**쇼핑몰코드*/
private String sopmalCd;
}

View File

@@ -0,0 +1,62 @@
package com.wb.domainserver.domain.mngr.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MbrAppnVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/*지정 이력 고유번호*/
private String appnLogInnb ;
/**
* 지정 고유번호
*/
private String appnInnb;
/**
* 지정 고유번호 배열
*/
private List<String> appnInnbArr;
/**
* 쇼핑몰 코드
*/
private String sopmalCd;
/**
* 리셀러 구분
*/
private String appnDvCd;
/**
* 식별기준코드
*/
private String idntfcStdrCd;
/**
* 식별정보 배열
*/
private List<String> idntfcInfoArr;
/**
* 식별정보
*/
private String idntfcInfo;
/**
* 회원 구분 코드
*/
private String mbrDvCd;
/*회원 구분 코드 리스트*/
private List<String> mbrDvCdArr;
/**
* 주문번호
*/
private String ordrInnb;
/*메모*/
@NotBlank(message = "사유")
@Length(min = 1 , max = 1333)
private String appnMemo;
/*출처 구분 코드*/
private String originDvCd;
}

View File

@@ -0,0 +1,181 @@
package com.wb.domainserver.domain.mngr.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MbrSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어 구분*/
private String srchKywordDv;
/**검색어 키워드*/
private String srchKyword;
/*검색어 이름*/
private String srchMbrNm;
/*검색어 아이디*/
private String srchKywordID;
/*검색어 이메일*/
private String srchKywordEmail;
/*검색어 휴대폰번호*/
private String srchKywordMb;
/**정렬 방식*/
private String sortDv;
/**쇼핑몰코드*/
private String sopmalCd;
/*회원 구분 코드*/
private String srchMbrDvCd;
/*팝업 리스트 구분*/
private String popDv;
/*검색 주체가 email인지 sms인지 구분*/
private String actionDv;
// 마케팅 회원 검색
/** 회원 구분 ( 회원, 비회원, 매장회원 ) */
private String srchMbrDv;
/** 성별 */
private String[] srchSex;
/** 블랙리스트 제외 여부 */
private String srchBlackAt;
/** 생일 */
private String srchBrthDe;
/** 시작 나이 */
private String srchBgnAge;
/** 종료 나이 */
private String srchEndAge;
/** 회원 가입 경로 */
private String[] srchJoinPath;
/** 마케팅 수신 동의 */
private String[] srchMarketingAgree;
/** 가입일 _ 시작 */
private String srchStartJoinDate;
/** 가입일 _ 종료 */
private String srchEndJoinDate;
/** 최종방문일 _ 시작 */
private String srchStartLastVisitDate;
/** 최종방문일 _ 종료 */
private String srchEndLastVisitDate;
/** 주문일 _ 시작 */
private String srchStartOrderDate;
/** 주문일 _ 종료 */
private String srchEndOrderDate;
/** 리뷰 건수 _ 시작 */
private String srchBgnReviewCnt;
/** 리뷰 건수 _ 종료 */
private String srchEndReviewCnt;
/** 장바구니 포함 여부 */
private String srchCartIncludeAt;
/** 장바구니 포함 상품 */
private String srchCartGoodsInnbs;
/** 발송이력 중복 건수 */
private String srchSndngLogCnt;
/** 주문 금액 _ 시작 */
private String srchBgnOrderAmt;
/** 주문 금액 _ 종료 */
private String srchEndOrderAmt;
/** 주문 건수 _ 시작 */
private String srchBgnOrderCnt;
/** 주문 건수 _ 종료 */
private String srchEndOrderCnt;
/** 마일리지 _ 시작 */
private String srchBgnMlgAmt;
/** 마일리지 _ 종료 */
private String srchEndMlgAmt;
/** 구매 이력 여부 */
private String srchBuyDtlsAt;
/** 구매 이력 제품 */
private String srchBuyDtlsGoodsInnbs;
/** 구매 이력 구분 _ 셀렉트박스 */
private String srchButDtlsDv;
/** 재방문없음 여부 */
private String srchReVisitAt;
/** 구매없음 여부 */
private String srchBuyAt;
/** 쿠폰 발송 유형 코드 */
private String couponSndngTyCd;
/** 발송이력 중복제외 쿠폰 배열 */
private String[] cstInnbArr;
/** 상품 배열 */
private String[] goodsInnbArr;
/*마케팅 동의 팝업 읽기모드 여부*/
private String readonlyAt;
}

View File

@@ -0,0 +1,89 @@
package com.wb.domainserver.domain.mngr.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MbrVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/*쇼핑몰코드*/
public String sopmalCd;
/**발송타겟 회원 정보*/
public List<DataMap> mbrInfoArr;
/**발송타겟 구분*/
public String actionDv;
/**회원 고유번호 배열*/
public String[] mbrarr;
/**회원고유번호*/
public String mbrInnb;
/**회원 구분 코드*/
private String mbrDvCd;
/**회원등급 고유번호*/
public String mbrGradInnb;
/**유입경로번호*/
public String inflowCoursNb;
/**가입환경코드*/
public String sbscrbEnvrnCd;
/**회원유형코드*/
public String mbrTyCd;
/**회원id*/
public String mbrid;
/**회원비밀번호*/
public String mbrPassword;
/**비밀번호변경일자*/
public String passwordChngDe;
/**회원명*/
public String mbrNm;
/**이메일*/
public String email;
/**이메일수신여부*/
public String emailRecptnAt;
/**휴대폰번호*/
public String mbtlnb;
/**sms수신여부*/
public String smsRecptnAt;
/**전화번호*/
public String telnb;
/**우편번호*/
public String zip;
/**도로명, 지번*/
public String adresDv;
/**지번주소*/
public String lnbAdres;
/**도로명주소*/
public String rnmAdres;
/**상세주소*/
public String dtlAdres;
/**성별*/
public String sexdstn;
/**일자는 01로 입력*/
public String brthDe;
/**상태*/
public String sttus;
/** 관리자메모 */
private String mngrMemo;
/** 관리자로그 */
private String mngrLog;
/** 등록자 IP */
private String registIp;
/**통합서비스정보제공동의*/
public String unitySvcCnsOffrInfo;
/**년도*/
public String indvdlInfoValidPd;
/**광고수신동의변경일시*/
public String advrtsRecptnAgreUpdtDt;
/**광고수신동의전송일시*/
public String advrtsRecptnAgreTrnsmisDt;
/**gcone 가입여부*/
public String gconeSbscrbAt;
/** 관리자 확인 비밀번호 */
private String mngrPassword;
}

View File

@@ -0,0 +1,26 @@
package com.wb.domainserver.domain.mngr.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MlgSrchVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/**검색 시작 날짜 */
private String srchStrtDt;
/**검색 끝 날짜 */
private String srchEndDt ;
/**지급*/
private String srchAdd;
/**차감*/
private String srchMn;
/**회원고유번호*/
private String mbrInnb;
/**회원분류코드*/
private String mbrDvCd;
/**쇼핑몰코드*/
private String sopmalCd;
}

View File

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

View File

@@ -0,0 +1,348 @@
package com.wb.domainserver.domain.mngr.mngrstr.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.mbr.vo.MbrVO;
import com.wb.domainserver.domain.mngr.mngrstr.vo.MngrStrVO;
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.excel.ExcelDownloadUtil;
import com.wb.domainserver.util.file.service.FileStorageService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
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.ObjectUtils;
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.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Controller
@Slf4j
@RequestMapping("/mngr/mngrstr")
public class MngrStrController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
@Autowired
private KakaoProperties kakaoProperties;
@Autowired
private FileStorageService filestore;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 매장 목록 검색 화면
* @param model
* @param vo
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMngrStrListRForm")
public String selectStrListRForm(ModelMap model, MngrStrVO vo) {
// BO 매장 목록 조회 호출
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mngrstr/selectBOMngrStrListInqireForm", vo),
model,
"resultListMap"
);
// model.addAttribute("mngrStrVO", vo);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/mngrstr/StoreListRForm";
}
/**
* 매장 목록 조회
* @param model
* @param vo
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMngrStrList")
public String selectStrList(ModelMap model, MngrStrVO vo) {
// BO 매장 목록 조회 호출
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mngrstr/selectBOMngrStrListInqire", vo),
model,
"resultListMap"
);
model.addAttribute("mngrStrVO", vo);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/mngrstr/StoreListR";
}
/**
* 매장 목록 - 엑셀 다운로드
* @param vo
* @param response
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMngrStrListExcelDwld")
public void selectMngrStrListExcelDwld(MngrStrVO vo, HttpServletResponse response) {
//10000건까지 엑셀 출력
vo.setPageIndex(1);
vo.setPageUnit(10000);
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mngrstr/selectBOMngrStrListInqire", vo)
);
List<Map<String, Object>> resultMapList = new ArrayList<>();
if(resultMap != null) {
resultMapList = (List<Map<String, Object>>) resultMap.get("boCtrlMap");
}
List<Map<String, Object>> dataList = new ArrayList<>();
//엑셀 다운로드 다운로드 시간
Date date = new Date();
SimpleDateFormat excelFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String str = excelFormat.format(date);
//엑셀 항목에 출력될 내용 설정
if(resultMapList != null && !resultMapList.isEmpty()) {
for (int i = 0; i < resultMapList.size(); i++) {
Map<String, Object> row = resultMapList.get(i);
HashMap<String, Object> dataMap = new HashMap<>();
int caculateSize = calculateSize(resultMapList.size(), i);
String manageCpr = getSafeString(row, "manageCpr");
String reprsntBrand = getSafeString(row, "reprsntBrand");
String tentSttus = row.get("tentSttus") != null ? row.get("tentSttus").toString() : "";
String opbizDe = row.get("opbizDe") != null ? row.get("opbizDe").toString() : "";
String clstrDe = row.get("clstrDe") != null ? row.get("clstrDe").toString() : "";
String posCdDvVal = row.get("posCdDvVal") != null ? row.get("posCdDvVal").toString() : "";
String posCdPassivInputVal = row.get("posCdPassivInputVal") != null ? row.get("posCdPassivInputVal").toString() : "";
dataMap.put("rnum", caculateSize); //번호 역순 출력
dataMap.put("manageCpr/reprsntBrand", manageCpr+" / "+reprsntBrand);
dataMap.put("trtmntBrand", row.get("trtmntBrand"));
dataMap.put("strOperDv", row.get("strOperDv"));
dataMap.put("tentSttus", tentSttus +
(
row.get("tentSttusCd").equals("02")
? "(" + opbizDe + ")"
: row.get("tentSttusCd").equals("03")
? "(" + clstrDe + ")"
: ""
)
);
dataMap.put("posCd", posCdDvVal + posCdPassivInputVal);
dataMap.put("tentcpnId", row.get("tentcpnId"));
dataMap.put("tentcpnNm", row.get("tentcpnNm"));
dataList.add(dataMap);
}
}
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("rnum", "번호");
headerMap.put("manageCpr/reprsntBrand", "관리법인/대표브랜드");
headerMap.put("trtmntBrand", "취급브랜드");
headerMap.put("strOperDv", "매장운영구분");
headerMap.put("tentSttus", "상태");
headerMap.put("posCd", "포스코드");
headerMap.put("tentcpnId", "ID");
headerMap.put("tentcpnNm", "매장명");
try {
ExcelDownloadUtil.createExcel("mngr_str_list" + str, headerMap, dataList, response);
}catch(IOException ioe) {
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
/**
* 안전하게 계산 처리 메소드
* @param size
* @param index
* @return
*/
private int calculateSize(int size, int index) {
return size - index;
}
/**
* 안전하게 계산 처리 메소드
* @param input
* @return
*/
public String getSafeString(Map<String, Object> row, String input) {
return row.get(input) != null ? row.get(input).toString() : "";
}
/**
* 매장 상세
* @param model
* @param vo
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMngrStrDtlU")
public String selectStrDtlU(ModelMap model, MngrStrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
// BO 매장 목록 조회 호출
try {
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mngrstr/selectBOMngrStrDtlInqire", vo)
);
String kakaoKey = "";
if(resultMap.containsKey("BOMngrStrVO")){
Map<String, Object> paramVO = (Map<String, Object>) resultMap.get("BOMngrStrVO");
if(!ObjectUtils.isEmpty(paramVO.get("sopmalCd"))){
kakaoKey = kakaoProperties.getKeyForDomain(paramVO.get("sopmalCd").toString());
}
}
model.addAttribute("kakaoKey", kakaoKey);
model.addAttribute("resultMap", resultMap);
// model.addAttribute("MngrStrVO", vo);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/mngrstr/StoreDtlU";
}
/**
* 매장 아이디 중복 확인
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectIdDplctCnfirm")
public ResponseEntity<WnbtResponse> selectIdDplctCnfirm(MngrStrVO vo, BindingResult bindingResult){
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mngrstr/selectBOIdDplctCnfirm", vo),
ReplyFromResrc::getReply
);
}
/**
* 매장 상세 수정
* @param vo
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateMngrStrDtlU", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateMngrStrDtlU(@Validated MngrStrVO vo, HttpServletRequest request, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
if(vo.getChangePasswordAt().equals("Y")){
/*1 비밀번호 변경 시 현재 비밀번호 확인*/
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mngrstr/selectBOPasswordCnfirm", vo)
);
if ((int) resultMap.get("result") == 0) {
throw new WnbtRestException("관리자 비밀번호가 일치하지 않습니다");
}
/*2 비밀번호 정규 표현식 확인*/
String password = vo.getNewPassword();
String pwPattern = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*\\W)?[a-zA-Z\\d\\W]{10,20}$|^(?=.*[a-zA-Z])(?=.*\\W)(?=.*\\d)?[a-zA-Z\\W\\d]{10,20}$|^(?=.*\\d)(?=.*\\W)(?=.*[a-zA-Z])?[a-zA-Z\\d\\W]{10,20}$";
Matcher matcher = Pattern.compile(pwPattern).matcher(password);
if (!matcher.matches()) {
throw new WnbtRestException("비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 10~20자로 입력해주세요.");
}
/*3 변경 비밀번호 확인*/
if (!password.equals(vo.getNewPasswordChk())) {
throw new WnbtRestException("비밀번호가 일치하지 않습니다.");
}
}
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun", "STOR");
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mngrstr/updateBOMngrStrDtlU", vo),
ReplyFromResrc::getReply
);
}
/**
* 포스 회원가입 URL 조회
*
* @param vo
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectPosJoinMbrUrl")
public String selectPosJoinMbrUrl(MbrVO vo, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
model.addAttribute("vo",vo);
return "mngr/mngrstr/StorePosJoinMbrListRForm";
}
/**
* 포스 회원가입 URL 조회
*
* @param vo
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectPosJoinMbrUrlList")
public String selectPosJoinMbrUrlList(MbrVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
// BO 회원 목록조회 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO,"/gcone/mbr/mbr/selectBOPosJoinMbrUrl", vo)
, model
,"resultMap"
);
return "mngr/mngrstr/StorePosJoinMbrListR";
}
}

View File

@@ -0,0 +1,110 @@
package com.wb.domainserver.domain.mngr.mngrstr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MngrStrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 쇼핑몰 고유번호 */
private String strInnb;
/**
* 매장/가맹점 검색 조건
*/
/** 관리법인 */
/* GC_CODE:MANAGE_CPR */
private String manageCpr;
/** 대표브랜드 */
/* GC_CODE:REPRSNT_BRAND */
private String reprsntBrand;
/** 취급브랜드 */
/* GC_CODE-BRAND:TRTMNT_BRAND */
private List<String> trtmntBrand;
/** 매장개설구분 */
/* GC_CODE-BRAN0D:STR_ESTBL_DV */
private List<String> strEstblDvCd;
/** 매장운영구분 */
/* GC_CODE:STR_DV */
private List<String> strOperDv;
/** 상태 */
/* GC_CODE:TENT_STTUS */
private List<String> tentSttus;
/** 포스코드-구분값 */
/* GC_CODE:POS_HDQRTRS */
private String posCdDvVal;
/** 포스코드-수동입력값 */
private String posCdPassivInputVal;
/** 매장명 */
private String tentcpnNm;
/** 정렬 기준 */
private String sortDv;
/**
* 상세보기(수정)
*/
/** 사이트 노출여부 */
private String siteExpsrAt;
/** 폐점시 로그인 및 SMS발송 사용여부 */
private String awLoginAt;
/** 아이디 변경여부 */
private String changeIdAt;
/** 입점사 아이디 */
private String tentcpnId;
/** 비밀번호 변경여부 */
private String changePasswordAt;
/** 기존 비밀번호 */
private String tentcpnPassword;
/** 신규 비밀번호 */
private String newPassword;
/** 신규 비밀번호 확인 */
private String newPasswordChk;
/** 문자 발신번호 */
private String chrDsptchNb;
/** 휴무일 */
private String hvofDe;
/** 휴무일 추가 */
private String hvofDeAdit;
/** 영업시간 */
/* 구분자(|) 영업시간
* 구분자(/) 영업시간 추가 */
private String bsnTme;
/** 매장 대표이미지 */
private String strReprsntImg;
/** 매장 상세이미지 */
/* 구분자(|) */
private String strDtlImg;
/** 파일 정보 */
private List<HashMap<String, Object>> fileInfo;
}

View File

@@ -0,0 +1,292 @@
package com.wb.domainserver.domain.mngr.ntcn.atmcsndng.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.ntcn.email.vo.MaEmailSrchVO;
import com.wb.domainserver.domain.mngr.ntcn.atmcsndng.vo.AtmcSndngVO;
import com.wb.domainserver.domain.mngr.ntcn.mssage.vo.MssageSrchVO;
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 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.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 자동 발송 관리 Controller
*
* @author rvg
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-04 리브가 최초 생성
* 2024-05-01 이대환 내용 수정
*
* </pre>
* @since 2024-03-04
*/
@Slf4j
@Controller
@RequestMapping("/mngr/ntcn/atmcsndng")
public class AtmcSndngController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 자동 발송 관리 페이지
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAtmcSndngManage")
public String selectAtmcSndngManage() {
return "mngr/ntcn/atmcsndng/AtmcSndngManage";
}
/**
* 자동 발송 관리 > 자동 발송 관리 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAtmcSndngManageListInqire")
public String selectAtmcSndngManageListInqire(AtmcSndngVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
try {
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/atmcsnd/selectBOAtmcSndngManageListInqire", vo)
);
// model.addAttribute("resultMap", resultMap.get("boCtrlMap"));
model.addAttribute("resultListMap", resultMap.get("boCtrlMap"));
model.addAttribute("bOAtmcSndngVO",resultMap.get("bOAtmcSndngVO"));
model.addAttribute("shopAtmcSndntTme", resultMap.get("shopAtmcSndntTme"));
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/atmcsndng/AtmcSndngListR";
}
/**
* 자동 발송 관리 페이지 > 자동 발송 관리 - 자동 발송 관리 수정
* @param vo
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateAtmcSndngManageUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateAtmcSndngManageUpdt(@Validated AtmcSndngVO atmcSndngVO, BindingResult bindingResult
, @CookieValue(value = "authSopmalCd") String authSopmalCd){
atmcSndngVO.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/atmcsnd/updateBOAtmcSndngManageUpdt", atmcSndngVO),
ReplyFromResrc::getReply
);
}
/**
* 자동 발송 관리 > 메시지 발송 내역 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageAtmcSndngListInqireRForm")
public String selectMssageAtmcSndngListInqireRForm() {
return "mngr/ntcn/atmcsndng/MssageAtmcSndngListRForm";
}
/**
* 자동 발송 관리 > 메시지 발송 내역 - 리스트 조회
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageAtmcSndngListInqire")
public String selectMssageAtmcSndngListInqire(ModelMap model, MssageSrchVO mssageSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
if(mssageSrchVO.getSrchDv() == null) {
List<String> srchDvList = new ArrayList<>();
srchDvList.add("SMS");
srchDvList.add("LMS");
mssageSrchVO.setSrchDv(srchDvList);
}
mssageSrchVO.setSopmalCd(authSopmalCd);
// BO 이메일 발송 내역 조회 호출
try {
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/atmcsnd/selectBOSmsSndngListInqire",mssageSrchVO)
);
//BO 이메일 발송내 목록 조회 API 결과를 Map으로 변환하여 설정
model.addAttribute("resultListMap", resultMap);
model.addAttribute("mssageSrchVO",mssageSrchVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/atmcsndng/MssageAtmcSndngListR";
}
/**
* 자동 발송 관리 > 메시지 발송 내역 - 문자 발송 정보 팝업
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageAtmcSndngDtlPopup")
public String selectMssageAtmcSndngDtlPopup(MssageSrchVO mssageSrchVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
mssageSrchVO.setSopmalCd(authSopmalCd);
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/atmcsnd/selectBOSmsSndngDtlInfo", mssageSrchVO)
);
model.addAttribute("resultMap", resultMap);
return "mngr/ntcn/atmcsndng/MssageAtmcSndngDtlPopupR";
}
/**
* 자동 발송 관리 > 이메일 발송 내역 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectEmailAtmcSndngListInqireRForm")
public String selectEmailAtmcSndngListInqireRForm(){
return "mngr/ntcn/atmcsndng/EmailAtmcSndngListRForm";
}
/**
* 자동 발송 관리 > 이메일 발송 내역 - 리스트 조회
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectEmailAtmcSndngListInqire")
public String selectEmailAtmcSndngListInqire(ModelMap model, MaEmailSrchVO maEmailSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
//TODO : 각 쇼핑몰 화면에서 파라미터 가져와야 함
maEmailSrchVO.setAtmcAt("Y");
maEmailSrchVO.setSrchShop(authSopmalCd);
// BO 이메일 발송 내역 조회 호출
try {
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngListInqire", maEmailSrchVO)
);
//BO 이메일 발송내 목록 조회 API 결과를 Map으로 변환하여 설정
model.addAttribute("resultListMap", resultMap);
model.addAttribute("emailSrchVO",maEmailSrchVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/atmcsndng/EmailAtmcSndngListR";
}
/**
* 자동 발송 관리 > 알림톡 발송 내역 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectNtcntalkAtmcSndngListInqireRForm")
public String selectNtcntalkAtmcSndngListInqireRForm() {
return "mngr/ntcn/atmcsndng/NtcntalkAtmcSndngListRForm";
}
/**
* 자동 발송 관리 > 알림톡 발송 내역 - 리스트 조회
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectNtcntalkAtmcSndngListInqire")
public String selectNtcntalkAtmcSndngListInqire(ModelMap model, MssageSrchVO mssageSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
List<String> srchDvList = new ArrayList<>();
srchDvList.add("AT");
srchDvList.add("AI");
mssageSrchVO.setSopmalCd(authSopmalCd);
mssageSrchVO.setSrchDv(srchDvList);
if(mssageSrchVO.getSrchStrtSndngDt().equals("") && mssageSrchVO.getSrchEndSndngDt().equals("") ) {
LocalDate today = LocalDate.now();
if(today != null) {
LocalDate ago3M = today.minusMonths(3);
mssageSrchVO.setSrchDtDv("sndngDt");
if(ago3M != null) {
mssageSrchVO.setSrchStrtSndngDt(ago3M.toString());
mssageSrchVO.setSrchEndSndngDt(today.toString());
}
}
}
// BO 이메일 발송 내역 조회 호출
try {
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/atmcsnd/selectBONtcntalkAtmcSndngListInqire", mssageSrchVO)
);
//BO 이메일 발송내 목록 조회 API 결과를 Map으로 변환하여 설정
model.addAttribute("resultListMap", resultMap);
model.addAttribute("mssageSrchVO",mssageSrchVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/atmcsndng/NtcntalkAtmcSndngListR";
}
}

View File

@@ -0,0 +1,57 @@
package com.wb.domainserver.domain.mngr.ntcn.atmcsndng.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class AtmcSndngVO extends AbstractVO {
/** 메시지 고유번호 */
private String messageInnb;
/** 이메일 발송양식 고유번호 */
private String emailSndngFormInnb;
/** SMS발송양식 고유번호 */
private String smsSndngFormInnb;
/** 알림톡 발송양식 고유번호 */
private String ntcntalkSndngFormInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 양식구분 */
private String formDvCd;
/** 양식상세구분 */
private String formDtlDvCd;
/** 이메일 사용여부 */
private String emailUseAt;
/** SMS 사용여부 */
private String smsUseAt;
/** 알림톡 사용여부 */
private String ntcntalkUseAt;
/** 마케팅 여부 */
private String marktAt;
/** 관리자 구분 */
private String mngrDv;
/** 노출여부 */
private String expsrAt;
/** 발송기준일자 */
private String sndngStdrDe;
/** 발송기준시간 */
private String sndngStdrTme;
/** 수집기간 */
private String colctPd;
/** 충족기준 */
private String suffcnStdr;
/** 중복발송가능여부 */
private String dplctSndngAt;
/** 발송일 설명 */
private String sndngDc;
/** 자동발송 정보 목록 */
private String atmcSndngList;
}

View File

@@ -0,0 +1,319 @@
package com.wb.domainserver.domain.mngr.ntcn.email.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.ntcn.email.vo.MaEmailSrchVO;
import com.wb.domainserver.domain.mngr.mbr.vo.MbrSrchVO;
import com.wb.domainserver.domain.mngr.mbr.vo.MbrVO;
import com.wb.domainserver.domain.mngr.ntcn.email.vo.EmailVO;
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.file.service.FileStorageService;
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 org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.util.WebUtils;
import java.io.IOException;
import java.util.*;
/**
* 발송관리 Controller
*
* @author rvg
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-20 리브가 최초 생성
* 2024-04-04 이대환 sndng>email 분리 - 이메일 수동 발송 리스트 조회
*
* </pre>
* @since 2024-02-20
*/
@Slf4j
@Controller
@RequestMapping("/mngr/ntcn/email")
public class EmailController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private FileStorageService filestore;
/*****************************************************
이메일 발송 관리 START
*****************************************************/
/**
* 이메일 발송 관리 페이지(폼)
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectEmailPassivSndngManage")
public String selectEmailPassivSndngManage(){
return "mngr/ntcn/email/EmailPassivSndngManage";
}
/**
* 이메일 발송 관리 > 이메일 수동 발송 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectEmailPassivSndng")
public String selectEmailPassivSndng(ModelMap model, MaEmailSrchVO maEmailSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd){
maEmailSrchVO.setAtmcAt("N");
maEmailSrchVO.setSrchShop(authSopmalCd);
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngListInqire", maEmailSrchVO),
model,
"resultListMap"
);
model.addAttribute("emailSrchVO", maEmailSrchVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/email/EmailPassivSndngC";
}
/**
* 이메일 발송 관리 > 이메일 수동 발송 - 최근 이메일 불러오기
* @param maEmailSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectEmailSndngDtl")
@ResponseBody
public Map<String, Object> selectEmailSndngDtl(MaEmailSrchVO maEmailSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
maEmailSrchVO.setSrchShop(authSopmalCd);
//BO에서 API 호출(이메일 발송내 목록 조회)
// model.addAttribute("resultMapDtl", BoResultMapConverter.convert(new ObjectMapper(), reply.getReply()));
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngDtlInfo", maEmailSrchVO)
);
return resultMap;
}
/**
* 회원 팝업 폼
* @param mbrSrchVO
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMbrSrchPopupRForm")
public String selectMbrSrchPopupRForm(ModelMap model, MbrSrchVO mbrSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrSrchVO.setSopmalCd(authSopmalCd);
mbrSrchVO.setPopDv("Y");
//페이징값 가져오기
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrListInqireForm", mbrSrchVO),
model,
"resultMap"
);
return "mngr/ntcn/email/EmailMbrSrchPopupRForm";
}
/**
* 이메일 이미지 첨부 팝업
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/EmailPassivSndngEditorImage")
public String EmailPassivSndngEditorImage(){
return "mngr/ntcn/email/EmailPassivSndngEditorImage";
}
/**
* 이메일 발송 관리 > 이메일 수동 발송 - 이미지 등록
* @param vo
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertEmailImage", method = RequestMethod.POST)
public ResponseEntity<?> insertEmailImage(HttpServletRequest request, EmailVO vo, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun", "ETCM");
try {
ulpladFileMap = filestore.fileUpload(request);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
//파일정보 셋팅
MultipartHttpServletRequest mptRequest = WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
List<MultipartFile> fileList = mptRequest.getFiles("files");
List<HashMap<String, String>> fileInfoList = new ArrayList<>();
for(int i=0; i<ulpladFileMap.size();i++) {
HashMap<String, Object> fileData = ulpladFileMap.get(i);
HashMap<String, String> fileInfo = new HashMap<>();
fileInfo.put("filePath", fileData.get("filePath").toString());
fileInfo.put("fileId", fileData.get("fileId").toString());
fileInfo.put("fileName", fileData.get("fileName").toString());
fileInfo.put("fileSize", fileData.get("fileSize").toString());
try {
byte[] bytes = fileList.get(i).getBytes();
String base64String = Base64.getEncoder().encodeToString(bytes);
fileInfo.put("base64Image", base64String);
} catch (IOException e) {
log.error(e.getMessage(), e);
}
fileInfoList.add(fileInfo);
}
return ResponseEntity.ok(fileInfoList);
}
/**
* 이메일 발송 관리 > 이메일 수동 발송 - 등록
* @param vo
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertEmailSndng", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertEmailSndng(@Validated EmailVO vo, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/email/insertBOEmailSndng", vo),
ReplyFromResrc::getReply
);
}
/**
* 이메일 발송 관리 > 이메일 수동 발송 내역 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectEmailPassivSndngListInqireRForm")
public String selectEmailPassivSndngListInqireRForm(){
return "mngr/ntcn/email/EmailPassivSndngListInqireRForm";
}
/**
* 이메일 발송 관리 > 이메일 수동 발송 내역 > 리스트 조회
* @param model
* @param maEmailSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectEmailPassivSndngListInqire")
public String selectEmailPassivSndngListInqire(ModelMap model, MaEmailSrchVO maEmailSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
maEmailSrchVO.setAtmcAt("N");
maEmailSrchVO.setSrchShop(authSopmalCd);
// BO 이메일 발송 내역 조회 호출
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngListInqire", maEmailSrchVO),
model,
"resultListMap"
);
model.addAttribute("emailSrchVO", maEmailSrchVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/email/EmailPassivSndngListInqireR";
}
/*****************************************************
이메일 발송 관리 END
*****************************************************/
/**
* 이메일 발송 팝업 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectEmailSndngPopupForm")
public String selectEmailSndngPopupForm(ModelMap model, MaEmailSrchVO maEmailSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd){
maEmailSrchVO.setSrchShop(authSopmalCd);
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngListInqire", maEmailSrchVO),
model,
"resultListMap"
);
model.addAttribute("emailSrchVO", maEmailSrchVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/email/EmailSndngPopupC";
}
/**
* 이메일 수신 거부 URL
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateMarktRecptnArgeAt")
public ResponseEntity<WnbtResponse> updateMarktRecptnArgeAt(MbrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setEmailRecptnAt("N");
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/email/updateBoMarktRecptnArgeAt", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,28 @@
package com.wb.domainserver.domain.mngr.ntcn.email.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class EmailSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어타입*/
public String srchType;
/**검색어*/
public String srchStr;
/**쇼핑몰코드*/
private String srchShop;
/**자동발송여부*/
private String atmcAt;
/**검색 시작 발송 날짜 */
private String srchStrtSndngDt;
/**검색 종료 발송 날짜 */
private String srchEndSndngDt ;
/**이메일 발송로그 고유번호*/
private String emailLogInnb ;
}

View File

@@ -0,0 +1,65 @@
package com.wb.domainserver.domain.mngr.ntcn.email.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class EmailVO extends AbstractVO {
/** 이메일 발송 고유번호 */
private Integer emailSndngInnb;
/**
* FM_EMAIL 이메일 발송내역
*/
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 발송위치 */
private String sndngLc;
/** 제목 */
@NotEmpty(message = "이메일제목")
private String sj;
/** 내용 */
@NotEmpty(message = "이메일내용")
private String cn;
/** 보내는사람 EMAIL */
@NotEmpty(message = "발신자")
private String sndrEmail;
/** 수신거부URL */
private String recptnRjctUrl;
/** 등록자구분 (01:회원, 02:관리자, 03:시스템, 04:기타) */
private String regusrDv;
/** 이메일 발송양식 고유번호 */
private Integer emailSndngFormInnb;
/**
* FM_EMAIL_TO 이메일 대상
*/
/** 대상순번 */
private Integer trgetSnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 받는사람 EMAIL */
private String recpntEmail;
/** 받는사람명 */
private String recpntNm;
/** 상태(REG:등록, BAD:불량, WAIT:대기, SEND:전송, FAIL:실패, OK:성공) */
private String sttus;
/** 발송일시 */
private Date sndngDt;
/** 결과코드(1000 또는 101 : 성공, 그 외 API 참조) */
private String rsltCd;
/**
* 회원 검색 팝업
*/
/** 검색 회원 정보 JSON */
private String mbrInfo;
/** 검색 회원 명 수 */
// private String sndngCnt;
}

View File

@@ -0,0 +1,378 @@
package com.wb.domainserver.domain.mngr.ntcn.lgqymssage.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.ntcn.lgqymssage.vo.LgqyMssageSrchVO;
import com.wb.domainserver.domain.mngr.ntcn.lgqymssage.vo.LgqyMssageVO;
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 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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* SMS Controller
*
* @author 이운산
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-04-03 이운산 최초 생성
*
* </pre>
* @since 2024-04-03
*/
@Slf4j
@Controller
@RequestMapping("/mngr/ntcn/lgqymssage")
public class LgqyMssageController {
/**
* WebClient 호출을 위한 wrapper
*/
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* WebClient 호출을 위한 wrapper
*/
@Autowired
private SendToResrc sendToResrc;
/**
* 공통 메시지 처리를 위한 메시지 객체
*/
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private FileStorageService filestore;
/*****************************************************
대량 메시지 발송 관리 START
*****************************************************/
/**
* 대량 메시지 발송 관리 o
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqyPassivSndngManage")
public String selectMssageLgqyPassivSndngManage() {
return "mngr/ntcn/lgqymssage/MssageLgqyPassivSndngManage";
}
/**
* 대량 메시지 등록 폼 조회 o
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqySndngRegistForm")
public String selectMssageLgqySndngRegistForm(LgqyMssageSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSrchSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/selectBOMssageLgqySndngRegistForm", vo),
model,
"resultMap"
);
return "mngr/ntcn/lgqymssage/MssageLgqySndngRegistC";
}
/**
* 대량 메시지 발송 내역 폼 o
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqySndngListInqireRForm")
public String selectMssageLgqySndngListInqireRForm(LgqyMssageSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSrchSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/selectBOMssageLgqySndngListInqireRForm", vo),
model,
"resultMap"
);
return "mngr/ntcn/lgqymssage/MssageLgqyPassivSndngListInqireRForm";
}
/**
* 대량 메시지 발송 내역 리스트 조회 o
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqySndngListInqire")
public String selectMssageLgqySndngListInqire(LgqyMssageSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSrchSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/selectBOMssageLgqySndngListInqire", vo),
model,
"resultMap"
);
return "mngr/ntcn/lgqymssage/MssageLgqyPassivSndngListInqireR";
}
/**
* 대량 메시지 발송 수정 화면 조회 o
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqySndngUpdtInqire")
public String selectMssageLgqySndngUpdtInqire(LgqyMssageSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSrchSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/selectBOMssageLgqySndngUpdtInqire", vo),
model,
"resultMap"
);
return "mngr/ntcn/lgqymssage/MssageLgqySndngUpdtR";
}
/**
* 대량 메시지 발송 통계 조회, 완료 시 통계 팝업
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqySndngStats")
public String selectMssageLgqySndngStats(LgqyMssageSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSrchSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/selectBOMssageLgqySndngStats", vo),
model,
"resultMap"
);
return "mngr/ntcn/lgqymssage/MssageLgqySndngStatsR";
}
/**
* 대량 메시지 발송 출생년도별 클릭 통계
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqySndngClickBirth")
public String selectMssageLgqySndngClickBirth(LgqyMssageSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSrchSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/selectBOMssageLgqySndngClickBirth", vo),
model,
"resultMap"
);
return "mngr/ntcn/lgqymssage/MssageLgqySndngClickBirthR";
}
/**
* 대량 메시지 발송 출생년도별 클릭 통계
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqySndngClickOrdr")
public String selectMssageLgqySndngClickOrdr(LgqyMssageSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSrchSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/selectBOMssageLgqySndngClickOrdr", vo),
model,
"resultMap"
);
return "mngr/ntcn/lgqymssage/MssageLgqySndngClickOrdrR";
}
/**
* 대량 발송 일정 달력
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqySndngReqstCldr")
public String selectMssageLgqySndngReqstCldr(LgqyMssageSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSrchSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/selectBOMssageLgqySndngReqstCldr", vo),
model,
"resultMap"
);
return "mngr/ntcn/lgqymssage/MssageLgqySndngReqstCldrPopupR";
}
/**
* 대량 메시지 발송 날짜 체크
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageLgqySndngReqstDtInqire")
public ResponseEntity<WnbtResponse> selectMssageLgqySndngReqstDtInqire(LgqyMssageSrchVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSrchSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/selectBOMssageLgqySndngReqstDtInqire", vo),
ReplyFromResrc::getReply
);
}
/**
* 대량 발송 등록 o
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertMssageLgqySndngRegist")
public ResponseEntity<WnbtResponse> insertMssageLgqySndngRegist(@Validated LgqyMssageVO vo, BindingResult bindingResult
, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setBrandCd(authSopmalCd);
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//입력구분에 따른 대상자 목록 또는 마케팅 대상자 정리
vo.setSndngDvCd(vo.getSndngDvCd().replace("select-input-", ""));
if ("03".equals(vo.getSndngDvCd())) {
vo.setSndngCndParam(null);
} else if ("04".equals(vo.getSndngDvCd())) {
if (StringUtil.isEmpty(vo.getSndngCndParam())) {
throw new WnbtRestException("마케팅 대상이 지정되지 않았습니다. 검색 후 다시 시도해주세요.");
}
vo.setLgqyMssageToList(null);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/insertBOMssageLgqySndngRegist", vo),
ReplyFromResrc::getReply
);
}
/**
* 대량 발송 수정 o
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateMssageLgqySndngUpdt")
public ResponseEntity<WnbtResponse> updateMssageLgqySndngUpdt(@Validated LgqyMssageVO vo, BindingResult bindingResult, HttpServletRequest request
, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
if ("04".equals(vo.getSndngDvCd())) {
if (StringUtil.isEmpty(vo.getSndngCndParam())) {
throw new WnbtRestException("마케팅 대상이 지정되지 않았습니다. 검색 후 다시 시도해주세요.");
}
}
//파일 첨부 등록
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("pathGubun", "SMSQ");
request.setAttribute("shopCd", authSopmalCd);
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/updateBOMssageLgqySndngUpdt", vo),
ReplyFromResrc::getReply
);
}
/**
* 발신 상태 취소 및 활성화 o
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateMssageLgqySndngSttusUpdt")
public ResponseEntity<?> updateBOMssageLgqySndngSttusUpdt(LgqyMssageVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/lgqymssage/updateBOMssageLgqySndngSttusUpdt", vo),
ReplyFromResrc::getReply
);
}
/*****************************************************
대량 메시지 발송 관리 END
*****************************************************/
/*****************************************************
정산 START
*****************************************************/
/**
* 정산 조회 폼
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageStlListInqireRForm")
public String selectMssageStlListInqireRForm(LgqyMssageVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return "mngr/ntcn/mssage/MssageStlListInqireRForm";
}
/**
* 정산 목록 내역 조회
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageStlListInqire")
public String selectMssageStlListInqire(LgqyMssageVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOMssageStlListInqire", vo),
model,
"resultMap"
);
return "mngr/ntcn/mssage/MssageStlListInqireR";
}
}

View File

@@ -0,0 +1,89 @@
package com.wb.domainserver.domain.mngr.ntcn.lgqymssage.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class LgqyMssageSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** SMS대량발송 고유번호 */
private Integer srchSmsLgqySndngInnb;
/**
* FM_LGQY_SMS SMS 대량발송내역(메시지 대량발송내역)
*/
/** 쇼핑몰코드 */
private String srchSopmalCd;
/** 브랜드코드 */
private String srchBrandCd;
/** 발송제목 */
private String srchSndngSj;
/** 발송내용 */
private String srchSndngCn;
/** 받는사람구분 */
private String recpntDv;
/** 호출 페이지 사용여부 */
private String callPgeUseAt;
/** 링크 URL1 */
private String linkUrl1;
/** 링크 URL2 */
private String linkUrl2;
/** 링크 URL3 */
private String linkUrl3;
/** 발송요청일시 */
private String srchSndngReqstDt;
/** 발송일시 */
private Date srchSndngDt;
/** 전체건수 */
private Integer allCnt;
/** 성공건수 */
private Integer succesCnt;
/** 발송상태 */
private String srchSndngSttus;
/** 검색 요청 시작일자 */
private String srchStrtRegistDt;
/** 검색 요청 종료일자 */
private String srchEndRegistDt;
/** 요청자명 */
// private String 요청자명;
/**
* FM_LGQY_SMS_TO SMS 대량발송 대상(메시지 대량발송 대상)
*/
/** 대량발송 대상 고유번호 */
private Integer lgqySndngTrgetInnb;
/** 관리자 고유번호 */
private Integer mngrInnb;
/** 휴대폰번호 */
private String mbtlnb;
/** 이름 */
private String nm;
/** 고객선택 */
private String cstmrChoise;
/** 선택일시 */
private Date choiseDt;
/** 정상여부 */
private String nrmltAt;
/** 메모 */
private String memo;
/** 치환 단어1 */
private String substChr1;
/** 치환 단어2 */
private String substChr2;
/** 치환 단어3 */
private String substChr3;
/** 치환 단어4 */
private String substChr4;
/** 치환 단어5 */
private String substChr5;
/** 링크여부 */
private String linkAt;
}

View File

@@ -0,0 +1,141 @@
package com.wb.domainserver.domain.mngr.ntcn.lgqymssage.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class LgqyMssageVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** SMS대량발송 고유번호 */
private Integer smsLgqySndngInnb;
/**
* FM_LGQY_SMS SMS 대량발송내역(메시지 대량발송내역)
*/
/** 쇼핑몰코드 */
private String sopmalCd;
/** 브랜드코드 */
private String brandCd;
/*발송처리상태*/
private String sndngProcsDvCd;
/**입력구분*/
private String sndngDvCd;
/** 발송제목 */
@NotBlank(message = "발송제목")
private String sndngSj;
/** 발송내용 */
@NotBlank(message = "발송내용")
private String sndngCn;
/** 발신 번호 */
private String recpntDv;
/** 호출 페이지 사용여부 */
private String callPgeUseAt;
/** 링크 URL1 */
private String linkUrl1;
/** 링크 URL2 */
private String linkUrl2;
/** 링크 URL3 */
private String linkUrl3;
/** 발송요청일시 */
private String sndngReqstDt;
/** 발송일시 */
private Date sndngDt;
/** 전체건수 */
private Integer allCnt;
/** 성공건수 */
private Integer succesCnt;
/** 발송상태 */
private String sndngSttus;
/** 요청자명 */
@NotBlank(message = "요청자명")
private String requsrNm;
/** 랜딩이미지원본파일명*/
private String orginlFilNm;
/** 랜딩이미지시스템파일명*/
private String sysFilNm;
/** 랜딩이미지파일크기*/
private Integer filMg;
/** 랜딩이미지파일타입*/
private String filTy;
/** 랜딩이미지파일경로 */
private String filCours;
/** 랜딩페이지사용여부 */
private String landingUseAt;
/** 랜딩페이지종류 */
private String landingTy;
/** 랜딩페이지 바로가기 위치값 */
private String landingPosition;
/** 직접 입력 */
private String lgqyMssageToList;
/** 삭제 대상 */
private String deleteToList;
/** 파일정보 */
private List<HashMap<String, Object>> fileInfo;
/** 랜딩페이지 파일*/
private MultipartFile landngFile;
/** 이미지 첨부파일*/
private MultipartFile file;
/** 랜딩페이지 url 리스트 */
private List<String> landingUrl;
/*발송조건 파라미터*/
private String sndngCndParam;
/*발송조건 쿼리*/
private String sndngTrgetQry;
/**
* FM_LGQY_SMS_TO SMS 대량발송 대상(메시지 대량발송 대상)
*/
/** 대량발송 대상 고유번호 */
private Integer lgqySndngTrgetInnb;
/** 관리자 고유번호 */
private Integer mngrInnb;
/** 휴대폰번호 */
private String mbtlnb;
/** 이름 */
private String nm;
/** 고객선택 */
private String cstmrChoise;
/** 선택일시 */
private Date choiseDt;
/** 정상여부 */
private String nrmltAt;
/** 메모 */
private String memo;
/** 치환 단어1 */
private String substChr1;
/** 치환 단어2 */
private String substChr2;
/** 치환 단어3 */
private String substChr3;
/** 치환 단어4 */
private String substChr4;
/** 치환 단어5 */
private String substChr5;
/** 링크여부 */
private String linkAt;
/** 관리자 번호 */
private String mngrMbtlnb;
/** 문자 구분 */
private String dv;
/** 문자 템플릿 코드 */
private String templatecode;
}

View File

@@ -0,0 +1,41 @@
package com.wb.domainserver.domain.mngr.ntcn.lgqymssage.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 MssageSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어타입*/
public String srchType;
/**검색어*/
public String srchStr;
/**쇼핑몰코드*/
private String sopmalCd;
/**검색 시작 발송 날짜 */
private String srchStrtSndngDt;
/**검색 종료 발송 날짜 */
private String srchEndSndngDt ;
/**검색 쇼핑몰 코드*/
private String srchSopmalCd;
/**검색 sms 고유번호 */
private String srchSmsInnb ;
/**검색 sms 대상 고유번호 */
private String srchSmsToInnb;
/**검색 sms 수신번호 */
private String srchRecptnNb ;
/**검색 수신/발신 번호 구분 */
private String srchNbDv ;
/**검색 조회기간 구분 */
private String srchDtDv ;
/**검색 발송유형 */
private List<String> srchDv;
/**검색 현재상태*/
private List<String> srchSttus;
}

View File

@@ -0,0 +1,125 @@
package com.wb.domainserver.domain.mngr.ntcn.lgqymssage.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MssageVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** SMS 고유번호 */
private Integer smsInnb;
/**
* FM_SMS SMS 발송내역(메시지 발송내역)
*/
/** (STO:매장, ADM:관리자, SYS:시스템) */
private String regusrDv;
/** 매장 고유번호 */
private Integer strInnb;
/** 입점사명 */
private String strNm;
/** 매장구분(G:가맹, J:직영, O:유통) */
private String strDv;
/** 문자상태(REG:등록, WAIT:대기 ,SEND:발송, END:발송완료) */
private String chrSttus;
/** 예약일시 */
private Date resveDt;
/** 발송일시 */
private Date sndngDt;
/** 발송 식별번호 */
private Integer sndngIdnb;
/** HEAD */
private String head;
/** 내용 */
@NotBlank(message = "내용")
private String cn;
/** TAIL */
private String tail;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 발송번호 */
private String sndngNb;
/** (SMS,LMS,MMS) */
private String dv;
/** 대상자 수 */
private Integer trgterCnt;
/** 불량 수 */
private Integer badnCnt;
/** 대기 수 */
private Integer waitCnt;
/** (미확인+실패+성공) */
private Integer trnsmisCnt;
/** 실패 수 */
private Integer failrCnt;
/** (과금 대상) */
private Integer succesCnt;
/** 정산 식별번호 */
private Integer stlIdnb;
/** SMS 이름 */
private String smsNm;
/** 등록자 이름*/
private String regusrNm;
/**
* FM_SMS_TO SMS 대상(메시지 대상)
*/
/** 대상 순번 */
private Integer trgetSnb;
/** 구분 */
// private String dv;
/** 상태 */
private String sttus;
/** 발송 식별번호 */
// private long sndngIdnb;
/** 발송일시 */
// private Date sndngDt;
/** 결과코드 */
private String rsltCd;
/** 수신번호 */
@NotEmpty(message = "수신번호")
private String recptnNb;
/** 고객 식별번호 */
private Integer cstmrIdnb;
/** 고객이름 */
private String cstmrNm;
/** 치환 단어1 */
private String substWrd1;
/** 치환 단어2 */
private String substWrd2;
/** 치환 단어3 */
private String substWrd3;
/** 치환 단어4 */
private String substWrd4;
/** 치환 단어5 */
private String substWrd5;
;
/** 메시지 대상자 리스트 */
private String recptnTrgtList;
/**
* 회원 목록 -> 메시지 발송
*/
/** 발송 건수 */
private String sndngCnt;
/** 회원 정보 */
private String mbrInfo;
/** 파일정보 */
private List<HashMap<String, Object>> fileInfo;
/** 파일 고유번호*/
private Integer fSeq;
}

View File

@@ -0,0 +1,496 @@
package com.wb.domainserver.domain.mngr.ntcn.mssage.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.mbr.vo.MbrSrchVO;
import com.wb.domainserver.domain.mngr.ntcn.mssage.vo.ItrntMssageFileVO;
import com.wb.domainserver.domain.mngr.ntcn.mssage.vo.MssageAlbumVO;
import com.wb.domainserver.domain.mngr.ntcn.mssage.vo.MssageSrchVO;
import com.wb.domainserver.domain.mngr.ntcn.mssage.vo.MssageVO;
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.file.service.FileStorageService;
import com.wb.domainserver.util.string.StringUtil;
import jakarta.servlet.http.HttpServletRequest;
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.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* SMS Controller
* @author 이운산
* @since 2024-04-03
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-04-03 이운산 최초 생성
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/mngr/ntcn/mssage")
public class MssageController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Value("${mngrfo.common.fileupload.uploaddirs.goods}")
private String uploadFilePath;
@Value("${mngrfo.common.fileupload.extensions.images}")
private String whiteListFileUploadExtensions;
@Autowired
private FileStorageService filestore;
/*****************************************************
수동 메시지 발송 관리 START
*****************************************************/
/**
// * 메시지 발송 관리 화면
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMssagePassivSndngManage")
public String selectMessagePassivSndngManage(MssageVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return "mngr/ntcn/mssage/MssagePassivSndngManage";
}
/**
* 메시지 발송 화면
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMssagePassivSndng")
public String selectMssagePassivSndng(MssageVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOMssagePassivSndng", vo),
model,
"resultMap"
);
return "mngr/ntcn/mssage/MssagePassivSndngC";
}
/**
* 메시지 발송 팝업 화면
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMssageSndngPopupForm")
public String selectMssageSndngPopupForm(MssageVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOMssageSndngPopupForm", vo),
model,
"resultMap"
);
return "mngr/ntcn/mssage/MssageSndngPopupC";
}
/**
* 메시지 발송 내역 폼
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMssagePassivSndngListInqireRForm")
public String selectMessagePassivSndngListInqireRForm(MssageSrchVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOSmsSndngDtlsListInqireForm", vo),
model,
"resultMap"
);
return "mngr/ntcn/mssage/MssagePassivSndngListInqireRForm";
}
/**
* 메시지 수동 발송 내역 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMssagePassivSndngListInqire")
public String selectMessagePassivSndngListInqire(MssageSrchVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
if(vo.getSrchDv() == null) {
List<String> srchDvList = new ArrayList<>();
srchDvList.add("SMS");
srchDvList.add("LMS");
vo.setSrchDv(srchDvList);
}
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOSmsSndngListInqire", vo),
model,
"resultMap"
);
return "mngr/ntcn/mssage/MssagePassivSndngListInqireR";
}
/**
* 메시지 수동 발송 상세 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMssagePassivSndngDtlPopupInqire")
public String selectMssagePassivSndngDtlPopupInqire(MssageSrchVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOSmsSndngDtlInfo", vo),
model,
"resultMap"
);
return "mngr/ntcn/mssage/MssagePassivSndngDtlPopupR";
}
/**
* SMS 수동 발송
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertMssageSndng")
public ResponseEntity<WnbtResponse> insertMssageSndng(MssageVO vo, BindingResult bindingResult,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()){
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
// 응담객체에 메시지와 함께 반환결과 처리
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/insertBOMssageSndng", vo),
ReplyFromResrc::getReply
);
}
/**
* SMS 발송 예약 취소
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/mssageSndngCancel")
public ResponseEntity<WnbtResponse> mssageSndngCancel(MssageVO vo, BindingResult bindingResult,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
log.info("MssageVOAAAAAAAA");
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()){
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
log.info("MssageVO : {}",vo);
// 응담객체에 메시지와 함께 반환결과 처리
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/mssageSndngCancel", vo),
ReplyFromResrc::getReply
);
}
/*****************************************************
수동 메시지 발송 관리 END
*****************************************************/
/*****************************************************
이미지 첨부 START
*****************************************************/
/**
* 메시지 수동 이미지 첨부 팝업
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMssagePassivSndngImgPopupForm")
public String selectMssagePassivSndngImgPopupForm(ItrntMssageFileVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOMssagePassivSndngImgPopupForm", vo),
model,
"resultMap"
);
return "mngr/ntcn/mssage/MssagePassivSndngImgPopupC";
}
/**
* 인트라넷 이미지 등록
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertIntrntSndngImg")
public ResponseEntity<WnbtResponse> insertIntrntSndngImg(ItrntMssageFileVO vo, ModelMap model,
HttpServletRequest request,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
String shopCd = vo.getSopmalCd();
request.setAttribute("shopCd", shopCd);
request.setAttribute("pathGubun", "ETCM");
//파일 업로드만 실행, 정보는 vo에 담아서 BO에서 처리
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String,Object>>();
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패하였습니다.");
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/insertBOIntrntSndngImg", vo),
ReplyFromResrc::getReply
);
}
/**
* 인트라넷 이미지 삭제
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteIntrntSndngImg")
public ResponseEntity<WnbtResponse> deleteIntrntSndngImg(ItrntMssageFileVO vo, ModelMap model,
HttpServletRequest request,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/deleteBOIntrntSndngImg", vo),
ReplyFromResrc::getReply
);
}
/*****************************************************
자주 쓰는 메시지(FM_SMS_ALBUM) START
*****************************************************/
/**
* 자주쓰는 메시지 팝업
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectRegistMssagePopup")
public String selectRegistMssagePopup(MssageAlbumVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBORegistMssagePopup", vo),
model,
"resultMap"
);
return "mngr/ntcn/mssage/RegistMssagePopupR";
}
/**
* 자주쓰는 메시지 추가 팝업
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMssageAditPopupForm")
public String selectMssageAditPopupForm(MssageVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOMssageAditPopupForm", vo),
model,
"resultMap"
);
return "mngr/ntcn/mssage/MssageAditPopupC";
}
/**
* 자주쓰는 메시지 등록
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertMssageAditRegist")
public ResponseEntity<?> insertMssageAditRegist(MssageAlbumVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/insertBOMssageAditRegist", vo),
ReplyFromResrc::getReply
);
}
/**
* 자주 쓰는 메시지 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateMssageAditUpdt")
public ResponseEntity<WnbtResponse> updateMssageAditUpdt(MssageAlbumVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/updateBOMssageAditUpdt", vo),
ReplyFromResrc::getReply
);
}
/**
* 자주 쓰는 메시지 삭제
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteMssageAdit")
public ResponseEntity<WnbtResponse> deleteMssageAdit(MssageAlbumVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/deleteBOMssageAdit", vo),
ReplyFromResrc::getReply
);
}
/**
* 자주 쓰는 카테고리 삭제
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteMssageAditCtgy")
public ResponseEntity<WnbtResponse> deleteMssageAditCtgy(MssageAlbumVO vo, ModelMap model,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/deleteBOMssageAditCtgy", vo),
ReplyFromResrc::getReply
);
}
/*****************************************************
자주 쓰는 메시지(FM_SMS_ALBUM) END
*****************************************************/
/*****************************************************
공통 START
*****************************************************/
/**
* 고객센터/무료수신거부 조회
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectShopNb")
public ResponseEntity<?> selectShopNb(MssageVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
if(StringUtil.isEmpty(vo.getSopmalCd())){
vo.setSopmalCd(authSopmalCd);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOShopNb", vo),
ReplyFromResrc::getReply
);
}
/**
* 회원 팝업 폼
* @param mbrSrchVO
* @return String
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectMbrSrchPopupRForm")
public String selectMbrSrchPopupRForm(ModelMap model, MbrSrchVO mbrSrchVO,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
mbrSrchVO.setSopmalCd(authSopmalCd);
mbrSrchVO.setPopDv("Y");
//페이징값 가져오기
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOMbrListInqireForm", mbrSrchVO),
model,
"resultMap"
);
return "mngr/ntcn/mssage/MssageMbrSrchPopupRForm";
}
/*****************************************************
공통 END
*****************************************************/
}

View File

@@ -0,0 +1,53 @@
package com.wb.domainserver.domain.mngr.ntcn.mssage.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class ItrntMssageFileVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* FM_INTRANET_SMS_FILE 매장 SMS 첨부파일
*/
/** 고유번호 */
private Integer fSeq;
/** 매장 고유번호 */
private Integer providerSeq;
/** 파일순번 */
private BigDecimal fIdx;
/** 원래파일명 */
private String fNameOrg;
/** 저장파일명 */
private String fName;
/** 파일용량 */
private Integer fSize;
/** 넓이 */
private Integer fWidth;
/** 높이 */
private Integer fHeight;
/** 파일타입 */
private String fType;
/** 파일경로*/
private String fCourse;
/** 등록일 */
private Date fRegdate;
/** 파일정보 */
private List<HashMap<String, Object>> fileInfo;
/** 쇼핑몰 코드 */
private String sopmalCd;
}

View File

@@ -0,0 +1,44 @@
package com.wb.domainserver.domain.mngr.ntcn.mssage.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MbrSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어 구분*/
private String srchKywordDv;
/**검색어 키워드*/
private String srchKyword;
/*검색어 이름*/
private String srchMbrNm;
/*검색어 아이디*/
private String srchKywordID;
/*검색어 이메일*/
private String srchKywordEmail;
/*검색어 휴대폰번호*/
private String srchKywordMb;
/**정렬 방식*/
private String sortDv;
/**쇼핑몰코드*/
private String sopmalCd;
/*회원 구분 코드*/
private String srchMbrDvCd;
/*팝업 리스트 구분*/
private String popDv;
/*검색 주체가 email인지 sms인지 구분*/
private String actionDv;
}

View File

@@ -0,0 +1,25 @@
package com.wb.domainserver.domain.mngr.ntcn.mssage.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MssageAlbumVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 앨범 시퀀스 번호 */
private Integer smsAlbumInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 카테고리 */
@NotBlank(message = "카테고리")
private String category;
/** 메세지 */
@NotBlank(message = "메세지")
private String msg;
}

View File

@@ -0,0 +1,44 @@
package com.wb.domainserver.domain.mngr.ntcn.mssage.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 MssageSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어타입*/
public String srchType;
/**검색어*/
public String srchStr;
/**쇼핑몰코드*/
private String sopmalCd;
/**검색 시작 발송 날짜 */
private String srchStrtSndngDt;
/**검색 종료 발송 날짜 */
private String srchEndSndngDt ;
/**검색 쇼핑몰 코드*/
private String srchSopmalCd;
/**검색 sms 고유번호 */
private String srchSmsInnb ;
/**검색 sms 대상 고유번호 */
private String srchSmsToInnb;
/**검색 sms 수신번호 */
private String srchRecptnNb ;
/**검색 수신/발신 번호 구분 */
private String srchNbDv ;
/**검색 조회기간 구분 */
private String srchDtDv ;
/**검색 발송유형 */
private List<String> srchDv;
/**검색 현재상태*/
private List<String> srchSttus;
/** 검색 회원번호 */
private String srchMbrInnb;
}

View File

@@ -0,0 +1,135 @@
package com.wb.domainserver.domain.mngr.ntcn.mssage.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigInteger;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MssageVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** SMS 고유번호 */
private Integer smsInnb;
/**
* FM_SMS SMS 발송내역(메시지 발송내역)
*/
/** (STO:매장, ADM:관리자, SYS:시스템) */
private String regusrDv;
/** 매장 고유번호 */
private Integer strInnb;
/** 입점사명 */
private String strNm;
/** 매장구분(G:가맹, J:직영, O:유통) */
private String strDv;
/** 문자상태(REG:등록, WAIT:대기 ,SEND:발송, END:발송완료) */
private String chrSttus;
/** 예약일시 */
private Date resveDt;
/** 발송일시 */
private Date sndngDt;
/** 발송 식별번호 */
private Integer sndngIdnb;
/** HEAD */
private String head;
/** 내용 */
private String cn;
/** TAIL */
private String tail;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 발송번호 */
private String sndngNb;
/** (SMS,LMS,MMS) */
private String dv;
/** 대상자 수 */
private Integer trgterCnt;
/** 불량 수 */
private Integer badnCnt;
/** 대기 수 */
private Integer waitCnt;
/** (미확인+실패+성공) */
private Integer trnsmisCnt;
/** 실패 수 */
private Integer failrCnt;
/** (과금 대상) */
private Integer succesCnt;
/** 정산 식별번호 */
private Integer stlIdnb;
/** SMS 이름 */
private String smsNm;
/** 등록자 이름*/
private String regusrNm;
/**
* FM_SMS_TO SMS 대상(메시지 대상)
*/
/** SMS 대상 고유번호 */
private BigInteger smsToInnb;
/** 대상 순번 */
private Integer trgetSnb;
/** 구분 */
// private String dv;
/** 상태 */
private String sttus;
/** 발송 식별번호 */
// private long sndngIdnb;
/** 발송일시 */
// private Date sndngDt;
/** 결과코드 */
private String rsltCd;
/** 수신번호 */
@NotEmpty(message = "수신번호")
private String recptnNb;
/** 고객 식별번호 */
private Integer cstmrIdnb;
/** 고객이름 */
private String cstmrNm;
/** 치환 단어1 */
private String substWrd1;
/** 치환 단어2 */
private String substWrd2;
/** 치환 단어3 */
private String substWrd3;
/** 치환 단어4 */
private String substWrd4;
/** 치환 단어5 */
private String substWrd5;
/** 치환 데이터 */
private DataMap sndngData;
/** 메시지 대상자 리스트 */
private String recptnTrgtList;
/**
* 회원 목록 -> 메시지 발송
*/
/** 발송 건수 */
private String sndngCnt;
/** 회원 정보 */
private String mbrInfo;
/** 파일정보 */
private List<HashMap<String, Object>> fileInfo;
/** 파일 고유번호*/
private Integer fSeq;
/** 메세지 취소 구분코드 */
private String cancelDvCd;
}

View File

@@ -0,0 +1,257 @@
package com.wb.domainserver.domain.mngr.ntcn.tmplt.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.ntcn.tmplt.vo.TmpltVO;
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 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;
/*
* 템플릿 관리 Controller
* @author 리브가
* @since 2024-02-21
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-21 리브가 최초 생성
* 2024-04-17 이대환 내용 수정
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/mngr/ntcn/tmplt")
public class TmpltController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 템플릿 관리 페이지
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectAtmcSndngTmplatManage")
public String selectEmailPassivSndngManage(){
return "mngr/ntcn/tmplt/AtmcSndngTmplatManage";
}
/**
* 템플릿 관리 > 이메일 템플릿 폼
* @param model
* @param tmpltVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectEmailAtmcSndngTmplatOneInqireForm")
public String selectEmailAtmcSndngTmplatOneInqireForm(ModelMap model, TmpltVO tmpltVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
tmpltVO.setSopmalCd(authSopmalCd);
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/tmplt/selectBOEmailAtmcSndngTmplatOneInqireForm", tmpltVO),
model,
"resultListMap"
);
model.addAttribute("tmpltVO",tmpltVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/tmplt/EmailAtmcSndngTmplatU";
}
/**
* 템플릿 관리 > 이메일 템플릿 폼 > 이메일 템플릿
* @return
* @author 이대환
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectEmailAtmcSndngTmplatOne")
public ResponseEntity<WnbtResponse> selectEmailAtmcSndngTmplatOne(TmpltVO tmpltVO, @CookieValue(value = "authSopmalCd") String authSopmalCd){
tmpltVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/tmplt/selectBOEmailAtmcSndngTmplatOneInqireForm", tmpltVO),
ReplyFromResrc::getReply
);
}
/**
* 템플릿 관리 > 이메일 템플릿 - 이메일 템플릿 수정
* @param tmpltVO
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateEmailAtmcSndngTmplatUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateEmailAtmcSndngTmplatUpdt(TmpltVO tmpltVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
tmpltVO.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/tmplt/updateBOEmailAtmcSndngTmplatUpdt", tmpltVO),
ReplyFromResrc::getReply
);
}
/**
* 템플릿 관리 > SMS 템플릿 폼
* @param model
* @param tmpltVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageAtmcSndngTmplatInqireForm")
public String selectMssageAtmcSndngTmplatInqireForm(ModelMap model, TmpltVO tmpltVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
tmpltVO.setSopmalCd(authSopmalCd);
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/tmplt/selectBOMssageAtmcSndngTmplatInqireForm", tmpltVO),
model,
"resultListMap"
);
model.addAttribute("tmpltVO",tmpltVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/tmplt/MssageAtmcSndngTmplatU";
}
/**
* 템플릿 관리 > SMS 템플릿 - SMS 템플릿 수정
* @param tmpltVO
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateMssageAtmcSndngTmplatUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateMssageAtmcSndngTmplatUpdt(TmpltVO tmpltVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
tmpltVO.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/tmplt/updateBOMssageAtmcSndngTmplatUpdt", tmpltVO),
ReplyFromResrc::getReply
);
}
/**
* 템플릿 관리 > 알림톡 템플릿 폼
* @param model
* @param tmpltVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectNtcntalkAtmcSndngTmplatInqireForm")
public String selectNtcntalkAtmcSndngTmplatInqireForm(ModelMap model, TmpltVO tmpltVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
tmpltVO.setSopmalCd(authSopmalCd);
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/tmplt/selectBONtcntalkAtmcSndngTmplatInqireForm", tmpltVO),
model,
"resultListMap"
);
model.addAttribute("tmpltVO",tmpltVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/tmplt/NtcntalkAtmcSndngTmplatU";
}
/**
* 템플릿 관리 > 알림톡 템플릿 > 알림톡 탬플릿 수정 팝업 폼
* @param model
* @param tmpltVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectNtcntalkAtmcSndngTmplatUpdtPopupForm")
public String selectNtcntalkAtmcSndngTmplatUpdtPopupForm(TmpltVO tmpltVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
tmpltVO.setSopmalCd(authSopmalCd);
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/tmplt/selectBONtcntalkAtmcSndngTmplatUpdtPopupForm", tmpltVO),
model,
"resultMap"
);
model.addAttribute("tmpltVO",tmpltVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "mngr/ntcn/tmplt/NtcntalkAtmcSndngTmplatUpdtPopupU";
}
/**
* 템플릿 관리 > 알림톡 템플릿 - 알림톡 템플릿 수정
* @param tmpltVO
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateNtcntalkAtmcSndngTmplatUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateNtcntalkAtmcSndngTmplatUpdt(@Validated TmpltVO tmpltVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
tmpltVO.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/tmplt/updateBONtcntalkAtmcSndngTmplatUpdt", tmpltVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,99 @@
package com.wb.domainserver.domain.mngr.ntcn.tmplt.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 TmpltVO extends AbstractVO {
/** 템플릿 공통 */
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 양식구분 */
private String formDvCd;
/** 양식상세구분 */
private String formDtlDvCd;
/** 이메일 템플릿 */
/** 고유번호 */
private Integer emailSndngFormInnb;
/** 이메일 제목 */
private String emailSj;
/** 이메일 내용 */
private String emailCn;
/** 메시지 템플릿 */
/** 고유번호*/
private Integer smsSndngFormInnb;
/** SMS 내용*/
private String smsCn;
/** 카카오 알림톡 템플릿 내용 */
/** 알림톡 발송양식 고유번호 */
private Integer ntcntalkSndngFormInnb;
/** 템플릿내용 */
private String msg;
/** 템플릿코드 */
private String templatecode;
/** SMS대체여부 */
private String smsRplcAt;
/** 카카오 알림톡_버튼 */
/** 버튼타입1 */
private String btnType01;
/** 버튼명1 */
private String btnNm01;
/** 링크주소1(mobile) */
private String btn01Url01;
/** 링크주소1(pc) */
private String btn01Url02;
/** 버튼타입2 */
private String btnType02;
/** 버튼명2 */
private String btnNm02;
/** 링크주소2(mobile) */
private String btn02Url01;
/** 링크주소2(pc) */
private String btn02Url02;
/** 버튼타입3 */
private String btnType03;
/** 버튼명3 */
private String btnNm03;
/** 링크주소3(mobile) */
private String btn03Url01;
/** 링크주소3(pc) */
private String btn03Url02;
/** 버튼타입4 */
private String btnType04;
/** 버튼명4 */
private String btnNm04;
/** 링크주소4(mobile) */
private String btn04Url01;
/** 링크주소4(pc) */
private String btn04Url02;
/** 버튼타입5 */
private String btnType05;
/** 버튼명5 */
private String btnNm05;
/** 링크주소5(mobile) */
private String btn05Url01;
/** 링크주소5(pc) */
private String btn05Url02;
/** 템플릿 정보 목록 */
private String tmplatList;
/** 버튼타입 리스트 */
private List<String> btnType;
/** 버튼명 리스트 */
private List<String> btnNm;
/** 링크주소(mobile) 리스트 */
private List<String> btnMUrl;
/** 링크주소(pc) 리스트 */
private List<String> btnPcUrl;
}

View File

@@ -0,0 +1,187 @@
package com.wb.domainserver.domain.mngr.ordr.atmcrmy.controller;
import com.wb.domainserver.domain.mngr.ordr.atmcrmy.vo.AtmcRcpmnyCnfirmMemoVO;
import com.wb.domainserver.domain.mngr.ordr.atmcrmy.vo.AtmcRcpmnyCnfirmVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/mngr/ordr/atmcrmy")
@Slf4j
public class AtmcrmyController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
@Autowired
private WnbtWebClientResponseHandler responseHandler;;
/**
* 자동입금내역 목록 화면 이동
* @param vo
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAtmcRcpmnyDtlsListInqireForm")
public String selectAtmcRcpmnyDtlsListInqireForm(AtmcRcpmnyCnfirmVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/atmcrcpmny/selectBOAtmcRcpmnyDtlsListInqireForm", vo),
model,
"resultMap"
);
return "mngr/ordr/atmcrmy/AtmcRcpmnyListInqireRForm";
}
/**
* 자동입금내역 목록 조회
* @param vo
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAtmcRcpmnyDtlsListInqire")
public String selectAtmcRcpmnyDtlsListInqire(AtmcRcpmnyCnfirmVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/atmcrcpmny/selectBOAtmcRcpmnyDtlsListInqire", vo),
model,
"resultMap"
);
return "mngr/ordr/atmcrmy/AtmcRcpmnyListInqireR";
}
/**
* 관리자 메모 등록 화면 조회
* @param vo
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectRcpmnyDtlsMngrMemoRegistPopupForm")
public String selectRcpmnyDtlsMngrMemoRegistPopupForm(AtmcRcpmnyCnfirmMemoVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
model.addAttribute("resultMap", vo);
return "mngr/ordr/atmcrmy/RcpmnyDtlsMngrMemoRegistPopupC";
}
/**
* 관리자 메모 등록
* @param vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertRcpmnyDtlsMngrMemoRegist")
public ResponseEntity<WnbtResponse> insertRcpmnyDtlsMngrMemoRegist(AtmcRcpmnyCnfirmMemoVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/atmcrcpmny/insertBORcpmnyDtlsMngrMemoRegist", vo),
ReplyFromResrc::getReply
);
}
/**
* 자동입금내역 주문조회 상세 팝업 이동
* @param vo
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAtmcRcpmnyDtlsOrdrInqirePopupForm", method = RequestMethod.GET)
public String selectAtmcRcpmnyDtlsOrdrInqirePopupForm(AtmcRcpmnyCnfirmVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/atmcrcpmny/selectBOAtmcRcpmnyDtlsOrdrInqirePopupForm", vo),
model,
"resultMap"
);
return "mngr/ordr/atmcrmy/AtmcRcpmnyDtlsOrdrInqirePopupRForm";
}
/**
* 자동입금내역 주문조회 팝업 주문조회
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAtmcRcpmnyOrdrInqire", method = RequestMethod.POST)
public String selectAtmcRcpmnyOrdrInqire(AtmcRcpmnyCnfirmVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/atmcrcpmny/selectBOAtmcRcpmnyOrdrInqire", vo),
model,
"resultMap"
);
return "mngr/ordr/atmcrmy/AtmcRcpmnyDtlsOrdrInqirePopupR";
}
/**
* 자동입금내역 주문조회 입금확인 매칭
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateRcpmnyCnfirmMtchg", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateRcpmnyCnfirmMtchg(AtmcRcpmnyCnfirmVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/atmcrcpmny/updateBORcpmnyCnfirmMtchg", vo),
ReplyFromResrc::getReply
);
}
/**
* 수동 실행 버튼 클릭 시
* @param vo
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateRcpmnyCnfirmExecut", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateRcpmnyCnfirmExecut(AtmcRcpmnyCnfirmVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/atmcrcpmny/updateBORcpmnyCnfirmExecut", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,45 @@
package com.wb.domainserver.domain.mngr.ordr.atmcrmy.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 해당 클래스에 대한 설명을 입력하세요.
* @author 임수영
* @since 2024-05-17
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-05-17 임수영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class AtmcRcpmnyCnfirmMemoVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* 입금내역 메모
*/
/** 쇼핑몰코드 */
private String sopmalCd;
/** 뱅크다 일련번호 */
private String bkcode;
/** 메모내용 */
private String memoCn;
}

View File

@@ -0,0 +1,200 @@
package com.wb.domainserver.domain.mngr.ordr.atmcrmy.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 해당 클래스에 대한 설명을 입력하세요.
* @author 임수영
* @since 2024-05-09
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-05-09 임수영 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class AtmcRcpmnyCnfirmVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰코드*/
private String sopmalCd;
/** 주문고유번호 */
private String ordrInnb;
/**
* 입금내역
*/
/** 일련번호 */
private Integer bkid;
/** 계좌번호 */
private String bkacctno;
/** 거래일자 */
private String bkdate;
/** 입금자명 */
private String bkjukyo;
/** 입금액 */
private String bkinput;
/** 출금액 */
private String bkoutput;
/** 주문결제고유번호 */
private String ordrSetleInnb;
/** 뱅크다 일련번호 */
private String bkcode;
/** 회원ID */
private String mid;
/** 은행명 */
private String bkname;
/** 거래시간 */
private String bktime;
/** 내용 */
private String bkcontent;
/** 기타 */
private String bketc;
/** 잔액 */
private String bkjango;
/** 거래내역수집일시 */
private String bkxferdatetime;
/**
* 주문결재
*/
/** 결제금액 */
private String setleAmt;
/** 결제유형코드 */
private String setleTyCd;
/** 결제일시 */
private String setleDt;
/** 은행명 */
private String bnnkNm;
/** 예금주명 */
private String dpstrNm;
/** 입금계좌번호 */
private String rcpmnyAcntnb;
/** 입금자명 */
private String rcpmnyerNm;
/** 수기결제여부 */
private String memorSetleAt;
/**
* 주문
*/
/** 주문상태코드 */
private String ordrSttusCd;
/** 주문상태코드명 */
private String ordrSttusCdNm;
/** 주문자명 */
private String ordrrNm;
/** 자동입금타입 */
private String autodepositTy;
/** 주문접수일시 */
private String ordrRceptDt;
/**
* 입금메모
*/
/** 메모내용 */
private String memoCn;
// 검색조건
/** 검색_정렬구분 */
private String sortDv;
/** 검색어 */
private String searchWord;
/** 계좌 번호 */
private String searchAccount;
/** 입금일 시작 */
private String srchStartDate;
/** 입금일 종료 */
private String srchEndDate;
/** 입금 확인 */
private String[] srchStatus;
// 주문조회 팝업 검색 조건
/** 주문고유번호 */
private String srchOrdrInnb;
/** 쇼핑몰 코드 */
private String srchSopmalCd;
/** 결제일시 */
private String srchSetleDt;
/** 은행명 */
private String srchBnnkNm;
/** 계좌번호 */
private String srchRcpmnyAcntnb;
/** 입금자명 */
private String srchRcpmnyerNm;
/** 입금액1 */
private String srchSetleAmt1;
/** 입금액2 */
private String srchSetleAmt2;
/** 입금여부1 */
private String srchOrdrSttusCd1;
/** 입금여부2 */
private String srchOrdrSttusCd2;
/** 입금여부3 */
private String srchOrdrSttusCd3;
}

View File

@@ -0,0 +1,31 @@
package com.wb.domainserver.domain.mngr.ordr.atmcrmy.vo;
import lombok.Data;
@Data
public class BankdaInfoVO {
/** 은행명 */
private String bkname;
/** 계좌번호 */
private String bkacctno;
/** 이용자 아이디 */
private String userId;
/** 이용자 비밀번호 */
private String userPw;
/** 수정할 이용자 아이디 */
private String updtUserId;
/** 수정할 이용자 비밀번호 */
private String updtUserPw;
/** 이용자 이름 */
private String userName;
}

View File

@@ -0,0 +1,552 @@
package com.wb.domainserver.domain.mngr.ordr.dlivy.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.ordr.dlivy.vo.DlivySrchVO;
import com.wb.domainserver.domain.mngr.ordr.dlivy.vo.DlivyVO;
import com.wb.domainserver.domain.mngr.ordr.ordrmngr.vo.DwldItmVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.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;
/*
* 통합관리자 > 출고 FO Controller
* @author 김혜인
* @since 2024-02-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-19 김혜인. 최초 생성
* 2024-03-19 추지훈 수정
*
* </pre>
*/
@Controller
@RequestMapping("/mngr/ordr/dlivy")
@Slf4j
public class DlivyController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 출고 목록 조회 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyListInqireForm")
public String selectDlivyListInqireForm(ModelMap model, DlivySrchVO dlivySrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) throws Exception {
dlivySrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyListInqireForm", dlivySrchVO),
model,
"cond"
);
model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(dlivySrchVO));
return "mngr/ordr/dlivy/DlivyListInqireRForm";
}
/**
* 출고 목록 조회
* @param DlivySrchVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyListInqireAjax")
public ResponseEntity<WnbtResponse> selectDlivyListInqireAjax(DlivySrchVO dlivySrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivySrchVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyListInqire", dlivySrchVO),
ReplyFromResrc::getReply
);
}
/**
* 출고 목록 상세 조회 ajax
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyListDtlAjax")
public ResponseEntity<WnbtResponse> selectDlivyListDtlAjax(DlivySrchVO dlivySrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivySrchVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyListDtlAjax", dlivySrchVO),
ReplyFromResrc::getReply
);
}
/**
* 출고 상태 변경 팝업 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivySttusChngPopupForm")
public String selectDlivySttusChngPopupForm(ModelMap model, DlivySrchVO dlivySrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivySrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyListInqireForm", dlivySrchVO),
model,
"resultMap"
);
model.addAttribute("paramVO", dlivySrchVO);
return "mngr/ordr/dlivy/DlivySttusChngUForm";
}
/**
* 출고 상태 변경 팝업 목록 조회
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivySttusChngPopup")
public String selectDlivySttusChngPopup(ModelMap model, DlivySrchVO dlivySrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivySrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyListInqirePage", dlivySrchVO),
model,
"resultMap"
);
model.addAttribute("paramVO", dlivySrchVO);
return "mngr/ordr/dlivy/DlivySttusChngU";
}
/**
* 출고 다운로드
* @param DlivySrchVO
* @return String
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyDtstmnDwldPopupForm")
public String selectDlivyDtstmnDwldPopupForm(ModelMap model, DlivyVO dlivyVO) {
//모델 객체에 결과 담음
model.addAttribute("resultMap", BoResultMapConverter.convert(new ObjectMapper(), reply.getReply()));
return "mngr/ordr/dlivy/DlivyDtstmnDwldPopupR";
}
*/
/**
* 출고 상세 조회
* @param DlivyVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyDtlInqire")
public String selectDlivyDtlInqire(ModelMap model, DlivyVO dlivyVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) throws JsonProcessingException {
dlivyVO.setSopmalCd(authSopmalCd);
// WnbtResponse response = WnbtResponse.builder().resBody(new WnbtResponseBody(reply.getReply())).build();
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyDtlInqire", dlivyVO),
model,
"resultMap"
);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOOrdrDtlInqire", dlivyVO),
model,
"data"
);
// model.addAttribute("paramVO", new ObjectMapper().writeValueAsString(refndSrchVO));
model.addAttribute("paginationInfo", dlivyVO.getPaginationInfo());
return "mngr/ordr/dlivy/DlivyDtlInqireR";
}
/**
* 출고 상태변경 > 출고 상세 상품 목록 조회
* @param DlivyVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyDtlGoodsListInqire")
public ResponseEntity<WnbtResponse> selectDlivyDtlGoodsListInqire(ModelMap model, DlivyVO dlivyVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyDtlGoodsListInqire", dlivyVO),
ReplyFromResrc::getReply
);
}
/**
* 관리자 > 출고 목록 > 출고 상세 펼치기
* @param DlivyVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyDtlInfoAndGoodsListInqire")
public ResponseEntity<WnbtResponse> selectDlivyDtlInfoAndGoodsListInqire(ModelMap model, DlivyVO dlivyVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyDtlInqire", dlivyVO),
ReplyFromResrc::getReply
);
}
/**
* 출고내역서 팝업 화면 이동
* @param model
* @param ordrVO
* @return OrdrDtstmnDwldPopupR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectDlivyDtstmnDwldPopupForm")
public String selectDlivyDtstmnDwldPopupForm(ModelMap model, DlivyVO dlivyVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) throws Exception {
dlivyVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyDtstmnDwldPopupForm", dlivyVO),
model,
"data"
);
return "mngr/ordr/dlivy/DlivyDtstmnDwldPopupR";
}
/**
* 출고 정보 수정
* @param DlivyVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateDlivyInfoUpdt")
public ResponseEntity<WnbtResponse> updateDlivyInfoUpdt(DlivyVO dlivyVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/updateBODlivyInfoUpdt", dlivyVO),
ReplyFromResrc::getReply
);
}
/**
* 관리자 > 출고 목록, 출고상태변경 팝업 > 출고 상태 변경 ( 배송중, 배송완료 )
* @param DlivyVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateDlivySttusGetbackUpdt")
public ResponseEntity<WnbtResponse> updateDlivySttusGetbackUpdt(DlivyVO dlivyVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/updateBODlivySttusGetbackUpdt", dlivyVO),
ReplyFromResrc::getReply
);
}
/**
* 다운로드 항목 조회
* @param DlivyVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyDwldItmSetupPopupForm")
public String selectDlivyDwldItmSetupPopupForm(ModelMap model, DwldItmVO dwldItmVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dwldItmVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBODwldForm", dwldItmVO),
model,
"data"
);
return "mngr/ordr/dlivy/DlivyDwldItmSetupPopupR";
}
/**
* 다운로드 항목 수정
* @param DwldItmVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateDlivyDwldItmSetup", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateDlivyDwldItmSetup(DwldItmVO dwldItmVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dwldItmVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBODwldFormUpdt", dwldItmVO),
ReplyFromResrc::getReply
);
}
/**
* 중요출고여부 수정
* @param DwldItmVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateImprtncdlivyAt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateImprtncdlivyAt(DlivyVO dlivyVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/updateBOImprtncdlivyAt", dlivyVO),
ReplyFromResrc::getReply
);
}
/**
* 주문, 출고 윈도우 팝업 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectOrdrDlivyPopupForm")
public String selectOrdrDlivyPopupForm(DlivySrchVO dlivySrchVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivySrchVO.setSopmalCd(authSopmalCd);
log.debug("dlivySrchVO 조건 확인",dlivySrchVO);
//모델 객체에 결과 담음
// model.addAttribute("resultMap", BoResultMapConverter.convert(new ObjectMapper(), reply.getReply()));
return "mngr/ordr/dlivy/OrdrDlivyPopupForm";
}
/**
* 출고 처리 윈도우 팝업 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyProcsPopupForm")
public String selectDlivyProcsPopupForm(DlivySrchVO dlivySrchVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivySrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyListInqireForm", dlivySrchVO),
model,
"resultMap"
);
model.addAttribute("paramVO", dlivySrchVO);
return "mngr/ordr/dlivy/DlivyProcsPopupUForm";
}
/**
* 출고 처리 윈도우 팝업 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlivyProcsPopupListInqire")
public String selectDlivyProcsPopupListInqire(DlivySrchVO dlivySrchVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivySrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlivyProcsPopupForm", dlivySrchVO),
model,
"resultMap"
);
model.addAttribute("paramVO", dlivySrchVO);
return "mngr/ordr/dlivy/DlivyProcsPopupU";
}
/**
* 주문 -> 출고처리 팝업 > 주문배송 상품 목록 조회
* @param DlivyVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectOrdrDlvyDtlGoodsListInqire")
public ResponseEntity<WnbtResponse> selectOrdrDlvyDtlGoodsListInqire(ModelMap model, DlivyVO dlivyVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBOOrdrDlvyDtlGoodsListInqire", dlivyVO),
ReplyFromResrc::getReply
);
}
/**
* 주문 출고 처리 팝업 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectOrdrDlivyProcsRegistForm")
public String selectOrdrDlivyProcsRegistForm(DlivyVO dlivyVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBOOrdrDlivyProcsRegistForm", dlivyVO),
model,
"resultMap"
);
model.addAttribute("paramVO", dlivyVO);
return "mngr/ordr/dlivy/OrdrDlivyProcsPopupC";
}
/**
* 주문 출고 처리 등록
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertOrdrDlivyProcsRegist", method = RequestMethod.POST)
public String insertOrdrDlivyProcsRegist(DlivyVO dlivyVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/updateBOOrdrDlivyProcsUpdt", dlivyVO),
model,
"resultMap"
);
return "mngr/ordr/dlivy/OrdrDlivyProcsRsltPopupR";
}
/**
* 배송 그룹 방법 변경 팝업 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDlvyGroupMthChngPopupForm")
public String selectDlvyGroupMthChngPopupForm(DlivyVO dlivyVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBODlvyGroupDtlForm", dlivyVO),
model,
"resultMap"
);
return "mngr/ordr/dlivy/DlvyGroupMthChngPopupU";
}
/**
* 배송 그룹 방법 변경 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateDlvyGroupMthChngUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateDlvyGroupMthChngUpdt(@Validated DlivyVO dlivyVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/updateBODlvyGroupMthChngUpdt", dlivyVO),
ReplyFromResrc::getReply
);
}
/**
* 주문 배송 내역 조회 팝업
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectOrdrDlvyDtlsInqire")
public String selectOrdrDlvyDtlsInqire(DlivyVO dlivyVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBOOrdrDlvyDtlsInqire", dlivyVO),
model,
"resultMap"
);
model.addAttribute("paramVO", dlivyVO);
return "mngr/ordr/dlivy/OrdrDlvyDtlsInqireR";
}
/**
* 구매 확정 상태 수정
* @param dlivyVO
* @param bindingResult
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updatePurchsDcsnSttusUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updatePurchsDcsnSttusUpdt(@Validated DlivyVO dlivyVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/updateBOPurchsDcsnSttusUpdt", dlivyVO),
ReplyFromResrc::getReply
);
}
/**
* 구매 확정 처리 로그 내역 팝업
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectPurchsDcsnProcsLogDtlsPopupForm")
public String selectPurchsDcsnProcsLogDtlsPopupForm(DlivyVO dlivyVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
dlivyVO.setSopmalCd(authSopmalCd);
log.debug("구매 확정 상태 수정 vo 확인 {}", dlivyVO);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/dlivy/selectBOPurchsDcsnLog", dlivyVO),
model,
"resultMap"
);
model.addAttribute("paramVO", dlivyVO);
return "mngr/ordr/dlivy/PurchsDcsnProcsLogDtlsPopupR";
}
}

View File

@@ -0,0 +1,142 @@
package com.wb.domainserver.domain.mngr.ordr.dlivy.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class DlivySrchVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/** 출고 고유번호 목록 */
private String[] dlivyInnbArr;
private String dlivyInnbs;
private String[] ordrInnbArr;
/** 주문 고유번호들 */
private String ordrInnbs;
private String popupDvCd;
/**상세 내용*/
public String dtlCn;
/**주문 배송 추적 고유번호*/
public String ordrDlvyTraceInnb;
/**쇼핑몰 코드*/
public String sopmalCd;
/**검색어*/
public String srchStr;
/**검색구분*/
public String srchDv;
/**검색시작일*/
public String srchStrtDt;
/**검색종료일*/
public String srchEndDt;
/**주문상태코드*/
public String srchOrdrSttus;
/**구매확정여부*/
public String[] srchPurchAt;
//택배정보
private String srchDlvyGroupCd;
//운송장번호
private String srchInvcnb;
// 검색 조건
/** 검색_검색어 */
private String srchKeyword;
/** 검색_날짜_구분 */
private String srchDtDv;
/** 검색_시작일 */
private String srchStartDate;
/** 검색_종료일 */
private String srchEndDate;
/** 검색_주문_상태 */
private String[] srchStatus;
/** 검색_배송방법 */
private String[] srchDlvyMth;
/** 검색_택배사코드 */
private String srchHdrycpnCd;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/**검색 목록*/
private String srchList;
/**검색어*/
private String srchwrd;
/**날짜 검색 목록*/
private String srchDate;
/** 주문상태코드리스트
* 주문접수(15), 결제확인(25), 상품준비(35),
* 배송중(65), 배송완료(75),
* 결제취소(85), 주문무효(95), 결제실패(99) */
private String[] srchOrdrSttusCds;
/** 주문 상태 코드 */
private String srchOrdrSttusCd;
/** 주문타입코드 일반주문, 관리자주문, 개인결제, 선물하기 */
private String ordrTyCd;
/*
####################################
전체 주문 조회 검색 추가 조건 시작
####################################
*/
private String srchwrdDv; // 검색어 구분
private String srchStrInnb; // 매장 고유번호
private String srchDateDv; // 일자구분
private String srchImprtncOrdr; // 중요여부(중요)
private String srchNonImprtncOrdr; // 중요여부(비중요)
private String[] srchOrdrEnvrnCds; // 주문환경 코드
private String srchResveSndngDvCd; // 예약배송구분
private String srchHopDlvyStartDate; // 희망배송일 시작일자
private String srchHopDlvyEndDate; // 희망배송일 종료일자
private String[] srchDlvyMthCds; // 배송방법 코드
private String[] srchOrdrTyCds; // 주문유형 코드
private long srchExcelDwldFormSnb; // 엑셀다운로드양식순번
private String srchExcelDwldDvCd; // 엑셀다운로드 대상 구분 코드
private String[] srchOrdrInnbs; // 주문번호 배열
private String srchDatePeriod; // 날짜구간코드
private String srchPurchsSttusC;// 구매 확정 상태
private String srchPurchsSttusS;// 구매 확정 상태
}

View File

@@ -0,0 +1,31 @@
package com.wb.domainserver.domain.mngr.ordr.dlivy.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class DlivyUpdtItemVO extends AbstractVO{
private static final long serialVersionUID = 1L;
private String ordrGoodsOptnInnb;
private String optnTy;
private String sopmalCd;
private String ordrDlvyInnb;
private String dlivyInnb;
private String qy;
}

View File

@@ -0,0 +1,61 @@
package com.wb.domainserver.domain.mngr.ordr.dlivy.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 DlivyUpdtVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/** 출고고유번호 배열 */
private String[] dlivyInnbArr;
private String[] ordrDlvyInnbArr;
/** 주문 배송 고유번호 */
private String ordrDlvyInnb;
/** 보낼 수량 */
private String sndngQy;
/**출고고유번호*/
private String dlivyInnb;
/**주문고유번호*/
private String ordrInnb;
private String sopmalCd;
/**출고준비(45), 출고완료(55), 배송중(65), 배송완료(75)*/
private String dlivySttusCd;
/**상태변경일시*/
private String sttusUpdtDt;
/**택배사코드*/
private String hdrycpnCd;
/**택배사코드 명*/
private String hdrycpnNm;
/**송장번호*/
private String invcnb;
/**출고일시*/
private String dlivyDt;
/**출고완료일시*/
private String dlivyComptDt;
/**배송완료일시*/
private String dlvyComptDt;
/**배송그룹코드*/
private String dlvyGroupCd;
/**관리자 고유번호*/
private String mngrInnb;
/** 출고 처리할 주분 배송 상품 옵션 VO */
private List<DlivyUpdtItemVO> dlivyUpdtItemVOList;
}

View File

@@ -0,0 +1,110 @@
package com.wb.domainserver.domain.mngr.ordr.dlivy.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 DlivyVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/** 출고고유번호 배열 */
private String[] dlivyInnbArr;
/** 주문 고유번호들 */
private String[] ordrInnbs;
/**쇼핑몰코드*/
private String sopmalCd;
/**출고고유번호*/
private String dlivyInnb;
/**주문고유번호*/
private String ordrInnb;
/**주문배송고유번호*/
private String ordrDlvyInnb;
/**출고코드번호*/
private String dlivyCdNb;
/**출고준비(45), 출고완료(55), 배송중(65), 배송완료(75)*/
private String dlivySttusCd;
/**상태변경일시*/
private String sttusUpdtDt;
/**택배사코드*/
private String hdrycpnCd;
/**송장번호*/
private String invcnb;
/**출고일시*/
private String dlivyDt;
/**출고완료일시*/
private String dlivyComptDt;
/**배송완료일시*/
private String dlvyComptDt;
/**배송그룹코드*/
private String dlvyGroupCd;
/**관리자 고유번호*/
private String mngrInnb;
/** 중요주문여부 */
private String imprtncOrdrAt;
/**배송주기*/
private String dlvyCycleCd;
/** 구매확정구분코드 */
private String purchsDcsnDvCd;
// 출고 상품
/** 출고상품고유번호 */
private String dlivyGoodsInnb;
/** 주문상품옵션고유번호 */
private String ordrGoodsOptnInnb;
/** 옵션유형 */
private String optnTy;
// 배송그룹 / 밥법 변경
/** 배송 그룹 코드 */
private String DlvyGroupCd;
// 스위트래커 배송 추적
/** 주문배송추적고유번호 */
private Integer ordrDlvyTraceInnb;
/** 스윗트래커송장코드 */
private String stInvcCd;
/** 상세내용 - 배송 추적 내용 json */
private String dtlCn;
/** 받는자 명 */
private String recpntNm;
/** 주문자명 */
private String ordrrNm;
/** 배송방법코드 */
private String dlvyMthCd;
List<DlivyUpdtVO> dlivyUpdtVOList;
}

View File

@@ -0,0 +1,110 @@
package com.wb.domainserver.domain.mngr.ordr.dlivy.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 ReqVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/** 출고고유번호 배열 */
private String[] dlivyInnbArr;
/** 주문 고유번호들 */
private String[] ordrInnbs;
/**쇼핑몰코드*/
private String sopmalCd;
/**출고고유번호*/
private String dlivyInnb;
/**주문고유번호*/
private String ordrInnb;
/**주문배송고유번호*/
private String ordrDlvyInnb;
/**출고코드번호*/
private String dlivyCdNb;
/**출고준비(45), 출고완료(55), 배송중(65), 배송완료(75)*/
private String dlivySttusCd;
/**상태변경일시*/
private String sttusUpdtDt;
/**택배사코드*/
private String hdrycpnCd;
/**송장번호*/
private String invcnb;
/**출고일시*/
private String dlivyDt;
/**출고완료일시*/
private String dlivyComptDt;
/**배송완료일시*/
private String dlvyComptDt;
/**배송그룹코드*/
private String dlvyGroupCd;
/**관리자 고유번호*/
private String mngrInnb;
/** 중요주문여부 */
private String imprtncOrdrAt;
/**배송주기*/
private String dlvyCycleCd;
/** 구매확정구분코드 */
private String purchsDcsnDvCd;
// 출고 상품
/** 출고상품고유번호 */
private String dlivyGoodsInnb;
/** 주문상품옵션고유번호 */
private String ordrGoodsOptnInnb;
/** 옵션유형 */
private String optnTy;
// 배송그룹 / 밥법 변경
/** 배송 그룹 코드 */
private String DlvyGroupCd;
// 스위트래커 배송 추적
/** 주문배송추적고유번호 */
private Integer ordrDlvyTraceInnb;
/** 스윗트래커송장코드 */
private String stInvcCd;
/** 상세내용 - 배송 추적 내용 json */
private String dtlCn;
/** 받는자 명 */
private String recpntNm;
/** 주문자명 */
private String ordrrNm;
/** 배송방법코드 */
private String dlvyMthCd;
List<DlivyUpdtVO> dlivyUpdtVOList;
}

View File

@@ -0,0 +1,215 @@
package com.wb.domainserver.domain.mngr.ordr.indvdlSetle.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.ordr.indvdlSetle.vo.IndvdlSetleSrchVO;
import com.wb.domainserver.domain.mngr.ordr.indvdlSetle.vo.IndvdlSetleVO;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
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.HashMap;
/*
* 통합관리자 > 개인결제 FO Controller
* @author 김혜인
* @since 2024-02-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-19 김혜인. 최초 생성
*
* </pre>
*/
@Controller
@RequestMapping("/mngr/ordr/indvdlSetle")
@Slf4j
public class IndvdlSetleController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 관리자 > 주문 > 개인결제관리 > 개인 결제 목록 화면 이동
* @return IndvdlSetleListInqireRForm.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectIndvdlSetleListInqireForm")
public String selectIndvdlSetleListInqireForm(ModelMap model, IndvdlSetleSrchVO indvdlSetleSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
model.addAttribute("sopmalCd", authSopmalCd);
return "mngr/ordr/indvdlSetle/IndvdlSetleListInqireRForm";
}
/**
* 관리자 > 주문 > 개인결제관리 > 개인 결제 목록
* @param model
* @return IndvdlSetleListInqireR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectIndvdlSetleListInqire")
public String selectIndvdlSetleListInqireModelMap(ModelMap model, IndvdlSetleSrchVO indvdlSetleSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
indvdlSetleSrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOIndvdlSetleListInqire", indvdlSetleSrchVO),
model,
"data"
);
return "mngr/ordr/indvdlSetle/IndvdlSetleListInqireR";
}
/**
* 관리자 > 주문 > 개인결제관리 > 개인 결제 상세 팝업
* @param model
* @return IndvdlSetleDtlInqirePopupR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectIndvdlSetleDtlInqire")
public String selectIndvdlSetleDtlInqire(ModelMap model, IndvdlSetleSrchVO indvdlSetleVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
indvdlSetleVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOIndvdlSetleDtlInqire", indvdlSetleVO),
model,
"data"
);
return "mngr/ordr/indvdlSetle/IndvdlSetleDtlInqirePopupR";
}
/**
* 관리자 > 주문 > 개인결제관리 > 개인 결제 등록 화면 이동
* @param model
* @return IndvdlSetleRegistFormC.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectIndvdlSetleRegistForm")
public String selectIndvdlSetleRegistForm(ModelMap model, IndvdlSetleVO indvdlSetleVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
indvdlSetleVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBOIndvdlSetleRegistForm", indvdlSetleVO),
model,
"data"
);
model.addAttribute("paramVO", indvdlSetleVO);
return "mngr/ordr/indvdlSetle/IndvdlSetleRegistFormC";
}
/**
* 관리자 > 주문 > 개인결제관리 > 개인 결제 등록
* @param param
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertIndvdlSetleRegist", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertIndvdlSetleRegist(@RequestBody HashMap<String, Object> param, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
param.put("sopmalCd", authSopmalCd);
//결제플랫폼 구분코드
param.put("deviceType", "P");
log.debug("param.get(deviceType) {}", param.get("deviceType"));
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBOIndvdlSetleRegist", param),
ReplyFromResrc::getReply
);
}
/**
* 관리자 > 주문 > 개인결제관리 > 개인 결제 수정 화면 이동
* @param indvdlSetleVO
* @return IndvdlSetleUpdateFormU.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectIndvdlSetleUpdateForm")
public String selectIndvdlSetleUpdateForm(ModelMap model, IndvdlSetleVO indvdlSetleVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
indvdlSetleVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOIndvdlSetleUpdateForm", indvdlSetleVO),
model,
"data"
);
return "mngr/ordr/indvdlSetle/IndvdlSetleUpdateFormU";
}
/**
* 관리자 > 주문 > 개인결제관리 > 개인 결제 수정
* @param param
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateIndvdlSetleUpdt")
public ResponseEntity<WnbtResponse> updateIndvdlSetleUpdt(@RequestBody HashMap<String, Object> param, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
param.put("sopmalCd", authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBOIndvdlSetleUpdt",param),
ReplyFromResrc::getReply
);
}
/**
* 관리자 > 주문 > 개인결제관리 > 개인 결제 삭제
* @param indvdlSetleVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteIndvdlSetle")
public ResponseEntity<WnbtResponse> updateImprtncOrdrAt(IndvdlSetleVO indvdlSetleVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
indvdlSetleVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/deleteBOIndvdlSetle",indvdlSetleVO),
ReplyFromResrc::getReply
);
}
/**
* 관리자 > 주문 > 개인결제관리 > 개인 결제 링크 발송
* @param indvdlSetleVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertSetleLinkMsg")
public ResponseEntity<WnbtResponse> insertSetleLinkMsg(IndvdlSetleVO indvdlSetleVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
indvdlSetleVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBOSetleLinkMsg",indvdlSetleVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,34 @@
package com.wb.domainserver.domain.mngr.ordr.indvdlSetle.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class IndvdlSetleSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드*/
private String sopmalCd;
/** 주문 고유번호 */
private String ordrInnb;
/** 검색 구분*/
private String srchDvCd;
/** 검색어 */
private String srchStr;
/** 등록일 검색 시작일*/
private String srchStrtRegDt;
/** 등록일 검색 종료일*/
private String srchEndRegDt;
/** 유효기간 검색 시작일*/
private String srchStrtValidDt;
/** 유효기간 검색 종료일*/
private String srchEndValidDt;
}

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