文章目录 一、持久层 1、CheckinMapper.xml 2、CheckinMapper.java 3、TbHolidaysDao.xml 4、TbHolidaysDao.java 5、TbWorkdayDao.xml 6、TbWorkdayDao.java 二、业务层 三、conroller层 1、编写 TbUserDao.xml 文件,查询员工的入职日期。 2、编写 TbUserDao.java 接口,定义抽象方法。 3、在 UserService.java 4、实现查询考勤结果的Web方法
一、持久层
1、CheckinMapper.xml
< select id= "searchTodayCheckin" parameterType= "int" resultType= "HashMap" > SELECT u. name, u. photo, d. dept_name AS deptName, ck. address, CASE WHEN ck. status = 1 THEN '正常' WHEN ck. status = 2 THEN '迟到' END AS status , DATE_FORMAT( ck. create_time, '%H:%i' ) AS checkinTime, ck. date FROM tb_user AS uLEFT JOIN tb_dept AS d ON u. dept_id = d. idLEFT JOIN tb_checkin AS ck ON u. id = ck. user_id AND ck. date = CURRENT_DATE WHERE u. id = < / select > < select id= "searchCheckinDays" parameterType= "int" resultType= "long" > SELECT COUNT ( * ) AS countFROM tb_checkinWHERE user_id= < / select > < select id= "searchWeekCheckin" parameterType= "HashMap" resultType= "HashMap" > SELECT CAST( date AS CHAR ) AS date , IF ( status = 1 , '正常' , '迟到' ) AS status FROM tb_checkinWHERE user_id= < / select >
2、CheckinMapper.java
@Mapper
public interface TbCheckinDao { public HashMap searchTodayCheckin ( int userId) ; public long searchCheckinDays ( int userId) ; public ArrayList < HashMap > searchWeekCheckin ( HashMap param) ; }
3、TbHolidaysDao.xml
< select id= "searchHolidaysInRange" parameterType= "HashMap" resultType= "String" > SELECT date FROM tb_holidaysWHERE date BETWEEN < / select >
4、TbHolidaysDao.java
public interface TbHolidaysDao {
……public ArrayList < String > searchHolidaysInRange ( HashMap param) ; }
5、TbWorkdayDao.xml
< select id= "searchWorkdayInRange" parameterType= "HashMap" resultType= "String" > SELECT date FROM tb_workdayWHERE date BETWEEN < / select >
6、TbWorkdayDao.java
public interface TbWorkdayDao { ……
public ArrayList < String > searchWorkdayInRange ( HashMap param) ;
}
二、业务层
1、 CheckinService.java
public class CheckinServiceImpl { ……public HashMap searchTodayCheckin ( int userId) { HashMap map = checkinDao. searchTodayCheckin ( userId) ; return map; } public long searchCheckinDays ( int userId) { long days = checkinDao. searchCheckinDays ( userId) ; return days; } public ArrayList < HashMap > searchWeekCheckin ( HashMap param) { ArrayList < HashMap > checkinList = checkinDao. searchWeekCheckin ( param) ; ArrayList < String > holidaysList = holidaysDao. searchHolidaysInRange ( param) ; ArrayList < String > workdayList = workdayDao. searchWorkdayInRange ( param) ; DateTime startDate = DateUtil . parseDate ( param. get ( "startDate" ) . toString ( ) ) ; DateTime endDate = DateUtil . parseDate ( param. get ( "endDate" ) . toString ( ) ) ; DateRange range = DateUtil . range ( startDate, endDate, DateField . DAY_OF_MONTH ) ; ArrayList list = new ArrayList ( ) ; range. forEach ( one -> { String date = one. toString ( "yyyy-MM-dd" ) ; String type = "工作日" ; if ( one. isWeekend ( ) ) { type = "节假日" ; } if ( holidaysList != null && holidaysList. contains ( date) ) { type = "节假日" ; } else if ( workdayList != null && workdayList. contains ( date) ) { type = "工作日" ; } String status = "" ; if ( type. equals ( "工作日" ) && DateUtil . compare ( one, DateUtil . date ( ) ) <= 0 ) { status = "缺勤" ; boolean flag= false ; for ( HashMap < String , String > map : checkinList) { if ( map. containsValue ( date) ) { status = map. get ( "status" ) ; flag= true ; break ; } DateTime endTime= DateUtil . parse ( DateUtil . today ( ) + "" + constants. attendanceEndTime) ; String today= DateUtil . today ( ) ; if ( date. equals ( today) && DateUtil . date ( ) . isBefore ( endTime) && flag== false )
{ status= "" ; } } } HashMap map = new HashMap ( ) ; map. put ( "date" , date) ; map. put ( "status" , status) ; map. put ( "type" , type) ; map. put ( "day" , one. dayOfWeekEnum ( ) . toChinese ( "周" ) ) ; list. add ( map) ; } ) ; return list; } }
三、conroller层
1、编写 TbUserDao.xml 文件,查询员工的入职日期。
< select id= "searchUserHiredate" parameterType= "int" resultType= "String" > SELECT hiredate FROM tb_user WHERE id=
< / select >
2、编写 TbUserDao.java 接口,定义抽象方法。
public interface TbUserDao { ……public String searchUserHiredate ( int userId) ; }
3、在 UserService.java
public class UserServiceImpl implements UserService { ……@Override public String searchUserHiredate ( int userId) { String hiredate = userDao. searchUserHiredate ( userId) ; return hiredate; } }
4、实现查询考勤结果的Web方法
public class CheckinController { ……@Autowired private UserService userService; @Autowired private SystemConstants constants; @GetMapping ( "/searchTodayCheckin" ) @ApiOperation ( "查询用户当日签到数据" ) public Result searchTodayCheckin ( @RequestHeader ( "token" ) String token) { int userId = jwtUtil. getUserId ( token) ; HashMap map = checkinService. searchTodayCheckin ( userId) ; map. put ( "attendanceTime" , constants. attendanceTime) ; map. put ( "closingTime" , constants. closingTime) ; long days = checkinService. searchCheckinDays ( userId) ; map. put ( "checkinDays" , days) ; DateTime hiredate = DateUtil . parse ( userService. searchUserHiredate ( userId) ) ; DateTime startDate = DateUtil . beginOfWeek ( DateUtil . date ( ) ) ; if ( startDate. isBefore ( hiredate) ) { startDate = hiredate; } DateTime endDate = DateUtil . endOfWeek ( DateUtil . date ( ) ) ; HashMap param = new HashMap ( ) ; param. put ( "startDate" , startDate. toString ( ) ) ; param. put ( "endDate" , endDate. toString ( ) ) ; param. put ( "userId" , userId) ; ArrayList < HashMap > list = checkinService. searchWeekCheckin ( param) ; map. put ( "weekCheckin" , list) ; return Result . ok ( ) . put ( "result" , map) ; } }