From 2fa80301e25547beed63f6d64d546046a34e7621 Mon Sep 17 00:00:00 2001 From: gzw <1571020389@qq.com> Date: Sat, 6 May 2023 00:41:06 +0800 Subject: [PATCH] commit 2023/05/06 --- .../controller/AttendanceController.java | 100 ++++- .../com/cfive/pinnacle/entity/Attendance.java | 14 +- .../pinnacle/mapper/AttendanceMapper.java | 10 +- .../pinnacle/service/IAttendanceService.java | 12 +- .../service/impl/AttendanceServiceImpl.java | 61 ++- .../resources/mapper/AttendanceMapper.xml | 70 ++- .../pinnacle/attendance/AttendanceTest.java | 22 + ui/src/assets/css/attendance.css | 13 + ui/src/assets/svg/attendance.svg | 1 + ui/src/assets/svg/click.svg | 1 + ui/src/assets/svg/deleteAll.svg | 1 + ui/src/assets/svg/reset.svg | 7 + ui/src/assets/svg/search.svg | 1 + ui/src/pages/attendance/AttendanceHome.vue | 398 ++++++++++++++++++ ui/src/pages/attendance/UserAttendance.vue | 293 +++++++++++++ 15 files changed, 995 insertions(+), 9 deletions(-) create mode 100644 Pinnacle/src/test/java/com/cfive/pinnacle/attendance/AttendanceTest.java create mode 100644 ui/src/assets/css/attendance.css create mode 100644 ui/src/assets/svg/attendance.svg create mode 100644 ui/src/assets/svg/click.svg create mode 100644 ui/src/assets/svg/deleteAll.svg create mode 100644 ui/src/assets/svg/reset.svg create mode 100644 ui/src/assets/svg/search.svg create mode 100644 ui/src/pages/attendance/AttendanceHome.vue create mode 100644 ui/src/pages/attendance/UserAttendance.vue diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/AttendanceController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/AttendanceController.java index cc66a22..ad70962 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/AttendanceController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/AttendanceController.java @@ -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; /** *

* 考勤 前端控制器 *

* - * @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 attendances = attendanceService.getAllAttendanceAndUser(); + return ResponseResult.build(ResponseCode.DATABASE_SELECT_OK, "success", attendances); + } + + //模糊时间查询 + @GetMapping("/findAttendanceByTime") + public ResponseResult findAttendanceAndUser(String startTime,String endTime) { + List 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 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 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 ids) { + return attendanceService.removeByIds(ids) ? ResponseResult.build(ResponseCode.DATABASE_DELETE_OK, "success", null) : + ResponseResult.build(ResponseCode.DATABASE_DELETE_ERROR, "error", null); + } + + + } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Attendance.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Attendance.java index 4c35415..6c2061b 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Attendance.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/Attendance.java @@ -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; * 考勤 *

* - * @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; } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/AttendanceMapper.java b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/AttendanceMapper.java index 903792d..2994be1 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/AttendanceMapper.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/AttendanceMapper.java @@ -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; + /** *

* 考勤 Mapper 接口 *

* - * @author FatttSnake + * @author gzw * @since 2023-04-30 */ @Mapper public interface AttendanceMapper extends BaseMapper { + List getAllAttendanceAndUser(); + List getAttendanceAndUserByid(Long userId); + + + } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IAttendanceService.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IAttendanceService.java index 2d92517..2b2b6a2 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IAttendanceService.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IAttendanceService.java @@ -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; + /** *

* 考勤 服务类 *

* - * @author FatttSnake + * @author gzw * @since 2023-04-30 */ public interface IAttendanceService extends IService { + List getAllAttendanceAndUser(); + List getAttendanceAndUserByid(Long userId); + + + List selectByTime(String startTime,String endTime); + List selectOneByTime(String startTime,String endTime,Long userId); + } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/AttendanceServiceImpl.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/AttendanceServiceImpl.java index bc54103..15b0ec0 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/AttendanceServiceImpl.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/AttendanceServiceImpl.java @@ -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; + /** *

* 考勤 服务实现类 *

* - * @author FatttSnake + * @author gzw * @since 2023-04-30 */ @Service public class AttendanceServiceImpl extends ServiceImpl implements IAttendanceService { + @Autowired + private AttendanceMapper attendanceMapper; + @Autowired + private UserMapper userMapper; + @Override + public List getAllAttendanceAndUser() { + return attendanceMapper.getAllAttendanceAndUser(); + } + + @Override + public List getAttendanceAndUserByid(Long userId) { + return attendanceMapper.getAttendanceAndUserByid(userId); + } + + @Override + public List 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 lqw = new LambdaQueryWrapper<>(); + lqw.ge(null != start, Attendance::getAttTime, start).le(null != end, Attendance::getAttTime, end); + List attendancesByTime = attendanceMapper.selectList(lqw); + for (Attendance attendance: + attendancesByTime) { + attendance.setUser(userMapper.selectById(attendance.getUserId())); + } + return attendancesByTime; + + } + @Override + public List 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 lqw = new LambdaQueryWrapper<>(); + lqw.ge(null != start, Attendance::getAttTime, start).le(null != end, Attendance::getAttTime, end); + List oneAttendancesByTime = attendanceMapper.selectList(lqw); + for (Attendance attendance: + oneAttendancesByTime) { + attendance.setUser(userMapper.selectById(userId)); + } + return oneAttendancesByTime; + + } } diff --git a/Pinnacle/src/main/resources/mapper/AttendanceMapper.xml b/Pinnacle/src/main/resources/mapper/AttendanceMapper.xml index 29d1f95..e054e82 100644 --- a/Pinnacle/src/main/resources/mapper/AttendanceMapper.xml +++ b/Pinnacle/src/main/resources/mapper/AttendanceMapper.xml @@ -2,4 +2,72 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pinnacle/src/test/java/com/cfive/pinnacle/attendance/AttendanceTest.java b/Pinnacle/src/test/java/com/cfive/pinnacle/attendance/AttendanceTest.java new file mode 100644 index 0000000..098edba --- /dev/null +++ b/Pinnacle/src/test/java/com/cfive/pinnacle/attendance/AttendanceTest.java @@ -0,0 +1,22 @@ +package com.cfive.pinnacle.attendance; + +import com.cfive.pinnacle.controller.AttendanceController; +import com.cfive.pinnacle.entity.Attendance; +import com.cfive.pinnacle.service.IAttendanceService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +public class AttendanceTest { + @Autowired + IAttendanceService attendanceService; + @Test + void addTest() { + Attendance attendance = new Attendance(); + attendance.setUserId(1L); + attendance.setModifyId(1L); + attendanceService.save(attendance); + } + +} diff --git a/ui/src/assets/css/attendance.css b/ui/src/assets/css/attendance.css new file mode 100644 index 0000000..7b3f06e --- /dev/null +++ b/ui/src/assets/css/attendance.css @@ -0,0 +1,13 @@ +*{ + padding:0; + margin: 0; +} +#attendanceMain1{ + margin-bottom:10px ; +} +/* +#attendanceMain{ + width: 100vw; + height: 100vh; + +}*/ diff --git a/ui/src/assets/svg/attendance.svg b/ui/src/assets/svg/attendance.svg new file mode 100644 index 0000000..7ae8f43 --- /dev/null +++ b/ui/src/assets/svg/attendance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src/assets/svg/click.svg b/ui/src/assets/svg/click.svg new file mode 100644 index 0000000..b51c9ae --- /dev/null +++ b/ui/src/assets/svg/click.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src/assets/svg/deleteAll.svg b/ui/src/assets/svg/deleteAll.svg new file mode 100644 index 0000000..98050da --- /dev/null +++ b/ui/src/assets/svg/deleteAll.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src/assets/svg/reset.svg b/ui/src/assets/svg/reset.svg new file mode 100644 index 0000000..c54be8a --- /dev/null +++ b/ui/src/assets/svg/reset.svg @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/ui/src/assets/svg/search.svg b/ui/src/assets/svg/search.svg new file mode 100644 index 0000000..3d50a7c --- /dev/null +++ b/ui/src/assets/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src/pages/attendance/AttendanceHome.vue b/ui/src/pages/attendance/AttendanceHome.vue new file mode 100644 index 0000000..53af587 --- /dev/null +++ b/ui/src/pages/attendance/AttendanceHome.vue @@ -0,0 +1,398 @@ + + + + diff --git a/ui/src/pages/attendance/UserAttendance.vue b/ui/src/pages/attendance/UserAttendance.vue new file mode 100644 index 0000000..5c1ff6b --- /dev/null +++ b/ui/src/pages/attendance/UserAttendance.vue @@ -0,0 +1,293 @@ + + + + +