package com.xiaopeng.maintenance.service.impl;
|
|
import com.xiaopeng.api.model.maintenance.XpClockIn;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.xiaopeng.maintenance.mapper.XpClockInMapper;
|
import com.xiaopeng.maintenance.service.IXpClockInService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.LocalTime;
|
import java.util.List;
|
|
/**
|
* <p>
|
* 打卡明细 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2026-02-03
|
*/
|
@Slf4j
|
@Service
|
public class XpClockInServiceImpl extends ServiceImpl<XpClockInMapper, XpClockIn> implements IXpClockInService {
|
|
@Override
|
public Boolean checkWorkStatus(Long appUserId) {
|
if (appUserId == null) {
|
log.warn("检查上班状态失败: appUserId 为空");
|
return false;
|
}
|
|
try {
|
// 1. 计算当天时间范围
|
LocalDateTime startTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); // 00:00:00
|
LocalDateTime endTime = LocalDateTime.of(LocalDate.now(), LocalTime.MAX); // 23:59:59
|
|
// 2. 计算分表后缀 (userId % 10)
|
Integer tableSuffix = (int) (appUserId % 10);
|
|
// 3. 查询当天打卡记录
|
List<XpClockIn> records = baseMapper.selectTodayClockInRecords(
|
tableSuffix, appUserId, startTime, endTime
|
);
|
|
// 4. 判断上班状态
|
if (records == null || records.isEmpty()) {
|
// 无打卡记录 = 未上班
|
log.debug("用户 {} 今日无打卡记录, workFlag=false", appUserId);
|
return false;
|
} else if (records.size() == 1) {
|
// 1条记录 = 已上班未下班
|
log.debug("用户 {} 今日打卡1次, workFlag=true", appUserId);
|
return true;
|
} else {
|
// 2条及以上记录 = 已下班
|
log.debug("用户 {} 今日打卡{}次, workFlag=false", appUserId, records.size());
|
return false;
|
}
|
|
} catch (Exception e) {
|
log.error("检查用户上班状态异常, appUserId={}", appUserId, e);
|
// 异常情况返回 false
|
return false;
|
}
|
}
|
}
|