Commit 8f5c2cc3 by gujin.wang

1.修复部分中文乱码问题. 2.修改会员支付时,总支付金额的计算方式。 3.修复会员支付时,在支付界面输入的小数有时会发生精度损失的问题。

parent 21fd80c3
...@@ -58,6 +58,9 @@ int FMNetwork::send(const QString &url, const QByteArray &reqData, QByteArray &r ...@@ -58,6 +58,9 @@ int FMNetwork::send(const QString &url, const QByteArray &reqData, QByteArray &r
errorMsg = netErrInfo(err); errorMsg = netErrInfo(err);
} }
}else{ }else{
disconnect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
reply->abort();
reply->deleteLater();
error = FM_API_TIMEOUT; error = FM_API_TIMEOUT;
} }
return error; return error;
......
...@@ -28,8 +28,8 @@ void FMPVipServer::Listen(quint16 port) ...@@ -28,8 +28,8 @@ void FMPVipServer::Listen(quint16 port)
void FMPVipServer::Write(const QByteArray &data) void FMPVipServer::Write(const QByteArray &data)
{ {
if(socket->write(data) == -1) { if(!socket || socket->write(data) == -1) {
FMP_ERROR() << "Write error: " <<socket->error() << socket->errorString(); FMP_ERROR() << "Write error: " << (socket ? socket->errorString() : "connection closed.");
} }
} }
...@@ -44,7 +44,7 @@ void FMPVipServer::onNewConnection() ...@@ -44,7 +44,7 @@ void FMPVipServer::onNewConnection()
void FMPVipServer::onDisconnected() void FMPVipServer::onDisconnected()
{ {
FMP_DEBUG() << "Socket disconnected."; FMP_DEBUG() << "Socket disconnected.";
socket->deleteLater(); socket->close();
} }
void FMPVipServer::onReadyRead() void FMPVipServer::onReadyRead()
...@@ -58,9 +58,12 @@ void FMPVipServer::onReadyRead() ...@@ -58,9 +58,12 @@ void FMPVipServer::onReadyRead()
} }
QByteArray rspData; QByteArray rspData;
// qDebug() << recvData.mid(sizeof(FMSOCKEHEADER));
qDebug() << QString(recvData.mid(sizeof(FMSOCKEHEADER))).toUtf8();
dispatcher->doTask(recvData.mid(sizeof(FMSOCKEHEADER)), rspData); dispatcher->doTask(recvData.mid(sizeof(FMSOCKEHEADER)), rspData);
Write(rspData); Write(rspData);
socket->waitForBytesWritten();
socket->close();
socket->deleteLater();
socket = nullptr;
} }
...@@ -260,7 +260,7 @@ enum { ...@@ -260,7 +260,7 @@ enum {
// 返回错误信息的json // 返回错误信息的json
#define ErrorMsgJson "{\"statusCode\":%1,\"msg\":\"%2\",\"prompt\":0}" #define ErrorMsgJson "{\"statusCode\":%1,\"msg\":\"%2\",\"prompt\":0}"
#define ErrorNeedPayCode "fmv:请使用支付码付款" #define ErrorNeedPayCode "fmv:请使用支付码付款"
typedef std::map<const int, const char*> FMErrorMap; typedef std::map<const int, const QString> FMErrorMap;
const FMErrorMap::value_type fm_error_pairs[] = const FMErrorMap::value_type fm_error_pairs[] =
{ {
...@@ -273,7 +273,7 @@ const FMErrorMap::value_type fm_error_pairs[] = ...@@ -273,7 +273,7 @@ const FMErrorMap::value_type fm_error_pairs[] =
FMErrorMap::value_type(FM_API_WINDOWCLOSE, "窗口关闭") FMErrorMap::value_type(FM_API_WINDOWCLOSE, "窗口关闭")
}; };
const FMErrorMap fm_error(fm_error_pairs, fm_error_pairs + (sizeof fm_error_pairs / sizeof fm_error_pairs[0])); const FMErrorMap fm_error(fm_error_pairs, fm_error_pairs + (sizeof(fm_error_pairs) / sizeof(fm_error_pairs[0])));
#endif #endif
......
...@@ -12,7 +12,30 @@ ...@@ -12,7 +12,30 @@
function##(); \ function##(); \
if(error() != FM_API_SUCCESS) { \ if(error() != FM_API_SUCCESS) { \
FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString()); \ FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString()); \
return QString(ErrorMsgJson).arg(error()).arg(errorString()).toLatin1(); \ QString msg = ErrorMsgJson;\
msg = msg.arg(error());\
switch(error())\
{\
case FM_API_ERROR: \
msg = msg.arg(QStringLiteral("失败"));\
break;\
case FM_API_TIMEOUT:\
msg = msg.arg(QStringLiteral("网络超时"));\
break;\
case FM_API_BADJSON:\
msg = msg.arg(QStringLiteral("无效的JSON数据"));\
break;\
case FM_API_NETWORERROR:\
msg = msg.arg(QStringLiteral("网络错误"));\
break;\
case FM_API_SERVERERROR:\
msg = msg.arg(QStringLiteral("服务器错误"));\
break;\
case FM_API_WINDOWCLOSE:\
msg = msg.arg(QStringLiteral("窗口关闭"));\
break;\
}\
return msg.toUtf8(); \
} \ } \
} while(0); } while(0);
......
...@@ -60,10 +60,10 @@ void TaskFinal::packageServerReq() ...@@ -60,10 +60,10 @@ void TaskFinal::packageServerReq()
foreach(auto p, getPosJsonValue(PosProps.Pay_ids).toArray()) foreach(auto p, getPosJsonValue(PosProps.Pay_ids).toArray())
{ {
QJsonObject pay; QJsonObject pay;
pay["amount"] = p.toObject()["pay_amount"]; pay["amount"] = p.toObject()["pay_amount"].toInt();
pay["thirdPayTransId"] = ""; pay["thirdPayTransId"] = p.toObject()["thirdPayTransId"].toString();
pay["code"] = p.toObject()["code"].toString(); pay["code"] = p.toObject()["code"].toString();
pay["transId"] = getPosJsonValue("trans_id"); pay["transId"] = getPosJsonValue("trans_id").toString();
pay["payTransId"] = p.toObject()["pay_transId"].toString(); pay["payTransId"] = p.toObject()["pay_transId"].toString();
QString typeModeFlag = p.toObject()["pay_id"].toString(); QString typeModeFlag = p.toObject()["pay_id"].toString();
...@@ -86,62 +86,37 @@ void TaskFinal::packageServerReq() ...@@ -86,62 +86,37 @@ void TaskFinal::packageServerReq()
pay["typeModeFlag"] = 20003; pay["typeModeFlag"] = 20003;
} }
} }
else if(typeModeFlag == "7")
{
//支付宝钱包
pay["typeModeFlag"] = 10001;
}
else if(typeModeFlag == "9")
{
//微信钱包
pay["typeModeFlag"] = 10004; //
}
else if(typeModeFlag == "2")
{
//银行卡
pay["typeModeFlag"] = 10011;
}
else if(typeModeFlag == "8")
{
//翼支付
pay["typeModeFlag"] = 10010;
}
else else
{ {
pay["typeModeFlag"] = typeModeFlag.toInt(); pay["typeModeFlag"] = typeModeFlag.toInt();
FMP_ERROR() << "未知的支付类型: " << typeModeFlag; FMP_ERROR() << QStringLiteral("未知的支付类型: ") << typeModeFlag;
} }
// if(typeModeFlag == "0") // if(typeModeFlag == "20002")
// {
// //现金支付
// pay["typeModeFlag"] = 20005;
// }
// else if(typeModeFlag == "2")
// {
// //银行卡
// pay["typeModeFlag"] = 10011;
// }
// else if(typeModeFlag == "7")
// {
// //支付宝钱包
// pay["typeModeFlag"] = 10001;
// }
// else if(typeModeFlag == "77")
// {
// //商品券
// pay["typeModeFlag"] = 20004;
// }
// else if(typeModeFlag == "8")
// {
// //翼支付
// pay["typeModeFlag"] = 10010;
// }
// else if(typeModeFlag == "76")
// {
// //代金券
// pay["typeModeFlag"] = 20003;
// }
// else if(typeModeFlag == "9")
// {
// //微信钱包
// pay["typeModeFlag"] = 10004; //???
// }
// else if(typeModeFlag == "20001")
// {
// //会员储值金支付
// pay["typeModeFlag"] = 20001;
// }
// else if(typeModeFlag == "20002")
// { // {
// //积分支付 // //积分支付
// pay["typeModeFlag"] = 20002; // pay["typeModeFlag"] = 20002;
// } // }
// else
// {
// pay["typeModeFlag"] = typeModeFlag.toInt();
// FMP_ERROR() << "未知的支付类型: " << typeModeFlag;
// }
payList.append(pay); payList.append(pay);
} }
...@@ -182,6 +157,7 @@ bool TaskFinal::sendToServer(bool isShowMsg) ...@@ -182,6 +157,7 @@ bool TaskFinal::sendToServer(bool isShowMsg)
} else { } else {
QJsonParseError jsonErr; QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr); QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
qDebug() << rspJson;
// Json错误 // Json错误
if(jsonErr.error != QJsonParseError::NoError) { if(jsonErr.error != QJsonParseError::NoError) {
......
...@@ -30,8 +30,18 @@ TaskLogin::TaskLogin(QJsonObject &jsonObj, Session *session, QObject *parent) ...@@ -30,8 +30,18 @@ TaskLogin::TaskLogin(QJsonObject &jsonObj, Session *session, QObject *parent)
QByteArray TaskLogin::doTask() QByteArray TaskLogin::doTask()
{ {
FMP_DEBUG() << __FUNCTION__; FMP_DEBUG() << __FUNCTION__;
RunFunction(setWindow); //根据请求中是否有member_sign字段,判断是否是退货时发起的认证
RunFunction(showWindow); if(posReqJsonObj.contains("member_sign"))
{
//直接保存member_sign到_session中
session()->addData("code", posReqJsonObj["member_sign"].toString());
onLogin();
}
else
{
RunFunction(setWindow);
RunFunction(showWindow);
}
RunFunction(packagePOSRsp); RunFunction(packagePOSRsp);
QJsonDocument json(posRspJsonObj); QJsonDocument json(posRspJsonObj);
...@@ -252,7 +262,10 @@ void TaskLogin::onLogin() ...@@ -252,7 +262,10 @@ void TaskLogin::onLogin()
// if(_window!=nullptr) { // if(_window!=nullptr) {
// _window->resetWnd(); // _window->resetWnd();
// } // }
_window->close(); if(_window != nullptr)
{
_window->close();
}
} }
//QString TaskLogin::sign() const //QString TaskLogin::sign() const
......
...@@ -162,9 +162,10 @@ void TaskPay::packageServerReq() ...@@ -162,9 +162,10 @@ void TaskPay::packageServerReq()
serverReqJsonObj["partnerId"] = PARTNER_ID; serverReqJsonObj["partnerId"] = PARTNER_ID;
QJsonObject transaction; QJsonObject transaction;
int payAmount = 0; //该次会员支付的总金额
transaction["memberTransId"] = ""; transaction["memberTransId"] = "";
transaction["account"] = getPosJsonValue("fm_open_id"); transaction["account"] = getPosJsonValue("fm_open_id");
transaction["payAmount"] = getPosJsonValue("need_amount"); // transaction["payAmount"] = getPosJsonValue("need_amount");
transaction["isUseScore"] = session()->data("isUseScore").toInt(); transaction["isUseScore"] = session()->data("isUseScore").toInt();
QJsonArray products; QJsonArray products;
...@@ -187,6 +188,7 @@ void TaskPay::packageServerReq() ...@@ -187,6 +188,7 @@ void TaskPay::packageServerReq()
balance["typeModeFlag"] = 20001; balance["typeModeFlag"] = 20001;
balance["code"] = ""; balance["code"] = "";
payList.push_back(balance); payList.push_back(balance);
payAmount += session()->data("codeAmount").toInt();
//积分支付详情(天福目前没有积分支付) //积分支付详情(天福目前没有积分支付)
if(transaction["isUseScore"].toInt()) if(transaction["isUseScore"].toInt())
...@@ -197,6 +199,7 @@ void TaskPay::packageServerReq() ...@@ -197,6 +199,7 @@ void TaskPay::packageServerReq()
score["typeModeFlag"] = 20002; score["typeModeFlag"] = 20002;
score["code"] = ""; score["code"] = "";
payList.push_back(score); payList.push_back(score);
payAmount += session()->data("score").toInt();
} }
//代金券/商品券支付详情 //代金券/商品券支付详情
...@@ -209,10 +212,12 @@ void TaskPay::packageServerReq() ...@@ -209,10 +212,12 @@ void TaskPay::packageServerReq()
coupon["typeModeFlag"] = it.value().value<Coupon>().typeModeFlag; coupon["typeModeFlag"] = it.value().value<Coupon>().typeModeFlag;
coupon["code"] = it.value().value<Coupon>().code; coupon["code"] = it.value().value<Coupon>().code;
payList.push_back(coupon); payList.push_back(coupon);
payAmount += it.value().value<Coupon>().disAmount;
} }
transaction["products"] = products; transaction["products"] = products;
transaction["payList"] = payList; transaction["payList"] = payList;
transaction["payAmount"] = payAmount;
serverReqJsonObj[PosProps.Transaction] = transaction; serverReqJsonObj[PosProps.Transaction] = transaction;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch()); serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
...@@ -286,15 +291,15 @@ void TaskPay::packagePOSRsp() ...@@ -286,15 +291,15 @@ void TaskPay::packagePOSRsp()
typeModeFlags[20002] = "20002"; //会员积分支付 typeModeFlags[20002] = "20002"; //会员积分支付
//支付方式描述 //支付方式描述
QMap<int, QString> description; QMap<int, QString> description;
description[20001] = "会员储值金支付"; description[20001] = QStringLiteral("会员储值金支付");
description[20002] = "会员积分支付"; description[20002] = QStringLiteral("会员积分支付");
description[20003] = "代金券支付"; description[20003] = QStringLiteral("代金券支付");
description[20004] = "商品券支付"; description[20004] = QStringLiteral("商品券支付");
description[20005] = "现金支付"; description[20005] = QStringLiteral("现金支付");
description[10011] = "银行卡支付"; description[10011] = QStringLiteral("银行卡支付");
description[10001] = "支付宝支付"; description[10001] = QStringLiteral("支付宝支付");
description[10010] = "翼支付"; description[10010] = QStringLiteral("翼支付");
description[10004] = "微信支付"; description[10004] = QStringLiteral("微信支付");
//计算总支付额 //计算总支付额
int totalPaid = 0; int totalPaid = 0;
......
...@@ -66,8 +66,7 @@ void FMVipOrder::initWnd(Session *se) ...@@ -66,8 +66,7 @@ void FMVipOrder::initWnd(Session *se)
void FMVipOrder::on_pay_btn_clicked() void FMVipOrder::on_pay_btn_clicked()
{ {
session()->addData("payCouponMap", orderInfo->selectCouponMap); session()->addData("payCouponMap", orderInfo->selectCouponMap);
//int codeAmount = orderInfo->getPayAmount(ui->pay_edit->text()); int codeAmount = orderInfo->getPayAmount(ui->pay_edit->text());
double codeAmount = orderInfo->getMaxWillPay() * 100;
session()->addData("codeAmount", codeAmount); session()->addData("codeAmount", codeAmount);
session()->addData("isUseScore", orderInfo->isUseScore()); session()->addData("isUseScore", orderInfo->isUseScore());
...@@ -108,7 +107,6 @@ void FMVipOrder::onItemClicked(QListWidgetItem *item) ...@@ -108,7 +107,6 @@ void FMVipOrder::onItemClicked(QListWidgetItem *item)
FMMsgWnd::WarningWnd(QString::fromLocal8Bit("请注意代金券总额已超过待付金额!"), this); FMMsgWnd::WarningWnd(QString::fromLocal8Bit("请注意代金券总额已超过待付金额!"), this);
} }
} }
setWillPayText();
} }
else if(orderInfo->couponMap()[code].typeModeFlag == 20004) //商品券 else if(orderInfo->couponMap()[code].typeModeFlag == 20004) //商品券
{ {
...@@ -133,6 +131,7 @@ void FMVipOrder::onItemClicked(QListWidgetItem *item) ...@@ -133,6 +131,7 @@ void FMVipOrder::onItemClicked(QListWidgetItem *item)
} }
} }
} }
setWillPayText();
} }
void FMVipOrder::initCouponItems() void FMVipOrder::initCouponItems()
......
...@@ -78,11 +78,8 @@ private: ...@@ -78,11 +78,8 @@ private:
int getPayAmount(QString amountStr) int getPayAmount(QString amountStr)
{ {
qDebug() << amountStr.toDouble(); double payAmount = MIN(_needPay, (amountStr.toDouble() + _couponAmount + _useScore)) * 100;
qDebug() << _couponAmount; return QString::number(payAmount).toInt();
qDebug() << _useScore;
int payAmount = MIN(_needPay, (amountStr.toDouble() + _couponAmount + _useScore)) * 100;
return payAmount;
} }
// 代金券总额超过待付时返回true // 代金券总额超过待付时返回true
......
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