关闭

接口存储过程

标签: 存储queryexceptionloginuserinsert
1520人阅读 评论(0) 收藏 举报
分类:
CREATE OR REPLACE PACKAGE BODY Pk_If_Epg_Bss IS
       /********************************************************************************
    * 包体名称:   PK_IF_EPG_BSS
    * 功能描述:   实现IPTV EPG_与 BSS 的一些接口功能
    *     者:
    * 编写日期:   2005.11.19
    *     明:
    *    (1) 本过程包中的P_QUERY_AUTH, P_QUERY_ORDER, P_QUERY_BILL 是返回字符串结果的,目前(P_QUERY_BILL)暂没有用,留待对性能要求更高时备用.
    *        实现同样功能的还有返回结果集的另一个版本,包含在过程包 PG_IO_EPG 中, 是目前在用的版本.
    *
    * 修改历史:
    * 修 改 人        修改说明
    * -------- -------- ----------------------------------------------------------
    * 遗留问题:
    * (3)有些表都没有判断生效/失效日期(等相关数据完整、严密之后加上)。
    * (4)验证和实际扣费可能需要分离,也就是说,先验证返回结果给IPTV平台,用户实际点播使用成功后IPTV平台再发扣费请求。
    ********************************************************************************/
 
       PROCEDURE p_User_Login_Authen -- 用户登录时认证
       (
              Pi_Stbid        IN VARCHAR2, -- 机顶盒编号
              Pi_Userid       IN VARCHAR2, -- 用户帐号
              Pi_Password     IN VARCHAR2, -- 用户密码
              Pi_Ipaddr       IN VARCHAR2, -- 机顶盒IP地址
              Po_Usertoken    OUT VARCHAR2, -- 用户令牌
              Po_Userid_Out   OUT VARCHAR2, -- 用户帐号 (输入参数中用户帐号为空时需要返回用户帐号)
              Po_Nickname     OUT VARCHAR2, -- 用户名称
              Po_Accountno    OUT VARCHAR2, -- 宽带接入帐号
              Po_Detailparams OUT VARCHAR2, -- 扩展信息
              Po_Returncode   OUT VARCHAR2, -- 认证结果 0-认证成功,1-认证失败
              Po_Message      OUT VARCHAR2 -- 返回消息, 认证失败时返回具体的失败原因
       ) IS
              /********************************************************************************
        *   过程名称:   P_USER_LOGIN_AUTHEN
        *   功能描述:   用户登录时认证
        *       者: 王占通
        *   编写日期:   2005.11.19
        *   修改历史:
        * 修 改 人        修改说明
        * -------- -------- --------------------------------------------------------------
       
        ********************************************************************************/
              Vc_Query_Pwd Serv.Query_Pwd%TYPE;
              Vc_Width_Type Serv.Width_Type%TYPE;
              Vc_Serv_Id    Serv.Serv_Id%TYPE;
              Vc_State      Serv.State%TYPE;
              Vc_State1     Serv_Terminal.State%TYPE;
              Vc_Area_Id    Serv.Area_Id%TYPE;
              Vc_Acc_Nbr    Serv.Acc_Nbr%TYPE;
              Vc_Acc_Nbr    Serv.Acc_Nbr%TYPE;
              Vc_Remark     Serv.Remark%TYPE;
              Vc_Width_Flux Serv.Width_Flux%TYPE;
              Vc_Area_Name Area.NAME%TYPE;
              Vc_Found      CHAR(1);
              Vc_Stpmsg     VARCHAR2(2000);
      
       BEGIN
      
              Po_Returncode := '1';
              Po_Userid_Out := Pi_Userid;
              Vc_Found      := '0';
              Vc_State      := 'F0A';
              Vc_State1     := '1';
      
              -- 若输入参数中用户帐号及密码为空,表明用户是首次登录认证,则需到用户表中根据机顶盒编号查找用户帐号。
              -- 否则根据用户帐号查询。
      
              IF Pi_Userid IS NULL THEN
                     Vc_Stpmsg := ' 根据输入机顶盒编号查找/验证用户信息';
                     BEGIN
                            SELECT User_Name,
                                      Query_Pwd,
                                      Nvl(Width_Type, ' '),
                                     Width_Id,
                                      Area_Id,
                                      a.Serv_Id,
                                      Width_Flux,
                                      Acc_Nbr,
                                      a.State,
                                      Nvl(b.State, '1'),
                                      Remark
                            INTO   Po_Nickname,
                                      Vc_Query_Pwd,
                                      Vc_Width_Type,
                                      Po_Accountno,
                                      Vc_Area_Id,
                                      Vc_Serv_Id,
                                      Vc_Width_Flux,
                                      Po_Userid_Out,
                                      Vc_State,
                                      Vc_State1,
                                      Vc_Remark
                            FROM   Serv a, Serv_Terminal b
                            WHERE a.Serv_Id = b.Serv_Id
                            AND    b.Terminal_Id = Pi_Stbid;
                     EXCEPTION
                            WHEN OTHERS THEN
                                   Vc_Found := '1';
                     END;
              ELSE
                     Vc_Stpmsg := ' 根据输入用户帐号查找/验证用户信息';
                     BEGIN
                            SELECT User_Name,
                                      Query_Pwd,
                                      Nvl(Width_Type, ' '),
                                      Width_Id,
                                      Area_Id,
                                      Serv_Id,
                                      State,
                                      Width_Flux
                            INTO   Po_Nickname,
                                      Vc_Query_Pwd,
                                      Vc_Width_Type,
                                      Po_Accountno,
                                      Vc_Area_Id,
                                      Vc_Serv_Id,
                                      Vc_State,
                                      Vc_Width_Flux
                            FROM   Serv
                            WHERE Acc_Nbr = Pi_Userid;
                     EXCEPTION
                            WHEN OTHERS THEN
                                   Vc_Found := '2';
                     END;
              END IF;
      
              IF Vc_Found <> '0' THEN
                     IF Vc_Found = '2' THEN
                            Po_Message := ' 用户帐号不存在.';
                     ELSE
                            Po_Message := ' 机顶盒编号不存在.';
                     END IF;
                     RETURN;
              END IF;
      
              IF Vc_State NOT IN ('F0A', 'F0B') THEN
                     Po_Message := ' 用户状态为非可用状态:' || Vc_Remark;
                     RETURN;
              END IF;
      
              IF Vc_State1 <> '1' THEN
                     Po_Message := ' 机顶盒状态为暂停状态';
                     RETURN;
              END IF;
      
              IF Vc_Query_Pwd <> Pi_Password Or Pi_Password IS NULL THEN
                     Po_Message := ' 用户密码不符.';
                     RETURN;
              END IF;
      
              SELECT 'RZ_' || To_Char(SYSDATE, 'yyyymmddhh24miss') || '_' ||
                        To_Char(Vc_Serv_Id)
              INTO   Po_Usertoken
              FROM   Dual;
      
              SELECT NAME
              INTO   Vc_Area_Name
              FROM   Area
              WHERE Area_Id = Vc_Area_Id;
      
              Vc_Stpmsg       := ' 得到扩展信息.';
              Po_Detailparams := '<areaId>' || To_Char(Vc_Area_Id) || '</areaId>' ||
                                             '<areaName>' || Vc_Area_Name || '</areaName>' || '<spId>' ||
                                             '123' || '</spId>' || '<spName>' || '123' || '</spName>' ||
                                             '<bandwidth>' || To_Char(Vc_Width_Flux) || '</bandwidth>';
      
              IF Vc_State = 'F0B' THEN
                     -- 机顶盒第一次使用,自动激活
                     UPDATE Serv
                     SET    State = 'F0A'
                     WHERE Serv_Id = Vc_Serv_Id;
              END IF;
      
              Vc_Stpmsg := ' 记录登录认证日志';
              INSERT INTO t_If_Login_Log
                     (Usertoken, Acc_Nbr, Serv_Id, Login_Time, Stb_Id, Flag)
              VALUES
                     (Po_Usertoken, Po_Userid_Out, Vc_Serv_Id, SYSDATE, Pi_Stbid, '1');
      
              COMMIT;
      
              Po_Returncode := '0';
              RETURN;
      
       EXCEPTION
              WHEN OTHERS THEN
                     ROLLBACK;
                     Vc_Stpmsg := Vc_Stpmsg || ' 错误号:' || SQLCODE || ' 错误信息:' || SQLERRM;
                     INSERT INTO Ut_Err_Log
                            (Proc, Errmsg, Err_Date)
                     VALUES
                            ('P_USER_LOGIN_AUTHEN', Vc_Stpmsg, SYSDATE);
                     COMMIT;
                     Po_Message    := ' 认证处理失败; ' || Vc_Stpmsg;
                     Po_Returncode := '1';
                     --vi_return := PG_SYS_MANAGER.F_SYS_ERROR_LOG(0,0,0,0,vc_stpmsg );
      
       END p_User_Login_Authen;
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1075004次
    • 积分:11225
    • 等级:
    • 排名:第1449名
    • 原创:166篇
    • 转载:224篇
    • 译文:0篇
    • 评论:130条
    最新评论