修复用户绑定设备逻辑以确保原子操作

调整FactoryUserServiceImpl中用户与考勤设备绑定的逻辑。在异常情况下,现在会清除用户绑定的设备,并且在最终块中重新尝试绑定操作,确保数据库状态与实际业务流程一致。
This commit is contained in:
furongxin 2024-09-11 10:15:35 +08:00
parent c4b5279167
commit e2c650a7fd

View File

@ -101,7 +101,7 @@ public class FactoryUserServiceImpl implements FactoryUserService{
usersExtDO.setUserId(user.getId()); usersExtDO.setUserId(user.getId());
usersExtDO.setDeptId(deptDO.getId()); usersExtDO.setDeptId(deptDO.getId());
usersExtDO.setAttendanceMachineNos(convertList(attendanceMachineDOS, AttendanceMachineDO::getDeviceNo)); usersExtDO.setAttendanceMachineNos(convertList(attendanceMachineDOS, AttendanceMachineDO::getDeviceNo));
usersExtService.createUsers(usersExtDO); // usersExtService.createUsers(usersExtDO);
// 工厂用户添加到GPS定位系统中 // 工厂用户添加到GPS定位系统中
adminUserService.gpsIncrementalSynchronizationOfUsers(user); adminUserService.gpsIncrementalSynchronizationOfUsers(user);
try { try {
@ -118,12 +118,21 @@ public class FactoryUserServiceImpl implements FactoryUserService{
// 发送指令至 考勤设备 下发员工 // 发送指令至 考勤设备 下发员工
websocketService.sendSn(machineDO.getDeviceNo(), addUserVO, 1); websocketService.sendSn(machineDO.getDeviceNo(), addUserVO, 1);
// 下发成功则设置 用户绑定设备
usersExtDO.setAttendanceMachineNos(convertList(attendanceMachineDOS, AttendanceMachineDO::getDeviceNo));
} }
} catch (Exception ex) { } catch (Exception ex) {
// 手动回滚 // 手动回滚
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// 下发失败则清空 用户绑定设备
usersExtDO.setAttendanceMachineNos(null);
return ex.getMessage(); return ex.getMessage();
}finally {
usersExtService.createUsers(usersExtDO);
} }
return null; return null;