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

优化考勤计算

parent b3ae1ba2
...@@ -39,7 +39,7 @@ import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_CACHE; ...@@ -39,7 +39,7 @@ import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_CACHE;
import static com.mortals.xhx.common.key.RedisKey.KEY_CHECK_SUMMARY_CACHE; import static com.mortals.xhx.common.key.RedisKey.KEY_CHECK_SUMMARY_CACHE;
/** /**
* 同步获取下午海康门禁事件 * 统计计算考勤
*/ */
@Slf4j @Slf4j
@Service("SyncDoorsEventAfterTask") @Service("SyncDoorsEventAfterTask")
...@@ -58,12 +58,10 @@ public class SyncDoorsEventAfterTaskImpl implements ITaskExcuteService { ...@@ -58,12 +58,10 @@ public class SyncDoorsEventAfterTaskImpl implements ITaskExcuteService {
@Override @Override
public void excuteTask(ITask task) throws AppException { public void excuteTask(ITask task) throws AppException {
// syncDoorEvents();
//判断时间段 不在时间段的 不做计算 //判断时间段 不在时间段的 不做计算
//早上9点 子晚上8点 计算 //早上9点 子晚上8点 计算
Date beginDateTime = DateUtil.parseDateTime(DateUtil.today() + " 07:00:00"); Date beginDateTime = DateUtil.parseDateTime(DateUtil.today() + " 07:00:00");
Date endDateTime = DateUtil.parseDateTime(DateUtil.today() + " 23:30:00"); Date endDateTime = DateUtil.parseDateTime(DateUtil.today() + " 23:30:00");
boolean in = DateUtil.isIn(new Date(), beginDateTime, endDateTime); boolean in = DateUtil.isIn(new Date(), beginDateTime, endDateTime);
if (in) { if (in) {
calculateAttendByDay(); calculateAttendByDay();
...@@ -71,16 +69,6 @@ public class SyncDoorsEventAfterTaskImpl implements ITaskExcuteService { ...@@ -71,16 +69,6 @@ public class SyncDoorsEventAfterTaskImpl implements ITaskExcuteService {
query.setSummaryTimeStart(DateUtil.today()); query.setSummaryTimeStart(DateUtil.today());
query.setSummaryTimeEnd(DateUtil.today()); query.setSummaryTimeEnd(DateUtil.today());
cacheService.lpush(KEY_ATTENDANCE_STAT_CACHE, query); cacheService.lpush(KEY_ATTENDANCE_STAT_CACHE, query);
/* //绩效汇总
log.info("汇总当天绩效分数开始");
StaffCheckSummaryQuery summaryQuery = new StaffCheckSummaryQuery();
summaryQuery.setCheckType(CheckTypeEnum.考勤绩效.getValue());
summaryQuery.setCheckTimeStart(DateUtils.getDateTime(new Date(),"yyyy-MM")+"-01");
summaryQuery.setCheckTimeEnd(DateUtils.getCurrStrDate());
cacheService.lpush(KEY_CHECK_SUMMARY_CACHE, query);
log.info("汇总当天绩效分数结束");*/
} }
//统计当日 //统计当日
log.info("统计当日考勤"); log.info("统计当日考勤");
......
...@@ -78,7 +78,6 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService { ...@@ -78,7 +78,6 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
hikQuery.setAttendanceDateEnd(DateUtil.today()); hikQuery.setAttendanceDateEnd(DateUtil.today());
if (!ObjectUtils.isEmpty(hikhost)) { if (!ObjectUtils.isEmpty(hikhost)) {
recordHikService.syncDoorEvents(hikQuery); recordHikService.syncDoorEvents(hikQuery);
//recordHikService.deletFakeRecord(hikQuery, null);
} else { } else {
log.info("同步设备上门禁事件!"); log.info("同步设备上门禁事件!");
HikDoorEventReq hikDoorEventReq = new HikDoorEventReq(); HikDoorEventReq hikDoorEventReq = new HikDoorEventReq();
...@@ -88,7 +87,6 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService { ...@@ -88,7 +87,6 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
for (DoorEntity doorEntity : doorEntities) { for (DoorEntity doorEntity : doorEntities) {
doorService.syncDoorDeviceEvents(doorEntity, hikDoorEventReq); doorService.syncDoorDeviceEvents(doorEntity, hikDoorEventReq);
} }
// recordHikService.deletFakeRecord(hikQuery, null);
} }
} }
} }
......
...@@ -819,7 +819,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -819,7 +819,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
recordHikEntity.setSalaName(staffCache.getSalaName()); recordHikEntity.setSalaName(staffCache.getSalaName());
recordHikEntity.setPositionId(staffCache.getPositionId()); recordHikEntity.setPositionId(staffCache.getPositionId());
recordHikEntity.setPositionName(staffCache.getPositionName()); recordHikEntity.setPositionName(staffCache.getPositionName());
recordHikEntity.setAttendanceDate(item.getEventTime()); recordHikEntity.setAttendanceDate(item.getEventTime());
recordHikEntity.setAttendanceAddress(item.getDoorName()); recordHikEntity.setAttendanceAddress(item.getDoorName());
recordHikEntity.setEventSource("门禁点"); recordHikEntity.setEventSource("门禁点");
...@@ -829,7 +828,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -829,7 +828,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
recordHikEntity.setCreateUserId(1L); recordHikEntity.setCreateUserId(1L);
return recordHikEntity; return recordHikEntity;
}).filter(f -> f != null).collect(Collectors.toList()); }).filter(f -> f != null).collect(Collectors.toList());
log.info("attRecords size:{}", attRecords.size()); log.info("receive recordHikRecords size:{}", attRecords.size());
List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList()); List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList());
//查询当天考勤记录是否有重复的 有的 则不添加 //查询当天考勤记录是否有重复的 有的 则不添加
...@@ -850,16 +849,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -850,16 +849,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
//log.error("基础考勤数据保存异常", e.getMessage()); //log.error("基础考勤数据保存异常", e.getMessage());
} }
} }
// recordHikService.save(saveRecordList);
} }
log.info("saveRecordList size:{}", saveRecordList.size()); log.info("saveRecordList size:{}", saveRecordList.size());
/* AttendanceRecordHikQuery hikQuery = new AttendanceRecordHikQuery();
hikQuery.setAttendanceDateStart(DateUtil.beginOfMonth(new Date()).toDateStr());
hikQuery.setAttendanceDateEnd(DateUtil.today());
Long totalCache = this.find(hikQuery).parallelStream().map(item -> item.getStaffId()).distinct().count();
*///cacheService.hset(RedisKey.KEY_ATTENC_TOTOAL_CACHE, DateUtil.format(new Date(), "yyyy-MM"), totalCache);
} }
} }
...@@ -614,12 +614,10 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -614,12 +614,10 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
if (staffStatTemp != null) { if (staffStatTemp != null) {
staffStat.setId(staffStatTemp.getId()); staffStat.setId(staffStatTemp.getId());
staffStat.setUpdateTime(new Date()); staffStat.setUpdateTime(new Date());
//attendanceStaffStatService.update(staffStat);
updateStaffStat.add(staffStat); updateStaffStat.add(staffStat);
} else { } else {
staffStat.setCreateTime(DateUtils.StrToDate(query.getSummaryTime())); staffStat.setCreateTime(DateUtils.StrToDate(query.getSummaryTime()));
staffStat.setCreateUserId(1l); staffStat.setCreateUserId(1l);
//attendanceStaffStatService.save(staffStat);
addStaffStat.add(staffStat); addStaffStat.add(staffStat);
} }
} }
...@@ -645,11 +643,7 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -645,11 +643,7 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
public Result<AttendanceStatEntity> findExt(AttendanceSummaryQuery params, PageInfo pageInfo, Context context) throws AppException { public Result<AttendanceStatEntity> findExt(AttendanceSummaryQuery params, PageInfo pageInfo, Context context) throws AppException {
if (params == null) { if (params == null) {
params = new AttendanceSummaryQuery(); params = new AttendanceSummaryQuery();
/* Calendar now = Calendar.getInstance();
now.setTime(new Date());
now.add(Calendar.DAY_OF_MONTH, -30); //默认查最近30天数据
*/
params.setSummaryTimeStart(DateUtil.offsetDay(new Date(), -30).toDateStr()); params.setSummaryTimeStart(DateUtil.offsetDay(new Date(), -30).toDateStr());
params.setSummaryTimeEnd(DateUtils.getCurrStrDate()); params.setSummaryTimeEnd(DateUtils.getCurrStrDate());
} }
...@@ -708,9 +702,6 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -708,9 +702,6 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
attendanceRecordQuery.setAttendanceDateEnd(DateUtil.yesterday().toDateStr()); attendanceRecordQuery.setAttendanceDateEnd(DateUtil.yesterday().toDateStr());
List<AttendanceRecordEntity> attendanceRecordEntities = recordService.find(attendanceRecordQuery); List<AttendanceRecordEntity> attendanceRecordEntities = recordService.find(attendanceRecordQuery);
//迟到次数 //迟到次数
long beLate = attendanceRecordEntities.parallelStream() long beLate = attendanceRecordEntities.parallelStream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream()) .flatMap(item -> item.getAttendanceRecordDetailList().stream())
...@@ -736,35 +727,16 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -736,35 +727,16 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
.count(); .count();
/* AttendanceVacationRecordQuery vacationRecordQuery = new AttendanceVacationRecordQuery();
vacationRecordQuery.setCreateTimeStart(DateUtil.beginOfMonth(new Date()).toDateStr());
vacationRecordQuery.setCreateTimeEnd(DateUtil.today());
int levealPersonNum = vacationRecordService.count(vacationRecordQuery, getContext());*/
AttendanceLeaveRecordQuery leaveRecordQuery = new AttendanceLeaveRecordQuery(); AttendanceLeaveRecordQuery leaveRecordQuery = new AttendanceLeaveRecordQuery();
/* leaveRecordQuery.setCreateTimeStart(DateUtil.beginOfMonth(new Date()).toDateStr());
leaveRecordQuery.setCreateTimeEnd(DateUtil.today());*/
// leaveRecordQuery.setCreateTimeStart(DateUtil.yesterday().toDateStr());
// leaveRecordQuery.setCreateTimeEnd(DateUtil.yesterday().toDateStr());
//判断当前时间是否在请假开始结束时间范围内,StartTime<=当前日期 EndTime>=当前日期
leaveRecordQuery.setStartTimeEnd(DateUtil.yesterday().toDateStr()); leaveRecordQuery.setStartTimeEnd(DateUtil.yesterday().toDateStr());
leaveRecordQuery.setEndTimeStart(DateUtil.yesterday().toDateStr()); leaveRecordQuery.setEndTimeStart(DateUtil.yesterday().toDateStr());
leaveRecordQuery.setProcessStatus(ProcessStatusEnum.已处理.getValue()); leaveRecordQuery.setProcessStatus(ProcessStatusEnum.已处理.getValue());
int levealPersonNum = leaveRecordService.count(leaveRecordQuery, context); int levealPersonNum = leaveRecordService.count(leaveRecordQuery, context);
//总打卡记录
/* long totalAttend = attendanceRecordEntities.parallelStream().flatMap(item -> item.getAttendanceRecordDetailList().parallelStream()).count();
long lackOfCardsAttend = attendanceRecordEntities.parallelStream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream())
.filter(f -> GoWorkResultEnum.缺卡.getValue() == f.getGoWorkResult() || OffWorkResultEnum.缺卡.getValue() == f.getOffWorkResult())
.count();*/
//异常考勤记录 //异常考勤记录
//未考勤 //未考勤
// long noAtt=lackOfCards; // long noAtt=lackOfCards;
long att = totalAttendPersonNum - lackOfCards; long att = totalAttendPersonNum - lackOfCards;
// long att = totalAttend - lackOfCardsAttend;
if (att != 0L&&totalAttendPersonNum != 0L) { if (att != 0L&&totalAttendPersonNum != 0L) {
BigDecimal bigDecimal = new BigDecimal(att).divide(new BigDecimal(totalAttendPersonNum), 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_CEILING); BigDecimal bigDecimal = new BigDecimal(att).divide(new BigDecimal(totalAttendPersonNum), 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_CEILING);
homeStatInfo.setAttendRadio(bigDecimal.toString() + "%"); homeStatInfo.setAttendRadio(bigDecimal.toString() + "%");
...@@ -779,7 +751,6 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc ...@@ -779,7 +751,6 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
homeStatInfo.setAttendPersonNum(totalAttendPersonNum); homeStatInfo.setAttendPersonNum(totalAttendPersonNum);
cacheService.set(RedisKey.KEY_HOME_STAT_CACHE, JSON.toJSONString(homeStatInfo)); cacheService.set(RedisKey.KEY_HOME_STAT_CACHE, JSON.toJSONString(homeStatInfo));
} }
public static void main(String[] args) { public static void main(String[] args) {
......
...@@ -53,7 +53,6 @@ import java.util.List; ...@@ -53,7 +53,6 @@ import java.util.List;
@Service("dingPersonService") @Service("dingPersonService")
@Slf4j @Slf4j
public class DingPersonServiceImpl extends AbstractDingTalkService implements IDingPersonService { public class DingPersonServiceImpl extends AbstractDingTalkService implements IDingPersonService {
@Autowired @Autowired
private AttendanceLeaveRecordService attendanceLeaveRecordService; private AttendanceLeaveRecordService attendanceLeaveRecordService;
@Autowired @Autowired
......
...@@ -555,7 +555,6 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta ...@@ -555,7 +555,6 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
List<DoorEntity> doorEntities = doorService.find(new DoorQuery()); List<DoorEntity> doorEntities = doorService.find(new DoorQuery());
if (ObjectUtils.isEmpty(doorEntities)) return Rest.fail("未找到门禁设备!"); if (ObjectUtils.isEmpty(doorEntities)) return Rest.fail("未找到门禁设备!");
try { try {
// DoorEntity doorEntity = doorEntities.get(0);
for (DoorEntity doorEntity : doorEntities) { for (DoorEntity doorEntity : doorEntities) {
StaffReq staffReq = new StaffReq(); StaffReq staffReq = new StaffReq();
Rest<UserSearchInfo> personCountRest = hikStaffService.getPersonCount(staffReq, doorEntity); Rest<UserSearchInfo> personCountRest = hikStaffService.getPersonCount(staffReq, doorEntity);
...@@ -624,7 +623,6 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta ...@@ -624,7 +623,6 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
} }
} }
} catch (Exception e) { } catch (Exception e) {
//log.error("同步人员信息失败:{}", e.getMessage());
log.error("同步人员信息失败", e); log.error("同步人员信息失败", e);
staffCollect = new HashMap<>(); staffCollect = new HashMap<>();
} }
...@@ -671,10 +669,6 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta ...@@ -671,10 +669,6 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
if (count == 0) { if (count == 0) {
staffLeaveService.save(staffLeaveEntity); staffLeaveService.save(staffLeaveEntity);
} }
/* Long[] groudStaffIds = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staff.getId())).stream().map(m -> m.getId()).toArray(Long[]::new);
if (!ObjectUtils.isEmpty(groudStaffIds)) {
attendanceGroupStaffService.remove(groudStaffIds, null);
}*/
} }
}); });
} }
...@@ -696,7 +690,7 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta ...@@ -696,7 +690,7 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
InputStream inputStream = hikFaceService.callPostImgs(imgReq); InputStream inputStream = hikFaceService.callPostImgs(imgReq);
if (!ObjectUtils.isEmpty(inputStream)) { if (!ObjectUtils.isEmpty(inputStream)) {
MultipartFile file = ServletUtils.getMultipartFile(inputStream, "photo.jpg"); MultipartFile file = ServletUtils.getMultipartFile(inputStream, "photo.jpg");
String filePath = uploadService.saveFileUpload(file, "file/fileupload/staff", null); String filePath = uploadService.saveFileUpload(file, "/file/fileupload/staff", null);
staff.setPhotoPath(filePath); staff.setPhotoPath(filePath);
this.update(staff); this.update(staff);
} else { } else {
......
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