Files
Client/Server/Database/DBScript/BillingDB/BillingDB_PROC_ADD_MediaWebBillingSys.sql
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

1675 lines
44 KiB
Transact-SQL

/***********************************
* 로그인시 과금체크 부분
***********************************/
USE RYLBillingDB
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPCheckTimeOutUser]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPCheckTimeOutUser
GO
-- 개인정량 및 정액이 게임중 만료되었을때 서버에서 넘겨준 아이디를 기준으로
-- 다시 한번더 과금체크를 해서 다시 서버쪽에 끊김여부를 알려준다.
CREATE PROC USPCheckTimeOutUser
AS
SET NOCOUNT ON
DECLARE @ITABLE TABLE
(
nRowID INT IDENTITY(1,1) PRIMARY KEY
, strClientID VARCHAR(20)
, UID INT
, strBillingType CHAR(2)
, firstLoginTime SMALLDATETIME
, tinyServerID TINYINT
)
DECLARE @TblReturn TABLE
(
UID INT
, nServerID INT
, RemainMin INT
, BillingType CHAR(2)
, EndTime INT --날짜일때는 20030202 , 시간일때는 분으로 전달한다.
, intCrmIndex INT
)
DECLARE @ROWID INT
DECLARE @strClientID VARCHAR(20)
DECLARE @UID INT
DECLARE @strBillingType CHAR(2)
DECLARE @firstLoginTime SMALLDATETIME
DECLARE @tinyServerID TINYINT
DECLARE @nUID INT
DECLARE @FreeTime INT
DECLARE @DiffDate INT
DECLARE @DiffTime INT
DECLARE @EndTime INT
DECLARE @RealDiffTime INT
-- 새로입력된 데이터만 가져온다.
INSERT INTO @ITABLE (strClientID,UID,strBillingType,firstLoginTime,tinyServerID)
SELECT strClientID,UID,strBillingType,firstLoginTime,tinyServerID FROM TblCurrentUser WHERE intCRMIndex = 0
SET @ROWID = @@ROWCOUNT
WHILE @ROWID > 0
BEGIN
SELECT @strClientID = strClientID,@UID = UID,@strBillingType=strBillingType,@firstLoginTime=firstLoginTime,@tinyServerID = tinyServerID
FROM @ITABLE WHERE nRowID = @ROWID
SET @nUID = 0 --초기화한다.
SET @DiffDate = NULL
SET @EndTime = NULL
SET @DiffTime = NULL
SET @FreeTime = NULL
SET @RealDiffTime = NULL
IF (@strBillingType = 'N')
BEGIN
-- 무료계정인지 아닌지 체크한다
SELECT @FreeTime = DATEDIFF(minute,GETDATE(),RegLoginTime),@EndTime = CAST(CONVERT(VARCHAR(8),RegLoginTime,112) AS INT)
FROM TBLPERSONINFO
WHERE UID = @UID
IF (@FreeTime <= 5)
BEGIN
IF (@FreeTime < 0 )
BEGIN
SET @FreeTime = 0
END
INSERT INTO @TblReturn (UID,nServerID,RemainMIN,BillingType,EndTime,intCrmIndex)
VALUES (@UID,@tinyServerID,@FreeTime,'F',@EndTime,0)
END
END
ELSE
BEGIN
-- 과금을 다시 체크한다.
SELECT @nUID = UID,@DiffDate = DATEDIFF(minute,GETDATE(),dateEndTime),
@EndTime = CAST(CONVERT(VARCHAR(8),dateEndTime,112) AS INT),@DiffTime = (intServiceTime - intUsingTime)
FROM TblPersonBillingInfo WHERE strClientID = @strClientID
IF (@nUID > 0) -- 과금등록유저임
BEGIN
IF (@strBillingType = 'D')
BEGIN
IF (@DiffDate <= 5)
BEGIN
IF (@DiffDate < 0 )
BEGIN
SET @DiffDate = 0
END
INSERT INTO @TblReturn (UID,nServerID,RemainMIN,BillingType,EndTime,intCrmIndex)
VALUES (@UID,@tinyServerID,@DiffDate,'E',@EndTime,0)
END
END
ELSE IF (@strBillingType = 'T')
BEGIN
SET @RealDiffTime = @DiffTime - DATEDIFF(minute,@firstLoginTime,GETDATE())
IF (@RealDiffTime <= 5)
BEGIN
IF (@RealDiffTime < 0 )
BEGIN
SET @RealDiffTime = 0
END
INSERT INTO @TblReturn (UID,nServerID,RemainMIN,BillingType,EndTime,intCrmIndex)
VALUES (@UID,@tinyServerID,@RealDiffTime,'T',@RealDiffTime,0)
END
END
END
END
SET @ROWID = @ROWID - 1
END
SELECT UID,nServerID,RemainMIN,BillingType,EndTime,intCrmIndex FROM @TblReturn
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPCheckBilling_Person_Post]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPCheckBilling_Person_Post
GO
-- CHECK PERSONALBILLING
CREATE PROC USPCheckBilling_Person_Post @strClientid VARCHAR(20),@strBillingType CHAR(1) OUTPUT,@PlayTime INT OUTPUT
AS
SET NOCOUNT ON
DECLARE @RETURN INT -- 0:SUCCESS,1:ERROR
DECLARE @dateEndTime SMALLDATETIME
-- 현재 과금이 등록된 상태인 유저라고하면
IF EXISTS (SELECT strClientID FROM TblPersonBillingInfo WHERE strClientid =@strClientid)
BEGIN
SELECT @dateEndTime = dateEndTime,@PlayTime = (intServiceTime - intUsingTime)
FROM TblPersonBillingInfo
WHERE strClientid = @strClientID
-- 먼저 과금타입 중 정액제가 적용되는지 알아본다.
-- EXPIRED PERIOD TIME
IF ((GETDATE() >= @dateEndTime) OR (@dateEndTime IS NULL))
BEGIN
-- 정량제가 적용되는지 알아본다.
IF (@PlayTime <= 0)
BEGIN
SET @strBillingType = 'N' -- 과금 전상태로 세팅한다.
SET @RETURN = 3 --ERROR
RETURN @RETURN
END
ELSE
BEGIN
SET @strBillingType = 'T' -- 정량제 과금으로 OUTPUT한다.
SET @RETURN = 0 --SUCCESS
RETURN @RETURN
END
END
-- CAN PLAY
ELSE
BEGIN
SET @strBillingType = 'D' -- 정액제 과금으로 OUTPUT한다.
--SET @PlayTime = DATEDIFF(DAY,GETDATE(),@dateEndTime)
SET @PlayTime =CAST(CONVERT(VARCHAR(8),@dateEndTime,112) AS INT)
SET @RETURN = 0 --SUCCESS
RETURN @RETURN
END
END
ELSE
BEGIN
-- NOT EXISTS
SET @strBillingType = 'N' -- 과금 전상태로 세팅한다.
SET @PlayTime = 0 -- 과금 전상태로 세팅한다.
SET @RETURN = 1 --ERROR
RETURN @RETURN
END
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPCheckBilling_GameRoom_Date_Post]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPCheckBilling_GameRoom_Date_Post
GO
CREATE PROC USPCheckBilling_GameRoom_Date_Post @intCRMIndex INT,@BillingType CHAR(1) OUTPUT,@CanUseTime INT OUTPUT
AS
SET NOCOUNT ON
DECLARE @tinyServiceIpNum TINYINT -- 총 접속 가능한 아이피수
DECLARE @tinyUsedIpNum TINYINT --현재 접속된 아이피수
DECLARE @dateEndTime SMALLDATETIME -- 정액제 종료일자
DECLARE @strRegProcess CHAR(1) --가상계좌,비가상계좌
DECLARE @strClosed CHAR(1) -- 현재 해지상태인지 파악
SET @tinyServiceIpNum = 0
SET @tinyUsedIpNum = 0
SET @strRegProcess = 'N'
-- 현재 정액제 아이피 허용갯수를 가져온다.
SELECT @strRegProcess = strRegProcess,@tinyServiceIpNum = tinyServiceIpNum,
@dateEndTime = dateEndTime,@tinyUsedIpNum = tinyUsedIpNum,@strClosed = strClosed
FROM TblPCRoomBilling_Date
WHERE intCRMIndex = @intCRMIndex
-- 현재 해지된 피시방인지 체크한다.
IF @strClosed = 'Y'
BEGIN
SET @BillingType = 'N'
SET @canUseTime = 0
RETURN 1 --ERROR
END
IF @strRegProcess = 'N' -- 아이피가 존재하지 않음
BEGIN
SET @BillingType = 'N'
SET @canUseTime = 0
RETURN 1 --ERROR
END
ELSE -- 아이피가 존재함
BEGIN
-- 허용된 아이피 갯수가 초과 되었는지 확인한다.
--1. 허용된 아이피수 보다 현재 많이 사용하고 있다면
IF @tinyUsedIpNum >= @tinyServiceIpNum
BEGIN
SET @BillingType = 'D'
SET @CanUseTime = 0
RETURN 2 --ERROR
END
--2. 허용된 아이피수가 현재 사용된 아이피수보다 더 많다고 하면
ELSE IF (@tinyUsedIpNum < @tinyServiceIpNum)
BEGIN
-- 가상계좌 이므로 현재 날짜를 검토한다.
IF @strRegProcess = 'z'
BEGIN
-- EXPIRED DATE
IF (GETDATE() >= @dateEndTime)
BEGIN
SET @BillingType ='D'
SET @CanUseTime = 0
RETURN 3 --ERROR
END
ELSE
BEGIN
SET @BillingType = 'D'
-- 현재 남아있는 날짜를 리턴한다.
--SET @CanUseTime = DATEDIFF(DAY,GETDATE(),@dateEndTime)
SET @CanUseTime = CAST(CONVERT(VARCHAR(8),@dateEndTime,112) AS INT)
RETURN 0 --SUCCESS
END
END
-- 비가상계좌이므로 무조건 시간이 지나도 성공리턴한다.
ELSE IF @strRegProcess = 'm'
BEGIN
SET @BillingType = 'D'
-- 현재 남아있는 날짜를 리턴한다.
--SET @CanUseTime = DATEDIFF(DAY,GETDATE(),@dateEndTime)
SET @CanUseTime = CAST(CONVERT(VARCHAR(8),@dateEndTime,112) AS INT)
RETURN 0 --SUCCESS
END
END
END
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPCheckBilling_GameRoom_Post]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPCheckBilling_GameRoom_Post
GO
-- 게임방 과금 체크
-- 주의 : @IPType을 인자로 받을때 클라이언트 아이피가 정액+정량 인경우는 C문자로 통일해서 받는다.
CREATE PROC USPCheckBilling_GameRoom_Post @intCRMIndex INT,@intCRMIndex2 INT,@IPType CHAR(1),
@OutCRMIndex INT OUTPUT,@BillingType CHAR(1) OUTPUT,@canUseTime INT OUTPUT
AS
SET NOCOUNT ON
DECLARE @RETURN INT
-- 해당 아이피의 과금 방식이 정량제만 적용된 방식이라고 하면
IF @IPType = 'T'
BEGIN
-- IF @RETURN = 1 ERROR ELSE SUCCESS
EXEC @RETURN = USPCheckBilling_GameRoom_Time @intCRMIndex,@BillingType OUTPUT,@CanUseTime OUTPUT
IF @RETURN <> 0
BEGIN
RETURN 1 --ERROR
END
ELSE
BEGIN
SET @OutCRMIndex = @intCRMIndex
RETURN 0 --SUCCESS
END
END
-- 정액제 아이피만 적용된 아이피라고 하면
ELSE IF @IPTYPE = 'D'
BEGIN
EXEC @RETURN = USPCheckBilling_GameRoom_Date_Post @intCRMIndex,@BillingType OUTPUT,@CanUseTime OUTPUT
IF @RETURN <> 0
BEGIN
RETURN 2 --ERROR
END
ELSE
BEGIN
SET @OutCRMIndex = @intCRMIndex
RETURN 0 --SUCCESS
END
END
-- 정액제 정량제 아이피 모두를 허용된 아이피라고 하면
ELSE IF @IPTYPE = 'C'
BEGIN
-- 첫번째 정액제 체크
EXEC @RETURN = USPCheckBilling_GameRoom_Date_Post @intCRMIndex,@BillingType OUTPUT,@CanUseTime OUTPUT
IF @RETURN <> 0
BEGIN
--RETURN 3 --ERROR
SET @BillingType ='N'
SET @CanUseTime = 0
-- 두번째 정액체크함.
EXEC @RETURN = USPCheckBilling_GameRoom_Date_Post @intCRMIndex2,@BillingType OUTPUT,@CanUseTime OUTPUT
IF @RETURN <> 0
BEGIN
SET @BillingType = 'N'
SET @CanUseTime = 0
-- 첫번째 정량제 체크함.
EXEC @RETURN = USPCheckBilling_GameRoom_Time @intCRMIndex,@BillingType OUTPUT,@CanUseTime OUTPUT
IF @RETURN <> 0
BEGIN
-- 두번째 정량제 체크함.
-- 정량제 체크함.
EXEC @RETURN = USPCheckBilling_GameRoom_Time @intCRMIndex2,@BillingType OUTPUT,@CanUseTime OUTPUT
IF @RETURN <> 0
BEGIN
RETURN 3 --ERROR
END
ELSE
BEGIN
SET @OutCRMIndex = @intCRMIndex2
RETURN 0 --SUCCESS
END
END
ELSE
BEGIN
SET @OutCRMIndex = @intCRMIndex
RETURN 0 --SUCCESS
END
END
ELSE
BEGIN
SET @OutCRMIndex = @intCRMIndex2
RETURN 0 --SUCCESS
END
END
ELSE
BEGIN
SET @OutCRMIndex = @intCRMIndex
RETURN 0 --SUCCESS
END
END
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPCheckBilling_Login_Post]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPCheckBilling_Login_Post
GO
-- 캐릭터 선택창 가기 전에 과금 여부를 체크한다.
-- 캐릭터 선택창에서 다시 실행한다.
CREATE PROC USPCheckBilling_Login_Post @strClientID VARCHAR(20),@UID INT, @Check Int,@ClientIP VARCHAR(15),@ServerID TINYINT
AS
SET NOCOUNT ON
--DECLARE @RegLogInTime
DECLARE @strBillingType CHAR(1) --D,T
DECLARE @strBillingType2 CHAR(2)
DECLARE @PlayTime INT --남은시간(분),남은일자
DECLARE @CanUseTime INT
DECLARE @FLAG INT
DECLARE @EndDate VARCHAR(8)
SET @strBillingType = 'N'
SET @PlayTime = 0
SET @CanUseTime = 0
SET @FLAG = -1
DECLARE @IPType CHAR(1) --D,T
DECLARE @intCRMIndex1 INT
DECLARE @intCRMIndex2 INT
SET @intCRMIndex1 =0
SET @intCRMIndex2 =0
DECLARE @BillingDate CHAR(1)
DECLARE @BillingTime CHAR(1)
SET @BillingDate = 'D'
SET @BillingTime = 'T'
-- 피시방중 정량제와 정액제를 같이 사용하는 경우 해당 과금의 피시방인덱스를 얻어와야한다.
DECLARE @OutCRMIndex INT
DECLARE @tinyServerID INT
SET @tinyServerID = -1
DECLARE @FreeTime INT
/***************************************
임시적용부분
***************************************/
EXEC USPInsertPerson @strClientID,@UID
-- 현재 로그인 된 사용자 인지 아닌지 체크한다.
SELECT @tinyServerID = tinyServerID FROM TblCurrentUser_Temp WHERE strClientid = @strClientID
IF @tinyServerID > -1
BEGIN
SET @FLAG = 1 --중복된 유저임.
SET @intCRMIndex1 = @tinyServerID
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,@PlayTime as PlayTime,@intCRMIndex1 as ServerID
RETURN
END
-- 현재 로그인 된 사용자 인지 아닌지 체크한다.
SELECT @tinyServerID = tinyServerID FROM TblCurrentUser WHERE strClientid = @strClientID
IF @tinyServerID > -1
BEGIN
SET @FLAG = 1 --중복된 유저임.
SET @intCRMIndex1 = @tinyServerID
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,@PlayTime as PlayTime,@intCRMIndex1 as ServerID
RETURN
END
-- 무료계정 여부 체크 -- 나중에 수정해야함.
IF (@Check = 1) --무료계정
BEGIN
SET @FLAG = 0
-- 임시테이블 TblCurrentUser_Temp에 입력한다.
INSERT INTO TblCurrentUser_Temp (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@intCRMIndex1,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
-- 배틀로한 서버에 접속 : 플레이 시작할수있음.
IF (@ServerID = 7) --무료계정
BEGIN
SET @FLAG = 0
-- 임시테이블 TblCurrentUser_Temp에 입력한다.
INSERT INTO TblCurrentUser_Temp (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@intCRMIndex1,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
-- 무료계정인지 아닌지 체크한다
SELECT @FreeTime = DATEDIFF(DAY,GETDATE(),RegLoginTime),@EndDate = CONVERT(VARCHAR(8),GETDATE(),112)
FROM TBLPERSONINFO
WHERE UID = @UID
-- 실제 무료 계정임을 나타냄.
IF (@FreeTime >= 0)
BEGIN
SET @FLAG = 0
-- 임시테이블 TblCurrentUser_Temp에 입력한다.
INSERT INTO TblCurrentUser_Temp (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@intCRMIndex1,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = 'F'
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
CAST(@EndDate AS INT),@intCRMIndex1 as CRMIndex
RETURN
END
/*************************************************
* @FLAG = 0,@strBillingType ='D',@PlayTime = 남은일자 --개인정액제 성공
* @FLAG = 0,@strBillingType ='T',@PlayTime = 남은시간 --개인정량제 성공
* @FLAG = 1,@strBillingType ='N',@PlayTime = 0 --과금등록이 되어있지 않음
* @FLAG = 2,@strBillingType ='D',@PlayTime = 0 --개인정액제 과금이 종료된 경우
* @FLAG = 3,@strBillingType ='T',@PlayTime = 0 --개인정량제 과금이 종료된 경우
**************************************************/
EXEC @FLAG = USPCheckBilling_Person_Post @strClientID,@strBillingType OUTPUT,@PlayTime OUTPUT
-- 개인과금이 성공적인경우
IF (@FLAG = 0)
BEGIN
-- 정액제 개인 유저인경우
IF (@strBillingType =@BillingDate)
BEGIN
-- 임시테이블 TblCurrentUser_Temp에 입력한다.
INSERT INTO TblCurrentUser_Temp (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@intCRMIndex1,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = 'E'
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
-- 정량제 개인 유저인경우
ELSE IF (@strBillingType =@BillingTime)
BEGIN
SET @FLAG = -1
--AGAIN CHECK ClientIP
/*********************************************
* @FLAG = 0,@intCRMIndex1 = 숫자,@intCRMIndex2 = 숫자 -- 피시방 아이피가 정액과 정량 모두를 사용함
* @FLAG = 0,@intCRMIndex1 = 숫자,@intCRMIndex2 = 0 -- 피시방 아이피가 정액 또는 정량중 하나 임
* @FLAG = 1,@intCRMIndex1 = 0,@intCRMIndex2 = 0 -- 피시방 아이피가 아님
*********************************************/
EXEC @FLAG = USPCheckBilling_ClientIP @ClientIP,@intCRMIndex1 OUTPUT,@intCRMIndex2 OUTPUT
-- PC방이 아닌경우
IF @FLAG <> 0
BEGIN
/************************ 수정 후 *********************
* 개인정량으로 가지전.......
*
* 통합빌링 시스템으로 넘어가서 해당 아이피가 통합빌링에 등록되어있는 아이피인지 검색한다.
*****************************************************/
SET @FLAG = 3
SET @intCRMIndex1 = 0
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
-- PC방 아이피인경우
ELSE IF @FLAG = 0
BEGIN
-- 해당 아이피의 과금 방식 가져오기
IF (@intCRMIndex1 <> 0 AND @intCRMIndex2 = 0) -- 하나의 과금 방식만 따른다.
BEGIN
SELECT @IPType = strBillingType
FROM TblPCRoomBillingInfo
WHERE intCRMIndex = @intCRMIndex1
END
ELSE IF (@intCRMIndex1 <> 0 AND @intCRMIndex2 <> 0) -- 두개의 과금 방식을 따른다.
BEGIN
SET @IPType = 'C'
END
-- PC방 과금종류를 체크한다.
-- T:정량제,D:정액제
EXEC @FLAG = USPCheckBilling_GameRoom_Post @intCRMIndex1,@intCRMIndex2,@IPType,@OutCRMIndex OUTPUT,@strBillingType OUTPUT,@canUseTime OUTPUT
IF @FLAG <> 0 --ERROR
BEGIN
-- PC방 과금이 종료된 경우이므로 다시 개인정량제로 과금을 적용시킨다.
/************************ 수정 후 *********************
* 개인정량으로 가지전.......
*
* 통합빌링 시스템으로 넘어가서 해당 아이피가 통합빌링에 등록되어있는 아이피인지 검색한다.
*****************************************************/
SET @FLAG = 3
SET @strBillingType2 = 'T'
SET @intCRMIndex1 = 0
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
ELSE
BEGIN
IF @strBillingType = 'D' -- 정액제
BEGIN
-- 아이피 하나를 사용해서 카운트를 1 더하기 한다.
EXEC USPCheckBilling_UpIPCount @OutCRMIndex
-- 임시테이블 TblCurrentUser_Temp에 입력한다.
INSERT INTO TblCurrentUser_Temp (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@OutCRMIndex,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = 'E'
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@canUseTime as PlayTime,@OutCRMIndex as CRMIndex
RETURN
END
ELSE IF @strBillingType = 'T' -- 정액제
BEGIN
-- 임시테이블 TblCurrentUser_Temp에 입력한다.
INSERT INTO TblCurrentUser_Temp (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@OutCRMIndex,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@canUseTime as PlayTime,@OutCRMIndex as CRMIndex
RETURN
END
END
END
END
END
-- 개인과금이 실패된 경우 다시 과금등록된 피시방인지 아닌지 체크한다.
ELSE
BEGIN
--AGAIN CHECK ClientIP
/*********************************************
* @FLAG = 0,@intCRMIndex1 = 숫자,@intCRMIndex2 = 숫자 -- 피시방 아이피가 정액과 정량 모두를 사용함
* @FLAG = 0,@intCRMIndex1 = 숫자,@intCRMIndex2 = 0 -- 피시방 아이피가 정액 또는 정량중 하나 임
* @FLAG = 1,@intCRMIndex1 = 0,@intCRMIndex2 = 0 -- 피시방 아이피가 아님
*********************************************/
EXEC @FLAG = USPCheckBilling_ClientIP @ClientIP,@intCRMIndex1 OUTPUT,@intCRMIndex2 OUTPUT
-- PC방이 아닌경우
IF @FLAG <> 0
BEGIN
/*********임시 적용 부분 ***********
SET @FLAG = 0
SET @intCRMIndex1 = 0
SET @strBillingType = 'N'
--접속테이블에 입력한다.
INSERT INTO TblCurrentUser_temp(strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@intCRMIndex1,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
********임시 적용 부분 끝 ************/
-- 에러리턴한다
SET @FLAG = 2
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
ELSE IF @FLAG = 0
BEGIN
-- 해당 아이피의 과금 방식 가져오기
IF (@intCRMIndex1 <> 0 AND @intCRMIndex2 = 0) -- 하나의 과금 방식만 따른다.
BEGIN
SELECT @IPType = strBillingType
FROM TblPCRoomBillingInfo
WHERE intCRMIndex = @intCRMIndex1
END
ELSE IF (@intCRMIndex1 <> 0 AND @intCRMIndex2 <> 0) -- 두개의 과금 방식을 따른다.
BEGIN
SET @IPType = 'C'
END
-- PC방 과금종류를 체크한다.
-- T:정량제,D:정액제
EXEC @FLAG = USPCheckBilling_GameRoom_Post @intCRMIndex1,@intCRMIndex2,@IPType,@OutCRMIndex OUTPUT,@strBillingType OUTPUT,@canUseTime OUTPUT
IF @FLAG <> 0 --ERROR
BEGIN
SET @FLAG = 2
SET @strBillingType = 'N'
-- PC방 과금이 종료된 에러를 리턴한다.
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
ELSE -- SUCCESS
BEGIN
IF @strBillingType = 'D' -- 정액제
BEGIN
-- 아이피 하나를 사용해서 카운트를 1 더하기 한다.
EXEC USPCheckBilling_UpIPCount @OutCRMIndex
-- 임시테이블 TblCurrentUser_Temp에 입력한다.
INSERT INTO TblCurrentUser_Temp (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@OutCRMIndex,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = 'E'
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@canUseTime as PlayTime,@OutCRMIndex as CRMIndex
RETURN
END
ELSE IF @strBillingType = 'T' -- 정액제
BEGIN
-- 임시테이블 TblCurrentUser_Temp에 입력한다.
INSERT INTO TblCurrentUser_Temp (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@OutCRMIndex,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@canUseTime as PlayTime,@OutCRMIndex as CRMIndex
RETURN
END
END
END
END
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPCheckBilling_CharIDLogin_Post]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPCheckBilling_CharIDLogin_Post
GO
-- 캐릭터 선택창 가기 전에 과금 여부를 체크한다.
-- 캐릭터 선택창에서 다시 실행한다.
-- 추가사항 : 블럭된 캐릭터인지 아닌지를 가려야한다.
CREATE PROC USPCheckBilling_CharIDLogin_Post @strClientID VARCHAR(20),@UID INT,@check TINYINT,@ClientIP VARCHAR(15),@ServerID TINYINT
AS
SET NOCOUNT ON
DECLARE @strBillingType CHAR(1) --D,T
DECLARE @strBillingType2 CHAR(2) -- RETURN VALUES
DECLARE @PlayTime INT --남은시간(분),남은일자
DECLARE @CanUseTime INT
DECLARE @FLAG INT
DECLARE @EndDate VARCHAR(8)
SET @strBillingType = 'N'
SET @PlayTime = 0
SET @CanUseTime = 0
SET @FLAG = -1
DECLARE @IPType CHAR(1) --D,T
DECLARE @intCRMIndex1 INT
DECLARE @intCRMIndex2 INT
SET @intCRMIndex1 =0
SET @intCRMIndex2 =0
DECLARE @BillingDate CHAR(1)
DECLARE @BillingTime CHAR(1)
SET @BillingDate = 'D'
SET @BillingTime = 'T'
-- 피시방중 정량제와 정액제를 같이 사용하는 경우 해당 과금의 피시방인덱스를 얻어와야한다.
DECLARE @OutCRMIndex INT
DECLARE @tinyServerID INT
SET @tinyServerID = -1
DECLARE @FreeTime INT
-- 현재 로그인 된 사용자 인지 아닌지 체크한다.
SELECT @tinyServerID = tinyServerID FROM TblCurrentUser WHERE strClientid = @strClientID
IF @tinyServerID > -1
BEGIN
SET @FLAG = 1 --중복된 유저임.
SET @intCRMIndex1 = @tinyServerID
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,@PlayTime as PlayTime,@intCRMIndex1 as ServerID
RETURN
END
-- 무료계정 여부 체크
IF (@Check = 1) --무료계정
BEGIN
SET @FLAG = 0
--접속테이블에 입력한다.
INSERT INTO TblCurrentUser(strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@intCRMIndex1,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
-- 배틀로한 로그인하기
IF (@ServerID = 7) --무료계정
BEGIN
SET @FLAG = 0
--접속테이블에 입력한다.
INSERT INTO TblCurrentUser(strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@intCRMIndex1,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
-- 무료계정인지 아닌지 체크한다
SELECT @FreeTime = DATEDIFF(DAY,GETDATE(),RegLoginTime),@EndDate = CONVERT(VARCHAR(8),GETDATE(),112)
FROM TBLPERSONINFO
WHERE UID = @UID
-- 실제 무료 계정임을 나타냄.
IF (@FreeTime >= 0)
BEGIN
SET @FLAG = 0
-- 임시테이블 TblCurrentUser에 입력한다.
INSERT INTO TblCurrentUser (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@intCRMIndex1,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = 'F'
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
CAST(@EndDate AS INT),@intCRMIndex1 as CRMIndex
RETURN
END
/*************************************************
* @FLAG = 0,@strBillingType ='D',@PlayTime = 남은일자 --개인정액제 성공
* @FLAG = 0,@strBillingType ='T',@PlayTime = 남은시간 --개인정량제 성공
* @FLAG = 1,@strBillingType ='N',@PlayTime = 0 --과금등록이 되어있지 않음
* @FLAG = 2,@strBillingType ='D',@PlayTime = 0 --개인정액제 과금이 종료된 경우
* @FLAG = 3,@strBillingType ='T',@PlayTime = 0 --개인정량제 과금이 종료된 경우
**************************************************/
EXEC @FLAG = USPCheckBilling_Person_Post @strClientID,@strBillingType OUTPUT,@PlayTime OUTPUT
-- 개인과금이 성공적인경우
IF (@FLAG = 0)
BEGIN
-- 정액제 개인 유저인경우
IF (@strBillingType =@BillingDate)
BEGIN
--접속테이블에 입력한다.
INSERT INTO TblCurrentUser(strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@intCRMIndex1,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = 'E'
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
-- 정량제 개인 유저인경우
ELSE IF (@strBillingType =@BillingTime)
BEGIN
SET @FLAG = -1
--AGAIN CHECK ClientIP
/*********************************************
* @FLAG = 0,@intCRMIndex1 = 숫자,@intCRMIndex2 = 숫자 -- 피시방 아이피가 정액과 정량 모두를 사용함
* @FLAG = 0,@intCRMIndex1 = 숫자,@intCRMIndex2 = 0 -- 피시방 아이피가 정액 또는 정량중 하나 임
* @FLAG = 1,@intCRMIndex1 = 0,@intCRMIndex2 = 0 -- 피시방 아이피가 아님
*********************************************/
EXEC @FLAG = USPCheckBilling_ClientIP @ClientIP,@intCRMIndex1 OUTPUT,@intCRMIndex2 OUTPUT
-- PC방이 아닌경우
IF @FLAG <> 0
BEGIN
/************************ 수정 후 *********************
* 개인정량으로 가지전.......
*
* 통합빌링 시스템으로 넘어가서 해당 아이피가 통합빌링에 등록되어있는 아이피인지 검색한다.
*****************************************************/
SET @FLAG = 3
SET @intCRMIndex1 = 0
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
-- PC방 아이피인경우
ELSE IF @FLAG = 0
BEGIN
-- 해당 아이피의 과금 방식 가져오기
IF (@intCRMIndex1 <> 0 AND @intCRMIndex2 = 0) -- 하나의 과금 방식만 따른다.
BEGIN
SELECT @IPType = strBillingType
FROM TblPCRoomBillingInfo
WHERE intCRMIndex = @intCRMIndex1
END
ELSE IF (@intCRMIndex1 <> 0 AND @intCRMIndex2 <> 0) -- 두개의 과금 방식을 따른다.
BEGIN
SET @IPType = 'C'
END
-- PC방 과금종류를 체크한다.
-- T:정량제,D:정액제
EXEC @FLAG = USPCheckBilling_GameRoom_Post @intCRMIndex1,@intCRMIndex2,@IPType,@OutCRMIndex OUTPUT,@strBillingType OUTPUT,@canUseTime OUTPUT
IF @FLAG <> 0 --ERROR
BEGIN
-- PC방 과금이 종료된 경우이므로 다시 개인정량제로 과금을 적용시킨다.
/************************ 수정 후 *********************
* 개인정량으로 가지전.......
*
* 통합빌링 시스템으로 넘어가서 해당 아이피가 통합빌링에 등록되어있는 아이피인지 검색한다.
*****************************************************/
SET @FLAG = 3
SET @strBillingType = @BillingTime
SET @strBillingType2 = @strBillingType
SET @intCRMIndex1 = 0
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
ELSE
BEGIN
IF @strBillingType = 'D' -- 정액제
BEGIN
-- 아이피 하나를 사용해서 카운트를 1 더하기 한다.
EXEC USPCheckBilling_UpIPCount @OutCRMIndex
--접속테이블에 입력한다.
INSERT INTO TblCurrentUser (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@OutCRMIndex,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = 'E'
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@canUseTime as PlayTime,@OutCRMIndex as CRMIndex
RETURN
END
ELSE IF @strBillingType = 'T' -- 정액제
BEGIN
--접속테이블에 입력한다.
INSERT INTO TblCurrentUser (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@OutCRMIndex,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@canUseTime as PlayTime,@OutCRMIndex as CRMIndex
RETURN
END
END
END
END
END
-- 개인과금이 실패된 경우 다시 과금등록된 피시방인지 아닌지 체크한다.
ELSE
BEGIN
--AGAIN CHECK ClientIP
/*********************************************
* @FLAG = 0,@intCRMIndex1 = 숫자,@intCRMIndex2 = 숫자 -- 피시방 아이피가 정액과 정량 모두를 사용함
* @FLAG = 0,@intCRMIndex1 = 숫자,@intCRMIndex2 = 0 -- 피시방 아이피가 정액 또는 정량중 하나 임
* @FLAG = 1,@intCRMIndex1 = 0,@intCRMIndex2 = 0 -- 피시방 아이피가 아님
*********************************************/
EXEC @FLAG = USPCheckBilling_ClientIP @ClientIP,@intCRMIndex1 OUTPUT,@intCRMIndex2 OUTPUT
-- PC방이 아닌경우
IF @FLAG <> 0
BEGIN
-- 에러리턴한다.
SET @FLAG = 2
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
ELSE IF @FLAG = 0
BEGIN
-- 해당 아이피의 과금 방식 가져오기
IF (@intCRMIndex1 <> 0 AND @intCRMIndex2 = 0) -- 하나의 과금 방식만 따른다.
BEGIN
SELECT @IPType = strBillingType
FROM TblPCRoomBillingInfo
WHERE intCRMIndex = @intCRMIndex1
END
ELSE IF (@intCRMIndex1 <> 0 AND @intCRMIndex2 <> 0) -- 두개의 과금 방식을 따른다.
BEGIN
SET @IPType = 'C'
END
-- PC방 과금종류를 체크한다.
-- T:정량제,D:정액제
EXEC @FLAG = USPCheckBilling_GameRoom_Post @intCRMIndex1,@intCRMIndex2,@IPType,@OutCRMIndex OUTPUT,@strBillingType OUTPUT,@canUseTime OUTPUT
IF @FLAG <> 0 --ERROR
BEGIN
SET @FLAG = 2 --ERROR
SET @strBillingType = 'N'
-- PC방 과금이 종료된 에러를 리턴한다.
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@PlayTime as PlayTime,@intCRMIndex1 as CRMIndex
RETURN
END
ELSE -- SUCCESS
BEGIN
IF @strBillingType = 'D' -- 정액제
BEGIN
-- 아이피 하나를 사용해서 카운트를 1 더하기 한다.
EXEC USPCheckBilling_UpIPCount @OutCRMIndex
--접속테이블에 입력한다.
INSERT INTO TblCurrentUser (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@OutCRMIndex,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = 'E'
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@canUseTime as PlayTime,@OutCRMIndex as CRMIndex
RETURN
END
ELSE IF @strBillingType = 'T' -- 정액제
BEGIN
--접속테이블에 입력한다.
INSERT INTO TblCurrentUser (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@OutCRMIndex,@ClientIP,@strBillingType,@ServerID)
SET @strBillingType2 = @strBillingType
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
@canUseTime as PlayTime,@OutCRMIndex as CRMIndex
RETURN
END
END
END
END
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPCheckBilling_InsertCurrentUser_Post]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPCheckBilling_InsertCurrentUser_Post
GO
CREATE PROC USPCheckBilling_InsertCurrentUser_Post @TableType INT,@strClientID VARCHAR(20),@UID INT,@ClientIP VARCHAR(15),
@ServerID TINYINT,@strBillingType CHAR(1),@MCHK INT
AS
SET NOCOUNT ON
DECLARE @intCRMIndex INT
SET @intCRMIndex = 0
DECLARE @FLAG INT
SET @FLAG = 0 -- SUCCESS
IF @TableType = 0
BEGIN
-- 에러처리를 하느냐...안 하느냐..
INSERT INTO TblCurrentUser_temp (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@MCHK,@ClientIP,@strBillingType,@ServerID)
IF @@ERROR <> 0
BEGIN
SET @FLAG = 1
END
END
ELSE IF @TableType = 1
BEGIN
--접속테이블에 입력한다.
-- MCHK = -1 : 미디어웹에서 인증을 받아서 게임접속된 유저
-- MCHK = 0 : 가마에서 인증을 받아서 게임접속된 유저
-- 에러처리를 하느냐...안 하느냐..
INSERT INTO TblCurrentUser (strClientid,UID,intCRMIndex,strip,strBillingType,tinyServerID)
VALUES (@strClientID,@UID,@MCHK,@ClientIP,@strBillingType,@ServerID)
IF @@ERROR <> 0
BEGIN
SET @FLAG = 1
END
END
SELECT @FLAG
RETURN
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPCheckBilling_LogOut_Post]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPCheckBilling_LogOut_Post
GO
/***********************************
* 로그아웃 시 과금체크 부분
*
* 로그아웃시 과금이 지난 경우는 불활성 상태로 저장하고 종료한다.
* 통합빌링에서 로그인 된 유저가 로그아웃 될때 성공은 4, 실패는 5
0 : 성공 , 1 : 실패
통합빌링:10, 실패:11
***********************************/
CREATE PROC USPCheckBilling_LogOut_Post @ClientID VARCHAR(20)
AS
SET NOCOUNT ON
-- TblCurrentUser 테이블에 컬럼을 하나 추가
-- 현재 로그인 된 정보 값을 가져온다.
DECLARE @BillingType CHAR(1)
DECLARE @strIp VARCHAR(15)
DECLARE @tinyServerID TINYINT
DECLARE @UID INT
SET @UID = -1
DECLARE @CRMIndex INT
SET @CRMIndex = -1
DECLARE @MWebCHK TINYINT
DECLARE @DateLoginTime SMALLDATETIME
DECLARE @FirstLoginTime SMALLDATETIME
DECLARE @UsingTime INT
DECLARE @ERROR INT
-- 임시로그인 테이블에 존재하는지 안하는지 확인한다.
SELECT @UID = UID,@CRMIndex = intCRMIndex,@strIp = strIp,@BillingType = strBillingType,
@tinyServerID = tinyServerID,@DateLoginTime = DateLoginTime
FROM TblCurrentUser_temp
WHERE strClientid = @ClientID
-- 존재안한다고 하면
-- 캐릭터 선택하고 플레이하고 난뒤 로그아웃 할때 적용되는 부분
IF @UID = -1
BEGIN
SELECT @UID = UID,@CRMIndex = intCRMIndex,@strIp = strIp,@BillingType = strBillingType,@tinyServerID = tinyServerID,
@DateLoginTime = DateLoginTime,@FirstLoginTime = FirstLoginTime
FROM TblCurrentUser
WHERE strClientid = @ClientID
-- 현재 접속된 유저가 없음 (TBLCURRENTUSER)
IF @UID = -1
BEGIN
SELECT 1 AS ERROR
RETURN
END
-- 로그인 정보로 부터 현재까지 사용한 PLAYTIME을 구한다.
SET @UsingTime = DATEDIFF(MINUTE,@DateLoginTime,GETDATE())
-- 개인유저인경우
IF @CRMIndex = 0
BEGIN
-- 과금타입을 구분, 정량제인경우
IF @BillingType = 'T'
BEGIN
EXEC @ERROR =USPCheckBilling_LogOut_PersonTime @ClientID,@UsingTime
-- ERROR HANDLER
IF @ERROR <> 0
BEGIN
SELECT 1
RETURN
END
END
ELSE -- 개인정액제,무료계정일경우 경우
BEGIN
-- 데이터를 삭제한다
DELETE TblCurrentUser WHERE strClientid = @ClientID
END
END
-- 일반 게임방인 경우
ELSE IF (@CRMIndex > 0)
BEGIN
-- 게임방 코드를 구한다.
DECLARE @CRMCode VARCHAR(20)
SELECT @CRMCode = strCRMCode FROM TblPCRoomBillingInfo WHERE intCRMIndex = @CRMIndex
IF @BillingType = 'T'
BEGIN
EXEC @ERROR = USPCheckBilling_LogOut_PCTime 'Y',@CRMIndex,@CRMCode,@UsingTime,@ClientID
-- ERROR HANDLER
IF @ERROR <> 0
BEGIN
SELECT 1
RETURN
END
END
ELSE IF @BillingType ='D'-- 게임방 정액제인 경우
BEGIN
EXEC @ERROR= USPCheckBilling_LogOut_PCDate 'Y',@CRMIndex,@CRMCode,@UsingTime,@ClientID
IF @ERROR <> 0
BEGIN
SELECT 1
RETURN
END
END
END
ELSE IF (@CRMIndex < 0 ) -- 통합빌링일 경우
BEGIN
-- 데이터를 삭제한다
DELETE TblCurrentUser WHERE strClientid = @ClientID
IF @@ERROR <> 0
BEGIN
SELECT 11 -- FAILED
RETURN
END
END
-- 로그를 남긴다.
INSERT INTO RylBillingDB_LOG.DBO.TblCurrentUser_Log
VALUES (@ClientID,@UID,@CRMIndex,@strIp,@BillingType,@tinyServerID,@FirstLoginTime,@DateLoginTime,GETDATE(),@UsingTime)
UPDATE TblPersonInfo
SET LastLogOutTime = GETDATE()
WHERE UID = @UID
IF (@CRMIndex >= 0 )
BEGIN
SELECT 0 AS SUCCESS
RETURN
END
ELSE
BEGIN
SELECT 10 AS SUCCESS
RETURN
END
END
ELSE -- 캐릭터 선택창에서..바로 로그아웃 할때 적용되는 부분. 임시테이블에서 삭제하고 로그아웃한다.
BEGIN
BEGIN TRAN
-- 임시 피시방 아이피를 하나 낮춘다.
IF ((@CRMIndex > 0) AND (@BillingType = 'D'))
BEGIN
-- 허용아이피 갯수를 낮춘다.
UPDATE TblPCRoomBilling_Date
SET tinyUsedIpNum = tinyUsedIpNum - 1
WHERE intCRMIndex = @CRMIndex
IF @@ROWCOUNT <> 1
BEGIN
ROLLBACK TRAN
SELECT 1 AS ERROR
RETURN
END
END
-- 로그를 남긴다.
DELETE TblCurrentUser_Temp WHERE strClientid = @ClientID
IF @@ROWCOUNT <> 1
BEGIN
ROLLBACK TRAN
SELECT 1 AS ERROR
RETURN
END
COMMIT TRAN
SELECT 0 AS SUCCESS
RETURN
END
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPDisConnectLogOut_Post]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPDisConnectLogOut_Post
GO
-- 현재 서버군에 접속되어있는 유저들을 리턴한다.
CREATE PROC USPDisConnectLogOut_Post @ServerID INT
AS
SET NOCOUNT ON
DECLARE @RowID INT
DECLARE @strClientID VARCHAR(20)
DECLARE @TempTable TABLE
(
RowID INT IDENTITY(1,1) PRIMARY KEY
, strClientID VARCHAR(20)
, IP VARCHAR(15)
, Type INT
)
INSERT INTO @TempTable (strClientID,IP,Type)
SELECT strClientID,strIP,intCRMIndex FROM TblCurrentUser WHERE tinyServerID = @ServerID
SET @RowID = @@ROWCOUNT
WHILE @RowID <> 0
BEGIN
SELECT @strClientID = strClientID FROM @TempTable WHERE RowID = @RowID
-- 개인개인 과금을 처리한다.
EXEC USPDisConnectLogOut_Include_Post @strClientID
SET @RowID = @RowID - 1
END
-- 통합빌링에 접속된 유저만 리턴한다.
SELECT strClientID,IP FROM @TempTable WHERE Type < 0
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[USPDisConnectLogOut_Include_Post]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPDisConnectLogOut_Include_Post
GO
/***********************************
* 로그아웃 시 과금체크 부분
*
* 로그아웃시 과금이 지난 경우는 불활성 상태로 저장하고 종료한다.
***********************************/
CREATE PROC USPDisConnectLogOut_Include_Post @ClientID VARCHAR(20)
AS
SET NOCOUNT ON
-- 현재 로그인 된 정보 값을 가져온다.
DECLARE @BillingType CHAR(1)
DECLARE @strIp VARCHAR(15)
DECLARE @tinyServerID TINYINT
DECLARE @UID INT
SET @UID = -1
DECLARE @CRMIndex INT
SET @CRMIndex = -1
DECLARE @DateLoginTime SMALLDATETIME
DECLARE @FirstLoginTime SMALLDATETIME
DECLARE @UsingTime INT
-- 임시로그인 테이블에 존재하는지 안하는지 확인한다.
SELECT @UID = UID,@CRMIndex = intCRMIndex,@strIp = strIp,@BillingType = strBillingType,
@tinyServerID = tinyServerID,@DateLoginTime = DateLoginTime
FROM TblCurrentUser_temp
WHERE strClientid = @ClientID
IF @UID = -1
BEGIN
SELECT @UID = UID,@CRMIndex = intCRMIndex,@strIp = strIp,@BillingType = strBillingType,
@tinyServerID = tinyServerID,@DateLoginTime = DateLoginTime,@FirstLoginTime = FirstLoginTime
FROM TblCurrentUser
WHERE strClientid = @ClientID
-- 현재 접속된 유저가 없음 (TBLCURRENTUSER)
IF @UID = -1
BEGIN
RETURN
END
-- 로그인 정보로 부터 현재까지 사용한 PLAYTIME을 구한다.
SET @UsingTime = DATEDIFF(MINUTE,@DateLoginTime,GETDATE())
-- 개인유저인경우
IF @CRMIndex = 0
BEGIN
-- 과금타입을 구분, 정량제인경우
IF @BillingType = 'T'
BEGIN
EXEC USPCheckBilling_LogOut_PersonTime @ClientID,@UsingTime
END
ELSE -- 정액제,비과금유저인경우
BEGIN
DELETE TblCurrentUser where strClientid = @ClientID
END
END
-- 일반 게임방인 경우
ELSE IF (@CRMIndex > 0)
BEGIN
-- 게임방 코드를 구한다.
DECLARE @CRMCode VARCHAR(20)
SELECT @CRMCode = strCRMCode FROM TblPCRoomBillingInfo WHERE intCRMIndex = @CRMIndex
IF @BillingType = 'T'
BEGIN
EXEC USPCheckBilling_LogOut_PCTime 'Y',@CRMIndex,@CRMCode,@UsingTime,@ClientID
END
ELSE -- 게임방 정액제인 경우
BEGIN
EXEC USPCheckBilling_LogOut_PCDate 'Y',@CRMIndex,@CRMCode,@UsingTime,@ClientID
END
END
ELSE IF (@CRMIndex < 0 ) -- 통합빌링일 경우
BEGIN
DELETE TblCurrentUser where strClientid = @ClientID
END
-- 로그를 남긴다.
INSERT INTO RylBillingDB_LOG.DBO.TblCurrentUser_Log (strClientID,UID,intCRMIndex,strIp,strBillingType,tinyServerID,FirstLoginTime,LoginTime,LogoutTime,intPlayTime)
VALUES (@ClientID,@UID,@CRMIndex,@strIp,@BillingType,@tinyServerID,@FirstLoginTime,@DateLoginTime,GETDATE(),@UsingTime)
UPDATE TblPersonInfo
SET LastLogOutTime = GETDATE()
WHERE UID = @UID
RETURN
END
ELSE -- 임시테이블에서 삭제하고 로그아웃한다.
BEGIN
BEGIN TRAN
-- 임시 피시방 아이피를 하나 낮춘다.
IF ((@CRMIndex > 0) AND (@BillingType = 'D'))
BEGIN
-- 허용아이피 갯수를 낮춘다.
UPDATE TblPCRoomBilling_Date
SET tinyUsedIpNum = tinyUsedIpNum - 1
WHERE intCRMIndex = @CRMIndex
IF @@ROWCOUNT <> 1
BEGIN
ROLLBACK TRAN
RETURN
END
END
COMMIT TRAN
-- 로그를 남긴다.
DELETE TblCurrentUser_Temp WHERE strClientid = @ClientID
INSERT INTO RylBillingDB_Log.dbo.TblCurrentUser_Log (strClientID,UID,intCRMIndex,strIp,strBillingType,tinyServerID,FirstLoginTime,LoginTime,LogoutTime,intPlayTime)
VALUES (@ClientID,@UID,@CRMIndex,@strIp,@BillingType,@tinyServerID,@FirstLoginTime,@DateLoginTime,GETDATE(),0)
RETURN
END
GO
/*
if exists (select * from dbo.sysobjects where id = object_id(N'[USPCheckBilling_BeforeLogOut]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure USPCheckBilling_BeforeLogOut
*/
GO
/*
-- 개인 정량 및 정액이 종료 되었을때 자동으로 끊기전에 개인관련 빌링을 체크한다.
CREATE PROC USPCheckBilling_BeforeLogOut @strClientID VARCHAR(20)
AS
-- 로그아웃 하기 전에 개인아이디의 추가 과금여부를 체크한다.
SET NOCOUNT ON
DECLARE @BillingType CHAR(1)
DECLARE @CanPlayTime INT
DECLARE @UsedTime INT
DECLARE @PlayTime INT
-- 현재 접속된 정보를 얻어온다.
SELECT @BillingType = strBillingType,@UsedTime = DATEDIFF(MINUTE,dateLoginTime,GETDATE())
FROM TblCurrentUser WHERE strClientID = @strClientID
IF @BillingType = 'T'
BEGIN
-- 현재 과금정보를 얻어온다.
SELECT @CanPlayTime =( intServiceTime - intUsingTime)
FROM TblPersonBillingInfo
WHERE strClientID = @strClientID
-- 날짜를 계산한다.
SET @PlayTime = @CanPlayTime - @UsedTime
SELECT @PlayTime
RETURN
END
ELSE
BEGIN
SET @PlayTime = 0
SELECT @PlayTime
RETURN
END
*/
GO
/***************************************TEST********************************
SELECT * FROM TblPersoninfo
SELECT * FROM TblPersonBillinginfo
SELECT * FROM TblPCRoombillinginfo
SELECT * FROM dbo.TblPCRoomBilling_Date
SELECT * FROM dbo.TblPCRoomBilling_Time
SELECT * FROM dbo.TblGameRoomIPList
insert into TblPCRoombillinginfo
values (10000,'GAMA2003','D',GETDATE())
UPDATE TblPCRoomBilling_Date
SET intCRMindex = 10000,TINYUSEDIPNUM = 0
INSERT INTO TblGameRoomIPList
select 10000,strip from tblgameroomiplist
update TblPCRoomBilling_Date
set dateEndTime = getdate()+1
SELECT * FROM dbo.TblCurrentUser
UPDATE TblPersonBillinginfo
SET dateendtime = getdate()-1,intServicetime = 100
where strclientid = 'have2do1'
insert into TblPersonBillinginfo
values ('have2do2',2222221,null,100,10,getdate())
1.개인정액
EXEC dbo.USPCheckBilling_CharIDLogin_Post 'have2do',200000,0,'192.168.3.10',1
result : 0 D 2004.11.09 0 0
2.개인정량(개인정액 : 만료된 사람)
EXEC dbo.USPCheckBilling_CharIDLogin_Post 'have2do1',200000,0,'192.168.3.10',1
result : 2 T 2004.02.03 100 0
EXEC dbo.USPCheckBilling_CharIDLogin_Post 'have2do2',200000,0,'192.168.3.10',1
result : 2 T NULL 90 0
3.피시방에서 접속중.(피시방 정액)
EXEC dbo.USPCheckBilling_CharIDLogin_Post 'have2do2',200000,0,'192.168.7.4',1
result : 0 T NULL 40000 12345
DELETE TBLCURRENTUSER
WHERE STRCLIENTID = 'have2do2'
EXEC dbo.USPCheckBilling_CharIDLogin_Post 'have2do3',200000,0,'192.168.7.5',1
EXEC dbo.USPCheckBilling_LogOut_Post 'have2do2'
**********************************************************/