动态更新时间的问题

动态更新时间的问题

-- -----------------------------------------------------------------
-- File : ../Database/StoredProcedure/GSP_User_LogoutUser.sql
-- Desc : Logout out user StoredProcedure
-- Auth : tiantao
-- Date : 2010-05-12 10:09
-- Last : 
-- Copyright (c) 2009 JingDian,Corp. All rights reserved.
-- -----------------------------------------------------------------
USE [WebGame_User]
GO

 

 

-- -----------------------------------------------------------------
-- StoredProcedure:GSP_User_LogoutUser     登出用户  
-- -----------------------------------------------------------------
IF EXISTS (SELECT 1
          FROM sysobjects
          WHERE  id = object_id('dbo.GSP_User_LogoutUser')
          AND TYPE = 'P')
   DROP PROCEDURE dbo.GSP_User_LogoutUser
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GSP_User_LogoutUser]
 @dwAccountID    INT,     -- 账号ID
 @dwNowTime     INT,     -- 登出时间
 @dwRoleId     INT,     -- 登出的角色
 @dwSvrId        INT,     -- 登出的服务器ID
 @dwCurTime     INT      -- 当前账号离线时间[防沉迷]

AS
 DECLARE     @T_IsCheck    TINYINT;    -- 是否通过防沉迷验证
 DECLARE     @T_LogOnTime   INT;     -- 登录时间
 DECLARE     @T_LogOutTime   INT;
 DECLARE     @T_OnlineTime   INT;     -- 在线累积时间
 DECLARE     @T_IdentityCard   VARCHAR(18);
 DECLARE     @T_TimeDiff    INT;     -- 时间差
 
 -- 日志相关
 DECLARE     @T_RoleID    INT;
 DECLARE     @T_Year     INT;
 DECLARE     @T_Month    INT;
 DECLARE     @T_Day     INT;
 DECLARE     @T_Date     DATETIME; 
 DECLARE     @T_CurOnTime   NVARCHAR(256);
 --DECLARE     @T_CurOnTime   DATETIME;
 DECLARE     @T_TableName   NVARCHAR(256);
 DECLARE     @T_UpdateSql   NVARCHAR(2048); 
 DECLARE     @T_QuerySql    NVARCHAR(2048); 
 DECLARE     @T_Param_Def   NVARCHAR(1024);

BEGIN
 SET NOCOUNT ON;
 
 -- --------------防沉迷时间操作-----------------------------------------------
 -- 1.查找该角色对应的账号,身份证号
  SELECT @T_IdentityCard = UA_IdentityCard, 
      @T_IsCheck = UA_IsCheck,
      @T_LogOutTime = UA_LogOutTime, 
      @T_OnlineTime = UA_OnlineTime, 
      @T_LogOnTime = UA_LogOnTime FROM User_AccountInfo 
   WHERE UA_AccountID = @dwAccountID;
  
 IF(@T_IsCheck = 0)
 BEGIN
  -- 获取在线累积时间    
  SET @T_TimeDiff = @dwCurTime - @T_LogOnTime;
   
  IF(@T_TimeDiff >= 5*3600)
  BEGIN
   UPDATE User_AccountInfo SET UA_FCMTime = @dwCurTime,UA_OnlineTime = 0 WHERE UA_IdentityCard = @T_IdentityCard;
   IF(@@ERROR<>0)
   BEGIN
    ROLLBACK TRANSACTION;
    SELECT -1 AS Result
    RETURN -1;
   END
  END
  ELSE
  BEGIN  
   UPDATE User_AccountInfo SET UA_OnlineTime = @T_TimeDiff + @T_OnlineTime, UA_LogOutTime = @dwCurTime 
    WHERE UA_AccountID = @dwAccountID;
   IF(@@ERROR<>0)
   BEGIN
    SELECT -2 AS Result;
    RETURN -2;
   END
  END
 END
 -- -----------------------------------------------------------------------------

 -- 更新登陆:Role_BasicInfo  角色基本信息
 UPDATE Role_BasicInfo SET RB_LogonTime = 0,
         RB_LogonIP = NULL,
         RB_LogoutTime = @dwNowTime,
         RB_SvrID = 0
  WHERE RB_AccountID = @dwAccountID;
 IF(@@ERROR<>0)
 BEGIN
  SELECT -2 AS Result;
  RETURN -2;
 END
 
 -- -----------------------------------------------------------------------------
 -- 插入 Log_LogonInfo    登录日志表
 SET @T_Year = YEAR(GETDATE());
 SET @T_Month = MONTH(GETDATE());
 SET @T_Day = DAY(GETDATE());

 -- table name
 SET @T_TableName = 'Log_LogonInfo_' + RTRIM(CONVERT(varchar(32), @T_Year))
      + RTRIM(CONVERT(varchar(32), @T_Month))
      + RTRIM(CONVERT(varchar(32), @T_Day));  
      
 -- update logout game time data
 SET @T_UpdateSql = N'UPDATE [WebGame_Log].[dbo].[' + @T_TableName
      + N'] SET LLI_LogOutTime = ' + N'GETDATE()' 
      + N' WHERE LLI_RoleID = ' + N'@T_RoleID'
      + N' AND LLI_LogOnTime = '+ N'(SELECT MAX(LLI_LogOnTime) FROM [WebGame_Log].[dbo].['
      + @T_TableName + N'] WHERE LLI_RoleID = ' + N'@T_RoleID' + N')';
    
 SET @T_Param_Def = N'@T_RoleID INT';
 SET @T_RoleID = @dwRoleID
       
 EXEC sp_executesql @T_UpdateSql, @T_Param_Def, @T_RoleID;
 IF(@@ERROR <> 0)
 BEGIN    
  SELECT -6 AS Result
  -- ROLLBACK TRANSACTION;
  RETURN -6;
 END 
 -- -----------------------------------------------------------------------------------

 RETURN 0;

END
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值