微信储值卡订单过期存储过程_版本2

 微信储值卡订单过期存储过程_版本2

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,,jankie>
-- Create date: <Create Date,,2017-09-12 10:26>
-- Description:    <Description,,查询订单是否过期>
--如果订单过期会自动设置IsDealWith为已处理。并且将Status设置为Closed_OutTime+'当时订单的状态'
-- =============================================

/*
exec [dbo].[IsClosedStoredCardOrders]  
@PageNumber=0,
@PageSize=10,
@BID=957,
@OpenIDWhere='  '  ,
@StatusWhere='  ',
@IsDealWithWhere=' ',
@CardIDWhere='  ', 
@TradeIdWhere='  ',
@CreateDateWhere='',
@OuterIDWhere='   ',
@NickNameWhere=''
*/

ALTER PROCEDURE [dbo].[IsClosedStoredCardOrders] 
@PageNumber nvarchar(1000),--当前页,从开始
@PageSize nvarchar(1000),
@BID nvarchar(1000),
@OpenIDWhere nvarchar(1000),--用户OpenID,后台不用分OpenID(所以前面传值得时候为空),手机端要分OpenID(要把值传过来)
@StatusWhere nvarchar(1000),--订单支付状态
@IsDealWithWhere nvarchar(1000),--订单处理状态
@CardIDWhere nvarchar(1000),--卡号
@TradeIdWhere nvarchar(1000),--订单号
@CreateDateWhere nvarchar(1000),--下单时间段
@OuterIDWhere nvarchar(1000),--微信交易号
@NickNameWhere nvarchar(1000)--微信昵称
AS
BEGIN
    declare /*声明标量*/
    @TradeID varchar(100),
    @TimeNow datetime,  --当前时间
    @Status varchar(100),
    @OutTime datetime,
    @OrderByWhere nvarchar(100),--排序条件
    @sqlRow nvarchar(3000)    
    set @TimeNow=getdate()
    set @OrderByWhere='2'---排序条件,1是CreateDate升序asc,是CreateDate降序desc


            set @sqlRow =N'          
            select Status,TradeID,OutTime from (
                select Row_number() over(order by CreateDate desc
                                ) as rownum,VCSTL.*,WU.NickName,WU.PicUrl,WU.RealName 
                from ValueCardSaveTradeLog as VCSTL    
                left join  WxUsers as WU 
                on VCSTL.CardID=WU.CardID and VCSTL.BID=WU.BID where VCSTL.TradeID=VCSTL.TradeID
                and VCSTL.BID=convert(int,'+@BID+')
                '+@StatusWhere+' '+@IsDealWithWhere+' '+@CardIDWhere+' '+@TradeIdWhere+' 
                '+@CreateDateWhere+' '+@OuterIDWhere+' '+@NickNameWhere+' '+@OpenIDWhere+'
            )as t1 where t1.rownum>=convert(int,'+@PageNumber+')*convert(int,'+@PageSize+')+1 
            and t1.rownum<=((convert(int,'+@PageNumber+')+1)*convert(int,'+@PageSize+'))  
            '
            --创建临时表
            Create Table #temp1(Status nvarchar(50),TradeID nvarchar(50),OutTime datetime)
            insert into #temp1  exec sp_executesql @sqlRow 

            begin transaction; --开始执行事务                
            
            --查询所有已经过期的订单,更新过期订单的字段
            declare updateOrder_Cursor cursor for  --声明游标
    
            select * from #temp1 --查询临时表数据,进行游标功能
                        
            OPEN updateOrder_Cursor   --打开游标
            FETCH NEXT FROM updateOrder_Cursor    --获取游标的下一行数据
            into 
            @Status,  --使变量获得当前游标指定行的订单状态
            @TradeID,   --使变量获得当前游标指定行的订单的单号
            @OutTime  --使变量获得当前游标指定行的订单的过期时间
            
            ----------------------外部游标(主订单)begin --------------------------
            WHILE (@@FETCH_STATUS = 0)    --FETCH语句执行成功            
            begin    
                if(@OutTime<=@TimeNow)
                  begin --outtime
                    --如果不是手动关闭或者还没关闭就开始执行语句,其他的就让游标跳过不更新
                    if(substring(ltrim(rtrim(@Status)),0,7)='NotPay' 
                        --or substring(ltrim(rtrim(@Status)),0,16)='HadPayNotInsert' --后面修改的需求,已付款待充值不能过期关闭,因为这是有问题的订单,只能手动关闭。
                        or substring(ltrim(rtrim(@Status)),0,10)='FinishPay')
                    begin  --substring 
                    --更新订单状态Status,IsDealWith
                    update ValueCardSaveTradeLog set Status='Closed_OutTime_'+@Status,IsDealWith='1' where TradeID=@TradeID
                    end --substring
                  end  --outtime
            FETCH NEXT FROM updateOrder_Cursor   --获取游标的下一行(主订单)
            into 
            @Status,  --使变量获得当前游标指定行的订单状态
            @TradeID,       --是变量获得当前指定行的订单单号
            @OutTime  --使变量获得当前指定行的过期时间
            end
            CLOSE updateOrder_Cursor   --关闭游标(主订单)
            DEALLOCATE updateOrder_Cursor   --释放游标(注订单)
            drop table #temp1 --释放临时表

            ----------------------外部游标(主订单)end --------------------------
            if(@@error>0)
             begin
              rollback transaction --事务回滚-4
              --print '-4'
              return -4
             end
            else
             begin
              commit transaction  --事务提交-3
              --print '-3'
              return -3
             end        
    
END
GO

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

 

posted on 2022-10-31 17:59  Jankie1122  阅读(48)  评论(0编辑  收藏  举报