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>
3580 lines
86 KiB
Transact-SQL
3580 lines
86 KiB
Transact-SQL
|
|
/************************************
|
|
* Made in date : 2004-03-26
|
|
* LOCATION DBNAME : RYLBillingDB
|
|
************************************/
|
|
|
|
-- 매 5분마다 JOB을 실행시켜서 피시방 정량제 남은시간을 미디어웹쪽에 넘길 자료 준비
|
|
CREATE PROC agt_CRM_RemainServiceTime
|
|
AS
|
|
SET NOCOUNT ON
|
|
/*
|
|
DECLARE @TempTable TABLE
|
|
(
|
|
CRMIndex int primary key
|
|
, UsingTime int
|
|
)
|
|
*/
|
|
|
|
CREATE TABLE #TempTable
|
|
(
|
|
CRMIndex int primary key
|
|
, UsingTime int
|
|
)
|
|
|
|
-- 현재 접속중인 피시방에 대한 유저를 체크해서..사용량을 검사한다.
|
|
INSERT INTO #TempTable
|
|
SELECT intCRMIndex,SUM(DATEDIFF(MINUTE,dateLoginTime,GETDATE()))
|
|
FROM TblCurrentUser
|
|
WHERE intCRMIndex > 0 AND strBillingType = 'T'
|
|
GROUP BY intCRMIndex
|
|
|
|
BEGIN TRAN
|
|
|
|
-- 사용시간량을 업데이트한다.
|
|
UPDATE TblPCRoomBilling_Time
|
|
SET intUsingTime =intUsingTime+UsingTime
|
|
FROM #TempTable
|
|
WHERE TblPCRoomBilling_Time.intCRMIndex = #TempTable.CRMIndex
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
INSERT INTO TblCRM_SERVICETIME
|
|
SELECT strCRMCode,'002',intServiceTime - intUsingTime,'N','N',GETDATE()
|
|
FROM #TempTable a JOIN TblPCRoomBilling_Time b ON a.CRMIndex = b.intCRMIndex
|
|
JOIN TblPCRoomBillingInfo c ON a.CRMIndex = c.intCRMIndex
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
UPDATE TblCurrentUser
|
|
SET dateLoginTime = GETDATE()
|
|
WHERE intCRMIndex > 0 AND strBillingType = 'T'
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
COMMIT TRAN
|
|
|
|
DROP TABLE #TempTable
|
|
|
|
GO
|
|
|
|
CREATE PROC agt_CRM_RemainServiceTime_LOG
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
|
|
INSERT INTO RYLBillingDB_log..TblCRM_SERVICETIME_LOG
|
|
SELECT strCRMCode,intServiceTime,DelColumn,dateInsertTime
|
|
FROM TblCRM_SERVICETIME
|
|
WHERE WebCHK = 'Y'
|
|
|
|
|
|
DELETE TblCRM_SERVICETIME
|
|
WHERE WebCHK = 'Y'
|
|
|
|
|
|
GO
|
|
|
|
-- 매 5분마다 JOB을 실행시켜서 피시방 정량제 남은시간을 미디어웹쪽에 준비된 자료를 넘김
|
|
CREATE PROC agt_CRM_RemainServiceTime_Transfer
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @Rowid INT
|
|
DECLARE @strCRMCode VARCHAR(20)
|
|
DECLARE @intServiceTime INT
|
|
DECLARE @delColumn CHAR(1)
|
|
|
|
DECLARE @TempTable TABLE
|
|
(
|
|
RowID INT IDENTITY(1,1) PRIMARY KEY
|
|
, strCRMCode VARCHAR(20)
|
|
, intServiceTime INT
|
|
, delColumn CHAR(1)
|
|
)
|
|
|
|
-- 중복된 데이터는 한건만 처리한다.
|
|
INSERT INTO @TempTable
|
|
SELECT strCRMCode,MIN(intServiceTime),delColumn
|
|
FROM TblCRM_SERVICETIME
|
|
WHERE WebCHK = 'N'
|
|
GROUP BY strCRMCode,delColumn
|
|
|
|
SET @Rowid = @@ROWCOUNT
|
|
|
|
--SET XACT_ABORT ON
|
|
--BEGIN TRAN
|
|
|
|
UPDATE TblCRM_SERVICETIME
|
|
SET WebCHK = 'Y'
|
|
WHERE WebCHK ='N'
|
|
|
|
WHILE @Rowid <> 0
|
|
BEGIN
|
|
SELECT @strCRMCode = strCRMCode,@intServiceTime=intServiceTime,@delColumn=delColumn
|
|
FROM @TempTable
|
|
WHERE RowID = @Rowid
|
|
|
|
-- 나중에 변경해야할 부분
|
|
IF EXISTS(SELECT CRMCODE FROM MEDIAWEBBILLING..GAME.CRM_SERVICETIME WHERE CRMCODE = @strCRMCode AND GAMECODE ='002' )
|
|
BEGIN
|
|
UPDATE MEDIAWEBBILLING..GAME.CRM_SERVICETIME
|
|
SET SERVICETIME = @intServiceTime,DELCHK = @delColumn
|
|
WHERE CRMCODE = @strCRMCode AND GAMECODE ='002'
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
INSERT MEDIAWEBBILLING..GAME.CRM_SERVICETIME (CRMCODE,GAMECODE,SERVICETIME,DELCHK)
|
|
VALUES (@strCRMCode,'002',@intServiceTime,@delColumn)
|
|
END
|
|
|
|
SET @Rowid = @Rowid - 1
|
|
END
|
|
|
|
--COMMIT TRAN
|
|
--SET XACT_ABORT OFF
|
|
|
|
|
|
GO
|
|
|
|
|
|
|
|
-- COMMAND : IP변경
|
|
-- 1.해당 CRMCODE,PRICETYPE에 해당되는 IP를 변경한다.
|
|
CREATE PROC agt_CRM_RYLLOG_ChangeIP @intIndex INT,@strCRMCode VARCHAR(20),@strBillingType CHAR(1),
|
|
@strCRMIP1 VARCHAR(13),@strStartCRMIP1 INT,@strEndCRMIP1 INT,
|
|
@strCRMIP2 VARCHAR(13),@strStartCRMIP2 INT,@strEndCRMIP2 INT,
|
|
@strCRMIP3 VARCHAR(13),@strStartCRMIP3 INT,@strEndCRMIP3 INT
|
|
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @intCRMIndex INT
|
|
|
|
DECLARE @FCRMIP1 VARCHAR(15)
|
|
DECLARE @FCRMIP2 VARCHAR(15)
|
|
DECLARE @FCRMIP3 VARCHAR(15)
|
|
|
|
|
|
-- 기존 과금등록된 피시방인지 검색한다.
|
|
SELECT @intCRMIndex = intCRMIndex
|
|
FROM TblPCRoomBillingInfo
|
|
WHERE strCRMCode = @strCRMCode and strBillingType = @strBillingType
|
|
|
|
BEGIN TRAN
|
|
|
|
IF @intCRMIndex > 0
|
|
BEGIN
|
|
|
|
-- 기존 아이피 대역을 삭제한다.
|
|
DELETE TblGameRoomIPList
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
|
|
-- 새로 OPEN하는 아이피대역을 입력한다.
|
|
IF @strStartCRMIP1 > 0
|
|
BEGIN
|
|
-- 처음아이피가 최종아이피보다 작은경우까지만 입력한다.
|
|
WHILE (@strStartCRMIP1 <= @strEndCRMIP1)
|
|
BEGIN
|
|
SET @FCRMIP1 = @strCRMIP1 + CAST(@strStartCRMIP1 AS VARCHAR(3))
|
|
|
|
INSERT INTO TblGameRoomIPList VALUES (@intCRMIndex,@FCRMIP1)
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
SET @strStartCRMIP1 = @strStartCRMIP1 + 1
|
|
END
|
|
END
|
|
|
|
-- 아이피 대역을 표시한다.
|
|
IF @strStartCRMIP2 > 0
|
|
BEGIN
|
|
-- 처음아이피가 최종아이피보다 작은경우까지만 입력한다.
|
|
WHILE (@strStartCRMIP2 <= @strEndCRMIP2)
|
|
BEGIN
|
|
SET @FCRMIP2 = @strCRMIP2 + CAST(@strStartCRMIP2 AS VARCHAR(3))
|
|
|
|
INSERT INTO TblGameRoomIPList VALUES (@intCRMIndex,@FCRMIP2)
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
SET @strStartCRMIP2 = @strStartCRMIP2 + 1
|
|
END
|
|
END
|
|
|
|
-- 아이피 대역을 표시한다.
|
|
IF @strStartCRMIP3 > 0
|
|
BEGIN
|
|
-- 처음아이피가 최종아이피보다 작은경우까지만 입력한다.
|
|
WHILE (@strStartCRMIP3 <= @strEndCRMIP3)
|
|
BEGIN
|
|
SET @FCRMIP3 = @strCRMIP3 + CAST(@strStartCRMIP3 AS VARCHAR(3))
|
|
|
|
INSERT INTO TblGameRoomIPList VALUES (@intCRMIndex,@FCRMIP3)
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
SET @strStartCRMIP3 = @strStartCRMIP3 + 1
|
|
END
|
|
END
|
|
|
|
-- 아이피가 없어지는 곳에 게임을 하는 유저는 바로 끊어야한다.
|
|
-- 정액제 피시방이 아이피를 변경할 경우에는 모든 유저들을 튕시킨다.
|
|
IF (@strBillingType ='D')
|
|
BEGIN
|
|
-- 해당유저들을 인서트한다.
|
|
INSERT INTO TblCurrentUser_Disconn
|
|
SELECT strClientID,UID,tinyServerID,'ED' FROM TblCurrentUser WHERE intCRMIndex = @intCRMIndex AND strIP NOT in (
|
|
SELECT strIP FROM TblGameRoomIpList WHERE intCRMIndex = @intCRMIndex )
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
-- 정량제 피시방일 경우 해당 아이피만 튕시킨다.
|
|
ELSE IF (@strBillingType ='T')
|
|
BEGIN
|
|
-- 해당유저들을 인서트한다.
|
|
INSERT INTO TblCurrentUser_Disconn
|
|
SELECT strClientID,UID,tinyServerID,'ET' FROM TblCurrentUser WHERE intCRMIndex = @intCRMIndex AND strIP NOT in (
|
|
SELECT strIP FROM TblGameRoomIpList WHERE intCRMIndex = @intCRMIndex )
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
|
|
UPDATE TblCRM_RYLLOG
|
|
SET strConvertCHK = 'Y'
|
|
WHERE intIndex = @intIndex AND strCommand ='E' AND strConvertCHK ='N'
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
|
|
GO
|
|
|
|
|
|
-- COMMAND : CLOSE (해지)
|
|
-- 1.해지시 정량제에 한하여 CRMCODE,PRICETYPE에 해당되는 잔여시간을 CRM_SERVICETIME에 기록한다.
|
|
-- 2.현재 유저가 플레이중인지 아닌지를 체크해야한다.
|
|
CREATE PROC agt_CRM_RYLLOG_CLOSE @intIndex INT,@strCRMCode VARCHAR(20),@strBillingType CHAR(1)
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @intCRMINDEX INT
|
|
|
|
-- 기존 과금등록된 피시방인지 검색한다.
|
|
SELECT @intCRMIndex = intCRMIndex
|
|
FROM TblPCRoomBillingInfo
|
|
WHERE strCRMCode = @strCRMCode and strBillingType = @strBillingType
|
|
|
|
BEGIN TRAN
|
|
|
|
-- 해지할 피시방이 존재한다면
|
|
IF @intCRMIndex > 0
|
|
BEGIN
|
|
|
|
-- 현재 같은 피시방에 접속되어있는 유저가 플레이중이면 과금정보를 삭제하면 안된다.
|
|
IF EXISTS (SELECT strClientid FROM TblCurrentUser WHERE intCRMIndex = @intCRMINDEX)
|
|
BEGIN
|
|
IF @strBillingType = 'D' -- 정액제인경우
|
|
BEGIN
|
|
UPDATE TblPCRoomBilling_Date
|
|
SET strClosed ='Y'
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
ELSE IF (@strBillingType ='T')-- 나머지 정량제라고 하면
|
|
BEGIN
|
|
UPDATE TblPCRoomBilling_Time
|
|
SET strClosed ='Y'
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
-- 해지한 피시방에 접속한 모든 유저는 바로 접속을 끊어야한다.
|
|
-- 해당유저들을 인서트한다.
|
|
INSERT INTO TblCurrentUser_Disconn
|
|
SELECT strClientID,UID,tinyServerID,'BB' FROM TblCurrentUser WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
ELSE -- 현재 아무도 해당 피시방에 접속된 유저가 없으면
|
|
BEGIN
|
|
|
|
-- 과금 종류를 각각삭제한다.
|
|
IF @strBillingType = 'D' -- 정액제
|
|
BEGIN
|
|
DELETE TblPCRoomBilling_Date
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
ELSE IF (@strBillingType ='T')-- 나머지 정량제
|
|
BEGIN
|
|
DECLARE @Remain INT
|
|
|
|
SELECT @Remain = (intServiceTime - intUsingTime) FROM TblPCRoomBilling_Time
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
DELETE TblPCRoomBilling_Time WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
-- 미디어웹에 전달할 자료를 전달 테이블에 입력한다.
|
|
INSERT INTO TblCRM_SERVICETIME (strCRMCode,strGameCode,intServiceTime,DelColumn,WebCHK)
|
|
VALUES (@strCRMCode,'002',@Remain,'Y','N')
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
-- 아이피 정보를 삭제한다.
|
|
DELETE TblGameRoomIpList
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT = 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
DELETE TblPCRoomBillingInfo
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
UPDATE TblCRM_RYLLOG
|
|
SET strConvertCHK = 'Y'
|
|
WHERE intIndex = @intIndex AND strCommand ='B' AND strConvertCHK ='N'
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC agt_CRM_RYLLOG_Delete
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
|
|
DECLARE @MIN INT -- 전에 가져왔던 최대값
|
|
SELECT @MIN = intCount FROM TblImportedNum WHERE strCompType = 'M'
|
|
|
|
|
|
BEGIN TRAN
|
|
|
|
INSERT INTO RYLBillingDB_LOG.dbo.TblCRM_RYLLOG_LOG
|
|
SELECT * FROM TblCRM_RYLLOG
|
|
WHERE intIndex <= @MIN
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
DELETE TblCRM_RYLLOG
|
|
WHERE intIndex <= @MIN
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
|
|
GO
|
|
|
|
|
|
-- COMMAND : 배치재승인
|
|
-- 1.CRMCODE,PRICETYPE,IP 정보가 있음을 전제한다.
|
|
CREATE PROC agt_CRM_RYLLOG_Exchange @intIndex INT,@strCRMCode VARCHAR(20),@strBillingType CHAR(1),
|
|
@intServiceTime INT,@dateServiceDay SMALLDATETIME,@tinyServiceIpNum TINYINT
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @intCRMIndex INT
|
|
DECLARE @Remain INT
|
|
|
|
|
|
-- 기존 과금등록된 피시방인지 검색한다.
|
|
SELECT @intCRMIndex = intCRMIndex
|
|
FROM TblPCRoomBillingInfo
|
|
WHERE strCRMCode = @strCRMCode and strBillingType = @strBillingType
|
|
|
|
BEGIN TRAN
|
|
|
|
IF @intCRMIndex > 0
|
|
BEGIN
|
|
|
|
IF @strBillingType = 'D' -- 정액제
|
|
BEGIN
|
|
UPDATE TblPCRoomBilling_Date
|
|
SET dateEndTime = @dateServiceDay,tinyServiceIpNum = @tinyServiceIpNum,tinyUsedIpNum = 0
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
-- 정액제인 경우 현재 접속된 모든 유저를 튕 리스트에 등록한다.
|
|
|
|
-- 아이피가 없어지는 곳에 게임을 하는 유저는 바로 끊어야한다.
|
|
-- 해당유저들을 인서트한다.
|
|
INSERT INTO TblCurrentUser_Disconn
|
|
SELECT strClientID,UID,tinyServerID,'FF' FROM TblCurrentUser WHERE intCRMIndex = @intCRMIndex AND strBillingType ='D'
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
|
|
END
|
|
ELSE IF (@strBillingType ='T')-- 나머지 정량제
|
|
BEGIN
|
|
|
|
UPDATE TblPCRoomBilling_Time
|
|
SET intServiceTime = intServiceTime + @intServiceTime
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
-- 시간이 추가되자 마자 바로 보내져야한다.
|
|
SELECT @Remain = (intServiceTime - intUsingTime) FROM TblPCRoomBilling_Time
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
-- 이전에 로그아웃된 유저의 서비스타입기록을 없앤다.
|
|
DELETE TblCRM_SERVICETIME
|
|
WHERE strCRMCode = @strCRMCode
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
-- 미디어웹에 전달할 자료를 전달 테이블에 입력한다.
|
|
INSERT INTO TblCRM_SERVICETIME (strCRMCode,strGameCode,intServiceTime,DelColumn,WebCHK)
|
|
VALUES (@strCRMCode,'002',@Remain,'N','N')
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
|
|
UPDATE TblCRM_RYLLOG
|
|
SET strConvertCHK = 'Y'
|
|
WHERE intIndex = @intIndex AND strCommand ='F' AND strConvertCHK ='N'
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
GO
|
|
|
|
|
|
|
|
|
|
|
|
-- 가져온 데이터를 전부 실행한다.(1분마다 실행)
|
|
CREATE PROC agt_CRM_RYLLOG_EXECUTE
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @ROWID INT
|
|
|
|
DECLARE @intIndex INT
|
|
DECLARE @strCRMCode VARCHAR(20)
|
|
DECLARE @strBillingType CHAR(1)
|
|
DECLARE @strCommand CHAR(1)
|
|
DECLARE @strCRMIP1 VARCHAR(13)
|
|
DECLARE @strStartCRMIP1 TINYINT
|
|
DECLARE @strEndCRMIP1 TINYINT
|
|
DECLARE @strCRMIP2 VARCHAR(13)
|
|
DECLARE @strStartCRMIP2 TINYINT
|
|
DECLARE @strEndCRMIP2 TINYINT
|
|
DECLARE @strCRMIP3 VARCHAR(13)
|
|
DECLARE @strStartCRMIP3 TINYINT
|
|
DECLARE @strEndCRMIP3 TINYINT
|
|
DECLARE @strTimeProcess CHAR(1)
|
|
DECLARE @intServiceTime INT
|
|
DECLARE @dateServiceDay SMALLDATETIME
|
|
DECLARE @tinyServiceIPNum TINYINT
|
|
|
|
|
|
-- 처리할 데이터를 임시테이블에 보관한다.
|
|
DECLARE @TempTable Table
|
|
(
|
|
RowID INT IDENTITY(1,1) PRIMARY KEY
|
|
, intIndex INT
|
|
, strCRMCode VARCHAR(20)
|
|
, strBillingType CHAR(1)
|
|
, strCommand CHAR(1)
|
|
, strCRMIP1 VARCHAR(13)
|
|
, strStartCRMIP1 TINYINT
|
|
, strEndCRMIP1 TINYINT
|
|
, strCRMIP2 VARCHAR(13)
|
|
, strStartCRMIP2 TINYINT
|
|
, strEndCRMIP2 TINYINT
|
|
, strCRMIP3 VARCHAR(13)
|
|
, strStartCRMIP3 TINYINT
|
|
, strEndCRMIP3 TINYINT
|
|
, strTimeProcess CHAR(1)
|
|
, intServiceTime INT
|
|
, dateServiceDay SMALLDATETIME
|
|
, tinyServiceIPNum TINYINT
|
|
)
|
|
|
|
-- 들어온 순서대로 처리를 해야함.
|
|
-- intIndex 값이 큰것부터 임시테이블에 입력을 해야만 제일 나중에 처리된다.
|
|
INSERT INTO @TempTable (intIndex,strCRMCode,strBillingType,strCommand,strCRMIP1,strStartCRMIP1,strEndCRMIP1,strCRMIP2,strStartCRMIP2,
|
|
strEndCRMIP2,strCRMIP3,strStartCRMIP3,strEndCRMIP3,strTimeProcess,intServiceTime,dateServiceDay,tinyServiceIPNum)
|
|
SELECT intIndex,strCRMCode,strPriceType,strCommand,strCRMIP1,strStartCRMIP1,strEndCRMIP1,strCRMIP2,strStartCRMIP2,strEndCRMIP2,
|
|
strCRMIP3,strStartCRMIP3,strEndCRMIP3,strTimeProcess,intServiceTime,dateServiceDay,tinyServiceIPNum
|
|
FROM TblCRM_RYLLOG WHERE strConvertCHK ='N' ORDER BY intIndex DESC
|
|
|
|
SET @ROWID = @@ROWCOUNT --처리할 데이터 수
|
|
|
|
WHILE (@ROWID <> 0 )
|
|
BEGIN
|
|
-- 임시테이블에서 순차적으로 한건씩 처리하기 위해서...데이터를 가져온다.
|
|
SELECT @intIndex=intindex,@strCRMCode=strCRMCode,@strBillingType=strBillingType,@strCommand = strCommand,
|
|
@strCRMIP1=strCRMIP1,@strStartCRMIP1=strStartCRMIP1,@strEndCRMIP1=strEndCRMIP1,@strCRMIP2=strCRMIP2,
|
|
@strStartCRMIP2=strStartCRMIP2,@strEndCRMIP2=strEndCRMIP2,@strCRMIP3=strCRMIP3,@strStartCRMIP3=strStartCRMIP3,
|
|
@strEndCRMIP3=strEndCRMIP3,@strTimeProcess=strTimeProcess,@intServiceTime=intServiceTime,
|
|
@dateServiceDay=dateServiceDay,@tinyServiceIPNum=tinyServiceIPNum
|
|
FROM @TempTable
|
|
WHERE ROWID = @ROWID
|
|
|
|
IF (@strCommand = 'A') -- 신규,추가
|
|
BEGIN
|
|
|
|
EXEC agt_CRM_RYLLOG_OPEN @intIndex,@strCRMCode,@strBillingType,@strCRMIP1,@strStartCRMIP1,
|
|
@strEndCRMIP1,@strCRMIP2,@strStartCRMIP2,@strEndCRMIP2,@strCRMIP3,@strStartCRMIP3,
|
|
@strEndCRMIP3,@strTimeProcess,@intServiceTime,@dateServiceDay,@tinyServiceIPNum
|
|
END
|
|
ELSE IF (@strCommand ='B') -- 해지
|
|
BEGIN
|
|
EXEC agt_CRM_RYLLOG_CLOSE @intIndex,@strCRMCode,@strBillingType
|
|
END
|
|
ELSE IF (@strCommand ='C') -- 해지대기 : Z로 변경
|
|
BEGIN
|
|
EXEC agt_CRM_RYLLOG_WAIT @intIndex,@strCRMCode,@strBillingType
|
|
END
|
|
ELSE IF (@strCommand = 'D') -- 해지취소
|
|
BEGIN
|
|
EXEC agt_CRM_RYLLOG_WCANCEL @intIndex,@strCRMCode,@strBillingType
|
|
END
|
|
ELSE IF (@strCommand ='E') -- 아이피변경
|
|
BEGIN
|
|
EXEC agt_CRM_RYLLOG_ChangeIP @intIndex,@strCRMCode,@strBillingType,@strCRMIP1,@strStartCRMIP1,
|
|
@strEndCRMIP1,@strCRMIP2,@strStartCRMIP2,@strEndCRMIP2,@strCRMIP3,@strStartCRMIP3,
|
|
@strEndCRMIP3
|
|
END
|
|
ELSE IF (@strCommand ='F') -- 재배치 승인
|
|
BEGIN
|
|
|
|
EXEC agt_CRM_RYLLOG_Exchange @intIndex,@strCRMCode,@strBillingType,
|
|
@intServiceTime,@dateServiceDay,@tinyServiceIpNum
|
|
END
|
|
|
|
SET @ROWID = @ROWID - 1
|
|
END
|
|
|
|
GO
|
|
|
|
|
|
-- 데이터속도를 위해서 처리된 마지막 INDEX값을 알고있어야한다.
|
|
CREATE PROC agt_CRM_RYLLOG_OPEN @intIndex INT,@strCRMCode VARCHAR(20),@strBillingType CHAR(1),@strCRMIP1 VARCHAR(13),@strStartCRMIP1 INT,
|
|
@strEndCRMIP1 INT,@strCRMIP2 VARCHAR(13),@strStartCRMIP2 INT,@strEndCRMIP2 INT,
|
|
@strCRMIP3 VARCHAR(13),@strStartCRMIP3 INT,@strEndCRMIP3 INT,@strTimeProcess CHAR(1),
|
|
@intServiceTime INT,@dateServiceDay SMALLDATETIME,@tinyServiceIPNum TINYINT
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
|
|
DECLARE @FCRMIP1 VARCHAR(15)
|
|
DECLARE @FCRMIP2 VARCHAR(15)
|
|
DECLARE @FCRMIP3 VARCHAR(15)
|
|
|
|
DECLARE @intCRMIndex INT
|
|
SET @intCRMIndex = 0
|
|
DECLARE @Remain INT
|
|
|
|
BEGIN TRAN
|
|
|
|
-- 기존 과금등록된 피시방인지 검색한다.
|
|
SELECT @intCRMIndex = intCRMIndex
|
|
FROM TblPCRoomBillingInfo
|
|
WHERE strCRMCode = @strCRMCode and strBillingType = @strBillingType
|
|
|
|
-- 기존 피시방정보가 존재하면 업데이트한다.
|
|
IF (@intCRMIndex > 0)
|
|
BEGIN
|
|
-- 과금 종류를 구분에 각각 테이블에 입력한다.
|
|
IF @strBillingType = 'D' -- 정액제
|
|
BEGIN
|
|
UPDATE TblPCRoomBilling_Date
|
|
SET strRegProcess = @strTimeProcess,dateEndTime = @dateServiceDay,tinyServiceIpNum = @tinyServiceIPNum,strClosed='N'
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
ELSE IF (@strBillingType ='T') -- 나머지 정량제
|
|
BEGIN
|
|
|
|
IF EXISTS (SELECT intCRMIndex FROM TblPCRoomBilling_Time WHERE intCRMIndex = @intCRMIndex AND strRegProcess = 'M' and strClosed ='Y')
|
|
BEGIN
|
|
UPDATE TblPCRoomBilling_Time
|
|
SET strRegProcess = @strTimeProcess,intServiceTime = @intServiceTime,intUsingTime = 0,strClosed ='N'
|
|
WHERE intCRMIndex = @intCRMIndex AND strRegProcess = 'M' and strClosed ='Y'
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
UPDATE TblPCRoomBilling_Time
|
|
SET strRegProcess = @strTimeProcess,intServiceTime = intServiceTime + @intServiceTime,strClosed ='N'
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
-- 시간이 추가되자 마자 바로 보내져야한다.
|
|
SELECT @Remain = (intServiceTime - intUsingTime) FROM TblPCRoomBilling_Time
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
-- 이전에 이미들어가있던 서비스타입기록을 없앤다.
|
|
DELETE TblCRM_SERVICETIME
|
|
WHERE strCRMCode = @strCRMCode
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
-- 미디어웹에 전달할 자료를 전달 테이블에 입력한다.
|
|
INSERT INTO TblCRM_SERVICETIME (strCRMCode,strGameCode,intServiceTime,DelColumn,WebCHK)
|
|
VALUES (@strCRMCode,'002',@Remain,'N','N')
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
END
|
|
-- 존재하지 않는다면
|
|
ELSE IF (@intCRMIndex = 0)
|
|
BEGIN
|
|
-- 신규가입하는 피시방 정보를 입력한다.
|
|
INSERT INTO TblPCRoomBillingInfo (intCRMIndex,strCRMCode,strBillingType)
|
|
VALUES (@intIndex,@strCRMCode,@strBillingType)
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
-- 과금 종류를 구분에 각각 테이블에 입력한다.
|
|
IF @strBillingType = 'D' -- 정액제
|
|
BEGIN
|
|
INSERT INTO TblPCRoomBilling_Date (intCRMIndex,strRegProcess,dateStartTime,dateEndTime,tinyServiceIpNum)
|
|
VALUES (@intIndex,@strTimeProcess,GETDATE(),@dateServiceDay,@tinyServiceIpNum)
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
ELSE IF @strBillingType ='T'-- 나머지 정량제
|
|
BEGIN
|
|
INSERT INTO TblPCRoomBilling_Time (intCRMIndex,strRegProcess,intServiceTime)
|
|
VALUES (@intIndex,@strTimeProcess,@intServiceTime)
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
-- SET @Remain = @intServiceTime
|
|
-- 미디어웹에 전달할 자료를 전달 테이블에 입력한다.
|
|
INSERT INTO TblCRM_SERVICETIME (strCRMCode,strGameCode,intServiceTime,DelColumn,WebCHK)
|
|
VALUES (@strCRMCode,'002',@intServiceTime,'N','N')
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
-- 새로 OPEN하는 아이피대역을 입력한다.
|
|
IF @strStartCRMIP1 > 0
|
|
BEGIN
|
|
-- 처음아이피가 최종아이피보다 작은경우까지만 입력한다.
|
|
WHILE (@strStartCRMIP1 <= @strEndCRMIP1)
|
|
BEGIN
|
|
SET @FCRMIP1 = @strCRMIP1 + CAST(@strStartCRMIP1 AS VARCHAR(3))
|
|
|
|
INSERT INTO TblGameRoomIPList VALUES (@intIndex,@FCRMIP1)
|
|
|
|
IF ( @@ERROR <> 0 )
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
SET @strStartCRMIP1 = @strStartCRMIP1 + 1
|
|
END
|
|
END
|
|
|
|
-- 아이피 대역을 표시한다.
|
|
IF @strStartCRMIP2 > 0
|
|
BEGIN
|
|
-- 처음아이피가 최종아이피보다 작은경우까지만 입력한다.
|
|
WHILE (@strStartCRMIP2 <= @strEndCRMIP2)
|
|
BEGIN
|
|
SET @FCRMIP2 = @strCRMIP2 + CAST(@strStartCRMIP2 AS VARCHAR(3))
|
|
INSERT INTO TblGameRoomIPList VALUES (@intIndex,@FCRMIP2)
|
|
|
|
IF ( @@ERROR <> 0 )
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
SET @strStartCRMIP2 = @strStartCRMIP2 + 1
|
|
END
|
|
END
|
|
|
|
-- 아이피 대역을 표시한다.
|
|
IF @strStartCRMIP3 > 0
|
|
BEGIN
|
|
-- 처음아이피가 최종아이피보다 작은경우까지만 입력한다.
|
|
WHILE (@strStartCRMIP3 <= @strEndCRMIP3)
|
|
BEGIN
|
|
SET @FCRMIP3 = @strCRMIP3 + CAST(@strStartCRMIP3 AS VARCHAR(3))
|
|
|
|
INSERT INTO TblGameRoomIPList VALUES (@intIndex,@FCRMIP3)
|
|
|
|
IF ( @@ERROR <> 0 )
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
SET @strStartCRMIP3 = @strStartCRMIP3 + 1
|
|
END
|
|
END
|
|
|
|
END
|
|
|
|
UPDATE TblCRM_RYLLOG
|
|
SET strConvertCHK = 'Y'
|
|
WHERE intIndex = @intIndex AND strCommand ='A' AND strConvertCHK ='N'
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
GO
|
|
|
|
-- 현재 변경된 전체 데이터를 미디어 웹에서 가져온다.
|
|
CREATE PROC agt_CRM_RYLLOG_Pulling
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @MIN INT -- 전에 가져왔던 최대값
|
|
DECLARE @MAX INT --앞으로 가져올 최대값
|
|
|
|
SET @MAX = 0
|
|
SELECT @MIN = intCount FROM TblImportedNum WHERE strCompType = 'M'
|
|
|
|
--SET XACT_ABORT ON
|
|
--BEGIN TRAN
|
|
|
|
-- 미디어웹에서 처리할 데이터를 가져온다.
|
|
INSERT INTO TblCRM_RYLLOG (intIndex,strCRMCode,strPriceType,dateSysDay,strCommand,strCRMIP1,strStartCRMIP1,strEndCRMIP1,
|
|
strCRMIP2,strStartCRMIP2,strEndCRMIP2,strCRMIP3,strStartCRMIP3,strEndCRMIP3,
|
|
strTimeprocess,intServiceTime,dateServiceDay,TinyServiceIPNum,dateEndday,intEndTime,strRYLCHK)
|
|
SELECT * FROM MEDIAWEBBILLING..CRM.CRM_RYLLOG WHERE SEQID > @MIN AND RYLCHK = 'N'
|
|
|
|
-- 총처리된 데이터수를 가져온다.
|
|
SELECT @MAX = MAX(intIndex) FROM TblCRM_RYLLOG WHERE strRYLCHK = 'N' AND strConvertCHK ='N'
|
|
|
|
IF @MAX > 0
|
|
BEGIN
|
|
|
|
UPDATE MEDIAWEBBILLING..CRM.CRM_RYLLOG
|
|
SET RYLCHK = 'Y'
|
|
WHERE SEQID > @MIN AND SEQID <= @MAX AND RYLCHK = 'N'
|
|
|
|
|
|
-- 데이터를 업데이트한다.
|
|
UPDATE TblImportedNum
|
|
SET intCount = @MAX
|
|
WHERE strCompType = 'M'
|
|
END
|
|
|
|
--COMMIT TRAN
|
|
--SET XACT_ABORT OFF
|
|
|
|
GO
|
|
|
|
-- COMMAND : WAIT (해지대기)
|
|
-- 1.TimeProcess를 'z'로 변경한다.
|
|
CREATE PROC agt_CRM_RYLLOG_WAIT @intIndex INT,@strCRMCode VARCHAR(20),@strBillingType CHAR(1)
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @intCRMIndex INT
|
|
|
|
-- 기존 과금등록된 피시방인지 검색한다.
|
|
SELECT @intCRMIndex = intCRMIndex
|
|
FROM TblPCRoomBillingInfo
|
|
WHERE strCRMCode = @strCRMCode and strBillingType = @strBillingType
|
|
|
|
BEGIN TRAN
|
|
|
|
IF @intCRMIndex > 0
|
|
BEGIN
|
|
|
|
-- 과금 종류를 각각삭제한다.
|
|
IF @strBillingType = 'D' -- 정액제
|
|
BEGIN
|
|
UPDATE TblPCRoomBilling_Date
|
|
SET strRegProcess = 'z'
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
ELSE IF @strBillingType ='T' -- 나머지 정량제
|
|
BEGIN
|
|
|
|
UPDATE TblPCRoomBilling_Time
|
|
SET strRegProcess = 'z'
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
|
|
UPDATE TblCRM_RYLLOG
|
|
SET strConvertCHK = 'Y'
|
|
WHERE intIndex = @intIndex AND strCommand ='C' AND strConvertCHK ='N'
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
GO
|
|
|
|
|
|
-- COMMAND : WCANCEL (해지취소)
|
|
-- 1.TimeProcess를 'm'로 변경한다.
|
|
CREATE PROC agt_CRM_RYLLOG_WCANCEL @intIndex INT,@strCRMCode VARCHAR(20),@strBillingType CHAR(1)
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @intCRMIndex INT
|
|
|
|
-- 기존 과금등록된 피시방인지 검색한다.
|
|
SELECT @intCRMIndex = intCRMIndex
|
|
FROM TblPCRoomBillingInfo
|
|
WHERE strCRMCode = @strCRMCode and strBillingType = @strBillingType
|
|
|
|
BEGIN TRAN
|
|
|
|
IF @intCRMIndex > 0
|
|
BEGIN
|
|
|
|
IF @strBillingType = 'D' -- 정액제
|
|
BEGIN
|
|
UPDATE TblPCRoomBilling_Date
|
|
SET strRegProcess = 'm'
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
ELSE IF (@strBillingType ='T') -- 나머지 정량제
|
|
BEGIN
|
|
|
|
UPDATE TblPCRoomBilling_Time
|
|
SET strRegProcess = 'm'
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
|
|
UPDATE TblCRM_RYLLOG
|
|
SET strConvertCHK = 'Y'
|
|
WHERE intIndex = @intIndex AND strCommand ='D' AND strConvertCHK ='N'
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC agt_DeletePcroombiling_Date_Z_Type
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
CREATE TABLE #TempCrmindex
|
|
(
|
|
ROWID INT IDENTITY(1,1)
|
|
, CRMINDEX INT
|
|
)
|
|
|
|
DECLARE @ROWID INT
|
|
DECLARE @CRMINDEX INT
|
|
|
|
INSERT INTO #TempCrmindex
|
|
SELECT intCRMIndex FROM TblPcroombilling_date WHERE strRegProcess = 'z' and dateEndTime < getdate()
|
|
|
|
SET @ROWID = @@ROWCOUNT
|
|
|
|
WHILE @ROWID > 0
|
|
BEGIN
|
|
SELECT @CRMINDEX = CRMINDEX FROM #TempCrmindex WHERE ROWID =@ROWID
|
|
|
|
IF NOT EXISTS (SELECT strClientID FROM TblCurrentUser WHERE intCRMIndex = @CRMINDEX)
|
|
BEGIN
|
|
|
|
INSERT INTO Rylbillingdb_log..TblPCRoomBilling_Date_DELLOG
|
|
SELECT * FROM TblPCRoomBilling_Date WHERE intCRMIndex = @CRMIndex
|
|
|
|
INSERT INTO Rylbillingdb_log..TblGameRoomIPList_DELLOG
|
|
SELECT * FROM TblGameRoomIPList WHERE intCRMIndex = @CRMIndex
|
|
|
|
INSERT INTO Rylbillingdb_log..TblPCRoomBillingInfo_DELLOG
|
|
SELECT * FROM TblPCRoomBillingInfo WHERE intCRMIndex = @CRMIndex
|
|
|
|
DELETE TblPCRoomBilling_Date
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
-- 해당 아이피를 삭제한다.
|
|
DELETE TblGameRoomIPList
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
-- 피시방 정보를 삭제한다.
|
|
DELETE TblPCRoomBillingInfo
|
|
WHERE intCRMIndex = @CRMIndex
|
|
END
|
|
|
|
|
|
SET @ROWID = @ROWID - 1
|
|
END
|
|
|
|
DROP TABLE #TempCrmindex
|
|
|
|
|
|
GO
|
|
|
|
|
|
--가져온데이터를 처리한다.
|
|
CREATE PROC agt_PersonBilling_CHK
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @ROWID INT
|
|
DECLARE @intIndex INT
|
|
DECLARE @strClientID VARCHAR(20)
|
|
DECLARE @UID INT
|
|
DECLARE @strBillingType CHAR(1)
|
|
DECLARE @dateEndTime SMALLDATETIME
|
|
DECLARE @intServiceTime INT
|
|
|
|
DECLARE @strCorrentState CHAR(1)
|
|
|
|
|
|
DECLARE @TempTable TABLE
|
|
(
|
|
RowID INT IDENTITY(1,1) PRIMARY KEY
|
|
, intIndex INT
|
|
, strClientID VARCHAR(20)
|
|
, UID INT
|
|
, strBillingType CHAR(1)
|
|
, dateEndTime SMALLDATETIME
|
|
, intServiceTime INT
|
|
)
|
|
|
|
|
|
INSERT INTO @TempTable (intIndex,strClientID,UID,strBillingType,dateEndTime,intServiceTime)
|
|
SELECT intIndex,strClientID,UID,strBillingType,dateEndTime,intServiceTime FROM TblPersonBilling_log
|
|
WHERE strConvertCHK = 'N' ORDER BY intIndex DESC
|
|
|
|
SET @ROWID = @@ROWCOUNT
|
|
|
|
WHILE @ROWID <> 0
|
|
BEGIN
|
|
|
|
SELECT @intIndex = intIndex,@strClientID=strClientID,@UID=UID,@strBillingType=strBillingType,@dateEndTime=dateEndTime
|
|
,@intServiceTime=intServiceTime
|
|
FROM @TempTable
|
|
WHERE RowID = @ROWID
|
|
|
|
EXEC agt_PersonBilling_CHK_Include @intIndex,@strClientID,@UID,@strBillingType,@dateEndTime,@intServiceTime
|
|
|
|
|
|
SET @ROWID = @ROWID - 1
|
|
END
|
|
|
|
|
|
GO
|
|
|
|
|
|
|
|
--가져온데이터를 처리한다.
|
|
CREATE PROC agt_PersonBilling_CHK_2
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @ROWID INT
|
|
DECLARE @intIndex INT
|
|
DECLARE @strClientID VARCHAR(20)
|
|
DECLARE @UID INT
|
|
DECLARE @strBillingType CHAR(1)
|
|
DECLARE @dateEndTime SMALLDATETIME
|
|
DECLARE @intServiceTime INT
|
|
|
|
DECLARE @strCorrentState CHAR(1)
|
|
|
|
|
|
DECLARE @TempTable TABLE
|
|
(
|
|
RowID INT IDENTITY(1,1) PRIMARY KEY
|
|
, intIndex INT
|
|
, strClientID VARCHAR(20)
|
|
, UID INT
|
|
, strBillingType CHAR(1)
|
|
, dateEndTime SMALLDATETIME
|
|
, intServiceTime INT
|
|
)
|
|
|
|
|
|
INSERT INTO @TempTable (intIndex,strClientID,UID,strBillingType,dateEndTime,intServiceTime)
|
|
SELECT DISTINCT intIndex,strClientID,UID,strBillingType,dateEndTime,intServiceTime
|
|
FROM RYLBILLINGDB_LOG..TblPersonBilling_log_HISTORY
|
|
WHERE strConvertCHK = 'N' AND INTINDEX >= 122188 ORDER BY intIndex DESC
|
|
|
|
SET @ROWID = @@ROWCOUNT
|
|
|
|
WHILE @ROWID <> 0
|
|
BEGIN
|
|
|
|
SELECT @intIndex = intIndex,@strClientID=strClientID,@UID=UID,@strBillingType=strBillingType,@dateEndTime=dateEndTime
|
|
,@intServiceTime=intServiceTime
|
|
FROM @TempTable
|
|
WHERE RowID = @ROWID
|
|
|
|
EXEC agt_PersonBilling_CHK_Include_2 @intIndex,@strClientID,@UID,@strBillingType,@dateEndTime,@intServiceTime
|
|
|
|
|
|
SET @ROWID = @ROWID - 1
|
|
END
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC agt_PersonBilling_CHK_Include @intIndex INT,@strClientID VARCHAR(20),@UID INT,@strBillingType CHAR(1),
|
|
@dateEndTime SMALLDATETIME,@intServiceTime INT
|
|
AS
|
|
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @nTime INT
|
|
IF EXISTS (SELECT strClientID FROM TblPersonInfo WHERE UID =@UID)
|
|
BEGIN
|
|
SELECT @nTime = DATEDIFF(DAY,GETDATE(),RegLoginTime)
|
|
FROM TblPersonInfo WHERE UID = @UID
|
|
|
|
IF @nTime >= 0
|
|
BEGIN
|
|
UPDATE TblPersonInfo
|
|
SET RegLoginTime = GETDATE() - 1
|
|
WHERE UID = @UID
|
|
END
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
INSERT INTO TblPersonInfo
|
|
VALUES (@UID,@strClientID,GETDATE()-1,GETDATE())
|
|
END
|
|
|
|
BEGIN TRAN
|
|
|
|
IF EXISTS (SELECT strClientID FROM TblPersonBillingInfo WHERE strClientID = @strClientID)
|
|
BEGIN
|
|
IF @strBillingType = 'D'
|
|
BEGIN
|
|
UPDATE TblPersonBillingInfo
|
|
SET dateEndTime = @dateEndTime,dateRegTime = GETDATE()
|
|
WHERE strClientID = @strClientID
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
ELSE IF @strBillingType = 'T'
|
|
BEGIN
|
|
UPDATE TblPersonBillingInfo
|
|
SET intServiceTime = intServiceTime + @intServiceTime,dateRegTime = GETDATE()
|
|
WHERE strClientID = @strClientID
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
END
|
|
-- 기존사용자가 아니면 인서트한다.
|
|
ELSE
|
|
BEGIN
|
|
INSERT INTO TblPersonBillingInfo
|
|
VALUES (@strClientID,@UID,@dateEndTime,@intServiceTime,0,GETDATE())
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
UPDATE TblPersonBilling_log
|
|
SET strConvertCHK = 'Y'
|
|
WHERE intIndex =@intIndex AND strConvertCHK = 'N'
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
COMMIT TRAN
|
|
RETURN
|
|
|
|
GO
|
|
|
|
CREATE PROC agt_PersonBilling_CHK_Include_2 @intIndex INT,@strClientID VARCHAR(20),@UID INT,@strBillingType CHAR(1),
|
|
@dateEndTime SMALLDATETIME,@intServiceTime INT
|
|
AS
|
|
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @nTime INT
|
|
IF EXISTS (SELECT strClientID FROM TblPersonInfo WHERE UID =@UID)
|
|
BEGIN
|
|
SELECT @nTime = DATEDIFF(DAY,GETDATE(),RegLoginTime)
|
|
FROM TblPersonInfo WHERE UID = @UID
|
|
|
|
IF @nTime >= 0
|
|
BEGIN
|
|
UPDATE TblPersonInfo
|
|
SET RegLoginTime = GETDATE() - 1
|
|
WHERE UID = @UID
|
|
END
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
INSERT INTO TblPersonInfo
|
|
VALUES (@UID,@strClientID,GETDATE()-1,GETDATE())
|
|
END
|
|
|
|
BEGIN TRAN
|
|
|
|
IF EXISTS (SELECT strClientID FROM TblPersonBillingInfo WHERE strClientID = @strClientID)
|
|
BEGIN
|
|
IF @strBillingType = 'D'
|
|
BEGIN
|
|
UPDATE TblPersonBillingInfo
|
|
SET dateEndTime = @dateEndTime,dateRegTime = GETDATE()
|
|
WHERE strClientID = @strClientID
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
END
|
|
ELSE IF @strBillingType = 'T'
|
|
BEGIN
|
|
UPDATE TblPersonBillingInfo
|
|
SET intServiceTime = intServiceTime + @intServiceTime,dateRegTime = GETDATE()
|
|
WHERE strClientID = @strClientID
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
END
|
|
-- 기존사용자가 아니면 인서트한다.
|
|
ELSE
|
|
BEGIN
|
|
INSERT INTO TblPersonBillingInfo
|
|
VALUES (@strClientID,@UID,@dateEndTime,@intServiceTime,0,GETDATE())
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
/*
|
|
UPDATE TblPersonBilling_log
|
|
SET strConvertCHK = 'Y'
|
|
WHERE intIndex =@intIndex AND strConvertCHK = 'N'
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
*/
|
|
COMMIT TRAN
|
|
RETURN
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC agt_PersonBilling_Delete
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
|
|
DECLARE @MIN INT -- 전에 가져왔던 최대값
|
|
SELECT @MIN = intCount FROM TblImportedNum WHERE strCompType = 'H'
|
|
|
|
BEGIN TRAN
|
|
|
|
INSERT INTO RYLBillingDB_LOG.dbo.TblPersonBilling_log_History
|
|
SELECT * FROM TblPersonBilling_log
|
|
WHERE intIndex <= @MIN
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
DELETE TblPersonBilling_log
|
|
WHERE intIndex <= @MIN
|
|
|
|
IF @@ERROR <> 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC agt_PersonBilling_Pulling
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
-- 현재 데이터가 처리된 미디어웹 건수를 가져온다.
|
|
DECLARE @MIN INT
|
|
DECLARE @MAX INT
|
|
|
|
SET @MAX = 0
|
|
|
|
SELECT @MIN = intCount FROM TblImportedNum WHERE strCompType = 'H'
|
|
|
|
|
|
--SET XACT_ABORT ON
|
|
--BEGIN TRAN
|
|
|
|
--한게임에서 새롭게 처리할 데이터를 가져온다.
|
|
INSERT INTO TblPersonBilling_log (intIndex,strClientID,UID,strBillingType,dateEndTime,
|
|
intServiceTime,strConvertCHK,dateInsertTime)
|
|
SELECT BILLNUM,MEMBERID,RYLUID,BILLTYPE,ENDDATE,GAMEMIN,'N',GETDATE()
|
|
FROM HANBILLING..HANGAME.RYLBILLINGT WHERE BILLNUM > @MIN AND HanCHK = 'N'
|
|
|
|
-- 총처리된 데이터수를 가져온다.
|
|
SELECT @MAX = MAX(intIndex) FROM TblPersonBilling_log WHERE strConvertCHK ='N'
|
|
|
|
IF @MAX > 0
|
|
BEGIN
|
|
|
|
UPDATE HANBILLING..HANGAME.RYLBILLINGT
|
|
SET HANCHK = 'Y'
|
|
WHERE BILLNUM > @MIN AND BILLNUM <= @MAX AND HANCHK = 'N'
|
|
|
|
-- 데이터를 업데이트한다.
|
|
UPDATE TblImportedNum
|
|
SET intCount = @MAX
|
|
WHERE strCompType = 'H'
|
|
END
|
|
|
|
--COMMIT TRAN
|
|
--SET XACT_ABORT OFF
|
|
|
|
|
|
GO
|
|
|
|
CREATE PROC USP_CheckNewBillRemainTime @UID INT
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @BillingType CHAR(1)
|
|
DECLARE @RemainTotal INT
|
|
DECLARE @strClientID VARCHAR(20)
|
|
DECLARE @RemainDate INT
|
|
DECLARE @RemainTime INT
|
|
|
|
SET @BillingType = 'N'
|
|
SET @RemainTotal = 0
|
|
|
|
SELECT @strClientID = strClientID
|
|
FROM TblPersonInfo
|
|
WHERE UID = @UID
|
|
|
|
SELECT @RemainDate=DATEDIFF(DAY,GETDATE(),dateEndTime),@RemainTime = intServiceTime - intUsingTime
|
|
FROM TblPersonBillingInfo
|
|
WHERE strClientID = @strClientID
|
|
|
|
-- BillingType ='D'
|
|
IF @RemainDate > 0
|
|
BEGIN
|
|
SET @BillingType = 'D'
|
|
SET @RemainTotal = @RemainDate
|
|
END
|
|
ELSE IF @RemainDate = 0
|
|
BEGIN
|
|
IF @RemainTime > 0
|
|
BEGIN
|
|
SET @BillingType = 'T'
|
|
SET @RemainTotal = @RemainTime
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @BillingType = 'D'
|
|
SET @RemainTotal = @RemainDate
|
|
END
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF @RemainTime >= 0
|
|
BEGIN
|
|
SET @BillingType = 'T'
|
|
SET @RemainTotal = @RemainTime
|
|
END
|
|
END
|
|
|
|
SELECT CAST (@BillingType AS CHAR(2)),@RemainTotal
|
|
|
|
|
|
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
|
|
|
|
|
|
-- 캐릭터 선택창 가기 전에 과금 여부를 체크한다.
|
|
-- 캐릭터 선택창에서 다시 실행한다.
|
|
-- 추가사항 : 블럭된 캐릭터인지 아닌지를 가려야한다.
|
|
CREATE PROC USPCheckBilling_CharIDLogin @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
|
|
|
|
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
|
|
|
|
|
|
-- 무료계정인지 아닌지 체크한다
|
|
SELECT @FreeTime = DATEDIFF(DAY,GETDATE(),RegLoginTime)
|
|
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 = @strBillingType
|
|
|
|
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
|
|
@FreeTime as PlayTime,@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 @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 = @strBillingType
|
|
|
|
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 = 0
|
|
SET @intCRMIndex1 = 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
|
|
|
|
-- 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 @intCRMIndex1,@intCRMIndex2,@IPType,@OutCRMIndex OUTPUT,@strBillingType OUTPUT,@canUseTime OUTPUT
|
|
|
|
IF @FLAG <> 0 --ERROR
|
|
BEGIN
|
|
-- PC방 과금이 종료된 경우이므로 다시 개인정량제로 과금을 적용시킨다.
|
|
|
|
SET @intCRMIndex1 = 0
|
|
SET @FLAG = 0
|
|
SET @strBillingType = @BillingTime
|
|
|
|
--접속테이블에 입력한다.
|
|
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
|
|
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 = @strBillingType
|
|
|
|
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
|
|
@PlayTime 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,
|
|
@PlayTime 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(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 @intCRMIndex1,@intCRMIndex2,@IPType,@OutCRMIndex OUTPUT,@strBillingType OUTPUT,@canUseTime OUTPUT
|
|
|
|
IF @FLAG <> 0 --ERROR
|
|
BEGIN
|
|
|
|
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 = @strBillingType
|
|
|
|
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
|
|
@PlayTime 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,
|
|
@PlayTime as PlayTime,@OutCRMIndex as CRMIndex
|
|
|
|
RETURN
|
|
END
|
|
END
|
|
END
|
|
END
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC USPCheckBilling_ClientIP @IP VARCHAR(15),@intCRMIndex1 INT OUTPUT,@intCRMIndex2 INT OUTPUT
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @RETURN INT
|
|
|
|
DECLARE @intCRMIndex INT
|
|
SET @intCRMIndex = 0
|
|
|
|
DECLARE @FLAG INT
|
|
SET @FLAG = 1
|
|
|
|
DECLARE TblGameRoomIPList_Cursor CURSOR FOR
|
|
SELECT intCRMIndex FROM TblGameRoomIPList WHERE strIP = @IP
|
|
|
|
OPEN TblGameRoomIPList_Cursor
|
|
|
|
FETCH NEXT FROM TblGameRoomIPList_Cursor into @intCRMIndex
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
|
|
IF @FLAG = 1
|
|
BEGIN
|
|
SET @intCRMIndex1 = @intCRMIndex
|
|
END
|
|
ELSE IF @FLAG = 2
|
|
BEGIN
|
|
SET @intCRMIndex2 = @intCRMIndex
|
|
END
|
|
|
|
FETCH NEXT FROM TblGameRoomIPList_Cursor into @intCRMIndex
|
|
|
|
SET @FLAG = @FLAG + 1
|
|
|
|
END
|
|
|
|
CLOSE TblGameRoomIPList_Cursor
|
|
DEALLOCATE TblGameRoomIPList_Cursor
|
|
|
|
--NOT EXISTS
|
|
IF @intCRMIndex1 = 0
|
|
BEGIN
|
|
SET @RETURN = 1
|
|
RETURN @RETURN
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @RETURN = 0
|
|
RETURN @RETURN
|
|
END
|
|
|
|
GO
|
|
|
|
|
|
-- 게임방 과금 체크
|
|
-- 주의 : @IPType을 인자로 받을때 클라이언트 아이피가 정액+정량 인경우는 C문자로 통일해서 받는다.
|
|
CREATE PROC USPCheckBilling_GameRoom @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 @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 @intCRMIndex,@BillingType OUTPUT,@CanUseTime OUTPUT
|
|
IF @RETURN <> 0
|
|
BEGIN
|
|
--RETURN 3 --ERROR
|
|
SET @BillingType ='N'
|
|
SET @CanUseTime = 0
|
|
|
|
-- 두번째 정액체크함.
|
|
EXEC @RETURN = USPCheckBilling_GameRoom_Date @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
|
|
|
|
|
|
CREATE PROC USPCheckBilling_GameRoom_Date @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'
|
|
|
|
-- 현재 정액제 아이피 허용갯수를 가져온다.
|
|
BEGIN TRAN
|
|
|
|
SELECT @strRegProcess = strRegProcess,@tinyServiceIpNum = tinyServiceIpNum,
|
|
@dateEndTime = dateEndTime,@tinyUsedIpNum = tinyUsedIpNum,@strClosed = strClosed
|
|
FROM TblPCRoomBilling_Date WITH (UPDLOCK)
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
COMMIT TRAN
|
|
|
|
-- 현재 해지된 피시방인지 체크한다.
|
|
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)
|
|
RETURN 0 --SUCCESS
|
|
END
|
|
END
|
|
-- 비가상계좌이므로 무조건 시간이 지나도 성공리턴한다.
|
|
ELSE IF @strRegProcess = 'm'
|
|
BEGIN
|
|
|
|
SET @BillingType = 'D'
|
|
-- 현재 남아있는 날짜를 리턴한다.
|
|
SET @CanUseTime = DATEDIFF(DAY,GETDATE(),@dateEndTime)
|
|
RETURN 0 --SUCCESS
|
|
END
|
|
END
|
|
END
|
|
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC USPCheckBilling_GameRoom_Time @intCRMIndex INT,@BillingType CHAR(1) OUTPUT,@CanUseTime INT OUTPUT
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @strRegProcess CHAR(1) --가상계좌,비가상계좌
|
|
DECLARE @IntServiceTime INT --총 정량제 등록시간(분)
|
|
DECLARE @intUsingTime INT --정량제 사용한 시간(분)
|
|
DECLARE @strClosed CHAR(1) -- 해지된 피시방 여부인지체크...
|
|
|
|
DECLARE @intRemainTime INT
|
|
SET @intRemainTime = 0
|
|
|
|
SET @intServiceTime = 0 -- 총가능한 플레이시간을 0으로 초기화한다.
|
|
SET @strRegProcess ='N'
|
|
|
|
-- 정량제 테이블에서 과금정보를 불러온다.
|
|
SELECT @strRegProcess = strRegProcess,@IntServiceTime=intServiceTime,
|
|
@intUsingTime = intUsingTime,@strClosed = strClosed
|
|
FROM TblPCRoomBilling_Time
|
|
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
|
|
-- 비가상계좌 (m), 가상계좌(z)
|
|
ELSE IF @strRegProcess = 'z'
|
|
BEGIN
|
|
-- CAN'T PLAY
|
|
IF (@IntServiceTime <= @intUsingTime)
|
|
BEGIN
|
|
SET @BillingType = 'T'
|
|
SET @canUseTime = 0
|
|
RETURN 2 --ERROR
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
-- 현재 접속중인 피시방에 대한 유저를 체크해서..사용량을 검사한다.
|
|
SELECT @intRemainTime = SUM(DATEDIFF(MINUTE,dateLoginTime,GETDATE()))
|
|
FROM TblCurrentUser
|
|
WHERE intCRMIndex = @intCRMIndex AND strBillingType = 'T'
|
|
|
|
-- ERROR
|
|
IF ((@IntServiceTime - @intUsingTime) < @intRemainTime)
|
|
BEGIN
|
|
SET @BillingType = 'T'
|
|
SET @canUseTime = 0
|
|
RETURN 3 --ERROR
|
|
END
|
|
|
|
SET @BillingType = 'T'
|
|
SET @CanUseTime = @IntServiceTime - @intUsingTime
|
|
RETURN 0 -- SUCCESS
|
|
END
|
|
END
|
|
ELSE IF @strRegProcess = 'm'
|
|
BEGIN
|
|
-- 총사용시간이 지났더라도 플레이 할수 있도록 해준다.
|
|
-- CAN PLAY
|
|
SET @BillingType = 'T'
|
|
SET @CanUseTime = @IntServiceTime - @intUsingTime
|
|
RETURN 0 -- SUCCESS
|
|
END
|
|
|
|
GO
|
|
|
|
-- 캐릭터 선택창 가기 전에 과금 여부를 체크한다.
|
|
-- 캐릭터 선택창에서 다시 실행한다.
|
|
CREATE PROC USPCheckBilling_Login @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
|
|
|
|
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
|
|
|
|
|
|
|
|
-- 무료계정인지 아닌지 체크한다
|
|
SELECT @FreeTime = DATEDIFF(DAY,GETDATE(),RegLoginTime)
|
|
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 = @strBillingType
|
|
|
|
SELECT @FLAG as FLAG,@strBillingType2 as BillingType,
|
|
@FreeTime as PlayTime,@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 @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 = @strBillingType
|
|
|
|
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 = 0
|
|
SET @intCRMIndex1 = 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
|
|
|
|
-- 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 @intCRMIndex1,@intCRMIndex2,@IPType,@OutCRMIndex OUTPUT,@strBillingType OUTPUT,@canUseTime OUTPUT
|
|
|
|
IF @FLAG <> 0 --ERROR
|
|
BEGIN
|
|
-- PC방 과금이 종료된 경우이므로 다시 개인정량제로 과금을 적용시킨다.
|
|
|
|
SET @intCRMIndex1 = 0
|
|
SET @FLAG = 0
|
|
SET @strBillingType = @BillingTime
|
|
|
|
-- 임시테이블 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
|
|
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 = @strBillingType
|
|
|
|
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 @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 = @strBillingType
|
|
|
|
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
|
|
|
|
|
|
|
|
-- 로그아웃 시 과금체크 부분
|
|
-- 로그아웃시 과금이 지난 경우는 불활성 상태로 저장하고 종료한다.
|
|
CREATE PROC USPCheckBilling_LogOut @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
|
|
|
|
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 @ERROR
|
|
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 @ERROR
|
|
RETURN
|
|
END
|
|
END
|
|
ELSE IF @BillingType ='D'-- 게임방 정액제인 경우
|
|
BEGIN
|
|
|
|
EXEC @ERROR= USPCheckBilling_LogOut_PCDate 'Y',@CRMIndex,@CRMCode,@UsingTime,@ClientID
|
|
|
|
IF @ERROR <> 0
|
|
BEGIN
|
|
SELECT @ERROR
|
|
RETURN
|
|
END
|
|
END
|
|
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
|
|
|
|
SELECT 0 AS SUCCESS
|
|
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
|
|
SELECT 2 AS ERROR
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
-- 로그를 남긴다.
|
|
DELETE TblCurrentUser_Temp WHERE strClientid = @ClientID
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
SELECT 3 AS ERROR
|
|
RETURN
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
--INSERT INTO RylBillingDB_Log.dbo.TblCurrentUser_Log
|
|
--VALUES (@ClientID,@UID,@CRMIndex,@strIp,@BillingType,@tinyServerID,@FirstLoginTime,@DateLoginTime,GETDATE(),0)
|
|
|
|
SELECT 0 AS SUCCESS
|
|
RETURN
|
|
|
|
END
|
|
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC USPCheckBilling_LogOut_PCDate @DelFlag CHAR(1),@CRMIndex INT,@CRMCode VARCHAR(20),@UsingTime INT,@ClientID VARCHAR(20)
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
-- 자동으로 정액제 유저가 나가면 정량제 유저가 접속되어있는 곳을 정액제 유저로 변환해야함.
|
|
DECLARE @TimeCRMIndex INT
|
|
DECLARE @UserID VARCHAR(20)
|
|
DECLARE @LogOutTime INT
|
|
DECLARE @strClosed CHAR(1)
|
|
|
|
DECLARE @RegProcess CHAR(1)
|
|
DECLARE @RemainTime INT
|
|
|
|
-- 정량제가 정액제로 자동으로 바뀌면 IPNUMCOUNT
|
|
DECLARE @IPNUMYESNO INT
|
|
SET @IPNUMYESNO = 0
|
|
|
|
SET @LogOutTime = -1
|
|
SET @TimeCRMIndex = 0
|
|
|
|
DECLARE @RETURN INT
|
|
SET @RETURN = -1
|
|
|
|
SELECT @TimeCRMIndex = intCRMIndex FROM TblPCRoomBillingInfo WHERE strCRMCode = @CRMCode AND strBillingType ='T'
|
|
-- 정량제 피시방이 존재한다면
|
|
IF @TimeCRMIndex > 0
|
|
BEGIN
|
|
-- 현재접속된 유저의 아이디를 얻어온다.해당 아이피가 정액제 아이피인것중에서 가져와야함.
|
|
SELECT TOP 1 @UserID = strClientid,@LogOutTime = DATEDIFF(MINUTE,dateLoginTime,GETDATE())
|
|
FROM TblCurrentUser WHERE intCRMIndex = @TimeCRMIndex AND strBillingType ='T'
|
|
AND strIP IN (SELECT strIP FROM TblGameRoomIpList WHERE intCRMIndex = @CRMIndex)
|
|
|
|
-- 정액제 유저로 변경할 정량제 유저를 먼저 로그아웃 시킨다.
|
|
IF (@LogOutTime > -1)
|
|
BEGIN
|
|
EXEC @RETURN = USPCheckBilling_LogOut_PCTime 'N',@TimeCRMIndex,@CRMCode,@LogOutTime,@UserID
|
|
|
|
-- @RETURN : 0 (SUCCESS)
|
|
IF @RETURN <> 0
|
|
BEGIN
|
|
|
|
RETURN 301
|
|
END
|
|
|
|
-- 다른 정량제 유저가 접속중이면 과금 타입을 정액제로 바꾼다.
|
|
UPDATE TblCurrentUser
|
|
SET intCRMIndex = @CRMIndex,strBillingType ='D',dateLoginTime = GETDATE()
|
|
WHERE strClientid = @UserID
|
|
IF @@ROWCOUNT = 1
|
|
BEGIN
|
|
SET @IPNUMYESNO = 1
|
|
END
|
|
|
|
-- 로그를 남긴다.
|
|
INSERT INTO RylBillingDB_LOG.DBO.TblCurrentUser_Log (strClientID,UID,intCRMIndex,strIp,strBillingType,tinyServerID,FirstLoginTime,LoginTime,LogoutTime,intPlayTime)
|
|
VALUES (@UserID,NULL,@TimeCRMIndex,NULL,'T',NULL,NULL,NULL,GETDATE(),@LogOutTime)
|
|
END
|
|
END
|
|
|
|
-- 사용시간을 체크해서 가상계좌이면 삭제한다.
|
|
SELECT @RegProcess = strRegProcess,@RemainTime = DATEDIFF(SECOND,GETDATE(),dateEndTime),@strClosed =strClosed
|
|
FROM TblPCRoomBilling_Date
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
BEGIN TRAN
|
|
|
|
-- 가상계좌와 과금종료일자가 지나면 과금컬럼을 삭제한다.
|
|
IF (((@RegProcess = 'z') AND (@RemainTime <= 0)) OR @strClosed = 'Y')
|
|
BEGIN
|
|
|
|
-- 현재 자신외에 다른 유저가 들어가있는지 확인한다.
|
|
DECLARE @Count INT
|
|
SELECT @Count = COUNT(strClientID) FROM TblCurrentUser WHERE intCRMIndex = @CRMIndex
|
|
|
|
-- 자신외에 다른 유저들이 존재하지 않는다고 하면 전체 정보를 삭제한다.
|
|
IF (@Count = 1)
|
|
BEGIN
|
|
DELETE TblPCRoomBilling_Date
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 302
|
|
END
|
|
|
|
-- 해당 아이피를 삭제한다.
|
|
DELETE TblGameRoomIPList
|
|
WHERE intCRMIndex = @CRMIndex
|
|
IF @@ROWCOUNT = 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 303
|
|
END
|
|
|
|
-- 피시방 정보를 삭제한다.
|
|
DELETE TblPCRoomBillingInfo
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 304
|
|
END
|
|
END
|
|
ELSE -- 자신외에 다른 유저가 현재 접속되어있다.
|
|
BEGIN
|
|
IF @IPNUMYESNO = 0
|
|
BEGIN
|
|
-- 허용아이피 갯수를 낮춘다.
|
|
UPDATE TblPCRoomBilling_Date
|
|
SET tinyUsedIpNum = tinyUsedIpNum - 1
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
|
|
ROLLBACK TRAN
|
|
RETURN 305
|
|
END
|
|
END
|
|
END
|
|
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF @IPNUMYESNO = 0
|
|
BEGIN
|
|
-- 허용아이피 갯수를 낮춘다.
|
|
UPDATE TblPCRoomBilling_Date
|
|
SET tinyUsedIpNum = tinyUsedIpNum - 1
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
|
|
ROLLBACK TRAN
|
|
RETURN 306
|
|
END
|
|
END
|
|
END
|
|
|
|
DELETE TblCurrentUser WHERE strClientid =@ClientID
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 307
|
|
END
|
|
|
|
COMMIT TRAN
|
|
RETURN 0
|
|
|
|
GO
|
|
|
|
CREATE PROC USPCheckBilling_LogOut_PCTime @DelFlag CHAR(1),@CRMIndex INT,@CRMCode VARCHAR(20),@UsingTime INT,@ClientID VARCHAR(20)
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @RemainTime INT
|
|
DECLARE @RegProcess CHAR(1)
|
|
DECLARE @strClose CHAR(1) -- 해지된 피시방인지 체크한다.
|
|
|
|
BEGIN TRAN
|
|
|
|
UPDATE TblPCRoomBilling_Time
|
|
SET intUsingTime = intUsingTime + @UsingTime
|
|
WHERE intCRMIndex = @CRMIndex
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 201
|
|
END
|
|
|
|
-- 사용시간을 체크해서 가상계좌이면 삭제한다.
|
|
SELECT @RegProcess = strRegProcess,@RemainTime =(intServiceTime - intUsingTime),@strClose = strClosed
|
|
FROM TblPCRoomBilling_Time
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
-- 해지된 피시방이거나 가상계좌 중 사용시간이 초과 되었을 경우 과금필드를 삭제한다.
|
|
IF (((@RegProcess = 'z') AND (@RemainTime <= 0)) OR @strClose ='Y' )
|
|
BEGIN
|
|
-- 현재 자신외에 다른 유저가 들어가있는지 확인한다.
|
|
DECLARE @Count INT
|
|
SELECT @Count = COUNT(strClientID) FROM TblCurrentUser WHERE intCRMIndex = @CRMIndex
|
|
-- 현재 같은 피시방에 다른 유저들이 접속되어있음
|
|
IF (@COUNT > 1)
|
|
BEGIN
|
|
-- 미디어웹에 보낼 정량제 사용량에 대해서 기록을 입력한다.
|
|
INSERT INTO TblCRM_ServiceTime (strCRMCode,strGameCode,intServiceTime,delColumn,WebCHK)
|
|
VALUES (@CRMCode,'002',@RemainTime,'N','N')
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 202
|
|
END
|
|
END
|
|
-- 현재 다른 유저들이 피시방에 접속해있지 않다.
|
|
ELSE --IF (@COUNT = 1)
|
|
BEGIN
|
|
-- 해당시간을 삭제한다.
|
|
DELETE TblPCRoomBilling_Time
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 203
|
|
END
|
|
|
|
-- 미디어웹에 보낼 정량제 사용량에 대해서 기록을 입력한다.
|
|
INSERT INTO TblCRM_ServiceTime (strCRMCode,strGameCode,intServiceTime,delColumn,WebCHK)
|
|
VALUES (@CRMCode,'002',@RemainTime,'Y','N')
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 204
|
|
END
|
|
|
|
-- 해당 아이피를 삭제한다.
|
|
DELETE TblGameRoomIPList
|
|
WHERE intCRMIndex = @CRMIndex
|
|
IF @@ROWCOUNT = 0
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 205
|
|
END
|
|
|
|
-- 피시방 정보를 삭제한다.
|
|
DELETE TblPCRoomBillingInfo
|
|
WHERE intCRMIndex = @CRMIndex
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 206
|
|
END
|
|
END
|
|
|
|
END
|
|
ELSE -- 사용시간이 남아있는 경우
|
|
BEGIN
|
|
|
|
-- 미디어웹에 보낼 정량제 사용량에 대해서 기록을 입력한다.
|
|
INSERT INTO TblCRM_ServiceTime (strCRMCode,strGameCode,intServiceTime,delColumn,WebCHK)
|
|
VALUES (@CRMCode,'002',@RemainTime,'N','N')
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 207
|
|
END
|
|
END
|
|
|
|
-- 해당 유저를 삭제함.
|
|
IF @DelFlag = 'Y'
|
|
BEGIN
|
|
|
|
DELETE TblCurrentUser WHERE strClientid = @ClientID
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 208
|
|
END
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
RETURN 0
|
|
|
|
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC USPCheckBilling_LogOut_PersonTime @ClientID VARCHAR(20),@UsingTime INT
|
|
AS
|
|
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @RemainTime INT
|
|
SET @RemainTime = -1
|
|
|
|
BEGIN TRAN
|
|
|
|
UPDATE TblPersonBillingInfo
|
|
SET intUsingTime = intUsingTime + @UsingTime
|
|
WHERE strClientid = @ClientID
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 100
|
|
END
|
|
|
|
DELETE TblCurrentUser WHERE strClientid = @ClientID
|
|
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN 101
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
RETURN 0
|
|
|
|
GO
|
|
|
|
-- CHECK PERSONALBILLING
|
|
CREATE PROC USPCheckBilling_Person @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 @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
|
|
|
|
|
|
CREATE PROC USPCheckBilling_UpIPCount @intCRMIndex INT
|
|
AS
|
|
UPDATE TblPCRoomBilling_Date
|
|
SET tinyUsedIpNum = tinyUsedIpNum + 1
|
|
WHERE intCRMIndex = @intCRMIndex
|
|
|
|
|
|
GO
|
|
|
|
-- 블럭 체크
|
|
CREATE Proc USPCheckRestraintChar @ServerID Tinyint,@UID INT
|
|
AS
|
|
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @tinyType TINYINT
|
|
SET @tinyType = 0
|
|
|
|
DECLARE @tinyKind TINYINT -- 1:영구,0:임시
|
|
DECLARE @EndTime INT
|
|
DECLARE @dateEndTime SMALLDATETIME
|
|
DECLARE @intEndTime INT
|
|
|
|
DECLARE @RETURNCHAR1 VARCHAR(20)
|
|
DECLARE @RETURNCHAR2 VARCHAR(20)
|
|
DECLARE @RETURNCHAR3 VARCHAR(20)
|
|
|
|
SELECT @tinyType=tinyType,@tinyKind = tinykind,@EndTime =DATEDIFF(MINUTE,GETDATE(),dateEndTime)
|
|
FROM TblRestraintChar
|
|
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
|
|
|
IF @tinyType = 0 -- 블럭안함
|
|
BEGIN
|
|
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR2
|
|
RETURN
|
|
END
|
|
ELSE IF @tinyType = 1 -- 계정블럭
|
|
BEGIN
|
|
|
|
-- 기간여부체크
|
|
IF (@EndTime <= 0 and @tinyKind = 0) --블럭해제된 상태임
|
|
BEGIN
|
|
UPDATE TblRestraintChar
|
|
SET tinyBlocked = 0
|
|
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
|
|
|
SET @tinyType = 0
|
|
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR2
|
|
RETURN
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR2
|
|
RETURN
|
|
END
|
|
END
|
|
ELSE IF @tinyType = 2 --캐릭터블럭
|
|
BEGIN
|
|
DECLARE @strCharName VARCHAR(20)
|
|
SET @EndTime = 0
|
|
|
|
DECLARE @TIME INT
|
|
SET @TIME = 1
|
|
DECLARE Restraint_Cursor CURSOR FOR
|
|
SELECT strCharName,DATEDIFF(MINUTE,GETDATE(),dateEndTime),tinyKind
|
|
FROM TblRestraintChar
|
|
WHERE tinyServerID=@ServerID AND UID = @UID AND tinyBlocked = 1
|
|
|
|
|
|
OPEN Restraint_Cursor FETCH NEXT FROM Restraint_Cursor INTO @strCharName,@EndTime,@tinyKind
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
|
|
IF ((@EndTime > 0) or (@tinyKind = 1))
|
|
BEGIN
|
|
|
|
IF @TIME = 1
|
|
SET @RETURNCHAR1 = @strCharName
|
|
ELSE IF @TIME = 2
|
|
SET @RETURNCHAR2 = @strCharName
|
|
ELSE IF @TIME = 3
|
|
SET @RETURNCHAR3 = @strCharName
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
|
|
UPDATE TblRestraintChar
|
|
SET tinyBlocked = 0
|
|
WHERE tinyServerID=@ServerID AND UID = @UID AND strCharName = @strCharName AND tinyBlocked = 1
|
|
END
|
|
|
|
|
|
SET @TIME = @TIME + 1
|
|
|
|
FETCH NEXT FROM Restraint_Cursor into @strCharName,@EndTime,@tinyKind
|
|
|
|
END
|
|
|
|
CLOSE Restraint_Cursor
|
|
DEALLOCATE Restraint_Cursor
|
|
|
|
IF ((@RETURNCHAR1 IS NULL) AND (@RETURNCHAR2 IS NULL) AND (@RETURNCHAR3 IS NULL))
|
|
BEGIN
|
|
SET @tinyType = 0
|
|
END
|
|
|
|
SELECT @tinyType,@RETURNCHAR1,@RETURNCHAR2,@RETURNCHAR3
|
|
RETURN
|
|
END
|
|
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC USPDeleteRestraintChar @SeverID tinyint,@UID INT,@Charname varchar(16)
|
|
AS
|
|
|
|
|
|
SET NOCOUNT ON
|
|
|
|
IF EXISTS (SELECT UID FROM TblRestraintChar WHERE tinyServerID=@SeverID AND UID = @UID AND strCharName = @Charname)
|
|
BEGIN
|
|
DELETE TblRestraintChar
|
|
WHERE tinyServerID=@SeverID AND UID = @UID AND strCharName = @Charname
|
|
|
|
SELECT @@ROWCOUNT
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SELECT 0
|
|
END
|
|
|
|
GO
|
|
|
|
|
|
-- 현재 서버군에 접속되어있는 유저들을 리턴한다.
|
|
CREATE PROC USPDisConnectLogOut @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)
|
|
)
|
|
|
|
INSERT INTO @TempTable (strClientID)
|
|
SELECT strClientID FROM TblCurrentUser WHERE tinyServerID = @ServerID
|
|
|
|
SET @RowID = @@ROWCOUNT
|
|
|
|
WHILE @RowID <> 0
|
|
BEGIN
|
|
SELECT @strClientID = strClientID FROM @TempTable WHERE RowID = @RowID
|
|
-- 개인개인 과금을 처리한다.
|
|
EXEC USPDisConnectLogOut_Include @strClientID
|
|
|
|
SET @RowID = @RowID - 1
|
|
END
|
|
|
|
SELECT 0 AS SUCCESS
|
|
|
|
|
|
GO
|
|
|
|
|
|
|
|
|
|
-- 로그아웃 시 과금체크 부분
|
|
-- 로그아웃시 과금이 지난 경우는 불활성 상태로 저장하고 종료한다.
|
|
CREATE PROC USPDisConnectLogOut_Include @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
|
|
|
|
-- 로그를 남긴다.
|
|
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
|
|
|
|
-- 로그를 남긴다.
|
|
DELETE TblCurrentUser_Temp WHERE strClientid = @ClientID
|
|
IF @@ROWCOUNT <> 1
|
|
BEGIN
|
|
ROLLBACK TRAN
|
|
RETURN
|
|
END
|
|
|
|
COMMIT TRAN
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
-- 서버쪽에서 1분마다 관련 프로시져를 돌린다.
|
|
-- 1. 피시방 아이피 변경 : Command : ET,ED
|
|
-- 2. 피시방 해지가 왔을때 : Command : BB
|
|
-- 3. 피사방 재배치 관련 : Command : FF
|
|
CREATE PROC USPGRoomCurrent_DisConn @ClientID VARCHAR(20)
|
|
AS
|
|
|
|
SET NOCOUNT ON
|
|
|
|
DECLARE @UID INT
|
|
DECLARE @CRMIndex INT
|
|
DECLARE @strIp VARCHAR(15)
|
|
DECLARE @BillingType CHAR(1)
|
|
DECLARE @tinyServerID TINYINT
|
|
DECLARE @DateLoginTime SMALLDATETIME
|
|
DECLARE @FirstLoginTime SMALLDATETIME
|
|
|
|
SET @UID = -1
|
|
|
|
SELECT @UID = UID,@CRMIndex = intCRMIndex,@strIp = strIp,@BillingType = strBillingType,
|
|
@tinyServerID = tinyServerID,@DateLoginTime = DateLoginTime,@FirstLoginTime = FirstLoginTime
|
|
FROM TblCurrentUser
|
|
WHERE strClientid = @ClientID
|
|
|
|
-- 유저가 존재한다고 하면
|
|
IF (@UID > 0 )
|
|
BEGIN
|
|
-- 해지되는 피시방의 유저일경우
|
|
IF EXISTS (SELECT strClientID FROM TblCurrentUser_DISCONN WHERE strClientID = @ClientID AND strCommand = 'BB')
|
|
BEGIN
|
|
--DELETE TblCurrentUser
|
|
--WHERE strClientid = @ClientID
|
|
|
|
-- 게임방 코드를 구한다.
|
|
DECLARE @CRMCode VARCHAR(20)
|
|
SELECT @CRMCode = strCRMCode FROM TblPCRoomBillingInfo WHERE intCRMIndex = @CRMIndex
|
|
|
|
IF @BillingType = 'T'
|
|
BEGIN
|
|
EXEC USPCheckBilling_LogOut_PCTime 'Y',@CRMIndex,@CRMCode,0,@ClientID
|
|
END
|
|
ELSE IF @BillingType ='D'-- 게임방 정액제인 경우
|
|
BEGIN
|
|
|
|
EXEC USPCheckBilling_LogOut_PCDate 'Y',@CRMIndex,@CRMCode,0,@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(),0)
|
|
|
|
DELETE TblCurrentUser_DISCONN
|
|
WHERE strClientID = @ClientID
|
|
|
|
RETURN
|
|
END
|
|
-- 재배치가 일어나는 경우 (정액제 피시방일때만 기록에 남는다)
|
|
ELSE IF EXISTS (SELECT strClientID FROM TblCurrentUser_DISCONN WHERE strClientID = @ClientID AND strCommand = 'FF')
|
|
BEGIN
|
|
DELETE TblCurrentUser
|
|
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)
|
|
|
|
DELETE TblCurrentUser_DISCONN
|
|
WHERE strClientID = @ClientID
|
|
|
|
RETURN
|
|
END
|
|
-- 정량제 아이피가 변경되는 경우
|
|
ELSE IF EXISTS (SELECT strClientID FROM TblCurrentUser_DISCONN WHERE strClientID = @ClientID AND strCommand = 'ET')
|
|
BEGIN
|
|
DELETE TblCurrentUser
|
|
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)
|
|
|
|
DELETE TblCurrentUser_DISCONN
|
|
WHERE strClientID = @ClientID
|
|
|
|
RETURN
|
|
END
|
|
-- 정액제 아이피가 변경되는 경우
|
|
ELSE IF EXISTS (SELECT strClientID FROM TblCurrentUser_DISCONN WHERE strClientID = @ClientID AND strCommand = 'ED')
|
|
BEGIN
|
|
|
|
-- 게임방 코드를 구한다.
|
|
SELECT @CRMCode = strCRMCode FROM TblPCRoomBillingInfo WHERE intCRMIndex = @CRMIndex
|
|
|
|
IF @BillingType = 'D'
|
|
BEGIN
|
|
EXEC USPCheckBilling_LogOut_PCDate 'Y',@CRMIndex,@CRMCode,0,@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(),0)
|
|
|
|
DELETE TblCurrentUser_DISCONN
|
|
WHERE strClientID = @ClientID
|
|
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC USPInsertPerson @strClientid VARCHAR(20),@UID INT
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
IF NOT EXISTS (SELECT strClientid FROM TblPersonInfo WHERE UID = @UID)
|
|
BEGIN
|
|
INSERT INTO TblPersonInfo (UID,strClientid,RegLoginTime,LastLogOutTime)
|
|
VALUES (@UID,@strClientid,GETDATE()+7,GETDATE())
|
|
END
|
|
|
|
|
|
GO
|
|
|
|
|
|
CREATE PROC USPSelectServerID @strClientid VARCHAR(20)
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
SELECT tinyServerid FROM TblCurrentUser WHERE strClientid = @strClientid
|
|
|
|
|
|
GO
|
|
|
|
|
|
-- 해당 서버 시작 및 종료 시 로그인 데이터 삭제하기.
|
|
CREATE PROC USPServer_End @ServerID Tinyint
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DELETE TblCurrentUser_Temp
|
|
WHERE tinyServerID = @ServerID
|
|
|
|
DELETE TblCurrentUser
|
|
WHERE tinyServerID = @ServerID
|
|
|
|
SELECT 0 AS SUCCESS
|
|
|
|
|
|
GO
|
|
|
|
|
|
-- 해당 서버 시작 및 종료 시 로그인 데이터 삭제하기.
|
|
CREATE PROC USPServer_Start @ServerID Tinyint
|
|
AS
|
|
SET NOCOUNT ON
|
|
|
|
DELETE TblCurrentUser_Temp
|
|
WHERE tinyServerID = @ServerID
|
|
|
|
DELETE TblCurrentUser
|
|
WHERE tinyServerID = @ServerID
|
|
|
|
SELECT 0 AS SUCCESS
|
|
|
|
GO
|