2019-04-22 02:59:20 +00:00

139 lines
4.0 KiB
Go

package manager
import (
"context"
"database/sql"
"fmt"
"strings"
upgrpc "go-common/app/service/main/up/api/v1"
"go-common/app/service/main/up/dao"
"go-common/app/service/main/up/model"
xsql "go-common/library/database/sql"
"go-common/library/log"
)
const (
_insertGroup = "INSERT INTO up_group (name, tag, short_tag, colors, remark) VALUES (?,?,?,?,?)"
_checkGroupExist = "SELECT COUNT(0) FROM up_group WHERE (name=? OR tag=? OR short_tag=?) "
_updateGroupByID = "UPDATE up_group SET name=?, tag=?, short_tag=?, colors=?, remark=? WHERE id=?"
_removeGroupByID = "UPDATE up_group SET state=0 WHERE id=?"
_selectGroup = "SELECT id, name, tag, short_tag, remark, colors, state FROM up_group "
_upGroupsSQL = "SELECT id, name, tag, short_tag, remark, colors FROM up_group WHERE state = 1"
)
//AddGroup add group in db
func (d *Dao) AddGroup(c context.Context, groupAddInfo *model.AddGroupArg) (res sql.Result, err error) {
var color = fmt.Sprintf("%s|%s", groupAddInfo.FontColor, groupAddInfo.BgColor)
res, err = prepareAndExec(c, d.managerDB, _insertGroup, groupAddInfo.Name, groupAddInfo.Tag, groupAddInfo.ShortTag, color, groupAddInfo.Remark)
return
}
//CheckGroupExist check if group exist
func (d *Dao) CheckGroupExist(c context.Context, groupAddInfo *model.AddGroupArg, exceptid int64) (exist bool, err error) {
var sqlStr = _checkGroupExist
var args = []interface{}{groupAddInfo.Name, groupAddInfo.Tag, groupAddInfo.ShortTag}
if exceptid != 0 {
sqlStr += " AND id != ?"
args = append(args, exceptid)
}
rows, err := prepareAndQuery(c, d.managerDB, sqlStr, args...)
if err != nil {
return
}
defer rows.Close()
var count int
for rows.Next() {
err = rows.Scan(&count)
break
}
if err != nil {
return
}
exist = count > 0
return
}
//UpdateGroup update group
func (d *Dao) UpdateGroup(c context.Context, groupAddInfo *model.EditGroupArg) (res sql.Result, err error) {
if groupAddInfo.AddArg == nil {
return
}
var color = fmt.Sprintf("%s|%s", groupAddInfo.AddArg.FontColor, groupAddInfo.AddArg.BgColor)
res, err = prepareAndExec(c, d.managerDB, _updateGroupByID, groupAddInfo.AddArg.Name, groupAddInfo.AddArg.Tag, groupAddInfo.AddArg.ShortTag, color, groupAddInfo.AddArg.Remark, groupAddInfo.ID)
return
}
//RemoveGroup remove group
func (d *Dao) RemoveGroup(c context.Context, arg *model.RemoveGroupArg) (res sql.Result, err error) {
res, err = prepareAndExec(c, d.managerDB, _removeGroupByID, arg.ID)
return
}
//GetGroup get group
func (d *Dao) GetGroup(c context.Context, arg *model.GetGroupArg) (res []*model.UpGroup, err error) {
var con = dao.Condition{
Key: "state",
Operator: "=",
Value: arg.State,
}
var conditionStr, vals, _ = dao.ConcatCondition(con)
rows, err := prepareAndQuery(c, d.managerDB, _selectGroup+"WHERE "+conditionStr, vals...)
if err != nil {
return
}
defer rows.Close()
// id, name, tag, short_tag, remark, colors
var colorStr string
for rows.Next() {
var group = model.UpGroup{}
err = rows.Scan(&group.ID, &group.Name, &group.Tag, &group.ShortTag, &group.Remark, &colorStr, &group.State)
if err != nil {
log.Error("scan row failed, err=%v", err)
break
}
var colors = strings.Split(colorStr, "|")
if len(colors) >= 2 {
group.FontColor = colors[0]
group.BgColor = colors[1]
}
res = append(res, &group)
}
return
}
// UpGroups get up special group data.
func (d *Dao) UpGroups(c context.Context) (mug map[int64]*upgrpc.UpGroup, err error) {
rows, err := d.managerDB.Query(c, _upGroupsSQL)
if err != nil {
return
}
defer rows.Close()
mug = make(map[int64]*upgrpc.UpGroup)
for rows.Next() {
var (
colorStr string
colors []string
ug = new(upgrpc.UpGroup)
)
if err = rows.Scan(&ug.ID, &ug.Name, &ug.Tag, &ug.ShortTag, &ug.Note, &colorStr); err != nil {
if err == xsql.ErrNoRows {
err = nil
}
return
}
colors = strings.Split(colorStr, "|")
if len(colors) >= 2 {
ug.FontColor = colors[0]
ug.BgColor = colors[1]
}
mug[ug.ID] = ug
}
return
}