💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
目录
- 基于企业微信的工作考勤系统介绍
- 基于企业微信的工作考勤系统演示视频
- 基于企业微信的工作考勤系统演示图片
- 基于企业微信的工作考勤系统代码展示
- 基于企业微信的工作考勤系统文档展示
基于企业微信的工作考勤系统介绍
工作考勤系统是一款基于B/S架构设计的综合性人事管理平台,采用Java/Python双语言支持,分别基于Spring Boot(Spring+SpringMVC+Mybatis)和Django框架开发,前端技术栈整合了uni-app、微信小程序及安卓应用,数据存储依托MySQL数据库实现。系统功能模块完善,包括直观的信息总览首页、精细化的用户管理、灵活的系统管理、全面的考勤信息管理、便捷的打卡管理、规范的请假信息管理以及高效的工作汇报管理,满足企业对员工出勤、请假、工作汇报等多方面管理需求。通过移动端与Web端的无缝结合,员工可随时随地进行打卡、请假申请和工作汇报提交,管理者则能够实时掌握团队考勤状况,查看统计数据,审批各类申请,大幅提升人事管理效率,降低管理成本,为企业提供科学、精准的人力资源决策依据。
基于企业微信的工作考勤系统演示视频
如何用Python+Django实现工作考勤系统?看完这篇你会发现比想象的简单
基于企业微信的工作考勤系统演示图片
基于企业微信的工作考勤系统代码展示
// 核心功能1: 打卡管理 – 处理用户打卡请求并进行地理位置验证
@RestController
@RequestMapping("/api/attendance")
public class AttendanceController {
@Autowired
private AttendanceService attendanceService;
@Autowired
private CompanySettingService companySettingService;
@PostMapping("/clock")
public ResponseEntity<?> clockIn(@RequestBody ClockInRequest request,
@RequestParam("userId") Long userId) {
try {
// 获取用户信息
User user = userService.getUserById(userId);
if (user == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ApiResponse(false, "用户不存在"));
}
// 获取公司考勤设置
CompanySetting setting = companySettingService.getByCompanyId(user.getCompanyId());
// 检查是否在工作时间内
LocalTime currentTime = LocalTime.now();
LocalTime startTime = setting.getWorkStartTime();
LocalTime endTime = setting.getWorkEndTime();
AttendanceRecord record = new AttendanceRecord();
record.setUserId(userId);
record.setClockTime(LocalDateTime.now());
record.setLocation(request.getLocation());
record.setDeviceInfo(request.getDeviceInfo());
// 计算用户打卡位置与公司位置的距离
double distance = calculateDistance(
request.getLatitude(),
request.getLongitude(),
setting.getCompanyLatitude(),
setting.getCompanyLongitude()
);
// 判断是否在有效打卡范围内
if (distance > setting.getAllowedDistance()) {
record.setStatus(AttendanceStatus.LOCATION_INVALID);
record.setRemark("打卡位置超出允许范围");
attendanceService.saveRecord(record);
return ResponseEntity.ok(new ApiResponse(false, "打卡失败,位置不在有效范围内"));
}
// 判断打卡类型(上班/下班)和状态(正常/迟到/早退)
if (request.getType() == ClockType.CLOCK_IN) {
if (currentTime.isAfter(startTime.plusMinutes(setting.getLateThreshold()))) {
record.setStatus(AttendanceStatus.LATE);
record.setRemark("迟到" + ChronoUnit.MINUTES.between(startTime, currentTime) + "分钟");
} else {
record.setStatus(AttendanceStatus.NORMAL);
}
} else {
if (currentTime.isBefore(endTime.minusMinutes(setting.getEarlyLeaveThreshold()))) {
record.setStatus(AttendanceStatus.EARLY_LEAVE);
record.setRemark("早退" + ChronoUnit.MINUTES.between(currentTime, endTime) + "分钟");
} else {
record.setStatus(AttendanceStatus.NORMAL);
}
}
// 保存打卡记录
AttendanceRecord savedRecord = attendanceService.saveRecord(record);
// 更新用户月度考勤统计
attendanceService.updateMonthlyStatistics(userId, LocalDate.now().getYear(),
LocalDate.now().getMonthValue());
return ResponseEntity.ok(new ApiResponse(true, "打卡成功", savedRecord));
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ApiResponse(false, "打卡处理失败: " + e.getMessage()));
}
}
private double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
// 地球半径(米)
final double EARTH_RADIUS = 6371000;
// 将经纬度转换为弧度
double radLat1 = Math.toRadians(lat1);
double radLon1 = Math.toRadians(lon1);
double radLat2 = Math.toRadians(lat2);
double radLon2 = Math.toRadians(lon2);
// 计算经纬度差值
double deltaLat = radLat2 – radLat1;
double deltaLon = radLon2 – radLon1;
// 使用Haversine公式计算球面距离
double a = Math.sin(deltaLat/2) * Math.sin(deltaLat/2) +
Math.cos(radLat1) * Math.cos(radLat2) *
Math.sin(deltaLon/2) * Math.sin(deltaLon/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1–a));
return EARTH_RADIUS * c;
}
}
基于企业微信的工作考勤系统文档展示
💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
评论前必须登录!
注册