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

📄 srvmainunit.cpp

📁 使用与中国移动CMPP2.0的短信网关
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  {
    SD1->Title="保存发送数据记录";
    SD1->FileName="OutDat"
          +FormatDateTime("YYYY-mm-dd-hh-mm",Now())
          +".log";
    if(SD1->Execute())
    {
      MOutDat->Lines->SaveToFile(SD1->FileName);
    }
  }
  if(0!=MInDat->Lines->Count)
  {
    SD1->Title="保存接收数据记录";
    SD1->FileName="InDat"
          +FormatDateTime("YYYY-mm-dd-hh-mm",Now())
          +".log";
    if(SD1->Execute())
    {
      MInDat->Lines->SaveToFile(SD1->FileName);
    }
  }
}


//---------------------------------------------------------------------------
//执行发送任务
int __fastcall TsmsSrvForm::ProcSendMsg()
{
   int 	nRetCode;
   __int64 msgid;

   char	sservice_id[10],sfee_type[2],sfee_code[6],svalid_time[14],sat_time[14],scharge_mobile[21],ssrc_mobile[21],sdest_mobiles[21],smsgcontent[160];

   String str,smsid,service_id,fee_type,fee_code,valid_time,at_time,charge_mobile,src_mobile,dest_mobiles,msgcontent;
   int retry,msg_level,fee_user_type,need_response,msgcontentLen;

   String TmpStr;

   str="select top 5 ID,msg_level,service_id,fee_type,fee_code,valid_time,at_time,fee_user_type,charge_mobile,src_mobile,dest_mobiles,msgcontent,need_response,retry FROM sendwait WHERE (sendtime < CONVERT(DATETIME, '" + DateTimeToStr(Now()) + "', 102) or (sendtime is null)) order by msg_level desc";
   QueryOpen(QryUser,&str);
   while (!QryUser->Eof)
   {
         smsid=QryUser->FieldByName("ID")->AsString;

         retry=QryUser->FieldByName("retry")->AsInteger;
         msg_level=QryUser->FieldByName("msg_level")->AsInteger;
         fee_user_type=QryUser->FieldByName("fee_user_type")->AsInteger;
         need_response=QryUser->FieldByName("need_response")->AsInteger;

         valid_time=QryUser->FieldByName("valid_time")->AsString;
         at_time=QryUser->FieldByName("at_time")->AsString;
         charge_mobile=QryUser->FieldByName("charge_mobile")->AsString;
         src_mobile=QryUser->FieldByName("src_mobile")->AsString;
         dest_mobiles=QryUser->FieldByName("dest_mobiles")->AsString;
         msgcontent=QryUser->FieldByName("msgcontent")->AsString;
         msgcontentLen=msgcontent.Length();

         strcpy(svalid_time,valid_time.c_str());
         strcpy(sat_time,at_time.c_str());
         strcpy(scharge_mobile,charge_mobile.c_str());
         strcpy(ssrc_mobile,src_mobile.c_str());
         strcpy(sdest_mobiles,dest_mobiles.c_str());
         strcpy(smsgcontent,msgcontent.c_str());

         fee_code=QryUser->FieldByName("fee_code")->AsString;
         strcpy(sfee_code,fee_code.c_str());

         fee_type=QryUser->FieldByName("fee_type")->AsString;
         strcpy(sfee_type,fee_type.c_str());

         service_id=QryUser->FieldByName("service_id")->AsString;
         strcpy(sservice_id,service_id.c_str());


        //发送短消息
        nRetCode = CMPP_Brief_Submit(cMTgw_ip,
                             iMTport,
                             cUserName,
                             cPassWord,
                             &msgid,
                             msg_level,
                             sservice_id,
                             15,
                             cSP_Id,
                             sfee_type,
                             sfee_code,
                             svalid_time,
                             sat_time,
                             0,
                             0,
                             fee_user_type,
                             scharge_mobile,
                             ssrc_mobile,
                             1,
                             sdest_mobiles,
                             smsgcontent,
                             msgcontentLen,
                             need_response);
        if(nRetCode==0)
        {
         OutAllInf(INF_TYPE_OUT,"给手机:"
                        +dest_mobiles
                        +"的消息: "
                        +msgcontent
                        +",发送成功!");


          //删除已经发送的短信
          str="delete from sendwait where id = "+smsid;
          QueryExe(PubUserExe,&str);

          //将已发送短信插入sended表中
          str="insert into sended(ID,msg_level,service_id,fee_type,fee_code,valid_time,at_time,fee_user_type,charge_mobile,src_mobile,dest_mobiles,msgcontent,need_response,retry,msgid) values("
                  +smsid+","
                  +IntToStr(msg_level)+",'"
                  +service_id+"','"
                  +fee_type+"','"
                  +fee_code+"','"
                  +valid_time+"','"
                  +at_time+"',"
                  +IntToStr(fee_user_type)+",'"
                  +charge_mobile+"','"
                  +src_mobile+"','"
                  +dest_mobiles+"','"
                  +msgcontent+"',"
                  +IntToStr(need_response)+","
                  +IntToStr(retry)+",'"
                  +IntToStr(msgid)+"')";
          QueryExe(PubUserExe,&str);
        }
        else
        {
           OutAllInf(INF_TYPE_OUT,"给手机:"
                        +dest_mobiles
                        +"的消息: "
                        +msgcontent
                        +",发送失败!");

          if (retry>3)
          {
             str="delete from sendwait where id = "+smsid;
             QueryExe(PubUserExe,&str);

             str="insert into sendederr(ID,msg_level,service_id,fee_type,fee_code,valid_time,at_time,fee_user_type,charge_mobile,src_mobile,dest_mobiles,msgcontent,need_response,retry,msgid) values("
                  +smsid+","
                  +IntToStr(msg_level)+",'"
                  +service_id+"','"
                  +fee_type+"','"
                  +fee_code+"','"
                  +valid_time+"','"
                  +at_time+"',"
                  +IntToStr(fee_user_type)+",'"
                  +charge_mobile+"','"
                  +src_mobile+"','"
                  +dest_mobiles+"','"
                  +msgcontent+"',"
                  +IntToStr(need_response)+","
                  +IntToStr(retry)+",'"
                  +IntToStr(msgid)+"')";
             QueryExe(PubUserExe,&str);
          }
          else
          {
             str="update sendwait set retry=retry+1 where id = "+smsid;
             QueryExe(PubUserExe,&str);
          }
          return PROC_MIS_ERR;
        }

        QryUser->Next();
        //消息处理
        Application->ProcessMessages();
      }
      return PROC_MIS_OK; //任务执行成功

}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::FormClose(TObject *Sender,
      TCloseAction &Action)
{
  //窗口关闭事件
  if (MSysErr->Lines->Count>0)
  {
    MSysErr->Lines->SaveToFile("SysErr"
            +FormatDateTime("YYYY-mm-dd-hh-mm",Now())
            +".log");
  }
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::BtClearLogClick(TObject *Sender)
{
  //清除系统运行情况
  MSysLog->Clear();
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::BtSaveLogClick(TObject *Sender)
{
  if (0==MSysLog->Lines->Count) exit; 
  SD1->Title="保存系统运行记录";
  SD1->FileName="SysInf"
        +FormatDateTime("YYYY-mm-dd-hh-mm",Now())
        +".log";
  if(SD1->Execute())
  {
    MSysLog->Lines->SaveToFile(SD1->FileName);
  }

}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::CBSysInfClick(TObject *Sender)
{
  //是否观察发送的数据
  if (true==CBSysInf->Checked)
    OutSysInfFlag=OUT_INF;
  else
    OutSysInfFlag=NO_OUT_INF;
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::TimerProcTimer(TObject *Sender)
{

  TimerProc->Enabled=false;
  PorcRT=ProcSendMsg();
  TimerProc->Enabled=true;

}


//---------------------------------------------------------------------------
//InfType : 0:系统提示信息 1 :输出信息  2:输入信息
void __fastcall TsmsSrvForm::OutAllInf(int InfType,String str)
{
  String instr=FormatDateTime("YYYY-mm-dd hh:mm:ss",Now())+str;
  try
  {
    switch (InfType)
    {
    case INF_TYPE_SYS:
      if (OUT_INF==OutSysInfFlag)
        MSysLog->Lines->Append(instr);
      break;
    case INF_TYPE_OUT:
      if (OUT_INF==OutInfFlag)
        MOutDat->Lines->Append(instr);
      break;
    case INF_TYPE_IN:
      if (OUT_INF==InInfFlag)
        MInDat->Lines->Append(instr);
      break;
    case INF_TYPE_SYS_ERR:
      MSysErr->Lines->Append(instr);
      //达到一定行数,自动保存错误日志
      if (MSysErr->Lines->Count>MAX_SYS_ERR_NUM)
      {
        MSysErr->Lines->SaveToFile("SysErr"
                +FormatDateTime("YYYY-mm-dd-hh-mm",Now())
                +".log");
      }
      break;
    }
  }
  catch (...)
  {
    ShowMessage("不能正常输出提示信息!"+str);
  }

}


//---------------------------------------------------------------------------
//后台sql语句执行过程
int __fastcall TsmsSrvForm::QueryOpen(TQuery *Qry,String *s)
{
  Qry->Close();
  Qry->SQL->Clear();
  Qry->SQL->Add(*s);
  try
  {
    Qry->Open();
    return RT_OK;
  }
  catch(const Exception &E)
  {
    //打开Query出错
    //OutAllInf(INF_TYPE_SYS_ERR,"执行查询出错!'"+*s+"'"+AnsiString(E.ClassName())+ E.Message);
    OutAllInf(INF_TYPE_SYS_ERR,"执行查询出错!");
    return RT_ERR;
  }

}

//---------------------------------------------------------------------------
//执行 Sql语句(删除、插入)
int __fastcall TsmsSrvForm::QueryExe(TQuery *Qry,String *s)
{
  Qry->Close();
  Qry->SQL->Clear();
  Qry->SQL->Add(*s);
  try
  {
    Qry->ExecSQL();
    return RT_OK;
  }
  catch(const Exception &E)
  {
    //打开Query出错
    //OutAllInf(INF_TYPE_SYS_ERR,"执行SQL出错!"+*s+"'"+AnsiString(E.ClassName())+ E.Message);
    OutAllInf(INF_TYPE_SYS_ERR,"执行SQL出错!");
    return RT_ERR;
  }
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::BClearSysErrClick(TObject *Sender)
{
  //清除错误日志
  MSysErr->Clear();
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::BSaveSysErrClick(TObject *Sender)
{
  //保存系统运行情况
  //保存至文件
  if (0==MSysErr->Lines->Count) exit;
  SD1->Title="保存系统运行错误记录";
  SD1->FileName="SysErr"
        +FormatDateTime("YYYY-mm-dd-hh-mm",Now())
        +".log";
  if(SD1->Execute())
  {
    MSysErr->Lines->SaveToFile(SD1->FileName);
  }

}
//---------------------------------------------------------------------------

void __fastcall TsmsSrvForm::tlbBackupClick(TObject *Sender)
{
  //退出系统
  if (MSysErr->Lines->Count>0)
  {
    MSysErr->Lines->SaveToFile("SysErr"
            +FormatDateTime("YYYY-mm-dd-hh-mm",Now())
            +".log");
  }
  CMPP_Disconnect(result);
  Close();
}

//---------------------------------------------------------------------------
String __fastcall TsmsSrvForm::Replace(String InStr)
{
  int i;
  String OutStr;
  OutStr=InStr;
  i=InStr.Pos("'");
  while(i>0)
  {
   OutStr=InStr.Delete(i,1);
   OutStr=InStr.Insert("\"",i);
   i=InStr.Pos("'");
  };
  return OutStr;
}

⌨️ 快捷键说明

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