📄 unitsmsrecv.pas
字号:
{*****短信接收线程类*****}
unit UnitSmsRecv;
interface
uses
Classes, Windows, ADODB, SysUtils, StdCtrls, Forms, Variants, Activex;
type
smsui = class(TThread)
private
{ Private declarations }
procedure LogUserSubmit(TmpQuery: TADOQuery; SimNo, Content, DestAddr: string); //记录用户提交信息日志
procedure InsertUserSubmit(TmpQuery: TADOQuery; SimNo, Content, DestAddr: string); //插入用户提交信息表
procedure InsertMonthFee(content: string; TmpQuery: TADOQuery); //记录移动梦网Reply信息
protected
procedure Execute; override;
end;
implementation
uses UnitMain, UnitCode, CMPP;
//记录用户提交信息
procedure smsui.LogUserSubmit(TmpQuery: TADOQuery; SimNo, Content, DestAddr: string);
begin
TmpQuery.Close;
TmpQuery.SQL.Clear;
TmpQuery.SQL.Add('insert into Log_Usersubmit(simno,Content,DestAddr,[time]) values(:p1,:p2,:p3,:p4)');
TmpQuery.Parameters.ParamValues['p1'] := SimNo;
TmpQuery.Parameters.ParamValues['p2'] := Content;
TmpQuery.Parameters.ParamValues['p3'] := DestAddr;
TmpQuery.Parameters.ParamValues['p4'] := datetimetostr(now());
try
TmpQuery.ExecSQL;
except
PostMessage(frmmain.Handle, ShowRunInfo, 0, Integer(PChar('记录接收日志失败!数据库失败!')));
end;
end;
//插入用户提交信息到用户表
procedure smsui.InsertUserSubmit(TmpQuery: TADOQuery; SimNo, Content, DestAddr: string);
begin
TmpQuery.Close;
TmpQuery.SQL.Clear;
TmpQuery.SQL.Add('insert into Queue_Usersubmit(simno,Content,DestAddr,submittime) values(:p1,:p2,:p3,:p4)');
TmpQuery.Parameters.ParamValues['p1'] := SimNo;
TmpQuery.Parameters.ParamValues['p2'] := Content;
TmpQuery.Parameters.ParamValues['p3'] := DestAddr;
TmpQuery.Parameters.ParamValues['p4'] := datetimetostr(now());
try
TmpQuery.ExecSQL;
except
PostMessage(frmmain.Handle, ShowRunInfo, 0, Integer(PChar('数据库失败!接收短消息写入队列表失败!')));
end;
end;
//线程执行类重载
procedure smsui.Execute;
var
TmpQuery: TADOQuery;
OrgAddr_R: string;
UserData_R: string;
DestAddr_R: string;
nIsReply: Boolean;
begin
FreeOnTerminate := True;
Activex.CoInitialize(nil);
if InitCMPPAPI('cmppc.ini') = 0 then
PostMessage(frmmain.Handle, ShowRunInfo, 0, Integer(PChar('Sms Center Init OK!')))
else
begin
PostMessage(frmmain.Handle, ShowRunInfo, 0, Integer(PChar('Sms Center Init Error!')));
Activex.CoUninitialize;
Exit;
end;
TmpQuery := TADOQuery.Create(nil);
TmpQuery.ConnectionString := 'FILE NAME=newsms.udl';
try
while not Terminated do
begin
if Terminated then break;
Sleep(200);
nIsReply := false;
if GetSms(NTIMEOUT, OrgAddr_R, UserData_R, DestAddr_R, nIsReply) = 0 then
begin
PostMessage(frmmain.Handle, GetCountInfo, 0, 0);
PostMessage(frmmain.Handle, ShowRunInfo, 0, Integer(PChar('Get SMS Ok From ' + OrgAddr_R)));
if nIsReply then
begin
InsertMonthFee(userdata_R, TmpQuery);
end
else
begin
if findsensitiveWord(UserData_R) then
begin
PostMessage(frmmain.Handle, ShowRunInfo, 0, Integer(PChar('Find Sensitive Word!')));
Exit;
end;
LogUserSubmit(TmpQuery, OrgAddr_R, UserData_R, DestAddr_R);
InsertUserSubmit(TmpQuery, OrgAddr_R, UserData_R, DestAddr_R);
end;
end;
end;
finally
UiActive := false;
TmpQuery.Free;
Activex.CoUninitialize;
end;
end;
//状态报告分析入库
procedure smsui.InsertMonthFee(content: string; TmpQuery: TADOQuery);
var
sTime: pchar;
sSmcNo: pchar;
nMSGID: integer;
sStat: pchar;
sSubmitTime: pchar;
sDoneTime: pchar;
sDestTermID: pchar;
nSMCSequence: integer;
begin
GetMem(sTime, 256);
GetMem(sSmcNo, 256);
GetMem(sStat, 256);
GetMem(sSubmitTime, 256);
GetMem(sDoneTime, 256);
GetMem(sDestTermID, 256);
try
if CMPPAnalyzeStatusReport(pchar(Content), sTime, sSmcNo, nMSGID, sStat, sSubmitTime, sDoneTime, sDestTermID, nSMCSequence) = 0 then
begin
TmpQuery.Close;
TmpQuery.SQL.Clear;
TmpQuery.SQL.Text := 'insert into MonthFee(sTime,sSMCNo,nMSGID,sStat,sSubmitTime,sDoneTime,sDestTermID,nSMCSequence) values(' +
'''' + sTime + '''' + ',' + '''' + sSMCNo + '''' + ',' + inttostr(nMSGID) + ',' + '''' + sStat + '''' + ',' + '''' + sSubmitTime + '''' + ','
+ '''' + sDoneTime + '''' + ',' + '''' + sDestTermID + '''' + ',' + inttostr(nSMCSequence) + ')';
try
TmpQuery.ExecSQL;
except
PostMessage(frmmain.Handle, ShowRunInfo, 0, Integer(PChar('状态报告入库失败')));
end;
end
else
begin
PostMessage(frmmain.Handle, ShowRunInfo, 0, Integer(PChar('分析报告失败')));
end;
finally
freeMem(sTime);
freeMem(sSmcNo);
freeMem(sStat);
freeMem(sSubmitTime);
freeMem(sDoneTime);
freeMem(sDestTermID);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -