/// <summary> /// 添加实体 /// </summary> /// <param name="userInfo">用户</param> /// <param name="tableName">表名</param> /// <param name="entity">实体</param> /// <returns>主键</returns> public string Add(BaseUserInfo userInfo, string tableName, BaseParameterEntity entity) { var result = string.Empty; var parameter = ServiceInfo.Create(userInfo, MethodBase.GetCurrentMethod()); ServiceUtil.ProcessUserCenterWriteDbWithTransaction(userInfo, parameter, (dbHelper) => { var manager = new BaseParameterManager(dbHelper, userInfo, tableName); result = manager.Add(entity); }); return(result); }
/// <summary> /// 检查用户的 macAddress 绑定是否正常 /// /// 防止重复多读数据? /// 是否判断正确? /// 可以按每个用户缓存? /// 若没有就自动化增加? /// mac 限制完善? /// mac 限制缓存预热? /// </summary> /// <param name="userId">用户主键</param> /// <param name="macAddress">硬件地址</param> /// <returns>正确</returns> public static bool CheckMACAddressByCache(string userId, string macAddress) { // 默认是不成功的,防止出错误 bool result = false; // 检查参数的有效性 if (string.IsNullOrEmpty(userId)) { return(result); } if (string.IsNullOrEmpty(macAddress)) { return(result); } // 提高效率,全小写转换 macAddress = macAddress.ToLower(); // 这里是处理,多个mac的问题 string[] mac = macAddress.Split(';'); using (var redisClient = PooledRedisHelper.GetClient()) { string key = "MAC:" + userId; // 若是缓存里过期了? if (!redisClient.ContainsKey(key)) { // 重新缓存用户的限制数据 if (CachePreheatingMACAddressByUser(redisClient, userId) == 0) { // 若没有设置mac限制,需要把限制都自动加上来。 // 没有加到数据的,就是表明是新增加的用户、第一次登录的用户 BaseParameterManager parameterManager = new BaseParameterManager(); for (int i = 0; i < mac.Length; i++) { if (!string.IsNullOrEmpty(mac[i])) { // 把收集过来的mac地址需要保存起来 BaseParameterEntity parameterEntity = new BaseParameterEntity(); parameterEntity.Id = Guid.NewGuid().ToString("N"); parameterEntity.CategoryCode = "MacAddress"; parameterEntity.ParameterCode = "Single"; parameterEntity.ParameterId = userId; // 这里之际保存小写、就效率也高,省事了 parameterEntity.ParameterContent = mac[i].Trim(); parameterManager.Add(parameterEntity); } } result = true; } } // 若还是没有?表示是新增的 if (redisClient.ContainsKey(key)) { // 若已经存在,就需要进行缓存里的判断? // 这里要提高效率,不能反复打开缓存 for (int i = 0; i < mac.Length; i++) { // 这里对数据还不放心,进行优化处理 if (!string.IsNullOrEmpty(mac[i])) { mac[i] = mac[i].Trim(); result = redisClient.SetContainsItem(key, mac[i]); if (result) { // 这里要提高判断的效率 break; } } } // 若没有验证成功、把当前的 macAddress 保存起来, 方便后台管理的人加上去。 if (!result) { List <KeyValuePair <string, object> > parameters = new List <KeyValuePair <string, object> >(); parameters.Add(new KeyValuePair <string, object>(BaseUserLogOnEntity.FieldMACAddress, macAddress)); BaseUserLogOnManager userLogOnManager = new BaseUserLogOnManager(); userLogOnManager.SetProperty(userId, parameters); } } } return(result); }