public OperationResult EvaluateComplaints(string api_account, long timeStamp, string sign, string token, long cpid, int satsf, int satsf1, int satsf2, string content)
        {
            if (string.IsNullOrWhiteSpace(token))
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_Param_Empty));
            }

            if (!_parameterValidateService.CheckTimestamp(timeStamp))
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_TimeStamp));
            }

            if (!TokenHelper.CheckToken(token))
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_TokenExpiration));
            }

            var apiAccount = _apiRepository.GetSingleByAccount(api_account);

            if (apiAccount == null)
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_ApiAccountNotExist));
            }

            if (!checkSignForEvaluateComplaints(api_account, timeStamp, sign, token, cpid, satsf, satsf1, satsf2, content, apiAccount.Api_SecretKey))
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_Sign));
            }

            var theToken     = TokenHelper.GetToken(token);
            var theCompanyId = new Guid(apiAccount.CompanyId);
            var user         = _userRepository.GetSingleByKey(theToken.UserId);

            if (user == null)
            {
                return(new OperationResult <PaginatedList <Complaints> >(OperationCode.Error_UserNotExist));
            }

            try
            {
                var cp = GetComplaintsById(cpid, theToken, user);
                if (cp.Status != (int)ComplaintStatus.Completed)
                {
                    return(new OperationResult(OperationCode.Error_ComplaintsEvaluated));
                }

                var customerReview = new CustomerReviews {
                    ComplaintId = cpid, CreateTime = DateTime.Now, Content = content, Satisfaction = satsf, Satisfaction1 = satsf1, Satisfaction2 = satsf2
                };
                var complaintsProcessing = new ComplaintsProcessing {
                    ComplaintId = cpid, OriginalStatus = ((ComplaintStatus)cp.Status).ToString(), ProcessingTime = DateTime.Now, Processor = user.USERNAME
                };
                cp.Status = (int)ComplaintStatus.Evaluated;

                complaintsProcessing.CurrentStatus     = ComplaintStatus.Evaluated.ToString();
                complaintsProcessing.ProcessFlowNumber = cp.ComplaintsProcessing != null && cp.ComplaintsProcessing.Any() ?
                                                         cp.ComplaintsProcessing.Max(x => x.ProcessFlowNumber) + 1 : 1;

                if (cp.ComplaintsProcessing == null)
                {
                    cp.ComplaintsProcessing = new List <ComplaintsProcessing>();
                }
                cp.ComplaintsProcessing.Add(complaintsProcessing);

                if (cp.CustomerReviews == null)
                {
                    cp.CustomerReviews = new List <CustomerReviews>();
                }
                cp.CustomerReviews.Add(customerReview);

                _repository.Edit(cp);
                _repository.Save();
            }
            catch (Exception)
            {
                return(new OperationResult(OperationCode.Error_Unknown));
            }

            return(new OperationResult(OperationCode.Success));
        }