コード例 #1
0
        /// <summary>
        ///     回滚
        /// </summary>
        public async Task RollBackAsync()
        {
            try
            {
                var taskList = new List <Task>();
                // 判断是否在缓存中领取过Ticket
                if (_oaRedEnvelopeBuilderModel.IsTicketGet)
                {
                    // 干掉
                    taskList.Add(_oaRedEnvelopeCacheManager.IncrementNumAsync(-1));
                }

                // 判断是否在缓存中领取过红包
                if (_oaRedEnvelopeBuilderModel.IsRedEnvelopeGet)
                {
                    // TODO
                }

                // 判断是否插入到了数据库中
                if (_oaRedEnvelopeBuilderModel.IsDbDetailGet)
                {
                    // 干掉
                    taskList.Add(
                        DalOARedEnvelopeDetail.DisableOARedEnvelopeDetailAsync(_oaRedEnvelopeBuilderModel.DetailId));
                }

                // 删除用户缓存记录
                taskList.Add(_oaRedEnvelopeCacheManager.RemoveUserOARedEnvelopeObjectAsync(_oaRedEnvelopeBuilderModel.UserId));

                await Task.WhenAll(taskList);
            }
            catch (Exception e)
            {
                Logger.Error(
                    $"OARedEnvelopeUserReceiveManager -> RollBackAsync -> {JsonConvert.SerializeObject(_oaRedEnvelopeBuilderModel)}",
                    e.InnerException ?? e);
                throw;
            }
        }
コード例 #2
0
        /// <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;
            }
        }