日期:2014-05-17 浏览次数:20812 次
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
--功能:online_Deposit加款 
ALTER proc [dbo].[P_Online_Deposit_Process]
 @billno varchar(50),  --存款编号
 @UpdateBy varchar(50),
 @UpdateIp varchar(64),
 @amount money,
 @Remark varchar(50),
 @TypeID int
as
  declare @beforeBalance money;
  declare @afterBalance money;
  declare @TrueDeposited money;
  declare @UserId uniqueidentifier ;
  declare @status int;
--lv等级判断参数
  declare @depositnum   int;
  declare @totaldeposit int;
  declare @levelid  int; 
  declare @beforeLevelid  int; 
BEGIN
    
    SET NOCOUNT ON;
     set xact_abort on;
 
        If not exists(SELECT  TrueDeposited,DepositId FROM Deposits WHERE  DepositId=@billno and TrueDeposited=@amount) 
          begin
           select '1' flag,N'交易失败:不存在此订单或交易金额与数据库中不相同.' msg
           RETURN;
        end 
    SELECT @UserId=UserId,@status=status  FROM Deposits  WHERE DepositId=@billno;
   if(@status=4 or @status=5) begin
        select '1' flag,N'交易失败:该记录已经处理完成,不允许在次操作.' msg
        return;
    end;
 if(@TypeID=1) begin
     if(@status=1) begin
      
      Begin Tran ;--充值 事务处理开始
 
              --更新存款记录状态
       UPDATE Deposits  WITH (ROWLOCK)  SET status=4,UpdateTime=getdate()   WHERE DepositId=@billno;
    
     select @beforeBalance=Balance FROM Users WHERE UserId=@UserId;--之前主帐户余额 
        --写入存款记录状态更新日志
    insert into log_UsersDeposit (Id,Remark,TranID,status,UserId,UpdateBy,UpdateIp,UpdateTime) values (newid
(),@Remark,@billno,'Success',@UserId,'IPS',@UpdateIp,getdate());
        --对主帐号进行实际充值
        UPDATE Users SET Balance=Balance+@amount,totaldeposit=totaldeposit+@amount,depositnum=depositnum+1,UpdateTime=getdate(),Updateby=@UpdateBy  WHERE 
UserId=@UserId;  
        select @afterBalance=Balance FROM Users WHERE UserId=@UserId;--充值之后主帐户余额     
        
        select @totaldeposit=(SELECT totaldeposit FROM Users WHERE UserId=@UserId);--totaldeposit 
        select @depositnum=(SELECT depositnum FROM Users WHERE UserId=@UserId);--depositnum 
        select @beforeLevelid=(SELECT UserLevel FROM Users WHERE UserId=@UserId);--beforeLevelid
        select @levelid=(SELECT top 1 levelid FROM T_LevelMap  where depositnum<=@depositnum and totaldeposit<=@totaldeposit  order by levelid desc);--UserLevel 
        UPDATE Users SET UserLevel=@levelid WHERE UserId=@UserId  and @levelid>@beforeLevelid;   
        -----------------写入主帐户变动日志开始----------
        insert into log_UsersBlance  (Id,Remark,TranID,tranType,Operating,Amt,beforeBalance,afterBalance,UserId,UpdateBy,UpdateIp,UpdateTime) values 
          (newid(),@Remark,@billno,1,'+',@amount,@beforeBalance,@afterBalance,@UserId,@UpdateBy,@UpdateIp,getdate());
        
               if (@@error <> 0) begin
                select '1' flag,N'交易失败:该记录已经处理完成.' msg
                rollback tran ;
                return;
             end
        Commit Tran;  --事务处理结束       
       
       select '0' flag,N'交易成功: Sussce.' msg 
     end
  end
 else if(@TypeID=5) begin
    Begin Tran ;
      UPDATE Deposits WITH (ROWLOCK)  SET  status=5,UpdateTime=getdate(),Updateby=@Updateby  where  DepositId=@billno;
        --写入存款记录状态更新日志
      insert into log_UsersDeposit  (Id,Remark,TranID,status,UserId,UpdateBy,UpdateIp,UpdateTime) values  
     (newid(),@Remark,@billno,'Reject',@UserId,@Updateby,@UpdateIp,getdate()) ;
        
               if (@@error <> 0) begin
                select '1' flag,N'交易失败:已经