示例#1
0
        public QueryDeviceUsersResponse QueryDeviceUsers(QueryDeviceUsersRequest request)
        {
            return(PersistenceOperation.Process(request, () =>
            {
                if (WebSocketClientManager.GetInstance().GetClientById(request.Device.Code.ToInt32()) == null)
                {
                    var msg = string.Format("设备:[{0}]未连接", string.Join(",", request.Device.Name));
                    return new QueryDeviceUsersResponse()
                    {
                        ResultType = ResultTypes.DeviceNotConnected, Messages = new[] { msg }
                    };
                }

                var userDtos = new List <DeviceUserDto>();
                var deviceUsers = new List <UserInfo>();
                var op = new DeviceUserOp();

                if (!string.IsNullOrWhiteSpace(request.UserCode))
                {
                    var userRepo = RepositoryManager.GetRepository <IUserRepository>();
                    var userInfo = userRepo.QueryUsersForSummaryData(new Hashtable()
                    {
                        { "UserCode", request.UserCode }
                    }).FirstOrDefault();
                    if (userInfo != null)
                    {
                        var deviceUser = op.TryGetUesrInfo(userInfo, request.Device);
                        if (deviceUser != null)
                        {
                            deviceUsers.Add(deviceUser);
                        }
                    }
                }
                else
                {
                    deviceUsers = op.QueryUsersByDevice(request.Device);
                }

                if (deviceUsers != null)
                {
                    deviceUsers.ForEach(x => userDtos.Add(new DeviceUserDto()
                    {
                        UserCode = x.UserId,
                        UserName = string.IsNullOrWhiteSpace(x.UserName) ? "未命名人员" : x.UserName,
                    }));
                }

                return new QueryDeviceUsersResponse()
                {
                    ResultType = ResultTypes.Ok, Users = userDtos
                };
            }));
        }
示例#2
0
        public SyncDBUsersResponse SyncSystemUsers(SyncDBUsersRequest request)
        {
            return(PersistenceOperation.Process(request, () =>
            {
                try
                {
                    var userRepo = RepositoryManager.GetRepository <IUserRepository>();
                    var deviceRepo = RepositoryManager.GetRepository <IDeviceControllerRepository>();

                    Log.Info("Check offline devices");
                    var allDevices = deviceRepo.QuerySummaryData(new Hashtable()
                    {
                        { "Status", (int)GeneralStatus.Enabled }
                    });
                    var offlineDevices = allDevices.FindAll(d => WebSocketClientManager.GetInstance().GetClientById(d.Code.ToInt32()) == null);
                    var onlineDevices = allDevices.Except(offlineDevices);

                    var requestOfflineDevice = offlineDevices.FindAll(x => request.Devices.Select(xx => xx.DeviceID).Contains(x.DeviceID));
                    if (requestOfflineDevice.Any())
                    {
                        var msg = string.Format("设备:[{0}]未连接", string.Join(",", requestOfflineDevice.Select(x => x.Name)));
                        return new SyncDBUsersResponse()
                        {
                            ResultType = ResultTypes.DeviceNotConnected, Messages = new[] { msg }
                        };
                    }

                    //if (offlineDevices.Any())
                    //{
                    //    var msg = string.Format("设备:[{0}]未连接", string.Join(",", offlineDevices.Select(x => x.Name)));
                    //    return new SyncDBUsersResponse() { ResultType = ResultTypes.DeviceNotConnected, Messages = new[] { msg } };
                    //}

                    Log.Info("Load data for request devices...");
                    var requestDevices = new List <DeviceController>();
                    request.Devices.ForEach(x =>
                    {
                        var d = onlineDevices.FirstOrDefault(e => e.DeviceID == x.DeviceID);
                        if (d != null)
                        {
                            requestDevices.Add(d);
                        }
                    });
                    request.Devices = requestDevices;

                    Log.Info("Load data for request users...");
                    var requestUsers = new List <User>();
                    request.Users.ForEach(x =>
                    {
                        if (x.UserID != 0)
                        {
                            x = userRepo.GetByKey(x.UserID);
                        }
                        requestUsers.Add(x);
                    });
                    request.Users = requestUsers;

                    Log.Info("Process business...");
                    request.Users.ForEach(user =>
                    {
                        Log.Info("Try to get user data from all devices...");
                        var deviceUserOp = new DeviceUserOp();
                        var userDeviceInfoDict = new Dictionary <int, UserInfo>();
                        var deviceListInSequence = onlineDevices.OrderBy(x => x.DeviceID);
                        foreach (var device in deviceListInSequence)
                        {
                            var tryGetDeviceUser = deviceUserOp.TryGetUesrInfo(user, device);
                            if (tryGetDeviceUser != null)
                            {
                                userDeviceInfoDict.Add(device.DeviceID, tryGetDeviceUser);
                            }
                        }

                        Log.Info("Try to update user data...");
                        var systemUserOp = new SystemUserOp(onlineDevices, userDeviceInfoDict);
                        systemUserOp.SyncUser(user, request.Devices);
                    });

                    return new SyncDBUsersResponse()
                    {
                        ResultType = ResultTypes.Ok
                    };
                }
                catch (Exception ex)
                {
                    return new SyncDBUsersResponse()
                    {
                        ResultType = ResultTypes.UnknownError, Messages = new[] { ex.Message }
                    };
                }
            }));
        }