Commit 8d0a64f2 by guanghui.cui

增加功能:

1、配置信息从配置文件读取
2、如果程序不是运行在服务器,退出
parent 6708f9e3
...@@ -6,7 +6,9 @@ CXXFLAG := -g ...@@ -6,7 +6,9 @@ CXXFLAG := -g
#source of so #source of so
SRCSSO := base/MySQLService.cpp\ SRCSSO := base/MySQLService.cpp\
3rdParty/easylogging/easylogging++.cc\ 3rdParty/easylogging/easylogging++.cc\
pos_bft/OrderInfo.cpp pos_bft/OrderInfo.cpp\
utility/utility.cpp\
utility/zini.cpp
#source of bin #source of bin
SRCS := utility/utility.cpp\ SRCS := utility/utility.cpp\
......
...@@ -4,21 +4,26 @@ ...@@ -4,21 +4,26 @@
#include "OrderInfo.h" #include "OrderInfo.h"
#include <time.h> #include <time.h>
#include <stdio.h> #include <stdio.h>
#include <iconv.h>
#include "../3rdParty/easylogging/easylogging++.h" #include "../3rdParty/easylogging/easylogging++.h"
#include "../base/FM_ErrorCode.h" #include "../base/FM_ErrorCode.h"
#include "../utility/utility.h"
#include "../utility/zini.h"
#define SQL_BUFFER_SIZE 1024 #define SQL_BUFFER_SIZE 1024
COrderInfo::COrderInfo() COrderInfo::COrderInfo()
:mysql(NULL) :mysql(NULL)
,_tempLatin1(NULL)
{ {
if(mysql==NULL){ if(mysql==NULL){
db.server="localhost"; std::string strIniPath = GetProcDir();
db.db="pos"; strIniPath.append("monitor.ini");
db.user="root"; db.server = ZIni::readString("DB","ip", "",strIniPath.c_str());
db.passwd="123"; db.db = ZIni::readString("DB","dbName", "",strIniPath.c_str());
db.timeout=0; db.user = ZIni::readString("DB","user", "",strIniPath.c_str());
db.passwd = ZIni::readString("DB","password", "",strIniPath.c_str());
db.timeout=5; db.timeout=5;
db.interactive_timeout=5; db.interactive_timeout=5;
mysql=new MySQLService(&db); mysql=new MySQLService(&db);
...@@ -29,6 +34,10 @@ COrderInfo::COrderInfo() ...@@ -29,6 +34,10 @@ COrderInfo::COrderInfo()
COrderInfo::~COrderInfo() COrderInfo::~COrderInfo()
{ {
pthread_mutex_destroy(&mutex); //销毁互斥锁 pthread_mutex_destroy(&mutex); //销毁互斥锁
if(_tempLatin1!=NULL){
delete[] _tempLatin1;
_tempLatin1=NULL;
}
} }
int COrderInfo::DBConnect() int COrderInfo::DBConnect()
...@@ -58,12 +67,11 @@ int COrderInfo::Init() ...@@ -58,12 +67,11 @@ int COrderInfo::Init()
return EC_EX_SQL_FAILED; return EC_EX_SQL_FAILED;
} }
LOG(INFO)<<"strName:"<<vecTakewayTypes[i].strName.c_str(); LOG(INFO)<<"strName:"<<vecTakewayTypes[i].strName.c_str();
printf("%s\n", vecTakewayTypes[i].strName.c_str());
if (NULL == (mysql->_row = mysql_fetch_row(mysql->_result))){ if (NULL == (mysql->_row = mysql_fetch_row(mysql->_result))){
snprintf(mysql->sqlStr,SQL_BUFFER_SIZE,"INSERT INTO tbl_PayMethod\ snprintf(mysql->sqlStr,SQL_BUFFER_SIZE,"INSERT INTO tbl_PayMethod\
(PayNo, SeqNo, Name3, EmpPayLevel, PayClass, PmsAskAccount)\ (PayNo, SeqNo, Name3, EmpPayLevel, PayClass, PmsAskAccount)\
VALUES (%d, %d,'%s', 5, 3, 0)", VALUES (%d, %d,'%s', 5, 3, 0)",
payType, payType, vecTakewayTypes[i].strName.c_str()); payType, payType, UTF8ToLatin1(vecTakewayTypes[i].strName.c_str()));
nErrCode = mysql->insert(); nErrCode = mysql->insert();
if(nErrCode != EC_OK) if(nErrCode != EC_OK)
{ {
...@@ -127,6 +135,8 @@ int COrderInfo::SetPayResult(IN std::string& strOrderId, //订单 ...@@ -127,6 +135,8 @@ int COrderInfo::SetPayResult(IN std::string& strOrderId, //订单
int COrderInfo::SetTakeawayOrder(TakeawayOrder &order) int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
{ {
int nErrCode = EC_OK; int nErrCode = EC_OK;
fmPOSType posTakeway;
GetTakewayType(order.pay_ebcode,posTakeway); //获取外卖类型id
pthread_mutex_lock(&mutex); //上锁 pthread_mutex_lock(&mutex); //上锁
//判断记录是否存在,如果存在直接返回 //判断记录是否存在,如果存在直接返回
snprintf(mysql->sqlStr,SQL_BUFFER_SIZE,"SELECT orderid FROM fmTakeaway where fm_id='%s';",order.fm_id.data()); snprintf(mysql->sqlStr,SQL_BUFFER_SIZE,"SELECT orderid FROM fmTakeaway where fm_id='%s';",order.fm_id.data());
...@@ -230,8 +240,8 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order) ...@@ -230,8 +240,8 @@ int COrderInfo::SetTakeawayOrder(TakeawayOrder &order)
//支付信息吸入“支付详情表” //支付信息吸入“支付详情表”
snprintf(mysql->sqlStr,SQL_BUFFER_SIZE, "INSERT INTO tbl_Payment(`Date`,`Check`,Outlet,PayIdx,PayNo,Name3,PayEmp,PayTime,PayStation,PayTot,PayClass,Member,\ snprintf(mysql->sqlStr,SQL_BUFFER_SIZE, "INSERT INTO tbl_Payment(`Date`,`Check`,Outlet,PayIdx,PayNo,Name3,PayEmp,PayTime,PayStation,PayTot,PayClass,Member,\
IsModified,LastModifiedTime)\ IsModified,LastModifiedTime)\
VALUES('%s',%d,%d,1,1,'alipay',4,'%s',99,10.00,1,'',1,'%s')", \ VALUES('%s',%d,%d,1,%d,'%s',4,'%s',99,10.00,1,'',1,'%s')", \
strDate.data(),orderId,iOutlet,chTime,chTime); strDate.data(),orderId,iOutlet,atoi(posTakeway.merchantTypeId.data()),posTakeway.strName.data(),chTime,chTime);
nErrCode = mysql->insert(); nErrCode = mysql->insert();
return 0; return 0;
} }
...@@ -321,6 +331,32 @@ void COrderInfo::SetTakewayTypes(std::vector<fmPOSType> &vecTakeway) ...@@ -321,6 +331,32 @@ void COrderInfo::SetTakewayTypes(std::vector<fmPOSType> &vecTakeway)
vecTakewayTypes.assign(vecTakeway.begin(), vecTakeway.end()); vecTakewayTypes.assign(vecTakeway.begin(), vecTakeway.end());
} }
char* COrderInfo::UTF8ToLatin1(const char *str)
{
if(_tempLatin1!=NULL){
delete[] _tempLatin1;
_tempLatin1=NULL;
}
iconv_t cd;
size_t inLen, outLen;
char *_str = (char*)str;
if (!str)
return NULL;
inLen = strlen(str)+1;
_tempLatin1=new char[inLen];
outLen = inLen;
cd = iconv_open("ISO-8859-1", "UTF-8");
size_t convertedLen = iconv(cd, &_str, &inLen, &_tempLatin1, &outLen);
LOG(INFO)<<"Converted Length:"<< convertedLen << "Error: " << errno;
iconv_close(cd);
LOG(INFO)<<"_tempLatin1:"<<_tempLatin1;
return _tempLatin1;
}
//需要导出的函数,即用户在外部可以调用的接口 //需要导出的函数,即用户在外部可以调用的接口
bool GetOperationObject(void** _RtObject) bool GetOperationObject(void** _RtObject)
{ {
......
...@@ -67,12 +67,15 @@ private: ...@@ -67,12 +67,15 @@ private:
std::vector<fmPOSType> vecPayTypes; //非码-商户 支付类型对应表 std::vector<fmPOSType> vecPayTypes; //非码-商户 支付类型对应表
std::vector<fmPOSType> vecTakewayTypes; //非码-商户 外卖类型对应表 std::vector<fmPOSType> vecTakewayTypes; //非码-商户 外卖类型对应表
char* UTF8ToLatin1(const char *str);
//向数据库总添加:fmTemp表 | 触发器 | fmTakeaway表 | fmTakeaway_products表 //向数据库总添加:fmTemp表 | 触发器 | fmTakeaway表 | fmTakeaway_products表
int AddFMTable(); int AddFMTable();
pthread_mutex_t mutex; //互斥锁 pthread_mutex_t mutex; //互斥锁
MySQLService *mysql; MySQLService *mysql;
DB db; DB db;
char* _tempLatin1; //utf8转换为Latin1后,存放在此变量中
}; };
#endif #endif
...@@ -10,14 +10,19 @@ ...@@ -10,14 +10,19 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#include <unistd.h> #include <unistd.h>
#include <pthread.h> #include <pthread.h>
#include <ifaddrs.h>
#include <string.h>
#include "../base/FM_ErrorCode.h" #include "../base/FM_ErrorCode.h"
#include "SQLiteOperate.h" #include "SQLiteOperate.h"
#include "PayProcess.h" #include "PayProcess.h"
#include "json.h" #include "json.h"
#include "../3rdParty/easylogging/easylogging++.h" #include "../3rdParty/easylogging/easylogging++.h"
#include "../utility/utility.h"
#include "../utility/zini.h"
#define BUFFER_SIZE 1024 //缓冲区大小 #define BUFFER_SIZE 1024 //缓冲区大小
void InitSystem();
void Init(); void Init();
INITIALIZE_EASYLOGGINGPP INITIALIZE_EASYLOGGINGPP
...@@ -38,6 +43,8 @@ int main() ...@@ -38,6 +43,8 @@ int main()
/// 设置全部logger的配置 /// 设置全部logger的配置
el::Loggers::reconfigureAllLoggers(conf); el::Loggers::reconfigureAllLoggers(conf);
InitSystem();
//获取dll对象 //获取dll对象
void* pObj=NULL; void* pObj=NULL;
if(GetOperationObject(&pObj)) if(GetOperationObject(&pObj))
...@@ -210,22 +217,6 @@ void Init() ...@@ -210,22 +217,6 @@ void Init()
//启动外卖监控线程 //启动外卖监控线程
pthread_t takewayId; pthread_t takewayId;
ret = pthread_create(&takewayId, NULL, FunTakeaway, NULL); ret = pthread_create(&takewayId, NULL, FunTakeaway, NULL);
//int nPos;
//char szPath[MAX_PATH] = { 0 };
//GetModuleFileNameA(NULL, szPath, MAX_PATH);
//nPos = strlen(szPath) - 1;
//while ('\\' != szPath[nPos])
//{
// nPos--;
//}
//nPos++;
//szPath[nPos] = '\0';
//std::string str = std::string(szPath);
//str += "monitor.ini";
//int nShow = GetPrivateProfileIntA("show","show_windows",1,str.c_str());
//if(nShow == 0) //;0 隐藏 1 显示
// ShowWindow(GetConsoleWindow(), SW_HIDE); //隐藏窗口
} }
void app_stopped(int sig) void app_stopped(int sig)
...@@ -236,3 +227,42 @@ void app_stopped(int sig) ...@@ -236,3 +227,42 @@ void app_stopped(int sig)
shutdown(pay_server_fd, SHUT_RDWR); shutdown(pay_server_fd, SHUT_RDWR);
return; return;
} }
void InitSystem()
{
std::string strIniPath = GetProcDir();
strIniPath.append("monitor.ini");
std::string pos = ZIni::readString("SYS","pos", "",strIniPath.c_str());
std::string serverip = ZIni::readString("SYS","serverip", "",strIniPath.c_str());
if(pos.compare("bifengtang")==0){
LOG(INFO)<<"避风塘POS";
struct ifaddrs * ifAddrStruct=NULL;
void * tmpAddrPtr=NULL;
getifaddrs(&ifAddrStruct);
while (ifAddrStruct!=NULL) {
if (ifAddrStruct->ifa_addr->sa_family==AF_INET) { // check it is IP4
// is a valid IP4 Address
std::string ifaName=ifAddrStruct->ifa_name;
if(ifaName.compare("eth0")==0){
tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
char addressBuffer[INET_ADDRSTRLEN];
inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
std::string ip=addressBuffer;
if(serverip.compare(ip)==0){
return;
}
else{
LOG(INFO)<<"运行机器ip:"<<addressBuffer<<" 不是服务端,程序退出!";
exit(0);
}
}
}
ifAddrStruct=ifAddrStruct->ifa_next;
}
}
}
\ No newline at end of file
...@@ -266,95 +266,6 @@ void *FunTakeaway(void* lpParamter) ...@@ -266,95 +266,6 @@ void *FunTakeaway(void* lpParamter)
} }
close(socket_fd); close(socket_fd);
delete[] takeWayRecvBuf; delete[] takeWayRecvBuf;
// SOCKADDR_IN addrServer;
// SOCKADDR_IN addrClient;
// sockTakewayServer = socket(AF_INET, SOCK_STREAM, 0);
// addrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//INADDR_ANY表示任何IP
// addrServer.sin_family = AF_INET;
// addrServer.sin_port = htons(23772);//绑定端口
// bind(sockTakewayServer, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
// //Listen监听端
// listen(sockTakewayServer, 5);//5为等待连接数目
// int len = sizeof(SOCKADDR);
// char* takeWayRecvBuf = new char[BUFFER_SIZE*10]; //外卖数据接收区
// TakeawayOrder order;
// int nErrCode = EC_OK;
// while(!g_exit)
// {
// sockTakewayClient = accept(sockTakewayServer, (SOCKADDR*)&addrClient, &len);
// if(sockTakewayClient == SOCKET_ERROR)
// {
// continue;
// }
// //接收并打印客户端数据
// int rlt = socketRecvData(takeWayRecvBuf,BUFFER_SIZE*10,sockTakewayClient);
// if (rlt > 0)
// {
// takeWayRecvBuf[rlt] = '\0';
// int lenGBK = CCodeConv::UTF8ToGBK(takeWayRecvBuf,NULL,NULL);
// char* strGBK = new char[lenGBK];
// CCodeConv::UTF8ToGBK(takeWayRecvBuf,strGBK,lenGBK);
// LOG(INFO)<<"外卖请求:"<<strGBK;
// order.vecProducts.clear();
// GetTakeawayOrder(strGBK,order);
// //根据请求类型进行不同操作
// int statusCode;
// std::string msg;
// if(order.fm_cmd == "put_order")
// {
// LOG(INFO)<<"新外卖订单,fmId:"<<order.fm_id.data();
// nErrCode = dbOperation->SetTakeawayOrder(order);
// LOG(INFO)<<"---------------nErrCode:"<<nErrCode;
// if(nErrCode == EC_OK)
// {
// statusCode = 100;
// msg = "";
// }
// else if(nErrCode == EC_EXIST_ORDER){
// statusCode=100;
// msg = "order exist";
// }
// else
// {
// statusCode=101;
// msg = "order:write error";
// }
// }
// else if(order.fm_cmd == "refund_order")
// {
// LOG(INFO)<<"-----------------------------------退单";
// nErrCode = dbOperation->CancleTakeaway(order);
// if(nErrCode == EC_OK)
// {
// statusCode = 100;
// msg = "";
// }
// else
// {
// statusCode = 101;
// msg = "refund order:write error";
// }
// }
// LOG(INFO)<<"外卖:"<<order.order_index<<" 写数据库:"<<statusCode;
// delete[] strGBK;
// if(order.fm_cmd == "put_order" || order.fm_cmd == "refund_order")
// {
// std::string strReturnJson = GetTakeawayResultJson(statusCode,msg.data());
// //发送返回数据
// int result = send(sockTakewayClient, strReturnJson.data(), strReturnJson.length(), 0);
// LOG(INFO)<<"外卖发送处理结果:"<<strReturnJson.c_str();
// }
// }
// closesocket(sockTakewayClient);
// }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment