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

📄 frmmain.cs

📁 界面美观,功能齐全,连接数据库,适合初学者
💻 CS
📖 第 1 页 / 共 3 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Daila.NewClass;//引入命名空间
using System.Data.OleDb;

using System.IO;
using Daila.NewMehod;
namespace Daila
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }
        public enum CHANNEL_STATE : short
        {
            CH_FREE,//0"空闲"
            CH_RECEIVEID,//有来电呼入
            CH_WAITSECONDRING,//2" 等待第二次振铃"
            CH_WELCOME,//3"这里是东进电话银行演示系统
             CH_WELCOME0,
             CH_WELCOME1,
            CH_SELECT,//8"选择功能"
            CH_SELECT1,//9
            CH_PLAYRESULT,//10"播放查询结果";
            CH_RECORDFILE,//11
            CH_PLAYRECORD,//12
            CH_OFFHOOK,//13
            CH_WAITUSERONHOOK,//14"等待内线挂机"
            CH_ConBusy,//人工忙
            CH_ACCOUNT1,//请稍候
            CH_ACCOUNT2,//正在连接
            CH_ACCOUNT3,
            CH_ACCOUNT4,//已接通
            CH_ACCOUNT,//已接通
            CH_ConBusy0,//对方正忙
            CH_Connect,//正在转接"
            CH_Over,//请挂机
            CH_IsOver,//对方已挂机
            CH_PASSWORD0,//请拨号
            CH_PASSWORD,//请拨号
            CH_PASSWORD1,//已接通
            CH_RECEIVEID2,//有来电呼
            CH_DIAL,//拔号
            CH_CHECKSIG,
            CH_PLAY,
            CH_ONHOOK,
            CH_BUSY,
            CH_NOBODY,
            CH_NOSIGNAL,
            CH_NODIALTONE,
            CH_NORESULT
        }
        public enum CHANNEL_TYPE : short
        {
            User,//0 内线
            Trunk,//1外线
            Empty//2悬空
        }

        public enum SigType : int//信号音类型,可以有如下值:
        {
            SIG_STOP,//0       停止播放信号音
            SIG_DIALTONE,//1  拨号音
            SIG_BUSY1,//2      忙音一
            SIG_BUSY2,//3      忙音二
            SIG_RINGBACK//  回铃音

        }
        public enum HangUp : int
        {


            HANG_UP_FLAG_FALSE,//0 没有挂机
            HANG_UP_FLAG_TRUE,//1已经挂机(从进入HANG_UP_FLAG_START                                                                   状态开始,挂机时间大于0.5秒。)
            HANG_UP_FLAG_START,//2 	  ● 开始挂机
            HANG_UP_FLAG_PRESS_R //3 拍了一下叉簧


        }

        public struct LINESTRUCT                                 //定义linestruct
        {
            public CHANNEL_TYPE nType;
            public CHANNEL_STATE State;
            //	[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]				
            public string CallerID;
            //	[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string Dtmf;
            public int nTimeElapse;
            public string UserCity;
            public int intTimeCount;


        }
        public LINESTRUCT[] Lines;
        public LINESTRUCT[] DaiLines;   //定义lines为linestruct[];
        public long LoadDriveFlag;
        public short TotalLine;
        public short[] sWitCh = new short[128];
        public short[] SigCheck = new short[128];
        public bool[] bUser = new bool[128];
        public short[] Dtmf = new short[128];
        public static int intLY=0;//控件电话信息
        #region//窗体加载事件
        private void frmMain_Load(object sender, EventArgs e)
        {
            //实始化LIStVIEW控件
            lvQs.Clear();
            lvQs.LargeImageList = imageList1;
            lvQs.Items.Add("添加客户信息", 0);
            lvQs.Items.Add("删除客户信息", 1);
            lvQs.Items.Add("修改客户信息", 0);
            lvQs.Items.Add("查询客户信息", 1);
            //实始化语音卡
            LoadDriveFlag = D160A.LoadDRV();      //public static extern long LoadDRV();
            if (LoadDriveFlag == -1)       //以前为1,改成-1;
            {
                MessageBox.Show("Load drive failure");
                return;
            }

            TotalLine = D160A.CheckValidCh();        //  检测在当前机器内可用的通道总数。           //public static extern short CheckValidCh();
            if (D160A.EnableCard(TotalLine, 8 * 512) == 1)//public static extern long EnableCard(short wusedCh, short wFileBufLen);
            {
                MessageBox.Show("Enable card error");
                return;
            }

            Lines = new LINESTRUCT[TotalLine];     //public LINESTRUCT[] Lines;
            //  DaiLines = new LINESTRUCT[TotalLine]; 
            for (short i = 0; i < TotalLine; i++)
            {
                Lines[i].nType = (CHANNEL_TYPE)D160A.CheckChType(i);
                Lines[i].State = (CHANNEL_STATE)(0);//(i);//0

                Lines[i].CallerID = "";//
                Lines[i].Dtmf = "";
                SigCheck[i] = (short)1;
                sWitCh[i] = (short)-1;
                bUser[i] = true;
                Dtmf[i] = (short)-1;
                ChnlState_LV.Items.Add(i.ToString());
                if (Lines[i].nType == CHANNEL_TYPE.User)
                { ChnlState_LV.Items[i].SubItems.Add("内线"); }
                if (Lines[i].nType == CHANNEL_TYPE.Trunk)
                { ChnlState_LV.Items[i].SubItems.Add("外线"); };
                if (Lines[i].nType == CHANNEL_TYPE.Empty)
                { ChnlState_LV.Items[i].SubItems.Add("空悬"); };
                if (Lines[i].State == CHANNEL_STATE.CH_FREE)
                { ChnlState_LV.Items[i].SubItems.Add("空闲"); }
                ChnlState_LV.Items[i].SubItems.Add("");
                ChnlState_LV.Items[i].SubItems.Add("");
                ChnlState_LV.Items[i].SubItems.Add("");
            }

            D160A.SetBusyPara((short)350);
            D160A.Sig_Init(0);
            timer1.Enabled = true;			
       
        }//end if 
        #endregion
        #region //获取控件数量
        public int DataGridViewCount(OleDbDataReader dr)
        {
            int intFalg = 0;
            try
            {
                OleDbDataReader oledDr = dr;
                while (oledDr.Read())
                {   

                    intFalg++;
                }
                return intFalg;
            }
            catch (Exception ee)
            {
                return intFalg;
            }

        }
                #endregion
        #region//填冲控件
        public int DataGridFalg(OleDbDataReader dr, int intCount)
        {
            int intFalg = 0;
            try
            {
                OleDbDataReader oledDr = dr;
                intFalg = 0;
                dataGridView1.RowCount = intCount;
                while (oledDr.Read())
                {
                    this.dataGridView1[0, intFalg].Value = oledDr[0].ToString();
                    this.dataGridView1[1, intFalg].Value = oledDr[1].ToString();
                    this.dataGridView1[2, intFalg].Value = oledDr[2].ToString();
                    this.dataGridView1[3, intFalg].Value = oledDr[7].ToString();
                    this.dataGridView1[4, intFalg].Value = oledDr[10].ToString();
                    intFalg++;
                }
                return intFalg;
            }
            catch (Exception ee)
            {
                return intFalg;
            }
        }
        #endregion
        #region//此方法处理通话记录
        public void tbTelRecordAdd(string stringId,int intChannel)
        {
            tbTelRecordClass tbClass = new tbTelRecordClass();
            tbTelRecordMenthod tbMenhod = new tbTelRecordMenthod();
            tbCustomerMethod tbCustom = new tbCustomerMethod();
            tbCustomerClass tbCuClass = new tbCustomerClass();
            tbClass.strfldTel = stringId;
            tbClass.daSearchDate = DateTime.Now;
            tbClass.shfldChannel = intChannel;
            if (intLY == 1)
            {
                tbCuClass.kuTel = stringId;
                tbCuClass.kuOffice = stringId;
                int intFalgTel = DataGridFalg(tbCustom.tbCustomerSecarf(tbCuClass, "khTel"), DataGridViewCount(tbCustom.tbCustomerSecarf(tbCuClass, "khTel")));
                tbClass.strsType = "打入";
            }
            if (intLY == 0)
            {
                tbClass.strsType = "打出";
            }
            tbMenhod.tbTelRecordAdd(tbClass);
            intLY = 0;

        }
        #endregion
        #region 启动timer1控件调用DaiWorkIng方法维持语音卡工作
        private void timer1_Tick(object sender, EventArgs e)
        {
            DaiWorkIng();
        }
        #endregion
        #region 此方法处理语音卡工作的方法实现,自动台,和转人工台
        private void DaiWorkIng()
        {                                   //239行对应475行
            D160A.PUSH_PLAY();//入口参数:无函数返回:无;功能描述:维持文件录放音的持续进行,需在处理函数的大循环中调用。
            D160A.FeedSigFunc();//维持断续振铃及信号音的函数;请在程序大循环中调用。
            byte[] FileName;//原代码
            short TmpDTMF,Code;
            for (short i = 0; i < TotalLine; i++)      //TotalLine = D160A.CheckValidCh();   
            {
                ListViewState(i);
                switch (Lines[i].State)
                {

                    case CHANNEL_STATE.CH_FREE:  //DJ160Int.CH_FREE://0"空闲"   //252对应267行  ch_free;
                        if (D160A.RingDetect(i) == true)
                        {
                            if (Lines[i].nType == CHANNEL_TYPE.User)//内线
                            {
                                // 某一通道开始挂机检测;当某通道摘机后,可以调用本函数。该函数只对内线通道有效。
                                D160A.StartHangUpDetect(i);
                                Lines[i].State = CHANNEL_STATE.CH_OFFHOOK;
                                Lines[i].nTimeElapse = 0;
                                Lines[i].intTimeCount = 0;
                                sWitCh[i] = i;
                            }
                            if (Lines[i].nType == CHANNEL_TYPE.Trunk)//外线
                            {//给通道状态赋值
                                Lines[i].State = CHANNEL_STATE.CH_RECEIVEID;
                                D160A.ResetCallerIDBuffer(i);   //清空主叫Buf,为外线收主叫作准备
                                Lines[i].nTimeElapse = 0;
                                sWitCh[i] = i;
                            }
                        }
                        break;                          //267对应252行
                    case CHANNEL_STATE.CH_RECEIVEID: //"接收主叫号码//268对应283行ch_receiveID;
                        byte[] TmpCID = new byte[32];
                        int iResult = 0;
                        iResult = D160A.GetCallerIDStr(i, TmpCID); //接收主叫号码
                        if (iResult == 3 || iResult == 4)//收完主叫,外线摘机使能
                        {
                            for (int j = 0; j < TmpCID.Length; j++)//存储电话号
                            {
                              
                                Lines[i].CallerID = Lines[i].CallerID + ((char)TmpCID[j]).ToString();
                                intLY = 1;
                            
                            }
                            //外线提机
                            string strin = Encoding.UTF8.GetString(TmpCID).Substring(8,11);
                            D160A.OffHook(i);
                            D160A.StartSigCheck(i);
                            Lines[i].State = CHANNEL_STATE.CH_OFFHOOK;
                            tbTelRecordAdd(strin, (int)i);
                        }
                        break;   //283对应268
                    case CHANNEL_STATE.CH_OFFHOOK:         //ch_offhook;
                        D160A.InitDtmfBuf(i);
                        StartPlayFileEx(i, "Bank.001");//放音
                        Lines[i].State = CHANNEL_STATE.CH_WELCOME;//欢迎
                        break;
                    case CHANNEL_STATE.CH_WELCOME:						//ch_welcome;
                        TmpDTMF = D160A.GetDtmfCode(i);//接受按键,返回值-1 缓冲区中没有DTMF按键
                        if (TmpDTMF != -1)
                        {
                            D160A.StopPlayFile(i);//停止放音
                            Lines[i].Dtmf = Lines[i].Dtmf + CvtDTMF(TmpDTMF);//TmpDTMF.ToString();//DTMF号码转换ASCII
                            Lines[i].State = CHANNEL_STATE.CH_SELECT;//请随意输入8位银行帐号	
                        }
                        else//后加代码
                        {
                            if (D160A.CheckPlayEnd(i))//检查指定通道放音是否结束0未结束1结束
                            {
                                D160A.StopPlayFile(i);//停止放音
                                StartPlayFileEx(i, "Bank.004");
                                Lines[i].State = CHANNEL_STATE.CH_SELECT;
                            }
                        }
                        break;
                    case CHANNEL_STATE.CH_SELECT:       //ch_select;

                        TmpDTMF = D160A.GetDtmfCode(i);
                        if (TmpDTMF != -1)
                        {
                            Lines[i].Dtmf = TmpDTMF.ToString();
                            switch (Lines[i].Dtmf)
                            {
                                case "1":
                                    D160A.StopPlayFile(i);
                                    D160A.RsetIndexPlayFile(i);

                                    FileName = GetFilePath("bank.005");
                                    D160A.AddIndexPlayFile(i, FileName);

                                    FileName = GetFilePath("d5");
                                    D160A.AddIndexPlayFile(i, FileName);

⌨️ 快捷键说明

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