点卡充值(2)

来源:互联网 发布:淘宝网法院拍卖确认书 编辑:程序博客网 时间:2024/05/18 02:16
----------------------------------------------------------存储过程-------------------------------------------------------
USE [QPTreasureDB]
GO
/****** Object:  StoredProcedure [dbo].[GSP_GR_DiankaUse]    Script Date: 05/08/2015 10:29:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[GSP_GR_DiankaUse]                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                
@strAccount NCHAR(32),-- 账号
@strDianka NCHAR(25),-- 点卡                                                                                                                                                                                                                     
@strPassword NCHAR(32),-- 密码                                                                                                                                                                                                                     
@strErrorDescribe NVARCHAR(127) OUTPUT-- 输出信息


WITH ENCRYPTION AS                                                                                                                                                                                                                                               
-- 属性设置                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                      
       
SET NOCOUNT ON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             


-- 执行逻辑
  
BEGIN                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                          
-- 查询用户                                                                                                                                                                                                                                                     


DECLARE @UserID INT 
DECLARE @GameID INT 
DECLARE @Accounts NVARCHAR(31)                                                                                                                                                                                                                                         
SELECT @UserID=UserID,@GameID=GameID,@Accounts=Accounts                                                                                                      
FROM QPAccountsDBLink.QPAccountsDB.dbo.AccountsInfo WHERE accounts=@strAccount                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                     
IF @UserID IS NULL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
BEGIN                                                                                                                                                                                                                                 
      
SET @strErrorDescribe=N'您的用户帐号不存在,请查证后再次尝试!'                                                                                                                                                                                                                                                                                                                                                                                                                                                   
RETURN 1                                                                                                                                                                                                                                                   


END      



--------------- 点卡判断
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
DECLARE @DiankaAccount AS NCHAR(25)
DECLARE @Password AS NCHAR(32)
DECLARE @ApplyDate DateTime
DECLARE @ValidDate DateTime
DECLARE @CardTypeID INT  
DECLARE @CardGold BIGINT 
DECLARE @MemberOrder TINYINT 
DECLARE @MemberDays INT
DECLARE @CardPrice decimal(18,2)  
DECLARE @UseRange INT
DECLARE @Nullity INT                                                                                                                                                                                                                                   
SELECT @DiankaAccount=SerialID,@Password=password,@ApplyDate=ApplyDate,@ValidDate=ValidDate,@CardTypeID=CardTypeID,@CardGold=CardGold,@MemberOrder=MemberOrder,@MemberDays=MemberDays,@CardPrice=CardPrice,@UseRange=UseRange,@Nullity=Nullity                                                                                              
FROM QPAccountsDBLink.QPTreasureDB.dbo.LivcardAssociator WHERE SerialID=@strDianka  


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
---点卡是否存在
IF @DiankaAccount IS NULL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
BEGIN                                                                                                                                                                                                                                 
      
SET @strErrorDescribe=N'  充值卡或密码错误!'                                                                                                                                                                                                                                                                                                                                                                                                                                                   
RETURN 2                                                                                                                                                                                                                                                   


END
---点卡被禁用
IF @Nullity=1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
BEGIN                                                                                                                                                                                                                                 
      
SET @strErrorDescribe=N'  点卡被禁用!'                                                                                                                                                                                                                                                                                                                                                                                                                                                   
RETURN 6                                                                                                                                                                                                                                                   


END
---点卡过期
IF @ValidDate<getdate()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
BEGIN                                                                                                                                                                                                                                 
      
SET @strErrorDescribe=N'  充值卡已过期!'                                                                                                                                                                                                                                                                                                                                                                                                                                                   
RETURN 7                                                                                                                                                                                                                                                   


END
IF @ApplyDate IS NOT NULL AND @ApplyDate<getdate()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
BEGIN                                                                                                                                                                                                                                 
      
SET @strErrorDescribe=N'  该充值卡已使用过!'                                                                                                                                                                                                                                                                                                                                                                                                                                                   
RETURN 3                                                                                                                                                                                                                                                   


END
IF @Password<>@strPassword
BEGIN                                                                                                                                                                                                                                 
      
SET @strErrorDescribe=N'充值卡或密码错误!'                                                                                                                                                                                                                                                                                                                                                                                                                                                   
RETURN 2                                                                                                                                                                                                                                                   


END   

DECLARE @DiankaSerialID AS NCHAR(25)
DECLARE @ValidDateInUseRecord DateTime  

IF @UseRange=1
BEGIN     --新手卡只能用一次                                                                                                                                                                                                                            
      IF EXISTS(SELECT a.serialid FROM QPAccountsDBLink.QPTreasureDB.dbo.ShareDetailInfo as a,QPAccountsDBLink.QPTreasureDB.dbo.LivcardAssociator as b WHERE a.UserID=@UserID and b.UseRange=1 and a.serialid=b.serialid)
  BEGIN                                                                                                                                                                                                                                 


SET @strErrorDescribe=N'  该账号已使用过新手卡!'+char(13)+char(10)+char(13)+char(10)+N'每个账号只能使用一次新手卡'                                                                                                                                                                                                                                                                                                                                                                                                                                                   
RETURN 4                                                                                                                                                                                                                                                   


  END
END   
/*ELSE    --不是新手卡
BEGIN                                                                                                                                                                                                                                 
      
--是否正在使用此类点卡,同类型点卡不能同时使用                                                                                            

  SELECT @DiankaSerialID=SerialID,@ValidDateInUseRecord=ValidDate                                                                                                        
   FROM QPAccountsDBLink.QPTreasureDB.dbo.RecordDiankaUse WHERE UserID=@UserID and CardTypeID=@CardTypeID and UseRange=@UseRange   
   IF @DiankaSerialID IS NOT NULL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
   BEGIN                                                                                                                                                                                                                                 
      
SET @strErrorDescribe=N'此玩家使用过此类型点卡!'+char(13)+char(10)+char(13)+char(10)+N'不能再次使用同一类型点卡!'                                                                                                                                                                                                                                                                                                                                                                                                                                                   
RETURN 5                                                                                                                                                                                                                                                   


   END


END  */ 



-----更新点卡使用时间

update QPAccountsDBLink.QPTreasureDB.dbo.LivcardAssociator set ApplyDate=getdate() where SerialID=@DiankaAccount 


------查询金币
DECLARE @PreScore bigint  
select @PreScore=Score from QPAccountsDBLink.QPTreasureDB.dbo.GameScoreInfo WHERE UserID=@UserID
-----增加金币
update QPAccountsDBLink.QPTreasureDB.dbo.GameScoreInfo set Score=Score+@CardGold WHERE UserID=@UserID 
    -------写入金币记录
                                                                                                                                                                                                                                        
    EXEC QPRecordDB.dbo.GSP_GP_InsertUserScoreVal @UserID,100,@CardGold,'点卡充值',@PreScore 
    INSERT INTO ShareDetailInfo(OperUserID,ShareID,UserID,GameID,Accounts,OrderID,CardTypeID,CardPrice,CardGold,BeforeGold,CardTotal,OrderAmount,DiscountScale,PayAmount,IPAddress,serialid) 
VALUES(0,16,@UserID,@GameID,@Accounts,0,@CardTypeID,
       @CardPrice,@CardGold,@PreScore,1,0,0,0,'127.0.0.0',@strDianka)
  
    -- 会员卡信息
                                                                                                                                                                                                                                                     


                                                                                                                                                      
DECLARE @UserRight INT  
    -- 会员资料
                                                                                                                                                                                                                                                      
DECLARE @MaxMemberOrder INT                                                                       
                                                                                                                                                           
DECLARE @MaxUserRight INT                                                                          
                                                                                                                                                          
DECLARE @MemberOverDate DATETIME                                                                
                                                                                                                                                             
DECLARE @MemberSwitchDate DATETIME    
   
    SET   @MemberOverDate=GETDATE()+@MemberDays   
    SET   @MemberSwitchDate=@MemberOverDate                          
                                                                                                                                      
--SET   @UserRight=@PayUserRight  
--------------------------- 为用户绑定会员卡信息 -------------------------------
                                                                                                                                                                                      
-- 删除过期
                                                                                                                                                                                                                                                     
DELETE FROM QPAccountsDBLink.QPAccountsDB.dbo.AccountsMember WHERE UserID=@UserID AND MemberOrder=@MemberOrder AND MemberOverDate<=GETDATE()

-- 更新会员
      --  注掉附加会员卡信息                                                                                                                                                                                                                                            
/*UPDATE QPAccountsDBLink.QPAccountsDB.dbo.AccountsMember SET MemberOverDate=MemberOverDate+@MemberDays WHERE UserID=@UserID AND MemberOrder=@MemberOrder
IF @@ROWCOUNT=0 */
IF @MemberOrder<>0 --如果为普通会员的话,不进行会员的操作
BEGIN
UPDATE QPAccountsDBLink.QPAccountsDB.dbo.AccountsMember SET MemberOverDate=@MemberOverDate WHERE UserID=@UserID 
IF @@ROWCOUNT=0                                                                                                                                                                                         
                                                                                                                                               
BEGIN
                                                                                                                                                                                                                                                       
INSERT QPAccountsDB.dbo.AccountsMember(UserID,MemberOrder,UserRight,MemberOverDate) VALUES (@UserID,@MemberOrder,0,@MemberOverDate)                                                      
                                  
END  
   

/*IF EXISTS(SELECT MemberOverDate FROM QPAccountsDBLink.QPAccountsDB.dbo.AccountsInfo WHERE UserID=@UserID and MemberOrder=@MemberOrder and MemberOverDate>getdate())                                                                                            
  BEGIN
                                                                                                                                                                                                                                                       
UPDATE QPAccountsDBLink.QPAccountsDB.dbo.AccountsInfo                    
                                                                                                                                                                                   
SET MemberOrder=@MemberOrder,MemberOverDate=MemberOverDate+@MemberDays,MemberSwitchDate=@MemberOverDate+@MemberDays
                                                                                                                                   
WHERE UserID=@UserID
                                  
  END  
ELSE
  BEGIN                                                                                                                         
UPDATE QPAccountsDBLink.QPAccountsDB.dbo.AccountsInfo                    
                                                                                                                                                                                   
SET MemberOrder=@MemberOrder,MemberOverDate=@MemberOverDate,MemberSwitchDate=@MemberOverDate
                                                                                                                                   
WHERE UserID=@UserID
  END */
  --注释掉附加钻时间
  /*IF EXISTS(SELECT UserID FROM QPAccountsDBLink.QPAccountsDB.dbo.AccountsInfo WHERE UserID=@UserID and MemberOrder=@MemberOrder and MemberOverDate>getdate())
  BEGIN
   UPDATE QPAccountsDBLink.QPAccountsDB.dbo.AccountsInfo                    
                                                                                                                                                                                   
SET MemberOverDate=MemberOverDate+@MemberDays,MemberSwitchDate=MemberSwitchDate+@MemberDays
                                                                                                                                   
WHERE UserID=@UserID and MemberOrder=@MemberOrder
  END
  ELSE
  BEGIN
   UPDATE QPAccountsDBLink.QPAccountsDB.dbo.AccountsInfo                    
                                                                                                                                                                                   
SET MemberOrder=@MemberOrder,MemberOverDate=@MemberOverDate,MemberSwitchDate=@MemberOverDate
                                                                                                                                   
WHERE UserID=@UserID    
  END*/
  --直接覆盖会员天数
  UPDATE QPAccountsDBLink.QPAccountsDB.dbo.AccountsInfo                    
                                                                                                                                                                                   
SET MemberOrder=@MemberOrder,MemberOverDate=@MemberOverDate,MemberSwitchDate=@MemberOverDate
                                                                                                                                   
WHERE UserID=@UserID    
 
END
SELECT @MemberOrder AS MemberOrder,@MemberDays AS MemberDays,@CardGold AS CardGold,char(@CardPrice) AS CardPrice                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
RETURN 0     


END                                                                                                                                                                                                                                                  

                                                                                                                                                                                                                                               


-------------------------------------------------------------------------------------------------------------------------------
//////CAttemperEngineSink.OnEventDataBase.switch 
case DBO_GP_DIANKA_USE_SUCCESS:
{
return OnDBPDiankaUseSuccess(dwContextID,pData,wDataSize);
}




//点卡使用成功
bool OnDBPDiankaUseSuccess(DWORD dwContextID, VOID * pData, WORD wDataSize);
//点卡使用失败
bool OnDBPDiankaUseFail(DWORD dwContextID, VOID * pData, WORD wDataSize);




//点卡使用成功
bool CAttemperEngineSink::OnDBPDiankaUseSuccess(DWORD dwContextID, VOID * pData, WORD wDataSize)
{
//指针判断
ASSERT(m_pInitParameter != NULL || m_pITCPNetworkEngine != NULL);
if(m_pInitParameter == NULL || m_pITCPNetworkEngine == NULL) return false;


//////cyrlog
{
CStdioFile filelog(_T("c:\\log30.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
filelog.SeekToEnd();//先定位到文件尾部
CString strTmp;
strTmp.Format(_T("OnDBPDiankaUseSuccess\r\n"));
filelog.WriteString(strTmp);
filelog.Close;
}
//////cyrlog
//判断在线
ASSERT(LOWORD(dwContextID)<m_pInitParameter->m_wMaxConnect);
if ((m_pBindParameter+LOWORD(dwContextID))->dwSocketID!=dwContextID) return true;




m_pITCPNetworkEngine->SendData(dwContextID,MDM_GP_USER_SERVICE,SUB_GP_USER_DIANKA_USE_SUCCESS,pData,wDataSize);
//关闭连接
m_pITCPNetworkEngine->ShutDownSocket(dwContextID);




}




//点卡使用成功
bool CAttemperEngineSink::OnDBPDiankaUseFail(DWORD dwContextID, VOID * pData, WORD wDataSize)
{
//指针判断
ASSERT(m_pInitParameter != NULL || m_pITCPNetworkEngine != NULL);
if(m_pInitParameter == NULL || m_pITCPNetworkEngine == NULL) return false;




//判断在线
ASSERT(LOWORD(dwContextID)<m_pInitParameter->m_wMaxConnect);
if ((m_pBindParameter+LOWORD(dwContextID))->dwSocketID!=dwContextID) return true;






m_pITCPNetworkEngine->SendData(dwContextID,MDM_GP_USER_SERVICE,SUB_GP_USER_DIANKA_USE_FAILURE,pData,wDataSize);




//////cyrlog
{
CStdioFile filelog(_T("c:\\log30.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
filelog.SeekToEnd();//先定位到文件尾部
CString strTmp;
strTmp.Format(_T("OnDBPDiankaUseFail\r\n"));
filelog.WriteString(strTmp);
filelog.Close;
}
//////cyrlog
//关闭连接
m_pITCPNetworkEngine->ShutDownSocket(dwContextID);




return true;

}



----------------------------------------------------改变和添加的文件---------------------------------------------------------------------------

 系统模块/游戏广场/gameplaza.rc


系统模块/游戏广场/resource.h
系统模块/游戏广场/PlatformFrame.cpp


////////////添加图片资源 系统模块\客户端组件\游戏广场\Res\PLATFORM_FRAME
DIANKA_BACK_VIEW.png
BT_MORE_RECHARGE.bmp
SKIN_WND_CLOSE.bmp


系统模块\消息定义\CMD_LogonServer.h


diankause.cpp h


全局定义/define.h



系统模块\服务组件\登录服务器\AttemperEngineSink.cpp
系统模块\服务组件\登录服务器\DataBaseEngineSink.cpp
系统模块\服务组件\登录服务器\databasepacket.h
存储过程diankause
表recorddiankause


----------------------------------------------------吸取的经验---------------------------------------------------------------------------

1:编写存储过程时,要运行之后,再关掉窗口才有效

2:创建圆角窗口

3:创建连接,要关闭,socket也要关闭,在senddata之后

4:注意改变文本编辑框时CTLCOLOR_EDIT,不是CTLCOLOR_STATIC

5:新建了对话框,注意提交工程文件.vcproj

6:加密存储过程加上WITH ENCRYPTION AS

0 0
原创粉丝点击