php开发考勤系统、OA系统简易版Mysql数据库设计

CREATE TABLE `attendance_cfg` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `company_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '细胞ID',
  `month` char(7) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '年月:202111',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态:0=启用1=停用2=删除',
  `off_type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '休息类型:0=单休,1=双休',
  `days` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '出勤天数:最大31',
  `off_days` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '休息天数:最大31',
  `param_json` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '月度配置json',
  `editor_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '操作人ID',
  `created_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `company_id` (`company_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考勤:细胞考勤配置表';

CREATE TABLE `attendance_check` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `check_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '打卡记录id',
  `company_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '细胞ID',
  `userinfo_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '寻木美系统userinfo_ID',
  `deliuser_id` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '得力系统user_ID',
  `check_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '打卡时间戳',
  `check_day` timestamp NULL DEFAULT NULL COMMENT '打卡时间',
  `check_minute` time NOT NULL DEFAULT '00:00:00' COMMENT '打卡时-分-秒',
  `check_imei` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '考勤机设备序列号',
  `check_name` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '考勤机设备名',
  `check_type` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '得力打卡类型',
  `check_data` varchar(1024) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '打卡补充数据',
  `cal` char(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '打卡日历2021-11-9',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态:0=有效1=无效打卡',
  `editor_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '校对人',
  `editor_type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '校对类型10=补卡',
  `remark` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '校对备注',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '记录api导出时间',
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `userinfo_id` (`userinfo_id`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考勤:得力Deli打卡记录表';

CREATE TABLE `attendance_clock` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `company_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '细胞ID',
  `clock_type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '打卡次数:0=2次,1=4次',
  `is_remind` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '打卡提醒:0=不提醒,1=提醒',
  `is_overtime` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否算加班:0=不计算,1=计算',
  `reset_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '每月可补卡次数',
  `work_time` decimal(4,1) NOT NULL DEFAULT '8.0' COMMENT '工作时长8',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态:0=启用1=停用2=删除',
  `late_min` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '算迟到分钟数',
  `back_num` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '算旷工迟到分钟数',
  `clock_json` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '每天打卡时间段json',
  `can_late` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '晚到/早走几分钟不记为异常:0=不允许,1=允许',
  `late_str` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '配置:晚到/早走几分钟',
  `can_free` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '允许晚到晚走/早到早走:0=不允许,1=允许',
  `free_str` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '配置:自由是上班时间',
  `editor_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '操作人ID',
  `created_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `company_id` (`company_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考勤:打卡配置表';

CREATE TABLE `attendance_leave` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `userinfo_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '寻木美系统userinfo_ID',
  `day` char(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '年月:2021-11-11',
  `day_type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '病假|事假|丧假|产假|调休...1-16款',
  `leave_time` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '假期时长:1-8小时',
  `start_time` time NOT NULL DEFAULT '00:00:00' COMMENT '请假开始时间',
  `end_time` time NOT NULL DEFAULT '00:00:00' COMMENT '请假结束时间',
  `remark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '备注',
  `status` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '状态',
  `editor_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '确认人ID',
  `created_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `userinfo_id` (`userinfo_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考勤:假期-记录表';

CREATE TABLE `attendance_machine` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `imei` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '机器序列号',
  `name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '机器序名称',
  `address` varchar(1024) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '考勤机位置',
  `company_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '考勤机所属细胞id',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态:0=启用1=停用2=删除',
  `editor_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '操作人ID',
  `created_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考勤:设备管理表';

CREATE TABLE `attendance_month` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `userinfo_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '寻木美系统userinfo_ID',
  `company_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '员工所属细胞id',
  `month` char(7) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '年月:2021-11',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态:0=正常1=异常2=无效',
  `work_days` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '实际出勤天数',
  `work_hours` decimal(6,1) unsigned NOT NULL DEFAULT '0.0' COMMENT '实际工作时长',
  `except_days` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '异常天数',
  `later_hours` decimal(6,1) unsigned NOT NULL DEFAULT '0.0' COMMENT '迟到时长',
  `before_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '早退次数',
  `before_hours` decimal(6,1) unsigned NOT NULL DEFAULT '0.0' COMMENT '早退时长',
  `no_work_hours` decimal(6,1) unsigned NOT NULL DEFAULT '0.0' COMMENT '旷工时长',
  `un_clock_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '漏打卡次数',
  `reset_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '补卡次数',
  `out_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '外出次数',
  `company_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '出差天数',
  `year_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '年假天数',
  `leave_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '事假天数',
  `sick_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '病假天数',
  `over_work_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '调休假天数',
  `marry_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '婚假天数',
  `baby_num` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '产假天数',
  `daddy_num` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '陪产假天数',
  `die_num` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '丧假天数',
  `editor_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '确认人ID',
  `created_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `month` (`month`),
  KEY `userinfo_id` (`userinfo_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考勤:月度报表';

CREATE TABLE `attendance_records` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `attendance_type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `attendance_id` bigint(20) unsigned DEFAULT NULL COMMENT '考试中心id',
  `describe` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '记录描述',
  `type` tinyint(4) NOT NULL COMMENT '记录类型,物流,支付等',
  `subtype` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '子类型',
  `state` tinyint(3) unsigned DEFAULT NULL COMMENT '可用标志状态',
  `param` text COLLATE utf8mb4_unicode_ci COMMENT '记录参数',
  `editor_id` int(11) NOT NULL COMMENT '编辑人ID',
  `deleted_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `attendance_id` (`attendance_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考勤:考勤操作记录表';

CREATE TABLE `attendance_work` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `userinfo_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '寻木美系统userinfo_ID',
  `company_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '员工所属细胞id',
  `work_day` char(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '打卡日历2021-11-11',
  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态:0=正常1=异常2=无效',
  `check_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '当日打卡次数',
  `reset_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '当日补卡次数',
  `leave_num` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '缺卡次数',
  `editor_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '校对人ID',
  `late_min` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '迟到时长',
  `before_min` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '早退时长',
  `unwork_min` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '旷工时长',
  `over_min` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '加班时长',
  `record1` time NOT NULL DEFAULT '00:00:00' COMMENT '上午上班时间',
  `record2` time NOT NULL DEFAULT '00:00:00' COMMENT '上午下班时间',
  `record3` time NOT NULL DEFAULT '00:00:00' COMMENT '下午上班时间',
  `record4` time NOT NULL DEFAULT '00:00:00' COMMENT '下午下班时间',
  `remark` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '备注',
  `created_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考勤:日历表';

规则:

考勤月份:根据筛选条件的月份统计

员工:员工档案名称

岗位名称:员工档案岗位名称

应出勤天数:计算当月需要出勤的天数(从出勤天数内获取上班天数)

实际出勤天数:应出勤天数-异常天数-事假天数

标准工作时长:根据本月应出勤的天数*打卡设置内的工作时长

实际工作时长:标准工作时长-迟到时长-旷工时长-早退时长

状态:正常(异常天数=0)异常(异常天数≥1)

异常天数:统计员工异常的打卡记录

迟到时长:员工迟到分钟数<120分钟

早退次数:累计员工打卡记录内的早退次数(一天早退两次统计两次)

早退时长:累计员工打卡记录内的早退时长

旷工时长:员工迟到分钟数≥120分钟

漏打卡次数/补卡次数/外出次数/出差天数/年假添加/事假天数/病假添加/调休假天数/婚假天数/产假天数/陪产假天数/丧假天数:根据用户保存的校对类型统计

日报规则:

日期:

员工:打卡用户名称

岗位名称:档案内的岗位名称

标准工作时长:根据本月应出勤的天数*打卡设置内的工作时长

实际工作时长:标准工作时长-迟到时长-旷工时长-早退时长

打卡时段:登录细胞配置打卡时间段

打卡类型:用户配置的每日应打卡次数(格式:1天xx次)

最早打卡时间:用户今日最早打卡时间(00:00:00-23:59:59)

最晚打卡时间:用户进入最后一次打卡时间(00:00:00-23:59:59)

打卡次数:在打卡规则内有效的打卡次数(例:9:00打上班卡,无论员工在9:00及9:00前打了多少次卡,只统计一次上班打卡)

状态:打卡次数等于打卡类型时状态等于“正常”;打卡次数小于打卡类型、实际工作时长<标准工作时长状态为“异常”

迟到时长:根据用户在打卡设置内的配置进行判断,无弹性打卡时超过用户设置的上班时间便开始统计迟到分钟数;有弹性打卡超过用户设置的最晚时间还未打卡便统计迟到分钟数(例:9:00上班,可晚30分钟,员工在31打卡时,迟到分钟数为31分钟)

早退时长:根据用户咋打卡设置内的配置判断。无弹性打卡时,打卡时间早于用户设置的下班时间视为早退;有弹性打卡时,打卡时间下班时间相差超过用户设置的最早分钟数,便视为早退(例:18:00下班,可早20分钟打卡,用户在17:32打卡,早退分钟数为28分钟)

缺卡次数:打卡类型-打卡次数-补发次数

补卡次数:根据用户在今日校对时选择的打卡时间校对方式进行统计(例:用户在今日一个时间段内做了两次补卡操作,仍算做补卡1次)

A打卡记录(9:33 12:10 18:31)
C打卡记录(9:33 11:55 12:01	14:04 18:31)
D打卡记录(9:33 11:55 14:04 18:31)
E打卡记录(9:33 11:45 12:01	18:44 19:31)
F打卡记录(8:44 12:01)
G打卡时间(7:56 8:45 11.45 11:59 13:23 16:43 18:43  20:21)
H打卡时间(8:56)
I打卡时间(18:58)
J打卡时间(8:55 12:01 12:44 13:44 18:56)
K打卡时间(8:33 12:03 18:31 18:59)


如何找出有效的4次打卡记录
子公司有的是打卡2次
有的4次
2021年11月20日18:03:59

你可能感兴趣的:(PHP框架,Mysql专栏,java,git,数据库)