修复RFID导致回收槽关闭;修复新建文件后不自动切换的问题

This commit is contained in:
2026-07-23 08:37:12 +08:00
parent 50c4999d90
commit f1ae7ae898
5 changed files with 770 additions and 77 deletions
+118 -74
View File
@@ -15,6 +15,33 @@ constexpr char* SUPER_CARD_ID = "397F4A8E5B9F6CA07D395B28E4A6";
RFIDManager::RFIDManager()
{
comForRFID_init();
m_confirmBox = new QMessageBox(QMessageBox::Warning, tr("警告"), QString(),
QMessageBox::Ok | QMessageBox::Cancel);
m_confirmBox->setWindowModality(Qt::ApplicationModal);
m_confirmTimer = new QTimer(this);
connect(m_confirmTimer, &QTimer::timeout, this, [this]() {
int count = m_confirmBox->property("rfidCountDown").toInt();
m_confirmBox->setText(m_confirmBoxTxt.arg(count));
m_confirmBox->update();
count--;
m_confirmBox->setProperty("rfidCountDown", count);
if(count == 0) {
m_confirmBox->accept();
}
});
connect(m_confirmBox, &QMessageBox::accepted, this, [this]() {
if(m_confirmCallback) {
m_confirmCallback();
}
});
connect(m_confirmBox, &QMessageBox::finished, this, [this](int result) {
m_confirmTimer->stop();
m_confirmCallback = nullptr;
});
}
void RFIDManager::CheckSumOut(UCHAR *buf, UCHAR len)
@@ -531,8 +558,6 @@ void RFIDManager::handleCheck(unsigned int addr)
{
strRevdata ="";
auto res = receiveReadRFID_data();
// LogInfo::setRunStatusText(tr("receiveReadRFID_data res:%1, data:%2")
// .arg(res).arg(strRevdata));
if(strRevdata.length() > 3)
{
if((strRevdata.left(3) == QString::number(addr).left(3))
@@ -549,27 +574,11 @@ void RFIDManager::handleCheck(unsigned int addr)
if(!sysPara->RFIDPara.needInkCard){
emit sig_showMsg(tr("不需要刷墨水卡!"));
}
// else if(sysPara->status.statWarn & WARN_STATUS_INK_WARN){
// emit sig_showMsg(tr("请先添加墨水再刷墨水卡!"));
// }
else
{
auto ok = cardTouchConfirm(tr("确认要刷墨水卡吗?"), tr("确认要刷墨水卡吗? %1 秒后将自动确认"));
if (!ok){
LogInfo::setRunStatusText("The user has canceled the operation about marking the ink card.");
}
else {
auto ret = RFIDmarkCardUsedAsync(0, strRevdata);
if(ret >= 0 || ret == -11){
const QString msg = sysPara->RFIDPara.addedInk ? tr("刷墨水卡成功!") : tr("刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中");
emit sig_showMsg(msg);
sysPara->RFIDPara.cardInk = true;
sysPara->saveRFIDPara();
}
else if(ret == -10) {
emit sig_showMsg(tr("刷超级墨水卡失败,请联系厂商。"));
}
}
else {
auto blockData = strRevdata;
cardTouchConfirmAsync(tr("确认要刷墨水卡吗?"), tr("确认要刷墨水卡吗? %1 秒后将自动确认"), [this, blockData]{
markInkCard(blockData);
});
}
}
else if(strRevdata.at(3) == 'B')
@@ -582,61 +591,20 @@ void RFIDManager::handleCheck(unsigned int addr)
if(!sysPara->RFIDPara.needSolventCard){
emit sig_showMsg(tr("不需要刷溶剂卡!"));
}
// else if(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN){
// emit sig_showMsg(tr("请先添加溶剂再刷溶剂卡!"));
// }
else
{
auto ok = cardTouchConfirm(tr("确认要刷溶剂卡吗?"), tr("确认要刷溶剂卡吗? %1 秒后将自动确认"));
if (!ok){
LogInfo::setRunStatusText("The user has canceled the operation about marking the solvent card.");
}
else {
auto ret = RFIDmarkCardUsedAsync(1, strRevdata);
if(ret >= 0 || ret == -11) {
const QString msg = sysPara->RFIDPara.addedSolvent ? tr("刷溶剂卡成功!") : tr("刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中");
emit sig_showMsg(msg);
sysPara->RFIDPara.cardSolvent = true;
sysPara->saveRFIDPara();
}
else if(ret == -10) {
emit sig_showMsg(tr("刷超级溶剂水卡失败,请联系厂商。"));
}
}
else {
auto blockData = strRevdata;
cardTouchConfirmAsync(tr("确认要刷溶剂卡吗?"), tr("确认要刷溶剂卡吗? %1 秒后将自动确认"), [this, blockData](){
markSolventCard(blockData);
});
}
}
else if(strRevdata.at(3) == 'C')
{
auto ok = cardTouchConfirm(tr("确认要刷保养卡吗?"), tr("确认要刷保养卡吗? %1 秒后将自动确认"));
if (ok){
auto ret = RFIDmarkCardUsedAsync(2, strRevdata);
if(ret >= 0 || ret == -11) {//把卡数据清零
emit sig_maintenanceShow();
sysPara->RFIDPara.needMaintenance = false;
sysPara->status.needMaintenanceRemind = false;
QDate curDate = QDate::currentDate();
sysPara->RFIDPara.maintenanceDate = curDate.toString("yyMMdd").toInt();
QDate mtEndDate = curDate.addMonths(sysPara->RFIDPara.maintenanceInterval);
sysPara->RFIDPara.maintenanceEndDate = mtEndDate.toString("yyMMdd").toInt();
sysPara->RFIDPara.runTime = 0;
RunTimeCtrl::instance()->updatePara(&sysPara->RFIDPara);
sysPara->saveRFIDPara();
emit sig_showMsg(tr("刷保养卡成功!"));
}
else if(ret == -10) {
emit sig_showMsg(tr("刷超级保养卡失败,请联系厂商。"));
}
else {
LogInfo::setRunStatusText("Failed to mark maintenance card!");
}
}
else {
qDebug() << "用户取消了刷卡";
}
auto blockData = strRevdata;
cardTouchConfirmAsync(tr("确认要刷保养卡吗?"), tr("确认要刷保养卡吗? %1 秒后将自动确认"), [this, blockData](){
markMaintenanceCard(blockData);
});
}
else
{
@@ -1117,6 +1085,82 @@ bool RFIDManager::cardTouchConfirm(QString msgTxt, QString variableMsgTxt)
return box.result() == QMessageBox::Ok || box.result() == QMessageBox::Accepted;
}
void RFIDManager::cardTouchConfirmAsync(QString msgTxt, QString variableMsgTxt, std::function<void()> callback)
{
if(m_confirmBox->isVisible()) {
qDebug() << "A dialog is already being displayed. Ignoring the new request.";
return;
}
int rfidCountDown = sysPara->para.rfidCountDown;
m_confirmBoxTxt = variableMsgTxt;
m_confirmCallback = callback;
m_confirmBox->setText(msgTxt);
m_confirmBox->setProperty("rfidCountDown", rfidCountDown);
if(rfidCountDown > 0) {
m_confirmBox->setText(m_confirmBoxTxt.arg(rfidCountDown));
m_confirmTimer->start(1000);
}
m_confirmBox->show();
}
void RFIDManager::markInkCard(const QString &blockData)
{
auto ret = RFIDmarkCardUsedAsync(0, blockData);
if(ret >= 0 || ret == -11){
const QString msg = sysPara->RFIDPara.addedInk ? tr("刷墨水卡成功!") : tr("刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中");
emit sig_showMsg(msg);
sysPara->RFIDPara.cardInk = true;
sysPara->saveRFIDPara();
}
else if(ret == -10) {
emit sig_showMsg(tr("刷超级墨水卡失败,请联系厂商。"));
}
}
void RFIDManager::markSolventCard(const QString &blockData)
{
auto ret = RFIDmarkCardUsedAsync(1, blockData);
if(ret >= 0 || ret == -11) {
const QString msg = sysPara->RFIDPara.addedSolvent ? tr("刷溶剂卡成功!") : tr("刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中");
emit sig_showMsg(msg);
sysPara->RFIDPara.cardSolvent = true;
sysPara->saveRFIDPara();
}
else if(ret == -10) {
emit sig_showMsg(tr("刷超级溶剂水卡失败,请联系厂商。"));
}
}
void RFIDManager::markMaintenanceCard(const QString &blockData)
{
auto ret = RFIDmarkCardUsedAsync(2, blockData);
if(ret >= 0 || ret == -11) {//把卡数据清零
emit sig_maintenanceShow();
sysPara->RFIDPara.needMaintenance = false;
sysPara->status.needMaintenanceRemind = false;
QDate curDate = QDate::currentDate();
sysPara->RFIDPara.maintenanceDate = curDate.toString("yyMMdd").toInt();
QDate mtEndDate = curDate.addMonths(sysPara->RFIDPara.maintenanceInterval);
sysPara->RFIDPara.maintenanceEndDate = mtEndDate.toString("yyMMdd").toInt();
sysPara->RFIDPara.runTime = 0;
RunTimeCtrl::instance()->updatePara(&sysPara->RFIDPara);
sysPara->saveRFIDPara();
emit sig_showMsg(tr("刷保养卡成功!"));
}
else if(ret == -10) {
emit sig_showMsg(tr("刷超级保养卡失败,请联系厂商。"));
}
else {
LogInfo::setRunStatusText("Failed to mark maintenance card!");
}
}
void RFIDManager::updateStatus()
{
if (sysPara) {
@@ -1381,4 +1425,4 @@ int RFIDManager::RFIDQueryWalletAsync()
LogInfo::setRunStatusText(("Failed to query card balance, logic error"));
qDebug() << "Failed to query card balance, logic error";
return -1;
}
}
+15 -1
View File
@@ -6,8 +6,10 @@
#include <QObject>
#include <QTimer>
#include <QMutex>
#include <functional>
class SysPara;
class QMessageBox;
enum CARD_TYPE{
INK = 1,
SOLVENT = 2,
@@ -102,11 +104,23 @@ private:
void initTimer();
bool cardTouchConfirm(QString msgTxt, QString variableMsgTxt);
void cardTouchConfirmAsync(QString msgTxt, QString variableMsgTxt, std::function<void()> callback);
void markInkCard(const QString &strRevdata = QString());
void markSolventCard(const QString &strRevdata = QString());
void markMaintenanceCard(const QString &strRevdata = QString());
//刷卡新需求,刷卡和倒溶剂/墨水不分先后,都可以去除报警提示。
StatuStruct status;
void updateStatus();
QTimer* warningTimer = nullptr;
QMessageBox* m_confirmBox = nullptr;
QTimer* m_confirmTimer = nullptr;
QString m_confirmBoxTxt;
std::function<void()> m_confirmCallback;
int waitStatus();
bool waitCard();
signals:
@@ -132,4 +146,4 @@ private slots:
void slt_intervalTimerHandle();
};
#endif // RFIDMANAGER_H
#endif // RFIDMANAGER_H