2023-10-24 18:21 사용자 신청시 차시 체크 수정

This commit is contained in:
myname 2023-10-24 18:21:39 +09:00
parent 3ef5d57fed
commit 1f1de00ccd
8 changed files with 357 additions and 19 deletions

View File

@ -60,6 +60,8 @@ public class VEAStngVO extends ComDefaultVO implements Serializable {
private String dpDdlnDt; //표시용마감일자
private String dpDdlnTm; //표시용마감시간
private String eduSlctCd; //교육선택코드 //10-온라인, 20-오프라인
private String rgstrDateState; //일자기준접수상태 0,1,2 -기간전, 기간중, 기간후
@ -369,5 +371,11 @@ public class VEAStngVO extends ComDefaultVO implements Serializable {
public void setUserNm(String userNm) {
this.userNm = userNm;
}
public String getEduSlctCd() {
return eduSlctCd;
}
public void setEduSlctCd(String eduSlctCd) {
this.eduSlctCd = eduSlctCd;
}
}

View File

@ -12,9 +12,13 @@ public interface EduAplctTngrService {
boolean eduAplctRegProcess(VEEduAplctVO vEEduAplctVO , HttpServletRequest request, MultipartHttpServletRequest multiRequest, ModelAndView modelAndView) throws Exception;
boolean eduAplctRegProcess202310(VEEduAplctVO vEEduAplctVO , HttpServletRequest request, MultipartHttpServletRequest multiRequest, ModelAndView modelAndView) throws Exception;
boolean eduAplctRegUpdProcess(VEEduAplctVO vEEduAplctVO , HttpServletRequest request, MultipartHttpServletRequest multiRequest, ModelAndView modelAndView) throws Exception;
boolean eduAplctRegUpdProcess202310(VEEduAplctVO vEEduAplctVO , HttpServletRequest request, MultipartHttpServletRequest multiRequest, ModelAndView modelAndView) throws Exception;
boolean eduAplctMdfyProcess(VEEduAplctVO vEEduAplctVO , HttpServletRequest request, MultipartHttpServletRequest multiRequest, ModelAndView modelAndView) throws Exception;
boolean eduAplctChkProcess(VEEduAplctVO vEEduAplctVO , HttpServletRequest request, ModelAndView modelAndView) throws Exception;

View File

@ -176,6 +176,92 @@ public class EduAplctTngrServiceImpl implements EduAplctTngrService {
return true;
}
@Override
public boolean eduAplctRegProcess202310(VEEduAplctVO vEEduAplctVO, HttpServletRequest request, MultipartHttpServletRequest multiRequest, ModelAndView modelAndView) throws Exception {
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
//SsoLoginVO ssoLoginVO = checkLoginUtil.getSSOLoginVO(request); //SSO 로그인 정보 가져오기
//로그인 처리====================================
//step2.파일 처리====================================
//파일 정상 처리 여부와 첨부 파일 정보
//String atchFileId = this.takeFile(multiRequest, modelAndView, bmVO);
//파일 제한 수량 가져오기, 없으면 기본값 사용
int i_file_limit = checkFileUtil.getLimitCount(request); // file count
int i_limit_size = checkFileUtil.getLimitSize(request); // file MB
String s_file_exts = checkFileUtil.getS_exts(); // file exts
String s_scholSealAtchFileId = checkFileUtil.fileValCheckNdbInsert(
multiRequest, modelAndView
, "SCHOLSEAL_" //file_name_prefix
, s_file_exts
, i_limit_size
, i_file_limit
); //EXT, MB size and ea
if ("ERROR".equals(s_scholSealAtchFileId)) return false;
//step2.파일 처리====================================
//교육신청 번호 생성 디비 저장하기
String eduAplctOrd = eduAplctGnrService.getNextStringId(); // 고유ID
vEEduAplctVO.setEduAplctOrd(eduAplctOrd);
vEEduAplctVO.setLctrDivCd(VeConstants.LCTR_DIV_CD_10); //강의 구분 코드 청소년찾교
vEEduAplctVO.setScholSealAtchFileId(s_scholSealAtchFileId); //학교장직인 첨부파일
vEEduAplctVO.setUserId(loginVO.getUniqId());
vEEduAplctVO.setFrstRegisterId(loginVO.getUniqId()); //esntl_id
//저장전 암호화 - VO 단위로 만들어서 사용
vEEduAplctVO = egovCryptoUtil.encryptVEEduAplctVOInfo(vEEduAplctVO);
//오프라인 교육을 신청할 , 해당 지역의 허용가능차시를 초과하면 교육 승인코드를 대기상태로 저장해야
if("Y".equals(vEEduAplctVO.getSbmtYn()) && "20".equals(vEEduAplctVO.getEduSlctCd())) {
chkOffChasiWait202310(vEEduAplctVO, request);
//온라인 교육을 신청할 , 해당 지역의 허용가능차시를 초과하면 교육 승인코드를 대기상태로 저장해야
}else if("Y".equals(vEEduAplctVO.getSbmtYn()) && "10".equals(vEEduAplctVO.getEduSlctCd())) {
chkOnChasiWait(vEEduAplctVO, request);
}
//저장
vEEduAplctDAO.insert(vEEduAplctVO);
//차시 저장
String[] s_eduHopeDt = request.getParameterValues("eduHopeDt");
String[] s_strtTm = request.getParameterValues("strtTm");
String[] s_endTm = request.getParameterValues("endTm");
String[] s_lrnTm = request.getParameterValues("lrnTm");
String[] s_divCd = request.getParameterValues("divCd");
String[] s_trgt = request.getParameterValues("trgt");
String[] s_prsnl = request.getParameterValues("prsnl");
System.out.println("s_divCd.length");
System.out.println(s_divCd.length);
System.out.println(s_trgt.length);
VEEduChasiVO vEEduChasiVO = new VEEduChasiVO();
vEEduChasiVO.setEduAplctOrd(eduAplctOrd); //교육신청순번
vEEduChasiVO.setFrstRegisterId(loginVO.getUniqId()); //esntl_id
String bb = null;
for (int i=0;i<s_eduHopeDt.length;i++) {
String eduChasiOrd = eduChasiGnrService.getNextStringId(); // 교육차시 순번
vEEduChasiVO.setEduChasiOrd(eduChasiOrd);
//vEEduChasiVO.setEduHopeDt(s_eduHopeDt[i].replaceAll("[^0-9]",""));
vEEduChasiVO.setEduHopeDt(s_eduHopeDt[i]);
vEEduChasiVO.setStrtTm(s_strtTm[i].replaceAll("[^0-9]",""));
vEEduChasiVO.setEndTm(s_endTm[i].replaceAll("[^0-9]",""));
vEEduChasiVO.setLrnTm(s_lrnTm[i]);
vEEduChasiVO.setDivCd(s_divCd[i]);
vEEduChasiVO.setTrgt(s_trgt[i]);
vEEduChasiVO.setPrsnl(s_prsnl[i]);
vVEEduChasiDAO.insert(vEEduChasiVO);
}
return true;
}
@Override
public boolean eduAplctRegUpdProcess(VEEduAplctVO vEEduAplctVO, HttpServletRequest request, MultipartHttpServletRequest multiRequest, ModelAndView modelAndView) throws Exception {
@ -270,6 +356,100 @@ public class EduAplctTngrServiceImpl implements EduAplctTngrService {
return true;
}
@Override
public boolean eduAplctRegUpdProcess202310(VEEduAplctVO vEEduAplctVO, HttpServletRequest request, MultipartHttpServletRequest multiRequest, ModelAndView modelAndView) throws Exception {
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
String s_scholSealAtchFileId = "";
s_scholSealAtchFileId = vEEduAplctVO.getScholSealAtchFileId();
//DB에서 실제 첨부파일 존재 여부 확인
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(s_scholSealAtchFileId);
List<FileVO> result = fileService.selectFileInfs(fileVO);
if (result.size()<=0) {
s_scholSealAtchFileId = "";
}
int i_file_limit = checkFileUtil.getLimitCount(request); // file count
int i_limit_size = checkFileUtil.getLimitSize(request); // file MB
String s_file_exts = checkFileUtil.getS_exts(); // file exts
if ("".equals(s_scholSealAtchFileId)) {
s_scholSealAtchFileId = checkFileUtil.fileValCheckNdbInsert(
multiRequest, modelAndView
, "SCHOLSEAL_"
, s_file_exts
, i_limit_size
, i_file_limit
); //EXT, MB size and ea
}else {
s_scholSealAtchFileId = checkFileUtil.fileValCheckNdbUpdate(
multiRequest, modelAndView
, "SCHOLSEAL_"
, s_file_exts
, i_limit_size
, i_file_limit
, s_scholSealAtchFileId
); //EXT, MB size and ea
}
if ("ERROR".equals(s_scholSealAtchFileId)) return false;
//step3.파일 처리====================================
//교육신청 번호 생성 디비 저장하기
vEEduAplctVO.setLctrDivCd(VeConstants.LCTR_DIV_CD_10); //강의 구분 코드 체험교실
vEEduAplctVO.setScholSealAtchFileId(s_scholSealAtchFileId); //학교장직인 첨부파일
vEEduAplctVO.setUserId(loginVO.getUniqId());
vEEduAplctVO.setFrstRegisterId(loginVO.getUniqId()); //esntl_id
//저장전 암호화 - VO 단위로 만들어서 사용
vEEduAplctVO = egovCryptoUtil.encryptVEEduAplctVOInfo(vEEduAplctVO);
//오프라인 교육을 신청할 , 해당 지역의 허용가능차시를 초과하면 교육 승인코드를 대기상태로 저장해야
if("Y".equals(vEEduAplctVO.getSbmtYn()) && "20".equals(vEEduAplctVO.getEduSlctCd())) {
chkOffChasiWait202310(vEEduAplctVO, request);
//온라인 교육을 신청할 , 해당 지역의 허용가능차시를 초과하면 교육 승인코드를 대기상태로 저장해야
}else if("Y".equals(vEEduAplctVO.getSbmtYn()) && "10".equals(vEEduAplctVO.getEduSlctCd())) {
chkOnChasiWait202310(vEEduAplctVO, request);
}
//수정
vEEduAplctDAO.updateReg(vEEduAplctVO);
//차시 수정-일괄 삭제 저장
String[] s_eduHopeDt = request.getParameterValues("eduHopeDt");
String[] s_strtTm = request.getParameterValues("strtTm");
String[] s_endTm = request.getParameterValues("endTm");
String[] s_lrnTm = request.getParameterValues("lrnTm");
String[] s_divCd = request.getParameterValues("divCd");
String[] s_trgt = request.getParameterValues("trgt");
String[] s_prsnl = request.getParameterValues("prsnl");
VEEduChasiVO vEEduChasiVO = new VEEduChasiVO();
vEEduChasiVO.setEduAplctOrd(vEEduAplctVO.getEduAplctOrd());
vEEduChasiVO.setFrstRegisterId(loginVO.getUniqId()); //esntl_id
//차시 전체 삭제
vVEEduChasiDAO.delete(vEEduChasiVO);
for (int i=0;i<s_eduHopeDt.length;i++) {
String eduChasiOrd = eduChasiGnrService.getNextStringId(); // 교육차시 순번
vEEduChasiVO.setEduChasiOrd(eduChasiOrd);
//vEEduChasiVO.setEduHopeDt(s_eduHopeDt[i].replaceAll("[^0-9]",""));
vEEduChasiVO.setEduHopeDt(s_eduHopeDt[i]);
vEEduChasiVO.setStrtTm(s_strtTm[i].replaceAll("[^0-9]",""));
vEEduChasiVO.setEndTm(s_endTm[i].replaceAll("[^0-9]",""));
vEEduChasiVO.setLrnTm(s_lrnTm[i]);
vEEduChasiVO.setDivCd(s_divCd[i]);
vEEduChasiVO.setTrgt(s_trgt[i]);
vEEduChasiVO.setPrsnl(s_prsnl[i]);
vVEEduChasiDAO.insert(vEEduChasiVO);
}
return true;
}
@Override
public boolean eduAplctMdfyProcess(VEEduAplctVO vEEduAplctVO, HttpServletRequest request, MultipartHttpServletRequest multiRequest, ModelAndView modelAndView) throws Exception {
@ -553,22 +733,6 @@ public class EduAplctTngrServiceImpl implements EduAplctTngrService {
String month = eduHopeDt.substring(4, 6);
String year = eduHopeDt.substring(0, 4);
/*
* 신청일자와 지역을 기준으로 대상 지역관리 데이터를 찾아서 검증하므로 하기 내용은 필요가 없다.
vELctrDetailVO.setStngYr(year);
if(Integer.parseInt(month) <= 6) {
vELctrDetailVO.setPrdDivCd("10"); //상반기
//aplctVO.setSearchStartDt(year+"0101");
//aplctVO.setSearchEndDt(year+"0630");
aplctVO.setSearchStartDt(year+"0328");
aplctVO.setSearchEndDt(year+"1209");
} else {
vELctrDetailVO.setPrdDivCd("20"); //하반기
aplctVO.setSearchStartDt(year+"0701");
aplctVO.setSearchEndDt(year+"1231");
}
*/
//청소년 요청이 신청한 지역의 신청 제한에 맞게 재대로 신청한 것인지 확인 한다.
List<VELctrDetailVO> list = vELctrAreaMngDAO.selectList(vELctrDetailVO);
@ -598,6 +762,56 @@ public class EduAplctTngrServiceImpl implements EduAplctTngrService {
return vEEduAplctVO;
}
private VEEduAplctVO chkOffChasiWait202310(VEEduAplctVO vEEduAplctVO, HttpServletRequest request) throws Exception {
//1. 지역별강의관리의 해당 지역코드의 총수강시간을 가져옴
VELctrDetailVO vELctrDetailVO = new VELctrDetailVO();
vELctrDetailVO.setAreaCd(vEEduAplctVO.getEduSlctAreaCd());
vELctrDetailVO.setInstrDiv(VeConstants.LCTR_DIV_CD_10); //청소년 코드
String[] s_eduHopeDt = request.getParameterValues("eduHopeDt");
boolean waitYn = false; //대기상태 판별 변수
//차시별로 지역별 시간이 초과되는지 확인
for (int i=0; i<s_eduHopeDt.length; i++) {
VEEduAplctVO aplctVO = new VEEduAplctVO();
String eduHopeDt = s_eduHopeDt[i].replaceAll("[^0-9]","");
String month = eduHopeDt.substring(4, 6);
String year = eduHopeDt.substring(0, 4);
//청소년 요청이 신청한 지역의 신청 제한에 맞게 재대로 신청한 것인지 확인 한다.
// 1.해당 지역의 허용가능차시
VEAStngVO vEAStngVO = new VEAStngVO();
VEAStngVO result = vELctrAreaMngDAO.selectList202310(vEAStngVO);
int rgstrPsblTm = 0;
try {
rgstrPsblTm = Integer.parseInt(result.getTtlEduCnfrmPsblChasi()); // 해당 지역의 허용가능차시
}catch(Exception ex) {
ex.printStackTrace();
}
//2. 현재 신청한 지역의 토탈시간을 가져옴 (승인상태가 취소(40) 아닌 건들에 대한 토탈 시간)
vEAStngVO.setEduSlctCd(vEEduAplctVO.getEduSlctCd()); //10-온라인, 20-오프라인
vEAStngVO.setRndsOrd(vEEduAplctVO.getRndsOrd());
vEAStngVO.setAreaCd(vEEduAplctVO.getEduSlctAreaCd());
//신청한 전체 차시
int aplctTotalChasi = vEEduAplctDAO.selectTotalChasi202310(vEAStngVO);
//3. 총수강시간 < 신청한 지역의 토탈시간인 경우 대기(VE0003 : 230) 상태로 세팅
if(rgstrPsblTm < aplctTotalChasi) {
waitYn = true;
break;
}
}
if(waitYn) {
vEEduAplctVO.setAprvlCd(VeConstants.APRVL_CD_230);
vEEduAplctVO.setIsWait("Y");
}
return vEEduAplctVO;
}
public VEEduAplctVO chkOnChasiWait(VEEduAplctVO vEEduAplctVO, HttpServletRequest request) throws Exception {
//1. 지역별강의관리의 해당 지역코드의 총수강시간을 가져옴
@ -660,4 +874,65 @@ public class EduAplctTngrServiceImpl implements EduAplctTngrService {
return vEEduAplctVO;
}
private VEEduAplctVO chkOnChasiWait202310(VEEduAplctVO vEEduAplctVO, HttpServletRequest request) throws Exception {
//1. 지역별강의관리의 해당 지역코드의 총수강시간을 가져옴
VELctrDetailVO vELctrDetailVO = new VELctrDetailVO();
//vELctrDetailVO.setAreaCd(vEEduAplctVO.getEduSlctAreaCd());
vELctrDetailVO.setAreaCd("400");
vELctrDetailVO.setInstrDiv(VeConstants.LCTR_DIV_CD_10); //청소년 코드
String[] s_eduHopeDt = request.getParameterValues("eduHopeDt");
boolean waitYn = false; //대기상태 판별 변수
//차시별로 지역별 시간이 초과되는지 확인
for (int i=0; i<s_eduHopeDt.length; i++) {
VEEduAplctVO aplctVO = new VEEduAplctVO();
String eduHopeDt = s_eduHopeDt[i].replaceAll("[^0-9]","");
String month = eduHopeDt.substring(4, 6);
String year = eduHopeDt.substring(0, 4);
/*
* * 신청일자와 지역을 기준으로 대상 지역관리 데이터를 찾아서 검증하므로 하기 내용은 필요가 없다.
vELctrDetailVO.setStngYr(year);
if(Integer.parseInt(month) <= 6) {
vELctrDetailVO.setPrdDivCd("10"); //상반기
//aplctVO.setSearchStartDt(year+"0101");
//aplctVO.setSearchEndDt(year+"0630");
aplctVO.setSearchStartDt(year+"0328");
aplctVO.setSearchEndDt(year+"1209");
} else {
vELctrDetailVO.setPrdDivCd("20"); //하반기
aplctVO.setSearchStartDt(year+"0701");
aplctVO.setSearchEndDt(year+"1231");
}
*/
//청소년 요청이 신청한 지역의 신청 제한에 맞게 재대로 신청한 것인지 확인 한다.
List<VELctrDetailVO> list = vELctrAreaMngDAO.selectList(vELctrDetailVO);
int rgstrPsblTm = 0;
if(list.size() > 0) {
rgstrPsblTm = Integer.parseInt(list.get(0).getRgstrPsblTm()); // 해당 지역의 허용가능차시
}
//2. 현재 신청한 지역의 토탈시간을 가져옴 (승인상태가 취소(40) 아닌 건들에 대한 토탈 시간)
aplctVO.setLctrDivCd(VeConstants.LCTR_DIV_CD_10);
aplctVO.setEduSlctCd(vEEduAplctVO.getEduSlctCd()); //10-온라인, 20-오프라인
//aplctVO.setEduSlctAreaCd(vEEduAplctVO.getEduSlctAreaCd());
//신청한 전체 차시
int aplctTotalChasi = vEEduAplctDAO.selectTotalChasi(aplctVO);
//3. 총수강시간 < 신청한 지역의 토탈시간인 경우 대기(VE0003 : 230) 상태로 세팅
if(rgstrPsblTm < aplctTotalChasi) {
waitYn = true;
break;
}
}
if(waitYn) {
vEEduAplctVO.setAprvlCd(VeConstants.APRVL_CD_230);
vEEduAplctVO.setIsWait("Y");
}
return vEEduAplctVO;
}
}

View File

@ -234,7 +234,7 @@ public class EduAplctTngrController {
modelAndView.addObject("result", "loginFail");
return modelAndView;
}
boolean flag = eduAplctTngrService.eduAplctRegProcess(vEEduAplctVO, request, multiRequest, modelAndView);
boolean flag = eduAplctTngrService.eduAplctRegProcess202310(vEEduAplctVO, request, multiRequest, modelAndView);
if(!flag){
modelAndView.addObject("result", "fail");

View File

@ -5,8 +5,8 @@ import java.util.List;
import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import kcc.ve.adv.tngr.stngInfo.service.VEAStngVO;
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduAplctVO;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsDetailVO;
@Repository("vEEduAplctDAO")
public class VEEduAplctDAO extends EgovAbstractDAO {
@ -119,6 +119,10 @@ public class VEEduAplctDAO extends EgovAbstractDAO {
return (int) select("VEEduAplctDAO.selectTotalChasi", paramVO);
}
public int selectTotalChasi202310(VEAStngVO paramVO) throws Exception {
return (int) select("VEEduAplctDAO.selectTotalChasi202310", paramVO);
}
public int selectCntAplctPrd(VEEduAplctVO veEduAplctVO) throws Exception {
return (int) select("VEEduAplctDAO.selectCntAplctPrd",veEduAplctVO);
}

View File

@ -64,6 +64,11 @@ public class VELctrAreaMngDAO extends EgovAbstractDAO {
return tlist;
}
//L
public VEAStngVO selectList202310(VEAStngVO paramVO) throws Exception {
return (VEAStngVO) select("VELctrAreaMngDAO.selectList202310", paramVO);
}
//L
public List<VEAStngVO> selectList20231024(VEAStngVO paramVO) throws Exception {
List<VEAStngVO> tlist = (List<VEAStngVO>) list("VELctrAreaMngDAO.selectList20231024", paramVO);

View File

@ -4,6 +4,7 @@
<sqlMap namespace="VEEduAplct">
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="VEEduAplctVO" type="kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduAplctVO"/>
<typeAlias alias="VEAStngVO" type="kcc.ve.adv.tngr.stngInfo.service.VEAStngVO"/>
<!-- 공통 테이블 명 -->
@ -1127,6 +1128,35 @@
AND A.SBMT_YN = 'Y'
</select>
<!-- 해당 반기의 차시 총 시간 - 교육신청 시 해당 지역의 총 신청 시간을 필요로 함 -->
<select id="VEEduAplctDAO.selectTotalChasi202310" parameterClass="VEAStngVO" resultClass="int">
/* VEEduAplctDAO.selectTotalChasi */
SELECT NVL(sum(b.chasi),0) AS totalLrnTm
FROM ve_edu_aplct a
, ve_edu_chasi b
WHERE a.rnds_ord=#rndsOrd#'
AND a.edu_slct_cd =#eduSlctCd#
<isEqual property="eduSlctCd" compareValue="20">
AND a.edu_slct_area_cd =#areaCd#
</isEqual>
AND a.EDU_APLCT_ORD =b.EDU_APLCT_ORD
AND NVL(a.use_yn,'Y')='Y'
AND A.SBMT_YN = 'Y'
/*
요청(10), 선정완료(120), 승인(20), 교육확정(60), 수정요청(70), 수정요청 완료(80), 대기 수량(230)을 모두 카운트 한다.
*/
AND
a.aprvl_cd IN ('10','120','20','60','70','80','230')
</select>
<!-- 해당 반기의 차시 총 시간 - 교육신청 시 해당 지역의 총 신청 시간을 필요로 함 -->
<select id="VEEduAplctDAO.selectTotalChasi_bak" parameterClass="VEEduAplctVO" resultClass="int">
/* VEEduAplctDAO.selectTotalChasi_bak */

View File

@ -682,7 +682,19 @@
</select>
<!-- 강사 정보 L -->
<!-- 해당지역의 설정된 차시 값을 가져온다. L -->
<select id="VELctrAreaMngDAO.selectList202310" parameterClass="VEAStngVO" resultClass="VEAStngVO">
/* VELctrAreaMngDAO.selectList202310 */
SELECT b.ttl_edu_cnfrm_psbl_chasi AS ttlEduCnfrmPsblChasi
FROM vea_lctr_rnds_stng a
, vea_area_lctr_stng b
WHERE a.rnds_ord=#rndsOrd#
AND a.yr=b.RNDS_ORD
AND b.area_cd=#areaCd#
</select>
<!-- 강의신청시간이 해당 지역의 설정값과 맞는지 확인 L -->
<select id="VELctrAreaMngDAO.selectList20231024" parameterClass="VEAStngVO" resultClass="VEAStngVO">
/* VELctrAreaMngDAO.selectList20231024 */
SELECT b.*