package main
import (
"database/sql"
"fmt"
"log"
"os"
"sort"
_ "github.com/mattn/go-sqlite3"
_ "database/sql"
"github.com/urfave/cli"
"time"
)
func main() {
app := cli.NewApp()
app.EnableBashCompletion = true
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "add,a",
Usage: "添加已完成的工作内容",
},
cli.StringFlag{
Name: "list,l",
Usage: "获取工作列表 ",
},
cli.StringFlag{
Name: "update,u",
Usage: "更新工作内容",
},
cli.StringFlag{
Name: "del,d",
Usage: "删除工作内容",
}, cli.StringFlag{
Name: "commit,c",
Usage: "完成工作内容",
},
}
app.Commands = []cli.Command{
{
Name: "add",
Aliases: []string{"a"},
Usage: "add work",
Action: func(c *cli.Context) error {
addWork(c)
return nil
},
},
{
Name: "list",
Aliases: []string{"l"},
Usage: "get worklist",
Action: func(c *cli.Context) error {
getWorkList(c)
return nil
},
},
{
Name: "update",
Aliases: []string{"u"},
Usage: "update work",
Action: func(c *cli.Context) error {
updateWorkInfo(c)
return nil
},
},
{
Name: "del",
Aliases: []string{"d"},
Usage: "delete work by id",
Action: func(c *cli.Context) error {
delWorkById(c)
return nil
},
},
{
Name: "commit",
Aliases: []string{"c"},
Usage: "commit work",
Action: func(c *cli.Context) error {
commitWorkById(c)
return nil
},
},
}
sort.Sort(cli.FlagsByName(app.Flags))
sort.Sort(cli.CommandsByName(app.Commands))
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
func commitWorkById(c *cli.Context) {
db, err := sql.Open("sqlite3", "./work.db")
time := time.Now().Format("2006-01-02 15:04")
stmt, err := db.Prepare("update workinfo set state=?,etime=? where id=?")
res, err := stmt.Exec("1", time, c.Args().First())
_, err = res.RowsAffected()
checkErr(err)
fmt.Println("完成工作:", c.Args().First())
db.Close()
}
func delWorkById(c *cli.Context) {
db, err := sql.Open("sqlite3", "./work.db")
stmt, err := db.Prepare("delete from workinfo where id=?")
res, err := stmt.Exec(c.Args().First())
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("删除工作内容:", c.Args().First(), affect)
db.Close()
}
func updateWorkInfo(c *cli.Context) {
db, err := sql.Open("sqlite3", "./work.db")
stmt, err := db.Prepare("update workinfo set info=? where id=?")
res, err := stmt.Exec(c.Args().First(), c.Args().Get(1))
_, err = res.RowsAffected()
checkErr(err)
fmt.Println("更新工作内容:", c.Args().First())
db.Close()
}
func getWorkList(c *cli.Context) {
db, err := sql.Open("sqlite3", "./work.db")
//查询数据
sql := "SELECT * FROM workinfo where 1=1 "
if (len(c.Args().Get(0)) > 0) {
sql = sql + "and state == " + c.Args().Get(0)
}
rows, err := db.Query(sql)
for rows.Next() {
var id int
var info string
var stime time.Time
var etime time.Time
var state string
stateVal:="未完成"
err = rows.Scan(&id, &info, &stime, &etime, &state)
if state=="1"{
stateVal="已完成"
}
checkErr(err)
fmt.Println("#",id,"内容",info, "开始",stime.Format("2006-01-02 15:04"), "结束",etime.Format("2006-01-02 15:04"), stateVal)
}
checkErr(err)
db.Close()
}
func addWork(c *cli.Context) {
db, err := sql.Open("sqlite3", "./work.db")
//插入数据
stmt, err := db.Prepare("INSERT INTO workinfo(info, stime, etime,state) values(?,?,?,?)")
stime := time.Now().Format("2006-01-02 15:04")
etime := time.Now().Format("2006-01-02 15:04")
state := "0"
if (len(c.Args().Get(1)) > 0) {
stime = c.Args().Get(1)
}
if (len(c.Args().Get(2)) > 0) {
etime = c.Args().Get(2)
}
if (len(c.Args().Get(3)) > 0) {
state = c.Args().Get(3)
}
res, err := stmt.Exec(c.Args().First(), stime, etime, state)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println("新增工作内容完成:", c.Args().First(), id)
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
如何使用(假设命名为iwork.go)
go run iwork.go a 工作内容 2019-01-01 2019-01-02 0
go run iwork.go l 0