/// <summary>
        /// 刷新缓存
        /// </summary>
        /// <returns></returns>
        private async Task <bool> RefreshDeviceCache()
        {
            using (var client = new Service.Config.ConfigClient())
            {
                var result = await client.RefreshDeviceModelCacheAsync();

                return(result.Result);
            }
        }
        /// <summary>
        ///     发红包
        /// </summary>
        /// <returns></returns>
        public async Task <Tuple <bool, string, string> > SendRedEnvelopAsync()
        {
            try
            {
                // 发红包之前再验证下
                var validateResult = await ValidateAsync();

                if (!validateResult.Item1)
                {
                    return(validateResult);
                }

                // 怼到redis里面
                var cacheResult =
                    await _oaRedEnvelopeCacheManager.SaveUserOARedEnvelopeObjectAsync(_oaRedEnvelopeBuilderModel);

                // 判断是否异步
                using (var configClient = new Service.Config.ConfigClient())
                {
                    // 判断开关是否打开
                    var asyncFlag = configClient.GetOrSetRuntimeSwitch("OAEnvelopeAsyscFlag")?.Result?.Value ?? false;
                    // 判断是走同步还是异步
                    if (asyncFlag)
                    {
                        // 发送MQ
                        if (cacheResult)
                        {
                            // 成功
                            // 发送到MQ中
                            MqProducer.Send("notification.OAEnvelopeReciveConsumer", _oaRedEnvelopeBuilderModel, 1000);

                            return(await Task.FromResult(Tuple.Create(true, string.Empty, string.Empty)));
                        }
                    }
                    else
                    {
                        return(await CallbackRedEnvelopAsync());
                    }
                }
                // 失败
                return(Tuple.Create(false, "-3", ""));
            }
            catch (Exception e)
            {
                Logger.Error(
                    $"OARedEnvelopeUserReceiveManager -> SendRedEnvelopAsync -> {JsonConvert.SerializeObject(_oaRedEnvelopeBuilderModel)}",
                    e.InnerException ?? e);
                throw;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 获取所有年检代办供应商
        /// </summary>
        /// <returns></returns>
        public List <string> GetAllAnnualInspectionVender()
        {
            var result = null as List <string>;

            try
            {
                using (var client = new Service.Config.ConfigClient())
                {
                    var clientResult = client.GetVehicleAnnualInspectionVenderList();
                    clientResult.ThrowIfException(true);
                    result = clientResult.Result?.Select(s => s.VenderShortName)?.ToList();
                }
            }
            catch (Exception ex)
            {
                Logger.Error("GetAllAnnualInspectionVender", ex);
            }
            return(result ?? new List <string>());
        }
        /// <summary>
        ///     发红包回调
        /// </summary>
        /// <returns></returns>
        public async Task <Tuple <bool, string, string> > CallbackRedEnvelopAsync()
        {
            try
            {
                // 领取记录增加到数据库中。
                using (var dbHelper = DbHelper.CreateDbHelper())
                {
                    // 获取user
                    var user = await FetchUserByUserIdByCacheAsync(_oaRedEnvelopeBuilderModel.UserId);

                    // 添加到明细表
                    var result = await DalOARedEnvelopeDetail.InsertOARedEnvelopeDetailAsync(dbHelper,
                                                                                             new OARedEnvelopeDetailModel
                    {
                        GetMoney            = _oaRedEnvelopeBuilderModel.Money,
                        OfficialAccountType = _oaRedEnvelopeBuilderModel.OfficialAccountType,
                        OpenId         = _oaRedEnvelopeBuilderModel.OpenId,
                        UserId         = _oaRedEnvelopeBuilderModel.UserId,
                        ReferrerUserId = _oaRedEnvelopeBuilderModel.ReferrerUserId,
                        NickName       = _oaRedEnvelopeBuilderModel.WXNickName,
                        WXHeadImgUrl   = _oaRedEnvelopeBuilderModel.WXHeadPicUrl,
                        GetDate        = _oaRedEnvelopeBuilderModel.RequestTime.Date,
                    });

                    if (result > 0)
                    {
                        // 设置数据库插入成功
                        _oaRedEnvelopeBuilderModel.DbDetailGet(result);

                        using (var configClient = new Service.Config.ConfigClient())
                        {
                            // 判断开关是否打开
                            var payServiceFlag = configClient.GetOrSetRuntimeSwitch("OAEnvelopeUsePayService")?.Result?.Value ?? false;
                            if (payServiceFlag)
                            {
                                // 调用PAY 实际给用户发钱
                                using (var payClient = new PayClient())
                                {
                                    var payResult = await payClient.Wx_SendRedBagAsync(new WxSendRedBagRequest
                                    {
                                        ActName = "关注公众号领红包",
                                        Channel = "关注公众号领红包",
                                        // 这边 *100 是因为 支付系统是不支持小数的
                                        Money  = (int)(_oaRedEnvelopeBuilderModel.Money * 100),
                                        OpenId = _oaRedEnvelopeBuilderModel.OpenId,
                                        Remark = "关注公众号领红包奖励"
                                    });

                                    payResult.ThrowIfException();
                                    if (!payResult.Success || !payResult.Result)
                                    {
                                        // 判断异常类型 --- 发送提醒

                                        Logger.Warn(
                                            $"OARedEnvelopeUserReceiveManager -> CallbackRedEnvelopAsync -> Wx_SendRedBagAsync -> false -> {JsonConvert.SerializeObject(_oaRedEnvelopeBuilderModel)} {payResult.ErrorMessage} {payResult.ErrorCode} ");
                                        return(Tuple.Create(false, "-10", ""));
                                    }
                                }
                            }
                        }
                    }

                    // 写日志
                    Logger.Info(
                        $"OARedEnvelopeUserReceiveManager -> CallbackRedEnvelopAsync -> finish -> {JsonConvert.SerializeObject(_oaRedEnvelopeBuilderModel)}");


                    // 实时统计
                    await _oaRedEnvelopeCacheManager.StatisticsDoingAsync(1, _oaRedEnvelopeBuilderModel.Money);
                }

                return(await Task.FromResult(Tuple.Create(true, string.Empty, string.Empty)));
            }
            catch (Exception e)
            {
                Logger.Error(
                    $"OARedEnvelopeUserReceiveManager -> CallbackRedEnvelopAsync -> {JsonConvert.SerializeObject(_oaRedEnvelopeBuilderModel)}",
                    e.InnerException ?? e);
                throw;
            }
        }