优化 考勤设备定时任务,
This commit is contained in:
parent
644fc15bc1
commit
dbda4be1e4
@ -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 {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,9 +32,9 @@ public interface AttendanceMachineService {
|
||||
|
||||
/**
|
||||
* 更新考勤设备 状态
|
||||
* @param deviceNo 设备号
|
||||
* @param statusUpdateVOS 更新信息
|
||||
*/
|
||||
void updateAttendanceMachineStatus(String deviceNo, Integer status, String dateTime);
|
||||
void updateAttendanceMachineStatus(List<DeviceStatusUpdateVO> statusUpdateVOS);
|
||||
|
||||
/**
|
||||
* 考勤设备密码修改
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user