📄 u_innerdealpack.pas
字号:
ConnectionString:=DBConnectionString;
If CustomDealFlag Then//定制处理
Begin
If ProviderChargeType=1 Then
Begin
StrSql:='Insert Into '+CustomTableName+'(Provider_ID,Gate_ID,User_Msisdn,Item_ID,Inner_Code,Custom_Date,Custom_Status,Cancel_Status,FirstCustom_Date,LastUseDate_Date,User_Type,Custom_Src,Charge_Date)';
StrSql:=StrSql+' Values(:ProviderID,:GateID,:Phone,:Service_Code,:Inner_Code,SysDate,1,1,SysDate,SysDate,0,1,SysDate)';
End
Else
Begin
StrSql:='Insert Into '+CustomTableName+'(Provider_ID,Gate_ID,User_Msisdn,Item_ID,Inner_Code,Custom_Date,Custom_Status,Cancel_Status,FirstCustom_Date,LastUseDate_Date,User_Type,Custom_Src)';
StrSql:=StrSql+' Values(:ProviderID,:GateID,:Phone,:Service_Code,:Inner_Code,SysDate,1,1,SysDate,SysDate,0,1)';
End;
End
Else//请求或取消处理
Begin
StrSql:='Insert Into '+CustomTableName+'(Provider_ID,Gate_ID,User_Msisdn,Item_ID,Inner_Code,Custom_Status,Cancel_Status,LastUseDate_Date,User_Type,Custom_Src)';
StrSql:=StrSql+' Values(:ProviderID,:GateID,:Phone,:Service_Code,:Inner_Code,0,1,SysDate,0,1)';
End;
Close;SQL.Clear;SQL.Add(StrSql);
Parameters.ParamByName('ProviderID').Value:=ProviderID;//运营尚ID号码
Parameters.ParamByName('GateID').Value:=GateID;//网关号码
Parameters.ParamByName('Phone').Value:=Phone;//手机号码
Parameters.ParamByName('Service_Code').Value:=ServiceCode;//业务代码
Parameters.ParamByName('Inner_Code').Value:=InnerCode;//内部编码
ExecSQL;
End;
Except
On E:EOleException Do
Begin
E.ErrorCode:=0;
DBError(E);
End;
End;
ADOQuery.Free;
End;
//用户取消定制指令处理过程,即将用户转化为取消的用户
Procedure CustomDeal(DBConnectionString,CustomTableName:String;CustomMsgRec:Rec_CustomMsg;CustomStatus:Integer);
Begin
If CustomStatus In [1,2,3] Then
//进行定制处理
UpdateCustomRec(DBConnectionString,CustomTableName,CustomMsgRec,True)
Else If CustomStatus In [0] Then
//初始设置成定制用户
InsertCustomRec(DBConnectionString,CustomTableName,CustomMsgRec,True)
Else Exit;
End;
//用户取消定制指令处理过程,即将用户转化为取消的用户
Procedure CancelCustomDeal(DBConnectionString,CustomTableName:String;CustomMsgRec:Rec_CustomMsg;CustomStatus:Integer);
Begin
If CustomStatus In [2] Then
//进行取消定制处理
UpdateCustomRec(DBConnectionString,CustomTableName,CustomMsgRec,False)
Else If CustomStatus In [0] Then
//初始设置成请求用户
InsertCustomRec(DBConnectionString,CustomTableName,CustomMsgRec,False)
Else Exit;
End;
//获取用户定制状态(返回值为-1是异常,为0是新用户,1是请求用户,2是定制用户,3是退定用户)
Function GetCustomStatus(DBConnectionString,CustomTableName:String;Var CustomMsgRec:Rec_CustomMsg):Integer;
Var
ADOQuery:TADOQuery;
StrSql:String;
Begin
Try
Result:=0;//新用户标志
ADOQuery:=TADOQuery.Create(nil);
With ADOQuery,CustomMsgRec Do
Begin
ConnectionString:=DBConnectionString;
StrSql:='Select * From '+CustomTableName+' Where User_Msisdn=:Phone And Item_ID=:ServiceCode';
Close;SQL.Clear;SQL.Add(StrSql);
Parameters.ParamByName('Phone').Value:=Phone;
Parameters.ParamByName('ServiceCode').Value:=ServiceCode;
Open;
If Not Eof Then
Begin
Result:=1;//请求用户标志
CustomFlag:=FieldByName('Custom_Status').AsInteger;//定制标志
CancelFlag:=FieldByName('Cancel_Status').AsInteger;//取消标志
FirstCustomTime:=FieldByName('FirstCustom_Date').AsString;//首次定制时间
UserType:=FieldByName('User_Type').AsInteger;//用户类型
If (CustomFlag>0) And (CancelFlag=1) Then Result:=2//定制用户标志
Else If (CustomFlag>0) And (CancelFlag=0) Then Result:=3;//退定用户标志
End;
End;
Except
On E:EOleException Do
Begin
//异常标志
Result:=-1;E.ErrorCode:=0;DBError(E);
End;
End;
ADOQuery.Free;
End;
//数据库操作出错处理操作
procedure DBError(E:EOleException);
Begin
Beep();Beep();
//DBADOConnection.Connected:=False;
//LOGDBADOConnection.Connected:=False;
//StopReconnectFlag:=False;
AddErrMsg('数据库脚本运行错误:'+E.Message);
End;
{
On E:EOleException Do
Begin
E.ErrorCode:=0;
DBError(E);
End;
}
//发送下行信息
procedure To_Out(Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo;Msg:String);
Var
Info:String;
rSmgSubmitReq:TSmgSubmitReq;
Begin
CMPP_SubmitDeal(Indeal,DialCodeInfoRec);
Info:=Msg;Info:=GetSomeWordFromStr(Info,70);//截取字符串前70个字
ZeroMemory(@rSmgSubmitReq,SizeOf(TSmgSubmitReq));
rSmgSubmitReq.byActionType:=0;//动作类型
CopyMemory(@rSmgSubmitReq.MsgID,@Indeal.MsgID,SizeOf(Indeal.MsgID));//消息ID
CopyMemory(@rSmgSubmitReq.LinkID,@Indeal.LinkID,SizeOf(Indeal.LinkID));//连结ID
rSmgSubmitReq.iMsgCounts:=1;//消息数
rSmgSubmitReq.iMsgNumber:=1;//消息号
rSmgSubmitReq.byMsgFmt:=15;//消息格式
CopyMemory(@rSmgSubmitReq.FeeType,@DialCodeInfoRec.FeeType[1],SizeOf(DialCodeInfoRec.FeeType)-1);//资费类型
CopyMemory(@rSmgSubmitReq.FeeCode,@DialCodeInfoRec.FeeCode[1],SizeOf(DialCodeInfoRec.FeeCode)-1);//资费代码
rSmgSubmitReq.byFeeUserType:=0;//计费类型
CopyMemory(@rSmgSubmitReq.sServiceID,@DialCodeInfoRec.OuterCode[1],SizeOf(DialCodeInfoRec.OuterCode)-1);//外部编码
CopyMemory(@rSmgSubmitReq.sSrcAddr,@Indeal.sDstAddr,SizeOf(Indeal.sDstAddr));//目标地址(如101097797等)
CopyMemory(@rSmgSubmitReq.sDstAddr,@Indeal.sSrcAddr,SizeOf(Indeal.sSrcAddr));//手机号码
rSmgSubmitReq.iMsgLen:=Length(Info);//消息长度
StrpCopy(rSmgSubmitReq.sMsgContent,Info);//消息内容
AddMemoMsg(Info+'('+DialCodeInfoRec.OuterCode+')');
If Not (SendSubmitReq(MsgID,Form_Main.Sock,rSmgSubmitReq)=SOCKET_ERROR) Then
Begin
Inc(MsgID);
End Else Begin
AddErrMsg('发送失败');
End;
End;
//发送下行信息
procedure To_Out(Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo;List:TStrings);
Var
i:Integer;
Info:String;
rSmgSubmitReq:TSmgSubmitReq;
Begin
If List.Count=0 Then Exit;
For i:=0 To List.Count-1 Do
Begin
CMPP_SubmitDeal(Indeal,DialCodeInfoRec);
Info:=List.Strings[i];Info:=GetSomeWordFromStr(Info,70);//截取字符串前70个字
ZeroMemory(@rSmgSubmitReq,SizeOf(TSmgSubmitReq));
rSmgSubmitReq.byActionType:=0;//动作类型
CopyMemory(@rSmgSubmitReq.MsgID,@Indeal.MsgID,SizeOf(Indeal.MsgID));//消息ID
CopyMemory(@rSmgSubmitReq.LinkID,@Indeal.LinkID,SizeOf(Indeal.LinkID));//连结ID
rSmgSubmitReq.iMsgCounts:=1;//消息数
rSmgSubmitReq.iMsgNumber:=1;//消息号
rSmgSubmitReq.byMsgFmt:=15;//消息格式
CopyMemory(@rSmgSubmitReq.FeeType,@DialCodeInfoRec.FeeType[1],SizeOf(DialCodeInfoRec.FeeType)-1);//资费类型
CopyMemory(@rSmgSubmitReq.FeeCode,@DialCodeInfoRec.FeeCode[1],SizeOf(DialCodeInfoRec.FeeCode)-1);//资费代码
rSmgSubmitReq.byFeeUserType:=0;//计费类型
CopyMemory(@rSmgSubmitReq.sServiceID,@DialCodeInfoRec.OuterCode[1],SizeOf(DialCodeInfoRec.OuterCode)-1);//外部编码
CopyMemory(@rSmgSubmitReq.sSrcAddr,@Indeal.sDstAddr,SizeOf(Indeal.sDstAddr));//目标地址(如101097797等)
CopyMemory(@rSmgSubmitReq.sDstAddr,@Indeal.sSrcAddr,SizeOf(Indeal.sSrcAddr));//手机号码
rSmgSubmitReq.iMsgLen:=Length(Info);//消息长度
StrpCopy(rSmgSubmitReq.sMsgContent,Info);//消息内容
AddMemoMsg(Info+'('+DialCodeInfoRec.OuterCode+')');
If Not (SendSubmitReq(MsgID,Form_Main.Sock,rSmgSubmitReq)=SOCKET_ERROR) Then Inc(MsgID) Else AddErrMsg('发送失败');
End;
List.Free;
End;
//发送下行信息
procedure To_Out(Indeal:TSmgDeliverReq;DialCodeInfoRec,ChargeDialCodeInfoRec:Rec_DialCodeInfo;List:TStrings);
Var
i:Integer;
Info:String;
rSmgSubmitReq:TSmgSubmitReq;
SubmitDialCodeInfoRec:Rec_DialCodeInfo;
Begin
If List.Count=0 Then Exit;
For i:=0 To List.Count-1 Do
Begin
If i=0 Then SubmitDialCodeInfoRec:=ChargeDialCodeInfoRec Else SubmitDialCodeInfoRec:=DialCodeInfoRec;
CMPP_SubmitDeal(Indeal,SubmitDialCodeInfoRec);
Info:=List.Strings[i];Info:=GetSomeWordFromStr(Info,70);//截取字符串前70个字
ZeroMemory(@rSmgSubmitReq,SizeOf(TSmgSubmitReq));
rSmgSubmitReq.byActionType:=0;//动作类型
CopyMemory(@rSmgSubmitReq.MsgID,@Indeal.MsgID,SizeOf(Indeal.MsgID));//消息ID
CopyMemory(@rSmgSubmitReq.LinkID,@Indeal.LinkID,SizeOf(Indeal.LinkID));//连结ID
rSmgSubmitReq.iMsgCounts:=1;//消息数
rSmgSubmitReq.iMsgNumber:=1;//消息号
rSmgSubmitReq.byMsgFmt:=15;//消息格式
CopyMemory(@rSmgSubmitReq.FeeType,@SubmitDialCodeInfoRec.FeeType[1],SizeOf(SubmitDialCodeInfoRec.FeeType)-1);//资费类型
CopyMemory(@rSmgSubmitReq.FeeCode,@SubmitDialCodeInfoRec.FeeCode[1],SizeOf(SubmitDialCodeInfoRec.FeeCode)-1);//资费代码
rSmgSubmitReq.byFeeUserType:=0;//计费类型
CopyMemory(@rSmgSubmitReq.sServiceID,@SubmitDialCodeInfoRec.OuterCode[1],SizeOf(SubmitDialCodeInfoRec.OuterCode)-1);//外部编码
CopyMemory(@rSmgSubmitReq.sSrcAddr,@Indeal.sDstAddr,SizeOf(Indeal.sDstAddr));//目标地址(如101097797等)
CopyMemory(@rSmgSubmitReq.sDstAddr,@Indeal.sSrcAddr,SizeOf(Indeal.sSrcAddr));//手机号码
rSmgSubmitReq.iMsgLen:=Length(Info);//消息长度
StrpCopy(rSmgSubmitReq.sMsgContent,Info);//消息内容
AddMemoMsg(Info+'('+SubmitDialCodeInfoRec.OuterCode+')');
If Not (SendSubmitReq(MsgID,Form_Main.Sock,rSmgSubmitReq)=SOCKET_ERROR) Then Inc(MsgID) Else AddErrMsg('发送失败');
End;
List.Free;
End;
//发送下行信息
procedure To_Out(Indeal:TSmgDeliverReq;DialCodeInfoRec,ChargeDialCodeInfoRec:Rec_DialCodeInfo;ChargeAmount:Integer;List:TStrings);
Var
i:Integer;
Info:String;
rSmgSubmitReq:TSmgSubmitReq;
SubmitDialCodeInfoRec:Rec_DialCodeInfo;
Begin
If List.Count=0 Then Exit;
For i:=0 To List.Count-1 Do
Begin
If i<ChargeAmount Then SubmitDialCodeInfoRec:=ChargeDialCodeInfoRec Else SubmitDialCodeInfoRec:=DialCodeInfoRec;
CMPP_SubmitDeal(Indeal,SubmitDialCodeInfoRec);
Info:=List.Strings[i];Info:=GetSomeWordFromStr(Info,70);//截取字符串前70个字
ZeroMemory(@rSmgSubmitReq,SizeOf(TSmgSubmitReq));
rSmgSubmitReq.byActionType:=0;//动作类型
CopyMemory(@rSmgSubmitReq.MsgID,@Indeal.MsgID,SizeOf(Indeal.MsgID));//消息ID
CopyMemory(@rSmgSubmitReq.LinkID,@Indeal.LinkID,SizeOf(Indeal.LinkID));//连结ID
rSmgSubmitReq.iMsgCounts:=1;//消息数
rSmgSubmitReq.iMsgNumber:=1;//消息号
rSmgSubmitReq.byMsgFmt:=15;//消息格式
CopyMemory(@rSmgSubmitReq.FeeType,@SubmitDialCodeInfoRec.FeeType[1],SizeOf(SubmitDialCodeInfoRec.FeeType)-1);//资费类型
CopyMemory(@rSmgSubmitReq.FeeCode,@SubmitDialCodeInfoRec.FeeCode[1],SizeOf(SubmitDialCodeInfoRec.FeeCode)-1);//资费代码
rSmgSubmitReq.byFeeUserType:=0;//计费类型
CopyMemory(@rSmgSubmitReq.sServiceID,@SubmitDialCodeInfoRec.OuterCode[1],SizeOf(SubmitDialCodeInfoRec.OuterCode)-1);//外部编码
CopyMemory(@rSmgSubmitReq.sSrcAddr,@Indeal.sDstAddr,SizeOf(Indeal.sDstAddr));//目标地址(如101097797等)
CopyMemory(@rSmgSubmitReq.sDstAddr,@Indeal.sSrcAddr,SizeOf(Indeal.sSrcAddr));//手机号码
rSmgSubmitReq.iMsgLen:=Length(Info);//消息长度
StrpCopy(rSmgSubmitReq.sMsgContent,Info);//消息内容
AddMemoMsg(Info+'('+SubmitDialCodeInfoRec.OuterCode+')');
If Not (SendSubmitReq(MsgID,Form_Main.Sock,rSmgSubmitReq)=SOCKET_ERROR) Then Inc(MsgID) Else AddErrMsg('发送失败');
End;
List.Free;
End;
//根据用户点拨信息以获取相应的操作指令(返回0是错误指令、1是定制指令、2是取消定制指令、3是正常业务指令)
Function GetOperatorCmdFlag(MsgContent:String):Integer;
Var
ADOQuery:TADOQuery;
StrSql:String;
CmdID:Integer;
Begin
Try
Result:=0;//错误指令
ADOQuery:=TADOQuery.Create(nil);
With ADOQuery Do
Begin
ConnectionString:=DBConnectionString;
StrSql:='Select * From OperatorCmdSet Where CmdCode=:CmdCode';
Close;SQL.Clear;SQL.Add(StrSql);
Parameters.ParamByName('CmdCode').Value:=MsgContent;
Open;
If Not Eof Then Result:=FieldByName('CmdID').AsInteger Else Result:=3;//正常业务指令
End;
Except
On E:EOleException Do
Begin
E.ErrorCode:=0;DBError(E);
End;
End;
ADOQuery.Free;
End;
//获取定制消息的标题(定制信息标题、再次定制信息标题、未定制信息标题、取消定制信息标题、再次取消定制信息标题)
Procedure SetCustomInfoTitle(Var CustomInfoTitle:Array Of String);
Begin
CustomInfoTitle[1]:='%%1%%_CustomInfo';//定制信息标题
CustomInfoTitle[2]:='%%1%%_CustomedInfo';//再次定制信息标题
CustomInfoTitle[3]:='%%1%%_NoCustomInfo';//未定制信息标题
CustomInfoTitle[4]:='%%1%%_CancelCustomInfo';//取消定制信息标题
CustomInfoTitle[5]:='%%1%%_CanceledCustomInfo';//再次取消定制信息标题
End;
//获取收费的点拨号段
Function GetChargeDialCode:String;
Var
ChargeDialCode:String;
Begin
ChargeDialCode:='%%1%%BY';
Result:=ChargeDialCode;
End;
//定制消息处理过程
//获取用户定制状态(返回值为-1是异常,为0是新用户,1是请求用户,2是定制用户,3是退定用户)
//0是错误指令、1是定制指令、2是取消定制指令、3是正常业务指令
Procedure CustomInfoDeal(Title:String;ProviderChargeType,CustomStatus,CmdID:Integer;Indeal:TSmgDeliverReq;DialCodeInfoRec:Rec_DialCodeInfo);
Var
//定制信息标题、再次定制信息标题、未定制信息标题、取消定制信息标题、再次取消定制信息标题
CustomInfoTitle:Array[1..5] Of String;
ChargeDialCode,InfoTitle:String;
i,GateID:Integer;
Begin
GateID:=Indeal.GateID;
SetCustomInfoTitle(CustomInfoTitle);
For i:=1 To 5 Do
Begin
CustomInfoTitle[i]:=StringReplace(CustomInfoTitle[i+1],'%%1%%',Title,[rfReplaceAll]);
End;
ChargeDialCode:=StringReplace(GetChargeDialCode,'%%1%%',Title,[rfReplaceAll]);
Case CmdID Of
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -