Ejemplo n.º 1
0
        public async Task <bool> AddToSearch(string organizationId, string text, string encryptedResultTitle, string contentId, string contentType, bool isEncrypted)
        {
            if (string.IsNullOrEmpty(organizationId) ||
                string.IsNullOrEmpty(text) ||
                string.IsNullOrEmpty(encryptedResultTitle) ||
                string.IsNullOrEmpty(contentId) ||
                string.IsNullOrEmpty(contentType))
            {
                return(await Task.FromResult(false));
            }

            if (!HasOrganization(organizationId))
            {
                return(await Task.FromResult(false));
            }

            contentType = contentType.ToLowerInvariant();

            var items = new List <Search>();
            var keys  = new List <string>();

            var orgKey = organizationRepo.AsQueryable().First(x => x.OrganizationId == organizationId).EncryptionKey;

            if (isEncrypted)
            {
                text = cryptoHelper.Decrypt(text, orgKey);
            }

            var words = await GetSearchKeywords(text);

            foreach (var word in words)
            {
                var maxLenght = word.Length;
                items.Add(new Search
                {
                    CreatedBy      = "System",
                    UpdatedBy      = "System",
                    ContentId      = contentId,
                    ContentType    = contentType,
                    SearchKey      = BCrypt.Net.BCrypt.HashPassword(word),
                    Score          = Math.Pow(2, maxLenght + 2),
                    OrganizationId = organizationId,
                    EncryptedTitle = encryptedResultTitle
                });
                keys.Add(word);

                var iLenght = word.Length;
                var jLenght = word.Length - 2;
                for (int i = 3; i < iLenght; i++)
                {
                    for (int j = 0; j < jLenght; j++)
                    {
                        if ((i + j) > iLenght)
                        {
                            break;
                        }

                        var key = word.Substring(j, i);
                        if (!keys.Contains(key))
                        {
                            keys.Add(key);
                            items.Add(new Search
                            {
                                CreatedBy      = "System",
                                UpdatedBy      = "System",
                                ContentId      = contentId,
                                ContentType    = contentType,
                                SearchKey      = BCrypt.Net.BCrypt.HashPassword(key),
                                Score          = Math.Pow(2, i) + (jLenght - j),
                                OrganizationId = organizationId,
                                EncryptedTitle = encryptedResultTitle
                            });
                        }
                    }
                }
            }

            searchRepo.AddBulk(items);

            return(await Task.FromResult(true));
        }
        public OperationResult <Sys_RemoteDispatch> AddRemoteDispatch(string api_Account, long timeStamp, string sign, string token, string sn, int activePower, int reactivePower, decimal soc, int status, int controlMode, string ipAddress)
        {
            Guid key = Guid.Empty;

            Guid.TryParse(token, out key);
            var userCache = TokenService.GetCache(key);

            bool flag = false;

            #region 判断
            if (userCache == null || userCache.ExpirationTime < DateTime.Now)
            {
                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_LoginFailed));
            }

            if (userCache.ipAddress != ipAddress)
            {
                var ul = new SYS_LOG {
                    Key = Guid.NewGuid(), CREATE_DATETIME = DateTime.Now, THREAD = OperationCode.Error_UserChangesDevice.ToString(), LEVEL = LogLevel.ERROR.ToString(), LOGGER = "Services.RemoteDispatchService", MESSAGE = "用户更换设备", EXCEPTION = "ipAddress_1:" + userCache.ipAddress + ",ipAddress:" + ipAddress, CREATE_ACCOUNT = "", LOG_CONTENT = ""
                };
                _sysLogService.Add(ul);
                _sysLogService.Save();

                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_UserChangesDevice));
            }

            var query = from a1 in _sys_ROLE.GetAll()
                        join r1 in _sys_ROLEUSER.GetAll() on a1.Key equals r1.ROLEID
                        where r1.USERID == userCache.UserId
                        select new
            {
                userType = a1.ROLENAME
            };

            List <string> user_Types = new List <string>();
            foreach (var q in query)
            {
                user_Types.Add(q.userType);
            }

            if (!checkSignForRemoteDispatch(api_Account, timeStamp, sign, token, sn, activePower, reactivePower, soc, status, controlMode))
            {
                string secretKey = _cryptoService.GetSecretKey(api_Account);
                var    ul        = new SYS_LOG {
                    Key = Guid.NewGuid(), CREATE_DATETIME = DateTime.Now, THREAD = OperationCode.Error_Sign.ToString(), LEVEL = LogLevel.ERROR.ToString(), LOGGER = "Services.RemoteDispatchService", MESSAGE = "签名错误", EXCEPTION = "api_Account:" + api_Account + ",timeStamp:" + timeStamp + ",sign:" + sign + ",token:" + token + ", sn:" + sn + ",ipAddress:" + ipAddress + ",SecretKey:" + secretKey, CREATE_ACCOUNT = "", LOG_CONTENT = ""
                };
                _sysLogService.Add(ul);
                _sysLogService.Save();

                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_Sign));
            }

            if (!_parameterValidateService.CheckTimestamp(timeStamp))
            {
                var ul = new SYS_LOG {
                    Key = Guid.NewGuid(), CREATE_DATETIME = DateTime.Now, THREAD = OperationCode.Error_TimeStamp.ToString(), LEVEL = LogLevel.ERROR.ToString(), LOGGER = "Services.RemoteDispatchService", MESSAGE = "时间戳错误", EXCEPTION = "api_Account:" + api_Account + ",timeStamp:" + timeStamp + ",sign:" + sign + ",token:" + token + ", sn:" + sn + ",ipAddress:" + ipAddress, CREATE_ACCOUNT = "", LOG_CONTENT = ""
                };
                _sysLogService.Add(ul);
                _sysLogService.Save();

                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_TimeStamp));
            }

            if (!_parameterValidateService.ApiAccountExist(api_Account))
            {
                var ul = new SYS_LOG {
                    Key = Guid.NewGuid(), CREATE_DATETIME = DateTime.Now, THREAD = OperationCode.Error_ApiAccountNotExist.ToString(), LEVEL = LogLevel.ERROR.ToString(), LOGGER = "Services.RemoteDispatchService", MESSAGE = "api账号不存在", EXCEPTION = "api_Account:" + api_Account + ",timeStamp:" + timeStamp + ",sign:" + sign + ",token:" + token + ", sn:" + sn + ",ipAddress:" + ipAddress, CREATE_ACCOUNT = "", LOG_CONTENT = ""
                };
                _sysLogService.Add(ul);
                _sysLogService.Save();

                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_ApiAccountNotExist));
            }
            #endregion

            SYS_USER user = _userRepository.GetAll().Where(x => x.Key == userCache.UserId).FirstOrDefault();

            #region 获取用户系统列表
            int pIndex               = 1;
            int pSize                = int.MaxValue;
            int totalCount           = 0;
            IList <VT_SYSTEM> result = new List <VT_SYSTEM>();

            if (user_Types.Contains("customer"))
            {
                result = GetSystemByUser(pIndex, pSize, userCache.UserId, this.CompanyId, out totalCount);
            }
            else if (user_Types.Contains("installer"))
            {
                if (user != null)
                {
                    result = GetSystemByInstaller(pIndex, pSize, user.LICNO, this.CompanyId, out totalCount);
                }
            }
            else if (user_Types.Contains("servicer"))
            {
                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_NoPermissionsToQuery));
            }
            else if (user_Types.Contains("admin"))
            {
                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_NoPermissionsToQuery));
            }
            else if (user_Types.Contains("systemmanager"))
            {
                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_NoPermissionsToQuery));
            }
            else if (user_Types.Contains("reseller"))
            {
                result = GetSystemByReseller(pIndex, pSize, userCache.UserId, this.CompanyId, out totalCount);
            }
            else if (user_Types.Contains("servicepartner"))
            {
                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_NoPermissionsToQuery));
            }

            if (result == null || result.Count == 0)
            {
                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_NoPermissionsToQuery));
            }
            #endregion

            if (!string.IsNullOrWhiteSpace(sn))
            {
                if (_snRepository.GetAll().Where(x => x.SN_NO == sn.Trim() && x.CompanyId == this.CompanyId && x.DELETE_FLAG == 0).FirstOrDefault() == null)
                {
                    var ul = new SYS_LOG {
                        Key = Guid.NewGuid(), CREATE_DATETIME = DateTime.Now, THREAD = OperationCode.Error_SNNotExist.ToString(), LEVEL = LogLevel.ERROR.ToString(), LOGGER = "Services.RemoteDispatchService", MESSAGE = "sn不存在", EXCEPTION = "api_Account:" + api_Account + ",timeStamp:" + timeStamp + ",sign:" + sign + ",token:" + token + ", sn:" + sn + ",ipAddress:" + ipAddress, CREATE_ACCOUNT = "", LOG_CONTENT = ""
                    };
                    _sysLogService.Add(ul);
                    _sysLogService.Save();

                    return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_SNNotExist));
                }

                if (result.Where(x => x.SYS_SN == sn).Count() == 0)
                {
                    string username = user == null ? "" : user.USERNAME;
                    var    ul       = new SYS_LOG {
                        Key = Guid.NewGuid(), CREATE_DATETIME = DateTime.Now, THREAD = OperationCode.Error_NoPermissionsToQuery.ToString(), LEVEL = LogLevel.ERROR.ToString(), LOGGER = "Services.RemoteDispatchService", MESSAGE = "用户无此权限,调取用户:" + username, EXCEPTION = "api_Account:" + api_Account + ",timeStamp:" + timeStamp + ",sign:" + sign + ",token:" + token + ", sn:" + sn + ",ipAddress:" + ipAddress, CREATE_ACCOUNT = "", LOG_CONTENT = ""
                    };
                    _sysLogService.Add(ul);
                    _sysLogService.Save();

                    return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_NoPermissionsToQuery));
                }

                Sys_RemoteDispatch rd = new Sys_RemoteDispatch();
                rd.Key           = Guid.NewGuid();
                rd.SN            = sn;
                rd.UserName      = user.USERNAME;
                rd.ActivePower   = activePower;
                rd.ReactivePower = reactivePower;
                rd.SOC           = soc;
                rd.Status        = status;
                rd.ControlMode   = controlMode;
                rd.DELETE_FLAG   = 0;
                rd.CreateTime    = DateTime.Now;

                try
                {
                    _remotedispatchRepository.Add(rd);
                    _remotedispatchRepository.Save();
                    flag = true;
                }
                catch
                {
                    flag = false;
                }
            }
            else
            {
                if (user != null)
                {
                    IList <Sys_RemoteDispatch> rDList = new List <Sys_RemoteDispatch>();

                    foreach (var item in result)
                    {
                        Sys_RemoteDispatch rd = new Sys_RemoteDispatch();
                        rd.Key           = Guid.NewGuid();
                        rd.SN            = item.SYS_SN;
                        rd.UserName      = user.USERNAME;
                        rd.ActivePower   = activePower;
                        rd.ReactivePower = reactivePower;
                        rd.SOC           = soc;
                        rd.Status        = status;
                        rd.ControlMode   = controlMode;
                        rd.DELETE_FLAG   = 0;
                        rd.CreateTime    = DateTime.Now;

                        rDList.Add(rd);
                    }

                    try
                    {
                        _remotedispatchRepository.AddBulk(rDList);
                        _remotedispatchRepository.Save();
                        flag = true;
                    }
                    catch
                    {
                        flag = false;
                    }
                }
            }

            if (flag)
            {
                var ul = new SYS_LOG {
                    Key = Guid.NewGuid(), CREATE_DATETIME = DateTime.Now, THREAD = OperationCode.Success.ToString(), LEVEL = LogLevel.INFO.ToString(), LOGGER = "Services.RemoteDispatchService", MESSAGE = "命令发送成功", EXCEPTION = "api_Account:" + api_Account + ",timeStamp:" + timeStamp + ",sign:" + sign + ",token:" + token + ", sn:" + sn + ",ipAddress:" + ipAddress + ",activePower:" + activePower + ",reactivePower:" + reactivePower + ",soc:" + soc + ",status:" + status + ",controlMode:" + controlMode, CREATE_ACCOUNT = user.USERNAME, LOG_CONTENT = ""
                };
                _sysLogService.Add(ul);
                _sysLogService.Save();

                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Success));
            }
            else
            {
                var ul = new SYS_LOG {
                    Key = Guid.NewGuid(), CREATE_DATETIME = DateTime.Now, THREAD = OperationCode.Error_SendCommandFailed.ToString(), LEVEL = LogLevel.ERROR.ToString(), LOGGER = "Services.RemoteDispatchService", MESSAGE = "命令发送失败", EXCEPTION = "api_Account:" + api_Account + ",timeStamp:" + timeStamp + ",sign:" + sign + ",token:" + token + ", sn:" + sn + ",ipAddress:" + ipAddress, CREATE_ACCOUNT = "", LOG_CONTENT = ""
                };
                _sysLogService.Add(ul);
                _sysLogService.Save();

                return(new OperationResult <Sys_RemoteDispatch>(OperationCode.Error_SendCommandFailed));
            }
        }