📄 push.cpp
字号:
////////////////////////////////////////////////////////////////////////////////////////// PUSH////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////说明:// (1) DCODE :ZXNY FEE :15.00 // (2) 9193 MSG: NY// CL// 06.07.28 /////////////////////////////////////////////////////////////////////////////////////// #include <stdio.h>#include <string.h>#include <stdlib.h>//#define WINDOWS_NT#ifdef WINDOWS_NT#include <winsock.h>#pragma comment (lib,"ws2_32.lib")#include <mysql.h>#pragma comment(lib,"libmySQL.lib")#include "./include/define.h"#include "./include/sm_tools.h"#include "./include/sm_db.h"#define INIFILE "./config/sm.ini"#define sleep Sleep#else#define GetProfileStringMe GetProfileString#include <unistd.h>#include "mysql/mysql.h"#include "../include/define.h"#include "../include/sm_tools.h"#include "../include/sm_db.h" #define INIFILE "../config/sm.ini" #endif#define DEBUG #define SELF_TYPE "push"//来自main.cppextern MYSQL *myconn; //主函数已经初始化,所有的模块共用一个长连接 extern char SP_ID[24]; //特服号,在这里是5566//只在本文件中所用的全局变量,用static 修饰:static char service_phone[24]; //客服电话 static char linkid[32];static char msisdntype[4];static char sp_id_extern[24]; //servicecode //只在本文件中所用的函数,用static 修饰:static int ScanMsgSession(); //本模块只是从com_recv_session表中取出相关信息static int DoScanMsgSession(char *msgcontent,char *user_table,char *push_date,char *dcode,float fee);static int SendUser(char *msisdn,char *msg,char *dcode,float fee,char *fee_msisdn,int flag);static int InsertUser(char *msisdn,char *msgcontent);static int InsertUserCan(char *msisdn,char *msgcontent);//初始化本业务,放入主线程的InitPara()模块中int InitPush(){ GetProfileStringMe(INIFILE,"COMMON","TELEPHONE","",service_phone); //从配置文件读取客服电话 return 0;}//本业务入口,放入主线程的 DoThread()模块,在main.h中声明int DoPush(){ int retval; retval=ScanMsgSession(); //处理COM_RECV_SESSION sleep(1); return retval;} //从COM_RECV_SESSION中取的数据static int ScanMsgSession(){ MYSQL_RES *res =NULL; MYSQL_ROW row; int id; char sql[512]; char srctermid[24]; char msgcontent[256]; char dcode[24]; char reg_date[24]; char push_date[24]; char user_table[256]; char day[24]; float fee=0.0; memset(sql,0,sizeof(sql)); sprintf(sql,"SELECT ID,MSGCONTENT,REG_DATE,PUSH_DATE,USER_TABLE,DCODE,FEE FROM PUSHTABLE WHERE FLAG =1 LIMIT 1"); if(QuerySQL(sql,&myconn,&res)!=0) { writelog(SELF_TYPE,"查询COM_RECV_SESSION失败"); return -1; } if(res ==NULL) { return -1; } if(row =mysql_fetch_row(res)) { id =atoi(row[0]); strcpy(msgcontent,row[1]); strcpy(reg_date,row[2]); strcpy(push_date,row[3]); strcpy(user_table,row[4]); strcpy(dcode,row[5]); fee =(float)atof(row[6]); getnowdate(day); if(strcmp(day,push_date)<0) { mysql_free_result(res); return 0; } DoScanMsgSession(msgcontent,user_table,push_date,dcode,fee); memset(sql,0,sizeof(sql)); sprintf(sql,"UPDATE PUSHTABLE SET FLAG=0,DEAL_DATE=now()+0 WHERE ID=%d",id); if(DoSQL(sql,&myconn)!=0) { writelog(SELF_TYPE,"更新COM_RECV_SESSION失败"); mysql_free_result(res); return -1; } memset(sql,0,sizeof(sql)); sprintf(sql,"UPDATE %s SET PUSH_FLAG=0",user_table); if(DoSQL(sql,&myconn)!=0) { writelog(SELF_TYPE,"更新USER_TABLE失败"); mysql_free_result(res); return -1; } } mysql_free_result(res); return 0;}//处理COM_RECV_SESSION中取得的信息static int DoScanMsgSession(char *msgcontent,char *user_table,char *push_date,char *dcode,float fee){ MYSQL_RES *res=NULL; MYSQL_ROW row; long num =0; //选手的编号 int total=0; char sql[1024]; char msisdn[24]; char id[12]; memset(sql,0,sizeof(sql)); memset(msisdn,0,sizeof(msisdn)); memset(id,0,sizeof(id)); while(1) { sprintf(sql,"SELECT ID,MSISDN FROM %s WHERE PUSH_FLAG =0 AND FLAG =1 LIMIT 100",user_table); //puts(sql); if(QuerySQL(sql,&myconn,&res)!=0) { writelog(SELF_TYPE,"查询USER_TABLE失败"); return 0; } num =(long)mysql_num_rows(res); if(num <=0) { return 0; } while(row=mysql_fetch_row(res)) { strcpy(id,row[0]); strcpy(msisdn,row[1]); SendUser(msisdn,msgcontent,dcode,fee,msisdn,0); sprintf(sql,"UPDATE %s SET PUSH_FLAG=1 WHERE ID=%s",user_table,id); if(DoSQL(sql,&myconn)!=0) { writelog(SELF_TYPE,"更新PUSH_FLAG失败"); return 0; } } mysql_free_result(res); } return 0;}//发送模块static int SendUser(char *msisdn,char *msg,char *dcode,float fee,char *fee_msisdn,int flag){ SEND_STRUC sendstruc; int linkid_flag; memset(&sendstruc,0,sizeof(sendstruc)); if(strcmp(msisdn,fee_msisdn) == 0) { sendstruc.cFeeUserType=0; strcpy(sendstruc.sFeeTerminalID,""); } else { sendstruc.cFeeUserType=3; strcpy(sendstruc.sFeeTerminalID,fee_msisdn); } strcpy(sendstruc.icpid,"MO"); sendstruc.nMsgLevel = 3; strcpy(sendstruc.sServiceID,dcode); sendstruc.nMsgFormat = 15; 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.cTpPid = 0; sendstruc.cTpUdhi = 0; strcpy(sendstruc.step,"9"); getnowdate(sendstruc.Send_Date); strcpy(sendstruc.sMsgContent,msg); checksql(sendstruc.sMsgContent); strcpy(sendstruc.linkid,linkid);// strcpy(sendstruc.DesTermIDType,msisdntype); linkid_flag=1; switch(flag) { case 0: //免费、错误信息 // strcpy(sendstruc.sServiceID,"FREE"); strcpy(sendstruc.sFeeType,"01"); sendstruc.nNeedReply = 0; break; case 2: //按条点播(收费) strcpy(sendstruc.sFeeType,"02"); sendstruc.nNeedReply = 0; break; case 3: //包月点播(不收费的) strcpy(sendstruc.sFeeType,"03"); sendstruc.nNeedReply = 0; break; case 5: //包月扣费 strcpy(sendstruc.sFeeType,"03"); sendstruc.nNeedReply = 2; break; default: //其它 strcpy(sendstruc.sServiceID,"FREE"); strcpy(sendstruc.sFeeType,"01"); sendstruc.nNeedReply = 0; break; } SendMsg(&sendstruc,&myconn); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -