feat: 初步设计工单系统
This commit is contained in:
parent
c42a7e5dd7
commit
e27eebda77
18
handler/ticket/model.go
Normal file
18
handler/ticket/model.go
Normal file
@ -0,0 +1,18 @@
|
||||
package ticket
|
||||
|
||||
type Ticket struct {
|
||||
Id int64 `json:"id" db:"id"`
|
||||
Content string `json:"content" db:"content"`
|
||||
FromQQ int64 `json:"fromQQ" db:"fromQQ"`
|
||||
FromGroup int64 `json:"fromGroup" db:"fromGroup"`
|
||||
IsDone bool `json:"isDone" db:"isDone"`
|
||||
IsDeleted bool `json:"isDeleted" db:"isDeleted"`
|
||||
CreatedAt string `json:"created_at" db:"created_at"`
|
||||
}
|
||||
|
||||
type WebTicketModel struct {
|
||||
Id int64 `json:"id"`
|
||||
Content string `json:"content"`
|
||||
IsDone bool `json:"isDone"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
}
|
51
handler/ticket/store_ticket.go
Normal file
51
handler/ticket/store_ticket.go
Normal file
@ -0,0 +1,51 @@
|
||||
package ticket
|
||||
|
||||
import "git.lxtend.com/qqbot/sqlite3"
|
||||
|
||||
func init() {
|
||||
createTableQuery := `CREATE TABLE IF NOT EXISTS ticket (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
content TEXT NOT NULL,
|
||||
fromQQ TEXT NOT NULL,
|
||||
fromGroup TEXT DEFAULT NULL,
|
||||
isDone BOOLEAN DEFAULT FALSE,
|
||||
isDeleted BOOLEAN DEFAULT FALSE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
`
|
||||
sqlite3.TryCreateTable(createTableQuery)
|
||||
}
|
||||
|
||||
func storeTicket(content string, fromQQ int64, fromGroup int64) (int64, error) {
|
||||
ticket := Ticket{
|
||||
Content: content,
|
||||
FromQQ: fromQQ,
|
||||
FromGroup: fromGroup,
|
||||
}
|
||||
tx, err := sqlite3.GetTran()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer tx.Rollback()
|
||||
res, err := tx.Exec("INSERT INTO ticket (content, fromQQ, fromGroup) VALUES (:content, :fromQQ, :fromGroup)", ticket.Content, ticket.FromQQ, ticket.FromGroup)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
id, _ := res.LastInsertId()
|
||||
tx.Commit()
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func setTicketDone(id int) error {
|
||||
tx, err := sqlite3.GetTran()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tx.Rollback()
|
||||
_, err = tx.Exec("UPDATE ticket SET isDone = TRUE WHERE id = ?", id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
tx.Commit()
|
||||
return nil
|
||||
}
|
55
handler/ticket/ticket.go
Normal file
55
handler/ticket/ticket.go
Normal file
@ -0,0 +1,55 @@
|
||||
package ticket
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"git.lxtend.com/qqbot/handler"
|
||||
"git.lxtend.com/qqbot/model"
|
||||
)
|
||||
|
||||
func init() {
|
||||
// Register the handler with the server
|
||||
handler.RegisterHandler("提单", newTicket)
|
||||
handler.RegisterHandler("结单", doneTicket)
|
||||
}
|
||||
|
||||
func newTicket(msg model.Message) model.Reply {
|
||||
id, err := storeTicket(msg.RawMsg[len("提单 "):], msg.UserId, msg.GroupInfo.GroupId)
|
||||
if err != nil {
|
||||
return model.Reply{
|
||||
ReplyMsg: fmt.Sprintf("提单失败: %s", err.Error()),
|
||||
ReferOriginMsg: true,
|
||||
FromMsg: msg,
|
||||
}
|
||||
}
|
||||
return model.Reply{
|
||||
ReplyMsg: fmt.Sprintf("提单成功,可以至 https://lxtend.com/qbot/ticket?id=%d 查看工单", id),
|
||||
ReferOriginMsg: true,
|
||||
FromMsg: msg,
|
||||
}
|
||||
}
|
||||
|
||||
func doneTicket(msg model.Message) model.Reply {
|
||||
id, err := strconv.Atoi(msg.RawMsg[len("结单 "):])
|
||||
if err != nil {
|
||||
return model.Reply{
|
||||
ReplyMsg: fmt.Sprintf("结单失败: %s", err.Error()),
|
||||
ReferOriginMsg: true,
|
||||
FromMsg: msg,
|
||||
}
|
||||
}
|
||||
err = setTicketDone(id)
|
||||
if err != nil {
|
||||
return model.Reply{
|
||||
ReplyMsg: fmt.Sprintf("结单失败: %s", err.Error()),
|
||||
ReferOriginMsg: true,
|
||||
FromMsg: msg,
|
||||
}
|
||||
}
|
||||
return model.Reply{
|
||||
ReplyMsg: "结单成功",
|
||||
ReferOriginMsg: true,
|
||||
FromMsg: msg,
|
||||
}
|
||||
}
|
@ -9,6 +9,7 @@ import (
|
||||
_ "git.lxtend.com/qqbot/handler/jrrp"
|
||||
_ "git.lxtend.com/qqbot/handler/roll"
|
||||
_ "git.lxtend.com/qqbot/handler/scoresaber"
|
||||
_ "git.lxtend.com/qqbot/handler/ticket"
|
||||
_ "git.lxtend.com/qqbot/handler/urlparser"
|
||||
|
||||
// _ "git.lxtend.com/qqbot/handler/wordle"
|
||||
|
Loading…
x
Reference in New Issue
Block a user