private async Task <GetReInfoResponse> GetReInfo_UserInfo_NOFound()
        {
            GetReInfoResponse response = new GetReInfoResponse()
            {
            };

            return(response);
        }
        private async Task <GetReInfoResponse> GetReInfo_SaveQuote_NOFound()
        {
            GetReInfoResponse response = new GetReInfoResponse()
            {
                LastInfo = new bx_lastinfo(),
                Status   = HttpStatusCode.OK,
                UserInfo = new bx_userinfo()
            };

            return(response);
        }
        private async Task <GetReInfoResponse> GetReInfo_InValid_SecCode()
        {
            GetReInfoResponse response = new GetReInfoResponse()
            {
                LastInfo  = new bx_lastinfo(),
                SaveQuote = new bx_savequote(),
                Status    = HttpStatusCode.BadRequest,
                UserInfo  = new bx_userinfo()
            };

            return(response);
        }
示例#4
0
        public async Task <GetReInfoResponse> GetReInfo(GetReInfoRequest request)
        {
            var response    = new GetReInfoResponse();
            var isReadCache = true;
            var topAgent    = request.Agent;//顶级代理人

            //获取当前数据的角色addbygpj20180829
            int roleType = _managerRoleRepository.GetRoleTypeByAgentId(request.ChildAgent > 0 ? request.ChildAgent : request.Agent);

            try
            {
                IBxAgent agentModel = _getAgentInfoService.GetAgentModelFactory(request.Agent);
                if (!agentModel.AgentCanUse())
                {
                    response.Status = HttpStatusCode.Forbidden;
                    if (agentModel.endDate.HasValue && agentModel.endDate.Value < DateTime.Now)
                    {
                        response.BusinessMessage = string.Format("参数校验错误,账号已过期。过期时间为:{0}", agentModel.endDate.Value.ToString("yyyy-MM-dd HH:mm:ss"));
                        return(response);
                    }
                    response.BusinessMessage = "参数校验错误,账号已禁用。";
                    return(response);
                }
                //获取[顶级]代理人是否重复数据的标记addbygpj20180829
                int repeateQuote = agentModel.repeat_quote;
                #region userinfo逻辑
                //微信端逻辑 次级代理
                if (request.ChildAgent > 0)
                {
                    agentModel = _getAgentInfoService.GetAgentModelFactory(request.ChildAgent);
                    if (agentModel.AgentCanUse())
                    {
                        request.Agent = request.ChildAgent;
                    }
                    else
                    {
                        return(new GetReInfoResponse
                        {
                            BusinessMessage = "您的账号已被禁用,如有疑问请联系管理员。",
                            Status = HttpStatusCode.Forbidden
                        });
                    }
                }
                #region 摄像头的黑名单、查重过滤
                bool isAdd = true;
                if (request.RenewalType == 3)
                {
                    //黑名单 //查重
                    CameraBackDataViewModel backData = _fiterAndRepeatDataService.GetFiterData(request.LicenseNo, topAgent, request.ChildAgent, request.CustKey, request.CityCode, request.RenewalCarType, repeateQuote, roleType);
                    if (backData != null)
                    {
                        if (backData.IsBlack)
                        {
                            //在黑名单列表中,无需继续往下,执行直接return
                            return(new GetReInfoResponse
                            {
                                BusinessMessage = "车辆已进入黑名单,未执行续保操作",
                                Status = HttpStatusCode.Forbidden
                            });
                        }
                        else
                        {
                            //不在黑名单列表中
                            if (!string.IsNullOrEmpty(backData.Buid) && !string.IsNullOrEmpty(backData.Agent) && !string.IsNullOrEmpty(backData.OpenId))
                            {
                                isAdd           = false;
                                request.Agent   = int.Parse(backData.Agent);
                                request.CustKey = backData.OpenId;
                            }
                        }
                    }
                }
                #endregion
                #region 操作bx_userinfo对象
                bx_userinfo userinfo = UserinfoSearchFactory.Find(request, _userInfoRepository);
                if (userinfo == null)
                {
                    if (!string.IsNullOrEmpty(_isAddIdCardBack6) && _isAddIdCardBack6.Equals("1") && string.IsNullOrEmpty(request.SixDigitsAfterIdCard))
                    {
                        //如果身份证后6位字段为空,则取数据库中该车牌其他的记录的值
                        Stopwatch ssw = new Stopwatch();
                        ssw.Start();
                        //查重复数据
                        RepeatUserInfoModel        model      = new RepeatUserInfoModel();
                        List <RepeatUserInfoModel> listRepeat = _userInfoRepository.GetLicenseRepeat(topAgent, request.LicenseNo);
                        if (listRepeat.Any())
                        {
                            model = listRepeat.Where(l => l.SixDigitsAfterIdCard != null && l.SixDigitsAfterIdCard.Trim() != "").OrderByDescending(o => o.UpdateTime).FirstOrDefault();
                        }
                        //取一条赋值后六位
                        if (model != null && model.Buid > 0)
                        {
                            request.SixDigitsAfterIdCard = model.SixDigitsAfterIdCard;
                        }
                        logError.Info(string.Format("buid为{0},后6位插入时间{1}", 0, ssw.ElapsedMilliseconds));
                        ssw.Stop();
                    }
                    userinfo = UserinfoMakeFactory.Save(request, roleType, _userInfoRepository, agentModel.TopAgentId);
                    if (request.IsLastYearNewCar == 1)
                    {
                        isReadCache = await _checkCarNeedDrivingInfoService.GetInfo(userinfo);
                    }
                }
                else
                {
                    if (!string.IsNullOrEmpty(_isAddIdCardBack6) && _isAddIdCardBack6.Equals("1") && string.IsNullOrEmpty(request.SixDigitsAfterIdCard) && string.IsNullOrEmpty(userinfo.SixDigitsAfterIdCard))
                    {
                        //如果身份证后6位字段为空,则取数据库中该车牌其他的记录的值
                        Stopwatch ssw = new Stopwatch();
                        ssw.Start();
                        //查重复数据
                        RepeatUserInfoModel        model      = new RepeatUserInfoModel();
                        List <RepeatUserInfoModel> listRepeat = _userInfoRepository.GetLicenseRepeat(topAgent, request.LicenseNo);
                        if (listRepeat.Any())
                        {
                            model = listRepeat.Where(l => l.SixDigitsAfterIdCard != null && l.SixDigitsAfterIdCard.Trim() != "").OrderByDescending(o => o.UpdateTime).FirstOrDefault();
                        }
                        //取一条赋值后六位
                        if (model != null && model.Buid > 0)
                        {
                            request.SixDigitsAfterIdCard = model.SixDigitsAfterIdCard;
                        }
                        logError.Info(string.Format("buid为{0},后6位插入时间{1}", userinfo.Id, ssw.ElapsedMilliseconds));
                        ssw.Stop();
                    }
                    userinfo = UserinfoMakeFactory.Update(request, userinfo, _userInfoRepository, agentModel.TopAgentId);
                    bool isNeedCheckNeed = !(request.IsLastYearNewCar == 1 & (!string.IsNullOrWhiteSpace(request.CarVin) && !string.IsNullOrWhiteSpace(request.EngineNo)));
                    if (request.IsLastYearNewCar == 1)
                    {
                        //超过半年的数据要重新调用车型信息
                        if (userinfo.UpdateTime.HasValue && userinfo.UpdateTime.Value.AddMonths(6) <= DateTime.Now)
                        {
                            isReadCache = await _checkCarNeedDrivingInfoService.GetInfo(userinfo);
                        }
                        else
                        {
                            if (userinfo.NeedEngineNo == 1) //以前没有拿到行驶证信息
                            {
                                if (isNeedCheckNeed)        //没有拿到车架号及发动机号
                                {
                                    isReadCache = await _checkCarNeedDrivingInfoService.GetInfo(userinfo);
                                }
                            }
                        }
                    }
                }
                #endregion
                long buid = userinfo.Id;
                #endregion
                #region bx_quotereq_carinfo 逻辑
                var reqCacheKey = string.Format("{0}-{1}", buid, "reqcarinfo");
                var quotereq    = _quoteReqCarinfoRepository.Find(buid);
                if (quotereq == null)
                {
                    QuoteReqCarInfoMakeFactory.Save(buid, request.IsLastYearNewCar, _quoteReqCarinfoRepository);
                }
                else
                {
                    QuoteReqCarInfoMakeFactory.Update(quotereq, request.IsLastYearNewCar, _quoteReqCarinfoRepository);
                }
                #endregion
                if (request.RenewalSource != -1)
                {
                    #region 调用中心返回response信息
                    response = await _toCenterFromReInfoService.PushCenterService(request, buid, reqCacheKey);

                    #endregion
                }
                if (response.BusinessStatus == 4 || request.RenewalSource == -1)
                {
                    bool isOver = false;
                    #region  读库数据
                    isOver            = _getReInfoState.GetState(buid);
                    response          = new GetReInfoResponse();
                    response.UserInfo = _userInfoRepository.FindByBuid(buid);
                    if (!isOver)
                    {
                        if (response.UserInfo.NeedEngineNo == 1)
                        {
                            //需要完善行驶证信息
                            response.BusinessStatus  = 2;
                            response.BusinessMessage = "需要完善行驶证信息(车辆信息和险种都没有获取到)";
                        }
                        if (response.UserInfo.NeedEngineNo == 0 && response.UserInfo.RenewalStatus != 1)
                        {
                            //获取车辆信息成功,但获取险种失败
                            response.BusinessStatus  = 3;
                            response.BusinessMessage = "获取车辆信息成功(车架号,发动机号,品牌型号及初登日期),险种获取失败";
                        }
                        if ((response.UserInfo.NeedEngineNo == 0 && response.UserInfo.LastYearSource > -1) || response.UserInfo.RenewalStatus == 1)
                        {
                            //续保成功
                            response.BusinessStatus  = 1;
                            response.BusinessMessage = "续保成功";
                            response.SaveQuote       = _carRenewalRepository.FindByLicenseno(request.LicenseNo);
                            response.CarInfo         = _carInfoRepository.Find(response.UserInfo.LicenseNo);
                        }
                    }
                    else
                    {
                        if (response.UserInfo.LastYearSource == -1)
                        {
                            response.BusinessStatus  = -10002;
                            response.BusinessMessage = "获取续保信息失败";
                        }
                    }
                    response.Status = HttpStatusCode.OK;
                    #endregion
                }
                response.UserInfo.Id = buid;
                #region 发送分配请求
                string moldName           = response.UserInfo != null ? response.UserInfo.MoldName : string.Empty; //车型
                string businessExpireDate = string.Empty;                                                          //商业险到期
                string forceExpireDate    = string.Empty;                                                          //交强险到期
                if (response.SaveQuote != null)
                {
                    businessExpireDate = response.SaveQuote.LastBizEndDate.HasValue
                        ? response.SaveQuote.LastBizEndDate.Value.ToString("yyyy-MM-dd HH:mm:ss")
                        : string.Empty;
                    forceExpireDate = response.SaveQuote.LastForceEndDate.HasValue
                        ? response.SaveQuote.LastForceEndDate.Value.ToString("yyyy-MM-dd HH:mm:ss")
                        : string.Empty;
                }
                //调用重新分配的接口
                if (request.RenewalType == 3)
                {
                    /*
                     * 调用院院的分配方法,将数据推过去即可,无需返回值
                     * 20180820修改,1,去掉是否调用摄像头进店(api.config的IsUrlDistributed标识)判断;2,修改分配方法,调用刘松年的新版接口
                     */
#pragma warning disable CS4014 // 由于此调用不会等待,因此在调用完成前将继续执行当前方法
                    Task.Factory.StartNew(() =>
                    {
                        _sentDistributedService.SentDistributed(response.BusinessStatus, moldName, buid, topAgent, request.ChildAgent, userinfo.Agent, request.CityCode, request.LicenseNo, request.RenewalType, userinfo.RenewalType.Value, businessExpireDate, forceExpireDate, false, request.ChildAgent, request.CameraId, isAdd, repeateQuote, roleType, request.CustKey, request.CityCode);
                    });
#pragma warning restore CS4014 // 由于此调用不会等待,因此在调用完成前将继续执行当前方法
                }
                #endregion
                #region 修改批续进来的状态
                if (response.BusinessStatus == 1)
                {
                    UpdateBatchRenewalStatus(buid, 1);
                }
                else if (response.BusinessStatus == 2)
                {
                    UpdateBatchRenewalStatus(buid, 2);
                }
                else if (response.BusinessStatus == 3)
                {
                    UpdateBatchRenewalStatus(buid, 4);
                }
                else
                {
                    UpdateBatchRenewalStatus(buid, 2);
                }
                #endregion
            }
            catch (Exception ex)
            {
                MetricUtil.UnitReports("renewal_service");
                response.Status = HttpStatusCode.ExpectationFailed;
                logError.Info("续保请求发生异常:" + ex.Source + "\n" + ex.StackTrace + "\n" + ex.Message + "\n" + ex.InnerException + ",请求对象信息:" + request.ToJson() + ";返回对象信息" + response.ToJson());
            }
            return(response);
        }
示例#5
0
        public GetReInfoResponse GetReInfo(GetReInfoRequest request)
        {
            var xubaokey = new
            {
                LicenseNo = request.LicenseNo,
                Agent     = request.Agent
            };

            var xuBaoCacheKey = CommonCacheKeyFactory.MakeCacheKey(xubaokey);

            var xuBaoKey = string.Format("{0}-{1}", xuBaoCacheKey, "key");
            var cacheKey = CacheProvider.Get <string>(xuBaoKey);

            if (cacheKey == null)
            {
                for (int i = 0; i < 30; i++)
                {
                    cacheKey = CacheProvider.Get <string>(xuBaoKey);
                    if (!string.IsNullOrWhiteSpace(cacheKey))
                    {
                        break;
                    }
                    else
                    {
                        Task.Delay(TimeSpan.FromSeconds(1));
                    }
                }
            }

            if (!string.IsNullOrWhiteSpace(cacheKey))
            {
                GetReInfoResponse response = new GetReInfoResponse();

                //续保 需要的表
                //bx_userinfo
                //bx_renewalquote
                //bx_carinfo

                //步骤1  续保的时候 会发送消息队列 ,这个时候 会把 key传过去eg:aaaa。

                //步骤2   中心在续保的时候 ,需要根据这个key 设置一个开关 eg:aaaa-key:1,放在缓存中,成功的时候要置1,刚开始是空值
                //等续保结束后,先将上面列出的表写入缓存
                //其中: 键值分别是:
                //bx_userinfo        :aaaa-userinfo
                //bx_renewalquote    :aaaa-renewal
                //bx_carinfo         :aaaa-carinfo
                //步骤3: 讲开关缓存设置续保完成标识:aaaa-key:1


                //续保缓存标示(是否成功)


                if (cacheKey == "1")
                {
                    response.UserInfo =
                        CacheProvider.Get <bx_userinfo>(string.Format("{0}-{1}", xuBaoCacheKey, "userinfo"));
                    response.SaveQuote =
                        CacheProvider.Get <bx_renewalquote>(string.Format("{0}-{1}", xuBaoCacheKey, "renewal"));
                    response.CarInfo        = CacheProvider.Get <bx_carinfo>(string.Format("{0}-{1}", xuBaoCacheKey, "carinfo"));
                    response.BusinessStatus = 1;
                }
                else
                {
                    response = null;
                }

                return(response);
            }
            else
            {
                return(null);
            }
        }
示例#6
0
        public async Task <GetReInfoResponse> PushCenterService(GetReInfoRequest request, long buid, string reqCacheKey)
        {
            var response = new GetReInfoResponse();

            //续保选择其他保司续保时,只取行驶本信息,不发续保请求
            #region 发送续保消息
            string xuBaoCacheKey = CommonCacheKeyFactory.CreateKeyWithLicense(request.LicenseNo + request.RenewalCarType);
            var    xuBaoKey      = string.Format("{0}-xb-{1}", xuBaoCacheKey, "key");
            CacheProvider.Remove(xuBaoKey);
            object msgBody;
            if (request.RenewalSource <= 0)
            {
                msgBody = new
                {
                    B_Uid          = buid,
                    IsCloseSms     = 0,
                    NotifyCacheKey = xuBaoCacheKey,
                    IsForceRenewal = request.IsForceRenewal == 1//是否强制刷新续保
                };
            }
            else
            {
                msgBody = new
                {
                    B_Uid      = buid,
                    IsCloseSms = 0,
                    //改为help类里面通用方法 by.20180904.gpj
                    RenewalSource  = SourceGroupAlgorithm.ParseOldSource(request.RenewalSource).ToHashSet(),
                    NotifyCacheKey = xuBaoCacheKey,
                    IsForceRenewal = request.IsForceRenewal == 1//是否强制刷新续保
                };
                ///如果传进来的三个值都不为空  ShowPACheckCode=1
                if (!string.IsNullOrWhiteSpace(request.RequestKey) && request.PAUKey != 0 && request.YZMArea != null)
                {
                    msgBody = new
                    {
                        B_Uid      = buid,
                        IsCloseSms = 0,
                        //改为help类里面通用方法 by.20180904.gpj
                        RenewalSource  = SourceGroupAlgorithm.ParseOldSource(request.RenewalSource).ToHashSet(),
                        NotifyCacheKey = xuBaoCacheKey,
                        RequestKey     = request.RequestKey,
                        PAUKey         = request.PAUKey,
                        YZMArea        = request.YZMArea,
                        IsForceRenewal = request.IsForceRenewal == 1//是否强制刷新续保
                    };
                }
            }
            //发送续保信息
            //var msgbody = _messageCenter.SendToMessageCenter(msgBody.ToJson(), ConfigurationManager.AppSettings["MessageCenter"], ConfigurationManager.AppSettings["BxXuBaoName"]);
            string strurl             = string.Format("{0}/service/getrenewal", ConfigurationManager.AppSettings["CenterNewUrl"]);
            string returnServerIpPort = string.Empty;
            string result             = ProxyCenterHttpClient.Post(strurl, msgBody.ToJson(), 60, ref returnServerIpPort);

            #endregion
            #region 缓存读取
            ExecutionContext.SuppressFlow();
            response = await _carInsuranceCache.GetReInfo(request, buid);

            #region 改由中心 写 缓存
            response.ReqCarinfo = CacheProvider.Get <bx_quotereq_carinfo>(reqCacheKey);
            #endregion
            #endregion

            return(response);
        }
示例#7
0
        public async Task <GetReInfoViewModel> GetViewModel(GetReInfoRequest request, GetReInfoResponse response, int viewCityCode, string viewCustkey, int topAgent, string absolutori, BHFunctionLog fucnLog, string traceId)
        {
            GetReInfoViewModel viewModel = new GetReInfoViewModel();

            if (response.Status == HttpStatusCode.BadRequest || response.Status == HttpStatusCode.Forbidden)
            {
                viewModel.BusinessStatus = -10001;
                if (!string.IsNullOrWhiteSpace(response.BusinessMessage))
                {
                    viewModel.StatusMessage = response.BusinessMessage;
                }
                else
                {
                    viewModel.StatusMessage = "参数校验错误,请检查您的校验码";
                }

                return(viewModel);
            }
            if (response.Status == HttpStatusCode.ExpectationFailed)
            {
                viewModel.BusinessStatus = -10003;
                viewModel.StatusMessage  = "服务发生异常";
                return(viewModel);
            }
            else
            {
                viewModel.BusinessStatus = response.BusinessStatus;
                viewModel.StatusMessage  = response.BusinessMessage;
                fucnLog = LogAssistant.GenerateBHFuncLog(traceId, "续保信息的userinfo部分", "ConvertToViewModel", 1);
                AspectF.Define.InfoFunctionLog(fucnLog).Do(() => { viewModel.UserInfo = response.UserInfo.ConvertToViewModel(response.SaveQuote, response.CarInfo, response.LastInfo, request.TimeFormat); });
                //显示商业险交强险投保单号
                if (request.CanShowNo == 0)
                {
                    viewModel.UserInfo.BizNo   = null;
                    viewModel.UserInfo.ForceNo = null;
                }
                if (request.CanShowExhaustScale == 0)
                {
                    viewModel.UserInfo.ExhaustScale = null;
                }
                viewModel.UserInfo.IsPublic = response.ReqCarinfo == null ? 0 : (response.ReqCarinfo.is_public.HasValue ? response.ReqCarinfo.is_public.Value : 0);
                if (request.ShowAutoMoldCode == 1)
                {
                    viewModel.UserInfo.AutoMoldCode = response.ReqCarinfo == null ? string.Empty : (string.IsNullOrWhiteSpace(response.ReqCarinfo.auto_model_code) ? string.Empty : response.ReqCarinfo.auto_model_code);
                }
                #region 关系人星号判断
                if (request.RenewalType == 2)
                {
                    viewModel.UserInfo = _reWriteUserInfo.ReWriteUserInfoService(viewModel.UserInfo, topAgent);
                }
                #endregion
                viewModel.UserInfo.CityCode = viewCityCode;
                viewModel.CustKey           = viewCustkey;
                if (response.BusinessStatus == 1)
                {
                    viewModel.SaveQuote = response.SaveQuote.ConvetToViewModel();
                    //addbygupj 20180926 续保返回保费
                    if (request.ShowBaoFei == 1)
                    {
                        viewModel.XianZhong = response.RenewalPremium.ConvetToViewModel(response.SaveQuote);
                    }
                    if (request.Group > 0)
                    {
                        //此处原先if判断,改为调用转换方法 by.20180904.gpj
                        viewModel.SaveQuote.Source = SourceGroupAlgorithm.GetNewSource(Convert.ToInt32(viewModel.SaveQuote.Source));
                    }
                }
                else
                {
                    viewModel.SaveQuote = new SaveQuoteViewModel();
                    viewModel.SaveQuote.HcXiuLiChang     = "0";
                    viewModel.SaveQuote.HcXiuLiChangType = "-1";
                    viewModel.SaveQuote.Fybc             = "0";
                    viewModel.SaveQuote.FybcDays         = "0";
                    viewModel.SaveQuote.SheBeis          = new List <SheBei>();
                    viewModel.SaveQuote.SheBeiSunShi     = "0";
                    viewModel.SaveQuote.BjmSheBeiSunShi  = "0";
                    viewModel.SaveQuote.SanZheJieJiaRi   = "0";
                    //addbygupj 20180926 续保返回保费
                    if (request.ShowBaoFei == 1)
                    {
                        viewModel.XianZhong = new XianZhong()
                        {
                            CheSun                 = new XianZhongUnit(),
                            SanZhe                 = new XianZhongUnit(),
                            DaoQiang               = new XianZhongUnit(),
                            SiJi                   = new XianZhongUnit(),
                            ChengKe                = new XianZhongUnit(),
                            BoLi                   = new XianZhongUnit(),
                            HuaHen                 = new XianZhongUnit(),
                            BuJiMianCheSun         = new XianZhongUnit(),
                            BuJiMianSanZhe         = new XianZhongUnit(),
                            BuJiMianDaoQiang       = new XianZhongUnit(),
                            BuJiMianFuJia          = new XianZhongUnit(),
                            BuJiMianChengKe        = new XianZhongUnit(),
                            BuJiMianSiJi           = new XianZhongUnit(),
                            BuJiMianHuaHen         = new XianZhongUnit(),
                            BuJiMianSheShui        = new XianZhongUnit(),
                            BuJiMianZiRan          = new XianZhongUnit(),
                            BuJiMianJingShenSunShi = new XianZhongUnit(),
                            SheShui                = new XianZhongUnit(),
                            ZiRan                  = new XianZhongUnit(),
                            HcSheBeiSunshi         = new XianZhongUnit(),
                            HcHuoWuZeRen           = new XianZhongUnit(),
                            HcJingShenSunShi       = new XianZhongUnit(),
                            HcSanFangTeYue         = new XianZhongUnit(),
                            HcXiuLiChang           = new XianZhongUnit(),
                            Fybc                   = new XianZhongUnit(),
                            FybcDays               = new XianZhongUnit(),
                            SheBeiSunShi           = new XianZhongUnit(),
                            BjmSheBeiSunShi        = new XianZhongUnit()
                        };
                    }
                }
                if (response.CenterPicCodeCacheModel != null)
                {
                    if (viewModel.PACheckCode == null)
                    {
                        viewModel.PACheckCode = new PACheckCode();
                    }
                    viewModel.PACheckCode.VerificationCode = response.CenterPicCodeCacheModel.VerificationCode;
                    viewModel.PACheckCode.RequestKey       = response.CenterPicCodeCacheModel.RequestKey;
                    viewModel.PACheckCode.PAUKey           = int.Parse(response.CenterPicCodeCacheModel.UKey);
                }
                if (response.BusinessStatus == 1)
                {
                    viewModel.StatusMessage = "续保成功";
                }
                else if (response.BusinessStatus == 2)
                {
                    viewModel.StatusMessage = "需要完善行驶证信息(车辆信息和险种都没有获取到)";
                }
                else if (response.BusinessStatus == 3)
                {
                    viewModel.StatusMessage = "获取车辆信息成功(车架号,发动机号,品牌型号及初登日期),险种获取失败";
                }
                else if (response.BusinessStatus == -10002)
                {
                    viewModel.StatusMessage = "获取续保信息失败";
                }
                else if (response.BusinessStatus == 8)
                {
                    viewModel.UserInfo.ForceExpireDate    = response.LastInfo.last_end_date;
                    viewModel.UserInfo.BusinessExpireDate = response.LastInfo.last_business_end_date;
                    if (!string.IsNullOrWhiteSpace(viewModel.UserInfo.ForceExpireDate))
                    {
                        var nb = DateTime.Parse(viewModel.UserInfo.ForceExpireDate);
                        if (nb.Date == DateTime.MinValue.Date)
                        {
                            viewModel.UserInfo.ForceExpireDate = "";
                        }
                    }
                    if (!string.IsNullOrWhiteSpace(viewModel.UserInfo.BusinessExpireDate))
                    {
                        var nb = DateTime.Parse(viewModel.UserInfo.BusinessExpireDate);
                        if (nb.Date == DateTime.MinValue.Date)
                        {
                            viewModel.UserInfo.BusinessExpireDate = "";
                        }
                    }
                    viewModel.StatusMessage  = "投保公司:" + response.BusinessMessage + ";该车是续保期外的车或者是投保我司对接外的其他保险公司的车辆,这种情况,只能返回该车的投保日期(ForceExpireDate,BusinessExpireDate),险种取不到,不再返回";
                    viewModel.BusinessStatus = 1;
                }
                #region 广州人财保 特殊判断,屏蔽平安关系人,按一定比例不返回保司
                if (_gzcbAgentId.Equals(request.Agent.ToString()))
                {
                    #region 屏蔽关系人
                    if (_reInfoNoRelationSource.Split(new Char[] { ',' }).Contains(viewModel.SaveQuote.Source.ToString()))
                    {
                        viewModel.UserInfo.LicenseOwner    = "";
                        viewModel.UserInfo.InsuredName     = "";
                        viewModel.UserInfo.PostedName      = "";
                        viewModel.UserInfo.IdType          = 0;
                        viewModel.UserInfo.CredentislasNum = "";
                        viewModel.UserInfo.InsuredIdCard   = "";
                        viewModel.UserInfo.InsuredIdType   = 0;
                        viewModel.UserInfo.InsuredMobile   = "";
                        viewModel.UserInfo.HolderName      = "";
                        viewModel.UserInfo.HolderIdCard    = "";
                        viewModel.UserInfo.HolderIdType    = 0;
                        viewModel.UserInfo.HolderMobile    = "";
                        viewModel.UserInfo.OwnerSex        = "";
                        viewModel.UserInfo.OwnerBirthday   = "";
                        viewModel.UserInfo.InsuredSex      = "";
                        viewModel.UserInfo.InsuredBirthday = "";
                        viewModel.UserInfo.HolderSex       = "";
                        viewModel.UserInfo.HolderBirthday  = "";
                    }
                    #endregion
                    #region 重置source为-1 未取到保司
                    if (_isFalseReInfoService.IsFalseReInfo(request.Agent) &&
                        _reInfoFailedSource.Split(new Char[] { ',' }).Contains(viewModel.SaveQuote.Source.ToString()))
                    {
                        viewModel.SaveQuote.Source = -1;
                    }
                    #endregion
                }
                #endregion
                #region 爱保的只返回上年投保是人保的关系人信息
                //根据","拆分不同的代理人
                if (!string.IsNullOrEmpty(_reInfoClearRelation))
                {
                    string[] reAgent = _reInfoClearRelation.Split(';');
                    foreach (var itAgent in reAgent)
                    {
                        //获取代理人配置
                        string[] itemConfig = itAgent.Split(',');
                        //代理人配置读取,跟当前代理人比较
                        if (itemConfig[0].Equals(request.Agent.ToString()))
                        {
                            //根据.来拆分有哪些保司,不是授权的保司就置空关系人
                            if (!itemConfig[1].Split(new Char[] { '.' }).Contains(viewModel.SaveQuote.Source.ToString()))
                            {
                                viewModel.UserInfo.LicenseOwner    = "";
                                viewModel.UserInfo.InsuredName     = "";
                                viewModel.UserInfo.PostedName      = "";
                                viewModel.UserInfo.IdType          = 0;
                                viewModel.UserInfo.CredentislasNum = "";
                                viewModel.UserInfo.InsuredIdCard   = "";
                                viewModel.UserInfo.InsuredIdType   = 0;
                                viewModel.UserInfo.InsuredMobile   = "";
                                viewModel.UserInfo.HolderName      = "";
                                viewModel.UserInfo.HolderIdCard    = "";
                                viewModel.UserInfo.HolderIdType    = 0;
                                viewModel.UserInfo.HolderMobile    = "";
                                viewModel.UserInfo.OwnerSex        = "";
                                viewModel.UserInfo.OwnerBirthday   = "";
                                viewModel.UserInfo.InsuredSex      = "";
                                viewModel.UserInfo.InsuredBirthday = "";
                                viewModel.UserInfo.HolderSex       = "";
                                viewModel.UserInfo.HolderBirthday  = "";
                            }
                            break;
                        }
                    }
                }
                #endregion
                if (response.BusinessStatus != 1)
                {
                    viewModel.SaveQuote.Source = -1;
                }
                if (request.ShowXiuLiChangType == 0)
                {
                    viewModel.SaveQuote.HcXiuLiChang     = null;
                    viewModel.SaveQuote.HcXiuLiChangType = null;
                }
                if (request.ShowFybc == 0)
                {
                    viewModel.SaveQuote.Fybc     = null;
                    viewModel.SaveQuote.FybcDays = null;
                }
                if (request.ShowSheBei == 0)
                {
                    viewModel.SaveQuote.SheBeis         = null;
                    viewModel.SaveQuote.SheBeiSunShi    = null;
                    viewModel.SaveQuote.BjmSheBeiSunShi = null;
                }
                if (request.ShowSanZheJieJiaRi == 0)
                {
                    viewModel.SaveQuote.SanZheJieJiaRi = null;
                }
            }
            if (request.ShowInnerInfo == 0)
            {
                viewModel.UserInfo.Buid = null;
            }
            if (request.ShowRenewalCarType == 0)
            {
                viewModel.UserInfo.RenewalCarType = null;
            }
            if (request.ShowCarType == 0)
            {
                viewModel.UserInfo.CarType = null;
            }
            if (request.ShowOrg == 0)
            {
                viewModel.UserInfo.Organization = null;
            }
            if (request.ShowRelation == 0)
            {
                viewModel.UserInfo.OwnerBirthday   = null;
                viewModel.UserInfo.OwnerSex        = null;
                viewModel.UserInfo.HolderBirthday  = null;
                viewModel.UserInfo.HolderSex       = null;
                viewModel.UserInfo.InsuredBirthday = null;
                viewModel.UserInfo.InsuredSex      = null;
            }
            if (request.ShowExpireDateNum == 1)
            {
                //计算还剩多少天
                if (viewModel.UserInfo != null)
                {
                    int dayminus = 0;
                    if (!string.IsNullOrEmpty(viewModel.UserInfo.ForceExpireDate))
                    {
                        dayminus = TimeHelper.GetDayMinus(DateTime.Parse(viewModel.UserInfo.ForceExpireDate), DateTime.Now);
                    }
                    else if (!string.IsNullOrEmpty(viewModel.UserInfo.BusinessExpireDate))
                    {
                        dayminus = TimeHelper.GetDayMinus(DateTime.Parse(viewModel.UserInfo.BusinessExpireDate), DateTime.Now);
                    }
                    viewModel.UserInfo.ExpireDateNum = dayminus.ToString();
                }
            }
            else
            {
                viewModel.UserInfo.ExpireDateNum = null;
            }
            if (request.ShowPACheckCode == 0)
            {
                viewModel.PACheckCode = null;
            }
            if (request.ShowTransferModel == 0)
            {
                viewModel.TransferModelList = null;
            }
            else
            {
                if (response.TransferModelList != null && response.TransferModelList.Any())
                {
                    viewModel.TransferModelList = response.TransferModelList.ConvertToViewModel();
                }
                else
                {
                    viewModel.TransferModelList = new List <Models.ReportModel.TransferModelNew>();
                }
            }
            //addbygupj 20180926 续保返回保费
            if (request.ShowBaoFei == 0)
            {
                viewModel.XianZhong = null;
            }
            //if (request.ShowRenewalCarModel == 1)
            //{
            //    if (response.CarModel != null)
            //    {
            //        string yearday = string.Empty;
            //        if (string.IsNullOrWhiteSpace(response.CarModel.VehicleYear))
            //        {
            //            yearday = string.Empty;
            //        }
            //        else if (response.CarModel.VehicleYear.Length == 4)
            //        {
            //            yearday = response.CarModel.VehicleYear;
            //        }
            //        else if (response.CarModel.VehicleYear.Length >= 6)
            //        {
            //            yearday = response.CarModel.VehicleYear.Substring(0, 6);
            //        }
            //        viewModel.UserInfo.RenewalCarModel = string.Format("{0}/{1}/{2}/{3}/{4}/{5}",
            //            response.CarModel.VehicleName, response.CarModel.VehicleAlias,
            //            response.CarModel.VehicleExhaust.HasValue
            //                ? response.CarModel.VehicleExhaust.Value.ToString("f3")
            //                : "0", response.CarModel.VehicleSeat,
            //            response.CarModel.PriceT.HasValue ? response.CarModel.PriceT.Value.ToString("f1") : "0"
            //            , yearday);
            //    }
            //    else
            //    {
            //        viewModel.UserInfo.RenewalCarModel = string.Empty;
            //    }
            //}


            #region 摄像头用户向第三方推送续保消息
            if (request.RenewalType == 3)
            {
                fucnLog = LogAssistant.GenerateBHFuncLog(traceId, "续保调用第三方接口传数据", "PostThirdPart", 1);
                AspectF.Define.InfoFunctionLog(fucnLog).Do(() => { _postThirdPartService.PostThirdPart(topAgent, viewModel); });
            }
            #endregion
            #region 多家绑定摄像头

            if (request.RenewalType == 3)
            {
                if (request.Agent == 88794)
                {
                    fucnLog = LogAssistant.GenerateBHFuncLog(traceId, "绑定摄像头,获取续保信息", "GetRenewalRequest", 1);
                    AspectF.Define.InfoFunctionLog(fucnLog).Do(() =>
                    {
                        Task.Factory.StartNew(() =>
                        {
                            GetRenewalRequest(88798, ("88798").GetMd5().ToUpper(), request.LicenseNo, request.CityCode.ToString(), request.RenewalCarType.ToString(), absolutori, 88798, request.CameraId);
                        });
                    });
                    fucnLog = LogAssistant.GenerateBHFuncLog(traceId, "绑定摄像头,获取续保信息", "GetRenewalRequest", 1);
                    AspectF.Define.InfoFunctionLog(fucnLog).Do(() =>
                    {
                        Task.Factory.StartNew(() =>
                        {
                            GetRenewalRequest(88797, ("88797").GetMd5().ToUpper(), request.LicenseNo, request.CityCode.ToString(), request.RenewalCarType.ToString(), absolutori, 88797, request.CameraId);
                        });
                    });
                }
            }
            //改成配置
            fucnLog = LogAssistant.GenerateBHFuncLog(traceId, "更多摄像头绑定", "MoreCameraBindings", 1);
            await AspectF.Define.InfoFunctionLog(fucnLog).Return(() => { return(MoreCameraBindings(request, absolutori)); });

            #endregion

            return(viewModel);
        }
        public async Task <GetReInfoResponse> GetReInfo(GetReInfoRequest request, long?buid = null)
        {
            ILog logInfo = LogManager.GetLogger("ERROR");
            //logInfo.Info("读取缓存数据开始" + request.ToJson());
            string xuBaoCacheKey = CommonCacheKeyFactory.CreateKeyWithLicense(request.LicenseNo + request.RenewalCarType);

            var xuBaoKey = string.Format("{0}-xb-{1}", xuBaoCacheKey, "key");
            var cacheKey = CacheProvider.Get <string>(xuBaoKey);

            #region

            //var step1val = string.Empty;
            //var step1va2 = string.Empty;
            //var step1va3 = string.Empty;
            //var step1va4 = string.Empty;
            StringBuilder sb = new StringBuilder();
            #endregion

            if (cacheKey == null)
            {
                for (int i = 0; i < 115; i++)
                {
                    cacheKey = CacheProvider.Get <string>(xuBaoKey);
                    //step1val = xuBaoKey;
                    //step1va2 = cacheKey;
                    if (!string.IsNullOrWhiteSpace(cacheKey))
                    {
                        if (cacheKey == "0" || cacheKey == "1" || cacheKey == "2")
                        {
                            break;
                        }
                    }
                    else
                    {
                        //ExecutionContext.SuppressFlow();
                        await Task.Delay(TimeSpan.FromSeconds(1));

                        //ExecutionContext.RestoreFlow();
                    }
                    //logInfo.Info("读取缓存数据循环"+i+"     "+ request.ToJson() + ";  缓存key是step1va2:" + step1va2 + " --  key:step1va1" + step1val);
                    //sb.AppendLine("读取缓存数据循环" + i + "     " + request.ToJson() + ";  缓存key是step1va2:" + step1va2 +
                    //              " --  key:step1va1" + step1val);
                }
            }

            GetReInfoResponse response = new GetReInfoResponse();
            try
            {
                if (!string.IsNullOrWhiteSpace(cacheKey))
                {
                    //续保 需要的表
                    //bx_userinfo
                    //bx_renewalquote
                    //bx_carinfo

                    //步骤1  续保的时候 会发送消息队列 ,这个时候 会把 key传过去eg:aaaa。

                    //步骤2   中心在续保的时候 ,需要根据这个key 设置一个开关 eg:aaaa-key:1,放在缓存中,成功的时候要置1,刚开始是空值
                    //等续保结束后,先将上面列出的表写入缓存
                    //其中: 键值分别是:
                    //bx_userinfo        :aaaa-userinfo
                    //bx_car_renewal    :aaaa-renewal
                    //bx_carinfo         :aaaa-carinfo
                    //步骤3: 讲开关缓存设置续保完成标识:aaaa-key:1


                    //续保缓存标示(是否成功)
                    var renwal = CommonCacheKeyFactory.CreateKeyWithLicense(request.LicenseNo + request.RenewalCarType);

                    if (cacheKey == "1")
                    {
                        response.UserInfo =
                            CacheProvider.Get <bx_userinfo>(string.Format("{0}-{1}", xuBaoCacheKey, "userinfo"));

                        response.SaveQuote =
                            CacheProvider.Get <bx_car_renewal>(string.Format("{0}-{1}", renwal, "renewal"));
                        response.CarInfo  = CacheProvider.Get <bx_carinfo>(string.Format("{0}-{1}", renwal, "carinfo"));
                        response.LastInfo = CacheProvider.Get <bx_lastinfo>(string.Format("{0}-{1}", renwal, "lastinfo"));
                        //续保返回保费addbygpj20180926
                        response.RenewalPremium = CacheProvider.Get <bx_car_renewal_premium>(string.Format("{0}-{1}", renwal, "premium"));
                        response.BusinessStatus = 1;
                    }
                    else if (cacheKey == "0")
                    {
                        #region 先获取平安验证码
                        if (buid != null)
                        {
                            if (request.ShowPACheckCode == 1 && string.IsNullOrWhiteSpace(request.RequestKey) && request.PAUKey == 0 && request.YZMArea == null)
                            {
                                /*
                                 * 如果平安续保返回需要验证码,缓存平安验证码信息
                                 */
                                string payzmkey = string.Format("{0}-PAYZM", buid);
                                CenterPicCodeCacheModel payzmvalue = CacheProvider.Get <CenterPicCodeCacheModel>(payzmkey);
                                if (payzmvalue != null)
                                {
                                    response          = new GetReInfoResponse();
                                    response.UserInfo = new bx_userinfo();
                                    response.CenterPicCodeCacheModel = payzmvalue;
                                    if (response.CenterPicCodeCacheModel.ErrCode == -210002)
                                    {
                                        response.BusinessStatus  = -10009;
                                        response.BusinessMessage = "获取续保信息失败,请输入验证码坐标";
                                    }
                                    else if (response.CenterPicCodeCacheModel.ErrCode == -210003)
                                    {
                                        response.BusinessStatus  = 0;
                                        response.BusinessMessage = "输入验证码错误";
                                    }
                                    else if (response.CenterPicCodeCacheModel.ErrCode == -210004)
                                    {
                                        response.BusinessStatus  = 0;
                                        response.BusinessMessage = "输入超时";
                                    }
                                    response.Status      = HttpStatusCode.OK;
                                    response.UserInfo.Id = (long)buid;
                                    return(response);
                                }
                            }
                        }
                        #endregion
                        response.UserInfo =
                            CacheProvider.Get <bx_userinfo>(string.Format("{0}-{1}", xuBaoCacheKey, "userinfo"));
                        response.CarInfo = CacheProvider.Get <bx_carinfo>(string.Format("{0}-{1}", renwal, "carinfo"));

                        if (response.UserInfo.NeedEngineNo == 1)
                        {
                            response.BusinessStatus = 2;
                        }
                        else if (response.UserInfo.NeedEngineNo == 0) //去掉 && response.UserInfo.QuoteStatus == 0
                        {
                            response.BusinessStatus = 3;
                        }
                        else
                        {
                            response.BusinessStatus = 4;
                        }
                    }
                    else if (cacheKey == "2")
                    {
                        response.UserInfo =
                            CacheProvider.Get <bx_userinfo>(string.Format("{0}-{1}", xuBaoCacheKey, "userinfo"));
                        //var renwal = CommonCacheKeyFactory.CreateKeyWithLicense(request.LicenseNo);
                        response.SaveQuote      = new bx_car_renewal();
                        response.RenewalPremium = new bx_car_renewal_premium();
                        //CacheProvider.Get<bx_car_renewal>(string.Format("{0}-{1}", renwal, "renewal"));
                        response.BusinessStatus  = 8;
                        response.LastInfo        = CacheProvider.Get <bx_lastinfo>(string.Format("{0}-{1}", renwal, "lastinfo"));
                        response.BusinessMessage = CacheProvider.Get <string>(string.Format("{0}-xb-company", xuBaoCacheKey));
                    }
                    //过户车的模型
                    response.TransferModelList = CacheProvider.Get <List <TransferModel> >(string.Format("{0}-xb-key-newcarinfo", xuBaoCacheKey));
                    return(response);
                }
                else
                {
                    response.UserInfo = new bx_userinfo();
                    //如果没拿到值,初始化以下基础信息字段
                    response.UserInfo.LicenseNo = request.LicenseNo;
                    response.UserInfo.CarVIN    = request.CarVin;
                    response.UserInfo.EngineNo  = request.EngineNo;
                    response.BusinessStatus     = 0;//缓存异常
                    response.BusinessMessage    = "请求超时或缓存异常,请重试";
                    return(response);
                }
            }
            catch (Exception ex)
            {
                logInfo.Info("读取缓存发生异常" + ex.Source + "\n" + ex.StackTrace + "\n" + ex.Message + "\n" + ex.InnerException);
            }
            return(response);
        }