文章目录
一、持久层
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 u
LEFT JOIN tb_dept AS d ON u.dept_id = d.id
LEFT JOIN tb_checkin AS ck ON u.id = ck.user_id AND ck.date = CURRENT_DATE
WHERE u.id = #{userId} AND u.status=1
</select>
<select id="searchCheckinDays" parameterType="int" resultType="long">
SELECT COUNT(*) AS count
FROM tb_checkin
WHERE user_id=#{userId}
</select>
<select id="searchWeekCheckin" parameterType="HashMap" resultType="HashMap">
SELECT
CAST(date AS CHAR) AS date,
IF(status=1,'正常','迟到') AS status
FROM tb_checkin
WHERE user_id=#{userId} AND date BETWEEN #{startDate} AND #{endDate}
</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_holidays
WHERE date BETWEEN #{startDate} AND #{endDate}
</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_workday
WHERE date BETWEEN #{startDate} AND #{endDate}
</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 = "";
//如果date1 < date2,返回数小于0,date1==date2返回0,date1 > date2 大于0
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=#{userId} AND status = 1
</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);
}
}
版权声明:本文为weixin_38380811原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。