优化 考勤设备定时任务,

This commit is contained in:
furongxin 2024-06-25 14:58:56 +08:00
parent 644fc15bc1
commit dbda4be1e4
5 changed files with 59 additions and 20 deletions

View File

@ -81,8 +81,8 @@ public class JsonWebSocketMessageHandler extends TextWebSocketHandler {
// 更新设备心跳请求时间
// 传入设备sn编码更新对应sn的本次请求时间至redis
StringRedisTemplate redisTemplate = SpringContentUtils.getBean(StringRedisTemplate.class);
redisTemplate.opsForValue().set(sn, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
redisTemplate.expire(sn, 30, TimeUnit.SECONDS);
redisTemplate.opsForValue().set(sn + "_1", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
redisTemplate.expire(sn + "_1", 30, TimeUnit.SECONDS);
return;
}
} else {

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.system.controller.admin.equipment.vo.attendancemachine;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 考勤设备状态修改 Request VO")
@Data
public class DeviceStatusUpdateVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
@Schema(description = "设备号", requiredMode = Schema.RequiredMode.REQUIRED)
private String deviceNo;
@Schema(description = "状态 | 0:离线 1:在线", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer status;
@Schema(description = "请求时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime requestTime;
public DeviceStatusUpdateVO(Long id, String deviceNo, Integer status, LocalDateTime requestTime) {
this.id = id;
this.deviceNo = deviceNo;
this.status = status;
this.requestTime = requestTime;
}
}

View File

@ -1,8 +1,10 @@
package cn.iocoder.yudao.module.system.job.equipment;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
import cn.iocoder.yudao.framework.websocket.core.session.WebSocketSessionManager;
import cn.iocoder.yudao.module.system.controller.admin.equipment.vo.attendancemachine.DeviceStatusUpdateVO;
import cn.iocoder.yudao.module.system.dal.dataobject.equipment.AttendanceMachineDO;
import cn.iocoder.yudao.module.system.service.equipment.AttendanceMachineService;
import com.github.yulichang.toolkit.SpringContentUtils;
@ -13,6 +15,9 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@Component
@ -30,19 +35,30 @@ public class AttendanceMachineJob {
@TenantJob
public void updateAttendanceMachineStatus() {
WebSocketSessionManager webSocketSessionManager = SpringContentUtils.getBean(WebSocketSessionManager.class);
List<DeviceStatusUpdateVO> statusUpdateVOS = new ArrayList<>();
// 获得所有在线的设备
List<AttendanceMachineDO> attendanceMachineDOS = attendanceMachineService.getListByStatus();
for (AttendanceMachineDO reqDO : attendanceMachineDOS) {
// redis数据不存在则为离线状态
String data = stringRedisTemplate.opsForValue().get(reqDO.getDeviceNo());
String data = stringRedisTemplate.opsForValue().get(reqDO.getDeviceNo() + "_1");
if (StrUtil.isEmpty(data)) {
attendanceMachineService.updateAttendanceMachineStatus(reqDO.getDeviceNo(), 0, null);
statusUpdateVOS.add(new DeviceStatusUpdateVO(reqDO.getId(),reqDO.getDeviceNo(), 0, null));
//同步 删除对应sessionId
WebSocketSessionManager webSocketSessionManager = SpringContentUtils.getBean(WebSocketSessionManager.class);
webSocketSessionManager.removeSession(webSocketSessionManager.getSessionByDeviceNum(reqDO.getDeviceNo()));
} else {
attendanceMachineService.updateAttendanceMachineStatus(reqDO.getDeviceNo(), 1, data);
statusUpdateVOS.add(new DeviceStatusUpdateVO(reqDO.getId(),reqDO.getDeviceNo(),
1, LocalDateTime.parse(data, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))));
}
}
if (!CollectionUtil.isEmpty(statusUpdateVOS)) {
attendanceMachineService.updateAttendanceMachineStatus(statusUpdateVOS);
}
}
}

View File

@ -32,9 +32,9 @@ public interface AttendanceMachineService {
/**
* 更新考勤设备 状态
* @param deviceNo 设备号
* @param statusUpdateVOS 更新信息
*/
void updateAttendanceMachineStatus(String deviceNo, Integer status, String dateTime);
void updateAttendanceMachineStatus(List<DeviceStatusUpdateVO> statusUpdateVOS);
/**
* 考勤设备密码修改

View File

@ -23,8 +23,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -32,7 +30,6 @@ import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
/**
@ -110,15 +107,11 @@ public class AttendanceMachineServiceImpl implements AttendanceMachineService {
}
@Override
public void updateAttendanceMachineStatus(String deviceNo, Integer status, String dateTime) {
AttendanceMachineDO updateDO = new AttendanceMachineDO();
updateDO.setStatus(status);
// updateDO.setUpdater(getLoginUserId().toString());
if (status == 1) {
updateDO.setRequestTime(LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
attendanceMachineMapper.update(updateDO,
new LambdaUpdateWrapper<AttendanceMachineDO>().eq(AttendanceMachineDO::getDeviceNo, deviceNo));
public void updateAttendanceMachineStatus(List<DeviceStatusUpdateVO> statusUpdateVOS) {
List<AttendanceMachineDO> updateDO = BeanUtils.toBean(statusUpdateVOS, AttendanceMachineDO.class);
attendanceMachineMapper.updateBatch(updateDO);
}
@Override