Skip to content

点菜 #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cqportal/cqapi/cqapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* Written by Coxxs & Thanks for the help of orzFly
*/
#pragma once

#include <stdint.h>
#if _MSC_VER >= 1600
# pragma execution_character_set("utf-8")
#endif
Expand Down
1 change: 1 addition & 0 deletions cqportal/cqglobalevents.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <QVector>

typedef QPair<qint64, qint64> Member;
typedef QPair<qint64, QString> MemberDinner;
typedef QVector<Member> MemberList;

struct MessageEvent
Expand Down
61 changes: 61 additions & 0 deletions messageevents.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "sqldatas/memberwelcome.h"
#include "sqldatas/memberblacklist.h"
#include "sqldatas/memberdeathhouse.h"
#include "sqldatas/masterdinner.h"

// class QtAssistant

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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<MemberDinner, qint64> 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<qint64, QString> mapCaiDan;
for(int i = 0; i <ll.count(); i++)
{
mapCaiDan.insert(ll.at(i).dinnerType, ll.at(i).name);
}
QMap<qint64, QString>::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);
Expand Down
5 changes: 2 additions & 3 deletions qtassistant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}

Expand Down
1 change: 1 addition & 0 deletions qtassistant.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions qtassistant_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class MasterLevels;
class MemberWelcome;
class MemberBlacklist;
class MemberDeathHouse;
class MasterDinner;

class QtAssistantPrivate : public CqPortalPrivate
{
Expand All @@ -32,6 +33,7 @@ class QtAssistantPrivate : public CqPortalPrivate
MemberWelcome *welcome;
MemberBlacklist *blacklist;
MemberDeathHouse *deathHouse;
MasterDinner *dinnerlist;

HtmlFeedback *htmlFeedback;

Expand Down
120 changes: 120 additions & 0 deletions sqldatas/masterdinner.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
#include "masterdinner.h"
#include "masterdinner_p.h"
#include <QDateTime>
#include <QSqlError>
#include <QSqlQuery>
#include <QStandardPaths>
#include <QLoggingCategory>
#include <QReadWriteLock>
#include <QMessageBox>

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<MemberDinner, qint64> 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()
{
}
41 changes: 41 additions & 0 deletions sqldatas/masterdinner.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#ifndef MASTERDINNER_H
#define MASTERDINNER_H

#if _MSC_VER >= 1600
# pragma execution_character_set("utf-8")
#endif

#include <QHash>

#include "cqsqlite.h"
class DinnerInfo
{
public:
DinnerInfo(qint64 dinnerType, QString name)
: dinnerType(dinnerType), name(name)
{ }
public:
qint64 dinnerType;
QString name;
};
typedef QList<DinnerInfo> 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<MemberDinner, qint64> members() const;
bool contains(qint64 dinnerId, QString name) const;
};
#endif // MASTERDINNER_H
21 changes: 21 additions & 0 deletions sqldatas/masterdinner_p.h
Original file line number Diff line number Diff line change
@@ -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<MemberDinner, qint64> members;
};
#endif // MASTERDINNER_P_H
7 changes: 5 additions & 2 deletions sqldatas/sqldatas.pri
Original file line number Diff line number Diff line change
Expand Up @@ -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