?? 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 + -