보고서 유형 동적 생성 처리 신규 프로그램 반영 및 기타 개선사항 반영

This commit is contained in:
urp 2025-10-20 09:32:11 +09:00
parent 3d9bb31413
commit de6e68971d
7 changed files with 1701 additions and 3 deletions

View File

@ -46,7 +46,7 @@ public class ReportController
ReportService reportService; // 보고서 양식 관리 서비스
/**
* 보고서 양식 목록 조회
* 보고서 양식 목록 조회(보고서 작성)
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.08
*/

View File

@ -40,7 +40,7 @@ public class ReportService
{
return reportDao.getReportForms(inMap);
}
// 보고서 양식 목록 조회 건수
public int getReportFormsCnt(LinkedHashMap<String, Object> inMap) throws Exception
{

View File

@ -0,0 +1,591 @@
package com.urpsys.itmsapi.srm.controller;
import java.util.LinkedHashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.urpsys.baseapi.common.util.CommonUtil;
import com.urpsys.baseapi.common.util.ResultData;
import com.urpsys.baseapi.domain.TokenInfo;
import com.urpsys.itmsapi.srm.service.ReportOtherService;
import com.urpsys.itmsapi.srm.service.SvcDeskService;
import lombok.extern.slf4j.Slf4j;
/**
* 기타 보고서을 처리하는 API Controller 클래스
* @author urp 인프라본부 나혁제
* @since 2025.10.15
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2025.10.15 나혁제 최초 생성
*
* </pre>
*/
@Slf4j
@RestController
public class ReportOtherController
{
@Autowired
ReportOtherService reportOtherService; // 이슈보고서 관리 서비스
@Autowired
SvcDeskService svcDeskService; // 서비스 인스던트 관리 서비스
/**
* 이슈보고서 목록 조회
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/searchReportOther.do")
public ResponseEntity<ResultData> searchReportOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/searchReportOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
// 토큰정보 획득
TokenInfo tokenInfo = CommonUtil.getAccessTokenInfo(request);
log.info("tokenInfo [{}]", tokenInfo.toString() );
log.info("tokenInfo [{}]", tokenInfo.getAuthorities() );
requestMap.put("reqUser", tokenInfo.getUniqId());
// requestMap.put("reqUser", "0");
// 이슈보고서 목록 조회
List<LinkedHashMap<String, Object>> resultList = reportOtherService.searchReport(requestMap);
// count 조회
int totCnt = reportOtherService.searchReportCount(requestMap);
resBody.put("resultList", resultList );
resBody.put("totCnt" , totCnt );
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/searchReportOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 이슈보고서 정보 상세조회
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/getReportWithBodyOther.do")
public ResponseEntity<ResultData> getReportWithBodyOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/getReportWithBodyOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
// 토큰정보 획득
TokenInfo tokenInfo = CommonUtil.getAccessTokenInfo(request);
int inReportSeq = (int)requestMap.get("inReportSeq");
// 보고서 정보 상세조회
LinkedHashMap<String, Object> resultReportOther = reportOtherService.getReportWithBody(inReportSeq);
int inIncidentSeq = 0;
if (resultReportOther.get("inIncidentSeq") != null)
{
inIncidentSeq = CommonUtil.zeroConvert(resultReportOther.get("inIncidentSeq"));
}
String incidentId = "";
if( inIncidentSeq > 0)
{
LinkedHashMap<String, Object> tempMap = svcDeskService.getIncidentBySeq(inIncidentSeq);
incidentId = (String)tempMap.get("vcIncidentNum");
}
// 공유범위
List<LinkedHashMap<String, Object>> resultSharings = reportOtherService.getReportSharing(inReportSeq);
String stxt = "";
for(LinkedHashMap<String, Object> tempMap : resultSharings)
{
if (stxt.equals(""))
stxt = (String)tempMap.get("vcUserGroup");
else
stxt = stxt + "," + (String)tempMap.get("vcUserGroup");
}
// 연결자산
List<LinkedHashMap<String, Object>> resultAssets = reportOtherService.getReportAssets(inReportSeq);
// 결재정보
List<LinkedHashMap<String, Object>> resultApprovals = reportOtherService.getReportApproval(inReportSeq);
String strRole = tokenInfo.getAuthorities();
String sessUserSeq = tokenInfo.getUniqId();
int privTemplSeq = 0;
int approvalReq=0;
// 서비스 승인요청 상태
if ((int)resultReportOther.get("inReportStatus") == 1)
{
// 0:대기, 1:승인요청, 2:반려, 3:승인
for (LinkedHashMap<String, Object> app : resultApprovals)
{
if ( (int)app.get("inStatus") == 1
&& app.get("inUserSeq").equals(sessUserSeq)
)
{
approvalReq=1;
break;
}
}
}
if(strRole.indexOf("ROLE_ADMIN") > -1)
{
privTemplSeq=1;
}
String privType="";
/**
* 1. 본인이 작성한 경우 priv - 승인요청, 삭제(승인완료전) 2. 슈퍼유저인 경우 - 모든권한 허용
**/
if (privTemplSeq == 1 || privTemplSeq ==2)
{
privType = "super";
}
else
{
// mine : 접수자
if (resultReportOther.get("inRegUser").equals(sessUserSeq))
{
privType = "mine";
}
else
{
privType = "nothing";
}
}
resBody.put("sharingTxt" , stxt ); // String
resBody.put("approvalReq" , approvalReq ); // int
resBody.put("privType" , privType ); // String
resBody.put("incidentId" , incidentId ); // String
resBody.put("resultReportOther" , resultReportOther ); // Map
resBody.put("resultSharings" , resultSharings ); // List
resBody.put("resultAssets" , resultAssets ); // List
resBody.put("resultApprovals" , resultApprovals ); // List
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/getReportWithBodyOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 이슈보고서 등록
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/addReportOther.do")
public ResponseEntity<ResultData> addReportOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/addReportOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
LinkedHashMap<String, Object> reportVoMap = (LinkedHashMap<String, Object>)requestMap.get("reportVo" ); // 보고서 기본정보
LinkedHashMap<String, Object> reqApprovalMap = (LinkedHashMap<String, Object>)requestMap.get("reqApprovalMap" ); // 승인요청 정보
List<LinkedHashMap<String, Object>> assetList = (List<LinkedHashMap<String, Object>>)requestMap.get("assetList");
List<LinkedHashMap<String, Object>> approvalsList = (List<LinkedHashMap<String, Object>>)requestMap.get("approvalsList");
List<LinkedHashMap<String, Object>> fileList = (List<LinkedHashMap<String, Object>>)requestMap.get("fileList");
// 보고서 등록
LinkedHashMap<String, Object> returnMap = reportOtherService.addReport(reportVoMap, assetList, approvalsList, fileList, reqApprovalMap);
if((int)returnMap.get("iSucc") > 0)
{
resBody.put("resultCd" , "0" );
resBody.put("resultMsg" , "정상적으로 등록되었습니다." );
resBody.put("inReportSeq" , returnMap.get("inReportSeq") );
}
else
{
resBody.put("resultCd" , "-1" );
resBody.put("resultMsg" , "보고서 등록중 오류가 발생 하였습니다." );
resBody.put("inReportSeq" , -1 );
}
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/addReportOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 이슈보고서 수정
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/updateReportOther.do")
public ResponseEntity<ResultData> updateReportOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/updateReportOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
LinkedHashMap<String, Object> reportVoMap = (LinkedHashMap<String, Object>)requestMap.get("reportVo" ); // 보고서 기본정보
LinkedHashMap<String, Object> reqApprovalMap = (LinkedHashMap<String, Object>)requestMap.get("reqApprovalMap" ); // 승인요청 정보
List<LinkedHashMap<String, Object>> assetList = (List<LinkedHashMap<String, Object>>)requestMap.get("assetList");
List<LinkedHashMap<String, Object>> approvalsList = (List<LinkedHashMap<String, Object>>)requestMap.get("approvalsList");
List<LinkedHashMap<String, Object>> fileList = (List<LinkedHashMap<String, Object>>)requestMap.get("fileList");
// 보고서 수정
int iSucc = reportOtherService.updateReport(reportVoMap, assetList, approvalsList, fileList, reqApprovalMap);
if(iSucc > 0)
{
resBody.put("resultCd" , "0" );
resBody.put("resultMsg", "정상적으로 수정되었습니다." );
}
else
{
resBody.put("resultCd" , "-1" );
resBody.put("resultMsg", "보고서 수정중 오류가 발생 하였습니다." );
}
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/updateReportOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 이슈보고서 삭제
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/deleteReportOther.do")
public ResponseEntity<ResultData> deleteReportOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/deleteReportOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
LinkedHashMap<String, Object> reportVoMap = (LinkedHashMap<String, Object>)requestMap.get("reportVo"); // 보고서 기본정보
// 보고서 삭제
int iSucc = reportOtherService.deleteReport(reportVoMap);
if(iSucc > 0)
{
resBody.put("resultCd" , "0" );
resBody.put("resultMsg", "정상적으로 수정되었습니다." );
}
else
{
resBody.put("resultCd" , "-1" );
resBody.put("resultMsg", "보고서 삭제중 오류가 발생 하였습니다." );
}
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/deleteReportOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 이슈보고서 승인요청
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/procApprovalReportOther.do")
public ResponseEntity<ResultData> procApprovalReportOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/procApprovalReportOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
// 보고서 승인요청
int iSucc = reportOtherService.procApprovalReport(requestMap);
if(iSucc > 0)
{
resBody.put("resultCd" , "0" );
resBody.put("resultMsg", "정상적으로 승인요청 되었습니다." );
}
else
{
resBody.put("resultCd" , "-1" );
resBody.put("resultMsg", "검검보고서 승인요청중 오류가 발생 하였습니다." );
}
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/procApprovalReportOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 이슈보고서 승인
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/procApprovalOther.do")
public ResponseEntity<ResultData> procApprovalOther ( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/procApprovalOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
// 보고서 승인
int iSucc = reportOtherService.procApproval(requestMap);
// 상태 추출
int inReportSeq = CommonUtil.zeroConvert((requestMap.get("inReportSeq")));
LinkedHashMap<String, Object> vo = reportOtherService.getReportWithBody(inReportSeq);
if(iSucc > 0)
{
resBody.put("resultCd" , "0" );
resBody.put("resultMsg", "정상적으로 승인 되었습니다." );
resBody.put("resultInReportStatus" , CommonUtil.zeroConvert(vo.get("inReportStatus")) );
}
else
{
resBody.put("resultCd" , "-1" );
resBody.put("resultMsg", "점검보고서 승인중 오류가 발생 하였습니다." );
resBody.put("resultInReportStatus" , -1 );
}
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/procApprovalOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 이슈보고서 반려
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/rejectReportOther.do")
public ResponseEntity<ResultData> rejectReportOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/rejectReportOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
// 보고서 반려
int iSucc = reportOtherService.rejectReport(requestMap);
if(iSucc > 0)
{
resBody.put("resultCd" , "0" );
resBody.put("resultMsg", "정상적으로 반려 되었습니다." );
}
else
{
resBody.put("resultCd" , "-1" );
resBody.put("resultMsg", "점검보고서 반려중 오류가 발생 하였습니다." );
}
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/rejectReportOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 기타 보고서 초기 기준정보 조회
* @author urp 인프라본부 나혁제
* 작성일 : 2025.10.15
*/
@ResponseBody
@RequestMapping(value="/srm/getInitReportOther.do")
public ResponseEntity<ResultData> getInitReportOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/getInitReportOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
int inInt = 0;
// 서비스데스크 인스던트 정보 조회
int inIncidentSeq = CommonUtil.zeroConvert(requestMap.get("inIncidentSeq"));
// 보고서유형
int inTask = CommonUtil.zeroConvert(requestMap.get("inTask"));
LinkedHashMap<String, Object> resultIncident = new LinkedHashMap<String, Object>();
// 인스던트 정보 조회
if(inIncidentSeq>0)
{
resultIncident = svcDeskService.getIncidentBySeq(inIncidentSeq);
}
int inServiceCode = CommonUtil.zeroConvert(resultIncident.get("inServiceCode"));
// 서비스정보 조회
List<LinkedHashMap<String, Object>> resultService = reportOtherService.getServiceCombo(inServiceCode);
// 작업종류 조회
LinkedHashMap<String, Object> resultTask = reportOtherService.getTaskCategory(inTask);
// 보고서 양식 추출
List<LinkedHashMap<String, Object>> resultForm = reportOtherService.getReportForms(resultTask);
resBody.put("resultIncident" , resultIncident );
resBody.put("resultService" , resultService );
resBody.put("resultTask" , resultTask );
resBody.put("resultForm" , resultForm );
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/getInitReportOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 서비스정보 결재라인 목록 조회
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/getSvcApprovalListOther.do")
public ResponseEntity<ResultData> getSvcApprovalListOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/getSvcApprovalListOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
int inServiceCode = CommonUtil.zeroConvert(requestMap.get("inServiceCode"));
log.info("inServiceCode [{}]", inServiceCode );
// 서비스 결재라인 조회
List<LinkedHashMap<String, Object>> resultList = reportOtherService.getSvcApprovalList(inServiceCode);
resBody.put("resultList", resultList );
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/getSvcApprovalListOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
/**
* 보고서 양식 조회
* @author urp 인프라본부 나혁제
* 작성일 : 2025.02.25
*/
@ResponseBody
@RequestMapping(value="/srm/getReportFormOther.do")
public ResponseEntity<ResultData> getReportFormOther( @RequestBody LinkedHashMap<String, Object> requestMap
, HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
log.info("\n\n\n\n\n");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /srm/getReportFormOther.do <<<<<<<<<<<<<<<<<<<<<<<<<");
log.info("getRequestURI [{}]", request.getRequestURI() );
log.info("입력값 확인 requestMap [{}]", requestMap.toString() );
LinkedHashMap<String, Object> resBody = new LinkedHashMap<String, Object>();
// 2025.05.21 나혁제 출력인자 변경
// 보고서 양식 조회
LinkedHashMap<String, Object> resultMap = reportOtherService.getReportForm(requestMap);
resBody.put("resultMap", resultMap );
log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /srm/getReportFormOther.do >>>>>>>>>>>>>>>>>>>>>>>>>");
return ResultData.ok(resBody);
}
}

View File

@ -0,0 +1,115 @@
package com.urpsys.itmsapi.srm.dao;
import java.util.LinkedHashMap;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* 기타보고서 관리에 대한 DAO 클래스를 정의
*
* @author urp 인프라본부 나혁제
* @since 2025.10.15
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.10.15 나혁제 최초작성
*
* </pre>
*/
@Mapper
@Repository
public interface ReportOtherDao
{
// 이슈보고서 목록 조회
public List<LinkedHashMap<String, Object>> searchReport(LinkedHashMap<String, Object> inMap) throws Exception;
// 이슈보고서 목록 조회 건수
public int searchReportCount(LinkedHashMap<String, Object> inMap) throws Exception;
// 보고서 양식 목록 추출
public List<LinkedHashMap<String, Object>> getReportForms(LinkedHashMap<String, Object> inMap) throws Exception;
// 2025.05.21 나혁제 출력인자 변경
// 보고서 양식 추출
public LinkedHashMap<String, Object> getReportForm(LinkedHashMap<String, Object> inMap) throws Exception;
// 서비스 정보 목록 추출
public List<LinkedHashMap<String, Object>> getServiceCombo(int inInt) throws Exception;
// 작업목록 추출
public LinkedHashMap<String, Object> getTaskCategory(int inInt) throws Exception;
// 서비스 결재라인 조회
public List<LinkedHashMap<String, Object>> getSvcApprovalList(int inInt) throws Exception;
// 메일전송 대상자 조회
public List<LinkedHashMap<String, Object>> getReportMailReciever(LinkedHashMap<String, Object> inMap) throws Exception;
// 보고서정보 상세조회
public LinkedHashMap<String, Object> getReportWithBody(int inInt) throws Exception;
// 보고서 공유그룹 조회
public List<LinkedHashMap<String, Object>> getReportSharing(int inInt) throws Exception;
// 보고서 지산 구조 정보 조회
public List<LinkedHashMap<String, Object>> getReportAssets(int inInt) throws Exception;
// 보고서 결재 정보 조회
public List<LinkedHashMap<String, Object>> getReportApproval(int inInt) throws Exception;
// 보고서 등록
public int addReport(LinkedHashMap<String, Object> inMap) throws Exception;
// 보고서 자산 구조 등록
public int addReportAssets(LinkedHashMap<String, Object> inMap) throws Exception;
// 보고서 결재정보 등록
public int addReportApproval(LinkedHashMap<String, Object> inMap) throws Exception;
// 보고서 공유정보 등록
public int addReportSharing(LinkedHashMap<String, Object> inMap) throws Exception;
// 보고서 변경
public int updateReport(LinkedHashMap<String, Object> inMap) throws Exception;
// 보고서 공유그룹 삭제
public int deleteReportSharing(int inInt) throws Exception;
// 보고서 자산 구조 삭제
public int deleteReportAssetAll(int inInt) throws Exception;
// 보고서 결재정보 삭제
public int deleteReportApproval(int inInt) throws Exception;
// 보고서 대기 상태로 변경
public int approvalInit(int inInt) throws Exception;
// 보고서 삭제
public int deleteReport(int inInt) throws Exception;
// 승인요청
public int procApprovalReport(LinkedHashMap<String, Object> inMap) throws Exception;
// 승인
public int procApproval(LinkedHashMap<String, Object> inMap) throws Exception;
// 반려
public int rejectReport(LinkedHashMap<String, Object> inMap) throws Exception;
}

View File

@ -0,0 +1,321 @@
package com.urpsys.itmsapi.srm.service;
import java.util.LinkedHashMap;
import java.util.List;
import javax.annotation.Resource;
import org.egovframe.rte.fdl.idgnr.EgovIdGnrService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.urpsys.baseapi.common.util.CommonUtil;
import com.urpsys.itmsapi.cmm.service.FileManageService;
import com.urpsys.itmsapi.srm.dao.ReportOtherDao;
/**
* 기타 보고서 정보에 관한 비즈니스 구현 클래스를 정의
*
* @author urp 인프라본부 나혁제
* @since 2025.10.15
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.10.15 나혁제 최초작성
*
* </pre>
*/
@Service
@Transactional
public class ReportOtherService
{
@Autowired
ReportOtherDao reportOtherDao;
@Autowired
HomeService homeService;
@Autowired
FileManageService fileManageService; // 파일처리
/** 보고서ID 추출 */
@Resource(name="egovRptIdGnrService")
private EgovIdGnrService egovRptIdGnrService;
// 이슈보고서 목록 조회
public List<LinkedHashMap<String, Object>> searchReport(LinkedHashMap<String, Object> inMap) throws Exception
{
inMap.put("groups", homeService.getMyUserGroups((String)inMap.get("reqUser")));
return reportOtherDao.searchReport(inMap);
}
// 이슈보고서 목록 조회 건수
public int searchReportCount(LinkedHashMap<String, Object> inMap) throws Exception
{
return reportOtherDao.searchReportCount(inMap);
}
// 이슈보고서 양식 목록 추출
public List<LinkedHashMap<String, Object>> getReportForms(LinkedHashMap<String, Object> inMap) throws Exception
{
return reportOtherDao.getReportForms(inMap);
}
// 2025.05.21 나혁제 출력인자 변경
// 이슈보고서 양식 추출
public LinkedHashMap<String, Object> getReportForm(LinkedHashMap<String, Object> inMap) throws Exception
{
return reportOtherDao.getReportForm(inMap);
}
// 서비스 정보 목록 추출
public List<LinkedHashMap<String, Object>> getServiceCombo(int inInt) throws Exception
{
return reportOtherDao.getServiceCombo(inInt);
}
// 작업목록 추출
public LinkedHashMap<String, Object> getTaskCategory(int inInt) throws Exception
{
return reportOtherDao.getTaskCategory(inInt);
}
// 서비스 결재라인 조회
public List<LinkedHashMap<String, Object>> getSvcApprovalList(int inInt) throws Exception
{
return reportOtherDao.getSvcApprovalList(inInt);
}
// 이슈보고서 상세조회
public LinkedHashMap<String, Object> getReportWithBody(int inInt) throws Exception
{
return reportOtherDao.getReportWithBody(inInt);
}
// 이슈보고서 지산 구조 정보 조회
public List<LinkedHashMap<String, Object>> getReportAssets(int inInt) throws Exception
{
return reportOtherDao.getReportAssets(inInt);
}
// 이슈보고서 결재 정보 조회
public List<LinkedHashMap<String, Object>> getReportApproval(int inInt) throws Exception
{
return reportOtherDao.getReportApproval(inInt);
}
// 이슈보고서 공유그룹 조회
public List<LinkedHashMap<String, Object>> getReportSharing(int inInt) throws Exception
{
return reportOtherDao.getReportSharing(inInt);
}
// 메일전송 대상자 조회
public List<LinkedHashMap<String, Object>> getReportMailReciever(LinkedHashMap<String, Object> inMap) throws Exception
{
return reportOtherDao.getReportMailReciever(inMap);
}
// 이슈보고서 등록처리
public LinkedHashMap<String, Object> addReport( LinkedHashMap<String, Object> inMap
, List<LinkedHashMap<String, Object>> assetList
, List<LinkedHashMap<String, Object>> approvalsList
, List<LinkedHashMap<String, Object>> fileList
, LinkedHashMap<String, Object> reqApprovalMap
) throws Exception
{
String strReportId = generateRptId();
inMap.put("vcReportId", strReportId);
int iSucc = reportOtherDao.addReport(inMap);
// 보고서 자산 구조 입력
if(assetList != null && assetList.size()>0)
{
for(LinkedHashMap<String, Object> tempMap : assetList)
{
tempMap.put("inReportSeq", inMap.get("inReportSeq"));
reportOtherDao.addReportAssets(tempMap);
}
}
// 결제라인 입력
if(approvalsList != null && approvalsList.size()>0)
{
for(LinkedHashMap<String, Object> approvalMap : approvalsList)
{
approvalMap.put("inReportSeq", inMap.get("inReportSeq"));
reportOtherDao.addReportApproval(approvalMap);
}
}
// 파일정보저장
if( fileList != null
&& fileList.size()>0)
{
fileManageService.insertFileInfs(fileList);
}
// 승인요청 처리
if(reqApprovalMap.get("reqApprovalYn") != null && reqApprovalMap.get("reqApprovalYn").equals("Y"))
{
reqApprovalMap.put("inReportSeq", inMap.get("inReportSeq"));
procApprovalReport(reqApprovalMap);
}
LinkedHashMap<String, Object> returnMap = new LinkedHashMap<String, Object>();
returnMap.put("iSucc" , iSucc);
returnMap.put("inReportSeq" , inMap.get("inReportSeq"));
return returnMap;
}
// 이슈보고서 변경처리
public int updateReport( LinkedHashMap<String, Object> inMap
, List<LinkedHashMap<String, Object>> assetList
, List<LinkedHashMap<String, Object>> approvalsList
, List<LinkedHashMap<String, Object>> fileList
, LinkedHashMap<String, Object> reqApprovalMap
) throws Exception
{
int inReportStatus = CommonUtil.zeroConvert(inMap.get("inReportStatus"));
int inReportSeq = CommonUtil.zeroConvert(inMap.get("inReportSeq"));
int iSucc = reportOtherDao.updateReport(inMap);
// 보고서 자산 구조 입력
reportOtherDao.deleteReportAssetAll(inReportSeq);
if(assetList != null && assetList.size()>0)
{
for(LinkedHashMap<String, Object> tempMap : assetList)
{
tempMap.put("inReportSeq", inMap.get("inReportSeq"));
reportOtherDao.addReportAssets(tempMap);
}
}
// 결제라인 입력
if(inReportStatus == 0)
{
reportOtherDao.deleteReportApproval(inReportSeq);
if(approvalsList != null && approvalsList.size()>0)
{
for(LinkedHashMap<String, Object> approvalMap : approvalsList)
{
approvalMap.put("inReportSeq", inMap.get("inReportSeq"));
reportOtherDao.addReportApproval(approvalMap);
}
}
}
else
{
if(approvalsList != null && approvalsList.size()>0)
{
reportOtherDao.deleteReportApproval(inReportSeq);
for(LinkedHashMap<String, Object> approvalMap : approvalsList)
{
approvalMap.put("inReportSeq", inMap.get("inReportSeq"));
reportOtherDao.addReportApproval(approvalMap);
}
reportOtherDao.approvalInit(inReportSeq);
}
}
// 파일정보저장
if( fileList != null && fileList.size()>0)
{
if(inMap.get("atchFileInUpGb").equals("U"))
{
// 상세 정보만 입력
fileManageService.updateFileInfs(fileList);
}
else
{
// 마스터+상세 정보 입력 처리
fileManageService.insertFileInfs(fileList);
}
}
// 승인요청 처리
if(reqApprovalMap.get("reqApprovalYn") != null && reqApprovalMap.get("reqApprovalYn").equals("Y"))
{
procApprovalReport(reqApprovalMap);
}
return iSucc;
}
// 이슈보고서 삭제
public int deleteReport(LinkedHashMap<String, Object> inMap) throws Exception
{
int inReportSeq = CommonUtil.zeroConvert(inMap.get("inReportSeq"));
int iSucc = reportOtherDao.deleteReport(inReportSeq);
if(iSucc>0)
{
reportOtherDao.deleteReportApproval(inReportSeq);
reportOtherDao.deleteReportAssetAll(inReportSeq);
}
return iSucc;
}
// 이슈보고서 승인요청
public int procApprovalReport(LinkedHashMap<String, Object> inMap) throws Exception
{
return reportOtherDao.procApprovalReport(inMap);
}
// 이슈보고서 승인
public int procApproval(LinkedHashMap<String, Object> inMap) throws Exception
{
return reportOtherDao.procApproval(inMap);
}
// 이슈보고서 반려
public int rejectReport(LinkedHashMap<String, Object> inMap) throws Exception
{
return reportOtherDao.rejectReport(inMap);
}
// 보고서ID 추출
private String generateRptId() throws Exception
{
String strIncidentId = CommonUtil.getKST("YY-MMdd-") + egovRptIdGnrService.getNextStringId();
return strIncidentId;
}
}

View File

@ -24,6 +24,8 @@
</resultMap>
<!-- 2025.09.22 나혁제 IN_SORT_SN 정렬순서추가 -->
<!-- 2025.10.17 나혁제 정렬방식 변경 -->
<!-- ORDER BY IN_SORT_SN, VC_FORM_NAME -->
<select id="getReportForms" parameterType="java.util.LinkedHashMap" resultMap="formVo">
/* ReportDao.getReportForms */
SELECT A.IN_REPORT_FORM
@ -41,7 +43,7 @@
AND A.VC_FORM_NAME LIKE CONCAT('%' , #{searchKeyword}, '%')
AND B.CD_ID ='SM_002'
AND A.IN_TASK = B.CD
ORDER BY IN_SORT_SN, VC_FORM_NAME
ORDER BY A.IN_REPORT_FORM DESC
<include refid="paging"/>
</select>

View File

@ -0,0 +1,669 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.itmsapi.srm.dao.ReportOtherDao">
<resultMap type="java.util.LinkedHashMap" id="reportVo">
<result property="inReportSeq" column="IN_REPORT_SEQ"/>
<result property="inReportStatus" column="IN_REPORT_STATUS"/>
<result property="vcReportId" column="VC_REPORT_ID"/>
<result property="inIncidentSeq" column="IN_INCIDENT_SEQ"/>
<result property="vcIncidentNum" column="VC_INCIDENT_NUM"/>
<result property="inServiceCode" column="IN_SERVICE_CODE"/>
<result property="vcServiceName" column="VC_SERVICE_NAME"/>
<result property="dtStartDatetime" column="DT_START_DATETIME"/>
<result property="dtFinishDatetime" column="DT_FINISH_DATETIME"/>
<result property="inTaskUser" column="IN_TASK_USER"/>
<result property="vcTaskUser" column="VC_TASK_USER"/>
<result property="inRegUser" column="IN_REG_USER"/>
<result property="vcRegUser" column="VC_REG_USER"/>
<result property="dtLastUpdate" column="DT_LAST_UPDATE"/>
<result property="inTask" column="IN_TASK"/>
<result property="inDowntime" column="IN_DOWNTIME"/>
<result property="dtDownstartDatetime" column="DT_DOWNSTART_DATETIME"/>
<result property="dtDownfinishDatetime" column="DT_DOWNFINISH_DATETIME"/>
<result property="vcReportTitle" column="VC_REPORT_TITLE"/>
<result property="vcReportStatus" column="VC_REPORT_STATUS"/>
<result property="txReportBody" column="TX_REPORT_BODY"/>
<result property="vcTask" column="VC_TASK"/>
<result property="inReqApprovalUser" column="IN_REQ_APPROVAL_USER"/>
<result property="vcReqApprovalUser" column="VC_REQ_APPROVAL_USER"/>
<result property="dtReqApprovalDatetime" column="DT_REQ_APPROVAL_DATETIME"/>
<result property="txReqApprovalComment" column="TX_REQ_APPROVAL_COMMENT"/>
<result property="vcTaskCompany" column="VC_TASK_COMPANY"/>
<result property="inAssetCount" column="IN_ASSET_COUNT"/>
<result property="inPercallPrice" column="IN_PERCALL_PRICE"/>
<result property="atchFileId" column="ATCH_FILE_ID"/>
</resultMap>
<resultMap type="java.util.LinkedHashMap" id="formVo">
<result column="IN_REPORT_FORM" property="inReportForm"/>
<result column="VC_FORM_NAME" property="vcFormName"/>
<result column="VC_FORM_DESC" property="vcFormDesc"/>
<result column="IN_SORT_SN" property="inSortSn"/>
</resultMap>
<resultMap type="java.util.LinkedHashMap" id="selectVo">
<result column="VALUE" property="value"/>
<result column="LABEL" property="label"/>
<result column="SELECTED" property="selected"/>
</resultMap>
<resultMap type="java.util.LinkedHashMap" id="approval">
<result property="vcUserName" column="VC_USER_NAME"/>
<result property="vcStatus" column="VC_STATUS"/>
<result property="txComment" column="TX_COMMENT"/>
<result property="inUserSeq" column="IN_USER_SEQ"/>
<result property="inOrder" column="IN_ORDER"/>
<result property="inStatus" column="IN_STATUS"/>
<result property="dtApprovalDatetime" column="DT_APPROVAL_DATETIME"/>
</resultMap>
<resultMap type="java.util.LinkedHashMap" id="groupVo">
<result property="inUserGroupSeq" column="IN_USER_GROUP_SEQ"/>
<result property="vcUserGroup" column="VC_USER_GROUP"/>
<result property="vcUserGroupDesc" column="VC_USER_GROUP_DESC"/>
<result property="inCount" column="IN_COUNT"/>
</resultMap>
<resultMap type="java.util.LinkedHashMap" id="reportAsset">
<result property="inAssetSeq" column="IN_ASSET_SEQ"/>
<result property="vcAssetName" column="VC_ASSET_NAME"/>
<result property="vcCate1" column="VC_CATE1"/>
<result property="vcCate2" column="VC_CATE2"/>
<result property="vcCate3" column="VC_CATE3"/>
<result property="txComment" column="TX_COMMENT"/>
</resultMap>
<sql id="paging">
<if test="recordCountPerPage != null and firstIndex != null">
LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
</if>
</sql>
<sql id="sharing">
<if test="reqUser != null and reqUser != '' ">
AND (
A.IN_REPORT_SEQ IN ( SELECT IN_TARGET_SEQ
FROM CM_SHARING_MEMBER
WHERE IN_TYPE=1
AND IN_USER_GROUP_SEQ IN (#{groups}) )
OR
A.IN_REPORT_SEQ NOT IN (SELECT IN_TARGET_SEQ
FROM CM_SHARING_MEMBER
WHERE IN_TYPE=1)
)
</if>
</sql>
<!-- 엔지니어 권한 사용자가 보고서 검색시 본인 회사 소속인 작성글만 조회되도록. inPrivTemplateSeq 는 사이트마다 다를 수 있음. 신정원요구사항-->
<sql id="customizing">
<if test="customizing == 'kcredit' and inPrivTemplateSeq == 5">
AND (
A.IN_REG_USER IN (SELECT IN_USER_SEQ
FROM CM_USER
WHERE IN_COMPANY_SEQ=${reqUserCompany})
)
</if>
</sql>
<sql id="searchFilter">
<if test="status != null and status!=''"> AND A.IN_REPORT_STATUS IN (${status})</if>
<if test="reportId != null and reportId!=''"> AND A.VC_REPORT_ID LIKE "%${reportId}%"</if>
<if test="incidentNum != null and incidentNum!=''"> AND C.VC_INCIDENT_NUM LIKE "%${incidentNum}%"</if>
<if test="reportTitle != null and reportTitle!=''"> AND A.VC_REPORT_TITLE LIKE "%${reportTitle}%"</if>
<if test="regUser != null and regUser!=''"> AND A.VC_REG_USER LIKE "%${regUser}%"</if>
<if test="taskUser != null and taskUser !=0"> AND A.IN_TASK_USER = #{taskUser} </if>
<if test="taskCode != null and taskCode!=0"> AND A.IN_TASK = ${taskCode}</if>
<if test="sdate != null and sdate!=''"><![CDATA[ AND UNIX_TIMESTAMP(A.DT_LAST_UPDATE) >= UNIX_TIMESTAMP("${sdate}")]]></if>
<if test="edate != null and edate!=''"><![CDATA[ AND UNIX_TIMESTAMP(A.DT_LAST_UPDATE) <= UNIX_TIMESTAMP("${edate}")]]></if>
</sql>
<!-- 2025.02.17 나혁제 이부분은 일단 삭제처리
<include refid="customizing"/>
-->
<select id="searchReport" parameterType="java.util.LinkedHashMap" resultMap="reportVo">
<![CDATA[
/* ReportOtherDao.searchReport */
SELECT A.IN_REPORT_SEQ
, A.IN_REPORT_STATUS
, A.VC_REPORT_ID
, A.IN_INCIDENT_SEQ
, C.VC_INCIDENT_NUM
, DATE_FORMAT(A.DT_FINISH_DATETIME, '%Y-%m-%d %H:%i') AS DT_FINISH_DATETIME
, A.IN_TASK_USER
, A.VC_TASK_USER
, A.IN_REG_USER
, A.VC_REG_USER
, DATE_FORMAT(A.DT_LAST_UPDATE, '%Y-%m-%d %H:%i') AS DT_LAST_UPDATE
, A.IN_TASK
, A.IN_DOWNTIME
, A.VC_REPORT_TITLE
, DATE_FORMAT(A.DT_START_DATETIME, '%Y-%m-%d %H:%i') AS DT_START_DATETIME
, DATE_FORMAT(A.DT_DOWNSTART_DATETIME, '%Y-%m-%d %H:%i') AS DT_DOWNSTART_DATETIME
, DATE_FORMAT(A.DT_DOWNFINISH_DATETIME, '%Y-%m-%d %H:%i') AS DT_DOWNFINISH_DATETIME
, A.IN_SERVICE_CODE
, '' AS TX_REPORT_BODY
, B.CD_NM AS VC_TASK
, D.VC_SERVICE_NAME
, IF( A.IN_REPORT_STATUS=3, "승인완료"
, IF(A.IN_REPORT_STATUS=2, "반려"
, IF(A.IN_REPORT_STATUS=1, "승인중", "대기"))) AS VC_REPORT_STATUS
, IFNULL(A.IN_REQ_APPROVAL_USER, 0) AS IN_REQ_APPROVAL_USER
, A.DT_REQ_APPROVAL_DATETIME
, A.TX_REQ_APPROVAL_COMMENT
, A.VC_REQ_APPROVAL_USER
, (SELECT COUNT(IN_ASSET_SEQ)
FROM CM_REPORT_ASSET
WHERE IN_REPORT_SEQ = A.IN_REPORT_SEQ) AS IN_ASSET_COUNT
, IFNULL((SELECT COM.GRP_NM AS VC_COMPANY_NAME
FROM TB_AUTH_GRP_INFO COM
WHERE COM.GRP_ID = ( SELECT GROUP_ID
FROM COMVNUSERMASTER
WHERE ESNTL_ID = A.IN_TASK_USER)), "") AS VC_TASK_COMPANY
FROM CM_REPORT A
LEFT OUTER JOIN TB_CMM_DTL_CD_INFO B ON A.IN_TASK=B.CD
AND B.CD_ID ='SM_002'
LEFT OUTER JOIN CM_SERVICE D ON A.IN_SERVICE_CODE=D.IN_SERVICE_CODE
LEFT OUTER JOIN CM_INCIDENT C ON A.IN_INCIDENT_SEQ=C.IN_INCIDENT_SEQ
WHERE 1=1
AND A.IN_REPORT_SEQ > 0
AND A.IN_TASK = #{inTask}
]]>
<include refid="sharing"/>
<!-- 2025.02.17 나혁제 일단 처리하지 않음
<include refid="customizing"/> -->
<include refid="searchFilter"/>
<if test="sortField != null and sortField !=''">
<if test="sortField == 'vcReportId'"> ORDER BY A.VC_REPORT_ID</if>
<if test="sortField == 'vcReportStatus'"> ORDER BY VC_REPORT_STATUS</if>
<if test="sortField == 'vcServiceName'"> ORDER BY D.VC_SERVICE_NAME</if>
<if test="sortField == 'vcIncidentNum'"> ORDER BY C.VC_INCIDENT_NUM</if>
<if test="sortField == 'inDowntime'"> ORDER BY A.IN_DOWNTIME</if>
<if test="sortField == 'vcTask'"> ORDER BY B.VC_TASK</if>
<if test="sortField == 'vcReportTitle'"> ORDER BY A.VC_REPORT_TITLE</if>
<if test="sortField == 'vcRegUser'"> ORDER BY A.VC_REG_USER</if>
<if test="sortField == 'vcTaskUser'"> ORDER BY A.VC_TASK_USER</if>
<if test="sortField == 'vcTaskCompany'"> ORDER BY VC_TASK_COMPANY</if>
<if test="sortField == 'inAssetCount'"> ORDER BY IN_ASSET_COUNT</if>
<if test="sortField == 'dtLastUpdate'"> ORDER BY DT_LAST_UPDATE</if>
<if test="sortField == 'dtStartDatetime'"> ORDER BY DT_START_DATETIME</if>
<if test="sortField == 'dtFinishDatetime'"> ORDER BY DT_FINISH_DATETIME</if>
<if test="sortField == 'dtDownstartDatetime'"> ORDER BY DT_DOWNSTART_DATETIME</if>
<if test="sortField == 'dtDownfinishDatetime'"> ORDER BY DT_DOWNFINISH_DATETIME</if>
<if test="sortOrder != null and sortOrder =='asc'"> ASC</if>
<if test="sortOrder != null and sortOrder =='desc'"> DESC</if>
</if>
<if test="sortField == null or sortField ==''">
ORDER BY IN_REPORT_SEQ DESC
</if>
<include refid="paging"/>
</select>
<select id="searchReportCount" parameterType="java.util.HashMap" resultType="int">
/* ReportOtherDao.searchReportCount */
SELECT COUNT(A.IN_REPORT_SEQ)
FROM CM_REPORT A
LEFT OUTER JOIN TB_CMM_DTL_CD_INFO B ON A.IN_TASK=B.CD
AND B.CD_ID ='SM_002'
LEFT OUTER JOIN CM_SERVICE D ON A.IN_SERVICE_CODE=D.IN_SERVICE_CODE
LEFT OUTER JOIN CM_INCIDENT C ON A.IN_INCIDENT_SEQ=C.IN_INCIDENT_SEQ
WHERE 1=1
AND A.IN_REPORT_SEQ > 0
AND A.IN_TASK = #{inTask}
<include refid="sharing"/>
<include refid="customizing"/>
<include refid="searchFilter"/>
</select>
<!-- 2025.09.22 나혁제 IN_SORT_SN 정렬순서추가 -->
<select id="getReportForms" parameterType="java.util.HashMap" resultMap="formVo">
/* ReportOtherDao.getReportForms */
SELECT IN_REPORT_FORM
, VC_FORM_DESC
, VC_FORM_NAME
, IN_TASK
, IFNULL(IN_SORT_SN, 9999) AS IN_SORT_SN
FROM CM_REPORT_FORM
WHERE IN_TASK=${value}
ORDER BY IN_SORT_SN, VC_FORM_NAME
</select>
<select id="getServiceCombo" parameterType="int" resultMap="selectVo">
/* ReportOtherDao.getServiceCombo */
SELECT A.IN_SERVICE_CODE AS VALUE
, A.VC_SERVICE_NAME AS LABEL
, @I:=@I+1
,
<if test="value1 != 0 ">
IF(A.IN_SERVICE_CODE = #{value1}, 1, 0) AS SELECTED
</if>
<if test="value1 == null or value1 == 0">
IF(@I=0, 1, 0) AS SELECTED
</if>
FROM CM_SERVICE A
, (SELECT @I:=0) AS DM
ORDER BY A.IN_SERVICE_CODE
</select>
<!-- 2025.02.17 나혁제 value 변수명은 수정해야 한다. -->
<select id="getTaskCategory" parameterType="String" resultMap="selectVo" >
/* ReportOtherDao.getTaskCategory */
SELECT A.CD AS VALUE
, A.CD_NM AS LABEL
, @I:=@I+1,
<if test="value1 > 0">
IF(A.CD = #{value1}, 1, 0) AS SELECTED
</if>
<if test="value1 == null or value1 == 0">
IF(@I = 0, 1, 0) AS SELECTED
</if>
FROM TB_CMM_DTL_CD_INFO A
, (SELECT @I:=0) AS DM
WHERE A.CD_ID ='SM_002'
AND A.CD = #{value1}
ORDER BY A.CD
</select>
<select id="getSvcApprovalList" parameterType="int" resultMap="approval">
/* ReportOtherDao.getSvcApprovalList */
SELECT B.USER_NM AS VC_USER_NAME
, '' AS TX_COMMENT
, B.ESNTL_ID AS IN_USER_SEQ
, IN_ORDER
, 0 AS IN_STATUS
, "대기" AS VC_STATUS
, '' as DT_APPROVAL_DATETIME
FROM CM_SERVICE_DEF_APPROVAL A
INNER JOIN TB_TASK_USER_INFO B ON A.IN_USER_SEQ = B.ESNTL_ID
WHERE IN_SERVICE_CODE=#{value}
</select>
<!-- 2025.05.21 나혁제 쿼리 수정 -->
<select id="getReportForm" parameterType="java.util.LinkedHashMap" resultType="java.util.LinkedHashMap">
/* ReportOtherDao.getReportForm */
SELECT TX_REPORT_FORM AS txReportForm
, IN_TASK_USER AS inTaskUser
, VC_TASK_USER AS vcTaskUser
FROM CM_REPORT_FORM
WHERE IN_REPORT_FORM=#{seq}
</select>
<!--
<select id="getReportForm" parameterType="java.util.HashMap" resultType="String">
/* ReportOtherDao.getReportForm */
SELECT TX_REPORT_FORM
FROM CM_REPORT_FORM
WHERE IN_REPORT_FORM=#{seq}
</select>
-->
<insert id="addReport" parameterType="java.util.HashMap" useGeneratedKeys="true" keyProperty="inReportSeq">
/* ReportOtherDao.addReport */
INSERT INTO CM_REPORT
(
IN_REPORT_STATUS
, VC_REPORT_ID
, IN_INCIDENT_SEQ
, IN_TASK
, IN_PERCALL_PRICE
, <if test="dtStartDatetime!=null and dtStartDatetime!=''">DT_START_DATETIME,</if>
<if test="dtFinishDatetime!=null and dtFinishDatetime!=''">DT_FINISH_DATETIME, </if>
IN_DOWNTIME
, IN_TASK_USER
, VC_TASK_USER
, IN_REG_USER
, VC_REG_USER
, IN_SERVICE_CODE
, <if test="dtDownstartDatetime!=null and dtDownstartDatetime!=''">DT_DOWNSTART_DATETIME,</if>
<if test="dtDownfinishDatetime!=null and dtDownfinishDatetime!=''">DT_DOWNFINISH_DATETIME,</if>
DT_LAST_UPDATE
, VC_REPORT_TITLE
, TX_REPORT_BODY
, ATCH_FILE_ID
)
VALUES
(
#{inReportStatus}
, "${vcReportId}"
, #{inIncidentSeq}
, #{inTask}
, #{inPercallPrice}
, <if test="dtStartDatetime!=null and dtStartDatetime!=''">"${dtStartDatetime}",</if>
<if test="dtFinishDatetime!=null and dtFinishDatetime!=''">"${dtFinishDatetime}",</if>
#{inDowntime}
, #{inTaskUser}
, "${vcTaskUser}"
, #{inRegUser}
, "${vcRegUser}"
, #{inServiceCode}
, <if test="dtDownstartDatetime!=null and dtDownstartDatetime!=''">"${dtDownstartDatetime}",</if>
<if test="dtDownfinishDatetime!=null and dtDownfinishDatetime!=''">"${dtDownfinishDatetime}",</if>
now()
, "${vcReportTitle}"
, "${txReportBody}"
, #{atchFileId}
)
</insert>
<insert id="addReportAssets" parameterType="java.util.HashMap">
/* ReportOtherDao.addReportAssets */
INSERT INTO CM_REPORT_ASSET
(
IN_REPORT_SEQ
, IN_ASSET_SEQ
, TX_COMMENT
)
VALUES
(
#{inReportSeq}
, #{inAssetSeq}
, '${txComment}'
)
</insert>
<insert id="addReportSharing" parameterType="java.util.HashMap">
/* ReportOtherDao.addReportSharing */
INSERT INTO CM_SHARING_MEMBER
( IN_TYPE
, IN_TARGET_SEQ
, IN_USER_SEQ
, IN_USER_GROUP_SEQ
)
VALUES
(
1
, #{inReportSeq}
, 0
, #{sharing.inUserGroupSeq}
)
</insert>
<insert id="addReportApproval" parameterType="java.util.HashMap">
/* ReportOtherDao.addReportApproval */
INSERT INTO CM_REPORT_APPROVAL
(
IN_REPORT_SEQ
, IN_ORDER
, IN_USER_SEQ
, VC_USER_NAME
, IN_STATUS
, TX_COMMENT
, DT_APPROVAL_DATETIME
)
VALUES
(
#{inReportSeq}
, #{idx}
, #{inUserSeq}
, "${vcUserName}"
, 0
, ""
, null
)
</insert>
<select id="getReportWithBody" parameterType="int" resultMap="reportVo">
/* ReportOtherDao.getReportWithBody */
SELECT A.IN_REPORT_SEQ
, A.IN_REPORT_STATUS
, A.VC_REPORT_ID
, A.IN_INCIDENT_SEQ
, DATE_FORMAT(A.DT_START_DATETIME, '%Y-%m-%d %H:%i') AS DT_START_DATETIME
, DATE_FORMAT(A.DT_FINISH_DATETIME, '%Y-%m-%d %H:%i') AS DT_FINISH_DATETIME
, A.IN_TASK_USER
, A.VC_TASK_USER
, A.IN_REG_USER
, A.VC_REG_USER
, DATE_FORMAT(A.DT_LAST_UPDATE, '%Y-%m-%d %H:%i') AS DT_LAST_UPDATE
, A.IN_TASK
, A.IN_DOWNTIME
, A.VC_REPORT_TITLE
, DATE_FORMAT(A.DT_DOWNSTART_DATETIME, '%Y-%m-%d %H:%i') AS DT_DOWNSTART_DATETIME
, DATE_FORMAT(A.DT_DOWNFINISH_DATETIME, '%Y-%m-%d %H:%i') AS DT_DOWNFINISH_DATETIME
, A.IN_SERVICE_CODE
, C.VC_SERVICE_NAME
, A.TX_REPORT_BODY
, B.CD_NM AS VC_TASK
, A.IN_PERCALL_PRICE
, IF( A.IN_REPORT_STATUS=3, "승인완료"
, IF(A.IN_REPORT_STATUS=2, "반려"
, IF(A.IN_REPORT_STATUS=1, "승인중", "접수"))) AS VC_REPORT_STATUS
, IFNULL(A.IN_REQ_APPROVAL_USER, 0) AS IN_REQ_APPROVAL_USER
, DATE_FORMAT(A.DT_REQ_APPROVAL_DATETIME, '%Y-%m-%d %H:%i') AS DT_REQ_APPROVAL_DATETIME
, A.TX_REQ_APPROVAL_COMMENT
, A.VC_REQ_APPROVAL_USER
, A.ATCH_FILE_ID
FROM CM_REPORT A
LEFT OUTER JOIN TB_CMM_DTL_CD_INFO B ON A.IN_TASK=B.CD
AND B.CD_ID ='SM_002'
LEFT OUTER JOIN CM_SERVICE C ON A.IN_SERVICE_CODE=C.IN_SERVICE_CODE
WHERE A.IN_REPORT_SEQ = #{value}
</select>
<select id="getReportSharing" parameterType="int" resultMap="groupVo">
/* ReportOtherDao.getReportSharing */
SELECT A.IN_USER_GROUP_SEQ
, A.VC_USER_GROUP
, A.VC_USER_GROUP_DESC
, ( SELECT COUNT(IN_USER_SEQ)
FROM CM_USER_GROUP_MAP
WHERE IN_USER_GROUP_SEQ = A.IN_USER_GROUP_SEQ) AS IN_COUNT
FROM CM_USER_GROUP A
, CM_SHARING_MEMBER B
WHERE A.IN_USER_GROUP_SEQ = B.IN_USER_GROUP_SEQ
AND B.IN_USER_SEQ = 0
AND B.IN_TYPE=1
AND B.IN_TARGET_SEQ=#{value}
</select>
<select id="getReportAssets" parameterType="int" resultMap="reportAsset" >
/* ReportOtherDao.getReportAssets */
SELECT A.IN_ASSET_SEQ
, B.VC_ASSET_NAME
, A.TX_COMMENT
, C1.VC_CATE1
, C2.VC_CATE2
, C3.VC_CATE3
FROM CM_REPORT_ASSET A
, CM_ASSET B
LEFT OUTER JOIN CODE_ASSET_CATE1 C1 ON B.IN_CATE1=C1.IN_CATE1
LEFT OUTER JOIN CODE_ASSET_CATE2 C2 ON B.IN_CATE1=C2.IN_CATE1
AND B.IN_CATE2=C2.IN_CATE2
LEFT OUTER JOIN CODE_ASSET_CATE3 C3 ON B.IN_CATE1=C3.IN_CATE1
AND B.IN_CATE2=C3.IN_CATE2
AND B.IN_CATE3=C3.IN_CATE3
WHERE A.IN_ASSET_SEQ = B.IN_ASSET_SEQ
AND A.IN_REPORT_SEQ=#{value}
AND B.IN_DEL_FLAG=0
</select>
<select id="getReportApproval" parameterType="int" resultMap="approval">
/* ReportOtherDao.getReportApproval */
SELECT VC_USER_NAME
, TX_COMMENT
, IN_USER_SEQ
, IN_ORDER
, IN_STATUS
, DATE_FORMAT(DT_APPROVAL_DATETIME, '%Y-%m-%d %H:%i') AS DT_APPROVAL_DATETIME
, IF( IN_STATUS=3, "승인완료"
, IF(IN_STATUS=2, "반려"
, IF(IN_STATUS=1, "승인중", "대기"))) AS VC_STATUS
FROM CM_REPORT_APPROVAL
WHERE IN_REPORT_SEQ=#{value}
ORDER BY IN_ORDER
</select>
<update id="updateReport" parameterType="java.util.HashMap" >
/* ReportOtherDao.updateReport */
UPDATE CM_REPORT
SET IN_TASK=#{inTask}
, <if test="dtStartDatetime!=null and dtStartDatetime!=''">DT_START_DATETIME="${dtStartDatetime}",</if>
<if test="dtStartDatetime==null or dtStartDatetime==''">DT_START_DATETIME=null,</if>
<if test="dtFinishDatetime!=null and dtFinishDatetime!=''">DT_FINISH_DATETIME="${dtFinishDatetime}", </if>
<if test="dtFinishDatetime==null or dtFinishDatetime==''">DT_FINISH_DATETIME=null, </if>
IN_DOWNTIME=#{inDowntime}
, IN_PERCALL_PRICE=#{inPercallPrice}
, IN_TASK_USER=#{inTaskUser}
, VC_TASK_USER=#{vcTaskUser}
, IN_REG_USER=#{inRegUser}
, VC_REG_USER=#{vcRegUser}
, IN_SERVICE_CODE=#{inServiceCode}
, <if test="dtDownstartDatetime!=null and dtDownstartDatetime!=''">DT_DOWNSTART_DATETIME="${dtDownstartDatetime}",</if>
<if test="dtDownstartDatetime==null or dtDownstartDatetime==''">DT_DOWNSTART_DATETIME=null,</if>
<if test="dtDownfinishDatetime!=null and dtDownfinishDatetime!=''">DT_DOWNFINISH_DATETIME="${dtDownfinishDatetime}",</if>
<if test="dtDownfinishDatetime==null or dtDownfinishDatetime==''">DT_DOWNFINISH_DATETIME=null,</if>
DT_LAST_UPDATE=now()
, VC_REPORT_TITLE=#{vcReportTitle}
, TX_REPORT_BODY=#{txReportBody}
, ATCH_FILE_ID=#{atchFileId}
WHERE IN_REPORT_SEQ=${inReportSeq}
</update>
<delete id="deleteReportAssetAll" parameterType="int">
/* ReportOtherDao.deleteReportAssetAll */
DELETE FROM CM_REPORT_ASSET
WHERE IN_REPORT_SEQ = #{value}
</delete>
<delete id="deleteReportSharing" parameterType="int">
/* ReportOtherDao.deleteReportSharing */
DELETE FROM CM_SHARING_MEMBER
WHERE IN_TYPE=1
AND IN_TARGET_SEQ=#{value}
</delete>
<delete id="deleteReportApproval" parameterType="int">
/* ReportOtherDao.deleteReportApproval */
DELETE FROM CM_REPORT_APPROVAL
WHERE IN_REPORT_SEQ=#{inReportSeq}
</delete>
<!-- 승인진행 중에 보고서 수정하여, 승인 진행상황 모두 초기화 -->
<update id="approvalInit" parameterType="int">
/* ReportOtherDao.approvalInit */
UPDATE CM_REPORT
SET IN_REPORT_STATUS=0
, DT_REQ_APPROVAL_DATETIME = NULL
, TX_REQ_APPROVAL_COMMENT = ''
WHERE IN_REPORT_SEQ=#{value}
</update>
<delete id="deleteReport" parameterType="int">
/* ReportOtherDao.deleteReport */
DELETE FROM CM_REPORT
WHERE IN_REPORT_SEQ = #{inReportSeq}
</delete>
<update id="procApprovalReport" parameterType="java.util.LinkedHashMap" statementType="CALLABLE">
{ call PROC_REQ_APPROVAL(
1
, #{inReportSeq}
, #{inUserSeq}
, "${txComment}"
)
}
</update>
<update id="procApproval" parameterType="java.util.LinkedHashMap" statementType="CALLABLE">
{ call PROC_APPROVAL(
1
, #{inReportSeq}
, #{inUserSeq}
,"${txComment}"
)
}
</update>
<update id="rejectReport" parameterType="java.util.LinkedHashMap" statementType="CALLABLE">
{ call PROC_REJECT(
1
, #{inReportSeq}
, #{inUserSeq}
, "${txComment}"
)
}
</update>
<!-- 2025.07.04 나혁제 메일주소가 없는경우 도 추출
AND U.EML_ADDR IS NOT NULL
AND U.EML_ADDR != ""
-->
<select id="getReportMailReciever" parameterType="java.util.LinkedHashMap" resultType="java.util.LinkedHashMap">
/* ReportOtherDao.getReportMailReciever */
SELECT U.ESNTL_ID AS IN_USER_SEQ
, U.TASK_USER_ID AS VC_USER_ID
, U.USER_NM AS VC_USER_NAME
, U.EML_ADDR AS VC_USER_EMAIL
, U.MOVE_TELNO AS VC_USER_PHONE
, U.KATALK_ALAM_YN AS KATALK_ALAM_YN
, U.MAIL_ALAM_YN AS MAIL_ALAM_YN
FROM TB_TASK_USER_INFO U
, CM_REPORT C
WHERE C.IN_REPORT_SEQ=#{IN_REPORT_SEQ} AND
(
<if test="type == 1"> <!-- 등록 : 작업자 -->
U.ESNTL_ID = C.IN_REG_USER
OR U.ESNTL_ID = C.IN_TASK_USER
</if>
<if test="type == 2"> <!-- 수정 : 작업자 -->
U.ESNTL_ID = C.IN_REG_USER
OR U.ESNTL_ID = C.IN_TASK_USER
</if>
<if test="type == 3"> <!-- 승인요청 : 다음 결재라인, 작업자 -->
U.ESNTL_ID = C.IN_REG_USER
OR U.ESNTL_ID = C.IN_TASK_USER
OR U.ESNTL_ID = ( SELECT IN_USER_SEQ
FROM CM_REPORT_APPROVAL
WHERE IN_REPORT_SEQ=#{IN_REPORT_SEQ}
AND IN_STATUS=1 )
</if>
<if test="type == 4"> <!-- 승인완료 : 작업자 -->
U.ESNTL_ID = C.IN_TASK_USER
OR U.ESNTL_ID = C.IN_REG_USER
OR C.IN_REQ_APPROVAL_USER = U.ESNTL_ID
</if>
<if test="type == 5"> <!-- 반려 : 작업자, 결재요청자, 하위 결재라인 -->
U.ESNTL_ID = C.IN_TASK_USER
OR U.ESNTL_ID = C.IN_REG_USER
OR C.IN_REQ_APPROVAL_USER = U.ESNTL_ID
<!-- 반려시 하위 승인자 포함 -->
OR U.ESNTL_ID IN ( SELECT IN_USER_SEQ
FROM CM_REPORT_APPROVAL
WHERE IN_REPORT_SEQ = #{IN_REPORT_SEQ}
AND IN_STATUS=3)
</if>
)
GROUP BY U.ESNTL_ID
</select>
</mapper>