Commit 90e07860 authored by 廖旭伟's avatar 廖旭伟

Merge remote-tracking branch 'origin/master'

parents 27a725b9 7b9a9c6e
......@@ -100,12 +100,12 @@
label: "全部考勤组",
fuzzy: false
},
{
/* {
name: "classId",
type: "select",
label: "全部班次",
fuzzy: false
},
},*/
{
name: "errorStatus",
type: "select",
......@@ -149,8 +149,8 @@
{label: "员工姓名", prop: "staffName",fixed:'left',width:100},
{label: "工号", prop: "workNum"},
{label: "部门", prop: "deptName"},
{label: "考勤组", prop: "deptName"},
{label: "班次", prop: "shiftsName"},
{label: "考勤组", prop: "attendanceGroupName"},
/* {label: "班次", prop: "shiftsName"},*/
{label: "异常状态", prop: "errorStatus",formatter: this.formattereErrorStatus},
{label: "异常时间", prop: "errorDateTime", formatter: this.formatterDate},
{label: "处理结果", prop: "processResult", formatter: this.formatters},
......
......@@ -498,12 +498,11 @@ export default {
{ label: "员工工号", prop: "workNum" },
{
label: "考勤组",
prop: "attendanceGroupName",
formatter: this.formatters,
prop: "attendanceGroupName"
},
{ label: "部门", prop: "deptName", formatter: this.formatters },
{ label: "职位", prop: "positionName", formatter: this.formatters },
{ label: "班次", prop: "shiftsName", formatter: this.formatters },
{ label: "部门", prop: "deptName" },
{ label: "职位", prop: "positionName"},
{ label: "班次", prop: "classId", formatter: this.formatter },
{
label: "签到结果",
prop: "signInResult",
......
......@@ -17,9 +17,9 @@ module.exports = {
hot: true,//自动保存
proxy: {
'/attendance': {
target: 'http://192.168.0.98:11039',
//target: 'http://192.168.0.98:11039',
// target: 'http://112.19.80.237:11039',
// target: 'http://localhost:17500',
target: 'http://localhost:17500',
changeOrigin: true,
secure: false,
cookieDomainRewrite: 'localhost',
......
......@@ -84,6 +84,39 @@
<skipUi>false</skipUi>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<profiles.active>product</profiles.active>
<profiles.server.port>17500</profiles.server.port>
<profiles.server.path>/attendance</profiles.server.path>
<profiles.publish.path>/home/publish</profiles.publish.path>
<profiles.nacos.server-addr>127.0.0.1:8848</profiles.nacos.server-addr>
<profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
<profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
<profiles.log.level>INFO</profiles.log.level>
<profiles.sms.smsSendUrl>http://127.0.0.1:8089/api/index/index</profiles.sms.smsSendUrl>
<profiles.sms.apiId>k6BVS1PEbyzcJAE4</profiles.sms.apiId>
<profiles.hik.host>8.136.255.30:8001</profiles.hik.host>
<profiles.hik.protocol>http://</profiles.hik.protocol>
<profiles.hik.appKey>25128371</profiles.hik.appKey>
<profiles.hik.appSecret>2m9RcPJOKq5j2QPQM4v5</profiles.hik.appSecret>
<profiles.dingtalk.domain>https://oapi.dingtalk.com</profiles.dingtalk.domain>
<profiles.dingtalk.oaUrl>api.dingtalk.com</profiles.dingtalk.oaUrl>
<profiles.dingtalk.agentId>2652674890</profiles.dingtalk.agentId>
<profiles.dingtalk.appKey>dingpqzradgfr4efdi2j</profiles.dingtalk.appKey>
<profiles.dingtalk.appSecret>bF2WALmo5_Wuj3hg5gXeWqezrYnZChUJ88HjzNWpkA9ivdOxfBDGOGYcfVRfB3vd</profiles.dingtalk.appSecret>
<profiles.dingtalk.aesKey>1QcPYuSpAc98OS3qQwwx5HPH85CZDidxF95yBGad2fJ</profiles.dingtalk.aesKey>
<profiles.dingtalk.token>m3WeuVx5kcTY76kh22uWZOTSu0XjvcwNhd</profiles.dingtalk.token>
<profiles.dingtalk.opUserId>manager8325</profiles.dingtalk.opUserId>
<profiles.webUrl>http://8.136.255.30:21039/attendance</profiles.webUrl>
<package.environment>build</package.environment>
<skipUi>false</skipUi>
</properties>
</profile>
<profile>
<id>yibin</id>
<properties>
......
package com.mortals.xhx.base.system.user.model;
import com.mortals.framework.annotation.desensitization.MobileDesensitize;
import com.mortals.framework.ap.SysConstains;
import com.mortals.framework.service.IUser;
import com.mortals.xhx.base.system.user.model.vo.UserVo;
......@@ -34,6 +35,7 @@ public class UserEntity extends UserVo implements IUser {
/**
* 用户手机号
*/
@MobileDesensitize
private String mobile;
/**
* 用户联系电话
......
......@@ -141,16 +141,16 @@ public class DingMessageController {
if(result.getTasks().size() >0 ){
if(result.getTasks().get(0).getCreateTime() != null && result.getTasks().get(0).getFinishTime() != null){
Date startTime = dateFormat(result.getTasks().get(0).getCreateTime(),"yyyy-MM-dd'T'HH:mm'Z'",false);
Date endTime = dateFormat(result.getTasks().get(0).getFinishTime(),"yyyy-MM-dd'T'HH:mm'Z'",false);
leaveRecordEntity.setStartTime(startTime);
leaveRecordEntity.setEndTime(endTime);
leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
}
}
// if(result.getTasks().size() >0 ){
// if(result.getTasks().get(0).getCreateTime() != null && result.getTasks().get(0).getFinishTime() != null){
// Date startTime = dateFormat(result.getTasks().get(0).getCreateTime(),"yyyy-MM-dd'T'HH:mm'Z'",false);
//
// Date endTime = dateFormat(result.getTasks().get(0).getFinishTime(),"yyyy-MM-dd'T'HH:mm'Z'",false);
// leaveRecordEntity.setStartTime(startTime);
// leaveRecordEntity.setEndTime(endTime);
// leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
// }
// }
String leave_code = LeaveRulesEnum.事假.getLeave_code();
String leave_name = "事假";
......@@ -169,7 +169,7 @@ public class DingMessageController {
switch (jsonArray.get(3).toString()){
case "halfDay":
case "day":
leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60*24)); //小时转换成秒
leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60*24)); //转换成秒
break;
default: //除了按天和半天计算的假期 其余都是按小时返回
leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60)); //小时转换成秒
......@@ -281,21 +281,24 @@ public class DingMessageController {
if(result.getResult().compareToIgnoreCase("AGREE") == 0){
if(result.getTasks().size() > 1){
if(result.getTasks().get(1).getStatus().compareToIgnoreCase("CANCELED") != 0){
leaveRecordEntity.setAuditResult(4); //撤销审批完成
}else {
// if(result.getTasks().size() > 1){
// if(result.getTasks().get(1).getStatus().compareToIgnoreCase("CANCELED") == 0){
// leaveRecordEntity.setAuditResult(4); //撤销审批完成
// }else {
// leaveRecordEntity.setAuditResult(1);
// }
// }
leaveRecordEntity.setAuditResult(1);
}
}
}else if(result.equals("")){ //撤销假期审批中result会为空 撤销审批通过后result为AGREE
else if(result.equals("")){ //撤销假期审批中result会为空 撤销审批通过后result为AGREE
if(result.getTasks().size() > 1){
log.info("status"+result.getTasks().get(1).getStatus());
if(result.getTasks().get(1).getStatus().compareToIgnoreCase("CANCELED") != 0){
leaveRecordEntity.setAuditResult(3); //撤销审批中
}
}
}else {
}
else {
leaveRecordEntity.setAuditResult(2); //请假审批中
}
......
......@@ -14,7 +14,7 @@ import lombok.Data;
* 考勤打卡记录信息实体对象
*
* @author zxfei
* @date 2023-07-27
* @date 2023-08-03
*/
@Data
public class AttendanceRecordEntity extends AttendanceRecordVo {
......@@ -61,15 +61,6 @@ public class AttendanceRecordEntity extends AttendanceRecordVo {
*/
@Excel(name = "所属考勤组名称")
private String attendanceGroupName;
/**
* 班次ID
*/
private Long shiftsId;
/**
* 班次名称
*/
@Excel(name = "班次名称")
private String shiftsName;
/**
* 打卡日期
*/
......@@ -82,12 +73,12 @@ public class AttendanceRecordEntity extends AttendanceRecordVo {
/**
* 签到结果(0.否,1.是)
*/
@Excel(name = "签到结果", readConverterExp = "0=异常,1=正常")
@Excel(name = "签到结果", readConverterExp = "0=否,1=是")
private Integer signInResult;
/**
* 签退结果(0.否,1.是)
*/
@Excel(name = "签退结果", readConverterExp = "0=异常,1=正常")
@Excel(name = "签退结果", readConverterExp = "0=否,1=是")
private Integer signOutResult;
/**
* 考勤类型
......@@ -96,8 +87,16 @@ public class AttendanceRecordEntity extends AttendanceRecordVo {
/**
* 打卡结果(0.否,1.是)
*/
@Excel(name = "打卡结果", readConverterExp = "0=异常,1=正常")
@Excel(name = "打卡结果", readConverterExp = "0=否,1=是")
private Integer punchResult;
/**
* 班次ID
*/
private Long classId;
/**
* 班次名称
*/
private String className;
@Override
public int hashCode() {
return this.getId().hashCode();
......@@ -124,13 +123,13 @@ public class AttendanceRecordEntity extends AttendanceRecordVo {
this.positionName = "";
this.attendanceGroupId = 0L;
this.attendanceGroupName = "";
this.shiftsId = 0L;
this.shiftsName = "";
this.attendanceDate = new Date();
this.remark = "";
this.signInResult = 0;
this.signOutResult = 0;
this.attendType = "";
this.punchResult = 0;
this.classId = 0L;
this.className = "";
}
}
\ No newline at end of file
......@@ -39,28 +39,24 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
protected void findAfter(AttendanceRecordErrorEntity params, PageInfo pageInfo, Context context, List<AttendanceRecordErrorEntity> list) throws AppException {
list.forEach(item -> {
AttendanceClassEntity attendanceClassEntity = attendanceClassService.get(item.getShiftsId(), context);
AttendanceClassDetailEntity attendanceClassDetailEntity = classDetailService.get(item.getShiftsId(), context);
if(!ObjectUtils.isEmpty(attendanceClassEntity)&&!ObjectUtils.isEmpty(attendanceClassEntity.getAttendanceClassDetailList())){
for (AttendanceClassDetailEntity attendanceClassDetailEntity : attendanceClassEntity.getAttendanceClassDetailList()) {
if (!ObjectUtils.isEmpty(attendanceClassDetailEntity)) {
String str = DateUtil.formatTime(item.getGoOffDateTime());
String goStr = DateUtil.formatTime(attendanceClassDetailEntity.getGoWorkDate());
String offStr = DateUtil.formatTime(attendanceClassDetailEntity.getOffWorkDate());
if (!ObjectUtils.isEmpty(str)&&str.equals(goStr)) {
if (!ObjectUtils.isEmpty(str) && str.equals(goStr)) {
item.setGoOrOff("上班");
}
if (!ObjectUtils.isEmpty(str)&&str.equals(offStr)) {
if (!ObjectUtils.isEmpty(str) && str.equals(offStr)) {
item.setGoOrOff("下班");
}
if (ObjectUtils.isEmpty(item.getGoOrOff())) {
item.setGoOrOff("上班");
}
item.setGoOrOff("");
}
}
}else {
item.setGoOrOff("上班");
} else {
item.setGoOrOff("");
}
});
}
......
......@@ -127,6 +127,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
commonData.setContext(context);
commonData.setAttendanceGroupEntity(attendanceGroupEntity);
commonData.setAttendanceRecordEntity(attendanceRecordEntity);
commonData.setAttendanceDate(attendanceRecordEntity.getAttendanceDate());
commonData.setDetailEntityList(detailEntityList);
commonData.setStaffId(attendanceRecordEntity.getStaffId());
commonData.setDateStr(dateStr);
......@@ -149,6 +150,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
commonData.setAttendanceGroupEntity(attendanceGroupEntity);
commonData.setAttendanceRecordEntity(attendanceRecordEntity);
commonData.setDetailEntityList(detailEntityList);
commonData.setAttendanceDate(attendanceRecordEntity.getAttendanceDate());
commonData.setStaffId(attendanceRecordEntity.getStaffId());
commonData.setDateStr(dateStr);
workAbstract.doHandleWork(commonData);
......@@ -194,7 +196,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
//判断是否存在记录 如果存在 则更新 维度 staffId attendanceDate shiftsId attendanceGroupId
AttendanceRecordQuery query = new AttendanceRecordQuery();
query.setStaffId(attendanceRecordEntity.getStaffId());
query.setShiftsId(attendanceRecordEntity.getShiftsId());
query.setClassId(attendanceRecordEntity.getClassId());
query.setAttendanceGroupId(attendanceRecordEntity.getAttendanceGroupId());
query.setAttendanceDate(attendanceRecordEntity.getAttendanceDate());
......@@ -297,8 +299,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
}
if (!ObjectUtils.isEmpty(detailEntityList)) {
AttendanceClassDetailEntity attendanceClassDetailEntity = attendanceClassDetailService.get(detailEntityList.get(0).getShiftsId(), context);
attendanceRecordEntity.setShiftsId(attendanceClassDetailEntity == null ? 0L : attendanceClassDetailEntity.getClassId());
attendanceRecordEntity.setShiftsName(attendanceClassDetailEntity == null ? "" : attendanceClassDetailEntity.getClassName());
attendanceRecordEntity.setClassId(attendanceClassDetailEntity == null ? 0L : attendanceClassDetailEntity.getClassId());
attendanceRecordEntity.setClassName(attendanceClassDetailEntity == null ? "" : attendanceClassDetailEntity.getClassName());
}
//生成异常记录
genErrorAttendRecord(context, dateStr, attendanceRecordEntity, detailEntityList);
......@@ -339,7 +341,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
//判断是否存在记录 如果存在 则更新 维度 staffId attendanceDate shiftsId attendanceGroupId
AttendanceRecordQuery query = new AttendanceRecordQuery();
query.setStaffId(attendanceRecordEntity.getStaffId());
query.setShiftsId(attendanceRecordEntity.getShiftsId());
query.setClassId(attendanceRecordEntity.getClassId());
query.setAttendanceGroupId(attendanceRecordEntity.getAttendanceGroupId());
query.setAttendanceDate(attendanceRecordEntity.getAttendanceDate());
......
......@@ -228,8 +228,8 @@ public class FixWorkOtherAttendance extends AttendanceWorkAbstract {
}
if (!ObjectUtils.isEmpty(commonData.getDetailEntityList())) {
AttendanceClassDetailEntity attendanceClassDetailEntity = attendanceClassDetailService.get(commonData.getDetailEntityList().get(0).getShiftsId());
commonData.getAttendanceRecordEntity().setShiftsId(attendanceClassDetailEntity == null ? 0L : attendanceClassDetailEntity.getClassId());
commonData.getAttendanceRecordEntity().setShiftsName(attendanceClassDetailEntity == null ? "" : attendanceClassDetailEntity.getClassName());
commonData.getAttendanceRecordEntity().setClassId(attendanceClassDetailEntity == null ? 0L : attendanceClassDetailEntity.getClassId());
commonData.getAttendanceRecordEntity().setClassName(attendanceClassDetailEntity == null ? "" : attendanceClassDetailEntity.getClassName());
}
//生成异常记录
genErrorAttendRecord(commonData.getContext(), commonData.getDateStr(), commonData.getAttendanceRecordEntity(), commonData.getDetailEntityList());
......@@ -249,7 +249,9 @@ public class FixWorkOtherAttendance extends AttendanceWorkAbstract {
AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
errorEntity.initAttrValue();
BeanUtils.copyProperties(attendanceRecordEntity, errorEntity, new String[]{"id"});
errorEntity.setGoOffDateTime(errorEntity.getErrorDateTime());
errorEntity.setShiftsId(recordDetailEntity.getShiftsId());
errorEntity.setShiftsName(recordDetailEntity.getShiftsName());
errorEntity.setProcessStatus(YesNoEnum.NO.getValue());
errorEntity.setCreateTime(new Date());
errorEntity.setCreateUserId(context.getUser().getId());
......@@ -257,7 +259,7 @@ public class FixWorkOtherAttendance extends AttendanceWorkAbstract {
//判断上班
if (GoWorkResultEnum.正常.getValue() != goWorkResult) {
Date goWorkDate = attendanceClassDetailEntity.getGoWorkDate();
errorEntity.setGoOffDateTime(goWorkDate);
errorEntity.setGoOffDateTime(DateUtil.parseDateTime(dateStr + " " + DateUtil.formatTime(goWorkDate)).toJdkDate());
if (!ObjectUtils.isEmpty(recordDetailEntity.getGoWorkDate())) {
errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
......@@ -280,7 +282,7 @@ public class FixWorkOtherAttendance extends AttendanceWorkAbstract {
//判断下班
if (OffWorkResultEnum.正常.getValue() != offWorkResult) {
Date offWorkDate = attendanceClassDetailEntity.getOffWorkDate();
errorEntity.setGoOffDateTime(offWorkDate);
errorEntity.setGoOffDateTime(DateUtil.parseDateTime(dateStr + " " + DateUtil.formatTime(offWorkDate)).toJdkDate());
if (!ObjectUtils.isEmpty(recordDetailEntity.getGoWorkDate())) {
errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
......@@ -296,13 +298,26 @@ public class FixWorkOtherAttendance extends AttendanceWorkAbstract {
if (OffWorkResultEnum.迟到.getValue() == recordDetailEntity.getOffWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.迟到.getValue());
}
errorEntity.setActualAttendanceDateTime(attendanceRecordEntity.getAttendanceDate());
errorEntityList.add(errorEntity);
}
}
if (!ObjectUtils.isEmpty(errorEntityList)) {
errorService.save(errorEntityList, context);
for (AttendanceRecordErrorEntity errorEntity : errorEntityList) {
//查看是否存在相同的异常记录,如果存在 则不添加
AttendanceRecordErrorQuery errorQuery = new AttendanceRecordErrorQuery();
errorQuery.setShiftsId(errorEntity.getShiftsId());
errorQuery.setGoOffDateTime(errorEntity.getErrorDateTime());
errorQuery.setStaffId(errorEntity.getStaffId());
int count = errorService.count(errorQuery, context);
if (count == 0) {
errorService.save(errorEntity, context);
} else {
log.info("已经存在相同的异常记录,不做保存!");
}
}
}
}
}
......@@ -146,8 +146,8 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
attendanceExportRecordEntity.setDeptName(deptEntity==null?"":deptEntity.getDeptName());
}
if(!ObjectUtils.isEmpty(query.getShiftsId())){
AttendanceClassEntity attendanceClassEntity = classService.get(query.getShiftsId(), context);
if(!ObjectUtils.isEmpty(query.getClassId())){
AttendanceClassEntity attendanceClassEntity = classService.get(query.getClassId(), context);
attendanceExportRecordEntity.setClassName(attendanceClassEntity==null?"":attendanceClassEntity.getClassName());
}
attendanceExportRecordEntity.setCreateUserId(context.getUser().getId());
......@@ -161,7 +161,7 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
@Override
protected void doListBefore(AttendanceRecordEntity query, Map<String, Object> model, Context context) throws AppException {
if (query.getClassId() != null) {
query.setShiftsId(query.getClassId());
query.setClassId(query.getClassId());
}
if (query.getGroupId() != null) {
query.setAttendanceGroupId(query.getGroupId());
......
package com.mortals.xhx.module.feedback.web;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -46,5 +48,8 @@ public class FeedbackFileController extends BaseCRUDJsonBodyMappingController<Fe
super.init(model, context);
}
@Override
protected void doListBefore(FeedbackFileEntity query, Map<String, Object> model, Context context) throws AppException {
query.setOrderColList(Arrays.asList(new OrderCol("createTime")));
}
}
\ No newline at end of file
......@@ -5,6 +5,8 @@ import java.util.List;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.annotation.desensitization.IdCardDesensitize;
import com.mortals.framework.annotation.desensitization.MobileDesensitize;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.staff.model.vo.StaffVo;
import lombok.Data;
......@@ -40,11 +42,13 @@ public class StaffEntity extends StaffVo {
* 联系电话
*/
@Excel(name = "联系电话")
@MobileDesensitize
private String phoneNumber;
/**
* 身份证号码
*/
@Excel(name = "身份证号码")
@IdCardDesensitize
private String idCard;
/**
* 工号
......
package com.mortals.xhx.module.staff.model.vo;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.annotation.desensitization.IdCardDesensitize;
import com.mortals.framework.annotation.desensitization.MobileDesensitize;
import com.mortals.framework.model.BaseEntityLong;
import lombok.Data;
......@@ -12,6 +15,17 @@ import java.util.List;
@Data
public class StaffVo extends BaseEntityLong {
/**
* 联系电话
*/
@MobileDesensitize
private String phoneNumber;
/**
* 身份证号码
*/
@IdCardDesensitize
private String idCard;
private List <Long> idList;
private List<HolidayListVo> holidayLists;
......
......@@ -821,3 +821,34 @@ ALTER TABLE mortals_xhx_check_other_record ADD COLUMN `auditStatus` tinyint(1)
ALTER TABLE mortals_xhx_perform_attend_appeal ADD COLUMN `windowNum` varchar(255) DEFAULT '' COMMENT '窗口编号';
-- ----------------------------
-- 考勤打卡记录信息表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_attendance_record`;
CREATE TABLE mortals_xhx_attendance_record(
`id` bigint(20) AUTO_INCREMENT COMMENT '序号,主键,自增长',
`staffId` bigint(20) COMMENT '员工ID',
`staffName` varchar(64) NOT NULL COMMENT '员工姓名',
`workNum` varchar(128) COMMENT '工号',
`deptId` bigint(20) COMMENT '所属部门',
`deptName` varchar(128) COMMENT '所属部门名称',
`positionId` bigint(20) COMMENT '职位ID',
`positionName` varchar(128) COMMENT '职位名称',
`attendanceGroupId` bigint(20) COMMENT '所属考勤组ID',
`attendanceGroupName` varchar(128) COMMENT '所属考勤组名称',
`attendanceDate` datetime COMMENT '打卡日期',
`remark` varchar(255) COMMENT '备注',
`createUserId` bigint(20) NOT NULL COMMENT '创建用户',
`createTime` datetime NOT NULL COMMENT '创建时间',
`updateUserId` bigint(20) COMMENT '更新用户',
`updateTime` datetime COMMENT '更新时间',
`signInResult` tinyint(2) DEFAULT '0' COMMENT '签到结果(0.否,1.是)',
`signOutResult` tinyint(2) DEFAULT '0' COMMENT '签退结果(0.否,1.是)',
`attendType` varchar(128) DEFAULT '' COMMENT '考勤类型',
`punchResult` tinyint(2) DEFAULT '0' COMMENT '打卡结果(0.否,1.是)',
`classId` bigint(20) COMMENT '班次ID',
`className` varchar(128) COMMENT '班次名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='考勤打卡记录信息';
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment