근태 관리 목록 조회시 1번의 쿼리로 조회되게 변경

This commit is contained in:
2026-02-24 17:17:21 +09:00
parent befcd92f2b
commit 23f59a4894
3 changed files with 854 additions and 724 deletions

View File

@@ -67,6 +67,21 @@ public class WebAttendanceSqlMapDAO extends SqlSessionDaoSupport{
return getSqlSession().selectList(sqlId, paramMap);
}
/**
* 근태관리 정보 - 날짜별,직원 근태 전체 조회(최적화용) (List)
*
* @param Map
* @return
* @throws DataAccessException
*/
public List<Map<String, Object>> selectListAttendanceAll(HashMap<String, Object> paramMap)
throws DataAccessException {
logger.debug("WebAttendanceSqlMapDAO selectListAttendanceAll START");
String sqlId = "WebAttendance.selectListAttendanceAll";
logger.debug("WebAttendanceSqlMapDAO selectListAttendanceAll END");
return getSqlSession().selectList(sqlId, paramMap);
}
/**
* 근태관리 정보 - 해당 날짜 등록여부 조회 (List)
*

View File

@@ -87,8 +87,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -100,7 +99,8 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
int authMenuRelationlistMapSize = authMenuRelationlistMap.size();
if (1 == authMenuRelationlistMapSize) {
@@ -112,14 +112,12 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("updateUseYn", authMenuRelationlistMap.get(0).get("updateUseYn"));
map.put("deleteUseYn", authMenuRelationlistMap.get(0).get("deleteUseYn"));
map.put("downloadUseYn", authMenuRelationlistMap.get(0).get("downloadUseYn"));
}
else {
} else {
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
}
}
}
catch(Exception e){
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -166,8 +164,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -179,20 +176,19 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
if (1 == authMenuRelationlistMap.size()) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("selectUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "조회 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -208,6 +204,19 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
// 날짜 조회
List<Map<String, Object>> dateListMap = webAttendanceSqlMapDAO.selectListAttendanceDate(paramMap);
// N+1 문제 해결을 위한 월간 전체 근태 내역 1회 조회 후 멤버별 인메모리 매핑
List<Map<String, Object>> allAttendanceList = webAttendanceSqlMapDAO.selectListAttendanceAll(paramMap);
Map<String, List<Map<String, Object>>> attendanceByMember = new HashMap<String, List<Map<String, Object>>>();
if (allAttendanceList != null) {
for (Map<String, Object> record : allAttendanceList) {
String memberId = String.valueOf(record.get("muMemberId"));
if (!attendanceByMember.containsKey(memberId)) {
attendanceByMember.put(memberId, new ArrayList<Map<String, Object>>());
}
attendanceByMember.get(memberId).add(record);
}
}
for (int j = 0; j < memberListMap.size(); j++) {
String muMemberId = String.valueOf(memberListMap.get(j).get("muMemberId"));
String memberName = String.valueOf(memberListMap.get(j).get("memberName"));
@@ -217,19 +226,23 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
paramMap.put("muGroupId", muGroupId);
paramMap.put("muDutyId", muDutyId);
List<Map<String, Object>> memberAllRecords = attendanceByMember.containsKey(muMemberId)
? attendanceByMember.get(muMemberId)
: new ArrayList<Map<String, Object>>();
for (int i = 0; i < dateListMap.size(); i++) {
Map<String, Object> addResultMap = new HashMap<String, Object>();
String searchDate = String.valueOf(dateListMap.get(i).get("resultDate"));
paramMap.put("searchDate", searchDate);
// 근태 내역 조회
List<Map<String, Object>> attendanceListMap = webAttendanceSqlMapDAO.selectListAttendance(paramMap);
// 근태 내역 메모리 기반 조립
List<Map<String, Object>> attendanceListMap = buildDailyAttendanceList(memberAllRecords,
muMemberId, searchDate);
if (attendanceListMap.size() > 0) {
addResultMap.put("attendanceListMap", attendanceListMap);
}
else {
} else {
addResultMap.put("attendanceListMap", null);
}
addResultMap.put("muGroupId", muGroupId);
@@ -249,8 +262,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("memberRows", memberListMap);
map.put("rows", listMap);
}
}
catch(Exception e){
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -299,8 +311,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -312,20 +323,19 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
if (1 == authMenuRelationlistMap.size()) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("downloadUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "내려받기 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -341,6 +351,19 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
// 날짜 조회
List<Map<String, Object>> dateListMap = webAttendanceSqlMapDAO.selectListAttendanceDate(paramMap);
// N+1 문제 해결을 위한 월간 전체 근태 내역 1회 조회 후 멤버별 인메모리 매핑
List<Map<String, Object>> allAttendanceList = webAttendanceSqlMapDAO.selectListAttendanceAll(paramMap);
Map<String, List<Map<String, Object>>> attendanceByMember = new HashMap<String, List<Map<String, Object>>>();
if (allAttendanceList != null) {
for (Map<String, Object> record : allAttendanceList) {
String memberId = String.valueOf(record.get("muMemberId"));
if (!attendanceByMember.containsKey(memberId)) {
attendanceByMember.put(memberId, new ArrayList<Map<String, Object>>());
}
attendanceByMember.get(memberId).add(record);
}
}
for (int j = 0; j < memberListMap.size(); j++) {
String muMemberId = String.valueOf(memberListMap.get(j).get("muMemberId"));
String memberName = String.valueOf(memberListMap.get(j).get("memberName"));
@@ -350,19 +373,23 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
paramMap.put("muGroupId", muGroupId);
paramMap.put("muDutyId", muDutyId);
List<Map<String, Object>> memberAllRecords = attendanceByMember.containsKey(muMemberId)
? attendanceByMember.get(muMemberId)
: new ArrayList<Map<String, Object>>();
for (int i = 0; i < dateListMap.size(); i++) {
Map<String, Object> addResultMap = new HashMap<String, Object>();
String searchDate = String.valueOf(dateListMap.get(i).get("resultDate"));
paramMap.put("searchDate", searchDate);
// 근태 내역 조회
List<Map<String, Object>> attendanceListMap = webAttendanceSqlMapDAO.selectListAttendance(paramMap);
// 근태 내역 메모리 기반 조립
List<Map<String, Object>> attendanceListMap = buildDailyAttendanceList(memberAllRecords,
muMemberId, searchDate);
if (attendanceListMap.size() > 0) {
addResultMap.put("attendanceListMap", attendanceListMap);
}
else {
} else {
addResultMap.put("attendanceListMap", null);
}
addResultMap.put("muGroupId", muGroupId);
@@ -383,8 +410,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("rows", listMap);
}
}
catch(Exception e){
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -393,6 +419,104 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
return map;
}
/**
* 전체 통계 메모리 내역상출 로직 (SQL UNION 변환기)
*/
private List<Map<String, Object>> buildDailyAttendanceList(List<Map<String, Object>> allList, String muMemberId,
String searchDate) {
List<Map<String, Object>> dailyList = new ArrayList<Map<String, Object>>();
Map<String, Object> commuteMap = null;
for (Map<String, Object> record : allList) {
String recMemberId = String.valueOf(record.get("muMemberId"));
String recStartDate = String.valueOf(record.get("startDate"));
String recEndDate = String.valueOf(record.get("endDate"));
if (recMemberId.equals(muMemberId) && searchDate.compareTo(recStartDate) >= 0
&& searchDate.compareTo(recEndDate) <= 0) {
String attType = String.valueOf(record.get("attendanceType"));
if ("A".equals(attType) || "B".equals(attType)) {
if (commuteMap == null) {
commuteMap = new HashMap<String, Object>();
commuteMap.put("muAttendanceId", null);
commuteMap.put("muMemberId", muMemberId);
commuteMap.put("attendanceType", "A"); // UI 출/퇴근 row는 원래 항상 'A'로 내려감 (SQL과 동일)
commuteMap.put("searchDate", searchDate);
commuteMap.put("startTime", "-");
commuteMap.put("muAttendanceId2", null);
commuteMap.put("endTime", "-");
commuteMap.put("totalWorkHour", "-");
commuteMap.put("muVacationId", "");
commuteMap.put("vacationName", "");
}
if ("A".equals(attType)) {
commuteMap.put("muAttendanceId", record.get("muAttendanceId"));
commuteMap.put("startTime",
record.get("attendanceTime") != null && !"".equals(record.get("attendanceTime"))
? record.get("attendanceTime")
: "-");
} else if ("B".equals(attType)) {
commuteMap.put("muAttendanceId2", record.get("muAttendanceId"));
commuteMap.put("endTime",
record.get("attendanceTime") != null && !"".equals(record.get("attendanceTime"))
? record.get("attendanceTime")
: "-");
}
} else if ("C".equals(attType)) {
Map<String, Object> cMap = new HashMap<String, Object>();
cMap.put("muAttendanceId", record.get("muAttendanceId"));
cMap.put("muMemberId", muMemberId);
cMap.put("attendanceType", "C");
cMap.put("searchDate", searchDate);
cMap.put("startTime", "");
cMap.put("muAttendanceId2", "");
cMap.put("endTime", "");
cMap.put("totalWorkHour", "");
cMap.put("muVacationId", "");
cMap.put("vacationName", "");
dailyList.add(cMap);
} else if ("D".equals(attType) || "E".equals(attType)) {
Map<String, Object> vMap = new HashMap<String, Object>();
vMap.put("muAttendanceId", record.get("muAttendanceId"));
vMap.put("muMemberId", muMemberId);
vMap.put("attendanceType", attType);
vMap.put("searchDate", searchDate);
vMap.put("startTime", record.get("startTime") != null ? record.get("startTime") : "");
vMap.put("muAttendanceId2", "");
vMap.put("endTime", record.get("endTime") != null ? record.get("endTime") : "");
vMap.put("totalWorkHour", "");
vMap.put("muVacationId", record.get("muVacationId"));
vMap.put("vacationName", record.get("vacationName"));
dailyList.add(vMap);
}
}
}
if (commuteMap != null) {
String sTime = String.valueOf(commuteMap.get("startTime"));
String eTime = String.valueOf(commuteMap.get("endTime"));
if (!"-".equals(sTime) && !"-".equals(eTime) && sTime != null && eTime != null && !"null".equals(sTime)
&& !"null".equals(eTime)) {
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("HH:mm");
java.util.Date d1 = sdf.parse(sTime);
java.util.Date d2 = sdf.parse(eTime);
long diff = d2.getTime() - d1.getTime();
if (diff < 0)
diff += 24 * 60 * 60 * 1000;
long hours = diff / (60 * 60 * 1000);
long minutes = (diff / (60 * 1000)) % 60;
commuteMap.put("totalWorkHour", String.format("%02d시간%02d분", hours, minutes));
} catch (Exception e) {
}
}
dailyList.add(0, commuteMap); // 출근 기록을 리눅스결과 제일 상단에 위치시킴 (UNION 순서)
}
return dailyList;
}
/**
* 금일 근무현황 리스트 조회
*
@@ -422,8 +546,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -435,20 +558,19 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
if (1 == authMenuRelationlistMap.size()) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("selectUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "조회 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -462,8 +584,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("success", "true");
map.put("rows", listMap);
}
}
catch(Exception e){
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -522,14 +643,12 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "근태유형 정보가 없습니다.");
}
else {
} else {
if (("C").equals(attendanceType)) {
// 휴무일경우
attendanceTime = null;
paramMap.put("attendanceTime", null);
}
else {
} else {
if (true != ValidationCheckUtil.emptyCheck(attendanceTime)) {
check = false;
map.put("msgCode", Constants.FAIL);
@@ -557,8 +676,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -570,21 +688,20 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
int authMenuRelationlistMapSize = authMenuRelationlistMap.size();
if (1 == authMenuRelationlistMapSize) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("insertUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "등록 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -599,8 +716,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == memberListMapSize) {
paramMap.put("muGroupId", memberListMap.get(0).get("muGroupId"));
paramMap.put("muDutyId", memberListMap.get(0).get("muDutyId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "직원 정보가 올바르지 않습니다.");
@@ -610,12 +726,12 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (true == check) {
// 겹치는 일자 안 들어가도록 조회
List<Map<String, Object>> attendanceListMap = webAttendanceSqlMapDAO.selectAttendanceDate(paramMap);
int attendanceListMapSize = Integer.parseInt(String.valueOf(attendanceListMap.get(0).get("totalCount")));
int attendanceListMapSize = Integer
.parseInt(String.valueOf(attendanceListMap.get(0).get("totalCount")));
if (0 == attendanceListMapSize) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "이미 등록된 근태정보가 있습니다.");
@@ -657,8 +773,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("msgCode", Constants.OK);
map.put("msgDesc", "등록되었습니다.");
}
}
catch (Exception e) {
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -695,7 +810,8 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
String muAttendanceId = String.valueOf(paramMap.get("muAttendanceId"));
String muAttendanceId2 = String.valueOf(paramMap.get("muAttendanceId2"));
if(true != ValidationCheckUtil.emptyCheck(muAttendanceId) && true != ValidationCheckUtil.emptyCheck(muAttendanceId2)){
if (true != ValidationCheckUtil.emptyCheck(muAttendanceId)
&& true != ValidationCheckUtil.emptyCheck(muAttendanceId2)) {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "근태 정보가 없습니다.");
@@ -708,8 +824,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -721,20 +836,19 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
if (1 == authMenuRelationlistMap.size()) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("selectUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "조회 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -749,8 +863,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("rows", listMap);
}
}
catch(Exception e){
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -803,7 +916,8 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
LocalTime fommat_startTime = LocalTime.parse(startTime, formatter);
LocalTime fommat_endTime = LocalTime.parse(endTime, formatter);
if(true != ValidationCheckUtil.emptyCheck(muAttendanceId) && true != ValidationCheckUtil.emptyCheck(muAttendanceId2)){
if (true != ValidationCheckUtil.emptyCheck(muAttendanceId)
&& true != ValidationCheckUtil.emptyCheck(muAttendanceId2)) {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "근태 정보가 없습니다.");
@@ -844,8 +958,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -857,21 +970,20 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
int authMenuRelationlistMapSize = authMenuRelationlistMap.size();
if (1 == authMenuRelationlistMapSize) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("updateUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "수정 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -886,8 +998,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == memberListMapSize) {
paramMap.put("muGroupId", memberListMap.get(0).get("muGroupId"));
paramMap.put("muDutyId", memberListMap.get(0).get("muDutyId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "직원 정보가 올바르지 않습니다.");
@@ -907,8 +1018,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
paramMap.put("endDate", attendanceDate);
paramMap.put("attendanceTime", startTime);
webAttendanceSqlMapDAO.insertAttendance(paramMap);
}
else {
} else {
paramMap.put("muAttendanceId", muAttendanceId);
paramMap.put("attendanceTime", startTime);
webAttendanceSqlMapDAO.updateAttendanceCommute(paramMap);
@@ -923,8 +1033,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
paramMap.put("endDate", attendanceDate);
paramMap.put("attendanceTime", endTime);
webAttendanceSqlMapDAO.insertAttendance(paramMap);
}
else {
} else {
paramMap.put("muAttendanceId", muAttendanceId2);
paramMap.put("attendanceTime", endTime);
webAttendanceSqlMapDAO.updateAttendanceCommute(paramMap);
@@ -934,8 +1043,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("msgDesc", "수정되었습니다.");
}
}
catch (Exception e) {
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -991,8 +1099,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -1003,20 +1110,19 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
if (1 == authMenuRelationlistMap.size()) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("selectUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "조회 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -1030,8 +1136,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("rows", listMap);
}
}
catch(Exception e){
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -1112,8 +1217,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -1125,21 +1229,20 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
int authMenuRelationlistMapSize = authMenuRelationlistMap.size();
if (1 == authMenuRelationlistMapSize) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("insertUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "등록 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -1154,8 +1257,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == memberListMapSize) {
paramMap.put("muGroupId", memberListMap.get(0).get("muGroupId"));
paramMap.put("muDutyId", memberListMap.get(0).get("muDutyId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "직원 정보가 올바르지 않습니다.");
@@ -1172,13 +1274,11 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (("A").equals(hourType)) {
paramMap.put("attendanceType", "D");
}
else {
} else {
// 반차
paramMap.put("attendanceType", "E");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "연차사용단위 정보가 없습니다.");
@@ -1188,12 +1288,12 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (true == check) {
// 겹치는 일자 안 들어가도록 조회
List<Map<String, Object>> attendanceListMap = webAttendanceSqlMapDAO.selectAttendanceDate(paramMap);
int attendanceListMapSize = Integer.parseInt(String.valueOf(attendanceListMap.get(0).get("totalCount")));
int attendanceListMapSize = Integer
.parseInt(String.valueOf(attendanceListMap.get(0).get("totalCount")));
if (0 == attendanceListMapSize) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "이미 등록된 근태정보가 있습니다.");
@@ -1223,27 +1323,28 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (true == check) {
// 잔여 연차 확인
List<Map<String, Object>> vacationManagementListMap = webVacationManagementSqlMapDAO.selectVacationManagementLeftDays(paramMap);
List<Map<String, Object>> vacationManagementListMap = webVacationManagementSqlMapDAO
.selectVacationManagementLeftDays(paramMap);
int vacationManagementListMapListMapSize = vacationManagementListMap.size();
if (vacationManagementListMapListMapSize == 1) {
double leftDays = Double.parseDouble(String.valueOf(vacationManagementListMap.get(0).get("leftDays")));
double leftDays = Double
.parseDouble(String.valueOf(vacationManagementListMap.get(0).get("leftDays")));
double useDays = 0.5;
if ("D".equals(paramMap.get("attendanceType"))) {
useDays = getDateDays(startDate, endDate);
}
if (leftDays >= useDays) {
paramMap.put("muVacationManagementId", vacationManagementListMap.get(0).get("muVacationManagementId"));
paramMap.put("muVacationManagementId",
vacationManagementListMap.get(0).get("muVacationManagementId"));
paramMap.put("days", useDays);
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "잔여연차는 " + leftDays + "일 입니다. 연차기간을 확인해주세요.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "발행된 연차 정보가 없습니다. 관리자에게 문의하십시오.");
@@ -1267,8 +1368,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("msgCode", Constants.OK);
map.put("msgDesc", "등록되었습니다.");
}
}
catch (Exception e) {
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -1358,8 +1458,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -1371,21 +1470,20 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
int authMenuRelationlistMapSize = authMenuRelationlistMap.size();
if (1 == authMenuRelationlistMapSize) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("updateUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "수정 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -1402,13 +1500,11 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (("A").equals(hourType)) {
paramMap.put("attendanceType", "D");
}
else {
} else {
// 반차
paramMap.put("attendanceType", "E");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "연차사용단위 정보가 없습니다.");
@@ -1418,12 +1514,12 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (true == check) {
// 겹치는 일자 안 들어가도록 조회
List<Map<String, Object>> attendanceListMap = webAttendanceSqlMapDAO.selectAttendanceDate(paramMap);
int attendanceListMapSize = Integer.parseInt(String.valueOf(attendanceListMap.get(0).get("totalCount")));
int attendanceListMapSize = Integer
.parseInt(String.valueOf(attendanceListMap.get(0).get("totalCount")));
if (0 == attendanceListMapSize) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "이미 등록된 근태정보가 있습니다.");
@@ -1437,16 +1533,20 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == attendanceListMapSize) {
// 수정 전 데이터
String oldMuVacationManagementId = String.valueOf(attendanceListMap.get(0).get("muVacationManagementId"));
String oldMuVacationManagementId = String
.valueOf(attendanceListMap.get(0).get("muVacationManagementId"));
Double oldDays = Double.parseDouble(String.valueOf(attendanceListMap.get(0).get("days")));
// 발행된 연차 및 잔여 연차 확인
// 수정 시 기존연차와 남은 연차 합해서 확인
List<Map<String, Object>> vacationManagementListMap = webVacationManagementSqlMapDAO.selectVacationManagementLeftDays(paramMap);
List<Map<String, Object>> vacationManagementListMap = webVacationManagementSqlMapDAO
.selectVacationManagementLeftDays(paramMap);
int vacationManagementListMapListMapSize = vacationManagementListMap.size();
if (vacationManagementListMapListMapSize == 1) {
String muVacationManagementId = String.valueOf(vacationManagementListMap.get(0).get("muVacationManagementId"));
double leftDays = Double.parseDouble(String.valueOf(vacationManagementListMap.get(0).get("leftDays")));
String muVacationManagementId = String
.valueOf(vacationManagementListMap.get(0).get("muVacationManagementId"));
double leftDays = Double
.parseDouble(String.valueOf(vacationManagementListMap.get(0).get("leftDays")));
double useDays = 0.5;
if ("D".equals(paramMap.get("attendanceType"))) {
useDays = getDateDays(startDate, endDate);
@@ -1454,7 +1554,8 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if ((leftDays + oldDays) >= useDays) {
paramMap.put("muVacationManagementId", vacationManagementListMap.get(0).get("muVacationManagementId"));
paramMap.put("muVacationManagementId",
vacationManagementListMap.get(0).get("muVacationManagementId"));
paramMap.put("days", useDays);
webAttendanceSqlMapDAO.updateAttendanceVacation(paramMap);
@@ -1467,8 +1568,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
paramMap.put("days", useDays - oldDays);
paramMap.put("muVacationManagementId", muVacationManagementId);
webVacationManagementSqlMapDAO.updateVacationManagementLeftDays(paramMap);
}
else {
} else {
// 연차사용단위가 변경되었을 경우
// 1. 이전 남은연차 갯수 수정
paramMap.put("days", -oldDays);
@@ -1480,28 +1580,24 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
paramMap.put("muVacationManagementId", muVacationManagementId);
webVacationManagementSqlMapDAO.updateVacationManagementLeftDays(paramMap);
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "잔여연차가 없거나 부족합니다. 연차기간을 확인해주세요.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "발행된 연차 정보가 없습니다. 관리자에게 문의하십시오.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "연차 정보가 없습니다.");
}
}
}
catch (Exception e) {
} catch (Exception e) {
e.printStackTrace();
throw e;
}
@@ -1557,8 +1653,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (1 == userListMapSize) {
paramMap.put("menuClassAuthId", userListMap.get(0).get("muAuthId"));
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "사용자 정보가 올바르지 않습니다.");
@@ -1570,21 +1665,20 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
HashMap<String, Object> authCheckParamMap = new HashMap<String, Object>();
authCheckParamMap.put("menuClass", paramMap.get("menuClass"));
authCheckParamMap.put("muAuthId", paramMap.get("menuClassAuthId"));
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO.selectAuthMenuRelation(authCheckParamMap);
List<Map<String, Object>> authMenuRelationlistMap = webAuthMenuRelationSqlMapDAO
.selectAuthMenuRelation(authCheckParamMap);
int authMenuRelationlistMapSize = authMenuRelationlistMap.size();
if (1 == authMenuRelationlistMapSize) {
if (("Y").equals(authMenuRelationlistMap.get(0).get("updateUseYn"))) {
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "수정 권한 정보가 없습니다.");
}
}
else {
} else {
check = false;
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "권한 정보가 없습니다.");
@@ -1597,11 +1691,11 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
if (attendanceListMap.size() == 1) {
Double days = Double.parseDouble(String.valueOf(attendanceListMap.get(0).get("days")));
String muVacationManagementId = String.valueOf(attendanceListMap.get(0).get("muVacationManagementId"));
String muVacationManagementId = String
.valueOf(attendanceListMap.get(0).get("muVacationManagementId"));
String muMemberId = String.valueOf(attendanceListMap.get(0).get("muMemberId"));
String status = String.valueOf(attendanceListMap.get(0).get("status"));
if (("D").equals(status)) {
map.put("msgCode", Constants.FAIL);
map.put("msgDesc", "이미 취소된 연차입니다.");
@@ -1624,8 +1718,7 @@ public class WebAttendanceServiceImpl implements WebAttendanceService {
map.put("msgDesc", "휴무관리 정보가 없습니다.");
}
}
}
catch (Exception e) {
} catch (Exception e) {
e.printStackTrace();
throw e;
}

View File

@@ -76,6 +76,28 @@
ORDER BY MA.MEMBER_CODE ASC
</select>
<select id="selectListAttendanceAll" parameterType="hashmap" resultType="hashmap">
SELECT MA.MU_ATTENDANCE_ID AS "muAttendanceId"
,MA.MU_MEMBER_ID AS "muMemberId"
,MA.ATTENDANCE_TYPE AS "attendanceType"
,DATE_FORMAT(MA.START_DATE,'%Y-%m-%d') AS "startDate"
,DATE_FORMAT(MA.END_DATE,'%Y-%m-%d') AS "endDate"
,DATE_FORMAT(MA.ATTENDANCE_TIME, '%H:%i') AS "attendanceTime"
,DATE_FORMAT(MA.START_TIME, '%H:%i') AS "startTime"
,DATE_FORMAT(MA.END_TIME, '%H:%i') AS "endTime"
,MA.MU_VACATION_ID AS "muVacationId"
,IFNULL(MV.VACATION_NAME, '') AS "vacationName"
FROM MU_ATTENDANCE AS MA
LEFT JOIN MU_VACATION AS MV
ON MV.MU_VACATION_ID = MA.MU_VACATION_ID
AND MV.USE_YN = 'Y'
WHERE MA.USE_YN = 'Y'
AND MA.STATUS != 'D'
AND ((DATE_FORMAT(MA.START_DATE,'%Y-%m-%d') &lt;= #{attendanceSearchStartDate} AND DATE_FORMAT(MA.END_DATE,'%Y-%m-%d') &gt;= #{attendanceSearchStartDate})
OR (DATE_FORMAT(MA.START_DATE,'%Y-%m-%d') &lt;= #{attendanceSearchEndDate} AND DATE_FORMAT(MA.END_DATE,'%Y-%m-%d') &gt;= #{attendanceSearchEndDate})
OR (DATE_FORMAT(MA.START_DATE,'%Y-%m-%d') &gt; #{attendanceSearchStartDate} AND DATE_FORMAT(MA.END_DATE,'%Y-%m-%d') &lt; #{attendanceSearchEndDate}))
</select>
<select id="selectListAttendance" parameterType="hashmap" resultType="hashmap">
SELECT MAX(MU_ATTENDANCE_ID) AS "muAttendanceId"
,MA.MU_MEMBER_ID AS "muMemberId"