USE [zc_pro] GO /****** Object: StoredProcedure [dbo].[PROC_DEAL_DATE_ZC] Script Date: 2017/8/25 9:34:35 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[PROC_DEAL_DATE_ZC] AS BEGIN -- 定义当前时间 DECLARE @CUR_DATE DATETIME; SET @CUR_DATE = GETDATE(); -- 定义众采活动ID DECLARE @GBIID INT; -- 定义实际、额定、最低参团人数 DECLARE @FACTNUM INT; DECLARE @RATENUM INT; DECLARE @MINNUM INT; /********************************************************************** ***************----------未处理的众采----------************************ ***********************************************************************/ -- 情况一:处理已达到定金支付截止日期的众采活动 --([dbo].[GroupBuy_Info].[Status] = 10 @CUR_DATE >= [dbo].[GroupBuy_Info].[DepositEndTime]) -- 众采活动状态:定金阶段 并且 当前时间大于定金支付截止时间 -- 定义游标 DECLARE CURSOR_DEPOSIT CURSOR SCROLL FOR SELECT [GroupBuyInfoID],[RegulationsCount],[MinRegulationsCounts] FROM zc_pro.DBO.GroupBuy_Info WHERE [Status] = 10 AND [DepositEndTime] <= @CUR_DATE; -- 打开游标 OPEN CURSOR_DEPOSIT; FETCH NEXT FROM CURSOR_DEPOSIT INTO @GBIID,@RATENUM,@MINNUM; WHILE @@FETCH_STATUS = 0 BEGIN ----------------------------------------------------------------------------------------------------------------------- -----------------------------------处理已达到定金截止日期的众采活动---------------------------------------------------- -- 获得实际参与人数 -- 实际参与人数为 【众采参与表】中,状态为已支付定金状态的数据;申请定金退款状态不在此列; SELECT @FACTNUM = COUNT([AddGroupBuyInfoID]) FROM zc_pro.dbo.Add_Group_Buy_Info WHERE [AddGroupStatus] = 10; IF @FACTNUM = 0 BEGIN -- 没有一个人支付定金,则标记众采活动为失败 UPDATE zc_pro.DBO.GroupBuy_Info SET [Status] = -10 WHERE [GroupBuyInfoID] = @GBIID; END ELSE IF @FACTNUM > 0 AND @FACTNUM < @MINNUM BEGIN -- 支付定金的人数大于0,并且小于最低成团人数时,则标记众采活动为失败 UPDATE zc_pro.DBO.GroupBuy_Info SET [Status] = -10 WHERE [GroupBuyInfoID] = @GBIID; -- 同时标记已支付定金的状态为【团购失败需退定金】 UPDATE zc_pro.dbo.Add_Group_Buy_Info SET AddGroupStatus = -30 WHERE [GroupBuyInfoID] = @GBIID; -- 涉及到的短信类型 -- 众采活动失败通知(退定金提示) INSERT INTO zc_pro.dbo.NeedSendMsg SELECT TB.UserInfoID, TB.Phone, @GBIID AS GBID,'失败需退定金' AS MSGTYPE, dbo.MSGDATE() AS AFTERDATE, 0 ISSEND, GETDATE() ADDDATE FROM zc_pro.dbo.Add_Group_Buy_Info TA LEFT JOIN zc_pro.dbo.User_Info TB ON TA.UserInfoID = TB.UserInfoID WHERE TA.GroupBuyInfoID = @GBIID AND TB.IsFictitiousUser = 1 AND TA.AddGroupStatus = 10; END ELSE IF @FACTNUM >= @MINNUM AND @FACTNUM < @RATENUM BEGIN -- 支付定金的人数大于等于最低成团人数,并且小于额定成团人数时,则标记众采活动为尾款阶段 UPDATE zc_pro.DBO.GroupBuy_Info SET [Status] = 20 WHERE [GroupBuyInfoID] = @GBIID; -- 增加虚拟参团人员,以达到指定人数 DECLARE @NEED_USER_NUM INT; SET @NEED_USER_NUM = @RATENUM - @FACTNUM; INSERT INTO zc_pro.dbo.Add_Group_Buy_Info ( GroupBuyInfoID , UserInfoID , AddTime , IsFictitiousUser , IsPayDeposit , PayDepositPrice , PayDepositTime , IsPayRetainage , PayRetainagePrice , PayRetainageTime , ApplyRefundTime , AddGroupStatus ) SELECT TOP (@NEED_USER_NUM) @GBIID,[UserInfoID],GETDATE() AS [AddTime], 0 AS [IsFictitiousUser], 1 AS [IsPayDeposit], 0 AS [PayDepositPrice], DATEADD(SECOND,-185,GETDATE()) AS [PayDepositTime], 0 AS [IsPayRetainage], 0 AS [PayRetainagePrice], NULL AS [PayRetainageTime], NULL AS [ApplyRefundTime], 10 AS [AddGroupStatus] FROM zc_pro.DBO.User_Info WHERE IsFictitiousUser = 0 ORDER BY NEWID(); -- 涉及到的短信类型 -- 众采活动成功通知(支付尾款提示) INSERT INTO zc_pro.dbo.NeedSendMsg SELECT TB.UserInfoID, TB.Phone, @GBIID AS GBID,'成功需支付尾款' AS MSGTYPE, dbo.MSGDATE() AS AFTERDATE, 0 ISSEND, GETDATE() ADDDATE FROM zc_pro.dbo.Add_Group_Buy_Info TA LEFT JOIN zc_pro.dbo.User_Info TB ON TA.UserInfoID = TB.UserInfoID WHERE TA.GroupBuyInfoID = @GBIID AND TB.IsFictitiousUser = 1 AND TA.AddGroupStatus = 10; END ELSE IF @FACTNUM = @RATENUM BEGIN -- 当实际参与人数等于额定人数时,标记众采活动状态为【尾款阶段】 UPDATE zc_pro.DBO.GroupBuy_Info SET [Status] = 20 WHERE [GroupBuyInfoID] = @GBIID; -- 涉及到的短信类型 -- 众采活动成功通知(支付尾款提示) INSERT INTO zc_pro.dbo.NeedSendMsg SELECT TB.UserInfoID, TB.Phone, @GBIID AS GBID,'成功支付尾款' AS MSGTYPE, dbo.MSGDATE() AS AFTERDATE, 0 ISSEND, GETDATE() ADDDATE FROM zc_pro.dbo.Add_Group_Buy_Info TA LEFT JOIN zc_pro.dbo.User_Info TB ON TA.UserInfoID = TB.UserInfoID WHERE TA.GroupBuyInfoID = @GBIID AND TB.IsFictitiousUser = 1 AND TA.AddGroupStatus = 10; END FETCH NEXT FROM CURSOR_DEPOSIT INTO @GBIID,@RATENUM,@MINNUM; ----------------------------------------------------------------------------------------------------------------------- END -- 关闭并释放游标 CLOSE CURSOR_DEPOSIT; DEALLOCATE CURSOR_DEPOSIT; -- 情况二:处理已达到尾款截止日期的众采活动 --([dbo].[GroupBuy_Info].[Status] = 20 @CUR_DATE >= [dbo].[GroupBuy_Info].[RetainageStartTime]) -- 众采活动状态:尾款阶段 并且 当前时间大于尾款截止日期 DECLARE CURSOR_TAIL CURSOR SCROLL FOR SELECT [GroupBuyInfoID] FROM zc_pro.DBO.GroupBuy_Info WHERE [Status] = 20 AND [RetainageStartTime] <= @CUR_DATE; OPEN CURSOR_TAIL; FETCH NEXT FROM CURSOR_TAIL INTO @GBIID; WHILE @@FETCH_STATUS = 0 BEGIN ----------------------------------------------------------------------------------------------------------------------- -----------------------------------处理已达到尾款截止日期的众采活动---------------------------------------------------- -- 标记众采活动为尾款统筹阶段 UPDATE zc_pro.DBO.GroupBuy_Info SET [Status] = 40 WHERE GroupBuyInfoID = @GBIID; FETCH NEXT FROM CURSOR_TAIL INTO @GBIID; ----------------------------------------------------------------------------------------------------------------------- END CLOSE CURSOR_TAIL; DEALLOCATE CURSOR_TAIL; -- 情况三:处理已达到指标截止日期的众采活动 --([dbo].[GroupBuy_Info].[Status] = 30 @CUR_DATE >= [dbo].[GroupBuy_Info].[RetainageEndTime]) -- 众采活动状态:指标阶段 并且 当前时间大于指标截止日期 DECLARE CURSOR_QUOTA CURSOR SCROLL FOR SELECT [GroupBuyInfoID] FROM zc_pro.DBO.GroupBuy_Info WHERE [Status] = 30 AND [RetainageEndTime] <= @CUR_DATE; OPEN CURSOR_QUOTA; FETCH NEXT FROM CURSOR_QUOTA INTO @GBIID; WHILE @@FETCH_STATUS = 0 BEGIN ----------------------------------------------------------------------------------------------------------------------- -----------------------------------处理已达到指标支付截止日期的众采活动------------------------------------------------ -- 标记众采活动为指标统筹阶段; UPDATE zc_pro.DBO.GroupBuy_Info SET [Status] = 60 WHERE GroupBuyInfoID = @GBIID; FETCH NEXT FROM CURSOR_QUOTA INTO @GBIID; ----------------------------------------------------------------------------------------------------------------------- END CLOSE CURSOR_QUOTA; DEALLOCATE CURSOR_QUOTA; END