diff --git a/src/main/java/kcc/ve/cmm/VeInstrFeeMng.java b/src/main/java/kcc/ve/cmm/VeInstrFeeMng.java index 5ea1caa0..a14ef0b4 100644 --- a/src/main/java/kcc/ve/cmm/VeInstrFeeMng.java +++ b/src/main/java/kcc/ve/cmm/VeInstrFeeMng.java @@ -182,6 +182,204 @@ public class VeInstrFeeMng { return vEInstrFeeAcmdtVO; } + //청소년강사용 강사료 계산-excel 전용 (excel의 경우는 거리계산, 식대가 다른 row와 연결되어서 결정되어야 하므로, 별도 함수로 처리한다. + // + public VEInstrFeeAcmdtVO VeInstrFeeMng4Excel( + VEInstrFeeService vEInstrFeeService + , String eduAplctOrd + , String eduChasiOrd + + , String p_rankNo //순위 1 이고, 값이 없으면 가상값을 넣어준다. 2이상이고, 값이 없으면 0 + , String p_foodExpenses //식비 존재여부 확인 용 - 값 or null + , String p_trafficFee //교통비 존재여부 확인 용 - 값 or null + + ) throws Exception { + + // 강사료 + VEInstrFeeAcmdtVO infoVO = new VEInstrFeeAcmdtVO(); + infoVO.setEduAplctOrd(eduAplctOrd); + infoVO.setEduChasiOrd(eduChasiOrd); + VEInstrFeeAcmdtVO vEInstrFeeAcmdtVO = vEInstrFeeService.selectDetail(infoVO); + + + if(vEInstrFeeAcmdtVO.getInstrFeeOrd() == null) { + + List selectChasiList = vEInstrFeeService.selectChasiList(vEInstrFeeAcmdtVO); + System.out.println("@@ "+selectChasiList.get(0).getTotCnt()); + + boolean check = false; + + System.out.println(" 조회 차시 정보 "+vEInstrFeeAcmdtVO.getEduChasiOrd()); + System.out.println(" 첫번쨰 차시 정보 "+selectChasiList.get(0).getEduChasiOrd()); + if(selectChasiList.get(0).getEduChasiOrd().equals(vEInstrFeeAcmdtVO.getEduChasiOrd())) { + check = true; + } + + /* + * 강사료 계산 정리 + * 강사료 계산 : 기본요금 * 차시 수량 + * 도서벽지수당 : 오프라인 교육이며 AND 교육지역이 도서벽지에 해당이 되면 기본 값 15,000원 * 차시 수량 + * 교통비 : 왕복 거리 * 160원 + * + * */ + + // 강사료 계산 (강의차시 * 강사 기본값) + int instrFee = Integer.parseInt(vEInstrFeeAcmdtVO.getChasi()) * Integer.parseInt(VeConstants.BASE_INSTR_FEE); + System.out.println(" @@@@@@@@@@@@@@@@@@@@@@ instrFee : "+instrFee); + vEInstrFeeAcmdtVO.setInstrFee(Integer.toString(instrFee)); + + // 온라인 여부 확인(10:온라인, 20:오프라인) + if("20".equals(vEInstrFeeAcmdtVO.getEduSlctCd())){ + + // 도서벽지수당 계산(강의 차시 * 15,000원) 22.06.15 도서벽지 수당 중복하도록 요청으로 인한 변경 + try { + if(vEInstrFeeAcmdtVO.getIsltnScholYn().equals("Y")) { + int isltnFee = Integer.parseInt(vEInstrFeeAcmdtVO.getChasi()) * Integer.parseInt(VeConstants.BASE_ISLTN_FEE); + vEInstrFeeAcmdtVO.setSpecialWorkAllow(Integer.toString(isltnFee)); + } + }catch(Exception ex) { + System.out.println(ex.getMessage()); + } + + + if(check) { + + + if(vEInstrFeeAcmdtVO.getOnewayDstnc() == null || vEInstrFeeAcmdtVO.getOnewayDstnc().equals("")) { + vEInstrFeeAcmdtVO.setOnewayDstnc("0"); + } + + // 거리비교 200Km 이상 : 40000원, 100Km 이상 : 30000원, 12Km 이상 : 20000원, 1Km 이상 10000원 + int dstnc = (Integer.parseInt(vEInstrFeeAcmdtVO.getOnewayDstnc()) * 2); + + String passCityList = "강원도,경기도,경상북도,경상남도,충청북도,충청남도,전라북도,전라남도,제주특별자치도"; + String[] passCityArray = passCityList.split(","); + + boolean passCity = true; + + try { + + String[] scholArea = vEInstrFeeAcmdtVO.getScholArea().split(" "); + String[] instrRsdnc = vEInstrFeeAcmdtVO.getInstrRsdnc().split(" "); + + + System.out.println("학교 : "+scholArea[0]+" "+scholArea[1]+" _강사 :"+instrRsdnc[0]+" "+instrRsdnc[1]+" _거리 :" + dstnc); + + /* + 강원도,경기도,경상북도,경상남도,충청북도,충청남도,전라북도,전라남도,제주특별자치도 + 광주광역시,대구광역시,대전광역시,부산광역시,서울특별시,세종특별자치시,울산광역시,인천광역시 + */ + + + + // 주소 앞자리 비교 + passCity = true; + if(scholArea[0].contains(instrRsdnc[0])){ + + for(int i=0; i < passCityArray.length; i++) { + if(passCityArray[i].equals(scholArea[0])) { + if(!scholArea[1].equals(instrRsdnc[1])){ + System.out.println("타지역 "); + passCity = false; + break; + }else { + System.out.println("거주지"); + break; + } + } + } + }else{ + // 다르면 끝 + passCity = false; + } + }catch(Exception ex) { + System.out.println(ex.getMessage()); + } + + + + // 장거리교육수당 확인(거주지 : 10000) + if(passCity || dstnc < 12){ // 거주지 인경우 + System.out.println("거주지"); + vEInstrFeeAcmdtVO.setDistanceAllow("10000"); + }else { // 타지역 인경우 + System.out.println("타지역 : " + vEInstrFeeAcmdtVO.getOnewayDstnc()); + + if(dstnc >= 200) { + vEInstrFeeAcmdtVO.setDistanceAllow("40000"); + }else if(dstnc >= 100 && dstnc < 200) { + vEInstrFeeAcmdtVO.setDistanceAllow("30000"); + }else if(dstnc >= 12 && dstnc < 100) { + vEInstrFeeAcmdtVO.setDistanceAllow("20000"); + }else { + vEInstrFeeAcmdtVO.setDistanceAllow("10000"); + } + + // 교통비 계산 (거리 * 교통비 기본값) + int trafficFee = (Integer.parseInt(vEInstrFeeAcmdtVO.getOnewayDstnc()) * 2) * Integer.parseInt(VeConstants.BASE_TRAFFIC_FEE); + //vEInstrFeeAcmdtVO.setTrafficFee(Integer.toString(trafficFee)); + + if ("1".equals(p_rankNo)) { + if (p_trafficFee == null) { + vEInstrFeeAcmdtVO.setTrafficFee(Integer.toString(trafficFee)); + } + } + + } + vEInstrFeeAcmdtVO.setLikeCheckYn("N"); + }else { + vEInstrFeeAcmdtVO.setDistanceAllow("0"); + vEInstrFeeAcmdtVO.setLikeCheckYn("Y"); + } + + //식비지급 + //vEInstrFeeAcmdtVO.setFoodExpenses("7000"); + if ("1".equals(p_rankNo)) { + if (p_foodExpenses == null) { + vEInstrFeeAcmdtVO.setFoodExpenses("7000"); + } + } + + + // 수당 합계 + int sum = + Integer.parseInt(vEInstrFeeAcmdtVO.getSpecialWorkAllow()) + + Integer.parseInt(vEInstrFeeAcmdtVO.getDistanceAllow()); + vEInstrFeeAcmdtVO.setAllowance(sum); + + // 여비 합계 + sum = Integer.parseInt(vEInstrFeeAcmdtVO.getTrafficFee()) + + Integer.parseInt(vEInstrFeeAcmdtVO.getAcmdtFee()); + vEInstrFeeAcmdtVO.setSpareFee(String.format("%,d", sum)); + + + + }else if("10".equals(vEInstrFeeAcmdtVO.getEduSlctCd())){ + + } + } + + + // 강사료 합계 + int instrFeeSum = Integer.parseInt(vEInstrFeeAcmdtVO.getInstrFee()) + + Integer.parseInt(vEInstrFeeAcmdtVO.getSpecialWorkAllow()) + + Integer.parseInt(vEInstrFeeAcmdtVO.getDistanceAllow()) + + Integer.parseInt(vEInstrFeeAcmdtVO.getTrafficFee()) + + Integer.parseInt(vEInstrFeeAcmdtVO.getFoodExpenses()) + + Integer.parseInt(vEInstrFeeAcmdtVO.getAcmdtFee()) + ; + vEInstrFeeAcmdtVO.setInstrFeeSum(instrFeeSum); + + // 세금 합계 -> 세금 제거 요청으로 제거 +// int taxSum = Integer.parseInt(vEInstrFeeAcmdtVO.getIncomeTax()) +// + Integer.parseInt(vEInstrFeeAcmdtVO.getLocalIncomeTax()); +// vEInstrFeeAcmdtVO.setTaxSum(taxSum); + + // 강사료 합계-세금 합계 +// int totalSum = instrFeeSum - taxSum; + + return vEInstrFeeAcmdtVO; + } + //성인강사용 강사료 계산 - just instrFee public int VeInstrFeePreCalc4Adult(String p_divCd, String p_lrnTm) throws Exception { int instrFee = 0; diff --git a/src/main/java/kcc/ve/instr/tngrVisitEdu/asgnmInfo/service/VEEduExcelVO.java b/src/main/java/kcc/ve/instr/tngrVisitEdu/asgnmInfo/service/VEEduExcelVO.java index 7561ee7c..21ff6a2e 100644 --- a/src/main/java/kcc/ve/instr/tngrVisitEdu/asgnmInfo/service/VEEduExcelVO.java +++ b/src/main/java/kcc/ve/instr/tngrVisitEdu/asgnmInfo/service/VEEduExcelVO.java @@ -142,6 +142,14 @@ public class VEEduExcelVO { private String isltn3Yn; //접적학교여부 private String ppltnReducAreaYn; //인구감소지역여부 + private String rankNo; //식비, 거리계산용 rankno + + public String getRankNo() { + return rankNo; + } + public void setRankNo(String rankNo) { + this.rankNo = rankNo; + } public String getInstrDiv() { return instrDiv; } diff --git a/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Tibero.xml b/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Tibero.xml index ba34144d..d7de8c21 100644 --- a/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Tibero.xml +++ b/src/main/resources/egovframework/sqlmap/ve/edu/VEEdu_MIX_SQL_Tibero.xml @@ -6059,6 +6059,11 @@ /* a.aprvl_cd AS aprvlCd */ + + RANK() OVER (PARTITION BY d.user_id ORDER BY b.edu_hope_dt, b.strt_tm) AS rankNo, + i.foodExpense, /* 저장된 값이 있으면 0 이상 , 없으면 null */ + i.trafficFee, /* 저장된 값이 있으면 0 이상 , 없으면 null */ + (SELECT a0.code_nm FROM LETTCCMMNDETAILCODE a0 WHERE a0.code_id='VE0003' AND a0.code=a.aprvl_cd) AS aprvlCd /* , DATE_FORMAT(a.aprvl_pnttm,'%Y-%m-%d') AS aprvlPnttm @@ -6182,6 +6187,52 @@ LEFT OUTER JOIN ve_edu_instr_dstnc H ON (D.EDU_APLCT_ORD = H.edu_aplct_ord AND D.user_id = H.user_id) + + LEFT OUTER JOIN ( + + SELECT d.USER_ID AS userId + , b.EDU_HOPE_DT AS eduHopeDt + , MAX(NVL(f.TRAFFIC_FEE,0)) AS trafficFee + , MAX(NVL(f.FOOD_EXPENSES,0)) AS foodExpense + FROM + ve_edu_aplct a , + ve_edu_chasi b , + ve_edu_chasi_instr_asgnm d , + ve_instr_fee f + WHERE + 1 = 1 + AND a.edu_aplct_ord = b.edu_aplct_ord + AND a.lctr_div_cd = #lctrDivCd# + AND a.aprvl_cd = '60' + AND NVL(A.USE_YN,'Y') ]]> 'N' + + + AND REPLACE(b.EDU_HOPE_DT, '.' , '') = ]]> REPLACE(#searchStartDt#, '.' , '') + + + AND REPLACE(b.EDU_HOPE_DT, '.' , '') REPLACE(#searchEndDt#, '.' , '') + + + + + AND d.asgnm_aprvl_cd is null + + + AND d.asgnm_aprvl_cd = #searchAsgnmAprvlCd# + + + + and b.edu_aplct_ord = d.edu_aplct_ord + AND b.edu_chasi_ord = d.edu_chasi_ord + AND d.edu_aplct_ord = f.edu_aplct_ord + AND d.edu_chasi_ord = f.edu_chasi_ord + GROUP BY d.USER_ID, b.EDU_HOPE_DT + + )I ON( + d.user_id=I.userId + AND b.edu_hope_dt = i.eduhopedt + ) + WHERE 1=1 AND a.edu_aplct_ord=b.edu_aplct_ord AND a.lctr_div_cd = #lctrDivCd# diff --git a/src/main/resources/egovframework/sqlmap/ve/instr/VESttst_MIX_SQL_Tibero.xml b/src/main/resources/egovframework/sqlmap/ve/instr/VESttst_MIX_SQL_Tibero.xml index bd3fb86a..a2496b3b 100644 --- a/src/main/resources/egovframework/sqlmap/ve/instr/VESttst_MIX_SQL_Tibero.xml +++ b/src/main/resources/egovframework/sqlmap/ve/instr/VESttst_MIX_SQL_Tibero.xml @@ -2073,6 +2073,9 @@ WHERE code_id='VE0008' AND code !='400' UNION ALL + SELECT '998', '기타' + FROM dual + UNION ALL SELECT '999', '합계' FROM dual ) bbb @@ -2080,32 +2083,32 @@ SELECT aa.lctrDivCd , nvl(aa.eduSlctAreaCd,'999') AS eduSlctAreaCd - , sum(decode(aa.aprvlcd,10,aa.cnt,11,aa.cnt,13,aa.cnt,0)) AS mnt01 - , round(sum(decode(aa.aprvlcd,10,aa.cnt,11,aa.cnt,13,aa.cnt,0.0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt01 + , sum(decode(aa.aprvlcd,10,aa.cnt,11,aa.cnt,12,aa.cnt,13,aa.cnt,0)) AS mnt01 + , round(sum(decode(aa.aprvlcd,10,aa.cnt,11,aa.cnt,12,aa.cnt,13,aa.cnt,0.0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt01 - , sum(decode(aa.aprvlcd,12,aa.cnt,0)) AS mnt02 - , round(sum(decode(aa.aprvlcd,12,aa.cnt,0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt02 + , sum(decode(aa.aprvlcd,20,aa.cnt,30,aa.cnt,40,aa.cnt,50,aa.cnt,0)) AS mnt02 + , round(sum(decode(aa.aprvlcd,20,aa.cnt,30,aa.cnt,40,aa.cnt,50,aa.cnt,0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt02 - , sum(decode(aa.aprvlcd,20,aa.cnt,30,aa.cnt,40,aa.cnt,50,aa.cnt,0)) AS mnt03 - , round(sum(decode(aa.aprvlcd,20,aa.cnt,30,aa.cnt,40,aa.cnt,50,aa.cnt,0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt03 - - , sum(decode(aa.aprvlcd,60,aa.cnt,70,aa.cnt,0)) AS mnt04 - , round(sum(decode(aa.aprvlcd,60,aa.cnt,70,aa.cnt,0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt04 - - , sum(decode(aa.aprvlcd,80,aa.cnt,0)) AS mnt05 - , round(sum(decode(aa.aprvlcd,80,aa.cnt,0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt05 + , sum(decode(aa.aprvlcd,60,aa.cnt,70,aa.cnt,0)) AS mnt03 + , round(sum(decode(aa.aprvlcd,60,aa.cnt,70,aa.cnt,0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt03 + , sum(decode(aa.aprvlcd,80,aa.cnt,0)) AS mnt04 + , round(sum(decode(aa.aprvlcd,80,aa.cnt,0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt04 + + , sum(decode(aa.aprvlcd,12,aa.cnt,0)) AS mnt05 + , round(sum(decode(aa.aprvlcd,12,aa.cnt,0))*100/sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0.0 end),2) AS areaCnt05 + , sum(CASE WHEN aa.aprvlcd IS NULL THEN aa.cnt ELSE 0 end) AS mnt06 FROM ( SELECT a.LCTR_DIV_CD AS lctrDivCd , a.APRVL_CD AS aprvlCd - , a.edu_slct_area_cd AS eduSlctAreaCd + , NVL(a.edu_slct_area_cd,'998') AS eduSlctAreaCd , count(*) cnt from VE_EDU_APLCT a WHERE a.LCTR_DIV_CD =#lctrDivCd# AND a.SBMT_YN ='Y' AND TO_CHAR(a.SBMT_PNTTM ,'YYYY')=#mngNmbrYr# - GROUP BY rollup(a.LCTR_DIV_CD, a.edu_slct_area_cd, a.APRVL_CD) + GROUP BY rollup(a.LCTR_DIV_CD, NVL(a.edu_slct_area_cd,'998'), a.APRVL_CD) )aa WHERE aa.lctrDivCd IS NOT null GROUP BY aa.lctrDivCd diff --git a/src/main/webapp/WEB-INF/jsp/oprtn/cpyrgExprnClsrm/newEduPrfrmMngList.jsp b/src/main/webapp/WEB-INF/jsp/oprtn/cpyrgExprnClsrm/newEduPrfrmMngList.jsp index 3c8aeb09..5fa5b927 100644 --- a/src/main/webapp/WEB-INF/jsp/oprtn/cpyrgExprnClsrm/newEduPrfrmMngList.jsp +++ b/src/main/webapp/WEB-INF/jsp/oprtn/cpyrgExprnClsrm/newEduPrfrmMngList.jsp @@ -329,7 +329,7 @@