📄 u_innerdealpack.pas
字号:
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 + -