📄 diantai.cpp
字号:
/* 中国联通 电台业务 2006.02.27 增加 WCZ 和电台作类业务,用户发送信息到指定号码后,系统从MENU_DT取出相应信息发送给用户,并插入到USER_DT中 cod表中kind='ZD'的都是使用该程序* 程序原理: 根据不同的节目发内容到相应接入号,可用接入号在MEMU_DT表中,FLAG=1的 当INFO_FLAG 默认为1,表示系统只下发一条,若为'2',则会下发两条,此时INFO2 里也必须填入要发送的内容;若为'0',则无下行*/#include <stdio.h>#include <string.h>#include <time.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include "../include/define.h"#include "../include/CMPPAPI.h"#include "mysql/mysql.h"#include "../include/sm_tools.h"#include "../include/sm_db.h"#define SELF_TYPE "diantai"#define INIFILE "../config/sm.ini"extern char db_host[100],db_user[100],db_passwd[100],db_dbname[100];extern MYSQL *myconn;extern char SP_ID[20];static char sp_id_extern[20];static char linkid[9];static char service_phone[20];static int ScanMsgSession();static int DoService(char *icpid,char *code,char *ocode, char *content,char *msisdn,char *dcode,float fee,char *feetype);static int SendUser(char *msisdn,char *msg,char *dcode,float fee,int flag);int Initdiantai(){ GetProfileString(INIFILE,"COMMON","TELEPHONE","",service_phone); srand(time(NULL)); return 0;}int Dodiantai(){ int retval; retval = ScanMsgSession(); return retval;}static int ScanMsgSession(){ char sql[2000]; MYSQL_ROW row; MYSQL_RES *res = NULL; int retval,i; float fee,fee_mon; char id[11],icpid[3],code[11],msisdn[22],dcode[11],ocode[11],feetype[3]; char day[20]; char msg[500]; memset(sql,0,sizeof(sql)); sprintf(sql, "SELECT ID,ICPID,UPPER(SERVICECODE),OTHERCODE,MSGCONTENT,SRCTERMID,DCODE,FEE,FEETYPE,FEE_MON,LINKID FROM COM_RECV_SESSION RECV,COD_SERVICE_SESSION COD WHERE RECV.FLAG='0' AND RECV.SERVICECODE=COD.UCODE AND COD.KIND='ZD' limit 200"); retval = QuerySQL(sql,&myconn,&res); if(retval != 0) { writelog(SELF_TYPE,"查询指令失败"); return 0; } if(res == NULL) { return 0; } while( row = mysql_fetch_row(res)) { strcpy(id,row[0]); strcpy(icpid,row[1]); strcpy(code,row[2]); strcpy(ocode,row[3]); strcpy(msg,row[4]); strcpy(msisdn,row[5]); strcpy(dcode,row[6]); fee = atof(row[7]); strcpy(feetype,row[8]); fee_mon = atof(row[9]); strcpy(linkid,row[10]); sprintf(sql,"UPDATE COM_RECV_SESSION SET FLAG=1,DEAL_DATE='%s' WHERE ID=%s",getnowdate(day),id); if(DoSQL(sql,&myconn) != 0) { writelog(SELF_TYPE,"更新接受session指令表出错!"); mysql_free_result(res); return 0; } DoService(icpid,code,ocode,msg,msisdn,dcode,fee,feetype); } mysql_free_result(res); return 0;}static int DoService(char *icpid,char *code,char *ocode, char *content,char *msisdn,char *dcode,float fee,char *feetype){ MYSQL_ROW row; MYSQL_RES *res = NULL; int len,retval,num=0,olen,count,state,flag=0,info_flag=1; int od; char sql[500],msg[500],msg1[500],msg2[500],ocodetemp[11],months[3]; char day[20],error[500]; count=0; trim(content,' '); checksql(content); sprintf(sql,"SELECT INFO1,INFO2,INFO_FLAG,FLAG FROM MENU_DT WHERE OCODE='%s%s'",code,ocode); retval=QuerySQL(sql,&myconn,&res); if(retval!=0) { sprintf(error,"查询MENU_DT出错:%s",sql); writelog(SELF_TYPE,error); return 0; } if(res==NULL) { return 0; } if(row=mysql_fetch_row(res)) { strcpy(msg1,row[0]); strcpy(msg2,row[1]); info_flag=atoi(row[2]); flag=atoi(row[3]); mysql_free_result(res); } else { mysql_free_result(res); sprintf(msg,"您发送的号码有误,请将内容发送到正确号码上"); sprintf(sp_id_extern,""); SendUser(msisdn,msg,dcode,fee,1); return 0; } if(flag==0) { sprintf(msg,"尊敬的用户您好:该业务已暂停"); sprintf(sp_id_extern,""); SendUser(msisdn,msg,dcode,fee,1); return 0; } sprintf(sql,"INSERT INTO USER_DT(MSISDN,MSG,REG_DATE,OCODE,LINKID,FEETYPE,FEECODE,DCODE) VALUES('%s','%s','%s','%s%s','%s','%s',%.2f,'%s')", msisdn,content,getnowdate(day),code,ocode,linkid,feetype,fee,dcode); if(DoSQL(sql,&myconn) != 0) { writelog(SELF_TYPE,"插入USER_DT指令表出错!"); return 0; } sprintf(sp_id_extern,"%s%s",code,ocode); if(info_flag==2 && strcmp(msg2,"")!=0) { if(strcmp(feetype,"02")==0) { SendUser(msisdn,msg1,dcode,fee,1); SendUser(msisdn,msg2,dcode,fee,1); } else if(strcmp(code,"811")==0) //2005.06.24为了是长号码是811的免费代码下发成功而做 { SendUser(msisdn,msg1,dcode,fee,0); SendUser(msisdn,msg2,dcode,fee,0); } else { SendUser(msisdn,msg1,dcode,fee,0); SendUser(msisdn,msg2,dcode,fee,0); } } else if(info_flag==0) { return 0; } else { if(strcmp(feetype,"02")==0) { SendUser(msisdn,msg1,dcode,fee,1); } else if(strcmp(code,"811")==0) { SendUser(msisdn,msg1,dcode,fee,0); } else { SendUser(msisdn,msg1,dcode,fee,0); } } return 0;}static int SendUser(char *msisdn,char *msg,char *dcode,float fee,int flag){ SEND_STRUC sendstruc; char buf[100]; memset(&sendstruc,0,sizeof(sendstruc)); strcpy(sendstruc.icpid,"MO"); sendstruc.nMsgLevel = 3; strcpy(sendstruc.sServiceID,dcode); sendstruc.nMsgFormat = MSG_FORMAT_ASCII; strcpy(sendstruc.sValidTime,""); strcpy(sendstruc.sAtTime,""); strcpy(sendstruc.sSrcTermID,SP_ID); strcat(sendstruc.sSrcTermID,sp_id_extern); strcpy(sendstruc.sDesTermID,msisdn); sendstruc.sFeeCode = fee; sendstruc.cFeeUserType=0; strcpy(sendstruc.sFeeTerminalID,""); sendstruc.cTpPid = 0; sendstruc.cTpUdhi = 0; strcpy(sendstruc.step,"9"); getnowdate(sendstruc.Send_Date); strcpy(sendstruc.sMsgContent,msg); checksql(sendstruc.sMsgContent); strcpy(sendstruc.linkid,linkid); switch(flag) { case 0: //免费、错误信息 strcpy(sendstruc.sServiceID,"ERROR"); strcpy(sendstruc.sFeeType,"01"); sendstruc.nNeedReply = 0; break; case 1: //按条点播(收费) strcpy(sendstruc.sFeeType,"02"); sendstruc.nNeedReply = 0; break; case 2: //包月点播(不收费的) strcpy(sendstruc.sFeeType,"03"); sendstruc.nNeedReply = 1; break; case 3: //包月扣费 strcpy(sendstruc.sFeeType,"03"); sendstruc.nNeedReply = 2; break; case 8: //定购成功包 strcpy(sendstruc.sFeeType,"08"); sendstruc.nNeedReply = 1; break; case 9: //取消成功包 strcpy(sendstruc.sFeeType,"09"); sendstruc.nNeedReply = 1; break; default: //其它 strcpy(sendstruc.sServiceID,"ERROR"); strcpy(sendstruc.sFeeType,"01"); sendstruc.nNeedReply = 0; break; } SendMsg(&sendstruc,&myconn); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -