Commit 54203264 authored by 赵啸非's avatar 赵啸非

修改考勤绩效记录汇总

parent a3d92a04
...@@ -52,18 +52,8 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -52,18 +52,8 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
@Autowired @Autowired
private AttendanceClassDetailService classDetailService; private AttendanceClassDetailService classDetailService;
@Autowired
private AttendanceClassService attendanceClassService;
@Autowired @Autowired
private PerformAttendRecordService performAttendRecordService; private PerformAttendRecordService performAttendRecordService;
@Autowired
private ApiWebPerformController apiWebPerformController;
@Autowired
private StaffService staffService;
@Autowired
private AttendanceStatService attendanceStatService;
@Autowired @Autowired
private ICacheService cacheService; private ICacheService cacheService;
@Autowired @Autowired
...@@ -99,92 +89,37 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -99,92 +89,37 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
@Override @Override
protected void updateAfter(AttendanceRecordErrorEntity entity, Context context) throws AppException { protected void updateAfter(AttendanceRecordErrorEntity entity, Context context) throws AppException {
if (YesNoEnum.YES.getValue() == entity.getProcessStatus()) { if (YesNoEnum.YES.getValue() == entity.getProcessStatus()) {
entity= this.get(entity.getId()); entity = this.get(entity.getId());
//判断后打绩效 //判断后打绩效
String ruleCode = "";
if (ErrorStatusEnum.早退.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) {
//判断时间差定义
Long earlyMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE);
if (earlyMin >= 0L && earlyMin < 5L) {
//早退5分钟内
ruleCode = "ATTEND1002";
}
if (earlyMin >= 5L && earlyMin < 60L) {
//早退5分钟内
ruleCode = "ATTEND1004";
}
if (earlyMin >= 60L) {
//早退5分钟内
ruleCode = "ATTEND1006";
}
}else {
ruleCode = "ATTEND1002";
}
} else if (ErrorStatusEnum.迟到.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) {
Long lateMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE); String ruleCode = getRuleCode(entity);
if (lateMin >= 0L && lateMin < 5L) {
//迟到5分钟内
ruleCode = "ATTEND1001";
}
if (lateMin >= 5L && lateMin < 60L) {
//迟到5-60
ruleCode = "ATTEND1003";
}
if (lateMin >= 60L) {
//迟到60分钟以上
ruleCode = "ATTEND1005";
}
}else{
//早退5分钟内
ruleCode = "ATTEND1001";
}
} else if (ErrorStatusEnum.缺卡.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
ruleCode = "ATTEND1007";
}
if (!ObjectUtils.isEmpty(ruleCode)) { if (!ObjectUtils.isEmpty(ruleCode)) {
AttendSaveReq attendSaveReq = new AttendSaveReq(); saveAttendPerformRecord(context, entity, ruleCode);
attendSaveReq.setAttendanceGroupId(entity.getAttendanceGroupId());
attendSaveReq.setAttendanceGroupName(entity.getAttendanceGroupName());
attendSaveReq.setAttendanceDate(entity.getActualAttendanceDateTime());
attendSaveReq.setErrorTime(entity.getErrorDateTime());
attendSaveReq.setGoOffTimeStr(entity.getGoOrOff());
attendSaveReq.setActualAttendTime(entity.getActualAttendanceDateTime());
attendSaveReq.setErrorResult(entity.getRemark());
attendSaveReq.setTitle("考勤");
attendSaveReq.setHappenTime(entity.getErrorDateTime());
attendSaveReq.setRuleCode(ruleCode);
attendSaveReq.setStaffId(entity.getStaffId());
performAttendRecordService.saveAttend(attendSaveReq, context);
} }
//异常处理后重新汇总考勤 context!=null时表示页面调用的修改,自动执行处理任务调用时context为null,无需立即汇总 //异常处理后重新汇总考勤 context!=null时表示页面调用的修改,自动执行处理任务调用时context为null,无需立即汇总
if(StringUtils.isNotEmpty(entity.getProcessResult())&&context!=null) { if (StringUtils.isNotEmpty(entity.getProcessResult()) && context != null) {
AttendanceSummaryQuery query = new AttendanceSummaryQuery(); AttendanceSummaryQuery query = new AttendanceSummaryQuery();
query.setStaffId(entity.getStaffId()); query.setStaffId(entity.getStaffId());
query.setSummaryTime(DateUtils.getStrDate(entity.getErrorDateTime())); query.setSummaryTime(DateUtils.getStrDate(entity.getErrorDateTime()));
// AttendSummaryThread summaryThread = new AttendSummaryThread(attendanceStatService, query); // AttendSummaryThread summaryThread = new AttendSummaryThread(attendanceStatService, query);
// ThreadPool.getInstance().execute(summaryThread); // ThreadPool.getInstance().execute(summaryThread);
cacheService.lpush(KEY_ATTENDANCE_STAT_CACHE,query); cacheService.lpush(KEY_ATTENDANCE_STAT_CACHE, query);
} }
} }
} }
@Override @Override
public boolean errorConfirm(Long errorId) { public boolean errorConfirm(Long errorId) {
boolean result = true; boolean result = true;
AttendanceRecordErrorEntity errorEntity = this.get(errorId); AttendanceRecordErrorEntity errorEntity = this.get(errorId);
if(errorEntity!=null) { if (errorEntity != null) {
AttendanceLeaveRecordQuery query = new AttendanceLeaveRecordQuery(); AttendanceLeaveRecordQuery query = new AttendanceLeaveRecordQuery();
query.setEndTimeStart(DateUtils.getStrDate(errorEntity.getErrorDateTime())); query.setEndTimeStart(DateUtils.getStrDate(errorEntity.getErrorDateTime()));
query.setLeavePersonId(errorEntity.getStaffId()); query.setLeavePersonId(errorEntity.getStaffId());
query.setAuditResult(AppealResultEnum.通过.getValue()); query.setAuditResult(AppealResultEnum.通过.getValue());
AttendanceLeaveRecordEntity leaveRecordEntity = attendanceLeaveRecordService.selectOne(query); AttendanceLeaveRecordEntity leaveRecordEntity = attendanceLeaveRecordService.selectOne(query);
if(leaveRecordEntity != null){ if (leaveRecordEntity != null) {
result = false; result = false;
} }
} }
...@@ -197,9 +132,9 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -197,9 +132,9 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
query.setErrorDateTimeStart(DateUtils.getStrDate(date)); query.setErrorDateTimeStart(DateUtils.getStrDate(date));
query.setErrorDateTimeEnd(DateUtils.getStrDate(date)); query.setErrorDateTimeEnd(DateUtils.getStrDate(date));
List<AttendanceRecordErrorEntity> list = this.find(query); List<AttendanceRecordErrorEntity> list = this.find(query);
if(CollectionUtils.isNotEmpty(list)){ if (CollectionUtils.isNotEmpty(list)) {
list.stream().forEach(item->{ list.stream().forEach(item -> {
if(errorConfirm(item.getId())){ if (errorConfirm(item.getId())) {
AttendanceRecordErrorEntity updateEntity = new AttendanceRecordErrorEntity(); AttendanceRecordErrorEntity updateEntity = new AttendanceRecordErrorEntity();
updateEntity.setId(item.getId()); updateEntity.setId(item.getId());
updateEntity.setProcessStatus(1); updateEntity.setProcessStatus(1);
...@@ -210,7 +145,7 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -210,7 +145,7 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
updateEntity.setRemark("系统自动处理"); updateEntity.setRemark("系统自动处理");
updateEntity.setUpdateTime(new Date()); updateEntity.setUpdateTime(new Date());
updateEntity.setUpdateUserId(1l); updateEntity.setUpdateUserId(1l);
this.update(updateEntity,null); this.update(updateEntity, null);
} }
}); });
} }
...@@ -225,79 +160,24 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -225,79 +160,24 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
query.setErrorDateTimeEnd(day); query.setErrorDateTimeEnd(day);
List<AttendanceRecordErrorEntity> list = this.find(query); List<AttendanceRecordErrorEntity> list = this.find(query);
if (CollectionUtils.isNotEmpty(list)) { if (CollectionUtils.isNotEmpty(list)) {
log.info("重新生成["+day+"]已处理的绩效考勤核查数据....."); log.info("重新生成[" + day + "]已处理的绩效考勤核查数据.....");
for (AttendanceRecordErrorEntity entity : list) { for (AttendanceRecordErrorEntity entity : list) {
// if (YesNoEnum.YES.getValue() == entity.getProcessStatus()) { // if (YesNoEnum.YES.getValue() == entity.getProcessStatus()) {
//判断后打绩效 //判断后打绩效
String ruleCode = ""; String ruleCode = getRuleCode(entity);
if (ErrorStatusEnum.早退.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) { if (!ObjectUtils.isEmpty(ruleCode)) {
if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) { saveAttendPerformRecord(context, entity, ruleCode);
//判断时间差定义
Long earlyMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE);
if (earlyMin >= 0L && earlyMin < 5L) {
//早退5分钟内
ruleCode = "ATTEND1002";
}
if (earlyMin >= 5L && earlyMin < 60L) {
//早退5分钟内
ruleCode = "ATTEND1004";
}
if (earlyMin >= 60L) {
//早退5分钟内
ruleCode = "ATTEND1006";
}
} else {
ruleCode = "ATTEND1002";
}
} else if (ErrorStatusEnum.迟到.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) {
Long lateMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE);
if (lateMin >= 0L && lateMin < 5L) {
//迟到5分钟内
ruleCode = "ATTEND1001";
}
if (lateMin >= 5L && lateMin < 60L) {
//迟到5-60
ruleCode = "ATTEND1003";
}
if (lateMin >= 60L) {
//迟到60分钟以上
ruleCode = "ATTEND1005";
}
} else {
//早退5分钟内
ruleCode = "ATTEND1001";
}
} else if (ErrorStatusEnum.缺卡.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
ruleCode = "ATTEND1007";
}
if (!ObjectUtils.isEmpty(ruleCode)) {
AttendSaveReq attendSaveReq = new AttendSaveReq();
attendSaveReq.setAttendanceGroupId(entity.getAttendanceGroupId());
attendSaveReq.setAttendanceGroupName(entity.getAttendanceGroupName());
attendSaveReq.setAttendanceDate(entity.getActualAttendanceDateTime());
attendSaveReq.setErrorTime(entity.getErrorDateTime());
attendSaveReq.setGoOffTimeStr(entity.getGoOrOff());
attendSaveReq.setActualAttendTime(entity.getActualAttendanceDateTime());
attendSaveReq.setErrorResult(entity.getRemark());
attendSaveReq.setTitle("考勤");
attendSaveReq.setHappenTime(entity.getErrorDateTime());
attendSaveReq.setRuleCode(ruleCode);
attendSaveReq.setStaffId(entity.getStaffId());
performAttendRecordService.saveAttend(attendSaveReq, context);
}
} }
} }
// } }
// }
} }
log.info("从新生成已处理的绩效考勤核查数据,执行完成....."); log.info("从新生成已处理的绩效考勤核查数据,执行完成.....");
} }
private List<String> getDatesBetween(String startDateStr, String endDateStr) { private List<String> getDatesBetween(String startDateStr, String endDateStr) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate startDate = LocalDate.parse(startDateStr, formatter); LocalDate startDate = LocalDate.parse(startDateStr, formatter);
...@@ -328,11 +208,96 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -328,11 +208,96 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
query.setStaffId(attendanceRecordErrorEntity.getStaffId()); query.setStaffId(attendanceRecordErrorEntity.getStaffId());
query.setErrorTime(attendanceRecordErrorEntity.getErrorDateTime()); query.setErrorTime(attendanceRecordErrorEntity.getErrorDateTime());
List<PerformAttendRecordEntity> delAttendRecords = performAttendRecordService.find(query, context); List<PerformAttendRecordEntity> delAttendRecords = performAttendRecordService.find(query, context);
if(!ObjectUtils.isEmpty(delAttendRecords)){ if (!ObjectUtils.isEmpty(delAttendRecords)) {
Long[] delIds = delAttendRecords.stream().map(i -> i.getId()).toArray(Long[]::new); Long[] delIds = delAttendRecords.stream().map(i -> i.getId()).toArray(Long[]::new);
performAttendRecordService.remove(delIds, context); performAttendRecordService.remove(delIds, context);
log.info("删除考勤记录成功,size:{}",delIds.length); log.info("删除考勤记录成功,size:{}", delIds.length);
}
}
}
@Override
protected void saveAfter(List<AttendanceRecordErrorEntity> list, Context context) throws AppException {
super.saveAfter(list, context);
if (!ObjectUtils.isEmpty(list)) {
log.info("生成绩效考勤核查数据.....");
for (AttendanceRecordErrorEntity entity : list) {
// if (YesNoEnum.YES.getValue() == entity.getProcessStatus()) {
//判断后打绩效
String ruleCode = getRuleCode(entity);
if (!ObjectUtils.isEmpty(ruleCode)) {
saveAttendPerformRecord(context, entity, ruleCode);
}
}
}
}
private void saveAttendPerformRecord(Context context, AttendanceRecordErrorEntity entity, String ruleCode) {
AttendSaveReq attendSaveReq = new AttendSaveReq();
attendSaveReq.setAttendanceGroupId(entity.getAttendanceGroupId());
attendSaveReq.setAttendanceGroupName(entity.getAttendanceGroupName());
attendSaveReq.setAttendanceDate(entity.getActualAttendanceDateTime());
attendSaveReq.setErrorTime(entity.getErrorDateTime());
attendSaveReq.setGoOffTimeStr(entity.getGoOrOff());
attendSaveReq.setActualAttendTime(entity.getActualAttendanceDateTime());
attendSaveReq.setErrorResult(entity.getRemark());
attendSaveReq.setTitle("考勤");
attendSaveReq.setHappenTime(entity.getErrorDateTime());
attendSaveReq.setRuleCode(ruleCode);
attendSaveReq.setStaffId(entity.getStaffId());
performAttendRecordService.saveAttend(attendSaveReq, context);
}
private static String getRuleCode(AttendanceRecordErrorEntity entity) {
String ruleCode = "";
if (ErrorStatusEnum.早退.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) {
//判断时间差定义
Long earlyMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE);
if (earlyMin >= 0L && earlyMin < 5L) {
//早退5分钟内
ruleCode = "ATTEND1002";
}
if (earlyMin >= 5L && earlyMin < 60L) {
//早退5分钟内
ruleCode = "ATTEND1004";
}
if (earlyMin >= 60L) {
//早退5分钟内
ruleCode = "ATTEND1006";
}
} else {
ruleCode = "ATTEND1002";
}
} else if (ErrorStatusEnum.迟到.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) {
Long lateMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE);
if (lateMin >= 0L && lateMin < 5L) {
//迟到5分钟内
ruleCode = "ATTEND1001";
}
if (lateMin >= 5L && lateMin < 60L) {
//迟到5-60
ruleCode = "ATTEND1003";
}
if (lateMin >= 60L) {
//迟到60分钟以上
ruleCode = "ATTEND1005";
}
} else {
//早退5分钟内
ruleCode = "ATTEND1001";
} }
} else if (ErrorStatusEnum.缺卡.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
ruleCode = "ATTEND1007";
} }
return ruleCode;
} }
} }
\ No newline at end of file
...@@ -257,7 +257,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -257,7 +257,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
attendanceRecordEntity.setId(recordEntity.getId()); attendanceRecordEntity.setId(recordEntity.getId());
attendanceRecordEntity.setUpdateTime(new Date()); attendanceRecordEntity.setUpdateTime(new Date());
attendanceRecordEntity.setUpdateUserId(this.getContextUserId(context)); attendanceRecordEntity.setUpdateUserId(this.getContextUserId(context));
updateList.add(attendanceRecordEntity); updateList.add(attendanceRecordEntity);
// attendanceRecordService.update(attendanceRecordEntity, context); // attendanceRecordService.update(attendanceRecordEntity, context);
} else { } else {
...@@ -378,6 +377,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -378,6 +377,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
attendanceRecordEntity.setClassName(attendanceClassDetailEntity == null ? "" : attendanceClassDetailEntity.getClassName()); attendanceRecordEntity.setClassName(attendanceClassDetailEntity == null ? "" : attendanceClassDetailEntity.getClassName());
} }
//生成异常记录 //生成异常记录
log.info("开始生成异常考勤记录");
genErrorAttendRecord(context, dateStr, attendanceRecordEntity, detailEntityList); genErrorAttendRecord(context, dateStr, attendanceRecordEntity, detailEntityList);
if (!ObjectUtils.isEmpty(detailEntityList)) { if (!ObjectUtils.isEmpty(detailEntityList)) {
attendanceRecordEntity.setAttendanceRecordDetailList(detailEntityList); attendanceRecordEntity.setAttendanceRecordDetailList(detailEntityList);
...@@ -497,8 +497,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -497,8 +497,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
if (OffWorkResultEnum.迟到.getValue() == recordDetailEntity.getOffWorkResult()) { if (OffWorkResultEnum.迟到.getValue() == recordDetailEntity.getOffWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.迟到.getValue()); errorEntity.setErrorStatus(ErrorStatusEnum.迟到.getValue());
} }
errorEntityList.add(errorEntity); errorEntityList.add(errorEntity);
} }
...@@ -509,140 +507,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -509,140 +507,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
} }
} }
private Boolean checkDouble(List<AttendanceRecordErrorEntity> errorEntityList, AttendanceRecordErrorEntity checkError) {
//检测 新加 的错误 是否存在与列表中
boolean bool = true;
for (AttendanceRecordErrorEntity error : errorEntityList) {
//
//if(error.getStaffId()==checkError.getStaffId()&&error.getShiftsId()=)
}
return bool;
}
private void checkAttendGroupByOne(AttendanceRecordEntity attendanceRecordEntity, List<AttendanceRecordDetailEntity> detailEntityList, Date attendanceDate, AttendanceGroupStaffEntity attendanceGroupStaffEntity, Context context) {
//查询考勤组
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.get(attendanceGroupStaffEntity.getGroupId(), context);
attendanceRecordEntity.setAttendanceGroupId(attendanceGroupEntity == null ? 0L : attendanceGroupEntity.getId());
attendanceRecordEntity.setAttendanceGroupName(attendanceGroupEntity == null ? "" : attendanceGroupEntity.getGroupName());
//查询考勤组详细信息获取班次 todo 默认固定班次 还有自由 与排班制
AttendanceWorkAbstract workAbstract = AttendanceWorkAbstract.newType(attendanceGroupEntity.getType());
CommonData commonData = new CommonData();
commonData.setAttendanceGroupEntity(attendanceGroupEntity);
commonData.setAttendanceDate(attendanceDate);
commonData.setDetailEntityList(detailEntityList);
commonData.setStaffId(attendanceRecordEntity.getStaffId());
workAbstract.doHandleWork(commonData);
/*
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery()
.groupId(attendanceGroupEntity.getId()));
//判断当前考勤日期为周几
String week = this.getWeek(attendanceDate);
//log.info("week:{}", week);
//通过考勤日期的星期拿到班次id.
if (ObjectUtils.isEmpty(attendanceGroupFixedworkEntity)) {
log.info("attendanceGroupFixedworkEntity is null ! groupId:{}", attendanceGroupEntity.getId());
return;
}
//获取当前日期的详细班次
Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
//log.info("weekClassId:{}", weekClassId);
//weekClassId为-1 则不在考勤
if (weekClassId == -1L) {
//跳过本次循环
return;
}
//获取班次信息
AttendanceClassEntity attendanceClassEntity = attendanceClassService.get(weekClassId);
if (ObjectUtils.isEmpty(attendanceClassEntity)) {
log.info("attendanceClassEntity is null ,weekClassId:{}", weekClassId);
return;
}
//List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceClassEntity.getId()));
//获取当前班的多个班次,一个班次为一个上下班时间段
List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassEntity.getAttendanceClassDetailList();
Integer orderNum = 0;
//构造数据
if (ObjectUtils.isEmpty(detailEntityList)) {
//遍历班次 构建详细考勤数据
for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
orderNum++;
AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
recordDetailEntity.setShiftsId(classDetailEntity.getId());
recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
recordDetailEntity.setGoWorkResult(GoWorkResultEnum.缺卡.getValue());
recordDetailEntity.setOffWorkResult(GoWorkResultEnum.缺卡.getValue());
recordDetailEntity.setOrderNum(orderNum);
detailEntityList.add(recordDetailEntity);
}
}
for (AttendanceClassDetailEntity classDetail : attendanceClassDetailEntities) {
//计算区间范围
//上班打卡前时间
Date goWorkDateBefore = DateUtil.offsetMinute(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore());
//上班打卡后时间
Date goWorkDateAfter = DateUtil.offsetMinute(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter());
// 下班打卡前时间
Date offWorkDateBefore = DateUtil.offsetMinute(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore());
//下班打卡后时间
Date offWorkDateAfter = DateUtil.offsetMinute(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter());
//判断考勤时间是否在上班打卡区间内 true 在 false 不在 格式化时间
//String currDate = DateUtil.formatTime(attendanceDate);
Date curDateTime = DateUtil.parseTime(DateUtil.formatTime(attendanceDate)).toJdkDate();
boolean goInTime = DateUtil.isIn(curDateTime, goWorkDateBefore, goWorkDateAfter);
//判断考勤时间是否在下班打卡区间内
boolean offInTime = DateUtil.isIn(curDateTime, offWorkDateBefore, offWorkDateAfter);
if (goInTime == false && offInTime == false) {
log.info("考勤时间不在上班区间与下班区间中,不做处理!attendDate:{}", DateUtil.formatDateTime(attendanceDate));
continue;
}
if (goInTime) {
//如果是上班打卡区间范围,判断是否迟到
boolean inTime = DateUtil.isIn(curDateTime, goWorkDateBefore, classDetail.getGoWorkDate());
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getId()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.正常.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
} else {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getId()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.迟到.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
}
if (offInTime) {
boolean inTime = DateUtil.isIn(curDateTime, classDetail.getOffWorkDate(), offWorkDateAfter);
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getId()) {
attendanceRecordDetailEntity.setOffWorkResult(GoWorkResultEnum.正常.getValue());
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
} else {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getId()) {
attendanceRecordDetailEntity.setOffWorkResult(GoWorkResultEnum.早退.getValue());
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
}
}*/
}
public String getWeek(Date date) { public String getWeek(Date date) {
// Get the day of the week (1 = Sunday, 2 = Monday, ..., 7 = Saturday) // Get the day of the week (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int dayOfWeek = DateUtil.dayOfWeek(date); int dayOfWeek = DateUtil.dayOfWeek(date);
......
package com.mortals.xhx.module.perform.service; package com.mortals.xhx.module.perform.service;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.perform.model.PerformEffectRecordEntity; import com.mortals.xhx.module.perform.model.PerformEffectRecordEntity;
import com.mortals.xhx.module.perform.dao.PerformEffectRecordDao; import com.mortals.xhx.module.perform.dao.PerformEffectRecordDao;
import com.mortals.xhx.module.perform.model.PerformEffectRecordQuery;
import org.springframework.web.bind.annotation.RequestBody;
/** /**
* PerformEffectRecordService * PerformEffectRecordService
* *
...@@ -23,4 +27,8 @@ public interface PerformEffectRecordService extends ICRUDService<PerformEffectRe ...@@ -23,4 +27,8 @@ public interface PerformEffectRecordService extends ICRUDService<PerformEffectRe
*/ */
void updateProcessStatus(Long id,Integer status) throws AppException; void updateProcessStatus(Long id,Integer status) throws AppException;
void syncEffectRecord(PerformEffectRecordQuery query, Context context);
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ import com.mortals.xhx.common.utils.BeanUtil; ...@@ -5,6 +5,7 @@ import com.mortals.xhx.common.utils.BeanUtil;
import com.mortals.xhx.module.check.model.CheckEffectRecordEntity; import com.mortals.xhx.module.check.model.CheckEffectRecordEntity;
import com.mortals.xhx.module.check.service.CheckEffectRecordService; import com.mortals.xhx.module.check.service.CheckEffectRecordService;
import com.mortals.xhx.module.perform.model.PerformComplainRecordEntity; import com.mortals.xhx.module.perform.model.PerformComplainRecordEntity;
import com.mortals.xhx.module.perform.model.PerformEffectRecordQuery;
import com.mortals.xhx.module.perform.model.PerformRulesEntity; import com.mortals.xhx.module.perform.model.PerformRulesEntity;
import com.mortals.xhx.module.perform.service.PerformRulesService; import com.mortals.xhx.module.perform.service.PerformRulesService;
import com.mortals.xhx.module.perform.service.PerformStaffConfService; import com.mortals.xhx.module.perform.service.PerformStaffConfService;
...@@ -113,4 +114,9 @@ public class PerformEffectRecordServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -113,4 +114,9 @@ public class PerformEffectRecordServiceImpl extends AbstractCRUDServiceImpl<Perf
dao.update(update); dao.update(update);
} }
@Override
public void syncEffectRecord(PerformEffectRecordQuery query, Context context) {
}
} }
\ No newline at end of file
package com.mortals.xhx.module.perform.web; package com.mortals.xhx.module.perform.web;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.OrderCol; import com.mortals.framework.model.OrderCol;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
...@@ -7,10 +11,14 @@ import com.mortals.xhx.base.system.param.service.ParamService; ...@@ -7,10 +11,14 @@ import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.base.system.user.model.UserQuery; import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.common.code.*; import com.mortals.xhx.common.code.*;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery;
import com.mortals.xhx.module.dept.model.DeptQuery; import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService; import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.perform.model.PerformEffectRecordQuery;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.util.StopWatch;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -42,6 +50,7 @@ import static com.mortals.framework.ap.SysConstains.*; ...@@ -42,6 +50,7 @@ import static com.mortals.framework.ap.SysConstains.*;
*/ */
@RestController @RestController
@RequestMapping("perform/effect/record") @RequestMapping("perform/effect/record")
@Slf4j
public class PerformEffectRecordController extends BaseCRUDJsonBodyMappingController<PerformEffectRecordService,PerformEffectRecordEntity,Long> { public class PerformEffectRecordController extends BaseCRUDJsonBodyMappingController<PerformEffectRecordService,PerformEffectRecordEntity,Long> {
@Autowired @Autowired
...@@ -87,4 +96,43 @@ public class PerformEffectRecordController extends BaseCRUDJsonBodyMappingContro ...@@ -87,4 +96,43 @@ public class PerformEffectRecordController extends BaseCRUDJsonBodyMappingContro
//query.setHappenTimeEnd(DateUtil.formatDate(query.getCreateTime())); //query.setHappenTimeEnd(DateUtil.formatDate(query.getCreateTime()));
} }
} }
@PostMapping(value = "/sync")
@UnAuth
public Rest<String> syncEffectRecord(@RequestBody PerformEffectRecordQuery query) {
Rest<String> ret = new Rest();
Map<String, Object> model = new HashMap();
Context context = this.getContext();
String busiDesc = "查询" + this.getModuleDesc();
int code = 1;
try {
//天数区间分段计算
DateTime attendStart = DateUtil.parseDate(query.getHappenTimeStart());
DateTime attendEnd = DateUtil.parseDate(query.getHappenTimeEnd());
Long compare = DateUtil.between(attendEnd, attendStart, DateUnit.DAY);
StopWatch stopWatch = new StopWatch("stopwatch attend1");
log.info("效能同步计算天数区间:{}", compare);
for (int i = 0; i <= compare.intValue(); i++) {
DateTime curDate = DateUtil.offsetDay(attendStart, i);
log.info("效能同步记录日期:{}", curDate.toDateStr());
stopWatch.start("执行本地方法");
stopWatch.stop();
log.info("效能同步记录日期:{} 完成,耗时:{}ms", curDate.toDateStr(), stopWatch.getLastTaskTimeMillis());
}
model.put("message_info", busiDesc + "成功");
this.recordSysLog(this.request, busiDesc + " 【成功】");
} catch (Exception e) {
code = -1;
this.doException(this.request, busiDesc, model, e);
model.put("message_info", e.getMessage());
}
this.init(model, context);
ret.setCode(code);
ret.setMsg(model.get("message_info") == null ? "" : model.remove("message_info").toString());
return ret;
}
} }
\ No newline at end of file
...@@ -19,8 +19,8 @@ POST {{baseUrl}}/attendance/record/error/doReprocess ...@@ -19,8 +19,8 @@ POST {{baseUrl}}/attendance/record/error/doReprocess
Content-Type: application/json Content-Type: application/json
{ {
"errorDateTimeStart":"2024-01-01", "errorDateTimeStart":"2024-02-01",
"errorDateTimeEnd":"2024-01-30" "errorDateTimeEnd":"2024-02-29"
} }
......
...@@ -34,17 +34,15 @@ Content-Type: application/json ...@@ -34,17 +34,15 @@ Content-Type: application/json
###海康考勤打卡记录计算 ###海康考勤打卡记录计算
POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord
Authorization: {{authToken}}
Content-Type: application/json Content-Type: application/json
{ {
"attendanceDateStart":"2024-03-01", "attendanceDateStart":"2024-02-01",
"attendanceDateEnd":"2024-03-13" "attendanceDateEnd":"2024-02-02"
} }
###海康考勤打卡记录计算1 ###海康考勤打卡记录计算1
POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord
Authorization: {{authToken}}
Content-Type: application/json Content-Type: application/json
{ {
...@@ -77,10 +75,10 @@ Content-Type: application/json ...@@ -77,10 +75,10 @@ Content-Type: application/json
###考勤汇总计算 ###考勤汇总计算
POST {{baseUrl}}//attendance/stat/summary POST {{baseUrl}}/attendance/stat/summary
Content-Type: application/json Content-Type: application/json
{"summaryTimeStart":"2024-03-01","summaryTimeEnd":"2024-03-13"} {"summaryTimeStart":"2024-03-15","summaryTimeEnd":"2024-03-15"}
###短信设置编辑 ###短信设置编辑
......
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