출퇴근

This commit is contained in:
yoon 2025-03-13 12:13:31 +09:00
parent 1c42e51664
commit d0f9cefa80
9 changed files with 198 additions and 43 deletions

View File

@ -18,6 +18,8 @@ package io.company.localhost.controller.api;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -51,14 +53,63 @@ public class CommutersController {
}
/**
* 출퇴근 당일 조회
* 퇴근 업데이트
*
* @param map
* @return
*
*/
@PatchMapping("/updateLve")
public ApiResponse<Boolean> updateLeaveTime(@ReqMap MapDto map) {
boolean isLeaveTime = commutersService.updateLeaveTime(map);
return ApiResponse.ok(isLeaveTime);
}
/**
* 현재 달의 모든 출근 정보 조회
*
* @param map
* @return
*/
@GetMapping("/today")
public ApiResponse<List<MapDto>> selectTodayCommuter(int memberSeq) {
return ApiResponse.ok(commutersService.selectTodayCommuter(memberSeq));
@GetMapping("/month")
public ApiResponse<List<MapDto>> selectCommutersByMonth(int year, int month) {
return ApiResponse.ok(commutersService.selectCommutersByMonth(year, month));
}
/**
* 오늘 사용자의 출근 정보 조회
*
* @param map
* @return
*/
@GetMapping("/today/{memberSeq}")
public ApiResponse<List<MapDto>> selectTodayCommuterInfo(@PathVariable Integer memberSeq) {
return ApiResponse.ok(commutersService.selectTodayCommuterInfo(memberSeq));
}
/**
* 오늘 출근 모든 사용자 조회
*
* @param map
* @return
*/
@GetMapping("/todays")
public ApiResponse<List<MapDto>> selectTodayCommuter() {
return ApiResponse.ok(commutersService.selectTodayCommuter());
}
/**
* 출근 프로젝트 업데이트
*
* @param map
* @return
*
*/
@PatchMapping("/update")
public ApiResponse<Boolean> updateCommuterProject(@ReqMap MapDto map) {
boolean isCommuter = commutersService.updateCommuterProject(map);
return ApiResponse.ok(isCommuter);
}
}

View File

@ -27,6 +27,14 @@ public interface CommutersMapper {
int updateLeaveTime(MapDto map);
List<MapDto> selectTodayCommuter(int memberSeq);
List<MapDto> selectCommutersByMonth(int year, int month);
List<MapDto> selectTodayCommuterInfo(Integer memberSeq);
List<MapDto> selectTodayCommuter();
int updateCommuterProject(MapDto map);
int deleteCommuters(MapDto map);
}

View File

@ -32,4 +32,5 @@ public interface NetprojctMapper {
List<MapDto> selectProjectLog(int projctSeq);
int deleteProject(MapDto map);
}

View File

@ -33,4 +33,6 @@ public interface PromemberMapper {
List<MapDto> selectMemberProjects(int memberSeq);
int deletePromember(MapDto map);
}

View File

@ -15,17 +15,13 @@
package io.company.localhost.service;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import io.company.localhost.common.annotation.ReqMap;
import io.company.localhost.common.dto.MapDto;
import io.company.localhost.mapper.CommutersMapper;
import io.company.localhost.mapper.NetprojctMapper;
import io.company.localhost.mapper.PromemberMapper;
import io.company.localhost.mapper.commoncodMapper;
import lombok.RequiredArgsConstructor;
@Service
@ -42,6 +38,8 @@ public class CommutersService {
*/
public int insertCommuters(MapDto map) {
map.put("commutDay", LocalDateTime.now());
map.put("commutCme", LocalTime.now());
int result = commutersMapper.insertCommuters(map);
return result;
@ -52,21 +50,58 @@ public class CommutersService {
* @param map
* @return
*/
// public List<MapDto> updateLeaveTime(MapDto map) {
//
//
// return ;
// }
//
public boolean updateLeaveTime(MapDto map) {
/**
* 당일 출근 기록 조회
* @param memberSeq 사용자 번호
* @return 당일 출근 정보
*/
public List<MapDto> selectTodayCommuter(int memberSeq) {
return commutersMapper.selectTodayCommuter(memberSeq);
if(map.get("commutLve") != null) {
map.put("commutLve", null);
} else {
map.put("commutLve", LocalTime.now());
}
return commutersMapper.updateLeaveTime(map) > 0;
}
/**
* 현재 달의 모든 출근 정보 조회
*
* @param year, month
* @return
*/
public List<MapDto> selectCommutersByMonth(int year, int month) {
return commutersMapper.selectCommutersByMonth(year, month);
}
/**
* 오늘 사용자 출근 정보 조회
*
* @param memberSeq
* @return
*/
public List<MapDto> selectTodayCommuterInfo(Integer memberSeq) {
return commutersMapper.selectTodayCommuterInfo(memberSeq);
}
/**
* 오늘 출근 모든 사용자 조회
*
* @param
* @return
*/
public List<MapDto> selectTodayCommuter() {
return commutersMapper.selectTodayCommuter();
}
/**
* 출근 프로젝트 업데이트
*
* @param map
* @return
*/
public boolean updateCommuterProject(MapDto map) {
return commutersMapper.updateCommuterProject(map) > 0;
}
}

View File

@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
import io.company.localhost.common.annotation.ReqMap;
import io.company.localhost.common.dto.MapDto;
import io.company.localhost.mapper.CommutersMapper;
import io.company.localhost.mapper.NetprojctMapper;
import io.company.localhost.mapper.PromemberMapper;
import io.company.localhost.mapper.commoncodMapper;
@ -33,6 +34,7 @@ public class NetprojctService {
private final commoncodMapper commoncodMapper;
private final NetprojctMapper netprojctMapper;
private final PromemberMapper promemberMapper;
private final CommutersMapper commutersMapper;
/**
@ -123,6 +125,10 @@ public class NetprojctService {
*/
public boolean deleteProject(MapDto map) {
promemberMapper.deletePromember(map);
commutersMapper.deleteCommuters(map);
boolean result = netprojctMapper.deleteProject(map) > 0;
Integer color = map.getInt("projctCol");

View File

@ -6,38 +6,83 @@
<insert id="insertCommuters" useGeneratedKeys="true" keyProperty="COMMUTSEQ">
INSERT INTO commuters (
COMMUTSEQ,
MRMBERSEQ,
MEMBERSEQ,
PROJCTSEQ,
COMMUTCMT,
COMMUTLVT,
COMMUTLVE,
COMMUTDAY,
COMMUTARR
) VALUES (
#{commutSeq},
#{memberSeq},
#{projctSeq},
#{commutCmt},
#{commutLvt},
#{commutCme},
#{commutLve},
#{commutDay},
#{commutArr}
)
</insert>
<!-- 퇴근 시간 업데이트 -->
<update id="updateLeaveTime" parameterType="map">
<update id="updateLeaveTime">
UPDATE commuters
SET COMMUTLVT = #{commutLvt}
WHERE MRMBERSEQ = #{memberSeq}
SET COMMUTLVE = #{commutLve}
WHERE MEMBERSEQ = #{memberSeq}
AND COMMUTDAY = CURDATE()
</update>
<!-- 당일 출근 기록 조회 -->
<select id="selectTodayCommuter" parameterType="int" resultType="map">
SELECT c.*, p.PROJCTNAM, p.projctcolor
<!-- 현재 달의 모든 출근 정보 조회 -->
<select id="selectCommutersByMonth" parameterType="map" resultType="map">
SELECT
c.COMMUTSEQ,
c.MEMBERSEQ,
c.PROJCTSEQ,
c.COMMUTCMT,
c.COMMUTLVE,
c.COMMUTDAY,
c.COMMUTARR,
m.MEMBERNAM as memberName,
m.MEMBERPRF as profile,
p.PROJCTNAM,
cc.CMNCODNAM AS projctcolor
FROM
commuters c
JOIN
netmember m ON c.MEMBERSEQ = m.MEMBERSEQ
JOIN
netprojct p ON c.PROJCTSEQ = p.PROJCTSEQ
LEFT JOIN commoncod cc ON p.PROJCTCOL = cc.CMNCODVAL AND cc.CMNCODYNP = '1'
WHERE
YEAR(c.COMMUTDAY) = #{year}
AND MONTH(c.COMMUTDAY) = #{month}
</select>
<!-- 사용자 오늘 출근 정보 조회 -->
<select id="selectTodayCommuterInfo" parameterType="Integer" resultType="map">
SELECT c.COMMUTCMT, c.COMMUTLVE
FROM commuters c
LEFT JOIN project p ON c.PROJCTSEQ = p.PROJCTSEQ
WHERE c.MRMBERSEQ = #{memberSeq}
WHERE c.MEMBERSEQ = #{memberSeq}
AND c.COMMUTDAY = CURDATE()
</select>
<!-- 오늘 출근 모든 사용자 조회 -->
<select id="selectTodayCommuter">
SELECT c.COMMUTCMT, m.MEMBERSEQ, m.MEMBERPRF as profile, p.PROJCTNAM
FROM commuters c
JOIN netmember m ON c.MEMBERSEQ = m.MEMBERSEQ
JOIN netprojct p ON c.PROJCTSEQ = p.PROJCTSEQ
WHERE c.COMMUTDAY = CURDATE()
</select>
<!-- 출근 프로젝트 업데이트 -->
<update id="updateCommuterProject">
UPDATE commuters
SET PROJCTSEQ = #{projctSeq}
WHERE MEMBERSEQ = #{memberSeq}
AND COMMUTDAY = CURDATE()
</update>
<delete id="deleteCommuters" parameterType="int">
DELETE FROM commuters WHERE PROJCTSEQ = #{projctSeq}
</delete>
</mapper>

View File

@ -30,6 +30,9 @@
<if test="category != null and category != ''">
AND SUBSTRING(p.PROJCTSTR, 1, 4) = #{category}
</if>
<if test="excludeEnded != null and excludeEnded == 'true'">
AND (p.PROJCTEND IS NULL OR p.PROJCTEND > CURDATE())
</if>
ORDER BY p.PROJCTSTR DESC
</select>
@ -105,7 +108,7 @@
</select>
<!-- 프로젝트 삭제 -->
<delete id="deleteProject">
<delete id="deleteProject" parameterType="int">
DELETE FROM netprojct WHERE PROJCTSEQ = #{projctSeq}
</delete>

View File

@ -47,4 +47,8 @@
ORDER BY p.PROJCTSTR DESC
</select>
<delete id="deletePromember" parameterType="int">
DELETE FROM promember WHERE PROJCTSEQ = #{projctSeq}
</delete>
</mapper>