/// <summary> /// 刷新点球兑换 /// </summary> /// <param name="managerId"></param> /// <returns></returns> public PenaltyKickExChangeResponse RefreshExChange(Guid managerId) { PenaltyKickExChangeResponse response = new PenaltyKickExChangeResponse(); response.Data = new PenaltyKickExChange(); try { var info = GetManager(managerId); if (info == null) { return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.MissManager)); } var point = PayCore.Instance.GetPoint(managerId); if (point < _refreshExChangePoint) { return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.NbPointShortage)); } info.ExChangeString = RefreshExChange(); var exList = GetExChangeEntity(info.ExChangeString); info.ExChangeString = SetExChangeString(exList); info.UpdateTime = DateTime.Now; using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); var messageCode = MessageCode.NbUpdateFail; do { messageCode = PayCore.Instance.GambleConsume(managerId, _refreshExChangePoint, ShareUtil.GenerateComb(), EnumConsumeSourceType.AdTopScoreResetExchange, transactionManager.TransactionObject); if (messageCode != MessageCode.Success) { break; } messageCode = MessageCode.NbUpdateFail; if (!PenaltykickManagerMgr.Update(info, transactionManager.TransactionObject)) { break; } messageCode = MessageCode.Success; } while (false); if (messageCode != MessageCode.Success) { transactionManager.Rollback(); return(ResponseHelper.Create <PenaltyKickExChangeResponse>(messageCode)); } transactionManager.Commit(); } response.Data.AvailableScore = info.AvailableScore; response.Data.ExChangeList = exList; } catch (Exception ex) { SystemlogMgr.Error("刷新点球兑换", ex); response.Code = (int)MessageCode.NbParameterError; } return(response); }
/// <summary> /// 积分兑换 /// </summary> /// <param name="managerId"></param> /// <param name="itemCode"></param> /// <returns></returns> public PenaltyKickExChangeResponse ExChange(Guid managerId, int itemCode) { PenaltyKickExChangeResponse response = new PenaltyKickExChangeResponse(); response.Data = new PenaltyKickExChange(); try { var info = GetManager(managerId); if (info == null) { return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.MissManager)); } var exList = GetExChangeEntity(info.ExChangeString); if (exList == null) { return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.NbParameterError)); } //获取要兑换的物品 var exItem = exList.Find(r => r.ItemCode == itemCode); if (exItem == null) { return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.ExChangeItemNot)); } //已经兑换过 if (exItem.Status == 1) { return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.RepeatExChange)); } //积分不足 if (info.AvailableScore < exItem.Price) { return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.LadderExchangeScoreShortage)); } info.AvailableScore = info.AvailableScore - exItem.Price; exItem.Status = 1; //所有物品都兑换完了 自动刷新 if (!exList.Exists(r => r.Status == 0)) { info.ExChangeString = RefreshExChange(); exList = GetExChangeEntity(info.ExChangeString); } else { info.ExChangeString = SetExChangeString(exList); } info.UpdateTime = DateTime.Now; var package = ItemCore.Instance.GetPackage(managerId, EnumTransactionType.AdTopScorerKeep); if (package == null) { return(ResponseHelper.Create <PenaltyKickExChangeResponse>(MessageCode.NbParameterError)); } var messageCode = package.AddItem(exItem.ItemCode); if (messageCode != MessageCode.Success) { return(ResponseHelper.Create <PenaltyKickExChangeResponse>(messageCode)); } using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); messageCode = MessageCode.NbUpdateFail; do { if (!package.Save(transactionManager.TransactionObject)) { break; } if (!PenaltykickManagerMgr.Update(info, transactionManager.TransactionObject)) { break; } messageCode = MessageCode.Success; } while (false); if (messageCode != MessageCode.Success) { transactionManager.Rollback(); return(ResponseHelper.Create <PenaltyKickExChangeResponse>(messageCode)); } transactionManager.Commit(); package.Shadow.Save(); } response.Data.AvailableScore = info.AvailableScore; response.Data.ExChangeList = exList; response.Data.ItemCode = exItem.ItemCode; } catch (Exception ex) { SystemlogMgr.Error("点球积分兑换", ex); response.Code = (int)MessageCode.NbParameterError; } return(response); }