yonge 3 年之前
父节点
当前提交
9eec09a753

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java

@@ -72,7 +72,7 @@ public class UsernameAuthenticationFilter extends AbstractAuthenticationProcessi
 		// 检查设备
 		String deviceNum = request.getParameter(deviceNumParameter);
 		if (StringUtils.isNotBlank(deviceNum)) {
-			sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum);
+			sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum, userInfo.getSysUser().getTenantId());
 		}
 
 		UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(SecurityConstants.USERNAME_PRINCIPAL_PREFIX + username,

+ 2 - 2
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java

@@ -70,7 +70,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 			userInfo = sysUserService.initUser(loginEntity.getTenantId(), loginEntity.getOrganId(), loginEntity.getPhone(), clientId);
 			
 			if (StringUtils.isNotBlank(deviceNum)) {
-				sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum);
+				sysUserDeviceService.bindDevice(clientId, userInfo.getSysUser().getId(), deviceNum, userInfo.getSysUser().getTenantId());
 			}
 		} else {
 			SysUser user = userInfo.getSysUser();
@@ -83,7 +83,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 				throw new LockedException("用户已注册");
 			}
 			if (StringUtils.isNotBlank(deviceNum)) {
-				sysUserDeviceService.bindDevice(clientId, user.getId(), deviceNum);
+				sysUserDeviceService.bindDevice(clientId, user.getId(), deviceNum, userInfo.getSysUser().getTenantId());
 			}
 			
 			if (!userInfo.getSysUser().getUserType().contains(clientId)) {

+ 2 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysUserDeviceService.java

@@ -16,9 +16,10 @@ public interface SysUserDeviceService extends BaseService<Integer, SysUserDevice
 	 * @param clientId
 	 * @param userId
 	 * @param deviceNum
+	 * @param tenantId
 	 * @return
 	 */
-	boolean bindDevice(String clientId, Integer userId, String deviceNum);
+	boolean bindDevice(String clientId, Integer userId, String deviceNum, Integer tenantId);
 
 	/**
 	 * 逻辑删除

+ 54 - 22
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserDeviceServiceImpl.java

@@ -1,20 +1,20 @@
 package com.ym.mec.auth.service.impl;
 
-import com.ym.mec.auth.api.entity.SysUserDevice;
-import com.ym.mec.auth.dal.dao.SysUserDeviceDao;
-import com.ym.mec.auth.service.SysUserDeviceService;
-import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.common.tenant.TenantContextHolder;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
+import com.ym.mec.auth.api.entity.SysUserDevice;
+import com.ym.mec.auth.dal.dao.SysUserDeviceDao;
+import com.ym.mec.auth.service.SysUserDeviceService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
 
 @Service
 public class SysUserDeviceServiceImpl extends BaseServiceImpl<Integer, SysUserDevice>  implements SysUserDeviceService {
@@ -38,8 +38,7 @@ public class SysUserDeviceServiceImpl extends BaseServiceImpl<Integer, SysUserDe
 	}
 
 	@Override
-	public boolean bindDevice(String clientId, Integer userId, String deviceNum) {
-		Integer tenantId = TenantContextHolder.getTenantId();
+	public boolean bindDevice(String clientId, Integer userId, String deviceNum, Integer tenantId) {
 		String paramName = null;
 		if (StringUtils.equals(clientId, "STUDENT")) {
 			paramName = "student_device_login_num";
@@ -52,19 +51,52 @@ public class SysUserDeviceServiceImpl extends BaseServiceImpl<Integer, SysUserDe
 		if(StringUtils.isEmpty(configValue)){
 			return true;
 		}
-		// 检查学生是否绑定了多个设备号
-		List<SysUserDevice> studentDeviceList = queryByUserId(clientId, userId);
+		
+		if (StringUtils.equals(clientId, "STUDENT")) {
+			// 检查学生是否绑定了多个设备号
+			List<SysUserDevice> studentDeviceList = queryByUserId(clientId, userId);
 
-		if (studentDeviceList == null) {
-			studentDeviceList = new ArrayList<SysUserDevice>();
-		}
+			if (studentDeviceList == null) {
+				studentDeviceList = new ArrayList<SysUserDevice>();
+			}
+
+			List<String> deviceList = studentDeviceList.stream().map(t -> t.getDeviceNum()).collect(Collectors.toList());
 
-		List<String> deviceList = studentDeviceList.stream().map(t -> t.getDeviceNum()).collect(Collectors.toList());
+			if (!deviceList.contains(deviceNum)) {
+				if (deviceList.size() >= Integer.parseInt(configValue)) {
+					throw new BadCredentialsException("当前账号绑定设备过多,请联系主教老师");
+				}
+
+				SysUserDevice sysUserDevice = new SysUserDevice();
+				sysUserDevice.setUserId(userId);
+				sysUserDevice.setDeviceNum(deviceNum);
+				sysUserDevice.setBindTime(new Date());
+				sysUserDevice.setClientId(clientId);
+				sysUserDevice.setTenantId(tenantId);
+				sysUserDeviceDao.insert(sysUserDevice);
+			}
+		} else {
+			// 查询设备号是否已存在
+			List<SysUserDevice> sysUserDeviceList = sysUserDeviceDao.queryByDeviceNum(null, deviceNum);
 
-		if (!deviceList.contains(deviceNum)) {
-			if (deviceList.size() >= Integer.parseInt(configValue)) {
-				throw new BadCredentialsException("当前账号绑定设备过多,请联系主教老师");
+			if (sysUserDeviceList == null) {
+				sysUserDeviceList = new ArrayList<SysUserDevice>();
 			}
+
+			sysUserDeviceList = sysUserDeviceList.stream().filter(sud -> !StringUtils.equals(sud.getClientId(), "STUDENT")).collect(Collectors.toList());
+
+			if (sysUserDeviceList != null && sysUserDeviceList.size() > 0) {
+				boolean isBinded = sysUserDeviceList.stream().filter(sud -> sud.getUserId().equals(userId)).count() > 0;
+				if (isBinded) {
+
+					return true;
+				}
+
+				if (sysUserDeviceList.size() >= Integer.parseInt(configValue)) {
+					throw new BadCredentialsException("当前设备已绑定账号,请更换设备");
+				}
+			}
+
 			SysUserDevice sysUserDevice = new SysUserDevice();
 			sysUserDevice.setUserId(userId);
 			sysUserDevice.setDeviceNum(deviceNum);
@@ -72,7 +104,7 @@ public class SysUserDeviceServiceImpl extends BaseServiceImpl<Integer, SysUserDe
 			sysUserDevice.setClientId(clientId);
 			sysUserDeviceDao.insert(sysUserDevice);
 		}
-
+		
 		return true;
 	}