Commit 2afbf419 authored by wenqy's avatar wenqy

原始数据生成规则数据修改,异常数据处理

parent 9168439b
......@@ -3,6 +3,8 @@ package com.mortals.xhx.module.attendance.model;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
......@@ -64,6 +66,8 @@ public class AttendanceRecordErrorEntity extends AttendanceRecordErrorVo {
/**
* 上下班时间
*/
@JsonFormat(pattern = "HH:mm")
@JSONField(format = "HH:mm")
private Date goOffDateTime;
/**
* 异常时间
......
package com.mortals.xhx.module.attendance.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
......@@ -9,6 +11,12 @@ import java.util.List;
* @author zxfei
* @date 2023-04-08
*/
@Data
public class AttendanceRecordErrorVo extends BaseEntityLong {
/**
* 上班or下班
*/
private String goOrOff;
}
package com.mortals.xhx.module.attendance.service;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
/**
* AttendanceRecordHikService
*
......@@ -11,4 +13,10 @@ import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
*/
public interface AttendanceRecordHikService extends ICRUDService<AttendanceRecordHikEntity,Long>{
/**
* 将原始数据导入打卡记录表
* @param entity
*/
public void addAttendanceRecord(AttendanceRecordHikEntity entity, Context context) throws Exception;
}
package com.mortals.xhx.module.attendance.service.impl;
import com.mortals.framework.service.IUser;
import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.module.attendance.model.*;
import com.mortals.xhx.module.attendance.service.*;
import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.service.StaffService;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.xhx.module.attendance.dao.AttendanceRecordHikDao;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
import com.mortals.framework.model.Context;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
* AttendanceRecordHikService
* 海康考勤打卡记录汇总信息 service实现
......@@ -16,4 +32,449 @@ import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
@Service("attendanceRecordHikService")
public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<AttendanceRecordHikDao, AttendanceRecordHikEntity, Long> implements AttendanceRecordHikService {
@Autowired
private DeptService deptService;
@Autowired
private AttendanceRecordService attendanceRecordService;
@Autowired
private AttendanceRecordHikService attendanceRecordHikService;
@Autowired
private AttendanceGroupStaffService attendanceGroupStaffService;
@Autowired
private AttendanceGroupService attendanceGroupService;
@Autowired
private AttendanceGroupFixedworkService attendanceGroupFixedworkService;
@Autowired
private AttendanceClassService attendanceClassService;
@Autowired
private AttendanceClassDetailService attendanceClassDetailService;
@Autowired
private StaffService staffService;
@Autowired
private UploadService uploadService;
@Autowired
private AttendanceExportRecordService attendanceExportRecordService;
@Autowired
private AttendanceRecordErrorService errorService;
@Override
public void addAttendanceRecord(AttendanceRecordHikEntity entity,Context context) throws Exception{
List<AttendanceRecordHikEntity> list = entity.getList();
//对考勤数据根据考勤时间进行排序
List<AttendanceRecordHikEntity> collect = list.stream().sorted(Comparator.comparing(AttendanceRecordHikEntity::getAttendanceDate)).collect(Collectors.toList());
//根据工号对考勤数据进行分组
Map<String, List<AttendanceRecordHikEntity>> listMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum));
//map遍历.先把所有键取出来
Set<String> workNumSet = listMap.keySet();
//根据键取出value
for (String workNum : workNumSet) {
List<AttendanceRecordHikEntity> attendanceRecordHikEntities1 = listMap.get(workNum);
//对按照工号分组了的数据attendanceRecordHikEntities进行时间分组
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
Map<String, List<AttendanceRecordHikEntity>> map = attendanceRecordHikEntities1.stream().collect(Collectors.groupingBy(hikEntity -> hikEntity.getAttendanceDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().format(formatter)));
Set<String> dateSet = map.keySet();
for (String s : dateSet) {
List<AttendanceRecordHikEntity> attendanceRecordHikEntities = map.get(s);
//对相同工号的人员进行遍历判断考勤规则.
AttendanceRecordEntity attendanceRecordEntity = new AttendanceRecordEntity();
List<AttendanceRecordDetailEntity> detailEntity = new ArrayList<>();
for (AttendanceRecordHikEntity item:attendanceRecordHikEntities) {
//对主表的对象进行赋值
if (StringUtils.isNull(attendanceRecordEntity)||StringUtils.isEmpty(attendanceRecordEntity.getStaffName())){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
attendanceRecordEntity.setStaffId(item.getStaffId());
attendanceRecordEntity.setStaffName(item.getStaffName());
attendanceRecordEntity.setDeptId(item.getDeptId());
attendanceRecordEntity.setDeptName(item.getDeptName());
attendanceRecordEntity.setPositionId(item.getPositionId());
attendanceRecordEntity.setPositionName(item.getPositionName());
attendanceRecordEntity.setWorkNum(item.getWorkNum());
IUser user = context.getUser();
attendanceRecordEntity.setCreateTime(new Date());
attendanceRecordEntity.setCreateUserId(user.getId());
attendanceRecordEntity.setAttendanceDate(sdf.parse(sdf.format(item.getAttendanceDate())));
}
//获取考勤打卡时间
Date attendanceDate = item.getAttendanceDate();
//通过工号查询员工信息
StaffQuery staffQuery = new StaffQuery();
StaffEntity staffEntity = staffService.selectOne(staffQuery.workNum(item.getWorkNum()));
//通过员工id查询考勤人员信息
AttendanceGroupStaffQuery attendanceGroupStaffQuery = new AttendanceGroupStaffQuery();
List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(attendanceGroupStaffQuery.staffId(staffEntity.getId()));
//查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组
if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size()==1){
//查询考勤组
AttendanceGroupQuery attendanceGroupQuery = new AttendanceGroupQuery();
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery attendanceGroupFixedworkQuery = new AttendanceGroupFixedworkQuery();
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(attendanceGroupFixedworkQuery.groupId(attendanceGroupEntity.getId()));
//判断当前考勤日期为周几
Date attendanceDate1 = attendanceDate;
String week = this.getWeek(attendanceDate1);
//通过考勤日期的星期拿到班次id.
Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
//weekClassId为-1 则不在考勤
if (weekClassId==-1L){
//跳过本次循环
continue;
}
//获取班次信息
AttendanceClassQuery attendanceClassQuery = new AttendanceClassQuery();
AttendanceClassEntity attendanceClassEntity = attendanceClassService.selectOne(attendanceClassQuery.id(weekClassId));
//获取班次详细信息
AttendanceClassDetailQuery attendanceClassDetailQuery = new AttendanceClassDetailQuery();
List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(attendanceClassDetailQuery.classId(attendanceClassEntity.getId()));
Integer orderNum = 0;
if (detailEntity==null||detailEntity.size()==0){
for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
orderNum++;
AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
recordDetailEntity.setShiftsId(classDetailEntity.getId());
recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
recordDetailEntity.setGoWorkResult(3);
recordDetailEntity.setOffWorkResult(3);
recordDetailEntity.setOrderNum(orderNum);
detailEntity.add(recordDetailEntity);
}
}
for (AttendanceClassDetailEntity classDetail :attendanceClassDetailEntities) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
//上班打卡前时间
Date goWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore())));
//上班打卡后时间
Date goWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter())));
//下班打卡前时间
Date offWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore())));
//下班打卡后时间
Date offWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter())));
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean goInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore, goWorkDateAfter);
//判断考勤时间是否在下班打卡区间内
boolean offInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), offWorkDateBefore, offWorkDateAfter);
if (goInTime==false && offInTime==false){
continue;
}
if (goInTime) {
//如果是上班打卡,判断是否迟到
boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore,sdf.parse(sdf.format(classDetail.getGoWorkDate())));
if (!inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().longValue() == classDetail.getId().longValue()){
attendanceRecordDetailEntity.setGoWorkResult(4);
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().longValue() == classDetail.getId().longValue()){
attendanceRecordDetailEntity.setGoWorkResult(1);
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
}
if(offInTime){
boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)),sdf.parse(sdf.format( classDetail.getOffWorkDate())), offWorkDateAfter);
if (!inTime){
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().longValue() == classDetail.getId().longValue()){
attendanceRecordDetailEntity.setOffWorkResult(5);
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
if (inTime){
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().longValue()== classDetail.getId().longValue()){
attendanceRecordDetailEntity.setOffWorkResult(1);
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
}
}
}
//如果考勤人员信息list长度大于1 则该考勤人员有多个考勤组.
if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size()>1){
for (AttendanceGroupStaffEntity groupStaffEntity:attendanceGroupStaffEntities){
{
//查询考勤组
AttendanceGroupQuery attendanceGroupQuery = new AttendanceGroupQuery();
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(groupStaffEntity.getGroupId()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery attendanceGroupFixedworkQuery = new AttendanceGroupFixedworkQuery();
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(attendanceGroupFixedworkQuery.groupId(attendanceGroupEntity.getId()));
//判断当前考勤日期为周几
Date attendanceDate1 = attendanceDate;
String week = this.getWeek(attendanceDate1);
//通过考勤日期的星期拿到班次id.
Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
//weekClassId为-1 则不在考勤
if (weekClassId==-1L){
//跳过本次循环
continue;
}
//获取班次信息
AttendanceClassQuery attendanceClassQuery = new AttendanceClassQuery();
AttendanceClassEntity attendanceClassEntity = attendanceClassService.selectOne(attendanceClassQuery.id(weekClassId));
//获取班次详细信息
AttendanceClassDetailQuery attendanceClassDetailQuery = new AttendanceClassDetailQuery();
List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(attendanceClassDetailQuery.classId(attendanceClassEntity.getId()));
Integer orderNum = 0;
if (detailEntity!=null&&detailEntity.size()>0){
for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
orderNum++;
AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
recordDetailEntity.setShiftsId(classDetailEntity.getId());
recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
recordDetailEntity.setGoWorkResult(3);
recordDetailEntity.setOffWorkResult(3);
recordDetailEntity.setOrderNum(orderNum);
detailEntity.add(recordDetailEntity);
}
}
for (AttendanceClassDetailEntity classDetail :attendanceClassDetailEntities) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
//上班打卡前时间
Date goWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore())));
//上班打卡后时间
Date goWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter())));
//下班打卡前时间
Date offWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore())));
//下班打卡后时间
Date offWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter())));
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean goInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore, goWorkDateAfter);
//判断考勤时间是否在下班打卡区间内
boolean offInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), offWorkDateBefore, offWorkDateAfter);
if (goInTime==false&&offInTime==false){
continue;
}
if (goInTime) {
//如果是上班打卡,判断是否迟到
boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore,sdf.parse(sdf.format(classDetail.getGoWorkDate())));
if (!inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getId())){
attendanceRecordDetailEntity.setGoWorkResult(4);
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getId())){
attendanceRecordDetailEntity.setGoWorkResult(1);
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
}
if(offInTime){
boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)),sdf.parse(sdf.format(classDetail.getOffWorkDate())), offWorkDateAfter);
if (!inTime){
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getId())){
attendanceRecordDetailEntity.setOffWorkResult(5);
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
if (inTime){
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getId())){
attendanceRecordDetailEntity.setOffWorkResult(1);
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
}
}
}
}
}
}
List<AttendanceRecordErrorEntity> errorEntityList = new ArrayList<>();
for (AttendanceRecordDetailEntity recordDetailEntity : detailEntity) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdft = new SimpleDateFormat("HH:mm:ss");
Integer goWorkResult = recordDetailEntity.getGoWorkResult();
Integer offWorkResult = recordDetailEntity.getOffWorkResult();
if (goWorkResult!=1){
AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
errorEntity.setStaffId(attendanceRecordEntity.getStaffId());
errorEntity.setStaffName(attendanceRecordEntity.getStaffName());
errorEntity.setWorkNum(attendanceRecordEntity.getWorkNum());
errorEntity.setDeptId(attendanceRecordEntity.getDeptId());
errorEntity.setDeptName(attendanceRecordEntity.getDeptName());
errorEntity.setPositionId(attendanceRecordEntity.getPositionId());
errorEntity.setPositionName(attendanceRecordEntity.getPositionName());
errorEntity.setShiftsId(recordDetailEntity.getShiftsId());
errorEntity.setShiftsName(recordDetailEntity.getShiftsName());
Date goWorkDate = attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getGoWorkDate();
errorEntity.setGoOffDateTime(goWorkDate);
if (recordDetailEntity.getGoWorkDate()!=null&&!recordDetailEntity.getGoWorkDate().equals("")){
errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
}else{
String s1 = s + " " + sdft.format(goWorkDate);
errorEntity.setErrorDateTime(sdf.parse(s1));
errorEntity.setActualAttendanceDateTime(sdf.parse(s1));
}
if (recordDetailEntity.getGoWorkResult()==3){
errorEntity.setErrorStatus(0);
}
if (recordDetailEntity.getGoWorkResult()==4){
errorEntity.setErrorStatus(2);
}
errorEntity.setProcessStatus(0);
IUser user = context.getUser();
errorEntity.setCreateTime(new Date());
errorEntity.setCreateUserId(user.getId());
errorEntityList.add(errorEntity);
}
if (offWorkResult!=1){
AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
errorEntity.setStaffId(attendanceRecordEntity.getStaffId());
errorEntity.setStaffName(attendanceRecordEntity.getStaffName());
errorEntity.setWorkNum(attendanceRecordEntity.getWorkNum());
errorEntity.setDeptId(attendanceRecordEntity.getDeptId());
errorEntity.setDeptName(attendanceRecordEntity.getDeptName());
errorEntity.setPositionId(attendanceRecordEntity.getPositionId());
errorEntity.setPositionName(attendanceRecordEntity.getPositionName());
errorEntity.setShiftsId(recordDetailEntity.getShiftsId());
errorEntity.setShiftsName(recordDetailEntity.getShiftsName());
Date offWorkDate = attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getOffWorkDate();
errorEntity.setGoOffDateTime(offWorkDate);
if (recordDetailEntity.getOffWorkDate()!=null&&!recordDetailEntity.getOffWorkDate().equals("")){
errorEntity.setErrorDateTime(recordDetailEntity.getOffWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getOffWorkDate());
}else {
errorEntity.setErrorDateTime(sdf.parse(s+ " "+sdft.format(offWorkDate)));
errorEntity.setActualAttendanceDateTime(sdf.parse(s+ " "+sdft.format(offWorkDate)));
}
if (recordDetailEntity.getOffWorkResult()==3){
errorEntity.setErrorStatus(0);
}
if (recordDetailEntity.getOffWorkResult()==5){
errorEntity.setErrorStatus(1);
}
errorEntity.setProcessStatus(0);
IUser user = context.getUser();
errorEntity.setCreateTime(new Date());
errorEntity.setCreateUserId(user.getId());
errorEntityList.add(errorEntity);
}
}
if (detailEntity!=null){
if (errorEntityList!=null&&errorEntityList.size()>0){
errorService.save(errorEntityList,context);
}
attendanceRecordEntity.setAttendanceRecordDetailList(detailEntity);
attendanceRecordService.save(attendanceRecordEntity,context);
}
}
}
}
public String getWeek(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
String week = sdf.format(date);
return week;
}
/**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤
* @return
*/
public Long getWeekClassId(AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity,String week){
Long weekClassId = 0L;
switch (week){
case "星期一":
if (attendanceGroupFixedworkEntity.getMonday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getMondayClassId();
break;
case "星期二":
if (attendanceGroupFixedworkEntity.getTuesday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getTuesdayClassId();
break;
case "星期三":
if (attendanceGroupFixedworkEntity.getWednesday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getWednesdayClassId();
break;
case "星期四":
if (attendanceGroupFixedworkEntity.getThursday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getThursdayClassId();
break;
case "星期五":
if (attendanceGroupFixedworkEntity.getFriday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getFridayClassId();
break;
case "星期六":
if (attendanceGroupFixedworkEntity.getSaturday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getSaturdayClassId();
break;
case "星期天":
if (attendanceGroupFixedworkEntity.getSunday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getSundayClassId();
break;
}
return weekClassId;
}
/**
*
* @param nowTime 当前时间
* @param startTime 开始时间
* @param endTime 结束时间
* @return
* 判断当前时间在时间区间内
*/
public static boolean isInTime(Date nowTime, Date startTime, Date endTime) {
if (nowTime.getTime() == startTime.getTime()
|| nowTime.getTime() == endTime.getTime()) {
return true;
}
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(startTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.after(begin) && date.before(end)) {
return true;
} else {
return false;
}
}
}
......@@ -50,8 +50,8 @@ public class AttendanceRecordServiceImpl extends AbstractCRUDServiceImpl<Attenda
if(!ObjectUtils.isEmpty(entity.getAttendanceRecordDetailList())){
entity.getAttendanceRecordDetailList().stream().peek(item->{
item.setRecordId(entity.getId());
item.setCreateUser(context.getUser().getLoginName());
item.setCreateUserId(context.getUser().getId());
item.setCreateUser(context==null?"admin":context.getUser().getLoginName());
item.setCreateUserId(context==null?1L:context.getUser().getId());
item.setCreateTime(new Date());
}).count();
attendanceRecordDetailService.save(entity.getAttendanceRecordDetailList());
......@@ -66,11 +66,11 @@ public class AttendanceRecordServiceImpl extends AbstractCRUDServiceImpl<Attenda
attendanceRecordDetailService.remove(attendanceRecordDetailIds,context);
entity.getAttendanceRecordDetailList().stream().peek(item ->{
item.setRecordId(entity.getId());
item.setCreateUser(context.getUser().getLoginName());
item.setCreateUserId(context.getUser().getId());
item.setCreateUser(context==null?"admin":context.getUser().getLoginName());
item.setCreateUserId(context==null?1L:context.getUser().getId());
item.setCreateTime(new Date());
item.setUpdateUser(context.getUser().getLoginName());
item.setUpdateUserId(context.getUser().getId());
item.setUpdateUser(context==null?"admin":context.getUser().getLoginName());
item.setUpdateUserId(context==null?1L:context.getUser().getId());
item.setUpdateTime(new Date());
}).count();
attendanceRecordDetailService.save(entity.getAttendanceRecordDetailList());
......
......@@ -23,6 +23,7 @@ import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSONObject;
......@@ -52,6 +53,9 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
@Autowired
private AttendanceClassService attendanceClassService;
@Autowired
private AttendanceClassDetailService classDetailService;
@Autowired
private AttendanceRecordService attendanceRecordService;
......@@ -76,7 +80,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
}
@PostMapping({"disposeError"})
@PostMapping(value = "disposeError")
public Rest<String> disposeError(@RequestBody AttendanceRecordErrorEntity query) {
Rest<String> ret = new Rest();
Context context = this.getContext();
......@@ -84,6 +88,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
query.setOperDateTime(new Date());
query.setProcessStatus(1);
errorService.update(query);
DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd);
AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery();
attendanceRecordQuery.setStaffId(query.getStaffId());
......@@ -94,21 +99,54 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
detailQuery.setRecordId(attendanceRecordEntity.getId());
detailQuery.setShiftsId(query.getShiftsId());
List<AttendanceRecordDetailEntity> attendanceRecordDetailEntity = attendanceRecordDetailService.find(detailQuery);
for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) {
Date goWorkDate = recordDetailEntity.getGoWorkDate();
Date offWorkDate = recordDetailEntity.getOffWorkDate();
if (goWorkDate.getTime()==query.getErrorDateTime().getTime()){
recordDetailEntity.setGoWorkResult(query.getErrorStatus());
if (query.getProcessResult().contains("正常")){
if (goWorkDate.getTime()==query.getGoOffDateTime().getTime()){
recordDetailEntity.setGoWorkResult(1);
}
if (offWorkDate.getTime()==query.getGoOffDateTime().getTime()){
recordDetailEntity.setOffWorkResult(1);
}
if (offWorkDate.getTime()==query.getErrorDateTime().getTime()){
recordDetailEntity.setOffWorkResult(query.getErrorStatus());
}
if (query.getProcessResult().contains("早退")){
if (offWorkDate.getTime()==query.getGoOffDateTime().getTime()){
recordDetailEntity.setOffWorkResult(5);
}
}
if (query.getProcessResult().contains("迟到")){
if (goWorkDate.getTime()==query.getGoOffDateTime().getTime()){
recordDetailEntity.setGoWorkResult(4);
}
}
attendanceRecordDetailService.update(recordDetailEntity);
}
return Rest.ok();
}
@Override
protected int editAfter(Long id, Map<String, Object> model, AttendanceRecordErrorEntity entity, Context context) throws AppException {
this.addDict(model, "errorStatus", paramService.getParamBySecondOrganize("AttendanceRecordError","errorStatus"));
return super.editAfter(id, model, entity, context);
}
@Override
protected void doListAfter(AttendanceRecordErrorEntity query, List<AttendanceRecordErrorEntity> list, Context context) throws AppException {
for (AttendanceRecordErrorEntity errorEntity : list) {
Long shiftsId = errorEntity.getShiftsId();
AttendanceClassDetailEntity attendanceClassDetailEntity = classDetailService.selectOne(new AttendanceClassDetailQuery().id(shiftsId));
if (errorEntity.getGoOffDateTime().getTime()==attendanceClassDetailEntity.getGoWorkDate().getTime()){
errorEntity.setGoOrOff("上班");
}
if (errorEntity.getGoOffDateTime().getTime()==attendanceClassDetailEntity.getOffWorkDate().getTime()){
errorEntity.setGoOrOff("下班");
}
}
super.doListAfter(query, list, context);
}
}
package com.mortals.xhx.module.attendance.web;
import cn.hutool.core.util.StrUtil;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.IUser;
import com.mortals.framework.util.StringUtils;
import com.mortals.framework.utils.ServletUtils;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.module.attendance.model.*;
import com.mortals.xhx.module.attendance.service.*;
import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import com.mortals.xhx.module.attendance.service.AttendanceExportRecordService;
import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.service.StaffService;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -28,12 +29,10 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* 海康考勤打卡记录汇总信息
......@@ -50,27 +49,13 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
@Autowired
private DeptService deptService;
@Autowired
private AttendanceRecordService attendanceRecordService;
@Autowired
private AttendanceRecordHikService attendanceRecordHikService;
@Autowired
private AttendanceGroupStaffService attendanceGroupStaffService;
@Autowired
private AttendanceGroupService attendanceGroupService;
@Autowired
private AttendanceGroupFixedworkService attendanceGroupFixedworkService;
@Autowired
private AttendanceClassService attendanceClassService;
@Autowired
private AttendanceClassDetailService attendanceClassDetailService;
@Autowired
private StaffService staffService;
@Autowired
private UploadService uploadService;
@Autowired
private AttendanceExportRecordService attendanceExportRecordService;
@Autowired
private AttendanceRecordErrorService errorService;
private AttendanceRecordHikService hikService;
public AttendanceRecordHikController(){
super.setModuleDesc( "海康考勤打卡记录汇总信息");
......@@ -133,394 +118,26 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
}
@PostMapping(value = "/addAttendanceRecord")
public void addAttendanceRecord(@RequestBody AttendanceRecordHikEntity hikEntity) throws ParseException {
List<AttendanceRecordHikEntity> list = hikEntity.getList();
//对考勤数据根据考勤时间进行排序
List<AttendanceRecordHikEntity> collect = list.stream().sorted(Comparator.comparing(AttendanceRecordHikEntity::getAttendanceDate)).collect(Collectors.toList());
//根据工号对考勤数据进行分组
Map<String, List<AttendanceRecordHikEntity>> listMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum));
//map遍历.先把所有键取出来
Set<String> workNumSet = listMap.keySet();
//根据键取出value
for (String workNum : workNumSet) {
List<AttendanceRecordHikEntity> attendanceRecordHikEntities1 = listMap.get(workNum);
//对按照工号分组了的数据attendanceRecordHikEntities进行时间分组
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
Map<String, List<AttendanceRecordHikEntity>> map = attendanceRecordHikEntities1.stream().collect(Collectors.groupingBy(entity -> entity.getAttendanceDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().format(formatter)));
Set<String> dateSet = map.keySet();
for (String s : dateSet) {
List<AttendanceRecordHikEntity> attendanceRecordHikEntities = map.get(s);
//对相同工号的人员进行遍历判断考勤规则.
AttendanceRecordEntity attendanceRecordEntity = new AttendanceRecordEntity();
List<AttendanceRecordDetailEntity> detailEntity = new ArrayList<>();
for (AttendanceRecordHikEntity item:attendanceRecordHikEntities) {
//对主表的对象进行赋值
if (Objects.nonNull(attendanceRecordEntity)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
attendanceRecordEntity.setStaffId(item.getStaffId());
attendanceRecordEntity.setStaffName(item.getStaffName());
attendanceRecordEntity.setDeptId(item.getDeptId());
attendanceRecordEntity.setDeptName(item.getDeptName());
attendanceRecordEntity.setPositionId(item.getPositionId());
attendanceRecordEntity.setPositionName(item.getPositionName());
attendanceRecordEntity.setWorkNum(item.getWorkNum());
IUser user = getContext().getUser();
attendanceRecordEntity.setCreateTime(new Date());
attendanceRecordEntity.setCreateUserId(user.getId());
attendanceRecordEntity.setAttendanceDate(sdf.parse(sdf.format(item.getAttendanceDate())));
}
//获取考勤打卡时间
Date attendanceDate = item.getAttendanceDate();
//通过工号查询员工信息
StaffQuery staffQuery = new StaffQuery();
StaffEntity staffEntity = staffService.selectOne(staffQuery.workNum(item.getWorkNum()));
//通过员工id查询考勤人员信息
AttendanceGroupStaffQuery attendanceGroupStaffQuery = new AttendanceGroupStaffQuery();
List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(attendanceGroupStaffQuery.staffId(staffEntity.getId()));
//查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组
if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size()==1){
//查询考勤组
AttendanceGroupQuery attendanceGroupQuery = new AttendanceGroupQuery();
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery attendanceGroupFixedworkQuery = new AttendanceGroupFixedworkQuery();
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(attendanceGroupFixedworkQuery.groupId(attendanceGroupEntity.getId()));
//判断当前考勤日期为周几
Date attendanceDate1 = attendanceDate;
String week = this.getWeek(attendanceDate1);
//通过考勤日期的星期拿到班次id.
Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
//weekClassId为-1 则不在考勤
if (weekClassId==-1L){
//跳过本次循环
continue;
}
//获取班次信息
AttendanceClassQuery attendanceClassQuery = new AttendanceClassQuery();
AttendanceClassEntity attendanceClassEntity = attendanceClassService.selectOne(attendanceClassQuery.id(weekClassId));
//获取班次详细信息
AttendanceClassDetailQuery attendanceClassDetailQuery = new AttendanceClassDetailQuery();
List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(attendanceClassDetailQuery.classId(attendanceClassEntity.getId()));
Integer orderNum = 0;
for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
orderNum++;
AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
recordDetailEntity.setShiftsId(classDetailEntity.getId());
recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
recordDetailEntity.setGoWorkResult(3);
recordDetailEntity.setOffWorkResult(3);
recordDetailEntity.setOrderNum(orderNum);
detailEntity.add(recordDetailEntity);
}
public Rest<String> addAttendanceRecord(@RequestBody AttendanceRecordHikEntity hikEntity) {
Rest<String> ret = new Rest();
Map<String, Object> model = new HashMap();
Context context = this.getContext();
String busiDesc = "查询" + this.getModuleDesc();
int code = 1;
try {
hikService.addAttendanceRecord(hikEntity, getContext());
model.put("message_info", busiDesc + "成功");
this.recordSysLog(this.request, busiDesc + " 【成功】");
} catch (Exception var9) {
code = -1;
this.doException(this.request, busiDesc, model, var9);
}
this.init(model, context);
ret.setCode(code);
ret.setMsg(model.get("message_info") == null ? "" : model.remove("message_info").toString());
return ret;
for (AttendanceClassDetailEntity classDetail :attendanceClassDetailEntities) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
//上班打卡前时间
Date goWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore())));
//上班打卡后时间
Date goWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter())));
//下班打卡前时间
Date offWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore())));
//下班打卡后时间
Date offWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter())));
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean goInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore, goWorkDateAfter);
//判断考勤时间是否在下班打卡区间内
boolean offInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), offWorkDateBefore, offWorkDateAfter);
if (goInTime==false && offInTime==false){
continue;
}
if (goInTime) {
//如果是上班打卡,判断是否迟到
boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore,sdf.parse(sdf.format(classDetail.getGoWorkDate())));
if (!inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
attendanceRecordDetailEntity.setGoWorkResult(4);
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
attendanceRecordDetailEntity.setGoWorkResult(1);
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
}
if(offInTime){
boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)),sdf.parse(sdf.format( classDetail.getOffWorkDate())), offWorkDateAfter);
if (!inTime){
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
attendanceRecordDetailEntity.setOffWorkResult(5);
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
if (inTime){
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
attendanceRecordDetailEntity.setOffWorkResult(1);
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
}
}
}
//如果考勤人员信息list长度大于1 则该考勤人员有多个考勤组.
if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size()>1){
for (AttendanceGroupStaffEntity groupStaffEntity:attendanceGroupStaffEntities){
{
//查询考勤组
AttendanceGroupQuery attendanceGroupQuery = new AttendanceGroupQuery();
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(groupStaffEntity.getGroupId()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery attendanceGroupFixedworkQuery = new AttendanceGroupFixedworkQuery();
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(attendanceGroupFixedworkQuery.groupId(attendanceGroupEntity.getId()));
//判断当前考勤日期为周几
Date attendanceDate1 = attendanceDate;
String week = this.getWeek(attendanceDate1);
//通过考勤日期的星期拿到班次id.
Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
//weekClassId为-1 则不在考勤
if (weekClassId==-1L){
//跳过本次循环
continue;
}
//获取班次信息
AttendanceClassQuery attendanceClassQuery = new AttendanceClassQuery();
AttendanceClassEntity attendanceClassEntity = attendanceClassService.selectOne(attendanceClassQuery.id(weekClassId));
//获取班次详细信息
AttendanceClassDetailQuery attendanceClassDetailQuery = new AttendanceClassDetailQuery();
List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(attendanceClassDetailQuery.classId(attendanceClassEntity.getId()));
Integer orderNum = 0;
for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
orderNum++;
AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
recordDetailEntity.setShiftsId(classDetailEntity.getId());
recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
recordDetailEntity.setGoWorkResult(3);
recordDetailEntity.setOffWorkResult(3);
recordDetailEntity.setOrderNum(orderNum);
detailEntity.add(recordDetailEntity);
}
for (AttendanceClassDetailEntity classDetail :attendanceClassDetailEntities) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
//上班打卡前时间
Date goWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore())));
//上班打卡后时间
Date goWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter())));
//下班打卡前时间
Date offWorkDateBefore = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore())));
//下班打卡后时间
Date offWorkDateAfter = sdf.parse(sdf.format(DateUtils.addMinutes(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter())));
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean goInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore, goWorkDateAfter);
//判断考勤时间是否在下班打卡区间内
boolean offInTime = isInTime(sdf.parse(sdf.format(attendanceDate)), offWorkDateBefore, offWorkDateAfter);
if (goInTime==false&&offInTime==false){
continue;
}
if (goInTime) {
//如果是上班打卡,判断是否迟到
boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)), goWorkDateBefore,sdf.parse(sdf.format(classDetail.getGoWorkDate())));
if (!inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
attendanceRecordDetailEntity.setGoWorkResult(4);
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
attendanceRecordDetailEntity.setGoWorkResult(1);
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
}
if(offInTime){
boolean inTime = isInTime(sdf.parse(sdf.format(attendanceDate)),sdf.parse(sdf.format(classDetail.getOffWorkDate())), offWorkDateAfter);
if (!inTime){
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
attendanceRecordDetailEntity.setOffWorkResult(5);
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
if (inTime){
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntity) {
if (attendanceRecordDetailEntity.getShiftsId().equals(classDetail.getClassId())){
attendanceRecordDetailEntity.setOffWorkResult(1);
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
}
}
}
}
}
}
List<AttendanceRecordErrorEntity> errorEntityList = new ArrayList<>();
for (AttendanceRecordDetailEntity recordDetailEntity : detailEntity) {
Integer goWorkResult = recordDetailEntity.getGoWorkResult();
Integer offWorkResult = recordDetailEntity.getOffWorkResult();
if (goWorkResult!=1){
AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
errorEntity.setStaffId(attendanceRecordEntity.getStaffId());
errorEntity.setStaffName(attendanceRecordEntity.getStaffName());
errorEntity.setWorkNum(attendanceRecordEntity.getWorkNum());
errorEntity.setDeptId(attendanceRecordEntity.getDeptId());
errorEntity.setDeptName(attendanceRecordEntity.getDeptName());
errorEntity.setPositionId(attendanceRecordEntity.getPositionId());
errorEntity.setPositionName(attendanceRecordEntity.getPositionName());
errorEntity.setShiftsId(recordDetailEntity.getShiftsId());
errorEntity.setShiftsName(recordDetailEntity.getShiftsName());
errorEntity.setGoOffDateTime(attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getGoWorkDate());
errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
errorEntity.setErrorStatus(recordDetailEntity.getGoWorkResult());
errorEntity.setProcessResult("0");
IUser user = getContext().getUser();
errorEntity.setCreateTime(new Date());
errorEntity.setCreateUserId(user.getId());
errorEntityList.add(errorEntity);
}
if (offWorkResult!=1){
AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
errorEntity.setStaffId(attendanceRecordEntity.getStaffId());
errorEntity.setStaffName(attendanceRecordEntity.getStaffName());
errorEntity.setWorkNum(attendanceRecordEntity.getWorkNum());
errorEntity.setDeptId(attendanceRecordEntity.getDeptId());
errorEntity.setDeptName(attendanceRecordEntity.getDeptName());
errorEntity.setPositionId(attendanceRecordEntity.getPositionId());
errorEntity.setPositionName(attendanceRecordEntity.getPositionName());
errorEntity.setShiftsId(recordDetailEntity.getShiftsId());
errorEntity.setShiftsName(recordDetailEntity.getShiftsName());
errorEntity.setGoOffDateTime(attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getOffWorkDate());
errorEntity.setErrorDateTime(recordDetailEntity.getOffWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getOffWorkDate());
errorEntity.setErrorStatus(recordDetailEntity.getOffWorkResult());
errorEntity.setProcessResult("0");
IUser user = getContext().getUser();
errorEntity.setCreateTime(new Date());
errorEntity.setCreateUserId(user.getId());
errorEntityList.add(errorEntity);
}
}
if (errorEntityList!=null&&errorEntityList.size()>0){
errorService.save(errorEntityList);
}
attendanceRecordEntity.setAttendanceRecordDetailList(detailEntity);
attendanceRecordService.save(attendanceRecordEntity);
}
}
}
public String getWeek(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
String week = sdf.format(date);
return week;
}
/**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤
* @return
*/
public Long getWeekClassId(AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity,String week){
Long weekClassId = 0L;
switch (week){
case "星期一":
if (attendanceGroupFixedworkEntity.getMonday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getMondayClassId();
break;
case "星期二":
if (attendanceGroupFixedworkEntity.getTuesday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getTuesdayClassId();
break;
case "星期三":
if (attendanceGroupFixedworkEntity.getWednesday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getWednesdayClassId();
break;
case "星期四":
if (attendanceGroupFixedworkEntity.getThursday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getThursdayClassId();
break;
case "星期五":
if (attendanceGroupFixedworkEntity.getFriday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getFridayClassId();
break;
case "星期六":
if (attendanceGroupFixedworkEntity.getSaturday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getSaturdayClassId();
break;
case "星期天":
if (attendanceGroupFixedworkEntity.getSunday()==0){
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getSundayClassId();
break;
}
return weekClassId;
}
/**
*
* @param nowTime 当前时间
* @param startTime 开始时间
* @param endTime 结束时间
* @return
* 判断当前时间在时间区间内
*/
public static boolean isInTime(Date nowTime, Date startTime, Date endTime) {
if (nowTime.getTime() == startTime.getTime()
|| nowTime.getTime() == endTime.getTime()) {
return true;
}
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(startTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.after(begin) && date.before(end)) {
return true;
} else {
return false;
}
}
......
package com.mortals.xhx.module.attendance.web;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.module.attendance.model.AttendanceClassQuery;
import com.mortals.xhx.module.attendance.model.AttendanceGroupQuery;
import com.mortals.xhx.module.attendance.service.AttendanceClassService;
import com.mortals.xhx.module.attendance.service.AttendanceGroupService;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -36,12 +42,24 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
@Autowired
private ParamService paramService;
@Autowired
private AttendanceGroupService attendanceGroupService;
@Autowired
private DeptService deptService;
@Autowired
private AttendanceClassService attendanceClassService;
public AttendanceStatController(){
super.setModuleDesc( "考勤汇总信息");
}
@Override
protected void init(Map<String, Object> model, Context context) {
this.addDict(model,"deptId",deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getDeptName())));
this.addDict(model,"groupId",attendanceGroupService.find(new AttendanceGroupQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getGroupName())));
this.addDict(model,"classId",attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getClassName())));
super.init(model, context);
}
......
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