package com.pms.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.session.SqlSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.pms.common.SqlMapConfig; import com.pms.common.bean.PersonBean; import com.pms.common.utils.CommonUtils; import com.pms.common.utils.Constants; import com.pms.common.utils.MailUtil; import com.pms.salesmgmt.service.SalesMngService; @Service public class ApprovalService { @Autowired CommonService commonService; @Autowired SalesMngService salesMngService; @Autowired PurchaseOrderService purchaseOrderService; /** *
	 * targetObjId를 통해 등록된 approval이 있는지 체크한다.
	 * 있다면 해당 approval object id를 리턴.
	 * 없다면 approval을 생성 후, object id를 리턴.
	 * 
	 * transaction 관리대상.
	 * 
* @param sqlSession * @param paramMap * @return approval의 object id * @throws Exception */ public String checkApprovalObjId(SqlSession sqlSession, Map paramMap)throws Exception{ String result = ""; Map map = sqlSession.selectOne("approval.selectApprovalInfo", paramMap); if(map != null) result = CommonUtils.checkNull(map.get("OBJID")); if("".equals(result)){ result = CommonUtils.createObjId(); paramMap.put("objId", result); paramMap.put("systemType", Constants.SYSTEM_NAME); sqlSession.insert("approval.insertApprovalInfo", paramMap); } paramMap.put("approvalObjId", result); return result; } public Map getLastApprovalInfo(SqlSession sqlSession, Map paramMap)throws Exception{ paramMap.put("search_type", "last"); Map map = sqlSession.selectOne("approval.selectApprovalInfo", paramMap); return map; } /** *
	 * Route 신규 생성
	 * 반려 후, 생성이 될 수 있으니 Approval의 상태값을 inProcess로 변경.
	 * paramMap의 approvalObjId가 필요함.
	 * 
	 * transaction 관리대상.
	 * 
* @param sqlSession * @param paramMap * @return route의 object id * @throws Exception */ public String createRouteInfo(SqlSession sqlSession, Map paramMap)throws Exception{ String result = ""; //1. Approval의 status를 inProcess로 변경. Map approvalParamMap = new HashMap(); approvalParamMap.put("approvalObjId", CommonUtils.checkNull(paramMap.get("approvalObjId"))); approvalParamMap.put("status", "inProcess"); sqlSession.update("approval.changeApprovalStatus", approvalParamMap); //2. route 생성 result = CommonUtils.checkNull(CommonUtils.createObjId()); paramMap.put("routeObjId", result); paramMap.put("systemType", Constants.SYSTEM_NAME); sqlSession.insert("approval.createRouteInfo", paramMap); return result; } public void createApprovalTagetInfo(SqlSession sqlSession, Map paramMap, String targetObjIdsArr [])throws Exception{ if(!CommonUtils.isEmpty(targetObjIdsArr) && targetObjIdsArr.length > 0) { Map dupCheckMap = new HashMap(); for (String targetObjId : targetObjIdsArr) { if(StringUtils.isNotBlank(targetObjId) && !dupCheckMap.containsKey(targetObjId)) { //중복제거 dupCheckMap.put(targetObjId, ""); //1. APPROVAL_TARGET 생성 String objid = CommonUtils.checkNull(CommonUtils.createObjId()); paramMap.put("objId", objid); paramMap.put("targetObjId", targetObjId); //paramMap.put("systemType", Constants.SYSTEM_NAME); sqlSession.insert("approval.createApprovalTagetInfo", paramMap); } } } } /** *
	 * Inboxtask 신규 생성
	 * 
	 * transaction 관리대상.
	 * 
* @param sqlSession * @param paramMap * @param normalArr * @param helpArr * @param refArr * @return * @throws Exception */ public boolean createInboxTask(SqlSession sqlSession, Map paramMap, List normalArr, List helpArr, List refArr)throws Exception{ boolean result = false; int idx = 0; for(String targetUserId : normalArr){ idx++; paramMap.put("inboxTaskObjId", CommonUtils.createObjId()); paramMap.put("seq", idx); paramMap.put("approvalType", "normal"); if(idx == 1){ paramMap.put("status", "ready"); //EO 결재 상신(최초) 시 결재구분 일반 중 첫번째 인원에게 메일을 발송한다. String targetType = CommonUtils.checkNull(paramMap.get("targetType")); System.out.println("createInboxTask(paramMap):"+paramMap); if("EO".equals(targetType)){ System.out.println("createInboxTask(idx):"+idx); System.out.println("createInboxTask(targetUserId):"+targetUserId); approvalEODistribute(sqlSession, paramMap,targetUserId); } }else{ paramMap.put("status", "standby"); } paramMap.put("targetUserId", targetUserId); sqlSession.insert("approval.createInboxTaskInfo", paramMap); } for(String targetUserId : helpArr){ if(!"null".equals(targetUserId)){ paramMap.put("inboxTaskObjId", CommonUtils.createObjId()); paramMap.put("seq", 0); paramMap.put("approvalType", "help"); paramMap.put("status", "ready"); paramMap.put("targetUserId", targetUserId); sqlSession.insert("approval.createInboxTaskInfo", paramMap); } } for(String targetUserId : refArr){ if(!"null".equals(targetUserId)){ paramMap.put("inboxTaskObjId", CommonUtils.createObjId()); paramMap.put("seq", 0); paramMap.put("approvalType", "ref"); paramMap.put("status", "complete"); paramMap.put("targetUserId", targetUserId); sqlSession.insert("approval.createInboxTaskInfo", paramMap); } } result = true; return result; } /** * 결재함 목록 조회 * @param paramMap * @return */ public ArrayList getApprovalList(HttpServletRequest request, Map paramMap){ ArrayList> resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ String countPerPage = CommonUtils.checkNull(request.getParameter("countPerPage"), Constants.ADMIN_COUNT_PER_PAGE+""); paramMap.put("COUNT_PER_PAGE", Integer.parseInt(countPerPage)); //접속자 정보 등록 HttpSession session = request.getSession(); PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN); String connectUserId = CommonUtils.checkNull(person.getUserId()); paramMap.put("connectUserId", connectUserId); paramMap.put("systemType", Constants.SYSTEM_NAME); Map pageMap = (HashMap)sqlSession.selectOne("approval.selectApprovalListCnt", paramMap); pageMap = (HashMap)CommonUtils.setPagingInfo(request, pageMap); System.out.println("pageMap : "+pageMap); paramMap.put("PAGE_END", CommonUtils.checkNull(pageMap.get("PAGE_END"))); paramMap.put("PAGE_START", CommonUtils.checkNull(pageMap.get("PAGE_START"))); resultList = (ArrayList)sqlSession.selectList("approval.selectApprovalList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultList); } /** * approvalObjId를 통해 route 목록을 조회한다. * @param paramMap * @return */ public List getRouteList(Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ resultList = (ArrayList)sqlSession.selectList("approval.getRouteList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * routeObjId를 통해 route 정보를 조회한다. * @param paramMap * @return */ public Map getRouteInfo(Map paramMap){ Map resultMap = new HashMap(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ resultMap = (HashMap)sqlSession.selectOne("approval.getRouteInfo", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultMap; } /** * route별 inboxtask 목록을 조회한다. * @param paramMap * @return */ public List getInboxtaskList(Map paramMap){ List resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ resultList = (ArrayList)sqlSession.selectList("approval.selectInboxtaskList", paramMap); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return resultList; } /** * 담당자 결재 처리 * @param sqlSession * @param paramMap */ public void setApprovalResult(SqlSession sqlSession, Map paramMap){ String result = CommonUtils.checkNull(paramMap.get("result")); String status = ""; if("Y".equals(result)) status = "complete"; else if("N".equals(result)) status = "reject"; else status = "cancel"; paramMap.put("status", status); System.out.println("setApprovalResult.paramMap : "+paramMap); sqlSession.update("approval.setInboxtaskResult", paramMap); //다음순번의 결재자에게 메일발송 (개발필요) 반려가 되었을경우는 다른 함수에서 처리. } /** * 승인일 경우 다음 결재자가 있는지 확인 후, 다음 결재자의 상태를 ready로 변경한다. * @param sqlSession * @param paramMap */ public void changeNextApprovalStatus(SqlSession sqlSession, Map paramMap){ int nextSeq = Integer.parseInt(CommonUtils.checkNull(paramMap.get("seq"), "0"))+1; paramMap.put("nextSeq", nextSeq); Map map = sqlSession.selectOne("approval.getNextApprovalObjId", paramMap); map = CommonUtils.toUpperCaseMapKey(map); System.out.println("changeNextApprovalStatus(map):"+map); if(map != null && !map.isEmpty()){ String nextInboxtaskObjId = CommonUtils.checkNull(map.get("INBOXTASK_OBJID")); sqlSession.update("approval.setNextInboxtaskStatus", nextInboxtaskObjId); Map targetMap = sqlSession.selectOne("approval.getTargetType", paramMap); String targetType = CommonUtils.checkNull(targetMap.get("TARGET_TYPE")); String nextUserId = CommonUtils.checkNull(map.get("TARGET_USER_ID")); String targetObjId = CommonUtils.checkNull(map.get("TARGET_OBJID")); String sendEmail = CommonUtils.checkNull(map.get("EMAIL")); System.out.println("changeNextApprovalStatus(targetMap):"+targetMap); String mailTitle = ""; if("EO".equals(targetType)){ HashMap eoParamMap = new HashMap(); eoParamMap.put("routeObjId", CommonUtils.checkNull(paramMap.get("routeObjId"))); eoParamMap.put("targetObjId", targetObjId); eoParamMap.put("status", "ready"); approvalEODistribute(sqlSession, eoParamMap, nextUserId); }else if("EXPENSE_APPLY".equals(targetType)){ //경비신청 mailTitle = "[경비신청서 결재요청] 1건이 발생했습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", nextUserId, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("ISSUE_RELEASE".equals(targetType)){ //통합문제점 mailTitle = "[문제점개선대책서 결재요청] 1건이 발생했습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", nextUserId, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("MATERIAL_APPLY".equals(targetType)){ //메일발송 mailTitle = "[발주서 결재요청] 1건이 발생했습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", nextUserId, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("MATERIAL_SORTAPPLY".equals(targetType)){ //메일발송 mailTitle = "[발주서 결재요청] 1건이 발생했습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", nextUserId, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); } } } /** * 승인일 경우 다음 결재자가 있는지 확인 후, 다음 결재자에게 메일을 발송한다. * @param sqlSession * @param paramMap */ public void SendMailNextApproval(SqlSession sqlSession, Map paramMap){ int nextSeq = Integer.parseInt(CommonUtils.checkNull(paramMap.get("seq"), "0"))+1; paramMap.put("nextSeq", nextSeq); Map map = sqlSession.selectOne("approval.getNextApprovalObjId", paramMap); System.out.println("changeNextApprovalStatus(map):"+map); if(map != null && !map.isEmpty()){ String nextInboxtaskObjId = CommonUtils.checkNull(map.get("INBOXTASK_OBJID")); sqlSession.update("approval.setNextInboxtaskStatus", nextInboxtaskObjId); Map targetMap = sqlSession.selectOne("approval.getTargetType", paramMap); String targetType = CommonUtils.checkNull(targetMap.get("TARGET_TYPE")); String nextUserId = CommonUtils.checkNull(map.get("TARGET_USER_ID")); String targetObjId = CommonUtils.checkNull(map.get("TARGET_OBJID")); //EO 경우 다음 결재진행자에게 EO 갑지내용으로 메일을 발송한다. System.out.println("changeNextApprovalStatus(targetMap):"+targetMap); if("EO".equals(targetType)){ HashMap eoParamMap = new HashMap(); eoParamMap.put("routeObjId", CommonUtils.checkNull(paramMap.get("routeObjId"))); eoParamMap.put("targetObjId", targetObjId); eoParamMap.put("status", "ready"); approvalEODistribute(sqlSession, eoParamMap, nextUserId); } } } /** * Route의 모든 결재자가 결재처리되었는지 확인 후, Route의 상태를 complete로 변경한다. * approval도 종결시킨다. * @param sqlSession * @param paramMap */ public void completeRouteInfo(SqlSession sqlSession, Map paramMap){ Map map = sqlSession.selectOne("approval.getNotCompleteInboxtaskCnt", paramMap); map = CommonUtils.toUpperCaseMapKey(map); int cnt = Integer.parseInt(CommonUtils.checkNull(map.get("CNT"), "0")); //ready나 standby인 상태값이 하나도 없다면 route, approval을 종결시킨다. if(cnt == 0){ Map sqlParamMap = new HashMap(); sqlParamMap.put("completeStatus", "complete"); sqlParamMap.put("routeObjId", CommonUtils.checkNull(paramMap.get("routeObjId"))); sqlSession.update("approval.completeRoute", sqlParamMap); //approval 종결 sqlSession.update("approval.completeApproval", paramMap); HashMap routeSqlParamMap = new HashMap(); routeSqlParamMap.put("routeObjId", CommonUtils.checkNull(paramMap.get("routeObjId"))); Map routeMap = sqlSession.selectOne("approval.getRouteInfo", routeSqlParamMap); routeMap = CommonUtils.toUpperCaseMapKey(routeMap); //targetType을 가져와서 상태값 처리(PDM은 EO밖에 없음.) Map targetMap = sqlSession.selectOne("approval.getTargetType", paramMap); targetMap = CommonUtils.toUpperCaseMapKey(targetMap); String targetType = CommonUtils.checkNull(targetMap.get("TARGET_TYPE")); String targetObjId = CommonUtils.checkNull(targetMap.get("TARGET_OBJID")); String writer = CommonUtils.checkNull(routeMap.get("WRITER")); String sendEmail = CommonUtils.checkNull(routeMap.get("EMAIL")); String mailTitle = ""; //route와 approval이 종결되었다고 알림메일 발송(개발필요) if("EO".equals(targetType)){ //EO targetMap.put("routeObjId", CommonUtils.checkNull(paramMap.get("routeObjId"))); targetMap.put("resultMessage", CommonUtils.checkNull(paramMap.get("resultMessage"))); targetMap.put("status", "release"); targetMap.put("targetObjId", targetObjId); sqlSession.update("approval.changeEOStatus", targetMap); approvalEODistribute(sqlSession, targetMap, writer); }else if("PROBLEM".equals(targetType)){ //통합문제점 targetMap.put("status", "release"); targetMap.put("targetObjId", targetObjId); sqlSession.update("approval.changeProblemApprovalStatus", targetMap); }else if("EXPENSE_APPLY".equals(targetType)){ //경비신청 mailTitle = "[경비신청서 결재완료]결재가 완료 되었습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", writer, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("ISSUE_RELEASE".equals(targetType)){ //통합문제점 targetMap.put("status", "WPS01100"); targetMap.put("targetObjId", targetObjId); sqlSession.update("approval.changeIssueMgmtApprovalStatus", targetMap); mailTitle = "[문제점개선대책서 결재완료]결재가 완료 되었습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", writer, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("MATERIAL_APPLY".equals(targetType)){ //발주서작성 Map materMap = sqlSession.selectOne("approval.getmaterstatus", targetMap); String STATUS_CD = CommonUtils.checkNull(materMap.get("STATUS_CD")); if("PURSTCD00200".equals(STATUS_CD)){ targetMap.put("status", "PURSTCD00300"); }else if("PURSTCD00500".equals(STATUS_CD)){ targetMap.put("status", "PURSTCD00600"); } targetMap.put("targetObjId", targetObjId); sqlSession.update("approval.changeMaterApprovalStatus", targetMap); mailTitle = "[발주서 결재완료]결재가 완료 되었습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", writer, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("MATERIAL_SORTAPPLY".equals(targetType)){ //발주서작성 targetMap.put("status", "PURSTCD00600"); targetMap.put("targetObjId", targetObjId); sqlSession.update("approval.changeMaterApprovalStatus", targetMap); mailTitle = "[발주서 결재완료]결재가 완료 되었습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", writer, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("USED_MNG".equals(targetType)){ //중고관리 targetMap.put("targetObjId", targetObjId); targetMap.put("statusName", "결재완료"); targetMap.put("statusCommCD", Constants.USED_MNG_STATUS_CD); sqlSession.update("approval.changeUsedMngApprovalStatus", targetMap); }else if("CUSTOMER_MNG".equals(targetType)){ //중고관리 targetMap.put("targetObjId", targetObjId); targetMap.put("statusName", "결재완료"); targetMap.put("statusCommCD", Constants.CUSTOMER_MNG_STATUS_CD); sqlSession.update("approval.changeCustomerMngApprovalStatus", targetMap); }else if("CHECK_REPORT_MNG".equals(targetType)){ //검수관리 targetMap.put("targetObjId", targetObjId); targetMap.put("status", "approvalComplete"); sqlSession.update("approval.checkReportMngApprovalStatus", targetMap); }else if("EO_MNG".equals(targetType)){ //EO 등록 targetMap.put("targetObjId", targetObjId); targetMap.put("status", "approvalComplete"); targetMap.put("writer", writer); sqlSession.update("approval.eoMngApprovalStatus", targetMap); // 결제완료시 eo mng 의 reg date를 now()로 업데이트 , eo date sqlSession.update("eoMng.changeEOEDITDate", targetMap); // 결제완료시 part mng 의 eo를 현재 편집중인 eo로 업데이트 , eo date sqlSession.update("eoMng.changePartEO", targetMap); }else if("MOLD_DEV_REQUEST".equals(targetType)){ //금형제작의뢰 targetMap.put("targetObjId", targetObjId); targetMap.put("status", "approvalComplete"); sqlSession.update("approval.moldDevRequestApprovalStatus", targetMap); }else if("ECR_MNG".equals(targetType)){ //ECR sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "0000102"); sqlSession.update("approval.EcrMngApprovalStatus", sqlParamMap); }else if("AS_MNG".equals(targetType)){ //ECR sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "0000102"); sqlSession.update("approval.ASMngApprovalStatus", sqlParamMap); }else if("CSM".equals(targetType)){ //customer_service_mgmt sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "0000102"); sqlSession.update("approval.CSMApprovalStatus", sqlParamMap); }else if("SALES_REQUEST".equals(targetType)){ //구매의뢰 sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "approvalComplete"); sqlSession.update("approval.salesRequestApprovalStatus", sqlParamMap); salesMngService.afterApprovalCompleteSalesRequest(sqlSession, sqlParamMap); }else if("PURCHASE_ORDER".equals(targetType)){ //발주 sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "approvalComplete"); sqlSession.update("approval.purchaseOrderApprovalStatus", sqlParamMap); purchaseOrderService.afterApprovalCompleteRouteInfo(sqlSession, routeMap, targetMap, sqlParamMap); //동시발주 관련 메일 N건 발송 처리 추가(240109) // =>메인 1건만 나가는거로 변경되서 주석처리 /* List multiMasterList = new ArrayList(); paramMap.put("MULTI_MASTER_OBJID", targetObjId); multiMasterList = commonService.selectList("purchaseOrder.selectPurchaseOrderMasterList", null, paramMap); if(CommonUtils.isNotEmpty(multiMasterList) && !multiMasterList.isEmpty()) { for (Object object : multiMasterList) { Map mapInfo = (Map)object; sqlParamMap.put("targetObjId", mapInfo.get("OBJID")); //sqlParamMap.put("status", "approvalComplete"); purchaseOrderService.afterApprovalCompleteRouteInfo(sqlSession, routeMap, targetMap, sqlParamMap); } } */ }else if("DEFECT_ACTION".equals(targetType)){ //부적합품 통보서 } } } /** * Route의 상태를 reject로 변경한다. * @param sqlSession * @param paramMap */ public void rejectRouteInfo(SqlSession sqlSession, Map paramMap){ Map sqlParamMap = new HashMap(); sqlParamMap.put("completeStatus", "reject"); sqlParamMap.put("routeObjId", CommonUtils.checkNull(paramMap.get("routeObjId"))); //Route를 반려오 상태를 변경한다. sqlSession.update("approval.completeRoute", sqlParamMap); //Route에 해당하는 정보를 가져온다. HashMap routeInfoMap = new HashMap(); routeInfoMap = (HashMap)sqlSession.selectOne("approval.getRouteInfo", sqlParamMap); String sendEmail = CommonUtils.checkNull(routeInfoMap.get("EMAIL")); //Route에 해당하는 상신인원 정보 String writer = CommonUtils.checkNull(routeInfoMap.get("WRITER")); //반려 시 작성된 Comment String rejectComment = CommonUtils.checkNull(paramMap.get("resultMessage")); //targetType, targetObjectId을 가져와서 상태값 처리(PDM은 EO밖에 없음.) Map targetMap = sqlSession.selectOne("approval.getTargetType", paramMap); targetMap = CommonUtils.toUpperCaseMapKey(targetMap); String targetType = CommonUtils.checkNull(targetMap.get("TARGET_TYPE")); String targetObjId = CommonUtils.checkNull(targetMap.get("TARGET_OBJID")); String mailTitle =""; targetMap.put("routeObjId", CommonUtils.checkNull(routeInfoMap.get("ROUTE_OBJID"))); targetMap.put("status", "reject"); targetMap.put("targetObjId", targetObjId); if("EO".equals(targetType)){ //상태값을 reject(반려)로 변경한다. sqlSession.update("approval.changeEOStatus", targetMap); targetMap.put("resultMessage", rejectComment); //상신자에게 반려되었다는 알림메일 발송 approvalEODistribute(sqlSession, targetMap, writer); }else if("PROBLEM".equals(targetType)){ //상태값을 reject(반려)로 변경한다. sqlSession.update("approval.changeProblemApprovalStatus", targetMap); }else if("DESIGN_CHECK_LIST".equals(targetType)){ //상태값을 reject(반려)로 변경한다. sqlSession.update("approval.changeDesignCheckListApprovalStatus", targetMap); }else if("MATERIAL_APPLY".equals(targetType)){ //발주 Map materMap = sqlSession.selectOne("approval.getmaterstatus", targetMap); String STATUS_CD = CommonUtils.checkNull(materMap.get("STATUS_CD")); if("PURSTCD00200".equals(STATUS_CD)){ targetMap.put("status", "PURSTCD00100"); }else if("PURSTCD00500".equals(STATUS_CD)){ targetMap.put("status", "PURSTCD00400"); } targetMap.put("targetObjId", targetObjId); sqlSession.update("approval.changeMaterApprovalStatus", targetMap); mailTitle = "[발주서 반려알림]결재가 반려 되었습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", writer, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("EXPENSE_APPLY".equals(targetType)){ //경비 mailTitle = "[경비신청서 반려알림]결재가 반려 되었습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", writer, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("ISSUE_RELEASE".equals(targetType)){ //통합문제점 mailTitle = "[문제점개선대책서 반려알림]결재가 반려 되었습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", writer, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("MATERIAL_SORTAPPLY".equals(targetType)){ //발주 targetMap.put("status", "PURSTCD00100"); targetMap.put("targetObjId", targetObjId); sqlSession.update("approval.changeMaterApprovalStatus", targetMap); mailTitle = "[발주서 반려알림]결재가 반려 되었습니다."; MailUtil.sendMail("plm_admin", "master@hongsungeng.co.kr", writer, sendEmail, "", "", "", mailTitle, mailTitle, "ISSUE_RELEASE"); }else if("USED_MNG".equals(targetType)){ //중고관리 targetMap.put("targetObjId", targetObjId); targetMap.put("statusName", "반려"); targetMap.put("statusCommCD", Constants.USED_MNG_STATUS_CD); sqlSession.update("approval.changeUsedMngApprovalStatus", targetMap); }else if("CUSTOMER_MNG".equals(targetType)){ //중고관리 targetMap.put("targetObjId", targetObjId); targetMap.put("statusName", "반려"); targetMap.put("statusCommCD", Constants.CUSTOMER_MNG_STATUS_CD); sqlSession.update("approval.changeCustomerMngApprovalStatus", targetMap); }else if("CHECK_REPORT_MNG".equals(targetType)){ //검수관리 targetMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); targetMap.put("status", "reject"); sqlSession.update("approval.checkReportMngApprovalStatus", targetMap); }else if("EO_MNG".equals(targetType)){ //검수관리 targetMap.put("targetObjId", targetObjId); targetMap.put("status", "reject"); sqlSession.update("approval.eoMngApprovalStatus", targetMap); }else if("MOLD_DEV_REQUEST".equals(targetType)){ //금형제작의뢰 targetMap.put("targetObjId", targetObjId); targetMap.put("status", "reject"); sqlSession.update("approval.moldDevRequestApprovalStatus", targetMap); }else if("ECR_MNG".equals(targetType)){ //ECR sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "0000107"); sqlSession.update("approval.EcrMngApprovalStatus", sqlParamMap); }else if("AS_MNG".equals(targetType)){ //ECR sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "0000107"); sqlSession.update("approval.ASMngApprovalStatus", sqlParamMap); }else if("CSM".equals(targetType)){ //customer_service_mgmt sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "0000107"); sqlSession.update("approval.CSMApprovalStatus", sqlParamMap); }else if("SALES_REQUEST".equals(targetType)){ //구매의뢰 sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "reject"); sqlSession.update("approval.salesRequestApprovalStatus", sqlParamMap); }else if("PURCHASE_ORDER".equals(targetType)){ //구매의뢰 sqlParamMap.put("targetObjId", targetObjId); sqlParamMap.put("status", "reject"); sqlSession.update("approval.purchaseOrderApprovalStatus", sqlParamMap); } } /** * 이전 결재자가 반려를 했기때문에, 대기상태의 모든 inboxtask를 cancel로 변경시킨다. * @param sqlSession * @param paramMap */ public void setInboxtaskCancel(SqlSession sqlSession, Map paramMap){ //반려가 되었기때문에 남은 인원에 대하여 반려알림 메일발송 (개발필요) sqlSession.update("approval.cancelInboxtask", paramMap); } /** * 결재상신시 target의 상태값을 변경한다. * @param sqlSession * @param paramMap */ public void setTargetStatus(SqlSession sqlSession, Map paramMap){ String targetType = CommonUtils.checkNull(paramMap.get("targetType")); if("EO".equals(targetType)){ //상태값을 complete로 변경한다. Map sqlParamMap = new HashMap(); sqlParamMap.put("status", "approval"); sqlParamMap.put("TARGET_OBJID", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlSession.update("approval.changeEOStatus", sqlParamMap); }else if("PROBLEM".equals(targetType)){ //결재상태를 create로 입력한다. Map sqlParamMap = new HashMap(); sqlParamMap.put("status", "approval"); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("routeObjId", CommonUtils.checkNull(paramMap.get("routeObjId"))); sqlSession.update("approval.changeProblemApprovalStatus", sqlParamMap); }else if("DESIGN_CHECK_LIST".equals(targetType)){ //결재상태를 create로 입력한다. Map sqlParamMap = new HashMap(); sqlParamMap.put("status", "approval"); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("routeObjId", CommonUtils.checkNull(paramMap.get("routeObjId"))); sqlSession.update("approval.changeDesignCheckListApprovalStatus", sqlParamMap); }else if("ISSUE_RELEASE".equals(targetType)){ //통합문제점 Map sqlParamMap = new HashMap(); sqlParamMap.put("status", "WPS01000"); sqlParamMap.put("targetObjId",CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlSession.update("approval.changeIssueMgmtApprovalStatus", sqlParamMap); }else if("USED_MNG".equals(targetType)){ //중고관리 Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("statusName", "결재중"); sqlParamMap.put("statusCommCD", Constants.USED_MNG_STATUS_CD); sqlSession.update("approval.changeUsedMngApprovalStatus", sqlParamMap); }else if("CUSTOMER_MNG".equals(targetType)){ //중고관리 Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("statusName", "결재중"); sqlParamMap.put("statusCommCD", Constants.CUSTOMER_MNG_STATUS_CD); sqlSession.update("approval.changeCustomerMngApprovalStatus", sqlParamMap); }else if("CHECK_REPORT_MNG".equals(targetType)){ //검수관리 Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("status", "approvalRequest"); sqlSession.update("approval.checkReportMngApprovalStatus", sqlParamMap); }else if("EO_MNG".equals(targetType)){ //검수관리 Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("status", "approvalRequest"); sqlSession.update("approval.eoMngApprovalStatus", sqlParamMap); }else if("MOLD_DEV_REQUEST".equals(targetType)){ //금형제작의뢰 Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("status", "approvalRequest"); sqlSession.update("approval.moldDevRequestApprovalStatus", sqlParamMap); }else if("ECR_MNG".equals(targetType)){ //금형제작의뢰 Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("status", "0000101"); sqlSession.update("approval.EcrMngApprovalStatus", sqlParamMap); }else if("AS_MNG".equals(targetType)){ //금형제작의뢰 Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("status", "0000101"); sqlSession.update("approval.ASMngApprovalStatus", sqlParamMap); }else if("CSM".equals(targetType)){ //customer_service_mgmt Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("status", "0000101"); sqlSession.update("approval.CSMApprovalStatus", sqlParamMap); }else if("SALES_REQUEST".equals(targetType)){ //구매의뢰 Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("status", "approvalRequest"); sqlSession.update("approval.salesRequestApprovalStatus", sqlParamMap); }else if("PURCHASE_ORDER".equals(targetType)){ //구매의뢰 Map sqlParamMap = new HashMap(); sqlParamMap.put("targetObjId", CommonUtils.checkNull(paramMap.get("targetObjId"))); sqlParamMap.put("status", "approvalRequest"); sqlSession.update("approval.purchaseOrderApprovalStatus", sqlParamMap); } } /** * 결재상신 후 EO 배포처에 해당하는 인원들에게 EO 갑지내용을 배포한다. * type : approval(결재 상신 시 1번째 인원 또는 다음 결재인원에게 메일 발송) * type : release(모든 인원이 결재 완료하여 배포처 및 결재상신 인원에게 메일발송) * @param sqlSession * @param paramMap * @param type */ public void approvalEODistribute(SqlSession sqlSession, Map paramMap,String userId){ ArrayList distributeMemberList = new ArrayList(); ArrayList connectedPartList = new ArrayList(); ArrayList connectedDrawPartList = new ArrayList(); HashMap eoInfoMap = new HashMap(); System.out.println("approvalEODistribute(paramMap):"+paramMap); System.out.println("approvalEODistribute(userId):"+userId); //EO의 ObjectId String targetObjid = CommonUtils.checkNull(paramMap.get("targetObjId")); //Route의 ObjectId String routeObjId = CommonUtils.checkNull(paramMap.get("routeObjId")); String status = CommonUtils.checkNull(paramMap.get("status")); if(!"".equals(targetObjid)){ //EO 정보를 가져온다. HashMap eoSqlMap = new HashMap(); eoSqlMap.put("objId", targetObjid); eoInfoMap = sqlSession.selectOne("eo.getEOInfo",eoSqlMap); //EO에 연결된 정보를 가져온다. connectedPartList = (ArrayList)sqlSession.selectList("eo.getConnectPartList", eoSqlMap); eoSqlMap.put("drawingType", "draw"); connectedDrawPartList = (ArrayList)sqlSession.selectList("eo.getConnectPartList", eoSqlMap); String eoNo = CommonUtils.checkNull(eoInfoMap.get("EO_NO")); String eoDate = CommonUtils.checkNull(eoInfoMap.get("EO_ISSUE_DATE")); String carName = CommonUtils.checkNull(eoInfoMap.get("CAR_NAME")); String carCode = CommonUtils.checkNull(eoInfoMap.get("CAR_CODE")); //결재 상신 후 결재 순으로 인원에게 메일발송 if("ready".equals(status) || "complete".equals(status)){ //제목에 사용할 EO정보 String mailSubject = "[EO 결재요청] "+carCode+"_"+eoNo+"("+eoDate+")_"+connectedDrawPartList.size()+"건"; HashMap userSqlMap = new HashMap(); userSqlMap.put("userId",userId); System.out.println("approvalEODistribute(userSqlMap):"+userSqlMap); HashMap userMap = sqlSession.selectOne("admin.selectUserInfo", userSqlMap); String userEmail = CommonUtils.checkNull(userMap.get("EMAIL")); HashMap routeMap = (HashMap)getRouteInfo(paramMap); String routeTitle = ""; String writer = ""; String comment = ""; if(null == routeMap || routeMap.isEmpty()){ routeTitle = CommonUtils.checkNull(paramMap.get("approvalTitle")); HashMap writerSqlMap = new HashMap(); writerSqlMap.put("userId",CommonUtils.checkNull(paramMap.get("writer"))); HashMap writerMap = sqlSession.selectOne("admin.selectUserInfo", writerSqlMap); writer = CommonUtils.checkNull(writerMap.get("DEPT_NAME"))+" "+CommonUtils.checkNull(writerMap.get("USER_NAME")); comment = CommonUtils.checkNull(paramMap.get("approvalDescription")); }else{ routeTitle = CommonUtils.checkNull(routeMap.get("APPROVAL_TITLE")); writer = CommonUtils.checkNull(routeMap.get("WRITER_DEPT_NAME"))+" "+CommonUtils.checkNull(routeMap.get("WRITER_USER_NAME")); comment = CommonUtils.checkNull(routeMap.get("APPROVAL_DESC")); } //결재 상신 시 문구 HashMap mailMap = new HashMap(); mailMap.put("approvalType", "EO"); mailMap.put("routeTitle", routeTitle); mailMap.put("approvalUser", writer); mailMap.put("comment", comment); mailMap.put("userType", "상신자"); mailMap.put("mailUrl", Constants.SYSTEM_URL); String mailContents = MailUtil.getHTMLContents("eoApprovalMailTemplate", mailMap); System.out.println("approvalEODistribute(status):"+status); System.out.println("approvalEODistribute(userEmail):"+userEmail); System.out.println("approvalEODistribute(mailContents):"+mailContents); System.out.println("approvalEODistribute(mailSubject):"+mailSubject); MailUtil.sendMail(CommonUtils.checkNull(paramMap.get("writer")), "bestcw8388@iljitech.co.kr", userId, userEmail, "", "", "", mailSubject, mailContents, Constants.MAIL_TYPE_RELEASE_EO); MailUtil.sendMail(CommonUtils.checkNull(paramMap.get("writer")), "", userId, "don38317@gmail.com", "", "", "", mailSubject, mailContents, Constants.MAIL_TYPE_RELEASE_EO); //결재 인원 모두 결재 완료된 경우 }else if("release".equals(status)){ HashMap mailMap = new HashMap(); mailMap.put("oem", CommonUtils.checkNull(eoInfoMap.get("OEM_NAME"))); mailMap.put("car", CommonUtils.checkNull(eoInfoMap.get("CAR_CODE"))); mailMap.put("eoType", CommonUtils.checkNull(eoInfoMap.get("EO_TYPE_STR"))); mailMap.put("designTeam", CommonUtils.checkNull(eoInfoMap.get("DESIGN_TEAM"))); mailMap.put("eoNo", CommonUtils.checkNull(eoInfoMap.get("EO_NO"))); mailMap.put("eoDate", CommonUtils.checkNull(eoInfoMap.get("EO_ISSUE_DATE"))); mailMap.put("urgentDegree", CommonUtils.checkNull(eoInfoMap.get("URGENT_DEGREE_STR"))); mailMap.put("hkmcDate", CommonUtils.checkNull(eoInfoMap.get("HKMC_DISTRIBUTE_DATE"))); mailMap.put("approvalDesc", CommonUtils.checkNull(paramMap.get("approvalDescription"))); if(0 < connectedDrawPartList.size()){ String appendHtlm = ""; for(int i=0;i"; appendHtlm += " "+partNo+""; appendHtlm += " "+partName+""; appendHtlm += " "+changeItems+""; appendHtlm += " "+rev+""; appendHtlm += " "+ecdFlag+""; appendHtlm += " "+mngItemFlag+""; appendHtlm += " "+applyPointName+""; appendHtlm += ""; } if("".equals(appendHtlm)){ appendHtlm += ""; appendHtlm += " 연결된 파트 정보가 없습니다."; appendHtlm += ""; } //파트에 해당하는 영역에 Part 정보를 append 한다. mailMap.put("connectedPartList", appendHtlm); } //모든 결재 완료 시 문구 //제목에 사용할 EO정보 String mailSubject = "[EO 결재완료] "+carCode+"_"+eoNo+"("+eoDate+")_"+connectedDrawPartList.size()+"건"; HashMap approvalMap = new HashMap(); approvalMap.put("objId", targetObjid); ArrayList eoApprovalList = (ArrayList)sqlSession.selectList("eo.getEOApprovalList",approvalMap); String approvalMembers = ""; for(int j=0;j"; approvalMembers+=""+deptName+""; approvalMembers+=""+memberName+""; approvalMembers+=""; } mailMap.put("approvalMembers", approvalMembers); HashMap distributeSqlMap = new HashMap(); distributeSqlMap.put("targetObjId", targetObjid); distributeMemberList = (ArrayList)sqlSession.selectList("approval.getEODistributeMemberList", distributeSqlMap); String releaseMembers = ""; for(int k=0;k resultMap = new HashMap(); SqlSession sqlSession = null; try{ sqlSession = SqlMapConfig.getInstance().getSqlSession(); String userId = CommonUtils.checkNull(paramMap.get("userId")); System.out.println("userId : "+userId); if(!"".equals(userId)){ Map sqlParamMap = new HashMap(); sqlParamMap.put("userId", userId); sqlParamMap.put("systemType", "PMS"); resultMap = sqlSession.selectOne("approval.getApprovalCnt", sqlParamMap); } }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultMap); } public ArrayList getApprovalLine(HttpServletRequest request, Map paramMap){ ArrayList> resultList = new ArrayList(); SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(); try{ resultList = (ArrayList)sqlSession.selectList("approval.getApprovalLine",paramMap); }catch(Exception e){ throw e; }finally{ sqlSession.close(); } return CommonUtils.toUpperCaseMapKey(resultList); } }