⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_innerdealpack.pas

📁 软件功能:下载一个网站上所有的彩铃! 铃声下载完后
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  AllFunctionMsgReadFlag:=False;//功能信息读取标志
  For ProviderIDIndex:=0 To 3 Do
    ReadAllProviderFunctionMsgFlag[ProviderIDIndex]:=False;//读取所有运营商功能消息标志

  ServerIP:=ReadConfig(IniFileName,'Server','SmsIP');//短信IP地址
  ServerPort:=ReadConfig(IniFileName,'Server','SmsPort');//短信端口

  DataBaseName:=ReadConfig(IniFileName,'Database','DataBaseName');//数据库名称
  UserName:=ReadConfig(IniFileName,'Database','UserName');//数据库用户名称
  Password:=ReadConfig(IniFileName,'Database','Password');//数据库密码
  DBConnectionString:=GetDBConnectionString(DataBaseName,UserName,PassWord);//业务运行数据库连接串

  DataBaseName:=ReadConfig(IniFileName,'LogDatabase','DataBaseName');//数据库名称
  UserName:=ReadConfig(IniFileName,'LogDatabase','UserName');//数据库用户名称
  Password:=ReadConfig(IniFileName,'LogDatabase','Password');//数据库密码
  LogDBConnectionString:=GetDBConnectionString(DataBaseName,UserName,PassWord);//日志数据库连接串

  DialCodeInfoTableName:=ReadConfig(IniFileName,'Config','DialCodeInfoTableName');//点拨信息表名称
  FunctionMsgTableName:=ReadConfig(IniFileName,'Config','FunctionMsgTableName');//功能信息表名称

  For ProviderIDIndex:=0 To 3 Do
  Begin
    Try ReadAllProviderFunctionMsgFlag[ProviderIDIndex]:=StrToBool(ReadConfig(IniFileName,'Other','ReadAllProviderFunctionMsgFlag'+IntToStr(ProviderIDIndex)));Except End;//功能信息表名称
    If ReadAllProviderFunctionMsgFlag[ProviderIDIndex]=True Then
      Try ProviderFunctionMsgTableName[0]:=ReadConfig(IniFileName,'Other','ProviderFunctionMsgTableName'+IntToStr(ProviderIDIndex));Except End;//功能信息表名称
  End;

  DelTableName:=ReadConfig(IniFileName,'Config','DelTableName');//上行日志表名称
  SubTableName:=ReadConfig(IniFileName,'Config','SubTableName');//下行日志表名称
  SysCaption:=ReadConfig(IniFileName,'Config','SysCaption');//系统标题
  SysProgramName:=ReadConfig(IniFileName,'Config','SysProgramName');//系统程序名称
  Try RegisterNumberAmount:=StrToInt(ReadConfig(IniFileName,'Config','RegisterNumberAmount'));Except End;//注册业务代码数目
  SetLength(RegisterNumber,RegisterNumberAmount);
  For RegisterNumberIndex:=Low(RegisterNumber) To High(RegisterNumber) Do
    RegisterNumber[RegisterNumberIndex]:=ReadConfig(IniFileName,'Config','RegisterNumber'+IntToStr(RegisterNumberIndex));//注册业务代码
  ProviderName:=ReadConfig(IniFileName,'Config','ProviderName');//企业代码(如101097797)
  ProviderID:=ReadConfig(IniFileName,'Config','ProviderID');//运营商ID号(如1是连通)
  Try SMType:=StrToInt(ReadConfig(IniFileName,'Config','SMType'));Except End;//短信类型(为0是数字拨号、1是短信编码)
  Try ProviderChargeType:=StrToInt(ReadConfig(IniFileName,'Config','ProviderChargeType'));Except End;//运营商收费类型(为1是直接收费、0是非直接收费)
  Try MaxConnectErrNum:=StrToInt(ReadConfig(IniFileName,'Config','MaxConnectErrNum'));Except End;//短信网关最大重连次数
  Try MaxDBErrNum:=StrToInt(ReadConfig(IniFileName,'Config','MaxDBErrNum'));Except End;//数据库最大重连次数
  Try AutoCloseFlag:=StrToBool(ReadConfig(IniFileName,'Config','AutoCloseFlag'));Except End;//自动关闭程序标志(1为True,0为False)
  Try ReconnectInterval:=StrToInt(ReadConfig(IniFileName,'Config','ReconnectInterval'));Except End;//定时重连时间(如5000是5秒)

  //短信群发表名称(0-移动梦网1-联通点信2-联通在信3-电信)
  SmsMtSendInfoTableName[0]:=ReadConfig(IniFileName,'Other','SmsMtSendInfoTableName0');
  SmsMtSendInfoTableName[1]:=ReadConfig(IniFileName,'Other','SmsMtSendInfoTableName1');
  SmsMtSendInfoTableName[2]:=ReadConfig(IniFileName,'Other','SmsMtSendInfoTableName2');
  SmsMtSendInfoTableName[3]:=ReadConfig(IniFileName,'Other','SmsMtSendInfoTableName3');
  //短信群发序列名称(0-移动梦网1-联通点信2-联通在信3-电信)
  MtSendSeq[0]:=ReadConfig(IniFileName,'Other','MtSendSeq0');
  MtSendSeq[1]:=ReadConfig(IniFileName,'Other','MtSendSeq1');
  MtSendSeq[2]:=ReadConfig(IniFileName,'Other','MtSendSeq2');
  MtSendSeq[3]:=ReadConfig(IniFileName,'Other','MtSendSeq3');
End;
//重连服务器
Function ReConnectServer(Var Sock:TSocket;StatusBar:TStatusBar):Boolean;
Var
  //Sock地址输入对象
  SockAddrIn:TSockAddrIn;
  WSAData:TWSAData;
  Ret:Integer;
Begin
  Result:=False;
  Try
    WSAAsyncSelect(Sock,Form_Main.Handle,WM_SOCKET,0);
    CloseSocket(Sock);WSACleanup;
    WSAStartup(2,WSAData);
    Sock:=Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
    SockAddrIn.sin_addr.S_addr:=inet_addr(PChar(ServerIP));
    SockAddrIn.sin_Port:=htons(StrToInt(ServerPort));
    SockAddrIn.sin_Family:=AF_INET;
    Ret:=Connect(Sock,SockAddrIn,SizeOf(SockAddrIn));
    If Ret<>SOCKET_ERROR Then
    Begin
      Result:=True;
      AddErrMsg('短信网关连接成功!');
      StatusBar.Panels[1].Text:='短信网关连接成功!';
      MaxConnectErrNum:=0;
    End
    Else
    Begin
      If ReConnectNum=0 Then
        SockErrMemoIndex:=AddErrMsg('短信网关连接失败')
      Else
        AddErrMsg('短信网关连接失败('+IntToStr(ReConnectNum)+')',SockErrMemoIndex);
      StatusBar.Panels[1].Text:='短信网关连接失败';
      Inc(ReConnectNum);Beep();Beep();
      If (ReConnectNum>=MaxConnectErrNum) And AutoCloseFlag Then Application.Terminate;
    End;
  Except
    On E:EOleException Do
    Begin
      StatusBar.Panels[1].Text:='短信网关连接错误:'+E.Message;
      Inc(ReConnectNum);Beep();Beep();
      If (ReConnectNum>=MaxConnectErrNum) And AutoCloseFlag Then Application.Terminate;
    End;
  End;
End;
//重连数据库
Function ReConnectDataBase(StatusBar:TStatusBar):Boolean;
Var
  ProviderIDIndex:Integer;
Begin
  Result:=True;
  //连接业务运行数据库
  If DBADOConnection.Connected=False Then
  Begin
    If ConnectDataBase(DBADOConnection,DBConnectionString) Then
    Begin
      AddErrMsg('业务运行数据库ADO连接成功!');
      StatusBar.Panels[1].Text:='业务运行数据库ADO连接成功!';
      MaxDBErrNum:=0;
      If Not AllDialCodeInfoReadFlag Then//点拨信息读取标志
        AllDialCodeInfoReadFlag:=ReadAllDialCodeInfo(DialCodeInfoTableName,DBConnectionString,ProviderID);//读取所有点拨信息记录
      If Not AllFunctionMsgReadFlag Then//功能信息读取标志
      Begin
        For ProviderIDIndex:=0 To 3 Do
        Begin
          If ReadAllProviderFunctionMsgFlag[ProviderIDIndex]=True Then
            AllFunctionMsgReadFlag:=ReadAllProviderFunctionMsg(ProviderFunctionMsgTableName[ProviderIDIndex],DBConnectionString,ProviderIDIndex);//读取所有功能消息记录
        End;
        AllFunctionMsgReadFlag:=ReadAllFunctionMsg(FunctionMsgTableName,DBConnectionString,ProviderID);//读取所有功能消息记录
      End;
    End
    Else
    Begin
      Result:=False;
      If DBErrNum=0 Then
        DBErrMemoIndex:=AddErrMsg('业务运行数据库ADO连接失败、重连数据库。。。')
      Else
        AddErrMsg('业务运行数据库ADO连接失败、重连数据库('+IntToStr(DBErrNum)+')',DBErrMemoIndex);
      StatusBar.Panels[1].Text:='业务运行数据库ADO连接失败、重连数据库('+IntToStr(DBErrNum)+')';
      Inc(DBErrNum);Beep();Beep();
      If (DBErrNum>=MaxDBErrNum) And AutoCloseFlag Then Application.Terminate;
    End;
  End;
  //连接日志数据库
  If LOGDBADOConnection.Connected=False Then
  Begin
    If ConnectDataBase(LOGDBADOConnection,LOGDBConnectionString) Then
    Begin
      AddErrMsg('日志数据库ADO连接成功!');
      StatusBar.Panels[1].Text:='日志数据库ADO连接成功!';
    End
    Else
    Begin
      Result:=False;
      If DBErrNum=0 Then
        DBErrMemoIndex:=AddErrMsg('日志数据库ADO连接失败、重连数据库。。。')
      Else
        AddErrMsg('日志数据库ADO连接失败、重连数据库('+IntToStr(DBErrNum)+')',DBErrMemoIndex);
      StatusBar.Panels[1].Text:='日志数据库ADO连接失败、重连数据库'+IntToStr(DBErrNum)+')';
      Inc(DBErrNum);Beep();Beep();
      If (DBErrNum>=MaxDBErrNum) And AutoCloseFlag Then Application.Terminate;
    End;
  End;
End;
//添加MEMO信息
Function AddMemoMsg(Msg:String):Integer;
Begin
  Form_Main.MemInfo.Lines.Add(FormatDateTime('mm-dd hh:nn:ss> ',Now)+Msg);
  If Form_Main.MemInfo.Lines.Count>3000 Then
  Begin
    SaveMemo(Form_Main.MemInfo);
  End;
  Result:=Form_Main.memInfo.Lines.Count-1;
End;
//添加MEMO信息
Function AddMemoMsg(Msg:String;Index:Integer):Integer;
Begin
  Form_Main.memInfo.Lines.Delete(Index);
  Form_Main.memInfo.Lines.Insert(Index,FormatDateTime('mm-dd hh:nn:ss> ',Now)+Msg);
  If Form_Main.MemInfo.Lines.Count>3000 Then
  Begin
    SaveMemo(Form_Main.MemInfo);
  End;
  Result:=Form_Main.memInfo.Lines.Count-1;
End;
//添加错误信息
Function AddErrMsg(Msg:String):Integer;
Begin
  Form_Main.ErrMemo.Lines.Add(FormatDateTime('mm-dd hh:nn:ss',Now)+':'+Msg);
  If Form_Main.ErrMemo.Lines.Count>50 Then
    SaveErrMemo(Form_Main.ErrMemo);
  Result:=Form_Main.ErrMemo.Lines.Count-1;
End;
//添加错误信息
Function AddErrMsg(Msg:String;Index:Integer):Integer;
Begin
  Form_Main.ErrMemo.Lines.Delete(Index);
  Form_Main.ErrMemo.Lines.Insert(Index,FormatDateTime('mm-dd hh:nn:ss> ',Now)+Msg);
  If Form_Main.ErrMemo.Lines.Count>50 Then
    SaveErrMemo(Form_Main.ErrMemo);
  Result:=Form_Main.ErrMemo.Lines.Count-1;
End;
//保存MEMO信息
procedure SaveMemo(Memo:TMemo);
Var
  ihandle:integer;
  FileName:String;
begin
  Try
    If not DirectoryExists(ExtractFilePath(Application.ExeName) +'Log') Then
      If Not CreateDir(ExtractFilePath(Application.ExeName)+'Log')  Then
      Begin
        Memo.Clear;
        Beep();
        Beep();
        AddErrMsg('目录:'+ExtractFilePath(Application.ExeName)+'log不存在,或建立不成功');
        Exit;
      End;
    FileName:=ExtractFilePath(Application.ExeName)+'log\'+FormatDatetime('mmdd-hhmmss',now())+'-Memo.Log';
    ihandle:=FileCreate(FileName);
    Fileclose(ihandle);
    Memo.Lines.SaveToFile(FileName);
    Memo.Lines.Clear;
  Except
  End;
End;
//保存错误的Memo信息
procedure SaveErrMemo(Memo:Tmemo);
Var
  ihandle:integer;
  FileName:string;
Begin
  Try
    If Not DirectoryExists(ExtractFilePath(Application.ExeName) +'ErrLog') Then
      If Not Createdir(ExtractFilePath(Application.ExeName)+'ErrLog') Then
      Begin
        Memo.clear;
        Beep();
        Beep();
        AddMemoMsg('目录:'+ExtractFilePath(Application.ExeName)+'log不存在,或建立不成功');
        Exit;
      End;
    FileName:=ExtractFilePath(Application.ExeName)+'ErrLog\'+Formatdatetime('mmdd-hhmmss',now())+'-Err.Log';
    ihandle:=FileCreate(FileName);
    Fileclose(ihandle);
    Memo.Lines.SaveToFile(FileName);
    Memo.Lines.Clear;
  Except
  End;
End;
//修改用户的定制标志(运营商ID号码、取消标志、用户类型、包月表定制表名称、手机号码、业务代码、定制处理标志)
Procedure UpdateCustomRec(DBConnectionString,CustomTableName:String;CustomMsgRec:Rec_CustomMsg;CustomDealFlag:Boolean);
Var
  ADOQuery:TADOQuery;
  StrSql:String;
Begin
  Try
    ADOQuery:=TADOQuery.Create(nil);
    With ADOQuery,CustomMsgRec Do
    Begin
      ConnectionString:=DBConnectionString;
      If CustomDealFlag Then//判断是否是业务定制处理
      Begin//业务定制处理
        StrSql:='Update '+CustomTableName+' Set LastUseDate_Date=SysDate,Custom_Src=1';//设置最后访问时间为系统时间、手机定制(0:网站定制;1:手机定制)
        If FirstCustomTime='' Then//判断首次定制时间是否是空的
          StrSql:=StrSql+',FirstCustom_Date=SysDate';//设置首次定制时间为系统时间
        If UserType<>0 Then StrSql:=StrSql+',User_Type=0';//判断用户类型是否是0,若不是将其设置为0
        //判断用户是否是定制用户,如果不是则将设置为定制用户、定制时间为系统时间、取消标志为1
        If CustomFlag<=0 Then
        Begin
          If ProviderChargeType=1 Then
            StrSql:=StrSql+',Custom_Status=1,Custom_Date=SysDate,Cancel_Status=1,Charge_Date=SysDate'
          Else
            StrSql:=StrSql+',Custom_Status=1,Custom_Date=SysDate,Cancel_Status=1';
        End
        //判断是否是取消用户,如果是将定制时间为系统时间、取消标志为1
        Else If CancelFlag=0 Then StrSql:=StrSql+',Custom_Date=SysDate,Cancel_Status=1';
        //根据用户所定制的业务类型作为判断条件
        StrSql:=StrSql+' Where User_Msisdn='''+Phone+''' And Item_ID='''+ServiceCode+'''';
        Close;SQL.Clear;SQL.Add(StrSql);
        ExecSQL;
      End
      Else If CancelFlag=1 Then//判断是否是叮制用户
      Begin//取消业务定制处理
        //将取消时间为系统时间、取消标志为0
        StrSql:='Update '+CustomTableName+' Set Cancel_Date=SysDate,Cancel_Status=0';
        //根据用户所定制的业务类型作为判断条件
        StrSql:=StrSql+' Where User_Msisdn='''+Phone+''' And Item_ID='''+ServiceCode+'''';
        Close;SQL.Clear;SQL.Add(StrSql);
        ExecSQL;
      End;
    End;
  Except
    On E:EOleException Do
    Begin
      E.ErrorCode:=0;DBError(E);
    End;
  End;
  ADOQuery.Free;
End;
//添加用户的定制记录
Procedure InsertCustomRec(DBConnectionString,CustomTableName:String;CustomMsgRec:Rec_CustomMsg;CustomDealFlag:Boolean);
Var
  ADOQuery:TADOQuery;
  StrSql:String;
Begin
  Try
    ADOQuery:=TADOQuery.Create(nil);
    With ADOQuery,CustomMsgRec Do
    Begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -