ALTER PROCEDURE [dbo].[Pro_CD_Recharge_SP] @UserCardNo VARCHAR(16), @RechargeAmount decimal(18,2), @Rechargeway varchar(30), @Cardtype varchar(4), @Terminalno varchar(10), @Operator varchar(20), @Guid varchar(32), @Success int OUTPUT, @BankAccount varchar(30) AS DECLARE @MoneyRow int DECLARE @Nowdate date DECLARE @NowDateTime datetime DECLARE @RemainAfter decimal(18,2) DECLARE @TableName varchar(50); DECLARE @ExeSql varchar(1000); declare @OrderNo varchar(8);
SET @MoneyRow = 0 SET @Nowdate = CONVERT(varchar(10),GETDATE(),120) SET @OrderNo=CONVERT(varchar(10),GETDATE(),112) SET @NowDateTime = GETDATE() SET @Success = 0 BEGIN SET NOCOUNT ON; SET XACT_ABORT ON; BEGIN TRY BEGIN Tran select @MoneyRow = COUNT(FUserCardNo) from DebitRecord where OrderNo=@OrderNo and Status=0 and BankAccount=@BankAccount and FUserCardNo=@UserCardNo IF @MoneyRow = 1 BEGIN SET @MoneyRow = 0 SELECT @MoneyRow = COUNT(FUserCardNo) FROM CD_Money WITH (XLOCK,ROWLOCK) WHERE FUserCardNo = @UserCardNo IF @MoneyRow = 1 BEGIN UPDATE CD_Money WITH(XLOCK,ROWLOCK) SET FAddPurse=isnull(FAddPurse,0)+@RechargeAmount,FResidualAmount=isnull(FResidualAmount,0)+@RechargeAmount,FLastTime = @NowDateTime WHERE FUserCardNo = @UserCardNo;
SELECT @RemainAfter=FAddPurse+isnull(FAddBenefit,0)-isnull(FSumMoney,0) FROM CD_Money WITH (XLOCK,ROWLOCK) WHERE FUserCardNo = @UserCardNo INSERT INTO CD_RechargeDetail(FGUID,FUserCardNO,FCAmount,FAmount,FTradeNo,FRechargeWay,FOperator,FOperateDateTime) VALUES(@Guid,@UserCardNo,@RechargeAmount,@RemainAfter,@Terminalno,@Rechargeway,@Operator,@NowDateTime);
update DebitRecord set Status=1,EndTime=GETDATE() where OrderNo=@OrderNo and Status=0 and BankAccount=@BankAccount and FUserCardNo=@UserCardNo
SET @TableName ='CD_T' + CONVERT(varchar(100), @NowDate, 112); SET @ExeSql = 'insert into ' + @TableName + '(' + 'FGUID,FTime,FUserCardNo,FCardType,FBizType,FPurseMoney,FPurseGas,FPurseAmount,FMoney,FBenefits,FOperatorCardNo,FDirector' + ')values(''' + @Guid + ''',''' + CONVERT(varchar(100), @NowDateTime, 120) + ''',''' + @UserCardNo + ''',''' + @CardType + ''',''' + '1016' + ''',''' + '0.00' + ''',''' + '0.00' + ''',''' + CONVERT(VARCHAR(15),@RemainAfter) + ''',''' + CONVERT(VARCHAR(15),@RechargeAmount) + ''',''' + '0.00' + ''',''' + @Operator + ''',''' + '1'+ ''');'; print @exesql --将动态语句print出来看看 EXEC(@ExeSql); SET @Success = 1; END END ELSE SET @Success = -2; COMMIT Tran END TRY BEGIN CATCH IF XACT_STATE() = -1 ROLLBACK Tran; END CATCH SET NOCOUNT OFF END
@UserCardNo VARCHAR(16),
@RechargeAmount decimal(18,2),
@Rechargeway varchar(30),
@Cardtype varchar(4),
@Terminalno varchar(10),
@Operator varchar(20),
@Guid varchar(32),
@Success int OUTPUT,
@BankAccount varchar(30)
AS
DECLARE @MoneyRow int
DECLARE @Nowdate date
DECLARE @NowDateTime datetime
DECLARE @RemainAfter decimal(18,2)
DECLARE @TableName varchar(50);
DECLARE @ExeSql varchar(1000);
declare @OrderNo varchar(8);
SET @MoneyRow = 0
SET @Nowdate = CONVERT(varchar(10),GETDATE(),120)
SET @OrderNo=CONVERT(varchar(10),GETDATE(),112)
SET @NowDateTime = GETDATE()
SET @Success = 0
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN Tran
select @MoneyRow = COUNT(FUserCardNo) from DebitRecord where OrderNo=@OrderNo and Status=0 and BankAccount=@BankAccount and FUserCardNo=@UserCardNo
IF @MoneyRow = 1
BEGIN
SET @MoneyRow = 0
SELECT @MoneyRow = COUNT(FUserCardNo) FROM CD_Money WITH (XLOCK,ROWLOCK) WHERE FUserCardNo = @UserCardNo
IF @MoneyRow = 1
BEGIN
UPDATE CD_Money WITH(XLOCK,ROWLOCK) SET FAddPurse=isnull(FAddPurse,0)+@RechargeAmount,FResidualAmount=isnull(FResidualAmount,0)+@RechargeAmount,FLastTime = @NowDateTime WHERE FUserCardNo = @UserCardNo;
SELECT @RemainAfter=FAddPurse+isnull(FAddBenefit,0)-isnull(FSumMoney,0) FROM CD_Money WITH (XLOCK,ROWLOCK) WHERE FUserCardNo = @UserCardNo
INSERT INTO CD_RechargeDetail(FGUID,FUserCardNO,FCAmount,FAmount,FTradeNo,FRechargeWay,FOperator,FOperateDateTime)
VALUES(@Guid,@UserCardNo,@RechargeAmount,@RemainAfter,@Terminalno,@Rechargeway,@Operator,@NowDateTime);
update DebitRecord set Status=1,EndTime=GETDATE() where OrderNo=@OrderNo and Status=0 and BankAccount=@BankAccount and FUserCardNo=@UserCardNo
SET @TableName ='CD_T' + CONVERT(varchar(100), @NowDate, 112);
SET @ExeSql = 'insert into '
+ @TableName
+ '('
+ 'FGUID,FTime,FUserCardNo,FCardType,FBizType,FPurseMoney,FPurseGas,FPurseAmount,FMoney,FBenefits,FOperatorCardNo,FDirector'
+ ')values('''
+ @Guid
+ ''',''' + CONVERT(varchar(100), @NowDateTime, 120)
+ ''',''' + @UserCardNo
+ ''',''' + @CardType
+ ''',''' + '1016'
+ ''',''' + '0.00'
+ ''',''' + '0.00'
+ ''',''' + CONVERT(VARCHAR(15),@RemainAfter)
+ ''',''' + CONVERT(VARCHAR(15),@RechargeAmount)
+ ''',''' + '0.00'
+ ''',''' + @Operator
+ ''',''' + '1'+ ''');';
print @exesql --将动态语句print出来看看
EXEC(@ExeSql);
SET @Success = 1;
END
END
ELSE
SET @Success = -2;
COMMIT Tran
END TRY
BEGIN CATCH
IF XACT_STATE() = -1
ROLLBACK Tran;
END CATCH
SET NOCOUNT OFF
END