/// <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; } }
/// <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; } }