亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? channels.pas

?? 東進D160A板卡自動外呼程序代碼
?? PAS
字號:
unit Channels;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, ExtCtrls;
  
const 
  maxchannel = 100;
  
type 
  channel_state =
    (Free,  //空閑
    occupy, //占用
    disabled //禁止使用
    );
type 
  channel_type =   //通道內型
    (user,
    trunk,
    nothing
    );

type
  TDunInfo = class
    public
      Sbbh: string;
      //Dialnumlst: TStringList;
      Dialnum: string;
  end;
    
type 
  channel_structure = record
    State: channel_state;      // 通道狀態
    Ringing: boolean;          // 通道是否正在振鈴
    Channeltype: channel_type; // 通道類型
    Connectchannel: Integer;   // 與本通道連接的通道
    dtmf: string;              // 本通道收到的DTMF碼
    Step: integer;             // 本通道當前所處流程
    PlayingWaterfee: Boolean;  // 是否正在播放語音流
    MeterID: string;           // 存儲客戶的水表編號
  end;

procedure AddItemtoTellist(Achnl: Integer);
procedure InitSystem();
procedure ReleSystem();
procedure DunWaterfee(channelno: Integer);//主程序
procedure ResetChannel(channelno: Integer); //
procedure drawgrid();
function  HangupCheck(Achnl: Integer): Boolean;

var
  Channel: array [0..maxchannel] of channel_STRUCture;
  Totalchannel: Integer;
  TTSChannel: Integer;

implementation

uses tc08a32, Mainform, filectrl, DJTTS3, CallerDM;

{-------------------------------------------------------------------------------
  Procedure: HangupCheck
  Author:    Xsp
  DateTime:  2006.04.28
  Arguments: Achnl: Integer
  Result:    Boolean
  Popose:    掛機檢測
-------------------------------------------------------------------------------}
function  HangupCheck(Achnl: Integer): Boolean;
begin
  if Channel[Achnl].Channeltype = trunk then
    Result := (ReadCheckResult(Achnl, PLAY_CHECK) = R_BUSY) and (ReadBusyCount() >= 2)
  else
    Result := not RingDetect(Achnl);
end;

{-------------------------------------------------------------------------------
  Procedure: InitSystem
  Author:    Xsp
  DateTime:  2006.05.09
  Arguments: 
  Result:    None
  Popose:    初始化語音卡
-------------------------------------------------------------------------------}
procedure InitSystem();
var
  i, t: Integer;
begin
  if loaddrv > 0 then
  begin
    ShowMessage('驅動加載失敗!');
    application.Terminate;
  end;
  
  totalchannel := checkvalidch();
  if enablecard(totalchannel, 1024 * 50) > 0 then
  begin
    ShowMessage('初始化卡失敗!');
    application.Terminate;
  end;
  sig_init(0);

  //初始化stategrid
  Mainfrm.stategrid.RowCount     := totalchannel + 1;
  Mainfrm.stategrid.ColCount     := 4;
  Mainfrm.stategrid.Cells[0, 0]  := '序號';
  Mainfrm.stategrid.Cells[1, 0]  := '通道類型';
  Mainfrm.stategrid.Cells[2, 0]  := '狀態';
  Mainfrm.stategrid.Cells[3, 0]  := '當前操作內容';
  Mainfrm.stategrid.ColWidths[1] := 60;
  Mainfrm.stategrid.ColWidths[2] := 60;
  Mainfrm.stategrid.ColWidths[3] := 402;
  for i := 0 to totalchannel do
  begin
    startsigcheck(i);
    initdtmfbuf(i);
    Mainfrm.stategrid.Cells[0, i + 1] := IntToStr(i);
    t := checkchtype(i);
    if t = 0 then
    begin
      Mainfrm.stategrid.Cells[1, i + 1] := '內線通道';
      channel[i].channeltype := user;
      channel[i].state := disabled; //由于是呼出系統,因此這里的內線全部給屏蔽
      Mainfrm.stategrid.Cells[3, i + 1] := '本通道不能作為呼出通道';
    end
    else if t = 1 then
    begin
      Mainfrm.stategrid.Cells[1, i + 1] := '外線通道';
      channel[i].channeltype := trunk;
      channel[i].state := Free;
    end
    else 
    begin
      Mainfrm.stategrid.Cells[1, i + 1] := '通道懸空';
      channel[i].channeltype := nothing;
      channel[i].state := disabled;
      Mainfrm.stategrid.Cells[3, i + 1] := '本通道不能作為呼出通道';
    end;
    channel[i].connectchannel := -1;
    channel[i].dtmf := '';
  end;// end of for

  // 初始化TTS功能
  DJTTS3_Init();
  TTSChannel := DJTTS3_GetTotalTTSChannel();
  for i := 0 to TTSChannel - 1 do
  begin
    if channel[i].channeltype = trunk then
      DJTTS3_AddTTSToChannel(i);
  end;
  Mainfrm.statMain.Panels[1].Text := Format('共激活 %d 條TTS通道', [TTSChannel]); 
  //Mainfrm.label3.Caption := IntToStr(newreadpass(0));
  Mainfrm.Timer1.Enabled := True;
end;

{-------------------------------------------------------------------------------
  Procedure: ReleSystem
  Author:    Xsp
  DateTime:  2006.05.09
  Arguments: 
  Result:    None
  Popose:    釋放系統占用的資源
-------------------------------------------------------------------------------}
procedure ReleSystem();
var
  I: Integer;
begin
  for I := 0 to TTSChannel - 1 do
  begin
    if Channel[I].channeltype = trunk then
    begin
      DJTTS3_StopPlayText(I);
      DJTTS3_DelTTSFromChannel(I);
    end;
  end;

  DJTTS3_Release();
  disablecard;
  freedrv
end;

{-------------------------------------------------------------------------------
  Procedure: AddItemtoTellist
  Author:    Xsp
  DateTime:  2006.05.09
  Arguments: Achnl: Integer
  Result:    None
  Popose:    向催繳列表中加入一項未成功的資料
-------------------------------------------------------------------------------}
procedure AddItemtoTellist(Achnl: Integer);
var
  Aduninfo: TDunInfo;
begin
  with Mainfrm.telebox.Items do
  begin
    Aduninfo := TDunInfo.Create;
    Aduninfo.Sbbh := Channel[Achnl].MeterID;
    Aduninfo.Dialnum := Channel[Achnl].dtmf;
    AddObject(Aduninfo.Dialnum, Aduninfo);
  end;
end;

{-------------------------------------------------------------------------------
  Procedure: DunWaterfee
  Author:    Xsp
  DateTime:  2006.05.09
  Arguments: channelno: Integer
  Result:    None
  Popose:    催繳業務處理過程,實在太簡單:),不過作為一般的開發入門應該可以
-------------------------------------------------------------------------------}
procedure DunWaterfee(channelno: Integer);
var
  dialnum: PChar;
  Result, Delay: integer;
  Ainfo, AmeterID, Adialnum: string;
begin
  case channel[channelno].step of
    0: 
      begin
        if (channel[channelno].channeltype = trunk) and
          (channel[channelno].state = Free) then
        begin
          if Mainfrm.telebox.Items.Count >= 1 then
          begin
            channel[channelno].dtmf    := Mainfrm.telebox.Items.Strings[0];
            Channel[channelno].MeterID := TDunInfo(Mainfrm.telebox.Items.Objects[0]).Sbbh;
            //從表中取走號碼,防止另外一個通道也撥同一個號碼
            Mainfrm.telebox.Items.Delete(0);
            Mainfrm.Progressbar.Position := Round((dmCaller.DuntaskCount - Mainfrm.telebox.Count) / dmCaller.DuntaskCount);

            Mainfrm.stategrid.cells[3, channelno + 1] :=
              '撥打電話:' + channel[channelno].dtmf;
            startsigcheck(channelno);
            dialnum := PChar(channel[channelno].dtmf);
            offhook(channelno);
            channel[channelno].state := occupy;
            starttimer(channelno, 4);
            sig_startdial(channelno, PChar(dialnum), PChar(Mainfrm.PrefixNum), 0);
            channel[channelno].step := 100;
          end
        end
      end;

    100:
      begin
        if ElapseTime(channelno, 4) >= 2000 then //超時處理
        begin
          AddItemtoTellist(channelno);
          //把號碼加入到電話表中,留待下次呼出
          ResetChannel(channelno);
        end;
        Result := sig_checkdial(channelno);
        case Result of
          //S_NORESULT:;//還沒有檢測到結果
          S_BUSY: // 遇忙
            begin
              dmCaller.Dunlog(channelno, '外線', '呼出',
                Format('催繳水表編號 %s 所對應的客戶欠費,電話號碼為:%s', [Channel[channelno].MeterID, Channel[channelno].dtmf]), '對方忙');
              AddItemtoTellist(channelno);
              ResetChannel(channelno);
            end;

           S_NOBODY: // 沒人接聽
             begin
              dmCaller.Dunlog(channelno, '外線', '呼出',
                Format('催繳水表編號 %s 所對應的客戶欠費,電話號碼為:%s', [Channel[channelno].MeterID, Channel[channelno].dtmf]), '無人接聽');
              AddItemtoTellist(channelno);
              ResetChannel(channelno);
             end;

           S_NOSIGNAL: // 沒有信號
             begin
               dmCaller.Dunlog(channelno, '外線', '呼出',
                Format('催繳水表編號 %s 所對應的客戶欠費,電話號碼為:%s', [Channel[channelno].MeterID, Channel[channelno].dtmf]), '沒有信號');
               AddItemtoTellist(channelno);
               ResetChannel(channelno);
            end;

           S_CONNECT: // 對方摘機
             begin
               Delay := 0;
               while(Delay < 3000) do
               begin
                 Inc(Delay, 50);
               end;
               dmCaller.Dunlog(channelno, '外線', '呼出',
                 Format('催繳水表編號 %s 所對應的客戶欠費,電話號碼為:%s', [Channel[channelno].MeterID, Channel[channelno].dtmf]), '對方摘機');

               Mainfrm.stategrid.cells[3, channelno + 1] :=
                 Mainfrm.stategrid.cells[3, channelno + 1] + '..對方摘機,開始放音';
               Ainfo := dmCaller.GetDunWaterfee(Channel[channelno].MeterID);
               DJTTS3_StartPlayText(channelno, PChar(Ainfo), INFO_TEXT_BUFFER, 0, 45, 100);
               channel[channelno].Step            := 101;
               Channel[channelno].PlayingWaterfee := True;
             end;
        end// end of case
      end;

    101:
      begin
        if (DJTTS3_CheckPlayTextEnd(channelno) = INFO_PLAY_COMPLATE) or HangupCheck(channelno) then
        begin
          AmeterID := Channel[channelno].MeterID;
          Adialnum := Channel[channelno].dtmf;
          ResetChannel(channelno);
          dmCaller.DunInsert(AmeterID, Adialnum, 1, '催繳成功');
        end;
      end
  end;// end of case
end;//end of dowork

{-------------------------------------------------------------------------------
  Procedure: ResetChannel
  Author:    Xsp
  DateTime:  2006.05.09
  Arguments: channelno: integer
  Result:    None
  Popose:    通道復位以便于下次進行相關的操作
-------------------------------------------------------------------------------}
procedure ResetChannel(channelno: integer);
begin
  channel[channelno].state := Free;
  Mainfrm.stategrid.Cells[3, channelno + 1] := '';
  channel[channelno].dtmf  := '';
  channel[channelno].step  := 0;
  Channel[channelno].PlayingWaterfee := False;
  if channel[channelno].channeltype = trunk then // 如果是外線通道,進行掛機
  begin
    hangup(channelno);
    Sleep(2000);
    startsigcheck(channelno);
    Sig_ResetCheck(channelno);
  end;
end;

{-------------------------------------------------------------------------------
  Procedure: drawgrid
  Author:    Xsp
  DateTime:  2006.05.09
  Arguments: 
  Result:    None
  Popose:    更新每條通道的狀態信息
-------------------------------------------------------------------------------}
procedure drawgrid();
var
  channelno: integer;
  temp: string;
begin
  for channelno := 0 to totalchannel do
  begin
    if channel[channelno].connectchannel <>-1 then
      Mainfrm.stategrid.Cells[3, channelno + 1] :=
        '本通道正在和第' + IntToStr(channel[channelno].connectchannel) + '通道通話';
    case channel[channelno].state of
      Free: Mainfrm.stategrid.Cells[2, channelno + 1] := '空閑';
      occupy: Mainfrm.stategrid.Cells[2, channelno + 1] := '占用';
      disabled: Mainfrm.stategrid.Cells[2, channelno + 1] := '無效';
    end;//end of case
  end
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久户外露出 | 日本少妇一区二区| 欧美日韩视频在线一区二区| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲视频你懂的| 91香蕉视频mp4| 亚洲午夜精品一区二区三区他趣| 欧美性猛交xxxxxx富婆| 日韩 欧美一区二区三区| 精品日韩一区二区三区免费视频| 狠狠狠色丁香婷婷综合久久五月| 国产农村妇女精品| 欧美一a一片一级一片| 日本强好片久久久久久aaa| 久久久久国产精品厨房| 波多野结衣一区二区三区| 亚洲第一会所有码转帖| 久久夜色精品国产欧美乱极品| 国产69精品久久久久毛片| 亚洲日本在线a| 在线播放日韩导航| 国产成人午夜视频| 亚洲一区二区三区中文字幕 | 高清成人免费视频| 亚洲激情自拍视频| 欧美成人vr18sexvr| 成人av资源网站| 亚洲高清视频中文字幕| 久久久噜噜噜久久中文字幕色伊伊| 成人av在线播放网站| 日日夜夜精品视频天天综合网| 精品噜噜噜噜久久久久久久久试看| 成人综合婷婷国产精品久久免费| 亚洲丶国产丶欧美一区二区三区| 久久这里只有精品6| 欧美色手机在线观看| 国产精品一区二区三区乱码| 亚洲在线一区二区三区| 久久久久久毛片| 欧美精品久久一区| 91丨九色porny丨蝌蚪| 老司机精品视频导航| 一区二区三区蜜桃网| 国产无人区一区二区三区| 欧美日韩激情一区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 久久久精品黄色| 欧美日韩国产一级二级| www.性欧美| 看片的网站亚洲| 亚洲小说春色综合另类电影| 国产精品国产三级国产| 亚洲精品在线三区| 69堂成人精品免费视频| 色丁香久综合在线久综合在线观看 | 欧美国产日韩a欧美在线观看| 51午夜精品国产| 91久久精品网| 色丁香久综合在线久综合在线观看| 国产91精品精华液一区二区三区 | 久久99国产精品麻豆| 亚洲高清久久久| 亚洲色图19p| 亚洲欧美中日韩| 欧美国产一区在线| 久久久久久一二三区| 2023国产一二三区日本精品2022| 欧美一区二区三区在线电影| 欧美日韩一二三| 欧美四级电影在线观看| 日本精品一区二区三区四区的功能| 成人激情午夜影院| 成人午夜免费视频| av亚洲产国偷v产偷v自拍| 成人动漫中文字幕| 日韩你懂的在线播放| 欧美男生操女生| 欧美军同video69gay| 欧美理论电影在线| 日韩一二三区视频| 日韩三级伦理片妻子的秘密按摩| 欧美一区二区视频在线观看2022 | 日韩欧美一级二级三级 | 2023国产精华国产精品| 久久久久久久国产精品影院| 久久九九影视网| 中文字幕欧美一| 亚洲最新视频在线观看| 五月天视频一区| 精久久久久久久久久久| 国产寡妇亲子伦一区二区| 成人国产免费视频| 一本一道久久a久久精品| 欧美色图天堂网| 日韩欧美国产午夜精品| 国产亚洲精品aa| 亚洲男帅同性gay1069| 亚洲国产精品精华液网站| 美女在线视频一区| 国产成人午夜高潮毛片| 色婷婷综合中文久久一本| 欧美人xxxx| 亚洲国产精品黑人久久久| 亚洲一二三区在线观看| 韩国精品主播一区二区在线观看 | 国产麻豆午夜三级精品| 丁香婷婷综合激情五月色| 91美女片黄在线观看91美女| 欧美精品123区| 蜜臀av性久久久久蜜臀av麻豆| 韩国av一区二区三区| 99久久伊人精品| 91精品国产综合久久精品| 国产亚洲精品资源在线26u| 亚洲男同性视频| 国产揄拍国内精品对白| 91激情在线视频| 精品剧情在线观看| 亚洲黄色av一区| 久久99精品国产麻豆不卡| 色综合久久中文字幕综合网| 欧美一激情一区二区三区| 亚洲色图另类专区| 国产一区二区三区在线观看精品| 色综合天天在线| 久久美女高清视频| 午夜伊人狠狠久久| 91啪在线观看| 国产色综合一区| 蜜臀a∨国产成人精品| 色88888久久久久久影院按摩 | 中文字幕亚洲电影| 日本在线观看不卡视频| 色悠悠久久综合| 欧美国产乱子伦| 久久se精品一区精品二区| 一本一道波多野结衣一区二区| 久久久久久久久久久99999| 日韩精品电影在线| 在线观看国产一区二区| 中文在线资源观看网站视频免费不卡| jiyouzz国产精品久久| 精品国产一区二区亚洲人成毛片| 亚洲靠逼com| 成人av动漫网站| 久久蜜臀精品av| 精品一区二区久久久| 538prom精品视频线放| 亚洲成人免费在线观看| 在线观看国产日韩| 亚洲色图.com| 91在线看国产| 亚洲视频狠狠干| 97久久超碰精品国产| 亚洲国产成人午夜在线一区| 韩国毛片一区二区三区| 欧美mv和日韩mv的网站| 美女视频黄免费的久久 | 亚洲电影一级黄| 欧美色精品天天在线观看视频| 日韩美女视频一区二区 | 欧美日韩一级大片网址| 樱桃视频在线观看一区| 97久久久精品综合88久久| 日韩毛片一二三区| 91免费看视频| 亚洲美女偷拍久久| 色欧美乱欧美15图片| 一区二区三区产品免费精品久久75| 国产91精品一区二区麻豆网站| 久久久夜色精品亚洲| 国产大陆a不卡| 1区2区3区欧美| 在线观看免费一区| 日韩精品五月天| 精品国免费一区二区三区| 国产精品一二三区| 1000部国产精品成人观看| 色综合欧美在线| 日韩在线一区二区| 日韩欧美国产一区二区在线播放| 久草精品在线观看| 中文字幕的久久| 色呦呦国产精品| 日本美女一区二区三区视频| 久久这里只有精品视频网| 成人app网站| 亚洲一区二区三区四区的| 91精品国产麻豆国产自产在线| 麻豆精品久久精品色综合| 国产色爱av资源综合区| 色呦呦一区二区三区| 日韩福利视频导航| 亚洲国产高清aⅴ视频| 在线观看成人小视频| 日本va欧美va欧美va精品| 久久久久久久久97黄色工厂| 色综合久久88色综合天天免费| 男女视频一区二区| 日韩毛片一二三区|