📄 u_innerdealpack.pas
字号:
Unit U_InnerDealPack;
Interface
Uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,Menus,
ComCtrls,ToolWin,ExtCtrls,TeeProcs,TeEngine,Chart,DbChart,TeeFunci,Series,ImgList,
StdCtrls,ADODB,DBGrids,ScktComp,jpeg,IdUDPServer,IdBaseComponent,IdComponent,
IdUDPBase,IdUDPClient,idSocketHandle,ComObj,Winsock,U_RecordStruct,U_CS_DealPack;
//包月定制处理函数,返回值0是错误指令、1是定制指令、2是取消定制指令、3是正常业务指令
Function BY_Custom_Deal(CustomTableName,ServiceCode:String;Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo):Integer;Overload;
//包月定制处理函数,返回值0是错误指令、1是定制指令、2是取消定制指令、3是正常业务指令
Function BY_Custom_Deal(CustomTableName,ServiceCode:String;CmdID:Integer;Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo):Integer;Overload;
//网关上行处理
Procedure CMPP_DeliverDeal(Indeal:TSmgDeliverReq);
//网关下行处理
Procedure CMPP_SubmitDeal(Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo);
//读取所有点拨信息记录
Function ReadAllDialCodeInfo(DialCodeInfoTableName,DBConnectionString:String;ProviderID:String):Boolean;
//读取所有功能消息记录
Function ReadAllFunctionMsg(FunctionMsgTableName,DBConnectionString:String;ProviderID:String):Boolean;
//读取所有功能消息记录
Function ReadAllProviderFunctionMsg(FunctionMsgTableName,DBConnectionString:String;ProviderID:Integer):Boolean;
//获取点拨信息记录
Function GetDialCodeInfoRec(DialCode:String;GateID:Integer):Rec_DialCodeInfo;
//读取功能消息记录
//Function SearchMsg(Title:String;GateID:Integer):String;Overload;
//读取功能消息记录
Function SearchMsg(Title:String;GateID:Integer):TStrings;Overload;
//读取功能消息记录
Function SearchMsg(Title:String;GateID:Integer;OldPattern,NewPattern:Array Of String):TStrings;Overload;
//读取功能消息记录
Function SearchMsg(Title:String;ProviderID,GateID:Integer):TStrings;Overload;
//读取功能消息记录
Function SearchMsg(Title:String;ProviderID,GateID:Integer;OldPattern,NewPattern:Array Of String):TStrings;Overload;
//初始化系统
Procedure InitSystem;
//刷新系统配置
Procedure RefreshSystemSet;
//添加MEMO信息
Function AddMemoMsg(Msg:String):Integer;Overload;
//添加MEMO信息
Function AddMemoMsg(Msg:String;Index:Integer):Integer;Overload;
//添加错误信息
Function AddErrMsg(Msg:String):Integer;Overload;
//添加错误信息
Function AddErrMsg(Msg:String;Index:Integer):Integer;Overload;
//保存MEMO信息
procedure SaveMemo(Memo:TMemo);
//保存错误的Memo信息
procedure SaveErrMemo(Memo:Tmemo);
//重连服务器
Function ReConnectServer(Var Sock:TSocket;StatusBar:TStatusBar):Boolean;
//重连数据库
Function ReConnectDataBase(StatusBar:TStatusBar):Boolean;
//修改用户的定制标志(CustomDealFlag为True是定制操作、为False是取消操作)
Procedure UpdateCustomRec(DBConnectionString,CustomTableName:String;CustomMsgRec:Rec_CustomMsg;CustomDealFlag:Boolean);
//添加用户的定制记录(CustomDealFlag为True是定制操作、为False是请求或取消操作)
Procedure InsertCustomRec(DBConnectionString,CustomTableName:String;CustomMsgRec:Rec_CustomMsg;CustomDealFlag:Boolean);
//将使用我司包月业务的用户设置为包月定制用户
Procedure CustomDeal(DBConnectionString,CustomTableName:String;CustomMsgRec:Rec_CustomMsg;CustomStatus:Integer);
//用户取消定制指令处理过程,即将用户转化为取消的用户
Procedure CancelCustomDeal(DBConnectionString,CustomTableName:String;CustomMsgRec:Rec_CustomMsg;CustomStatus:Integer);
//获取用户定制状态(返回值为-1是异常,为0是新用户,1是请求用户,2是定制用户,3是退定用户)
Function GetCustomStatus(DBConnectionString,CustomTableName:String;Var CustomMsgRec:Rec_CustomMsg):Integer;
//数据库操作出错处理操作
procedure DBError(E:EOleException);
//发送下行信息
procedure To_Out(Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo;Msg:String);Overload;
//发送下行信息
procedure To_Out(Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo;List:TStrings);Overload;
//发送下行信息
procedure To_Out(Indeal:TSmgDeliverReq;DialCodeInfoRec,ChargeDialCodeInfoRec:Rec_DialCodeInfo;List:TStrings);Overload;
//发送下行信息
procedure To_Out(Indeal:TSmgDeliverReq;DialCodeInfoRec,ChargeDialCodeInfoRec:Rec_DialCodeInfo;ChargeAmount:Integer;List:TStrings);Overload;
//根据用户点拨信息以获取相应的操作指令(返回0是错误指令、1是定制指令、2是取消定制指令、3是正常业务指令)
Function GetOperatorCmdFlag(MsgContent:String):Integer;
//获取定制消息的标题
Procedure SetCustomInfoTitle(Var CustomInfoTitle:Array Of String);
//获取收费的点拨号段
Function GetChargeDialCode:String;
//定制消息处理过程
//获取用户定制状态(返回值为-1是异常,为0是新用户,1是请求用户,2是定制用户,3是退定用户)
//0是错误指令、1是定制指令、2是取消定制指令、3是正常业务指令
Procedure CustomInfoDeal(Title:String;ProviderChargeType,CustomStatus,CmdID:Integer;Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo);
//队列初始化
Procedure MakeNull(Var Q:Rec_IndealQueue);
//判断队列是否为空
Function Empty(Q:Rec_IndealQueue):Boolean;
//获取队列头信息
Function Front(Q:Rec_IndealQueue):TSmgDeliverReq;
//数据入队
Procedure EnQueue(Indeal:TSmgDeliverReq;Var Q:Rec_IndealQueue);
//数据出队
Procedure DeQueue(Var Q:Rec_IndealQueue);Overload;
//数据出队
Function DeQueue(Var Q:Rec_IndealQueue;Var DealQueueDataFlag:Boolean):TSmgDeliverReq;Overload
//获取业务包月信息
Function GetServiceOpenBYFlag(ServiceBYInfoTableName,DBConnectionString,ProviderID,ServiceCode:String;GateID:Integer):Integer;
//获取业务连接信息
Function GetNoticeInfo(NoticeInfoTableName,DBConnectionString,ProviderID,ServiceCode:String;GateID:Integer):TStrings;
//获取业务追加连接信息
Function GetAppendNoticeInfo(NoticeInfoTableName,DBConnectionString,ProviderID,ServiceCode:String;GateID:Integer):String;
//获取点播号段的前缀
Function GetDialCodePre(DialCode:String):String;
//通过用户的手机号码获取运营商ID
Function GetProviderIDOfPhone(Phone:String):Integer;
//通过用户的手机号码获取运营商ID
Function ProviderIDIsSameType(CurrProviderID,DestProviderID:Integer):Boolean;
//判断手机号码是否正确
Function IsPhone(Phone:String):Boolean;
//初始化短信转发信息记录
Function InitSmsMtSendInfoRec:Rec_Sms_Mt_Send_Info;
//群发信息处理
Function DealSmsMtSendInfo(DBConnectionString,Phone,SrcAddress,MsgContent:String;ProviderID:Integer;DialCodeInfoRec:Rec_DialCodeInfo):String;
//群发列表信息处理
Function DealSmsMtSendListInfo(DBConnectionString,Phone,SrcAddress:String;ProviderID:Integer;List:TStrings;DialCodeInfoRec:Rec_DialCodeInfo):String;
//获取包月定制业务表名
Function GetCustomTableName(DBConnectionString,ServiceCode,ServiceType:String;ProviderID,GateID:Integer):StrArray;
//取消各种业务包月定制处理,操作
Procedure CustomMenu_Deal_CancelBYCustomFlag(DBConnectionString,CustomTableName,Phone,ServiceCode:String;ProviderID,GateID:Integer);
//获取包月定制业务代码
Function GetCustomServiceCode(DBConnectionString,CustomTableName,Phone,ServiceCode:String;ProviderID,GateID:Integer):StrArray;
//获取定制业务信息
Function GetCustomServiceInfo(DBConnectionString,ServiceCode:String;ProviderID,GateID,ServiceType:Integer):Rec_CustomMenu;Overload;
//获取定制业务信息
Function GetCustomServiceInfo(DBConnectionString:String;ProviderID,GateID,ServiceIndex:Integer):Rec_CustomMenu;Overload;
//获取公共业务信息
Function GetPublicServiceInfo(DBConnectionString,ServiceCode:String;ProviderID,GateID,ServiceType:Integer):Rec_PublicServiceInfo;
//获取定制业务最大的索引号
Function GetCustomMaxServiceIndex(DBConnectionString,ServiceCode:String;ProviderID,GateID:Integer):Integer;
implementation
Uses U_MainForm,U_StringPublicPack,U_DBPublicPack,U_OtherPublicPack;
//包月定制处理函数,返回值0是错误指令、1是定制指令、2是取消定制指令、3是正常业务指令
Function BY_Custom_Deal(CustomTableName,ServiceCode:String;Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo):Integer;
Var
InfoTitle:String;
CustomStatus,GateID,CmdID:Integer;
CustomMsgRec:Rec_CustomMsg;
Begin
With Indeal,DialCodeInfoRec Do
Begin
CustomMsgRec.ProviderID:=ProviderID;//运营商ID号
CustomMsgRec.GateID:=GateID;//网关号码
CustomMsgRec.Phone:=sSrcAddr;//手机号码
CustomMsgRec.ServiceCode:=ServiceCode;//业务代码
CustomMsgRec.InnerCode:=InnerCode;//内部编码
InfoTitle:=ServiceCode;//信息标题
//获取用户定制状态(返回值为-1是异常,为0是新用户,1是请求用户,2是定制用户,3是退定用户)
CustomStatus:=GetCustomStatus(DBConnectionString,CustomTableName,CustomMsgRec);
//0是错误指令、1是定制指令、2是取消定制指令、3是正常业务指令
CmdID:=GetOperatorCmdFlag(sMsgContent);
//定制消息处理过程
CustomInfoDeal(InfoTitle,ProviderChargeType,CustomStatus,CmdID,Indeal,DialCodeInfoRec);
Case CmdID Of
1,3:Begin//定制指令处理
//用户取消定制指令处理过程,即将用户转化为取消的用户
CustomDeal(DBConnectionString,CustomTableName,CustomMsgRec,CustomStatus);
End;
2:Begin//取消定制指令处理
//用户取消定制指令处理过程,即将用户转化为取消的用户
CancelCustomDeal(DBConnectionString,CustomTableName,CustomMsgRec,CustomStatus);
End;
End;
End;
Result:=CmdID;
End;
//包月定制处理函数,返回值0是错误指令、1是定制指令、2是取消定制指令、3是正常业务指令
Function BY_Custom_Deal(CustomTableName,ServiceCode:String;CmdID:Integer;Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo):Integer;
Var
InfoTitle:String;
CustomStatus,GateID:Integer;
CustomMsgRec:Rec_CustomMsg;
Begin
With Indeal,DialCodeInfoRec Do
Begin
CustomMsgRec.ProviderID:=ProviderID;//运营商ID号
CustomMsgRec.GateID:=GateID;//网关号码
CustomMsgRec.Phone:=sSrcAddr;//手机号码
CustomMsgRec.ServiceCode:=ServiceCode;//业务代码
CustomMsgRec.InnerCode:=InnerCode;//内部编码
InfoTitle:=ServiceCode;//信息标题
//获取用户定制状态(返回值为-1是异常,为0是新用户,1是请求用户,2是定制用户,3是退定用户)
CustomStatus:=GetCustomStatus(DBConnectionString,CustomTableName,CustomMsgRec);
//定制消息处理过程
CustomInfoDeal(InfoTitle,ProviderChargeType,CustomStatus,CmdID,Indeal,DialCodeInfoRec);
Case CmdID Of
1,3:Begin//定制指令处理
//用户取消定制指令处理过程,即将用户转化为取消的用户
CustomDeal(DBConnectionString,CustomTableName,CustomMsgRec,CustomStatus);
End;
2:Begin//取消定制指令处理
//用户取消定制指令处理过程,即将用户转化为取消的用户
CancelCustomDeal(DBConnectionString,CustomTableName,CustomMsgRec,CustomStatus);
End;
End;
End;
Result:=CmdID;
End;
//网关上行处理
Procedure CMPP_DeliverDeal(Indeal:TSmgDeliverReq);
Var
MsgID:String;i:Integer;
Begin
Inc(DelAmount);
For i:=0 To 15 Do
MsgID:=MsgID+Indeal.MsgID[i];
AddMemoMsg('MsgID:'+MsgID);
AddMemoMsg(Indeal.sDstAddr+''+Indeal.sMsgContent+'('+Indeal.sSrcAddr+')');
Form_Main.StatusBar.Panels[3].Text:=IntToStr(DelAmount);
End;
//网关下行处理
Procedure CMPP_SubmitDeal(Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo);
Begin
Inc(SubAmount);
Form_Main.StatusBar.Panels[5].Text:=IntToStr(SubAmount);
End;
//读取所有点拨信息记录
Function ReadAllDialCodeInfo(DialCodeInfoTableName,DBConnectionString:String;ProviderID:String):Boolean;
Var
GateIDIndex,NumIndex:integer;
ADOQuery:TADOQuery;
SqlStr:String;
Begin
Try
Result:=False;
ADOQuery:=TADOQuery.Create(nil);
With ADOQuery Do
Begin
ConnectionString:=DBConnectionString;
For GateIDIndex:=1 To MaxGateID Do
Begin
SqlStr:='Select Length(S_Code),S_Code,Inner_Code,Fee_Type,Fee_Code,Service_ID From '+DialCodeInfoTableName+' Where Provider_ID=:ProviderID And Gate_ID=:GateID Order By Length(S_Code) Desc';
Close;Sql.Clear;Sql.Add(SqlStr);
Parameters.ParamByName('ProviderID').Value:=ProviderID;
Parameters.ParamByName('GateID').Value:=GateIDIndex;
Open;
DialCodeInfoNum[GateIDIndex]:=RecordCount;
SetLength(AllDialCodeInfo[GateIDIndex],DialCodeInfoNum[GateIDIndex]);
For NumIndex:=0 to DialCodeInfoNum[GateIDIndex]-1 Do
Begin
AllDialCodeInfo[GateIDIndex][NumIndex].DialCode:=Trim(FieldByName('S_Code').AsString);
AllDialCodeInfo[GateIDIndex][NumIndex].InnerCode:=Trim(FieldByName('Inner_Code').AsString);
AllDialCodeInfo[GateIDIndex][NumIndex].FeeType:=FieldByName('Fee_Type').AsString;
AllDialCodeInfo[GateIDIndex][NumIndex].FeeCode:=FieldByName('Fee_Code').AsString;
AllDialCodeInfo[GateIDIndex][NumIndex].OuterCode:=Trim(FieldByName('Service_ID').AsString);
Next;
Application.ProcessMessages;
End;
Application.ProcessMessages;
End;
AddErrMsg('所有点拨信息记录读取成功!('+DialCodeInfoTableName+')');
Result:=True;
End;
Except
On E:EOleException Do
Begin
E.ErrorCode:=0;
DBError(E);
End;
End;
ADOQuery.Free;
End;
//读取所有功能消息记录
Function ReadAllFunctionMsg(FunctionMsgTableName,DBConnectionString:String;ProviderID:String):Boolean;
Var
ADOQuery:TADOQuery;
SqlStr:String;
i:integer;
Begin
Result:=False;
ADOQuery:=TADOQuery.Create(nil);
Try
With ADOQuery Do
Begin
ConnectionString:=DBConnectionString;
SqlStr:='Select * From '+FunctionMsgTableName+' Where Provider_ID=:ProviderID Order By Gate_ID Desc,Title,Order_ID';
Close;Sql.Clear;Sql.Add(SqlStr);
Parameters.ParamByName('ProviderID').Value:=ProviderID;
Open;
SetLength(AllFunctionMsg,RecordCount);
If Not Eof Then
Begin
For i:=0 To RecordCount-1 Do
Begin
AllFunctionMsg[i].Title:=UpperCase(Trim(FieldByName('Title').AsString));
AllFunctionMsg[i].GateID:=FieldByName('Gate_ID').AsInteger;
AllFunctionMsg[i].MsgContent:=Trim(FieldByName('Msg_Content').AsString);
AllFunctionMsg[i].OrderID:=FieldByName('Order_ID').AsInteger;
Next;
End;
End;
AddErrMsg('所有功能消息记录读取成功!('+FunctionMsgTableName+')');
Result:=True;
End;
Except
On E:EOleException Do
Begin
E.ErrorCode:=0;
DBError(E);
End;
End;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -