Commit c312f856 by NitefllWind

2016年9月13日修复bug

parent 5b724e4f
......@@ -6,6 +6,8 @@
QT += core gui network
CONFIG += c++11
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = FMVip
......@@ -39,7 +41,7 @@ RESOURCES += \
INCLUDEPATH += ../FMVipDC/
LIBS += -L..\FMVip\libs -lFMVipDC
LIBS += -L..\FMVipTest -lFMVipDC
win32 {
RC_FILE = res/FMVip.rc
......@@ -47,3 +49,5 @@ RC_FILE = res/FMVip.rc
SUBDIRS += \
../FMVipDC/FMVipDC.pro
DESTDIR += ../FMVipTest
......@@ -49,7 +49,7 @@ void FMVipDispatcher::onActiveSysTrayIcon(QSystemTrayIcon::ActivationReason reas
INT FMVipDispatcher::_ParseRequest(LPSTR data)
{
qDebug() << __FUNCTION__;
qDebug() << __FUNCTION__ << "===>" << data;
QJsonParseError err;
QJsonDocument json = QJsonDocument::fromJson(data, &err);
if (err.error != QJsonParseError::NoError) {
......@@ -151,6 +151,7 @@ void FMVipDispatcher::onFinished()
void FMVipDispatcher::onServerResponsed(const QJsonObject &rspObj)
{
qDebug() << __FUNCTION__ << "===>" << rspObj;
if(_vindow != 0) {
_vindow->deleteLater();
}
......
......@@ -68,14 +68,13 @@ void FMVipForward::parseRequest(const QJsonObject &jsonObj)
}
}
qDebug() << fm_jsonObj;
// 向服务器发送请求
request(fm_jsonObj);
}
void FMVipForward::request(const QJsonObject &reqJob)
{
qDebug() << __FUNCTION__;
qDebug() << __FUNCTION__ << "===>" << reqJob;
// 设置URL
QString signStr = sign(reqJob);
......@@ -105,31 +104,42 @@ void FMVipForward::onServerFinished(QNetworkReply *reply)
QJsonParseError err;
QJsonDocument jdoc = QJsonDocument::fromJson(data, &err);
qDebug() << "Server Return JSON ===>" << jdoc.object();
if(err.error != QJsonParseError::NoError || !jdoc.isObject()) {
posObj["statusCode"] = 1000;
posObj["msg"] = "服务器返回数据异常";
} else {
QJsonObject serverObj = jdoc.object();
posObj["statusCode"] = serverObj["statusCode"];
posObj["msg"] = serverObj["msg"];
switch (_reqType) {
case FM_VIP_LOGIN:
logined(serverObj, posObj);
break;
case FM_VIP_COUPON:
couponed(serverObj, posObj);
break;
case FM_VIP_FUND:
funded(serverObj, posObj);
break;
case FM_VIP_PAY:
payed(serverObj, posObj);
break;
case FM_VIP_FINAL:
finaled(serverObj, posObj);
break;
default:
break;
// 服务器返回错误信息
if(serverObj.contains("errcode") && serverObj.contains("errmsg")) {
posObj["statusCode"] = serverObj["errcode"];
posObj["msg"] = serverObj["errmsg"];
}
// 服务器返回正常信息
else {
posObj["statusCode"] = serverObj["statusCode"];
posObj["msg"] = serverObj["msg"];
switch (_reqType) {
case FM_VIP_LOGIN:
logined(serverObj, posObj);
break;
case FM_VIP_COUPON:
couponed(serverObj, posObj);
break;
case FM_VIP_FUND:
funded(serverObj, posObj);
break;
case FM_VIP_PAY:
payed(serverObj, posObj);
break;
case FM_VIP_FINAL:
finaled(serverObj, posObj);
break;
default:
break;
}
}
}
}
......@@ -291,7 +301,7 @@ void FMVipForward::payed(const QJsonObject &serverJob, QJsonObject &posJob)
pay_obj_2["paid_total_amount"] = serverJob["scoreAmount"];
pay_obj_3["pay_id"] = "77";
pay_obj_3["pay_str"] = "优惠支付";
pay_obj_3["pain_total_amount"] = 0;
pay_obj_3["paid_total_amount"] = 0;
pay_obj_3["code"] = "";
pay_ids.append(pay_obj_1);
pay_ids.append(pay_obj_2);
......
......@@ -14,23 +14,27 @@ FMVipOrder::FMVipOrder(QDialog *parent) :
QString business_date = FMVipForward::instance()->sessionData("business_date");
QString fm_id = FMVipForward::instance()->sessionData("fm_open_id");
QString amount_str = FMVipForward::instance()->sessionData("amount");
QString score = FMVipForward::instance()->sessionData("score");
QString score_str = FMVipForward::instance()->sessionData("score");
QString needPay_str = FMVipForward::instance()->sessionData("needPay");
orderInfo = new FMVipOrder::OrderInfo(amount_str, score, needPay_str);
orderInfo = new FMVipOrder::OrderInfo(amount_str, score_str, needPay_str);
ui->operator_label->setText(operator_id);
ui->bd_label->setText(business_date);
ui->id_label->setText(fm_id);
ui->point_label->setText(score);
ui->balance_label->setText(orderInfo->amountStr());
ui->price_label->setText(orderInfo->needPayStr());
ui->point_label->setText(score_str);
ui->balance_label->setText(orderInfo->getAmountStr());
ui->price_label->setText(orderInfo->getNeedPayStr());
ui->pay_edit->setText(orderInfo->defaultPayStr());
ui->pay_edit->setText(orderInfo->getPayAmountStr());
}
FMVipOrder::~FMVipOrder()
{
if(orderInfo != NULL){
delete orderInfo;
orderInfo = NULL;
}
delete ui;
}
......@@ -47,8 +51,8 @@ void FMVipOrder::on_coupon_next_btn_clicked()
void FMVipOrder::on_pay_btn_clicked()
{
qDebug() << __FUNCTION__;
int codeAmount = ui->pay_edit->text().toDouble() * 100;
FMVipForward::instance()->addSessionData("codeAmount", QString::number(codeAmount));
QString codeAmountStr = orderInfo->getTotalPayStr();
FMVipForward::instance()->addSessionData("codeAmount", codeAmountStr);
ui->pay_btn->setEnabled(false);
ui->pay_chk->setEnabled(false);
......@@ -60,10 +64,17 @@ void FMVipOrder::on_pay_chk_clicked(bool checked)
{
qDebug() << __FUNCTION__ << checked;
ui->pay_edit->setText(orderInfo->defaultPayStr(checked));
orderInfo->setIsUseScore(checked);
ui->pay_edit->setText(orderInfo->getPayAmountStr());
int is = checked ? 1 : 0;
FMVipForward::instance()->addSessionData("isUseScore", QString::number(is));
}
void FMVipOrder::on_pay_edit_textEdited(const QString &text)
{
orderInfo->setEditPayAmount(text);
// ui->pay_edit->setText(orderInfo->getPayAmountStr());
}
......@@ -3,6 +3,9 @@
#include "fmvipwnd.h"
#define MIN(a,b) ((a<b) ? a : b)
#define DOUBLE_STR(num) QString::number(num, 'f', 2)
namespace Ui {
class FMVipOrder;
}
......@@ -21,6 +24,9 @@ public slots:
void on_pay_btn_clicked();
void on_pay_chk_clicked(bool checked);
private slots:
void on_pay_edit_textEdited(const QString &text);
private:
class OrderInfo
{
......@@ -39,50 +45,82 @@ private:
_amount = _amountStr.toInt() / 100.0;
_score = _scoreStr.toInt() / 100.0;
_needPay = _needPayStr.toInt() / 100.0;
isUseScore = false;
editPayAmount = MIN(_amount, _needPay);
setPays();
}
double amount()
QString getAmountStr()
{
return _amount;
return DOUBLE_STR(_amount);
}
QString amountStr()
QString getNeedPayStr()
{
return QString::number(_amount, 'f', 2);
return DOUBLE_STR(_needPay);
}
double needPay()
void setEditPayAmount(const QString amountText)
{
return _needPay;
editPayAmount = amountText.toDouble();
setPays();
}
QString needPayStr()
void setIsUseScore(bool isUse)
{
return QString::number(_needPay, 'f', 2);
isUseScore = isUse;
setPays();
}
// 如果账户余额充足则默认付全部待付,否则默认付全部余额
double defaultPay(bool isUseScore = false)
void setPays()
{
double need = needPay();
if(isUseScore) {
need -= _score;
}
double pay;
if(amount() > need) {
pay = need;
if(isUseScore)
{
// 积分付只有两种情况 1.全部待付 2.全部积分
if(_score > _needPay) {
pay_score = _needPay;
pay_amount = 0.0;
}else{
pay_score = _score;
double tempAmount = MIN((_needPay - pay_score), _amount);
pay_amount = MIN(tempAmount, editPayAmount);
}
}else{
pay = amount();
pay_score = 0.0;
double tempAmount = MIN(_needPay, _amount);
pay_amount = MIN(tempAmount, editPayAmount);
}
return pay;
}
QString defaultPayStr(bool isUseScore = false)
double getPayAmount()
{
return QString::number(defaultPay(isUseScore), 'f', 2);
return pay_amount;
}
QString getPayAmountStr()
{
return DOUBLE_STR(pay_amount);
}
QString getTotalPayStr()
{
double totalPay = pay_amount + pay_score;
return QString::number((int)(totalPay*100));
}
private:
QString _amountStr, _scoreStr, _needPayStr;
double _amount, _score, _needPay;
// 三种支付方式支付金额
double pay_amount, pay_score, pay_discount;
double editPayAmount;
bool isUseScore;
};
private:
......
......@@ -50,6 +50,29 @@ void FMVipWnd::setIsBusy(const bool isBusy)
Q_UNUSED(isBusy);
}
int FMVipWnd::exec()
{
show();
HWND hForeWnd = ::GetForegroundWindow();
DWORD dwForeID = ::GetWindowThreadProcessId(hForeWnd,NULL);
DWORD dwCurID = ::GetCurrentThreadId();
::AttachThreadInput(dwCurID,dwForeID,TRUE);
::SetWindowPos( (HWND)effectiveWinId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
::SetWindowPos( (HWND)effectiveWinId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
showNormal();
::SetForegroundWindow( (HWND)this->effectiveWinId());
::AttachThreadInput(dwCurID,dwForeID,FALSE);
this->setFocus();
return QDialog::exec();
}
#ifdef Q_OS_WIN
//! Gui class member of platform
bool FMVipWnd::nativeEvent(const QByteArray &eventType, void *message, long *result)
......
......@@ -15,6 +15,8 @@ public:
//! Set current user profile (Json data)
bool setProfile(const QByteArray&);
void setIsBusy(const bool isBusy);
int exec();
signals:
void doPost();
public slots:
......
......@@ -73,8 +73,8 @@
*/
#price {
background: rgb(246,246,246);
min-height: 94px;
max-height: 94px;
min-height: 260px;
max-height: 260px;
border: 1 solid silver;
border-top: 0px solid silver;
}
......@@ -95,59 +95,12 @@
border-bottom: 1 solid silver;
}
/*
* 优惠券
*/
#coupon {
min-height: 250px;
max-height: 250px;
border: 1 solid silver;
border-top: 0 solid silver;
background: rgb(248,239,222);
}
#coupon_desc_label {
background: white;
max-width: 200px;min-width: 200px;
color: rgb(120,120,120);
border: 1 solid silver;
border-top: 0 solid silver;
}
#coupon_page QWidget{
background: rgb(248,239,222);
border: 1 solid white;
border-top: 1 solid silver;
border-right: 1 solid silver;
}
#coupon_label {
background: rgb(222,88,51);
min-height: 50px;
color: white;
font: 500 20px &quot;Microsoft YaHei&quot;;
}
#position_label {
font: 400 16px &quot;Microsoft YaHei&quot;;
min-height: 80px;
}
#coupon_prev_btn, #coupon_next_btn {
font: 400 16px &quot;Microsoft YaHei&quot;;
min-height: 40px; max-height: 40px;
min-width: 70px; max-width: 70px;
border: 1 solid rgb(228,228,228);
border-radius: 7px;
background: white;
}
#coupon_prev_btn:hover, #coupon_next_btn:hover {
background: rgb(154,200,50);
color: white;
}
/*
* 支付
*/
#pay {
background: rgb(246,246,246);
min-height: 230px;
max-height: 230px;
min-height: 300px;
max-height: 300px;
border: 1 solid silver;
border-top: 0 solid silver;
}
......@@ -445,143 +398,6 @@
</widget>
</item>
<item>
<widget class="QWidget" name="coupon" native="true">
<layout class="QHBoxLayout" name="couponLay">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="coupon_desc_label">
<property name="text">
<string>优 惠 券</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="coupon_page_lay">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="coupon_label">
<property name="text">
<string>代金券</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QScrollArea" name="coupon_page">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>764</width>
<height>117</height>
</rect>
</property>
</widget>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="pageCtrlLay">
<property name="leftMargin">
<number>40</number>
</property>
<property name="rightMargin">
<number>40</number>
</property>
<item>
<widget class="QPushButton" name="coupon_prev_btn">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>上页</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="position_label">
<property name="text">
<string>0/0</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="coupon_next_btn">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="mouseTracking">
<bool>false</bool>
</property>
<property name="text">
<string>下页</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="pay" native="true">
<layout class="QHBoxLayout" name="payLay">
<property name="spacing">
......
......@@ -24,3 +24,5 @@ HEADERS += \
INCLUDEPATH += include
LIBS += -lwinhttp -lws2_32
DESTDIR += ../FMVipTest
......@@ -95,7 +95,14 @@ BOOL FMSockServer::_Listen()
while(TRUE) {
sockaddr_in addr_client = { 0 };
int addr_len = sizeof(addr_client);
SOCKET sclient = accept(_socket, (sockaddr*)&addr_client, &addr_len);
SOCKET sclient = INVALID_SOCKET;
try {
sclient = accept(_socket, (sockaddr*)&addr_client, &addr_len);
}
catch (...) {
FMLOG("Accept exception");
}
if (INVALID_SOCKET != sclient) {
DWORD str_addr_len = 32;
TCHAR str_addr[32] = { 0 };
......
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