From 5f033914071e667fe451fb2c95eb868ce7568b60 Mon Sep 17 00:00:00 2001 From: AlwaysOnline12138 Date: Fri, 10 Feb 2017 18:02:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加菜单 --- cqportal/cqapi/cqapi.h | 2 +- cqportal/cqglobalevents.h | 1 + messageevents.cpp | 61 +++++++++++++++++++ qtassistant.cpp | 5 +- qtassistant.h | 1 + qtassistant_p.h | 2 + sqldatas/masterdinner.cpp | 120 ++++++++++++++++++++++++++++++++++++++ sqldatas/masterdinner.h | 41 +++++++++++++ sqldatas/masterdinner_p.h | 21 +++++++ sqldatas/sqldatas.pri | 7 ++- 10 files changed, 255 insertions(+), 6 deletions(-) create mode 100644 sqldatas/masterdinner.cpp create mode 100644 sqldatas/masterdinner.h create mode 100644 sqldatas/masterdinner_p.h diff --git a/cqportal/cqapi/cqapi.h b/cqportal/cqapi/cqapi.h index c15f1bb..662b4b8 100644 --- a/cqportal/cqapi/cqapi.h +++ b/cqportal/cqapi/cqapi.h @@ -4,7 +4,7 @@ * Written by Coxxs & Thanks for the help of orzFly */ #pragma once - +#include #if _MSC_VER >= 1600 # pragma execution_character_set("utf-8") #endif diff --git a/cqportal/cqglobalevents.h b/cqportal/cqglobalevents.h index a59f196..5fdfd9b 100644 --- a/cqportal/cqglobalevents.h +++ b/cqportal/cqglobalevents.h @@ -9,6 +9,7 @@ #include typedef QPair Member; +typedef QPair MemberDinner; typedef QVector MemberList; struct MessageEvent diff --git a/messageevents.cpp b/messageevents.cpp index 83444c6..cdd6593 100644 --- a/messageevents.cpp +++ b/messageevents.cpp @@ -10,6 +10,7 @@ #include "sqldatas/memberwelcome.h" #include "sqldatas/memberblacklist.h" #include "sqldatas/memberdeathhouse.h" +#include "sqldatas/masterdinner.h" // class QtAssistant @@ -104,6 +105,10 @@ bool QtAssistant::groupMessageEventFilter(const MessageEvent &ev) groupBlacklist(ev, args.mid(1)); return true; } + if ((c == "showcd")) { + groupShowDinnerList(ev, args.mid(1)); + return true; + } } return false; @@ -1108,6 +1113,62 @@ void QtAssistant::groupWelcome(const MessageEvent &ev, const QStringList &args) } } +void QtAssistant::groupShowDinnerList(const MessageEvent &ev, const QStringList &args) +{ + Q_D(QtAssistant); + bool argvGlobal = false; + qint64 gid = argvGlobal ? 0 : ev.from; + QHashIterator i(d->dinnerlist->members()); + DinnerInfoList ll; + while (i.hasNext()) { + i.next(); + //if (i.key().first == dinnerId) { + //MemberDinner tmp = i.key(); + //ll.push_back(i.key().first, i.key.second); + ll.append(DinnerInfo(i.key().first, i.key().second)); + //} + } + if(ll.size() == 0) + { + sendGroupMessage(gid, tr("菜单为空")); + } + else + { + QMap mapCaiDan; + for(int i = 0; i ::iterator it; + QString strCaidan = "开始点菜了!菜单为:\n荤菜:\n"; + for ( it = mapCaiDan.begin(); it != mapCaiDan.end(); ++it ) + { + if(100 > it.key()) + { + strCaidan = strCaidan + QString::number(it.key()) + tr(":") + it.value() + tr(" "); + } + } + strCaidan += "\n半荤半素菜:\n"; + for ( it = mapCaiDan.begin(); it != mapCaiDan.end(); ++it ) + { + if(200 > it.key() && it.key() > 100) + { + strCaidan = strCaidan + QString::number(it.key()) + tr(":") + it.value() + tr(" "); + } + } + strCaidan += "素菜:\n"; + for ( it = mapCaiDan.begin(); it != mapCaiDan.end(); ++it ) + { + if(300 > it.key() && it.key() >200) + { + strCaidan = strCaidan + QString::number(it.key()) + tr(":") + it.value() + tr(" "); + } + } + + strCaidan += "\n"; + sendGroupMessage(gid, strCaidan); + } +} void QtAssistant::groupBlacklist(const MessageEvent &ev, const QStringList &args) { Q_D(QtAssistant); diff --git a/qtassistant.cpp b/qtassistant.cpp index fca95b8..b78bdca 100644 --- a/qtassistant.cpp +++ b/qtassistant.cpp @@ -14,7 +14,7 @@ #include "sqldatas/memberwelcome.h" #include "sqldatas/memberblacklist.h" #include "sqldatas/memberdeathhouse.h" - +#include "sqldatas/masterdinner.h" #include "htmlfeedback/htmlfeedback.h" // class QtAssistant @@ -33,9 +33,8 @@ QtAssistant::QtAssistant(QObject *parent) d->welcome = new MemberWelcome(this); d->blacklist = new MemberBlacklist(this); d->deathHouse = new MemberDeathHouse(this); - + d->dinnerlist = new MasterDinner(this); d->htmlFeedback = new HtmlFeedback(this); - d->checkTimerId = startTimer(10000); } diff --git a/qtassistant.h b/qtassistant.h index 64270da..be854b0 100644 --- a/qtassistant.h +++ b/qtassistant.h @@ -55,6 +55,7 @@ class QtAssistant : public CqPortal void groupWelcome(const MessageEvent &ev, const QStringList &args); void groupBlacklist(const MessageEvent &ev, const QStringList &args); + void groupShowDinnerList(const MessageEvent &ev, const QStringList &args); private: void groupHelpHelp(qint64 gid); diff --git a/qtassistant_p.h b/qtassistant_p.h index 13e15dd..f483f42 100644 --- a/qtassistant_p.h +++ b/qtassistant_p.h @@ -12,6 +12,7 @@ class MasterLevels; class MemberWelcome; class MemberBlacklist; class MemberDeathHouse; +class MasterDinner; class QtAssistantPrivate : public CqPortalPrivate { @@ -32,6 +33,7 @@ class QtAssistantPrivate : public CqPortalPrivate MemberWelcome *welcome; MemberBlacklist *blacklist; MemberDeathHouse *deathHouse; + MasterDinner *dinnerlist; HtmlFeedback *htmlFeedback; diff --git a/sqldatas/masterdinner.cpp b/sqldatas/masterdinner.cpp new file mode 100644 index 0000000..5898511 --- /dev/null +++ b/sqldatas/masterdinner.cpp @@ -0,0 +1,120 @@ +#include "masterdinner.h" +#include "masterdinner_p.h" +#include +#include +#include +#include +#include +#include +#include + +Q_LOGGING_CATEGORY(qlcMasterDinner, "MasterDinner") + +// class MasterDinner + +MasterDinner::MasterDinner(QObject *parent) + : CqSqlite(*new MasterDinnerPrivate(), parent) +{ + Q_D(MasterDinner); + + setFileName(QStringLiteral("ydcd.db")); + + do { + const char sql[] = "CREATE TABLE IF NOT EXISTS [YDCD] (" + "[DinnerId] INTEGER NOT NULL, " + "[name] varchar(255)," + "PRIMARY KEY ([DinnerId]));"; + prepare(QString::fromLatin1(sql)); + } while (false); + + if (openDatabase()) { + do { + const char sql[] = "SELECT * FROM [YDCD];"; + QSqlQuery query = this->query(sql); + while (query.next()) { + qint64 dinnerId = query.value(0).toLongLong(); + QString name = query.value(1).toString(); + //QMessageBox::information(NULL, QString::number(dinnerId, 10), name, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); + d->members.insert(MemberDinner(dinnerId, name),d->members.size() + 1); + } + } while (false); + } + QMessageBox::information(NULL, QString::number(d->members.count(), 10), tr("个数"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); +} + +MasterDinner::~MasterDinner() +{ +} + +CqSqlite::Result MasterDinner::addMember(qint64 dinnerId, QString name) +{ + Q_D(MasterDinner); + QWriteLocker locker(&d->guard); + + /*MemberDinner member(dinnerId, name); + if (!d->members.contains(member)) { + const char sql[] = "REPLACE INTO [YDCD] VALUES(%1, %2);"; + QString qtSql = QString::fromLatin1(sql).arg(dinnerId).arg(name); + QSqlQuery query = this->query(qtSql); + if (query.lastError().isValid()) { + qCCritical(qlcMasterDinner, "Update error: %s", + qPrintable(query.lastError().text())); + return SqlError; + } + d->members.insert(member, 1); + qCInfo(qlcMasterDinner, "Update: dinnerId: %lld, name: %s.", dinnerId, name); + + return Done; + }*/ + + return NoChange; +} + +CqSqlite::Result MasterDinner::removeMember(qint64 dinnerId, QString name) +{ + Q_D(MasterDinner); + QWriteLocker locker(&d->guard); + + MemberDinner member(dinnerId, name); + /* if (d->members.contains(member)) { + const char sql[] = "DELETE FROM [Blacklist] WHERE [gid] = %1 AND [uid] = %2;"; + QString qtSql = QString::fromLatin1(sql).arg(gid).arg(uid); + QSqlQuery query = this->query(qtSql); + if (query.lastError().isValid()) { + qCCritical(qlcMemberBlacklist, "Delete error: %s", + qPrintable(query.lastError().text())); + return SqlError; + } + d->members.remove(member); + qCInfo(qlcMemberBlacklist, "Delete: gid: %lld, uid: %lld.", gid, uid); + + return Done; + }*/ + + return NoChange; +} + +QHash MasterDinner::members() const +{ + Q_D(const MasterDinner); + return d->members; +} + +bool MasterDinner::contains(qint64 dinnerId, QString name) const +{ + Q_D(const MasterDinner); + QReadLocker locker(&d->guard); + + if (d->members.contains(MemberDinner(0, name))) { + return true; + } + return d->members.contains(MemberDinner(dinnerId, name)); +} + +MasterDinnerPrivate::MasterDinnerPrivate() +{ +} + +MasterDinnerPrivate::~MasterDinnerPrivate() +{ +} diff --git a/sqldatas/masterdinner.h b/sqldatas/masterdinner.h new file mode 100644 index 0000000..300ee00 --- /dev/null +++ b/sqldatas/masterdinner.h @@ -0,0 +1,41 @@ +#ifndef MASTERDINNER_H +#define MASTERDINNER_H + +#if _MSC_VER >= 1600 +# pragma execution_character_set("utf-8") +#endif + +#include + +#include "cqsqlite.h" +class DinnerInfo +{ +public: + DinnerInfo(qint64 dinnerType, QString name) + : dinnerType(dinnerType), name(name) + { } +public: + qint64 dinnerType; + QString name; +}; +typedef QList DinnerInfoList; + +class MasterDinnerPrivate; +class MasterDinner : public CqSqlite +{ + Q_OBJECT + Q_DECLARE_PRIVATE(MasterDinner) + +public: + explicit MasterDinner(QObject *parent = Q_NULLPTR); + virtual ~MasterDinner(); + +public: + Result addMember(qint64 dinnerId, QString name); + Result removeMember(qint64 dinnerId, QString name); + +public: + QHash members() const; + bool contains(qint64 dinnerId, QString name) const; +}; +#endif // MASTERDINNER_H diff --git a/sqldatas/masterdinner_p.h b/sqldatas/masterdinner_p.h new file mode 100644 index 0000000..bd7b2cd --- /dev/null +++ b/sqldatas/masterdinner_p.h @@ -0,0 +1,21 @@ +#ifndef MASTERDINNER_P_H +#define MASTERDINNER_P_H + +#if _MSC_VER >= 1600 +# pragma execution_character_set("utf-8") +#endif + +#include "cqsqlite_p.h" +#include "masterdinner.h" + +class MasterDinnerPrivate : public CqSqlitePrivate +{ + Q_DECLARE_PUBLIC(MasterDinner) + +public: + MasterDinnerPrivate(); + virtual ~MasterDinnerPrivate(); +public: + QHash members; +}; +#endif // MASTERDINNER_P_H diff --git a/sqldatas/sqldatas.pri b/sqldatas/sqldatas.pri index f700f98..6edaf95 100644 --- a/sqldatas/sqldatas.pri +++ b/sqldatas/sqldatas.pri @@ -6,10 +6,13 @@ HEADERS += \ $$PWD/memberblacklist.h \ $$PWD/memberblacklist_p.h \ $$PWD/memberdeathhouse.h \ - $$PWD/memberdeathhouse_p.h + $$PWD/memberdeathhouse_p.h \ + $$PWD/masterdinner.h \ + $$PWD/masterdinner_p.h SOURCES += \ $$PWD/masterlevels.cpp \ $$PWD/memberwelcome.cpp \ $$PWD/memberblacklist.cpp \ - $$PWD/memberdeathhouse.cpp + $$PWD/memberdeathhouse.cpp \ + $$PWD/masterdinner.cpp