点卡充值(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
- 点卡充值(2)
- 点卡充值(1)
- 短连接失败(由于当前服务器处理繁忙,点卡充值操作处理失败,请稍后再重试!错误代码:2)
- 点卡充值成功后,游戏大厅用户的金币没有刷新
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- zypper 源指定 ISO
- isIsomorphic
- Java面向对象(中)
- nginx配置http请求重定向到https
- Best Time to Buy and Sell Stock II DP买卖股票
- 点卡充值(2)
- Word Ladder 字符的相似变化
- Android 键盘弹出和关闭事件
- seletor android
- /usr/bin/perl^M: 坏的解释器: 没有那个文件或目录
- Sum Root to Leaf Numbers 根节点到叶子组成数的和
- php通过统一发放tickets实现单点登陆SSO功能
- eclipse Indigo Helios Galileo几种版本的意思
- HDOJ 5222 Exploration