mirror of
https://github.com/FatttSnake/Pinnacle-OA.git
synced 2026-04-05 06:51:23 +08:00
commit 2023/05/06
This commit is contained in:
@@ -1,18 +1,112 @@
|
||||
package com.cfive.pinnacle.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.cfive.pinnacle.entity.Attendance;
|
||||
import com.cfive.pinnacle.entity.common.ResponseCode;
|
||||
import com.cfive.pinnacle.entity.common.ResponseResult;
|
||||
import com.cfive.pinnacle.service.IAttendanceService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 考勤 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author FatttSnake
|
||||
* @author gzw
|
||||
* @since 2023-04-30
|
||||
*/
|
||||
@CrossOrigin
|
||||
@RestController
|
||||
@RequestMapping("/attendance")
|
||||
public class AttendanceController {
|
||||
|
||||
@Autowired
|
||||
private IAttendanceService attendanceService;
|
||||
|
||||
|
||||
//查询所有考勤信息和用户名
|
||||
@GetMapping("findAllAttendance")
|
||||
public ResponseResult findAllAttendanceAndUser() {
|
||||
List<Attendance> attendances = attendanceService.getAllAttendanceAndUser();
|
||||
return ResponseResult.build(ResponseCode.DATABASE_SELECT_OK, "success", attendances);
|
||||
}
|
||||
|
||||
//模糊时间查询
|
||||
@GetMapping("/findAttendanceByTime")
|
||||
public ResponseResult findAttendanceAndUser(String startTime,String endTime) {
|
||||
List<Attendance> attendances = attendanceService.selectByTime(startTime, endTime);
|
||||
return ResponseResult.build(ResponseCode.DATABASE_SELECT_OK, "success", attendances);
|
||||
}
|
||||
//用户个人模糊时间查询
|
||||
@GetMapping("/findOneAttendanceByTime")
|
||||
public ResponseResult findOneAttendanceAndUser(String startTime,String endTime,Long userId) {
|
||||
List<Attendance> attendances = attendanceService.selectOneByTime(startTime, endTime,userId);
|
||||
return ResponseResult.build(ResponseCode.DATABASE_SELECT_OK, "success", attendances);
|
||||
}
|
||||
//添加或更新考勤信息
|
||||
@PostMapping("/saveAttendance")
|
||||
public ResponseResult saveAttendance(@RequestBody Attendance attendance) {
|
||||
attendance.setModifyId(1652714496280469506L);
|
||||
return attendanceService.saveOrUpdate(attendance) ? ResponseResult.build(ResponseCode.DATABASE_SAVE_OK, "success", attendance) :
|
||||
ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "error", null);
|
||||
|
||||
}
|
||||
|
||||
//个人签到
|
||||
@PostMapping("/saveOneAttendance")
|
||||
public ResponseResult saveOneAttendance(@RequestBody Attendance attendance) {
|
||||
attendance.setModifyId(1652714496280469506L);
|
||||
if (attendance.getAttTime().getHour() > 1 && attendance.getAttTime().getHour() < 10) {
|
||||
// 迟到
|
||||
attendance.setStatus(3);
|
||||
return attendanceService.save(attendance) ? ResponseResult.build(ResponseCode.DATABASE_SAVE_OK, "success", attendance) :
|
||||
ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "error", null);
|
||||
} else if (attendance.getAttTime().getHour() >= 10&& attendance.getAttTime().getHour() < 15) {
|
||||
// 签退
|
||||
attendance.setStatus(2);
|
||||
return attendanceService.save(attendance) ? ResponseResult.build(ResponseCode.DATABASE_SAVE_OK, "success", attendance) :
|
||||
ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "error", null);
|
||||
} else if (attendance.getAttTime().getHour() <= 1) {
|
||||
// 签到
|
||||
attendance.setStatus(1);
|
||||
return attendanceService.save(attendance) ? ResponseResult.build(ResponseCode.DATABASE_SAVE_OK, "success", attendance) :
|
||||
ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "error", null);
|
||||
} else {
|
||||
// 考勤异常
|
||||
attendance.setStatus(0);
|
||||
return attendanceService.save(attendance) ? ResponseResult.build(ResponseCode.DATABASE_SAVE_OK, "success", attendance) :
|
||||
ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "error", null);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//查询个人考勤
|
||||
@GetMapping("/selectAttendance/{userId}")
|
||||
public ResponseResult findAttendanceAndUser(@PathVariable Long userId) {
|
||||
List<Attendance> attendances = attendanceService.getAttendanceAndUserByid(userId);
|
||||
return ResponseResult.build(ResponseCode.DATABASE_SELECT_OK, "success", attendances);
|
||||
}
|
||||
|
||||
|
||||
//删除考勤信息
|
||||
@DeleteMapping("/delAttendance/{id}")
|
||||
public ResponseResult delAttendance(@PathVariable Long id) {
|
||||
return attendanceService.removeById(id) ? ResponseResult.build(ResponseCode.DATABASE_DELETE_OK, "success", null) :
|
||||
ResponseResult.build(ResponseCode.DATABASE_DELETE_ERROR, "error", null);
|
||||
}
|
||||
|
||||
//批量删除考勤信息
|
||||
@PostMapping("/delBatchAttendance")
|
||||
public ResponseResult delBatchAttendance(@RequestBody List<Long> ids) {
|
||||
return attendanceService.removeByIds(ids) ? ResponseResult.build(ResponseCode.DATABASE_DELETE_OK, "success", null) :
|
||||
ResponseResult.build(ResponseCode.DATABASE_DELETE_ERROR, "error", null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@ import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@@ -18,7 +21,7 @@ import lombok.experimental.Accessors;
|
||||
* 考勤
|
||||
* </p>
|
||||
*
|
||||
* @author FatttSnake
|
||||
* @author gzw
|
||||
* @since 2023-04-30
|
||||
*/
|
||||
@Data
|
||||
@@ -30,18 +33,21 @@ public class Attendance implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId("id")
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户
|
||||
*/
|
||||
@TableField("user_id")
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 考勤时间
|
||||
*/
|
||||
@TableField("att_time")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",timezone = "UTC")
|
||||
private LocalDateTime attTime;
|
||||
|
||||
/**
|
||||
@@ -54,6 +60,7 @@ public class Attendance implements Serializable {
|
||||
* 修改人
|
||||
*/
|
||||
@TableField("modify_id")
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long modifyId;
|
||||
|
||||
/**
|
||||
@@ -63,10 +70,13 @@ public class Attendance implements Serializable {
|
||||
private LocalDateTime modifyTime;
|
||||
|
||||
@TableField("deleted")
|
||||
@TableLogic
|
||||
@TableLogic(value = "0",delval = "1")
|
||||
private Integer deleted;
|
||||
|
||||
@TableField("version")
|
||||
@Version
|
||||
private Integer version;
|
||||
|
||||
@TableField(exist = false)
|
||||
private User user;
|
||||
}
|
||||
|
||||
@@ -1,18 +1,26 @@
|
||||
package com.cfive.pinnacle.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.cfive.pinnacle.entity.Attendance;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 考勤 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author FatttSnake
|
||||
* @author gzw
|
||||
* @since 2023-04-30
|
||||
*/
|
||||
@Mapper
|
||||
public interface AttendanceMapper extends BaseMapper<Attendance> {
|
||||
|
||||
List<Attendance> getAllAttendanceAndUser();
|
||||
List<Attendance> getAttendanceAndUserByid(Long userId);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,16 +1,26 @@
|
||||
package com.cfive.pinnacle.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.cfive.pinnacle.entity.Attendance;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 考勤 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author FatttSnake
|
||||
* @author gzw
|
||||
* @since 2023-04-30
|
||||
*/
|
||||
public interface IAttendanceService extends IService<Attendance> {
|
||||
List<Attendance> getAllAttendanceAndUser();
|
||||
List<Attendance> getAttendanceAndUserByid(Long userId);
|
||||
|
||||
|
||||
List<Attendance> selectByTime(String startTime,String endTime);
|
||||
List<Attendance> selectOneByTime(String startTime,String endTime,Long userId);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +1,79 @@
|
||||
package com.cfive.pinnacle.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.cfive.pinnacle.entity.Attendance;
|
||||
import com.cfive.pinnacle.mapper.AttendanceMapper;
|
||||
import com.cfive.pinnacle.mapper.UserMapper;
|
||||
import com.cfive.pinnacle.service.IAttendanceService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 考勤 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author FatttSnake
|
||||
* @author gzw
|
||||
* @since 2023-04-30
|
||||
*/
|
||||
@Service
|
||||
public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attendance> implements IAttendanceService {
|
||||
@Autowired
|
||||
private AttendanceMapper attendanceMapper;
|
||||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Override
|
||||
public List<Attendance> getAllAttendanceAndUser() {
|
||||
return attendanceMapper.getAllAttendanceAndUser();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Attendance> getAttendanceAndUserByid(Long userId) {
|
||||
return attendanceMapper.getAttendanceAndUserByid(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Attendance> selectByTime(String startTime, String endTime) {
|
||||
LocalDateTime start = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
LocalDateTime end = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
System.out.println(start);
|
||||
System.out.println(end);
|
||||
LambdaQueryWrapper<Attendance> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.ge(null != start, Attendance::getAttTime, start).le(null != end, Attendance::getAttTime, end);
|
||||
List<Attendance> attendancesByTime = attendanceMapper.selectList(lqw);
|
||||
for (Attendance attendance:
|
||||
attendancesByTime) {
|
||||
attendance.setUser(userMapper.selectById(attendance.getUserId()));
|
||||
}
|
||||
return attendancesByTime;
|
||||
|
||||
}
|
||||
@Override
|
||||
public List<Attendance> selectOneByTime(String startTime, String endTime,Long userId) {
|
||||
LocalDateTime start = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
LocalDateTime end = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
System.out.println(start);
|
||||
System.out.println(end);
|
||||
LambdaQueryWrapper<Attendance> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.ge(null != start, Attendance::getAttTime, start).le(null != end, Attendance::getAttTime, end);
|
||||
List<Attendance> oneAttendancesByTime = attendanceMapper.selectList(lqw);
|
||||
for (Attendance attendance:
|
||||
oneAttendancesByTime) {
|
||||
attendance.setUser(userMapper.selectById(userId));
|
||||
}
|
||||
return oneAttendancesByTime;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,4 +2,72 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cfive.pinnacle.mapper.AttendanceMapper">
|
||||
|
||||
</mapper>
|
||||
<select id="getAllAttendanceAndUser" resultMap="AllAttendAndUserResult">
|
||||
select att.id attId,
|
||||
att.user_id,
|
||||
att.att_time,
|
||||
att.status,
|
||||
att.modify_id,
|
||||
att.modify_time,
|
||||
att.deleted attDel,
|
||||
att.version attVer,
|
||||
u.id uId,
|
||||
u.username,
|
||||
u.passwd,
|
||||
u.department_id,
|
||||
u.deleted uDel,
|
||||
u.version uVer
|
||||
from t_attendance att,
|
||||
t_user u
|
||||
where att.user_id = u.id
|
||||
and att.deleted = 0
|
||||
order by att_time DESC
|
||||
</select>
|
||||
<resultMap id="AllAttendAndUserResult" type="attendance" autoMapping="true">
|
||||
<id property="id" column="attId"/>
|
||||
<result property="deleted" column="attDel"/>
|
||||
<result property="version" column="attVer"/>
|
||||
<association property="user" javaType="user" autoMapping="true">
|
||||
<id property="id" column="uId"/>
|
||||
<result property="deleted" column="uDel"/>
|
||||
<result property="version" column="uVer"/>
|
||||
</association>
|
||||
</resultMap>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<select id="getAttendanceAndUserByid" resultMap="AttendAndUserResult">
|
||||
select att.id attId,
|
||||
att.user_id,
|
||||
att.att_time,
|
||||
att.status,
|
||||
att.modify_id,
|
||||
att.modify_time,
|
||||
att.deleted attDel,
|
||||
att.version attVer,
|
||||
u.id uId,
|
||||
u.username,
|
||||
u.passwd,
|
||||
u.department_id,
|
||||
u.deleted uDel,
|
||||
u.version uVer
|
||||
from t_attendance att,
|
||||
t_user u
|
||||
where att.user_id = u.id
|
||||
and att.deleted = 0 and att.user_id=#{userid}
|
||||
order by att_time DESC
|
||||
</select>
|
||||
<resultMap id="AttendAndUserResult" type="attendance" autoMapping="true">
|
||||
<id property="id" column="attId"/>
|
||||
<result property="deleted" column="attDel"/>
|
||||
<result property="version" column="attVer"/>
|
||||
<association property="user" javaType="user" autoMapping="true">
|
||||
<id property="id" column="uId"/>
|
||||
<result property="deleted" column="uDel"/>
|
||||
<result property="version" column="uVer"/>
|
||||
</association>
|
||||
</resultMap>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user