package com.gs.dingtalk.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.gs.dingtalk.entity.QwHardwareCheckinData;
|
import com.gs.dingtalk.mapper.QwHardwareCheckinDataMapper;
|
import com.gs.dingtalk.service.QwHardwareCheckinDataService;
|
import com.gs.dingtalk.service.WorkWXService;
|
import lombok.RequiredArgsConstructor;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
|
import java.io.IOException;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 企业微信设备打卡数据Service实现
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class QwHardwareCheckinDataServiceImpl extends ServiceImpl<QwHardwareCheckinDataMapper, QwHardwareCheckinData>
|
implements QwHardwareCheckinDataService {
|
|
private static final Logger log = LoggerFactory.getLogger(QwHardwareCheckinDataServiceImpl.class);
|
|
private final WorkWXService workWXService;
|
|
@Override
|
public QwHardwareCheckinData convertToEntity(WorkWXService.HardwareCheckinData data) {
|
if (data == null) {
|
return null;
|
}
|
|
QwHardwareCheckinData entity = new QwHardwareCheckinData();
|
entity.setUserid(data.getUserid());
|
entity.setCheckinTime(data.getCheckinTime());
|
if (data.getCheckinTime() != null) {
|
entity.setCheckinDatetime(new Date(data.getCheckinTime() * 1000));
|
}
|
entity.setDeviceSn(data.getDeviceSn());
|
entity.setDeviceName(data.getDeviceName());
|
entity.setCreateTime(new Date());
|
|
return entity;
|
}
|
|
@Override
|
public int saveHardwareDataBatch(List<WorkWXService.HardwareCheckinData> dataList) {
|
if (dataList == null || dataList.isEmpty()) {
|
return 0;
|
}
|
|
int insertCount = 0;
|
for (WorkWXService.HardwareCheckinData data : dataList) {
|
QwHardwareCheckinData entity = convertToEntity(data);
|
if (entity == null || entity.getUserid() == null || entity.getCheckinTime() == null) {
|
continue;
|
}
|
|
// 检查是否已存在(按userid + checkin_time + device_sn去重)
|
LambdaQueryWrapper<QwHardwareCheckinData> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(QwHardwareCheckinData::getUserid, entity.getUserid())
|
.eq(QwHardwareCheckinData::getCheckinTime, entity.getCheckinTime())
|
.eq(QwHardwareCheckinData::getDeviceSn, entity.getDeviceSn());
|
|
QwHardwareCheckinData existing = this.getOne(wrapper);
|
if (existing != null) {
|
// 已存在则更新
|
entity.setId(existing.getId());
|
this.updateById(entity);
|
log.debug("更新设备打卡数据: userid={}, time={}, device={}",
|
entity.getUserid(), entity.getCheckinDatetime(), entity.getDeviceSn());
|
} else {
|
// 不存在则插入
|
this.save(entity);
|
insertCount++;
|
log.debug("新增设备打卡数据: userid={}, time={}, device={}",
|
entity.getUserid(), entity.getCheckinDatetime(), entity.getDeviceSn());
|
}
|
}
|
|
log.info("设备打卡数据保存完成,新增: {}, 总处理: {}", insertCount, dataList.size());
|
return insertCount;
|
}
|
|
@Override
|
public int syncHardwareData(long startTime, long endTime) throws IOException {
|
List<WorkWXService.HardwareCheckinData> dataList = workWXService.getHardwareCheckinDataByQwStaff(startTime, endTime);
|
return saveHardwareDataBatch(dataList);
|
}
|
|
@Override
|
public int syncYesterdayHardwareData() throws IOException {
|
long currentTime = System.currentTimeMillis() / 1000;
|
long oneDaySeconds = 86400;
|
// 昨天0点
|
long yesterdayStart = ((currentTime / oneDaySeconds) - 1) * oneDaySeconds;
|
// 昨天23:59:59
|
long yesterdayEnd = yesterdayStart + oneDaySeconds - 1;
|
|
log.info("开始同步昨天({} ~ {})的设备打卡数据",
|
new Date(yesterdayStart * 1000), new Date(yesterdayEnd * 1000));
|
return syncHardwareData(yesterdayStart, yesterdayEnd);
|
}
|
}
|