feat: 폐기보고 완료 처리 NIMS API 연계 처리 개발 반영

main
Jonguk. Lim 1 year ago
parent 6ea0523e75
commit 74f086f6e3

@ -0,0 +1,2 @@
INSERT INTO adds.tb_grp_action (GRP_ID, ACTION, REG_DT, RGTR) VALUES ('userAction', '/adds/nims/dsuseMgtCmplt-popup.do', '20240619104744', '0000000000');
INSERT INTO adds.tb_grp_action (GRP_ID, ACTION, REG_DT, RGTR) VALUES ('userAction', '/adds/nims/saveDsuseMgtCmplt.do', '20240619104744', '0000000000');

@ -1,8 +1,8 @@
package cokr.xit.adds.cmm.model;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.*;
import lombok.Data;
import lombok.*;
@Data
public class DsuseMappingInfo {
@ -77,4 +77,9 @@ public class DsuseMappingInfo {
private String dsuseMthCd;
private String dsuseLoc;
private String prgrsSttsCd;
private String deptCd;
private String deptNm;
private String dsuseRmk;
private String userId;
}

@ -0,0 +1,25 @@
package cokr.xit.adds.nims.dao;
import org.egovframe.rte.psl.dataaccess.mapper.*;
import cokr.xit.adds.cmm.model.*;
import cokr.xit.foundation.component.*;
/**
* <pre>
* description :
* packageName : cokr.xit.adds.nims.dao
* fileName : DsuseMgtMappingMapper
* author : limju
* date : 2024 11 25
* ======================================================================
*
* ----------------------------------------------------------------------
* 2024 11 25 limju
*
* </pre>
*/
@Mapper("dsuseMgtMappingMapper")
public interface DsuseMgtMappingMapper extends AbstractMapper {
int saveDsuseMgtCmplt(final DsuseMappingInfo dsuseMappingInfo);
}

@ -1,11 +1,10 @@
package cokr.xit.adds.nims.service;
import java.util.List;
import java.util.*;
import cokr.xit.adds.nims.DsuseMgtDetailQuery;
import cokr.xit.adds.nims.DsuseMgtRsltQuery;
import cokr.xit.adds.nims.DsuseMgtStatisticsQuery;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.adds.cmm.model.*;
import cokr.xit.adds.nims.*;
import cokr.xit.foundation.data.*;
public interface AddsNimsService {
List<DataObject> getDsuseMgtDetailList(DsuseMgtDetailQuery query);
@ -22,4 +21,6 @@ public interface AddsNimsService {
List<DataObject> getDsuseMgtDsuseQyByBsshStatistics(DsuseMgtStatisticsQuery query);
List<DataObject> getDsuseMgtDsuseQyByBsshStatisticsDtls(DsuseMgtStatisticsQuery query);
String saveDsuseMgtCmplt(DsuseMappingInfo dsuseMappingInfo);
}

@ -1,23 +1,24 @@
package cokr.xit.adds.nims.service.bean;
import java.util.List;
import java.util.*;
import javax.annotation.Resource;
import javax.annotation.*;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.*;
import org.springframework.stereotype.*;
import cokr.xit.adds.nims.DsuseMgtDetailQuery;
import cokr.xit.adds.nims.DsuseMgtRsltQuery;
import cokr.xit.adds.nims.DsuseMgtStatisticsQuery;
import cokr.xit.adds.nims.dao.DsuseMgtDetailMapper;
import cokr.xit.adds.nims.dao.DsuseMgtRsltMapper;
import cokr.xit.adds.nims.dao.DsuseMgtStatisticsMapper;
import cokr.xit.adds.nims.service.AddsNimsService;
import cokr.xit.foundation.component.AbstractServiceBean;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.adds.cmm.model.*;
import cokr.xit.adds.nims.*;
import cokr.xit.adds.nims.dao.*;
import cokr.xit.adds.nims.service.*;
import cokr.xit.foundation.component.*;
import cokr.xit.foundation.data.*;
@Service("addsNimsService")
public class AddsNimsServiceBean extends AbstractServiceBean implements AddsNimsService {
@Value("${app.api.host:}")
private String apiHost;
/** 폐기관리상세 정보 DAO */
@Resource(name = "dsuseMgtDetailMapper")
private DsuseMgtDetailMapper dsuseMgtDetailMapper;
@ -28,6 +29,9 @@ public class AddsNimsServiceBean extends AbstractServiceBean implements AddsNims
@Resource(name = "dsuseMgtStatisticsMapper")
private DsuseMgtStatisticsMapper dsuseMgtStatisticsMapper;
@Resource(name = "dsuseMgtMappingMapper")
private DsuseMgtMappingMapper dsuseMgtMappingMapper;
@Override
public List<DataObject> getDsuseMgtDetailList(DsuseMgtDetailQuery query){
return dsuseMgtDetailMapper.selectDsuseMgtDetailList(query);
@ -76,4 +80,26 @@ public class AddsNimsServiceBean extends AbstractServiceBean implements AddsNims
public List<DataObject> getDsuseMgtDsuseQyByBsshStatisticsDtls(DsuseMgtStatisticsQuery query) {
return dsuseMgtStatisticsMapper.selectDsuseMgtDsuseQyByBsshStatisticsDtls(query);
}
@Override
public String saveDsuseMgtCmplt(final DsuseMappingInfo dsuseMappingInfo) {
// FIXME:: NIMS 폐기보고완료 API 연계 호출 결과 GET - 연계 완료후 comment 제거
// String rslt = ApiUtil.callNimsApiFromJSON(apiHost + saveDsuseMgtCmpltEndpoint, dsuseMappingInfo);
// JSON json = new JSON();
// json.parse(rslt, new TypeReference<>() {});
try {
if (dsuseMgtMappingMapper.saveDsuseMgtCmplt(dsuseMappingInfo) == 1) {
return "[S]";
} else {
return "[F]";
}
// FIXME:: NIMS 폐기보고완료 API 연계 호출 결과 성공시 rollback 되면 않됨
}catch(Exception e) {
log().error(e.getMessage());
return "[F]";
}
}
}

@ -247,6 +247,7 @@ public class AddsNimsController extends ApplicationController {
.addObject("pageName", "dsuseMgtMappingInfo") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
.addObject("dsuseMappingInfo", toJson(dsuseMappingInfo)) /* View(jsp)에서 사용할 id 뒤에 붙일 suffix */;
}
@RequestMapping(value = "/updatePrgsSttusOfDsuseMgt.do", name = "페기 보고 확인 등록")
public ModelAndView updatePrgsSttusOfDsuseMgt(DsuseMgtReceiptQuery qry) {
boolean saved = false;
@ -261,6 +262,34 @@ public class AddsNimsController extends ApplicationController {
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
@RequestMapping(value = "/dsuseMgtCmplt-popup.do", name="폐기보고완료등록 팝업")
public ModelAndView dsuseMgtCmpltPopup(DsuseMappingInfo dsuseMappingInfo) {
ModelAndView mav = new ModelAndView("adds/nims/dsuseMgtCmplt-popup");
setCmmCode("ADDS05", mav);
return mav
.addObject("dsuseMgtInfo", toJson(dsuseMappingInfo))
.addObject("pageName", "dsuseMgtCmpltPopup") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
.addObject("infoPrefix", "dsuseMgtCmplt") // prefix
.addObject("infoPrefixUrl", "/adds/nims"); // prefixUrl
}
@RequestMapping(value = "/saveDsuseMgtCmplt.do", name = "페기보고 완료 등록")
public ModelAndView saveDsuseMgtCmplt(DsuseMappingInfo dsuseMappingInfo) {
boolean saved = false;
String rtnMsg = addsNimsService.saveDsuseMgtCmplt(dsuseMappingInfo);
String message;
if(rtnMsg.contains("[S]")) {
saved = true;
}else{
saved = false;
}
return new ModelAndView("jsonView")
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
//-------------------------------------------------------------------------------------------------
// 보고 확인 처리
//-------------------------------------------------------------------------------------------------

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cokr.xit.adds.nims.dao.DsuseMgtMappingMapper">
<update id="saveDsuseMgtCmplt" parameterType="map">
/* 폐기보고완료 등록(DsuseMgtMappingMapper.saveDsuseMgtCmplt) */
UPDATE tb_dsuse_mgt
SET dsuse_rmk = #{dsuseRmk}
, prgrs_stts_cd = #{prgrsSttsCd}
, mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s')
, mdfr = #{userId}
WHERE dscdmng_id = #{dscdmngId}
</update>
</mapper>

@ -0,0 +1,168 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<c:set var="prefixName" scope="request">폐기보고 완료 등록</c:set>
<!-- inner page html -->
<div class="content-wrapper">
<!-- Content -->
<div class="container flex-grow-1 px-0">
<!-- Page Body -->
<%-- <div class="card">--%>
<!-- 입력 영역 -->
<form id="cmplt--${pageName}" name="cmplt">
<%-- <label for="cmplt--${pageName}" style="margin-top: 10px; padding-left: 20px;"><strong>취급 업체 정보</strong></label>--%>
<div class="row my-1 mx-4 g-1 border-card rounded-3">
<div class="col-md-4">
<label class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end" for="deptNm--${pageName}">관할관청</label>
<input type="text" class="form-control w-px-180" id="deptNm--${pageName}" name="deptNm" data-map="deptNm" readonly>
</div>
<div class="col-md-4">
<label class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end" for="bsshNm--${pageName}">업체명</label>
<input type="text" class="form-control w-px-180" id="bsshNm--${pageName}" name="bsshNm" data-map="bsshNm" readonly>
</div>
<div class="col-md-4">
<label class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end" for="dsuseDe--${pageName}">폐기일자</label>
<input type="text" class="form-control w-px-180" id="dsuseDe--${pageName}" name="dsuseDe" data-map="dsuseDe" data-fmt-type="day" readonly>
</div>
<div class="col-md-4">
<label for="dsuseMthCd--${pageName}" class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end">폐기방법</label>
<select class="form-select w-px-180" id="dsuseMthCd--${pageName}" name="dsuseMthCd" style="pointer-events: none;">
<c:forEach items="${ADDS05}" var="item">
<option value="${item.code}">${item.code}: ${item.value}</option>
</c:forEach>
</select>
</div>
<div class="col-md-4">
<label for="dscdmngId--${pageName}" class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end" style="color: #696cff; font-weight: bold">폐기관리ID</label>
<input type="text" class="form-control w-px-180" id="dscdmngId--${pageName}" name="dscdmngId" data-map="dscdmngId" style="color: #696cff; font-weight: bold" readonly>
</div>
<div class="col-md-4">
<label for="usrRptIdNo--${pageName}" class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end" style="color: #696cff; font-weight: bold">NIMS사용자보고ID</label>
<input type="text" class="form-control w-px-180" id="usrRptIdNo--${pageName}" name="usrRptIdNo" data-map="usrRptIdNo" style="color: #696cff; font-weight: bold" readonly>
</div>
<div class="col-md-11">
<label for="dsuseRmk--${pageName}" class="w-px-150 bg-lighter pe-2 col-form-label text-sm-end">비고</label>
<input type="text" id="dsuseRmk--${pageName}" name="dsuseRmk" value = "${dsuseRmk}" class="form-control w-px-800" title="비고" data-map="dsuseRmk" style="align-items: baseline"/>
</div>
</div>
<%-- <div class="row my-1 mx-1 g-1 border-card rounded"></div>--%>
</form>
<%-- </div> <!-- <div class="card"> -->--%>
<!-- 업무 버튼 표시 -->
<div>
<span class="container-page-btn">
<span class="container-window-btn-right">
<!-- 업무 버튼 -->
<button type="button" class="btn btn-success w-px-80" id="btnSave--${pageName}" title="NIMS 폐기보고 완료 처리">NIMS 폐기보고 완료 처리</button>
</span>
</span>
</div>
<!-- / 업무 버튼 표시 -->
</div> <!-- / Content <div class="container flex-grow-1 px-0"> -->
</div> <!-- / inner page html <div class="content-wrapper"> -->
<script>
/**************************************************************************
* Global Variable
**************************************************************************/
pageObject["${pageName}"] = {};
prdRowKey = 0;
/**************************************************************************
* script 진입
**************************************************************************/
$(document).ready(function() {
// pageObject
let $P = pageObject["${pageName}"];
// FormFields
$P.cmpltFormFields = new AddsFormFields("#cmplt--${pageName}");
/**************************************************************************
* DatasetControl
**************************************************************************/
$P.control = new DatasetControl({
prefix: "dsuseMgtCmplt"
, prefixName: "폐기보고완료"
, keymapper: info => info ? info.dscdmngId : ""
, dataGetter: obj => obj.${infoPrefix}Info
, infoSize: "xl"
});
/**************************************************************************
* DatasetControl 이벤트
**************************************************************************/
// 현재 선택 자료 변경 이벤트
$P.control.onCurrentChange = item => {
if (!item) return;
$P.cmpltFormFields.set($P.control, item);
}
// 저장 callback
// 저장
$P.control.save = (cmplt) => {
let saveData = {
...cmplt,
userId: "${currentUser.account}"
}
json.post({
url:wctx.url("/adds/nims/saveDsuseMgtCmplt.do"),
data:{
...cmplt,
userId: "${currentUser.account}",
prgrsSttsCd: "99"
},
success:resp => {
if(!resp.saved){
dialog.alert({
content: resp.rtnMsg
});
return;
}
dialog.alert("폐기보고완료 처리 되었습니다");
dialog.close("dsuseMgtCmplt-popup");
}
});
}
/**************************************************************************
* 버튼 clickEvent
**************************************************************************/
// 저장
$P.fnSave = async() => {
$P.control.save($P.cmpltFormFields.get());
}
/**************************************************************************
* 초기 셋팅
**************************************************************************/
// 이벤트 설정
$P.setEvent = () => {
// 버튼 이벤트
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
}
// 초기 화면 설정
$P.initForm = () => {
$("#cmplt--${pageName}").find("input[name='checkUseYn']").prop("checked", true);
}
/**************************************************************************
* 최초 실행 함수
**************************************************************************/
// 1. 이벤트 설정
$P.setEvent();
// 2. 초기 화면 설정
$P.initForm();
// 3. Dataset 설정
$P.control.setData([${dsuseMgtInfo}]);
});
</script>

@ -95,6 +95,7 @@
<th class="cmn" style="width: 300.469px;">업체명</th>
<th class="cmn" style="width: 90px;">보고건수</th>
<th class="cmn" style="width: 270.469px;">NIMS보고ID</th>
<th class="cmn" style="width: 270.469px;">비고</th>
<th class="cmn" style="width: 160.469px;">처리상태</th>
<th class="cmn" style="width: 180.469px;">폐기사유</th>
<th class="cmn" style="width: 200.469px;">폐기장소</th>
@ -116,6 +117,7 @@
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">
<a href="#">{USR_RPT_ID_NO}</a>
</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DSUSE_RMK}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{PRGRS_STTS_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DSUSE_PRV_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{DSUSE_LOC}</td>
@ -278,12 +280,16 @@
$P.detailControl.load(1);
if(!${currentUser.hasAuthorities("ROLE_MANAGER")} && !${currentUser.hasAuthorities("ROLE_ADMIN")}) {
// 폐기보고확인 상태이면 NIMS보고완료 활성화
if(item.data.PRGRS_STTS_CD == '21'){
$("#btnPrgsSttus--${pageName}").prop("disabled", false);
}else{
$("#btnPrgsSttus--${pageName}").prop("disabled", true);
}
// FIXME: 폐기보고완료 개발시 코멘트 제거 - 임시로 조건 제거
//$("#btnPrgsSttus--${pageName}").prop("disabled", false);
// 폐기결과[통보]처리 || 폐기보고확인이면 NIMS폐기보고확인 버튼 활성화
if(item.data.PRGRS_STTS_CD == '06' || item.data.PRGRS_STTS_CD == '21'){
$("#btnCreateDsuseMgtMapping--${pageName}").prop("disabled", false);
}else{
@ -344,7 +350,7 @@
dsuseSeCd: row.DSUSE_SE_CD,
dsuseMthCd: row.DSUSE_MTH_CD,
dsuseLoc: row.DSUSE_LOC,
prgrsSttsCd: row.PRGRS_STTS_CD
prgrsSttsCd: row.PRGRS_STTS_CD,
};
ajax.get({
@ -365,7 +371,6 @@
}
$P.control.onSave = (resp) => {
// let dialogTitle = $("#" + $P.control.prefix + "Dialog").find("h5.modal-title").html();
let showMessage = "저장에 실패 하였습니다.";
if (resp.saved) {
showMessage = "저장에 성공 하였습니다.";
@ -497,13 +502,36 @@
// 처리상태 완료로 변경
$P.fnPrgsStts = () => {
dialog.alert({
content : "현재 " + $P.control.dataset.getCurrent().DSCDMNG_ID + " 정보를 완료 처리 하시겠습니까?",
init : function() {
AppSupport.focusOK();
},
onOK : () => {
$P.control.prgsSttus();
const row = $P.control.dataset.getCurrent();
if (typeof row == "undefined" || row == null || row == "") return;
let dialogTitle = "폐기보고 완료 " + (row.DSUSE_RMK?.trim().length > 0? "변경": "등록");
ajax.get({
url : wctx.url("/adds/nims/dsuseMgtCmplt-popup.do")
, data : {
deptCd : row.DEPT_CD,
deptNm : row.DEPT_NM,
dscdmngId: row.DSCDMNG_ID,
bsshNm: row.BSSH_NM,
bsshCd: row.BSSH_CD,
usrRptIdNo: row.USR_RPT_ID_NO,
dsuseDe: row.DSUSE_DE,
dsuseMthCd: row.DSUSE_MTH_CD,
prgrsSttsCd: row.PRGRS_STTS_CD,
deptNm: row.DEPT_NM,
dsuseRmk: row.DSUSE_RMK
}
, success : resp => {
dialog.open({
id : "dsuseMgtCmplt-popup"
, title : dialogTitle
, content : resp
, size : $P.control.infoSize
, onClose : () => {
$P.control.reload({all : true});
}
});
}
});
}

Loading…
Cancel
Save