2023-11-14 18:06 청소년 강사 자동 배정 수정

This commit is contained in:
myname 2023-11-14 18:07:03 +09:00
parent 09ca87f3f7
commit eca1f9b6bf
2 changed files with 60 additions and 33 deletions

View File

@ -640,39 +640,59 @@ public class CommonWebController {
System.out.println(s_addr);
//필수 조건
//step2-1.가능 강사중 월별 시수이상을 받지 않은자 & 해당 요일에 수업 가능한 강사 리스트()
VEAutoAsgnmVO vEAutoAsgnmVO = new VEAutoAsgnmVO();
vEAutoAsgnmVO.setEduHopeMnt(s_eduHopeDt.substring(5,7));
vEAutoAsgnmVO.setYr(s_eduHopeDt.substring(0,4));
vEAutoAsgnmVO.setInstrDiv("10"); //10-청소년, 20-성인
vEAutoAsgnmVO.setEduChasiOrd(tChasiInfo.getEduChasiOrd());
List<VEAutoAsgnmVO> vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrMntAsgnmtChasiList(vEAutoAsgnmVO);
//파라미터
VEAutoAsgnmVO vEAutoAsgnmVO = null;
//step2-2.희망 지역 강사 검색()
String s_user_id = "'aaa'";
for (int j=0;j<vEInstrAssiEduAplctVOList.size();j++) {
s_user_id = s_user_id + ",'" + vEInstrAssiEduAplctVOList.get(j).getUserId()+"'";
//대상 강사 리스트
List<VEAutoAsgnmVO> vEInstrAssiEduAplctVOList = null;
//필수 조건(월별시수제한, 요일, 희망지역)
{
//step2-1.가능 강사중 월별 시수이상을 받지 않은자 & 해당 요일에 수업 가능한 강사 리스트()
vEAutoAsgnmVO = new VEAutoAsgnmVO();
vEAutoAsgnmVO.setEduHopeMnt(s_eduHopeDt.substring(5,7));
vEAutoAsgnmVO.setYr(s_eduHopeDt.substring(0,4));
vEAutoAsgnmVO.setInstrDiv("10"); //10-청소년, 20-성인
vEAutoAsgnmVO.setEduChasiOrd(tChasiInfo.getEduChasiOrd());
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrMntAsgnmtChasiList(vEAutoAsgnmVO);
//step2-2.희망 지역 강사 검색()
for (int j=0;j<vEInstrAssiEduAplctVOList.size();j++) {
s_user_id = s_user_id + ",'" + vEInstrAssiEduAplctVOList.get(j).getUserId()+"'";
}
if (!"'aaa'".equals(s_user_id)) { //대상 강사가 있을때만 다음을 실행한다.
vEAutoAsgnmVO.setUserIds(s_user_id);
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrHopeAreaList(vEAutoAsgnmVO);
}
}
vEAutoAsgnmVO.setUserIds(s_user_id);
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrHopeAreaList(vEAutoAsgnmVO);
//step2-3.연강가능강사검색(선택)
//step2-4.패널티 없는 강사 검색(선택)
//우선순위
//step3-1.월별시수대비할당이적은자 우선()
s_user_id = "'aaa'";
for (int j=0;j<vEInstrAssiEduAplctVOList.size();j++) {
s_user_id = s_user_id + ",'" + vEInstrAssiEduAplctVOList.get(j).getUserId()+"'";
}
vEAutoAsgnmVO.setUserIds(s_user_id);
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrPriorityList(vEAutoAsgnmVO);
//step3-2.거주기 강사 우선=>거주지별 배정 비율 필터(선택)
//강사배정
//우선순위
{
//step3-1.거주지 강사 우선(월별배정 비율 적용)
//step3-2.연강가능여부(같은날 연강은 연강강사가 우선 배정)
//step3-3.패널티(패널티 없는 사람이 우선순위 높게)
//step3-4.월별시수대비할당이적은자 우선()
s_user_id = "'aaa'";
for (int j=0;j<vEInstrAssiEduAplctVOList.size();j++) {
s_user_id = s_user_id + ",'" + vEInstrAssiEduAplctVOList.get(j).getUserId()+"'";
}
if (!"'aaa'".equals(s_user_id)) { //대상 강사가 있을때만 다음을 실행한다.
vEAutoAsgnmVO.setUserIds(s_user_id);
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrPriorityList(vEAutoAsgnmVO);
}
}
//강사배정-대상 강사가 있어야 강사를 할당한다.
if (vEInstrAssiEduAplctVOList.size()>0) {
VEInstrAsgnmVO p_vEInstrAsgnmVO = new VEInstrAsgnmVO();
p_vEInstrAsgnmVO.setEduAplctOrd(tChasiInfo.getEduAplctOrd());

View File

@ -575,12 +575,15 @@
/* VEAutoAsgnmDAO.selectInstrPriorityList */
SELECT
aaa.userId
aaa.user_id AS userId
, aaa.instrSumChasi
, aaa.asgnmTm
, rownum
FROM (
SELECT bb.*
SELECT
aa.user_id
, bb.userId
, bb.instrSumChasi
, NVL(
CASE
@ -603,7 +606,8 @@
AS asgnmTm
FROM vea_instr_indvd_mnt_tm aa
,(
LEFT OUTER JOIN
(
/* 강사에게 교육이 할당(확정, 반려, 요청전, 요첮우 모두 포함)된 차시수 */
SELECT d.user_id AS userId,
SUM(NVL(b.chasi, 0)) AS instrSumChasi
@ -625,9 +629,12 @@
GROUP BY d.user_id
)bb
on(
1=1
AND aa.user_id=bb.userId
)
WHERE aa.yr=#yr#
AND aa.user_id IN ($userIds$)
AND aa.USER_ID =bb.userId
AND aa.user_id IN ($userIds$)
)aaa
ORDER BY aaa.instrSumChasi*10000/(aaa.asgnmTm+1) asc
</select>