Files
wace_plm/src/com/pms/controller/ApprovalController.java
2026-02-23 17:27:51 +09:00

410 lines
15 KiB
Java

package com.pms.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
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.service.ApprovalService;
@Controller
public class ApprovalController {
protected static final Log logger = LogFactory.getLog("ApprovalController");
ApprovalService approvalService = null;
@Autowired
public void setApprovalService(ApprovalService approvalService){
this.approvalService = approvalService;
}
/**
* 결재함 목록 조회
* @param request
* @param paramMap
* @return
* @throws Exception
*/
@RequestMapping("/approval/approvalList.do")
public String approvalList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
ArrayList list = approvalService.getApprovalList(request, paramMap);
request.setAttribute("LIST", list);
return "/approval/approvalList";
}
/**
* Amaranth10 전자결재 문서 목록 조회 (AJAX 전용)
* approvalList.jsp에서만 사용하는 전용 엔드포인트
* @param request
* @param paramMap
* @return JSON 결과
*/
@RequestMapping("/approval/getAmaranthApprovalDocList.do")
public String getAmaranthApprovalDocList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
String jsonResult = approvalService.getAmaranthApprovalDocListJson(request, paramMap);
request.setAttribute("RESULT", jsonResult);
return "/ajax/ajaxResult";
}
/**
* Amaranth10 결재 문서 상세 팝업 페이지
* approvalList.jsp에서 문서번호 클릭 시 호출
* @param request
* @param paramMap docId, deptSeq 필수
* @return 상세 팝업 JSP
*/
@RequestMapping("/approval/amaranthApprovalDetail.do")
public String amaranthApprovalDetail(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
return "/approval/amaranthApprovalDetail";
}
/**
* Amaranth10 결재 문서 상세 데이터 조회 (AJAX 전용)
* @param request
* @param paramMap docId, deptSeq 필수
* @return JSON 결과
*/
@RequestMapping("/approval/getAmaranthApprovalDocDetail.do")
public String getAmaranthApprovalDocDetail(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
String jsonResult = approvalService.getAmaranthApprovalDocDetail(request, paramMap);
request.setAttribute("RESULT", jsonResult);
return "/ajax/ajaxResult";
}
/**
* Amaranth10 결재 상신 팝업 페이지
* 결재라인 설정 및 문서 상신 화면
* @param request
* @param paramMap targetType, targetObjId, approvalTitle 등
* @return 상신 팝업 JSP
*/
@RequestMapping("/approval/amaranthApprovalSubmit.do")
public String amaranthApprovalSubmit(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
return "/approval/amaranthApprovalSubmit";
}
/**
* Amaranth10 결재 문서 상신 처리 (AJAX)
* @param request
* @param paramMap 상신 데이터
* @return JSON 결과
*/
@RequestMapping("/approval/submitAmaranthApproval.do")
public String submitAmaranthApproval(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
String jsonResult = approvalService.submitAmaranthApprovalDoc(request, paramMap);
request.setAttribute("RESULT", jsonResult);
return "/ajax/ajaxResult";
}
/**
* Amaranth10 사원 검색 (결재라인 사용자 검색용 AJAX)
* @param request
* @param paramMap
* @return JSON 결과
*/
@RequestMapping("/approval/searchAmaranthEmployees.do")
public String searchAmaranthEmployees(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
String jsonResult = approvalService.searchAmaranthEmployees(request, paramMap);
request.setAttribute("RESULT", jsonResult);
return "/ajax/ajaxResult";
}
/**
* 결재 상신 Form
* @param request
* @param paramMap
* @return
* @throws Exception
*/
@RequestMapping("/approval/registApproval.do")
public String registApproval(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
//System.out.println("registApproval - targetObjIds:" + paramMap.get("targetObjIds"));
return "/approval/registApproval";
}
/**
* 결재 상세
* @param request
* @param paramMap
* @return
* @throws Exception
*/
@RequestMapping("/approval/approvalDetail.do")
public String approvalDetail(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
List routeList = CommonUtils.keyChangeUpperList(approvalService.getRouteList(paramMap));
Map routeInfo = CommonUtils.keyChangeUpperMap(approvalService.getRouteInfo(paramMap));
//1. 일반결재 목록
paramMap.put("approvalType", "normal");
List normalInboxtaskList = CommonUtils.keyChangeUpperList(approvalService.getInboxtaskList(paramMap));
//2. 협조결재 목록
paramMap.put("approvalType", "help");
List helpInboxtaskList = CommonUtils.keyChangeUpperList(approvalService.getInboxtaskList(paramMap));
//3. 참조결재 목록
paramMap.put("approvalType", "ref");
List refInboxtaskList = CommonUtils.keyChangeUpperList(approvalService.getInboxtaskList(paramMap));
//approvalType 초기화
paramMap.remove("approvalType");
request.setAttribute("routeList", routeList);
request.setAttribute("routeInfo", routeInfo);
request.setAttribute("normalList", normalInboxtaskList);
request.setAttribute("helpList", helpInboxtaskList);
request.setAttribute("refList", refInboxtaskList);
System.out.println("\n\n----------------------------");
System.out.println("paramMap : "+paramMap);
System.out.println("routeList : "+routeList);
System.out.println("routeInfo : "+routeInfo);
System.out.println("normalList : "+normalInboxtaskList);
System.out.println("helpList : "+helpInboxtaskList);
System.out.println("refList : "+refInboxtaskList);
System.out.println("----------------------------\n\n");
return "/approval/approvalDetail";
}
/**
* 결재상신 프로세스
* @param request
* @param paramMap
* @return
*/
@RequestMapping("/approval/approvalProc.do")
public String approvalProcess(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap
, @RequestParam(value = "normalArr[]", defaultValue="null") List<String> normalArr
, @RequestParam(value = "helpArr[]", defaultValue = "null") List<String> helpArr
, @RequestParam(value = "refArr[]", defaultValue = "null") List<String> refArr
){
System.out.println("/approval/approvalProc.do");
System.out.println("paramMap : "+paramMap);
System.out.println("normalArr : "+normalArr);
System.out.println("helpArr : "+helpArr);
System.out.println("refArr : "+refArr);
SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
try{
//writer 정보 등록
HttpSession session = request.getSession();
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
String writer = CommonUtils.checkNull(person.getUserId());
paramMap.put("writer", writer);
String targetObjId = CommonUtils.checkNull((String)paramMap.get("targetObjId"));
//1. approval 체크
String approvalObjId = approvalService.checkApprovalObjId(sqlSession, paramMap);
//2. route 생성
String routeObjId = approvalService.createRouteInfo(sqlSession, paramMap);
System.out.println("routeObjId : "+routeObjId);
paramMap.put("routeObjId", routeObjId);
//3. inboxtask 생성
approvalService.createInboxTask(sqlSession, paramMap, normalArr, helpArr, refArr);
//4. target의 상태값 변경.
approvalService.setTargetStatus(sqlSession, paramMap);
//240110 동시 결재 적용(동시발주서)
String targetObjIds = CommonUtils.checkNull((String)paramMap.get("targetObjIds"));
System.out.println("동시발주 targetObjIds:" + targetObjIds + " writer:"+writer + " targetObjId:"+targetObjId + " approvalTitle:"+paramMap.get("approvalTitle"));
logger.info("동시발주 targetObjIds:" + targetObjIds + " writer:"+writer + " targetObjId:"+targetObjId + " approvalTitle:"+paramMap.get("approvalTitle"));
String targetObjIdsArr [] = CommonUtils.isBlank(targetObjIds) ? new String[0] : targetObjIds.split(",");
paramMap.put("masterTargetObjId", targetObjId);
if(!CommonUtils.isEmpty(targetObjIdsArr) && targetObjIdsArr.length > 0) {
approvalService.createApprovalTagetInfo(sqlSession, paramMap, targetObjIdsArr);
}
sqlSession.commit();
}catch(Exception e){
sqlSession.rollback();
e.printStackTrace();
}finally{
sqlSession.close();
}
//targetObjId를 통해 등록된 approval이 있는지 확인.
request.setAttribute("RESULT", CommonUtils.getJsonString("msg", "처리되었습니다."));
return "/ajax/ajaxResult";
}
/**
* 결재 처리 팝업
* @param request
* @param paramMap
* @return
*/
@RequestMapping("/approval/approvalDetailResultPopup.do")
public String approvalDetailResultPopup(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
System.out.println("paramMap : "+paramMap);
return "/approval/approvalDetailResultPopup";
}
/**
* 결재 승인/반려 처리
* @param request
* @param paramMap
* @return
*/
@RequestMapping("/approval/approvalResultProc.do")
public String approvalResultProcess(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
try{
System.out.println("paramMap : "+paramMap);
String result = CommonUtils.checkNull(paramMap.get("result"));
String approvalType = CommonUtils.checkNull(paramMap.get("approvalType"));
//반려 시 반려 인원에 대한 정보 표시 사용
HttpSession session = request.getSession();
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
String actionUser = CommonUtils.checkNull(person.getUserId());
paramMap.put("actionUser", actionUser);
if("Y".equals(result)){ //승인
//1. targetUserId의 승인 처리
approvalService.setApprovalResult(sqlSession, paramMap);
if("normal".equals(approvalType)){
//2. (승인)다음 결재순번의 상태값을 ready로 변경.
approvalService.changeNextApprovalStatus(sqlSession, paramMap);
}
//3. (승인)모든 결재가 처리되었는지 확인 후, route와 approval의 상태값 변경.
// + TARGET의 상태값 변경.
approvalService.completeRouteInfo(sqlSession, paramMap);
}else if("N".equals(result)){ //반려
//1. targetUserId의 반려 처리
approvalService.setApprovalResult(sqlSession, paramMap);
//2. (반려)모든 standby의 상태값을 cancel로 변경.
approvalService.setInboxtaskCancel(sqlSession, paramMap);
//3. (반려)route의 상태값을 reject로 변경.
// + TARGET의 상태값 변경.
approvalService.rejectRouteInfo(sqlSession, paramMap);
}
request.setAttribute("RESULT", CommonUtils.getJsonString("msg", "처리 되었습니다."));
sqlSession.commit();
}catch(Exception e){
request.setAttribute("RESULT", CommonUtils.getJsonString("msg", "처리가 되지 않았습니다. 관리자에게 문의바랍니다."));
sqlSession.rollback();
e.printStackTrace();
}finally{
sqlSession.close();
}
return "/ajax/ajaxResult";
}
/**
* 접속자의 결재건수를 가져온다.
* @param request
* @param paramMap
* @return
*/
@RequestMapping("/approval/getApprovalCnt.do")
public String getApprovalCnt(HttpServletRequest request, @RequestParam Map paramMap){
Map map = approvalService.getApprovalCnt(request, paramMap);
request.setAttribute("RESULT", CommonUtils.getJsonMap(map));
return "/ajax/ajaxResult";
}
/**
* Amaranth10 전자결재 건수 조회
* @param request
* @param paramMap
* @return
*/
@RequestMapping("/approval/getAmaranthApprovalCnt.do")
public String getAmaranthApprovalCnt(HttpServletRequest request, @RequestParam Map paramMap){
Map map = approvalService.getAmaranthApprovalCnt(request, paramMap);
request.setAttribute("RESULT", CommonUtils.getJsonMap(map));
return "/ajax/ajaxResult";
}
/**
* 결재완료 여부 확인 (견적서 메일 발송용)
* @param request
* @param paramMap
* @return
*/
@RequestMapping("/approval/checkApprovalComplete.do")
public String checkApprovalComplete(HttpServletRequest request, @RequestParam Map paramMap){
Map resultMap = approvalService.checkApprovalComplete(paramMap);
request.setAttribute("RESULT", CommonUtils.getJsonMap(resultMap));
return "/ajax/ajaxResult";
}
/**
* Amaranth10 전자결재 SSO URL 생성 (B방식 - 팝업 직접 오픈)
* 업무 리스트에서 결재상신 버튼 클릭 시 호출
* @param request
* @param paramMap targetType, targetObjId, approvalTitle, outProcessCode, formId
* @return fullUrl이 포함된 JSON
*/
@RequestMapping("/approval/getAmaranthSsoUrl.do")
public String getAmaranthSsoUrl(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
String jsonResult = approvalService.getAmaranthSsoUrl(request, paramMap);
request.setAttribute("RESULT", jsonResult);
return "/ajax/ajaxResult";
}
/**
* Amaranth10 전자결재 콜백 API
* 결재 이벤트(상신/진행/종결/반려/삭제 등) 발생 시 Amaranth10에서 호출
* 결재연동설정의 상신~삭제 URL에 이 엔드포인트를 등록
*/
@ResponseBody
@RequestMapping(value="/approval/amaranthApprovalCallback.do", produces="application/json; charset=UTF-8")
public String amaranthApprovalCallback(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
return approvalService.handleAmaranthApprovalCallback(paramMap);
}
/**
* Amaranth10 전자결재 본문 조회 API (결재작성 시 호출)
* 결재연동설정의 결재작성(WebAPI) URL에 이 엔드포인트를 등록
*/
@ResponseBody
@RequestMapping(value="/approval/amaranthApprovalContents.do", produces="application/json; charset=UTF-8")
public String amaranthApprovalContents(HttpServletRequest request, @RequestParam Map<String, Object> paramMap)throws Exception{
return approvalService.getAmaranthApprovalContents(paramMap);
}
}