???????????????????????2???伪???娲�????
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[CancelOrderBySystem]
AS
BEGIN
declare    /*????????*/
@Status varchar(100)??  --??
@TimeNow datetime??   --??????
@TradeID varchar(50)??  --????????
@GoodsID int??   --???ID
@Num int??   --????
@SkuID int  --???ID
set @Status='TRADE_CLOSED_BY_SYSTEM'   /*????????*/
set @TimeNow=getdate()
begin transaction; --??????????
--????????????????
--??????????????????????????卸????????泄??
--?????泄????????卸??????????泄????????????
--????泄??????卸?霉??????????????????????????
--??????????
declare cancelOrder_Cursor cursor for  --?????伪?
select TradeID from WxTrade where  Status='WAIT_BUYER_PAY' and OutTime<=@TimeNow
OPEN cancelOrder_Cursor    --???伪?
FETCH NEXT FROM cancelOrder_Cursor    --????伪???????????
into @TradeID    --???????????伪?????械????????
----------------------???伪?????????begin --------------------------
WHILE (@@FETCH_STATUS = 0)    --FETCH?????谐??
BEGIN
--??????????
update WxTrade set Status=@Status??CloseTime=@TimeNow where TradeID=@TradeID
--???????????妫�???????????????????????
declare orderDetail_Cursor cursor for  --?????伪?
select GoodsID??SkuID??Num from WxOrder where  TradeID=@TradeID
OPEN orderDetail_Cursor    --???伪????????
FETCH NEXT FROM orderDetail_Cursor    --????伪???????????
into @GoodsID??@SkuID??@Num   --???????????伪?????械????ID?????ID??????
----------------------???????伪????????begin ----------------------
------------------------------------------------------------------------
WHILE (@@FETCH_STATUS = 0)    --FETCH?????谐??
BEGIN
if(@SkuID is null)
BEGIN
--??泄????????卸??????????泄???????????妫�??????
if not exists(select SkuID from [Sku] where GoodsID=@GoodsID)
BEGIN
update Goods set Quantity=Quantity+@Num where GoodsID=@GoodsID
END
END
else
BEGIN
--????泄??????卸?霉??????????????????????????
if exists(select SkuID from [Sku] where SkuID=@SkuID)
BEGIN
update [Sku] set ItemQuantity=ItemQuantity+@Num where SkuID=@SkuID
update Goods set Quantity=Quantity+@Num where GoodsID=@GoodsID
END
END
FETCH NEXT FROM orderDetail_Cursor     --????伪??????校????????
into @GoodsID??@SkuID??@Num   --???????????伪?????械????ID?????ID??????
END
CLOSE orderDetail_Cursor    --????伪????????
DEALLOCATE orderDetail_Cursor     --????伪????????
----------------------???????伪????????end ----------------------
----------------------------------------------------------------------
FETCH NEXT FROM cancelOrder_Cursor     --????伪??????校?????????
into @TradeID    --???????????伪?????械????????
End
CLOSE cancelOrder_Cursor    --????伪?????????
DEALLOCATE cancelOrder_Cursor    --????伪?????????
----------------------???伪?????????end --------------------------
if(@@error>0)
begin
rollback transaction
return 0
end
else
begin
commit transaction
return 1
end
END