부과제외 등록 수정.

단속상태코드 변경이력 추가.
main
jjh 1 year ago
parent 87579312f5
commit 5e74c8a721

@ -0,0 +1,82 @@
package cokr.xit.fims.cmmn;
import cokr.xit.foundation.AbstractEntity;
import lombok.Getter;
import lombok.Setter;
/**
*
* <p> : .
*
* <pre>
* ============ ============
* 2023-07-19 JoJH
* ================================
* </pre>
*/
@Getter
@Setter
public class CrdnSttsHstry extends AbstractEntity {
/**
* ID
*/
private String sttsHstryId;
/**
* ID
*/
private String crdnId;
/**
*
*/
private String bfrSttsCd;
/**
*
*/
private String bfrSttsChgDt;
/**
*
*/
private String crdnSttsCd;
/**
* ID
*/
private String taskDtlId;
/**
*
*/
private String etcCn;
/**
*
*/
private String useYn;
/**
*
*/
private String regDt;
/**
*
*/
private String rgtr;
/**
*
*/
private String mdfcnDt;
/**
*
*/
private String mdfr;
}

@ -0,0 +1,19 @@
package cokr.xit.fims.cmmn;
import cokr.xit.foundation.component.QueryRequest;
/**
*
* <p> :
*
* <pre>
* ============ ============
* 2023-07-19 JoJH
* ================================
* </pre>
*/
public class CrdnSttsHstryQuery extends QueryRequest {
private static final long serialVersionUID = 1L;
}

@ -0,0 +1,97 @@
package cokr.xit.fims.cmmn.dao;
import java.util.List;
import java.util.Map;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import cokr.xit.foundation.component.AbstractMapper;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.cmmn.CrdnSttsHstry;
import cokr.xit.fims.cmmn.CrdnSttsHstryQuery;
/** DAO
*
* <p> :
*
* <pre>
* ============ ============
* 2023-07-19 JoJH
* ================================
* </pre>
*/
@Mapper("crdnSttsHstryMapper")
public interface CrdnSttsHstryMapper extends AbstractMapper {
/** .<br />
* @param req
* @return
*/
List<DataObject> selectCrdnSttsHstryList(CrdnSttsHstryQuery req);
/** .
* @param req
* @return
*/
List<CrdnSttsHstry> selectCrdnSttsHstrys(CrdnSttsHstryQuery req);
/** .
* @param params
* <ul><li>"crdnSttsHstry" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int insertCrdnSttsHstry(Map<String, Object> params);
/** .
* @param crdnSttsHstry
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean insert(CrdnSttsHstry crdnSttsHstry) {
return crdnSttsHstry != null && insertCrdnSttsHstry(params().set("crdnSttsHstry", crdnSttsHstry)) == 1;
}
/** .
* @param params
* <ul><li>"crdnSttsHstry" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int updateCrdnSttsHstry(Map<String, Object> params);
/** .
* @param crdnSttsHstry
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean update(CrdnSttsHstry crdnSttsHstry) {
return crdnSttsHstry != null && updateCrdnSttsHstry(params().set("crdnSttsHstry", crdnSttsHstry)) == 1;
}
/** .
* @param params
* <ul><li>"crdnSttsHstry" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int deleteCrdnSttsHstry(Map<String, ?> params);
/** .
* @param crdnSttsHstry
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean delete(CrdnSttsHstry crdnSttsHstry) {
return crdnSttsHstry != null && deleteCrdnSttsHstry(params().set("crdnSttsHstry", crdnSttsHstry)) == 1;
}
}

@ -0,0 +1,59 @@
package cokr.xit.fims.cmmn.service;
import java.util.List;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.cmmn.CrdnSttsHstry;
import cokr.xit.fims.cmmn.CrdnSttsHstryQuery;
/** .
*
* <p> :
*
* <pre>
* ============ ============
* 2023-07-19 JoJH
* ================================
* </pre>
*/
public interface CrdnSttsHstryService {
/** .
* @param req
* @return
*/
List<DataObject> getCrdnSttsHstryList(CrdnSttsHstryQuery req);
/** .
* @param req
* @return
*/
List<CrdnSttsHstry> getCrdnSttsHstrys(CrdnSttsHstryQuery req);
/** .
* @param crdnSttsHstry
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
boolean create(CrdnSttsHstry crdnSttsHstry);
/** .
* @param crdnSttsHstry
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
boolean update(CrdnSttsHstry crdnSttsHstry);
/** .
* @param crdnSttsHstry
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
boolean remove(CrdnSttsHstry crdnSttsHstry);
}

@ -0,0 +1,81 @@
package cokr.xit.fims.cmmn.service.bean;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import cokr.xit.foundation.AbstractComponent;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.cmmn.CrdnSttsHstry;
import cokr.xit.fims.cmmn.CrdnSttsHstryQuery;
import cokr.xit.fims.cmmn.dao.CrdnSttsHstryMapper;
/** Bean
*
* <p> :
*
* <pre>
* ============ ============
* 2023-07-19 JoJH
* ================================
* </pre>
*/
@Component("crdnSttsHstryBean")
public class CrdnSttsHstryBean extends AbstractComponent {
/** 단속 상태 이력 정보 DAO */
@Resource(name = "crdnSttsHstryMapper")
private CrdnSttsHstryMapper crdnSttsHstryMapper;
/** .
* @param req
* @return
*/
public List<DataObject> getCrdnSttsHstryList(CrdnSttsHstryQuery req) {
return crdnSttsHstryMapper.selectCrdnSttsHstryList(req);
}
/** .
* @param req
* @return
*/
public List<CrdnSttsHstry> getCrdnSttsHstrys(CrdnSttsHstryQuery req) {
return crdnSttsHstryMapper.selectCrdnSttsHstrys(req);
}
/** .
* @param crdnSttsHstry
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public boolean create(CrdnSttsHstry crdnSttsHstry) {
return crdnSttsHstryMapper.insert(crdnSttsHstry);
}
/** .
* @param crdnSttsHstry
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public boolean update(CrdnSttsHstry crdnSttsHstry) {
return crdnSttsHstryMapper.update(crdnSttsHstry);
}
/** .
* @param crdnSttsHstry
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public boolean remove(CrdnSttsHstry crdnSttsHstry) {
return crdnSttsHstryMapper.delete(crdnSttsHstry);
}
}

@ -0,0 +1,56 @@
package cokr.xit.fims.cmmn.service.bean;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import cokr.xit.foundation.component.AbstractServiceBean;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.cmmn.CrdnSttsHstry;
import cokr.xit.fims.cmmn.CrdnSttsHstryQuery;
import cokr.xit.fims.cmmn.service.CrdnSttsHstryService;
/** .
*
* <p> :
*
* <pre>
* ============ ============
* 2023-07-19 JoJH
* ================================
* </pre>
*/
@Service("crdnSttsHstryService")
public class CrdnSttsHstryServiceBean extends AbstractServiceBean implements CrdnSttsHstryService {
/** 단속 상태 이력 정보 Bean */
@Resource(name = "crdnSttsHstryBean")
private CrdnSttsHstryBean crdnSttsHstryBean;
@Override
public List<DataObject> getCrdnSttsHstryList(CrdnSttsHstryQuery req) {
return crdnSttsHstryBean.getCrdnSttsHstryList(req);
}
@Override
public List<CrdnSttsHstry> getCrdnSttsHstrys(CrdnSttsHstryQuery req) {
return crdnSttsHstryBean.getCrdnSttsHstrys(req);
}
@Override
public boolean create(CrdnSttsHstry crdnSttsHstry) {
return crdnSttsHstryBean.create(crdnSttsHstry);
}
@Override
public boolean update(CrdnSttsHstry crdnSttsHstry) {
return crdnSttsHstryBean.update(crdnSttsHstry);
}
@Override
public boolean remove(CrdnSttsHstry crdnSttsHstry) {
return crdnSttsHstryBean.remove(crdnSttsHstry);
}
}

@ -0,0 +1,103 @@
package cokr.xit.fims.cmmn.web;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import cokr.xit.foundation.web.AbstractController;
import cokr.xit.fims.cmmn.CrdnSttsHstry;
import cokr.xit.fims.cmmn.CrdnSttsHstryQuery;
import cokr.xit.fims.cmmn.service.CrdnSttsHstryService;
/**
*
* <p> :
*
* <pre>
* ============ ============
* 2023-07-19 JoJH
* ================================
* </pre>
*/
@RequestMapping(name = "단속 상태 이력", value = "/crdnSttsHstry")
public class CrdnSttsHstryController extends AbstractController {
/**단속 상태 이력 서비스*/
@Resource(name = "crdnSttsHstryService")
private CrdnSttsHstryService crdnSttsHstryService;
/** (crdnSttsHstry/crdnSttsHstry-main) .
* {@link #getCrdnSttsHstryList(CrdnSttsHstryQuery) } .
* @return /crdnSttsHstry/crdnSttsHstry-main
*/
@RequestMapping(name = "단속 상태 이력 메인", value = "/main.do")
public ModelAndView main() {
ModelAndView mav = getCrdnSttsHstryList(new CrdnSttsHstryQuery().setPageNum(1));
mav.setViewName("/crdnSttsHstry/crdnSttsHstry-main");
return mav.addObject("crdnSttsHstryList", toJson(mav.getModel().get("crdnSttsHstryList")));
}
/** .<br />
* {@link CrdnSttsHstryService#getCrdnSttsHstryList(CrdnSttsHstryQuery)}
* @param req
* @return jsonView
* <pre><code> {
* "crdnSttsHstryList": [ ]
* "crdnSttsHstryStart":
* "crdnSttsHstryFetch":
* "crdnSttsHstryTotal":
* }</code></pre>
*/
@RequestMapping(name = "단속 상태 이력 조회", value = "/list.do")
public ModelAndView getCrdnSttsHstryList(CrdnSttsHstryQuery req) {
List<?> result = crdnSttsHstryService.getCrdnSttsHstryList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "crdnSttsHstry");
}
/** .
* @param crdnSttsHstry
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@PostMapping(name = "단속 상태 이력 등록", value = "/create.do")
public ModelAndView create(CrdnSttsHstry crdnSttsHstry) {
boolean saved = crdnSttsHstryService.create(crdnSttsHstry);
return new ModelAndView("jsonView")
.addObject("saved", saved);
}
/** .
* @param crdnSttsHstry
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@PostMapping(name = "단속 상태 이력 수정", value = "/update.do")
public ModelAndView update(CrdnSttsHstry crdnSttsHstry) {
boolean saved = crdnSttsHstryService.update(crdnSttsHstry);
return new ModelAndView("jsonView")
.addObject("saved", saved);
}
/** .
* @param crdnSttsHstryIDs
* @return jsonView
* <pre><code> {
* "affected":
* "saved": true, false
* }</code></pre>
*/
@PostMapping(name = "단속 상태 이력 제거", value = "/remove.do")
public ModelAndView remove(CrdnSttsHstry crdnSttsHstry) {
boolean saved = crdnSttsHstryService.remove(crdnSttsHstry);
return new ModelAndView("jsonView")
.addObject("saved", saved);
}
}

@ -109,166 +109,10 @@ public class Excl01 extends AbstractEntity {
*/ */
private String crdnSttsCd; private String crdnSttsCd;
// 필요해서 추가 /////////////////////////////////////////////////////////////////////
/**
* ID() .
* @return ID
*/
public String getLevyExclId() {
return levyExclId;
}
/**
* ID() .
* @param levyExclId ID
*/
public void setLevyExclId(String levyExclId) {
this.levyExclId = levyExclId;
}
/**
* () .
* @return
*/
public String getSggCd() {
return sggCd;
}
/**
* () .
* @param sggCd
*/
public void setSggCd(String sggCd) {
this.sggCd = sggCd;
}
/**
* () .
* @return
*/
public String getTaskSeCd() {
return taskSeCd;
}
/**
* () .
* @param taskSeCd
*/
public void setTaskSeCd(String taskSeCd) {
this.taskSeCd = taskSeCd;
}
/**
* ID() .
* @return ID
*/
public String getCrdnId() {
return crdnId;
}
/**
* ID() .
* @param crdnId ID
*/
public void setCrdnId(String crdnId) {
this.crdnId = crdnId;
}
/**
* () .
* @return
*/
public String getLevyExclSeCd() {
return levyExclSeCd;
}
/**
* () .
* @param levyExclSeCd
*/
public void setLevyExclSeCd(String levyExclSeCd) {
this.levyExclSeCd = levyExclSeCd;
}
/**
* () .
* @return
*/
public String getLevyExclYmd() {
return levyExclYmd;
}
/**
* () .
* @param levyExclYmd
*/
public void setLevyExclYmd(String levyExclYmd) {
this.levyExclYmd = levyExclYmd;
}
/**
* () .
* @return
*/
public String getLevyExclRsnCd() {
return levyExclRsnCd;
}
/**
* () .
* @param levyExclRsnCd
*/
public void setLevyExclRsnCd(String levyExclRsnCd) {
this.levyExclRsnCd = levyExclRsnCd;
}
/**
* () .
* @return
*/
public String getEtcCn() {
return etcCn;
}
/**
* () .
* @param etcCn
*/
public void setEtcCn(String etcCn) {
this.etcCn = etcCn;
}
/**
* () .
* @return
*/
public String getDelYn() {
return delYn;
}
/** /**
* () . *
* @param delYn
*/ */
public void setDelYn(String delYn) { private String crdnSttsChgDt;
this.delYn = delYn; // 필요해서 추가 /////////////////////////////////////////////////////////////////////
}
/**
* () .
* @return
*/
public String getDelRsn() {
return delRsn;
}
/**
* () .
* @param delRsn
*/
public void setDelRsn(String delRsn) {
this.delRsn = delRsn;
}
} }

@ -41,16 +41,6 @@ public interface Excl01Mapper extends AbstractMapper {
return levyExclInfo; return levyExclInfo;
} }
/** ID .
* @param levyExclId ID
* @return
*/
default DataObject selectCrdnLevyExcl(String crdnId) {
DataObject levyExclInfo = selectLevyExcl(new Excl01Query().setCrdnId(crdnId));
return levyExclInfo;
}
/** ID . /** ID .
* @param crdnId ID * @param crdnId ID
* @return * @return
@ -64,23 +54,23 @@ public interface Excl01Mapper extends AbstractMapper {
} }
/** . /** .
* @param excl * @param params
* <ul><li>"excl01" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return * @return
*/ */
int insertLevyExcl(Map<String, Object> params); int insertLevyExcl(Map<String, Object> params);
default int insertLevyExcl(Excl01 excl01) { /** .
return insertLevyExcl(params().set("excl01", excl01)); * @param excl01
} * @return
* <ul><li> true</li>
/** . * <li> false</li>
* @param excl * </ul>
* @return
*/ */
int updateCrdnSttsCd(Map<String, Object> params); default boolean insertLevyExcl(Excl01 excl01) {
return excl01 != null && insertLevyExcl(params().set("excl01", excl01)) == 1;
default int updateCrdnSttsCd(Excl01 excl01) {
return updateCrdnSttsCd(params().set("excl01", excl01));
} }
/** . /** .
@ -89,8 +79,8 @@ public interface Excl01Mapper extends AbstractMapper {
*/ */
int updateLevyExcl(Map<String, Object> params); int updateLevyExcl(Map<String, Object> params);
default int updateLevyExcl(Excl01 excl01) { default boolean updateLevyExcl(Excl01 excl01) {
return updateLevyExcl(params().set("excl01", excl01)); return excl01 != null && updateLevyExcl(params().set("excl01", excl01)) == 1;
} }
/** . /** .
@ -106,4 +96,58 @@ public interface Excl01Mapper extends AbstractMapper {
return deleteLevyExcl(params().set("excl01", excl01)); return deleteLevyExcl(params().set("excl01", excl01));
} }
/** ID , .
* @param crdnId ID
* @return ,
*/
DataObject selectCrdnLevyExcl(Excl01Query req);
default DataObject selectCrdnLevyExcl(String crdnId) {
DataObject crdnLevyExclInfo = selectCrdnLevyExcl(new Excl01Query().setCrdnId(crdnId));
return crdnLevyExclInfo;
}
/**(TB_CRDN_STTS_HSTRY) .
* @param params
* <ul><li>"excl01" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int insertCrdnSttsHstry(Map<String, Object> params);
/**(TB_CRDN_STTS_HSTRY) .
* @param excl01
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean insertCrdnSttsHstry(Excl01 excl01) {
return excl01 != null && insertCrdnSttsHstry(params().set("excl01", excl01)) == 1;
}
/**(TB_CRDN) .
* @param params
* <ul><li>"excl01" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int updateCrdnSttsCd(Map<String, Object> params);
/**(TB_CRDN) .
* @param excl01
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean updateCrdnSttsCd(Excl01 excl01) {
return excl01 != null && updateCrdnSttsCd(params().set("excl01", excl01)) == 1;
}
} }

@ -1,8 +1,6 @@
package cokr.xit.fims.excl.service.bean; package cokr.xit.fims.excl.service.bean;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -47,7 +45,13 @@ public class Excl01Bean extends AbstractComponent {
if (req.getLevyExclId() != null) { if (req.getLevyExclId() != null) {
return excl01Mapper.selectLevyExcl(req); // 수정(부과제외 조회) return excl01Mapper.selectLevyExcl(req); // 수정(부과제외 조회)
} else { } else {
return excl01Mapper.selectCrdn(req); // 등록(단속 조회) DataObject dataCrdn = excl01Mapper.selectCrdn(req); // 등록(단속 조회)
// 초기 데이터 설정
dataCrdn.set("LEVY_EXCL_YMD", dataCrdn.get("TODAY")); // 부과 제외 일자
dataCrdn.set("LEVY_EXCL_SE_CD", req.getLevyExclSeCd()); // 부과 제외 구분 코드
return dataCrdn;
} }
} }
@ -58,79 +62,8 @@ public class Excl01Bean extends AbstractComponent {
* <li> false</li> * <li> false</li>
* </ul> * </ul>
*/ */
public Map<String, String> createLevyExclusion(Excl01 excl01) { public boolean createLevyExclusion(Excl01 excl01) {
// 변수 선언 return excl01Mapper.insertLevyExcl(excl01);
int retProcNo = 0; // DB 처리 건수
Map<String, String> retMap = new HashMap<String, String>(); // 결과 return
// 단속 ID로 부과제외 정보 조회
DataObject dataCrdnLevyExcl = excl01Mapper.selectCrdnLevyExcl(excl01.getCrdnId());
// 부과제외 정보가 있다면 종료..
if (dataCrdnLevyExcl != null) {
retMap.put("saved", "false");
retMap.put("retCode", "0");
retMap.put("retMessage", "부과제외 정보가 이미 존재합니다.");
return retMap;
}
// 단속 ID로 단속정보 조회
DataObject dataCrdn = excl01Mapper.selectCrdn(excl01.getCrdnId());
// 단속 상태 코드 변경
if (excl01.getLevyExclSeCd().equals("1") || excl01.getLevyExclSeCd().equals("2")) { // 비부과, 계고 등록시..
// 단속 상태 코드가 50 보다 크다면..
if (Integer.parseInt(dataCrdn.string("CRDN_STTS_CD")) > 50) {
retMap.put("saved", "false");
retMap.put("retCode", "0");
retMap.put("retMessage", "단속 상태가 " + dataCrdn.string("CRDN_STTS_NM") + " 상태 입니다");
return retMap;
}
// 추가필요 20230718 조재현
// 자동등록 자료만 민원답변 부분을 처리
if (dataCrdn.string("CRDN_REG_SE_CD").equals("02")) {
}
if (excl01.getLevyExclSeCd().equals("1")) {
excl01.setCrdnSttsCd("81"); // 비부과(서손)
} else if (excl01.getLevyExclSeCd().equals("2")) {
excl01.setCrdnSttsCd("83"); // 계고
}
} else if (excl01.getLevyExclSeCd().equals("5")) { // 전액감액
excl01.setCrdnSttsCd("80"); // 부과취소
}
// 부과 제외 등록(Insert)
retProcNo = excl01Mapper.insertLevyExcl(excl01);
// 1건이 등록 되지 않았다면..
if (retProcNo != 1) {
retMap.put("saved", "false");
retMap.put("retCode", "0");
retMap.put("retMessage", "부과제외 정보 등록에 실패하였습니다.");
return retMap;
}
// 단속 상태 코드 변경(Update)
retProcNo = excl01Mapper.updateCrdnSttsCd(excl01);
// 1건이 등록 되지 않았다면..
if (retProcNo != 1) {
retMap.put("saved", "false");
retMap.put("retCode", "0");
retMap.put("retMessage", "단속 상태 변경에 실패하였습니다.");
return retMap;
}
// 성공
retMap.put("saved", "true");
retMap.put("retCode", "1");
retMap.put("retMessage", "자료가 저장 되었습니다.");
return retMap;
} }
/** . /** .
@ -141,7 +74,7 @@ public class Excl01Bean extends AbstractComponent {
* </ul> * </ul>
*/ */
public boolean updateLevyExclusion(Excl01 excl01) { public boolean updateLevyExclusion(Excl01 excl01) {
return excl01 != null && excl01Mapper.updateLevyExcl(excl01) == 1; return excl01Mapper.updateLevyExcl(excl01);
} }
/** . /** .
@ -155,4 +88,25 @@ public class Excl01Bean extends AbstractComponent {
return excl01 != null && excl01Mapper.deleteLevyExcl(excl01) >= 1; return excl01 != null && excl01Mapper.deleteLevyExcl(excl01) >= 1;
} }
/** .
* @param req
* @return
*/
public DataObject getCrdnLevyExclusion(String crdnId) {
return excl01Mapper.selectCrdnLevyExcl(crdnId);
}
/** .
* @param excl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public boolean updateCrackdownStatus(Excl01 excl01) {
return excl01Mapper.updateCrdnSttsCd(excl01);
}
} }

@ -1,5 +1,6 @@
package cokr.xit.fims.excl.service.bean; package cokr.xit.fims.excl.service.bean;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -7,6 +8,8 @@ import javax.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import cokr.xit.fims.cmmn.CrdnSttsHstry;
import cokr.xit.fims.cmmn.service.bean.CrdnSttsHstryBean;
import cokr.xit.fims.excl.Excl01; import cokr.xit.fims.excl.Excl01;
import cokr.xit.fims.excl.Excl01Query; import cokr.xit.fims.excl.Excl01Query;
import cokr.xit.fims.excl.service.Excl01Service; import cokr.xit.fims.excl.service.Excl01Service;
@ -30,6 +33,10 @@ public class Excl01ServiceBean extends AbstractServiceBean implements Excl01Serv
@Resource(name = "excl01Bean") @Resource(name = "excl01Bean")
protected Excl01Bean excl01Bean; protected Excl01Bean excl01Bean;
/** 단속 상태 이력 정보 관리 Bean */
@Resource(name = "crdnSttsHstryBean")
protected CrdnSttsHstryBean crdnSttsHstryBean;
@Override @Override
public List<DataObject> getLevyExclusionList(Excl01Query req) { public List<DataObject> getLevyExclusionList(Excl01Query req) {
return excl01Bean.getLevyExclusionList(req); return excl01Bean.getLevyExclusionList(req);
@ -42,7 +49,94 @@ public class Excl01ServiceBean extends AbstractServiceBean implements Excl01Serv
@Override @Override
public Map<String, String> createLevyExclusion(Excl01 excl01) { public Map<String, String> createLevyExclusion(Excl01 excl01) {
return excl01Bean.createLevyExclusion(excl01); // 변수 선언
boolean retSuccess = false; // DB 처리 결과
Map<String, String> retMap = new HashMap<String, String>(); // 결과 return
// 단속 ID로 부과제외 정보 조회
DataObject dataCrdnLevyExcl = excl01Bean.getCrdnLevyExclusion(excl01.getCrdnId());
// 부과제외 ID가 있다면 이미 부과제외 자료가 존재하므로 종료..
if (!dataCrdnLevyExcl.string("LEVY_EXCL_ID").equals("")) {
retMap.put("saved", "false");
retMap.put("retCode", "0");
retMap.put("retMessage", "부과제외 정보가 이미 존재합니다.");
return retMap;
}
if (excl01.getLevyExclSeCd().equals("1") || excl01.getLevyExclSeCd().equals("2")) { // 비부과, 계고 등록시..
// 단속 상태 코드가 부과(51) 보다 크다면..부과제외 등록 할 수 없다.
if (Integer.parseInt(dataCrdnLevyExcl.string("CRDN_STTS_CD")) > 50) {
retMap.put("saved", "false");
retMap.put("retCode", "0");
retMap.put("retMessage", "단속 상태가 " + dataCrdnLevyExcl.string("CRDN_STTS_NM") + " 상태 입니다");
return retMap;
}
// 추가필요 20230718 조재현 //////////////////////////////////////////////////////////
// 자동등록 자료만 민원답변 부분을 처리
if (dataCrdnLevyExcl.string("CRDN_REG_SE_CD").equals("02")) {
}
}
// 단속 상태 코드 설정.
if (excl01.getLevyExclSeCd().equals("1")) { // 비부과
excl01.setCrdnSttsCd("81"); // 비부과(서손)
} else if (excl01.getLevyExclSeCd().equals("2")) { // 계고
excl01.setCrdnSttsCd("83"); // 계고
} else if (excl01.getLevyExclSeCd().equals("5")) { // 전액감액
excl01.setCrdnSttsCd("80"); // 부과취소
}
// 부과제외(TB_LEVY_EXCL) 대장 등록
retSuccess = excl01Bean.createLevyExclusion(excl01);
// 1건이 등록 되지 않았다면..
if (!retSuccess) {
retMap.put("saved", "false");
retMap.put("retCode", "0");
retMap.put("retMessage", "부과제외 대장 등록에 실패하였습니다.");
return retMap;
}
// 단속상태이력(TB_CRDN_STTS_HSTRY) 대장 등록
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setCrdnId(excl01.getCrdnId());
crdnSttsHstry.setBfrSttsCd(dataCrdnLevyExcl.string("CRDN_STTS_CD"));
crdnSttsHstry.setBfrSttsChgDt(dataCrdnLevyExcl.string("CRDN_STTS_CHG_DT"));
crdnSttsHstry.setCrdnSttsCd(excl01.getCrdnSttsCd());
crdnSttsHstry.setTaskDtlId(excl01.getLevyExclId());
crdnSttsHstry.setEtcCn("부과제외 등록");
retSuccess = crdnSttsHstryBean.create(crdnSttsHstry);
if (!retSuccess) {
retMap.put("saved", "false");
retMap.put("retCode", "0");
retMap.put("retMessage", "단속상태이력 대장 등록에 실패하였습니다.");
return retMap;
}
// 단속(TB_CRDN) 대장 상태 코드 수정
retSuccess = excl01Bean.updateCrackdownStatus(excl01);
if (!retSuccess) {
retMap.put("saved", "false");
retMap.put("retCode", "0");
retMap.put("retMessage", "단속 대장에 단속상태 변경에 실패하였습니다.");
return retMap;
}
// 성공
retMap.put("retCode", "100");
retMap.put("retMessage", "저장 되었습니다.");
return retMap;
} }
@Override @Override

@ -78,7 +78,7 @@ public class Excl01Controller extends ApplicationController {
* }</pre> * }</pre>
*/ */
@RequestMapping(name = "부과제외 정보 조회", value = "/020/info.do") @RequestMapping(name = "부과제외 정보 조회", value = "/020/info.do")
public ModelAndView getLevyExclusionInfo(Excl01Query req) { public ModelAndView getLevyExclusioninfo(Excl01Query req) {
DataObject levyExclusionInfo = excl01Service.getLevyExclusionInfo(req); DataObject levyExclusionInfo = excl01Service.getLevyExclusionInfo(req);
boolean json = jsonResponse(); boolean json = jsonResponse();
@ -111,7 +111,6 @@ public class Excl01Controller extends ApplicationController {
Map<String, String> retMap = excl01Service.createLevyExclusion(excl01); Map<String, String> retMap = excl01Service.createLevyExclusion(excl01);
return new ModelAndView("jsonView") return new ModelAndView("jsonView")
.addObject("saved", retMap.get("saved"))
.addObject("retCode", retMap.get("retCode")) .addObject("retCode", retMap.get("retCode"))
.addObject("retMessage", retMap.get("retMessage")); .addObject("retMessage", retMap.get("retMessage"));
} }
@ -125,10 +124,16 @@ public class Excl01Controller extends ApplicationController {
*/ */
@PostMapping(name = "부과제외 대장 수정", value = "/020/update.do") @PostMapping(name = "부과제외 대장 수정", value = "/020/update.do")
public ModelAndView updateLevyExclusion(Excl01 excl01) { public ModelAndView updateLevyExclusion(Excl01 excl01) {
boolean saved = excl01Service.updateLevyExclusion(excl01); boolean saved = excl01Service.removeLevyExclusion(excl01);
return new ModelAndView("jsonView") return new ModelAndView("jsonView")
.addObject("saved", saved); .addObject("saved", saved);
// Map<String, String> retMap = excl01Service.updateLevyExclusion(excl01);
// return new ModelAndView("jsonView")
// .addObject("saved", retMap.get("saved"))
// .addObject("retCode", retMap.get("retCode"))
// .addObject("retMessage", retMap.get("retMessage"));
} }
/** . /** .

@ -0,0 +1,103 @@
<?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.fims.cmmn.dao.CrdnSttsHstryMapper">
<!-- 단속 상태 이력 정보 매퍼
========== 변경 이력 ==========
2023-07-19 JoJH 최초 작성
============================ -->
<resultMap id="crdnSttsHstryRow" type="cokr.xit.fims.cmmn.CrdnSttsHstry">
<result property="sttsHstryId" column="STTS_HSTRY_ID" /> <!-- 상태 이력 ID -->
<result property="crdnId" column="CRDN_ID" /> <!-- 단속 ID -->
<result property="bfrSttsCd" column="BFR_STTS_CD" /> <!-- 이전 상태 코드 -->
<result property="bfrSttsChgDt" column="BFR_STTS_CHG_DT" /> <!-- 이전 상태 변경 일시 -->
<result property="crdnSttsCd" column="CRDN_STTS_CD" /> <!-- 단속 상태 코드 -->
<result property="taskDtlId" column="TASK_DTL_ID" /> <!-- 업무 상세 ID -->
<result property="useYn" column="USE_YN" /> <!-- 사용 여부 -->
<result property="etcCn" column="ETC_CN" /> <!-- 기타 내용 -->
<result property="regDt" column="REG_DT" /> <!-- 등록 일시 -->
<result property="rgtr" column="RGTR" /> <!-- 등록자 -->
<result property="mdfcnDt" column="MDFCN_DT" /> <!-- 수정 일시 -->
<result property="mdfr" column="MDFR" /> <!-- 수정자 -->
</resultMap>
<sql id="select">SELECT STTS_HSTRY_ID <!-- 상태 이력 ID -->
, CRDN_ID <!-- 단속 ID -->
, BFR_STTS_CD <!-- 이전 상태 코드 -->
, BFR_STTS_CHG_DT <!-- 이전 상태 변경 일시 -->
, CRDN_STTS_CD <!-- 단속 상태 코드 -->
, TASK_DTL_ID <!-- 업무 상세 ID -->
, USE_YN <!-- 사용 여부 -->
, ETC_CN <!-- 기타 내용 -->
, REG_DT <!-- 등록 일시 -->
, RGTR <!-- 등록자 -->
, MDFCN_DT
, MDFR
FROM TB_CRDN_STTS_HSTRY</sql>
<select id="selectCrdnSttsHstryList" parameterType="map" resultType="dataobject">/* 단속 상태 이력 목록 조회(crdnSttsHstryMapper.selectCrdnSttsHstryList) */
<include refid="utility.paging-prefix" />
<include refid="select" />
<where></where>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" /></select>
<select id="selectCrdnSttsHstrys" parameterType="map" resultMap="crdnSttsHstryRow">/* 단속 상태 이력 객체 가져오기(crdnSttsHstryMapper.selectCrdnSttsHstrys) */
<include refid="select" />
<where></where>
<include refid="utility.orderBy" /></select>
<insert id="insertCrdnSttsHstry" parameterType="map">/* 단속 상태 이력 등록(crdnSttsHstryMapper.insertCrdnSttsHstry) */
<selectKey resultType="string" keyProperty="crdnSttsHstry.sttsHstryId" keyColumn="NEW_ID" order="BEFORE">
SELECT LPAD(IFNULL(MAX(STTS_HSTRY_ID) + 1, 1), 20, '0') NEW_ID FROM TB_CRDN_STTS_HSTRY
</selectKey>
INSERT
INTO TB_CRDN_STTS_HSTRY (
STTS_HSTRY_ID /* 상태 이력 ID */
, CRDN_ID /* 단속 ID */
, BFR_STTS_CD /* 이전 상태 코드 */
, BFR_STTS_CHG_DT /* 이전 상태 변경 일시 */
, CRDN_STTS_CD /* 단속 상태 코드 */
, TASK_DTL_ID /* 업무 상세 ID */
, ETC_CN /* 기타 내용 */
, USE_YN /* 사용 여부 */
, REG_DT /* 등록 일시*/
, RGTR /* 등록자 */
, MDFCN_DT /* 수정 일시 */
, MDFR /* 수정자 */
)
VALUES (
#{crdnSttsHstry.sttsHstryId} /* 상태 이력 ID */
, #{crdnSttsHstry.crdnId} /* 단속 ID */
, #{crdnSttsHstry.bfrSttsCd} /* 이전 상태 코드 */
, #{crdnSttsHstry.bfrSttsChgDt} /* 이전 상태 변경 일시 */
, #{crdnSttsHstry.crdnSttsCd} /* 단속 상태 코드 */
, #{crdnSttsHstry.taskDtlId} /* 업무 상세 ID */
, #{crdnSttsHstry.etcCn} /* 기타 내용 */
, 'Y' /* 삭제 여부 */
, #{crdnSttsHstry.createdAt} /* 등록 일시 */
, #{crdnSttsHstry.createdBy} /* 등록자 */
, #{crdnSttsHstry.lastModified} /* 수정 일시 */
, #{crdnSttsHstry.modifiedBy} /* 수정자 */
)
</insert>
<update id="updateCrdnSttsHstry" parameterType="map">/* 단속 상태 이력 수정(crdnSttsHstryMapper.updateCrdnSttsHstry) */
UPDATE TB_CRDN_STTS_HSTRY
SET USE_YN = #{crdnSttsHstry.useYn} /* 사용 여부 */
, MDFCN_DT = #{crdnSttsHstry.lastModified} /* 수정 일시 */
, MDFR = #{crdnSttsHstry.modifiedBy} /* 수정자 */
WHERE STTS_HSTRY_ID = #{crdnSttsHstry.sttsHstryId}
</update>
<update id="deleteCrdnSttsHstry" parameterType="map">/* 단속 상태 이력 삭제(crdnSttsHstryMapper.deleteCrdnSttsHstry) */
UPDATE TB_CRDN_STTS_HSTRY
SET USE_YN = 'N' /* 사용 여부 */
, MDFCN_DT = #{crdnSttsHstry.lastModified} /* 수정 일시 */
, MDFR = #{crdnSttsHstry.modifiedBy} /* 수정자 */
WHERE STTS_HSTRY_ID = #{crdnSttsHstry.sttsHstryId}
</update>
</mapper>

@ -201,15 +201,14 @@
, A.VHRNO /* 차량번호 */ , A.VHRNO /* 차량번호 */
, A.CRDN_STTS_CD /* 단속 상태 코드 */ , A.CRDN_STTS_CD /* 단속 상태 코드 */
, (SELECT FN_GET_CODE_NM('FIM010', A.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */ , (SELECT FN_GET_CODE_NM('FIM010', A.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */
, <include refid="utility.today" /> AS LEVY_EXCL_YMD /* 부과 제외 일자 */ , <include refid="utility.today" /> AS TODAY /* 오늘 일자 */
, #{levyExclSeCd} AS LEVY_EXCL_SE_CD /* 부과 제외 구분 코드 */
FROM TB_CRDN A FROM TB_CRDN A
WHERE A.CRDN_ID = #{crdnId} /* 단속 ID */ WHERE A.CRDN_ID = #{crdnId} /* 단속 ID */
</select> </select>
<insert id="insertLevyExcl" parameterType="map">/* 부과제외 대장 등록(excl01Mapper.insertLevyExcl) */ <insert id="insertLevyExcl" parameterType="map">/* 부과제외 대장 등록(excl01Mapper.insertLevyExcl) */
<selectKey resultType="string" keyProperty="excl01.levyExclId" keyColumn="NEW_ID" order="BEFORE"> <selectKey resultType="string" keyProperty="excl01.levyExclId" keyColumn="NEW_ID" order="BEFORE">
SELECT LPAD(IFNULL(MAX(LEVY_EXCL_ID) + 1, 1), 10, '0') NEW_ID FROM TB_LEVY_EXCL SELECT LPAD(IFNULL(MAX(LEVY_EXCL_ID) + 1, 1), 20, '0') NEW_ID FROM TB_LEVY_EXCL
</selectKey> </selectKey>
INSERT INSERT
INTO TB_LEVY_EXCL ( INTO TB_LEVY_EXCL (
@ -244,15 +243,6 @@
) )
</insert> </insert>
<update id="updateCrdnSttsCd" parameterType="map">/* 부과제외 대장 수정(excl01Mapper.updateLevyExcl) */
UPDATE TB_CRDN
SET CRDN_STTS_CD = #{excl01.crdnSttsCd} /* 단속 상태 코드 */
, CRDN_STTS_CHG_DT = <include refid="utility.today" /> /* 단속 상태 변경 일시 */
, MDFCN_DT = #{excl01.lastModified} /* 수정 일시 */
, MDFR = #{excl01.modifiedBy} /* 수정자 */
WHERE CRDN_ID = #{excl01.crdnId} /* 부과 제외 ID */
</update>
<update id="updateLevyExcl" parameterType="map">/* 부과제외 대장 수정(excl01Mapper.updateLevyExcl) */ <update id="updateLevyExcl" parameterType="map">/* 부과제외 대장 수정(excl01Mapper.updateLevyExcl) */
UPDATE TB_LEVY_EXCL UPDATE TB_LEVY_EXCL
SET LEVY_EXCL_YMD = #{excl01.levyExclYmd} /* 부과 제외 일자 */ SET LEVY_EXCL_YMD = #{excl01.levyExclYmd} /* 부과 제외 일자 */
@ -284,4 +274,65 @@
</choose> </choose>
</update> </update>
<select id="selectCrdnLevyExcl" parameterType="map" resultType="dataobject">/* 단속 대장 객체 가져오기(excl01Mapper.selectCrdnLevyExcl) */
SELECT A.CRDN_ID /* 단속 ID */
, A.SGG_CD /* 시군구 코드 */
, A.TASK_SE_CD /* 업무 구분 코드 */
, A.CRDN_REG_SE_CD /* 단속 등록 구분 코드 */
, A.CRDN_YMD /* 단속 일자 */
, A.CRDN_TM /* 단속 시각 */
, A.VHRNO /* 차량번호 */
, A.CRDN_STTS_CD /* 단속 상태 코드 */
, (SELECT FN_GET_CODE_NM('FIM010', A.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */
, B.LEVY_EXCL_ID /* 부과 제외 ID */
, B.LEVY_EXCL_YMD /* 부과 제외 일자 */
, B.LEVY_EXCL_SE_CD /* 부과 제외 구분 코드 */
, B.LEVY_EXCL_RSN_CD /* 부과 제외 사유 코드 */
, B.ETC_CN /* 기타 내용 */
FROM TB_CRDN A
LEFT OUTER JOIN TB_LEVY_EXCL B ON (A.CRDN_ID = B.CRDN_ID AND B.DEL_YN = 'N')
WHERE A.CRDN_ID = #{crdnId} /* 단속 ID */
</select>
<insert id="insertCrdnSttsHstry" parameterType="map">/* 부과제외 대장 등록(excl01Mapper.insertLevyExcl) */
<selectKey resultType="string" keyProperty="excl01.sttsHstryId" keyColumn="NEW_ID" order="BEFORE">
SELECT LPAD(IFNULL(MAX(STTS_HSTRY_ID) + 1, 1), 20, '0') NEW_ID FROM TB_CRDN_STTS_HSTRY
</selectKey>
INSERT
INTO TB_CRDN_STTS_HSTRY (
STTS_HSTRY_ID /* 상태 이력 ID */
, CRDN_ID /* 단속 ID */
, BFR_STTS_CD /* 이전 상태 코드 */
, BFR_STTS_CHG_DT /* 이전 상태 변경 일시 */
, CRDN_STTS_CD /* 단속 상태 코드 */
, TASK_DTL_ID /* 업무 상세 ID */
, ETC_CN /* 기타 내용 */
, DEL_YN /* 삭제 여부 */
, REG_DT /* 등록 일시*/
, RGTR /* 등록자 */
)
VALUES (
#{excl01.sttsHstryId} /* 상태 이력 ID */
, #{excl01.crdnId} /* 단속 ID */
, #{excl01.bfrSttsCd} /* 이전 상태 코드 */
, #{excl01.bfrSttsChgDt} /* 이전 상태 변경 일시 */
, #{excl01.crdnSttsCd} /* 단속 상태 코드 */
, #{excl01.taskDtlId} /* 업무 상세 ID */
, #{excl01.etcCn} /* 기타 내용 */
, 'N' /* 삭제 여부 */
, #{excl01.createdAt} /* 등록 일시 */
, #{excl01.createdBy} /* 등록자 */
)
</insert>
<update id="updateCrdnSttsCd" parameterType="map">/* 부과제외 대장 수정(excl01Mapper.updateLevyExcl) */
UPDATE TB_CRDN
SET CRDN_STTS_CD = #{excl01.crdnSttsCd} /* 단속 상태 코드 */
, CRDN_STTS_CHG_DT = <include refid="utility.now" /> /* 단속 상태 변경 일시 */
, MDFCN_DT = #{excl01.lastModified} /* 수정 일시 */
, MDFR = #{excl01.modifiedBy} /* 수정자 */
WHERE CRDN_ID = #{excl01.crdnId} /* 부과 제외 ID */
</update>
</mapper> </mapper>

@ -528,7 +528,7 @@
// 이벤트 설정 // 이벤트 설정
setEvent${pageName}(); setEvent${pageName}();
// Dataset 셋팅 // Dataset 셋팅 - List 일경우 addData
${pageName}Control.addData(${levyExcl}); ${pageName}Control.addData(${levyExcl});
}); });

@ -71,52 +71,54 @@
var FIM022 = new CommonCodes(${FIM022}, true); var FIM022 = new CommonCodes(${FIM022}, true);
/************************************************************************** /**************************************************************************
* Dataset * DatasetControl
**************************************************************************/ **************************************************************************/
var ${pageName}Info = new Dataset({ var ${pageName}Control = new DatasetControl({
prefix : "levyExcl" prefix : "levyExcl"
, prefixName : "부과제외" , prefixName : "부과제외"
, keymapper : info => info ? info.levyExclId : "" , keymapper : info => info ? info.LEVY_EXCL_ID : ""
, dataGetter : obj => obj.levyExclInfo
, urls : { , urls : {
create : wctx.url(prefixUrl + "/020/create.do") create : wctx.url(prefixUrl + "/020/create.do") // 등록
, update : wctx.url(prefixUrl + "/020/update.do") , update : wctx.url(prefixUrl + "/020/update.do") // 수정
} }
, formats : { , formats : {
LEVY_EXCL_YMD : dateFormat LEVY_EXCL_YMD : dateFormat
} }
, onCurrentChange : item => { });
${pageName}Control.onCurrentChange = item => {
${pageName}Fields.set(item); ${pageName}Fields.set(item);
setFim021(item.data.LEVY_EXCL_SE_CD, item.data.LEVY_EXCL_RSN_CD); setFim021(item.data.LEVY_EXCL_SE_CD, item.data.LEVY_EXCL_RSN_CD);
} }
});
/************************************************************************** /**************************************************************************
* *
**************************************************************************/ **************************************************************************/
// 저장 callback // 저장 callback
${pageName}Info.onSave = (resp) => { ${pageName}Control.onSave = (resp) => {
dialog.alert(resp.retMessage); dialog.alert(resp.retMessage);
if (resp.saved == "true") { if (resp.saved == "100") {
dialog.close(${pageName}Info.conf.prefix + "dialog"); dialog.close(${pageName}Control.prefix + "dialog");
} }
}
this.prefixed("dialog")
// if (resp.saved) {
// dialog.alert("저장됐습니다.");
// dialog.close(${pageName}Control.prefix + "dialog");
// }
}
// 저장 // 저장
${pageName}Info.save = (info) => { ${pageName}Control.save = (info) => {
if (!info) return; if (!info) return;
let item = ${pageName}Info.getCurrent("item"); let item = ${pageName}Control.getCurrent("item");
let create = isEmpty(info.levyExclId); let create = isEmpty(info.levyExclId);
ajax.post({ ajax.post({
url : !create ? ${pageName}Info.conf.urls.update : ${pageName}Info.conf.urls.create url : !create ? ${pageName}Control.urls.update : ${pageName}Control.urls.create
, data : info , data : info
, success : resp => ${pageName}Info.onSave(resp) , success : resp => ${pageName}Control.onSave(resp)
}); });
} }
@ -159,9 +161,9 @@
let data = formFields.get(); let data = formFields.get();
dialog.alert({ dialog.alert({
content : "현재 " + ${pageName}Info.conf.prefixName + " 정보를 저장하시겠습니까?" content : "현재 prefixName 정보를 저장하시겠습니까?"
, onOK : () => { , onOK : () => {
${pageName}Info.save(formFields.get()); ${pageName}Control.save(formFields.get());
} }
}); });
} }
@ -176,8 +178,8 @@
// 이벤트 설정 // 이벤트 설정
setEvent${pageName}(); setEvent${pageName}();
// Dataset 셋팅 // Dataset 셋팅 - 단건일 경우 setData
${pageName}Info.setData([${levyExclInfo}]); ${pageName}Control.setData([${levyExclInfo}]);
}); });
// #sourceURL=excl01020-info.jsp // #sourceURL=excl01020-info.jsp

Loading…
Cancel
Save