메일작성 변경
This commit is contained in:
@@ -2125,6 +2125,115 @@ public class ContractMgmtController {
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 견적서 메일 작성 팝업
|
||||
* @param request
|
||||
* @param paramMap - contractObjId
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/contractMgmt/estimateMailFormPopup.do")
|
||||
public String estimateMailFormPopup(HttpServletRequest request, @RequestParam Map paramMap){
|
||||
return "/contractMgmt/estimateMailFormPopup";
|
||||
}
|
||||
|
||||
/**
|
||||
* 계약 정보 조회 (메일 발송용) (AJAX)
|
||||
* @param request
|
||||
* @param paramMap - objId (CONTRACT_OBJID)
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping(value="/contractMgmt/getContractInfoForMail.do", method=RequestMethod.POST)
|
||||
public Map getContractInfoForMail(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
|
||||
try {
|
||||
String objId = CommonUtils.checkNull(paramMap.get("objId"));
|
||||
|
||||
if("".equals(objId)){
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "계약 OBJID가 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 계약 정보 조회
|
||||
Map contractInfo = contractMgmtService.getContractInfoForMail(paramMap);
|
||||
|
||||
if(contractInfo != null && !contractInfo.isEmpty()){
|
||||
// Map 키를 대문자로 변환
|
||||
contractInfo = CommonUtils.toUpperCaseMapKey(contractInfo);
|
||||
|
||||
resultMap.put("result", "success");
|
||||
resultMap.put("contractInfo", contractInfo);
|
||||
} else {
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "계약 정보를 찾을 수 없습니다.");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "계약 정보 조회 중 오류가 발생했습니다: " + e.getMessage());
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 견적서 메일 발송 (커스텀) (AJAX)
|
||||
* @param request
|
||||
* @param paramMap - objId, pdfSessionId, toEmails, ccEmails, subject, contents
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping(value="/contractMgmt/sendEstimateMailCustom.do", method=RequestMethod.POST)
|
||||
public Map sendEstimateMailCustom(HttpServletRequest request,
|
||||
@RequestParam Map<String, Object> paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
|
||||
try {
|
||||
String objId = CommonUtils.checkNull(paramMap.get("objId"));
|
||||
String toEmails = CommonUtils.checkNull(paramMap.get("toEmails"));
|
||||
String subject = CommonUtils.checkNull(paramMap.get("subject"));
|
||||
String contents = CommonUtils.checkNull(paramMap.get("contents"));
|
||||
|
||||
// 필수 파라미터 검증
|
||||
if("".equals(objId)){
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "계약 OBJID가 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
if("".equals(toEmails)){
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "수신인이 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
if("".equals(subject)){
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "제목이 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
if("".equals(contents)){
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "내용이 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 메일 발송 서비스 호출
|
||||
resultMap = contractMgmtService.sendEstimateMailCustom(request, paramMap);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "메일 발송 중 오류가 발생했습니다: " + e.getMessage());
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 주문서관리 리스트
|
||||
|
||||
@@ -2694,4 +2694,177 @@ private String encodeImageToBase64(String imagePath) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 계약 정보 조회 (메일 발송용)
|
||||
* @param paramMap - objId (CONTRACT_OBJID)
|
||||
* @return
|
||||
*/
|
||||
public Map getContractInfoForMail(Map paramMap) {
|
||||
SqlSession sqlSession = null;
|
||||
Map contractInfo = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
contractInfo = (Map) sqlSession.selectOne("contractMgmt.getContractInfoForMail", paramMap);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return contractInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 견적서 메일 발송 (커스텀)
|
||||
* @param request
|
||||
* @param paramMap - objId, pdfSessionId, toEmails, ccEmails, subject, contents
|
||||
* @return
|
||||
*/
|
||||
public Map sendEstimateMailCustom(HttpServletRequest request, Map paramMap) {
|
||||
Map resultMap = new HashMap();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
|
||||
String objId = CommonUtils.checkNull(paramMap.get("objId"));
|
||||
String toEmailsStr = CommonUtils.checkNull(paramMap.get("toEmails"));
|
||||
String ccEmailsStr = CommonUtils.checkNull(paramMap.get("ccEmails"));
|
||||
String subject = CommonUtils.checkNull(paramMap.get("subject"));
|
||||
String contents = CommonUtils.checkNull(paramMap.get("contents"));
|
||||
String pdfSessionId = CommonUtils.checkNull(paramMap.get("pdfSessionId"));
|
||||
|
||||
// 1. 계약 정보 조회
|
||||
Map contractInfo = (Map) sqlSession.selectOne("contractMgmt.getContractInfoForMail", paramMap);
|
||||
if(contractInfo == null || contractInfo.isEmpty()) {
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "계약 정보를 찾을 수 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 2. 최종 차수 견적서 조회
|
||||
Map estimateTemplate = (Map) sqlSession.selectOne("contractMgmt.getLatestEstimateTemplate", paramMap);
|
||||
if(estimateTemplate == null || estimateTemplate.isEmpty()) {
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "견적서를 찾을 수 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 3. 수신인 이메일 리스트 생성
|
||||
ArrayList<String> toEmailList = new ArrayList<String>();
|
||||
if(!"".equals(toEmailsStr)) {
|
||||
String[] toEmails = toEmailsStr.split(",");
|
||||
for(String email : toEmails) {
|
||||
String trimmedEmail = email.trim();
|
||||
if(!"".equals(trimmedEmail)) {
|
||||
toEmailList.add(trimmedEmail);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(toEmailList.isEmpty()) {
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "수신인 이메일이 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 4. 참조 이메일 리스트 생성
|
||||
ArrayList<String> ccEmailList = new ArrayList<String>();
|
||||
|
||||
// 작성자 이메일 자동 추가
|
||||
String writerEmail = CommonUtils.checkNull(contractInfo.get("writer_email"));
|
||||
if("".equals(writerEmail)) writerEmail = CommonUtils.checkNull(contractInfo.get("WRITER_EMAIL"));
|
||||
if(!"".equals(writerEmail)) {
|
||||
ccEmailList.add(writerEmail);
|
||||
}
|
||||
|
||||
// 사용자가 입력한 참조 이메일 추가
|
||||
if(!"".equals(ccEmailsStr)) {
|
||||
String[] ccEmails = ccEmailsStr.split(",");
|
||||
for(String email : ccEmails) {
|
||||
String trimmedEmail = email.trim();
|
||||
if(!"".equals(trimmedEmail) && !ccEmailList.contains(trimmedEmail)) {
|
||||
ccEmailList.add(trimmedEmail);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 5. PDF 파일 처리
|
||||
ArrayList<HashMap> attachFileList = new ArrayList<HashMap>();
|
||||
if(!"".equals(pdfSessionId)) {
|
||||
File pdfFile = getPdfFromSession(pdfSessionId, estimateTemplate);
|
||||
if(pdfFile != null && pdfFile.exists()) {
|
||||
HashMap<String, String> fileMap = new HashMap<String, String>();
|
||||
fileMap.put(Constants.Db.COL_FILE_REAL_NAME, pdfFile.getName());
|
||||
fileMap.put(Constants.Db.COL_FILE_SAVED_NAME, pdfFile.getName());
|
||||
fileMap.put(Constants.Db.COL_FILE_PATH, pdfFile.getParent());
|
||||
attachFileList.add(fileMap);
|
||||
|
||||
System.out.println("PDF 파일 첨부 완료: " + pdfFile.getAbsolutePath());
|
||||
} else {
|
||||
System.out.println("PDF 파일을 찾을 수 없습니다: " + pdfSessionId);
|
||||
}
|
||||
}
|
||||
|
||||
// 6. 메일 발송
|
||||
PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN);
|
||||
String fromUserId = person.getUserId();
|
||||
|
||||
System.out.println("===== 커스텀 메일 발송 시도 =====");
|
||||
System.out.println("From UserId: " + fromUserId);
|
||||
System.out.println("To Email: " + toEmailList);
|
||||
System.out.println("CC Email: " + ccEmailList);
|
||||
System.out.println("Subject: " + subject);
|
||||
System.out.println("첨부파일 개수: " + attachFileList.size());
|
||||
System.out.println("================================");
|
||||
|
||||
// HTML 형식으로 내용 변환 (줄바꿈 처리)
|
||||
String htmlContents = contents.replace("\n", "<br/>");
|
||||
|
||||
boolean mailSent = false;
|
||||
try {
|
||||
mailSent = MailUtil.sendMailWithAttachFileUTF8(
|
||||
fromUserId,
|
||||
null, // fromEmail (자동으로 SMTP 설정 사용)
|
||||
new ArrayList<String>(), // toUserIdList (빈 리스트)
|
||||
toEmailList,
|
||||
ccEmailList,
|
||||
new ArrayList<String>(), // bccEmailList (빈 리스트)
|
||||
null, // important
|
||||
subject,
|
||||
htmlContents,
|
||||
attachFileList.size() > 0 ? attachFileList : null,
|
||||
"CONTRACT_ESTIMATE"
|
||||
);
|
||||
|
||||
System.out.println("메일 발송 결과: " + mailSent);
|
||||
|
||||
} catch(Exception mailEx) {
|
||||
System.out.println("메일 발송 중 예외 발생: " + mailEx.getMessage());
|
||||
mailEx.printStackTrace();
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "메일 발송 중 예외가 발생했습니다: " + mailEx.getMessage());
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
if(mailSent) {
|
||||
resultMap.put("result", "success");
|
||||
resultMap.put("message", "견적서가 성공적으로 발송되었습니다.");
|
||||
} else {
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "메일 발송에 실패했습니다.");
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "메일 발송 중 오류가 발생했습니다: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user