📄 point.cpp
字号:
//COD_SERVICE中的PARTNER字段填写上行代码(定制业务),BITLONG字段用于判断是否要二次确认,1要,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"#include "main.h"#define SELF_TYPE "point"#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 service_phone[20];static char sp_id_extern[20];static char linkid[9];static int ScanMsg();static int ScanMsgSession();static int DoService(char *code,char *msisdn,char *dcode,char *content,int want_num,char *feetype,float fee);static int DoMonthly_custom(char *msisdn,char *code,char *ocode,char *content,char *dcode,char *feetype,float fee);static int SendUser(char *msisdn,char *msg,char *dcode,float fee,int flag);int InitPoint(){ srand(time(NULL)); GetProfileString(INIFILE,"COMMON","TELEPHONE","",service_phone); return 0;}int DoPoint(){ int retval; retval = ScanMsg(); if(retval < 0) { return 0; } retval = ScanMsgSession(); return retval;}static int getrand(int max_num) //取1-max_num之间的随机数{ float retval; int i; retval = (float)(rand())/(float)(RAND_MAX); retval = retval * max_num; i = (int)(retval); if(i == 0) i = 1; return i;}static int have_mobile(char *msisdn) //该用户是否有代取消的功能{ MYSQL_ROW row; MYSQL_RES *res = NULL; char sql[500]; int retval,count; sprintf(sql,"SELECT COUNT(*) FROM INFO_CANCEL_PHONE WHERE PHONE='%s'",msisdn); retval = QuerySQL(sql,&myconn,&res); if(retval != 0) { writelog(SELF_TYPE,"查询INFO_CANCEL_PHONE失败"); return 0; } if(res == NULL) { return 0; } if(row = mysql_fetch_row(res)) { count=atoi(row[0]); } mysql_free_result(res); return count;}static int have_usertable(char *table_name[]) //取得所有的用户定制表{ MYSQL_ROW row; MYSQL_RES *res = NULL; char sql[500]; char table_name_static[100][100]; int retval,count; count=0; sprintf(sql,"SELECT TABLE_NAME FROM INFO_USERTABLE WHERE FLAG='1' ORDER BY ID"); retval = QuerySQL(sql,&myconn,&res); if(retval != 0) { writelog(SELF_TYPE,"查询INFO_USERTABLE失败"); return 0; } if(res == NULL) { return 0; } while(row = mysql_fetch_row(res)) { strcpy(table_name_static[count],row[0]); trim(table_name_static[count],' '); table_name[count]=table_name_static[count]; count++; //puts(*(table_name+count-1)); } mysql_free_result(res); return count;}static int ScanMsg(){ char sql[500],day[20]; MYSQL_ROW row; MYSQL_RES *res = NULL; int retval,want_num; float fee,fee_mon; char id[11],icpid[3],code[11],msisdn[22],msg[161],dcode[11]; char feetype[3]; memset(sql,0,sizeof(sql)); sprintf(sql, "SELECT ID,ICPID,UPPER(SERVICECODE),SRCTERMID,MSGCONTENT,DCODE,FEE,LIMIT_NUM,FEETYPE,FEE_MON,LINKID FROM COM_RECV RECV,COD_SERVICE COD WHERE RECV.FLAG='0' AND RECV.SERVICECODE=COD.UCODE AND (COD.KIND='DZ' OR COD.KIND='DK') LIMIT 200"); retval = QuerySQL(sql,&myconn,&res); if(retval != 0) { writelog(SELF_TYPE,"查询COM_RECV失败"); 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(msisdn,row[3]); strcpy(msg,row[4]); strcpy(dcode,row[5]); fee = atof(row[6]); want_num = atoi(row[7]); strcpy(feetype,row[8]); fee_mon = atof(row[9]); strcpy(linkid,row[10]); sprintf(sql,"UPDATE COM_RECV SET FLAG=1,DEAL_DATE='%s' WHERE ID=%s",getnowdate(day),id); if(DoSQL(sql,&myconn) != 0) { writelog(SELF_TYPE,"更新COM_RECV表出错!"); return 0; } if(strcmp(feetype,"03")==0) { DoService(code,msisdn,dcode,msg,want_num,feetype,fee_mon); //申请业务成功 } else { DoService(code,msisdn,dcode,msg,want_num,feetype,fee); //申请业务成功 } } mysql_free_result(res); memset(sql,0,sizeof(sql)); strcpy(id,""); strcpy(icpid,""); strcpy(code,""); strcpy(msisdn,""); strcpy(msg,""); strcpy(dcode,""); return 0;}static int DoService(char *code,char *msisdn,char *dcode,char *content,int want_num,char *feetype,float fee){ char sql[2000],cd[20],name[100]; int type,retval,num,i,table_num,count_ph; char flag[2],free_flag[2],send_num[10],day[20],partner[10]; char *table_name[100]; float fee_p; MYSQL_RES *res = NULL; MYSQL_ROW row; char buf[1000],buf_num[100],msg[1000],pcode[20],msisdn_buf[22]; int count = 0,bitlong=0,flag_state=0; memset(sql,0,sizeof(sql)); trim(content,' '); count_ph=have_mobile(msisdn); //查找是否有权代取消 if(strcmp(code,"00000")==0 || strcmp(code,"0000") == 0 || strcmp(code,"QX0") == 0) { // 取消所有业务 QX0 或 00000 if(strcmp(content,"")==0) //为空是正常用户取消 { if(strcmp(code,"QX0") == 0 || strcmp(code,"00000")==0) { table_num=have_usertable(table_name); //取得取消的所有表的表名及个数 for (i=0;i<table_num;i++) { sprintf(sql,"SELECT COD.NAME,DCODE,FEETYPE,FEE_MON FROM %s POINT,COD_SERVICE COD\ WHERE POINT.FLAG='1' AND POINT.SV_CODE=COD.UCODE AND POINT.MSISDN='%s'",*(table_name+i),checksql(msisdn)); retval = QuerySQL(sql,&myconn,&res); if(retval != 0) { writelog(SELF_TYPE,"取消业务出错00000!"); return 0; } if(res == NULL) { if(msisdn[2]>'3') //修改于2004.08.30 { sprintf(msg,"您未定制由南京宁网公司提供的短信业务.感谢您使用我们的短信服务!咨询电话%s",service_phone); } else { sprintf(msg,"您未定制由南京宁网公司提供的短信业务.感谢您使用我们的短信服务!咨询电话%s",service_phone); } } else { while(row = mysql_fetch_row(res)) { count ++; sprintf(msg,"您已成功取消%s,感谢您使用我们的短信服务!咨询电话%s",row[0],service_phone); sprintf(sp_id_extern,""); SendUser(msisdn,msg,dcode,fee,9); //取消包 } mysql_free_result(res); } strcpy(buf_num,""); } for (i=0;i<table_num;i++) { sprintf(sql,"UPDATE %s SET FLAG='0',CANCEL_DATE='%s_all'\ WHERE FLAG='1' AND MSISDN='%s'",*(table_name+i),getnowdate(day),checksql(msisdn)); retval = DoSQL(sql,&myconn); if(retval != 0) { writelog(SELF_TYPE,"取消全部业务出错!"); return 0; } } if(count == 0) { sprintf(msg,"您未定制由南京宁网公司提供的短信业务.感谢您使用我们的短信服务!咨询电话%s",service_phone); sprintf(sp_id_extern,""); SendUser(msisdn,msg,dcode,fee,1); //点播下发代码0000 } return 0; } else if(strcmp(code,"0000") == 0) { strcpy(msg,"回复QX+序号,取消所订购的服务:\n0 取消所有服务\n"); strcpy(buf,""); table_num=have_usertable(table_name); //取得取消的所有表的表名及个数 for (i=0;i<table_num;i++) { if(strcmp(*(table_name+i),"USER_POINT_PR")==0) //是不是图片会员表 { sprintf(sql,"SELECT NAME FROM %s WHERE MSISDN='%s' AND FLAG='1'",*(table_name+i),checksql(msisdn)); } else { sprintf(sql,"SELECT COD.NAME,UCODE FROM %s POINT,COD_SERVICE COD WHERE POINT.FLAG='1' AND POINT.SV_CODE=COD.UCODE AND POINT.MSISDN='%s'",*(table_name+i),checksql(msisdn)); } retval = QuerySQL(sql,&myconn,&res); if(retval != 0) { writelog(SELF_TYPE,"取消业务出错!"); return 0; } if(res == NULL) { if(msisdn[2]>'3') //修改于2004.08.30 { sprintf(msg,"您未定制由南京宁网公司提供的短信业务.感谢您使用我们的短信服务!咨询电话%s",service_phone); } else { sprintf(msg,"您未定制由南京宁网公司提供的短信业务.感谢您使用我们的短信服务!咨询电话%s",service_phone); } } else { while(row = mysql_fetch_row(res)) { count ++; sprintf(buf_num,"%d %s\n",count,row[0]); strcat(buf,buf_num); } mysql_free_result(res); } strcpy(buf_num,""); } if(count == 0) { if(msisdn[2]>'3') //修改于2004.08.30 { sprintf(msg,"您未定制由南京宁网公司提供的短信业务.感谢您使用我们的短信服务!咨询电话%s",service_phone); } else { sprintf(msg,"您未定制由南京宁网公司提供的短信业务.感谢您使用我们的短信服务!咨询电话%s",service_phone); } } else { strcat(msg,buf); } sprintf(sp_id_extern,"012%d",getrand(999)); SendUser(msisdn,msg,dcode,fee,1); //点播下发代码0000 return 0; } else { sprintf(msg,"您回复的代码有错误,请核实后再试,或直接拨打我们的客服热线:%s",service_phone); sprintf(sp_id_extern,""); SendUser(msisdn,msg,dcode,fee,0); //错误信息 return 0; } } else if(count_ph==0&&strcmp(content,"")!=0) //没有权代取消但帮他人代取消 { sprintf(msg,"您回复的代码有错误,请核实后再试,或直接拨打我们的客服热线:%s",service_phone); sprintf(sp_id_extern,""); SendUser(msisdn,msg,dcode,fee,0); //错误信息 return 0; } else //移动公司代取消 { if(strcmp(code,"QX0") == 0 || strcmp(code,"00000")==0) { table_num=have_usertable(table_name); //取得取消的所有表的表名及个数 for (i=0;i<table_num;i++) { sprintf(sql,"UPDATE %s SET FLAG='0',CANCEL_DATE='%sd',POINT_CHANNEL='4',FTP_FLAG='0' WHERE FLAG='1' AND MSISDN='%s'",*(table_name+i),getnowdate(day),checksql(content)); retval = DoSQL(sql,&myconn); if(retval != 0) { writelog(SELF_TYPE,"取消全部业务出错!"); return 0; } } sprintf(msg,"您已代用户%s成功取消由南京宁网公司提供的所有服务.感谢您使用我们的短信服务!咨询电话%s",content,service_phone); sprintf(sp_id_extern,""); SendUser(msisdn,msg,dcode,fee,1); //点播下发代码0000 return 0; } else if(strcmp(code,"0000") == 0) { sprintf(msg,"回复QX+序号+%s,将代用户%s取消所订购的服务:\n0 取消所有服务\n",content,content); strcpy(buf,""); table_num=have_usertable(table_name); //取得取消的所有表的表名及个数 for (i=0;i<table_num;i++) { if(strcmp(*(table_name+i),"USER_POINT_PR")==0) //是不是图片会员表 { sprintf(sql,"SELECT NAME FROM %s WHERE MSISDN='%s' AND FLAG='1'",*(table_name+i),checksql(content)); } else { sprintf(sql,"SELECT COD.NAME,UCODE FROM %s POINT,COD_SERVICE COD WHERE POINT.FLAG='1' AND POINT.SV_CODE=COD.UCODE AND POINT.MSISDN='%s'",*(table_name+i),checksql(content)); } retval = QuerySQL(sql,&myconn,&res); if(retval != 0) { writelog(SELF_TYPE,"移动代取消业务出错!"); return 0; } if(res == NULL) { if(msisdn[2]>'3') //修改于2004.08.30 { sprintf(msg,"用户%s未定制由南京宁网公司提供的短信业务.感谢您使用我们的短信服务!咨询电话%s",content,service_phone); } else { sprintf(msg,"用户%s未定制由南京宁网公司提供的业务.感谢您使用我们的短信服务!咨询电话%s",content,service_phone); } } else { while(row = mysql_fetch_row(res)) { count ++; sprintf(buf_num,"%d %s\n",count,row[0]); strcat(buf,buf_num); } mysql_free_result(res); } strcpy(buf_num,""); } if(count == 0) { if(msisdn[2]>'3') //修改于2004.08.30 { sprintf(msg,"用户%s未定制由南京宁网公司提供的短信业务.感谢您使用我们的短信服务!咨询电话%s",content,service_phone);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -