1월21일 작업

This commit is contained in:
pjs
2026-01-21 22:52:20 +09:00
parent 6571d4684a
commit 528c1fcb61
8 changed files with 612 additions and 469 deletions

View File

@@ -12,6 +12,7 @@ import org.springframework.web.servlet.ModelAndView;
import com.madeu.constants.Constants;
import com.madeu.crm.kiosk.dto.ConsentFormDTO;
import com.madeu.crm.kiosk.dto.UserDTO;
import com.madeu.crm.kiosk.service.KioskService;
import com.madeu.init.ManagerDraftAction;
import com.madeu.service.web.webloghistory.WebLogHistoryService;
@@ -205,61 +206,32 @@ public class KioskController extends ManagerDraftAction {
* 고객 등록
*/
@PostMapping("/kiosk/putUser.do")
public HashMap<String, Object> putUser(HttpServletRequest request, HttpServletResponse response) {
public HashMap<String, Object> putUser(@RequestBody UserDTO dto, HttpServletRequest request) {
log.debug("KioskController putUser START");
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
HashMap<String, Object> map = new HashMap<String, Object>();
HashMap<String, Object> resultMap = new HashMap<>();
StringBuffer errorMsg = new StringBuffer();
try {
paramMap.put("loginMemberId", "customer");
paramMap.put("regId", "customer");
paramMap.put("modId", "customer");
map = kioskService.putUser(paramMap);
// DTO에 직접 필요한 공통 정보 세팅
dto.setRegId("customer");
dto.setModId("customer");
dto.setMuUserId("U");
// DTO를 직접 서비스로 전달 (Service 인터페이스도 UserDTO를 받도록 수정 필요)
resultMap = kioskService.putUser(dto);
} catch (Exception e) {
e.printStackTrace();
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "서버 오류가 발생했습니다.");
log.error("Error inserting user", e);
resultMap.put("msgCode", Constants.FAIL);
resultMap.put("msgDesc", "서버 오류가 발생했습니다.");
errorMsg.append(e.getMessage());
} finally {
if (Constants.OK != map.get("msgCode")) {
map.put("msgCode", Constants.FAIL);
map.put("success", false);
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
}
}
// 로그 기록
try {
HashMap<String, Object> visitLogParamMap = RequestLogUtil.getVisitLogParameterMap(request);
HashMap<String, Object> insertMap = new HashMap<String, Object>();
insertMap.put("url", "/kiosk/putUser.do");
insertMap.put("func", "putUser");
insertMap.put("funcName", "고객 등록");
insertMap.put("service", "kioskService");
insertMap.put("serviceName", "고객 등록");
insertMap.put("requestValue", String.valueOf(paramMap));
insertMap.put("responseValue", String.valueOf(map));
insertMap.put("tId", map.get("tId"));
if (("").equals(String.valueOf(errorMsg)) || null == (String.valueOf(errorMsg))
|| 0 == String.valueOf(errorMsg).length()) {
insertMap.put("resultCode", "SUCCESS");
} else {
insertMap.put("resultCode", "ERROR");
}
insertMap.put("resultMsg", String.valueOf(errorMsg));
insertMap.put("muMemberId", "customer");
webLogHistoryService.insertLogHistory(insertMap, visitLogParamMap);
} catch (Exception e) {
e.printStackTrace();
}
// 결과 처리 및 로그 기록 (기존과 동일)
processFinalResult(resultMap, dto, errorMsg, request);
}
log.debug("KioskController putUser END");
return map;
return resultMap;
}
/**
@@ -437,4 +409,55 @@ public class KioskController extends ManagerDraftAction {
log.debug("KioskController getReserveUserOptionList END");
return map;
}
/**
* 결과 처리 및 공통 응답 포맷 정리, 로그 기록 준비 메서드
*/
private void processFinalResult(HashMap<String, Object> resultMap, UserDTO dto, StringBuffer errorMsg, HttpServletRequest request) {
// 1. 결과 코드에 따른 성공 여부 및 기본 메시지 설정
if (!Constants.OK.equals(resultMap.get("msgCode"))) {
resultMap.put("msgCode", Constants.FAIL);
resultMap.put("success", false);
if (null == resultMap.get("msgDesc") || "".equals(resultMap.get("msgDesc"))) {
resultMap.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
}
} else {
resultMap.put("success", true);
if (null == resultMap.get("msgDesc") || "".equals(resultMap.get("msgDesc"))) {
resultMap.put("msgDesc", "성공적으로 등록되었습니다.");
}
}
// 2. 웹 로그 기록 (비동기 또는 서비스 호출)
try {
HashMap<String, Object> visitLogParamMap = RequestLogUtil.getVisitLogParameterMap(request);
HashMap<String, Object> insertMap = new HashMap<String, Object>();
insertMap.put("url", "/kiosk/putUser.do");
insertMap.put("func", "putUser");
insertMap.put("funcName", "고객 등록");
insertMap.put("service", "kioskService");
insertMap.put("serviceName", "고객 등록");
// DTO의 toString()을 사용하여 요청 파라미터 기록
insertMap.put("requestValue", dto != null ? dto.toString() : "NULL");
insertMap.put("responseValue", String.valueOf(resultMap));
insertMap.put("tId", resultMap.get("tId"));
if (errorMsg.length() == 0) {
insertMap.put("resultCode", "SUCCESS");
} else {
insertMap.put("resultCode", "ERROR");
}
insertMap.put("resultMsg", errorMsg.toString());
insertMap.put("muMemberId", "customer");
// 로그 서비스 호출
webLogHistoryService.insertLogHistory(insertMap, visitLogParamMap);
} catch (Exception e) {
log.error("Log History Insertion Error: ", e);
// 로그 기록 실패가 비즈니스 로직에 영향을 주지 않도록 내부에서 예외 처리
}
}
}

View File

@@ -0,0 +1,48 @@
package com.madeu.crm.kiosk.dto;
import java.util.Map;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class UserDTO {
// MyBatis mapping 필드
private String muUserId; // 유저 ID 생성용 접두어
private String userName; // 고객명
private String nationality; // 국적 아이템 코드
private String nationalityCode; // 국적 카테고리 코드 (C202404110001)
private String birthday; // 생년월일 (YYYYMMDD)
private String gender; // 성별 (M/F)
private String userRrn1; // 주민번호 앞자리
private String userRrn2; // 주민번호 뒷자리
private String userPno; // 여권번호
private String userArc1; // 외국인등록번호 앞자리 (필요시)
private String userArc2; // 외국인등록번호 뒷자리 (필요시)
private String userType; // 고객타입 아이템 코드
private String userTypeCode; // 고객타입 카테고리 코드
private String phoneNumber; // 연락처
private String phoneNumber2; // 보조 연락처
private String muGroupId; // 그룹 ID
private String channel; // 방문경로 아이템 코드
private String channelCode; // 방문경로 카테고리 코드 (C202404110003)
private String introUserId; // 추천인 고객 ID (텍스트 입력값)
private String introMemberId; // 추천직원 ID
private String etc; // 특이사항
private String memo; // 메모
private String smsYn; // SMS 수신여부 (Y/N)
private String refusePhotoYn; // 사진촬영동의여부 (Y/N)
private String remark; // 비고
private String regId; // 등록자 ID
private String modId; // 수정자 ID
private String address;
private String addressDtl;
private String email;
private String introName;
private Map<String, Object> userNumber;
// 서명 데이터 (Base64)
private String signatureData;
}

View File

@@ -2,8 +2,11 @@ package com.madeu.crm.kiosk.map;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import com.madeu.crm.kiosk.dto.ConsentFormDTO;
import com.madeu.crm.kiosk.dto.UserDTO;
@Mapper
public interface KioskMAP {
@@ -42,4 +45,6 @@ public interface KioskMAP {
// 예약 고객 옵션 리스트
List<Map<String, Object>> getReserveUserOptionList(Map<String, Object> paramMap);
int insertUser(UserDTO dto);
}

View File

@@ -1,8 +1,8 @@
package com.madeu.crm.kiosk.service;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -12,7 +12,9 @@ import org.springframework.stereotype.Service;
import com.madeu.constants.Constants;
import com.madeu.crm.kiosk.dto.ConsentFormDTO;
import com.madeu.crm.kiosk.dto.UserDTO;
import com.madeu.crm.kiosk.map.KioskMAP;
import com.madeu.dao.web.webuser.WebUserSqlMapDAO;
import com.madeu.util.ValidationCheckUtil;
import lombok.extern.slf4j.Slf4j;
@@ -23,7 +25,9 @@ public class KioskService {
@Autowired
private KioskMAP kioskMAP; // 인터페이스 기반 Mapper 주입
@Autowired
private WebUserSqlMapDAO webUserSqlMapDAO;
/**
* 진료 리스트 조회 (option)
*/
@@ -95,33 +99,68 @@ public class KioskService {
/**
* 고객 등록
*/
public HashMap<String, Object> putUser(HashMap<String, Object> paramMap) throws Exception {
public HashMap<String, Object> putUser(UserDTO dto) throws Exception {
HashMap<String, Object> map = new HashMap<String, Object>();
try {
boolean check = true;
String tId = String.valueOf(System.currentTimeMillis());
// 유효성 검사 로직
if(!ValidationCheckUtil.emptyCheck(String.valueOf(paramMap.get("nationality")))) {
// 1. DTO 필드를 이용한 유효성 검사 로직
if(!ValidationCheckUtil.emptyCheck(dto.getNationality())) {
check = false; map.put("msgCode", Constants.FAIL); map.put("msgDesc","국적 정보가 없습니다.");
} else if(!ValidationCheckUtil.emptyCheck(String.valueOf(paramMap.get("userName")))) {
} else if(!ValidationCheckUtil.emptyCheck(dto.getUserName())) {
check = false; map.put("msgCode", Constants.FAIL); map.put("msgDesc","고객 성함 정보가 없습니다.");
} else if(!ValidationCheckUtil.nickNameCheck(String.valueOf(paramMap.get("userName")))) {
} else if(!ValidationCheckUtil.nickNameCheck(dto.getUserName())) {
check = false; map.put("msgCode", Constants.FAIL); map.put("msgDesc","유효하지 않은 이름 형식입니다.");
} else if(!ValidationCheckUtil.phoneNumberCheck(String.valueOf(paramMap.get("phoneNumber")))) {
} else if(!ValidationCheckUtil.phoneNumberCheck(dto.getPhoneNumber())) {
check = false; map.put("msgCode", Constants.FAIL); map.put("msgDesc","유효하지 않은 전화번호 형식입니다.");
}
if(check) {
String muUserId = ("U").concat(String.valueOf(System.currentTimeMillis()));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
paramMap.put("muUserId", muUserId);
paramMap.put("tId", tId);
paramMap.put("tDate", sdf.format(Calendar.getInstance().getTime()));
String muUserId = ("U").concat(String.valueOf(System.currentTimeMillis()));
// 2. DTO에 필요한 추가 정보 세팅 (Setter 활용)
// muUserId는 매퍼의 selectKey에서 생성되지만, 접두어 등이 필요하다면 세팅
dto.setMuUserId(muUserId);
kioskMAP.putUser(paramMap);
// tId 등 로그용 데이터가 DTO에 필드로 정의되어 있다면 세팅,
// 없다면 결과 map에만 담아서 리턴
map.put("tId", tId);
// 3. MyBatis 매퍼 호출 (DTO 객체 자체를 전달)
kioskMAP.insertUser(dto);
//A: 개인정보수집및이용안내
//B: 메이드유시술동의서
//C: 이용약관동의서
//G: 사진촬영거부동의서
String[] types = {"A","B","C","G"};
HashMap<String, Object> consentFormMap = new HashMap<>();
for (String type : types) {
String muUserAgreementId = ("UA").concat(String.valueOf(System.currentTimeMillis()));
consentFormMap.put("muUserAgreementId", muUserAgreementId);
consentFormMap.put("muUserId", dto.getUserNumber().get("id"));
consentFormMap.put("userName", dto.getUserName());
consentFormMap.put("type", type);
consentFormMap.put("renewalCycle", 12);
LocalDateTime oneYearLater = LocalDateTime.now().plusYears(1);
// MariaDB DATETIME 표준 형식 (YYYY-MM-DD HH:mm:ss)
String expirationDate = oneYearLater.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
consentFormMap.put("expirationDate", expirationDate);
consentFormMap.put("cdnUrl", "-");
consentFormMap.put("filePath", "-");
consentFormMap.put("fileName", "-");
consentFormMap.put("originalFileName", "-");
consentFormMap.put("loginMemberId", "kiosk");
webUserSqlMapDAO.insertUserAgreement(consentFormMap);
}
map.put("msgCode", Constants.OK);
map.put("msgDesc", "등록되었습니다.");
}