2023-11-16 12:47 청소년 강사 배정 수정
This commit is contained in:
parent
4ddbeb511b
commit
f65fe4ca05
@ -18,6 +18,8 @@ import kcc.com.cmm.service.FileVO;
|
||||
import kcc.com.utl.fcc.service.EgovStringUtil;
|
||||
import kcc.com.utl.user.service.CheckLoginUtil;
|
||||
import kcc.let.utl.fcc.service.EgovCryptoUtil;
|
||||
import kcc.ve.adv.tngr.stngInfo.service.VEAStngService;
|
||||
import kcc.ve.adv.tngr.stngInfo.service.VEAStngVO;
|
||||
import kcc.ve.cmm.VeConstants;
|
||||
import kcc.ve.instr.tngrVisitEdu.asgnmInfo.service.VEAsgnmMIXService;
|
||||
import kcc.ve.instr.tngrVisitEdu.asgnmInfo.service.VEEduChasiInstrAsgnmService;
|
||||
@ -80,6 +82,10 @@ public class CommonWebController {
|
||||
@Resource(name = "vEEduChasiInstrAsgnmService")
|
||||
private VEEduChasiInstrAsgnmService vEEduChasiInstrAsgnmService;
|
||||
|
||||
//강의설정
|
||||
@Resource(name = "vEAStngService")
|
||||
private VEAStngService vEAStngService;
|
||||
|
||||
|
||||
@RequestMapping("/popup/searchBeforeContent.do")
|
||||
public String searchBeforeContentPopup(@ModelAttribute("vEEduAplctVO") VEEduAplctVO vEEduAplctVO, ModelMap model, HttpServletRequest request) throws Exception{
|
||||
@ -1303,6 +1309,7 @@ public class CommonWebController {
|
||||
//VEEduAplctVO tChasiInfo = vEEduAplctVOList.get(i);
|
||||
|
||||
String s_eduHopeDt = p_tChasiInfo.getEduHopeDt(); //교육희망일자
|
||||
String s_eduSlctCd = p_tChasiInfo.getEduSlctCd(); //온라인 10, 오프라인 20
|
||||
//String s_addr = tChasiInfo.getAddr(); //지역명
|
||||
|
||||
System.out.println(s_eduHopeDt);
|
||||
@ -1330,6 +1337,9 @@ public class CommonWebController {
|
||||
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrMntAsgnmtChasiList(vEAutoAsgnmVO);
|
||||
|
||||
//step2-2.희망 지역 강사 검색(필)
|
||||
//오프라인, 온라인 구분해서 희망 지역 체크가 필요하다.
|
||||
//오프라인의 경우 (완)
|
||||
//온라인인 경우 (해당 강사의 zoom 가능 여부 체크)
|
||||
|
||||
for (int j=0;j<vEInstrAssiEduAplctVOList.size();j++) {
|
||||
s_user_id = s_user_id + ",'" + vEInstrAssiEduAplctVOList.get(j).getUserId()+"'";
|
||||
@ -1340,7 +1350,14 @@ public class CommonWebController {
|
||||
|
||||
System.out.println("===////step2-2.희망 지역 강사 검색(필)===");
|
||||
vEAutoAsgnmVO.setUserIds(s_user_id);
|
||||
|
||||
if("10".equals(s_eduSlctCd)) { //온라인인 경우
|
||||
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrHopeAreaZoomList(vEAutoAsgnmVO);
|
||||
}else {//오프라인인 경우
|
||||
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrHopeAreaList(vEAutoAsgnmVO);
|
||||
}
|
||||
|
||||
|
||||
}else {
|
||||
System.out.println("===X없음===");
|
||||
}
|
||||
@ -1354,8 +1371,48 @@ public class CommonWebController {
|
||||
//step3-2.연강가능여부(같은날 연강은 연강강사가 우선 배정)
|
||||
//step3-3.패널티(패널티 없는 사람이 우선순위 높게)
|
||||
|
||||
/*
|
||||
* 하기 테이블을 left outer 로 조인하고, 우선 순위에 적용해서 배정(order by)
|
||||
* 패널티 1순위
|
||||
* 연강 2순위
|
||||
* 거주지 3순위
|
||||
*/
|
||||
|
||||
|
||||
//패널티 사용
|
||||
/*
|
||||
* 패널티 적용여부 확인
|
||||
*
|
||||
* 안사용하면 skip
|
||||
* 사용하는 경우
|
||||
*
|
||||
* 하기 테이블 조인하고, 우선 조건으로 패널티 적용(order by )
|
||||
*
|
||||
* */
|
||||
|
||||
VEAStngVO vEAStngVO = new VEAStngVO();
|
||||
vEAStngVO.setAsgnmCd("10");
|
||||
vEAStngVO = vEAStngService.selectDetail_VEAIAC(vEAStngVO);
|
||||
|
||||
String s_pnltyQuery = "";
|
||||
|
||||
if ("Y".equals(vEAStngVO.getUseYn())) {
|
||||
s_pnltyQuery = " LEFT OUTER JOIN "
|
||||
+ " ( "
|
||||
+ " SELECT a.user_id AS userId "
|
||||
+ " , count(*) AS pnltyCnt "
|
||||
+ " FROM ve_edu_pnlty a "
|
||||
+ " GROUP BY a.user_id "
|
||||
+ " )bbb "
|
||||
+ " ON "
|
||||
+ " ( "
|
||||
+ " aaa.user_id = bbb.userId "
|
||||
+ " ) ";
|
||||
}
|
||||
|
||||
|
||||
//step3-4.월별시수대비할당이적은자 우선(필)
|
||||
String s_orderByQuery = " aaa.instrSumChasi*10000/(aaa.asgnmTm+1) asc ";
|
||||
s_user_id = "'aaa'";
|
||||
for (int j=0;j<vEInstrAssiEduAplctVOList.size();j++) {
|
||||
s_user_id = s_user_id + ",'" + vEInstrAssiEduAplctVOList.get(j).getUserId()+"'";
|
||||
@ -1366,10 +1423,71 @@ public class CommonWebController {
|
||||
|
||||
System.out.println("===//step3-4.월별시수대비할당이적은자 우선(필)===");
|
||||
vEAutoAsgnmVO.setUserIds(s_user_id);
|
||||
|
||||
//패널티 쿼리 적용
|
||||
if (!"".equals(s_pnltyQuery)) {
|
||||
vEAutoAsgnmVO.setPnltyQuery(s_pnltyQuery);
|
||||
|
||||
s_orderByQuery = " NVL(bbb.pnltyCnt,0) asc, " + s_orderByQuery;
|
||||
}else {
|
||||
vEAutoAsgnmVO.setPnltyQuery("");
|
||||
}
|
||||
|
||||
//기본 정렬 쿼리 - 월별시수대비할당이적은자
|
||||
vEAutoAsgnmVO.setOrderByQuery(" ORDER BY "+s_orderByQuery);
|
||||
|
||||
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrPriorityList(vEAutoAsgnmVO);
|
||||
}else {
|
||||
System.out.println("===X없음===");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
SELECT a.user_id AS userId
|
||||
, count(*) AS pnltyCnt
|
||||
FROM ve_edu_pnlty a
|
||||
GROUP BY a.user_id
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 연강 적용여부 확인
|
||||
*
|
||||
* 안사용하면 skip
|
||||
* 사용하는 경우
|
||||
*
|
||||
*1.해당 차시의 연강여부 확인
|
||||
**3.1-2연강이 아니면 해당 조건 skip
|
||||
*
|
||||
*2.1-1연강이면 연강이 가능한 강사를 우선 배정
|
||||
* 연강 가능 강사중 연강 차시에 기존 배정이 있으면 해당 강사 배정
|
||||
*
|
||||
* 없으면 연강 강사중에 배정
|
||||
*
|
||||
* 결과 테이블 만들어서 조인하고, 우선 조건으로 연강 적용(order by )
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* 거주지 강사 우선
|
||||
*
|
||||
* 거주지 적용여부 확인
|
||||
*
|
||||
* 안사용하면 skip
|
||||
* 사용하는 경우
|
||||
*
|
||||
* 1.거주지로 해당 차시 지역 비교 하여 맞는 강사 검색
|
||||
* 없으면 skip
|
||||
*
|
||||
* 2.해당 강사 중 본인 배정 비율 확인해서 넘으면 제거
|
||||
* 없으면 skip
|
||||
*
|
||||
* 결과 테이블 만들어서 조인하고, 우선 조건으로 연강 적용(order by )
|
||||
*
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -13,6 +13,8 @@ public interface VEAutoAsgnmMIXService {
|
||||
//step2-2.희망 지역 강사 검색(필)
|
||||
List<VEAutoAsgnmVO> selectInstrHopeAreaList(VEAutoAsgnmVO paramVO) throws Exception;
|
||||
|
||||
//step2-2.희망 지역-온리인으로 zoom여부 확인 강사 검색(필)
|
||||
List<VEAutoAsgnmVO> selectInstrHopeAreaZoomList(VEAutoAsgnmVO paramVO) throws Exception;
|
||||
|
||||
//step3-1.월별시수대비할당이적은자 우선(필)
|
||||
List<VEAutoAsgnmVO> selectInstrPriorityList(VEAutoAsgnmVO paramVO) throws Exception;
|
||||
|
||||
@ -73,6 +73,43 @@ public class VEAutoAsgnmVO extends ComDefaultVO implements Serializable {
|
||||
|
||||
private String mIscSum; //받은 시간
|
||||
|
||||
private String pnltyQuery; //배정을 위한 패널티 쿼리
|
||||
private String rsdncQuery; //배정을 위한 거주지 우선 쿼리
|
||||
private String cntnsQuery; //배정을 위한 연강 쿼리
|
||||
|
||||
private String orderByQuery; //배정을 위한 우선 순위 order by 쿼리
|
||||
|
||||
public String getPnltyQuery() {
|
||||
return pnltyQuery;
|
||||
}
|
||||
|
||||
public void setPnltyQuery(String pnltyQuery) {
|
||||
this.pnltyQuery = pnltyQuery;
|
||||
}
|
||||
|
||||
public String getRsdncQuery() {
|
||||
return rsdncQuery;
|
||||
}
|
||||
|
||||
public void setRsdncQuery(String rsdncQuery) {
|
||||
this.rsdncQuery = rsdncQuery;
|
||||
}
|
||||
|
||||
public String getCntnsQuery() {
|
||||
return cntnsQuery;
|
||||
}
|
||||
|
||||
public void setCntnsQuery(String cntnsQuery) {
|
||||
this.cntnsQuery = cntnsQuery;
|
||||
}
|
||||
|
||||
public String getOrderByQuery() {
|
||||
return orderByQuery;
|
||||
}
|
||||
|
||||
public void setOrderByQuery(String orderByQuery) {
|
||||
this.orderByQuery = orderByQuery;
|
||||
}
|
||||
|
||||
public String getEduHopeMnt() {
|
||||
return eduHopeMnt;
|
||||
|
||||
@ -28,6 +28,12 @@ public class VEAutoAsgnmMIXDAO extends EgovAbstractDAO {
|
||||
return tlist;
|
||||
}
|
||||
|
||||
public List<VEAutoAsgnmVO> selectInstrHopeAreaZoomList(VEAutoAsgnmVO paramVO) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<VEAutoAsgnmVO> tlist = (List<VEAutoAsgnmVO>) list("VEAutoAsgnmDAO.selectInstrHopeAreaZoomList", paramVO);
|
||||
return tlist;
|
||||
}
|
||||
|
||||
public List<VEAutoAsgnmVO> selectInstrPriorityList(VEAutoAsgnmVO paramVO) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<VEAutoAsgnmVO> tlist = (List<VEAutoAsgnmVO>) list("VEAutoAsgnmDAO.selectInstrPriorityList", paramVO);
|
||||
|
||||
@ -33,6 +33,11 @@ public class VEAutoAsgnmMIXServiceImpl implements VEAutoAsgnmMIXService {
|
||||
return vEAutoAsgnmMIXDAO.selectInstrHopeAreaList(paramVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VEAutoAsgnmVO> selectInstrHopeAreaZoomList(VEAutoAsgnmVO paramVO) throws Exception{
|
||||
return vEAutoAsgnmMIXDAO.selectInstrHopeAreaZoomList(paramVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VEAutoAsgnmVO> selectInstrPriorityList(VEAutoAsgnmVO paramVO) throws Exception{
|
||||
return vEAutoAsgnmMIXDAO.selectInstrPriorityList(paramVO);
|
||||
|
||||
@ -570,6 +570,51 @@
|
||||
GROUP BY aaaaa.userId
|
||||
</select>
|
||||
|
||||
<!-- //step2-2.희망 지역 온라인은 zoom 여부 확읻ㄴ 강사 검색(필) L page -->
|
||||
<select id="VEAutoAsgnmDAO.selectInstrHopeAreaZoomList" parameterClass="VEAutoAsgnmVO" resultClass="VEAutoAsgnmVO" remapResults="true">
|
||||
/* VEAutoAsgnmDAO.selectInstrHopeAreaZoomList */
|
||||
|
||||
/* 교육가능한(위촉상태) 청소년 강사의 줌 가능 여부 확인 */
|
||||
SELECT a.instr_div AS instrDiv,
|
||||
a.user_id AS userId,
|
||||
a.rsdne AS rsdne,
|
||||
a.hope_edu_fld AS hopeEduFld,
|
||||
b.zoom_yn AS zoomYn
|
||||
FROM ( SELECT COUNT(1) OVER() AS totCnt ,
|
||||
a0.instr_div AS instrDiv ,
|
||||
a0.user_id AS userId ,
|
||||
a0.instr_detail_ord AS instrDetailOrd
|
||||
FROM ve_instr b0 ,
|
||||
ve_instr_detail a0
|
||||
WHERE 1 =1
|
||||
AND a0.sbmt_yn='Y'
|
||||
AND a0.use_yn = 'Y'
|
||||
|
||||
AND a0.user_id IN ($userIds$)
|
||||
|
||||
GROUP BY a0.instr_div ,
|
||||
a0.user_id ,
|
||||
a0.instr_detail_ord
|
||||
)
|
||||
a00 ,
|
||||
ve_instr_detail a
|
||||
, ve_lctr_stng b
|
||||
WHERE 1 =1
|
||||
AND a00.instrDiv =a.instr_div
|
||||
AND a00.userId =a.user_id
|
||||
AND a00.instrDetailOrd=a.instr_detail_ord
|
||||
AND
|
||||
(
|
||||
a.qlfct_end_yn = 'N' OR a.qlfct_end_yn IS NULL
|
||||
)
|
||||
AND a.instr_div='10'
|
||||
|
||||
AND a.user_id=b.user_id
|
||||
AND b.use_yn='Y'
|
||||
AND NVL(b.zoom_yn,'N')='Y'
|
||||
|
||||
</select>
|
||||
|
||||
<!-- //step3-1.월별시수대비할당이적은자 우선(필) L page -->
|
||||
<select id="VEAutoAsgnmDAO.selectInstrPriorityList" parameterClass="VEAutoAsgnmVO" resultClass="VEAutoAsgnmVO" remapResults="true">
|
||||
/* VEAutoAsgnmDAO.selectInstrPriorityList */
|
||||
@ -636,7 +681,18 @@
|
||||
WHERE aa.yr=#yr#
|
||||
AND aa.user_id IN ($userIds$)
|
||||
)aaa
|
||||
|
||||
/* 패널티 적용시 쿼리 추가됨 - 시작 */
|
||||
$pnltyQuery$
|
||||
/* 패널티 적용시 쿼리 추가됨 - 끝 */
|
||||
|
||||
WHERE 1=1
|
||||
|
||||
/*
|
||||
ORDER BY aaa.instrSumChasi*10000/(aaa.asgnmTm+1) asc
|
||||
*/
|
||||
|
||||
$orderByQuery$
|
||||
</select>
|
||||
|
||||
<!-- //월별 교육시간 배정 정보 L page -->
|
||||
|
||||
@ -2441,6 +2441,7 @@
|
||||
SELECT b.edu_aplct_ord AS eduAplctOrd
|
||||
, b.edu_chasi_ord AS eduChasiOrd
|
||||
, b.edu_hope_dt AS eduHopeDt
|
||||
, a.EDU_SLCT_CD AS eduSlctCd /* 온라인 10, 오프라인 20 */
|
||||
from ve_edu_aplct a
|
||||
, ve_edu_chasi b
|
||||
, (
|
||||
|
||||
@ -926,7 +926,7 @@
|
||||
|
||||
<!-- 강사 디테일 정보 L page -->
|
||||
<select id="VEInstrMixDAO.selectPagingDetailList4Asgnm" parameterClass="VEInstrDetailVO" resultClass="VEInstrDetailVO">
|
||||
/* VEInstrMixDAO.selectPagingDetailList4Asgnm */
|
||||
/* VEInstrMixDAO.selectPagingDetailList4Asgnm 현재 강사들의 일별 가능 수 파악 */
|
||||
SELECT totCnt
|
||||
, sum(decode(workWeekCnt,5,1,0)) AS day5cnt
|
||||
, sum(decode(workWeekCnt,4,1,0)) AS day4cnt
|
||||
|
||||
@ -116,7 +116,27 @@
|
||||
|
||||
<!-- 강사 월별 시수 관리 데이터 -->
|
||||
<select id="VEAAsgnmStngMixDAO.selectList_VEAIMT_2" parameterClass="VEAStngVO" resultClass="int">
|
||||
/* VEAAsgnmStngMixDAO.selectList_VEAIMT_2 */
|
||||
/* VEAAsgnmStngMixDAO.selectList_VEAIMT_2 신청회차나 년도에 관계없이 실재 해당 년월의 배정가능한 차시를 계산한다. */
|
||||
|
||||
SELECT
|
||||
sum(b.chasi) AS chasi
|
||||
|
||||
FROM
|
||||
ve_edu_aplct a
|
||||
, ve_edu_chasi b
|
||||
WHERE 1=1
|
||||
AND a.edu_aplct_ord =b.edu_aplct_ord
|
||||
AND NVL(a.USE_YN, 'Y') <![CDATA[ <> ]]> 'N'
|
||||
AND a.LCTR_DIV_CD = '10'
|
||||
AND a.aprvl_cd = '60'
|
||||
AND substring(b.edu_hope_dt,1,7)=#mnt#
|
||||
GROUP BY substring(b.edu_hope_dt,1,7)
|
||||
|
||||
</select>
|
||||
|
||||
<!-- 강사 월별 시수 관리 데이터 -->
|
||||
<select id="VEAAsgnmStngMixDAO.selectList_VEAIMT_2_bak" parameterClass="VEAStngVO" resultClass="int">
|
||||
/* VEAAsgnmStngMixDAO.selectList_VEAIMT_2_bak 신청회차나 년도에 관계없이 실재 해당 년월의 배정가능한 차시를 계산한다. */
|
||||
|
||||
SELECT
|
||||
/*
|
||||
@ -137,7 +157,6 @@
|
||||
GROUP BY substring(b.edu_hope_dt,1,7)
|
||||
|
||||
</select>
|
||||
|
||||
<!-- 강사별 월별 시수 관리 대상 강사 리스트 -->
|
||||
<select id="VEAAsgnmStngMixDAO.selectList_VEAIIMT_1" parameterClass="VEAStngVO" resultClass="VEAStngVO">
|
||||
/* VEAAsgnmStngMixDAO.selectList_VEAIIMT_1 */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user