Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["invite_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = ["//vendor/github.com/smartystreets/goconvey/convey:go_default_library"],
)
go_library(
name = "go_default_library",
srcs = [
"common.go",
"http.go",
"invite.go",
"medal.go",
"pendant.go",
"upload.go",
],
importpath = "go-common/app/admin/main/usersuit/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/usersuit/conf:go_default_library",
"//app/admin/main/usersuit/model:go_default_library",
"//app/admin/main/usersuit/service:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/permit:go_default_library",
"//library/net/metadata:go_default_library",
"//library/xstr:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,29 @@
package http
import (
"go-common/app/admin/main/usersuit/model"
bm "go-common/library/net/http/blademaster"
)
func httpData(c *bm.Context, data interface{}, pager *model.Pager) {
res := make(map[string]interface{})
if data == nil {
data = struct{}{}
}
if pager == nil {
pager = &model.Pager{}
}
res["data"] = data
res["pager"] = &model.Pager{
Total: pager.Total,
PN: pager.PN,
PS: pager.PS,
Order: pager.Order,
Sort: pager.Sort,
}
c.JSONMap(res, nil)
}
func httpCode(c *bm.Context, err error) {
c.JSON(nil, err)
}

View File

@@ -0,0 +1,91 @@
package http
import (
"net/http"
"go-common/app/admin/main/usersuit/conf"
"go-common/app/admin/main/usersuit/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/permit"
)
var (
svc *service.Service
authSvc *permit.Permit
)
// Init fot init open service
func Init(c *conf.Config, s *service.Service) {
svc = s
authSvc = permit.New(c.Auth)
engine := bm.DefaultServer(c.BM)
innerRouter(engine)
// init internal server
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
// innerRouter
func innerRouter(e *bm.Engine) {
// ping monitor
e.Ping(ping)
// internal api
bg := e.Group("/x/admin/usersuit")
{
// invite
bg.POST("/invite/generate", authSvc.Permit("INVITE_INFO_ADMIN"), generate)
bg.GET("/invite/list", authSvc.Permit("INVITE_INFO_SEARCH"), list)
// new pendant
bg.GET("/pendant/info/list", authSvc.Permit("PENDANT_INFO_LIST"), pendantInfoList) // 挂件列表(带分页)
bg.GET("/pendant/info/id", authSvc.Permit("PENDANT_INFO_ID"), pendantInfoID) // 挂件详情
bg.GET("/pendant/group/id", authSvc.Permit("PENDANT_GROUP_ID"), pendantGroupID) // 挂件分组详情
bg.GET("/pendant/group/list", authSvc.Permit("PENDANT_GROUP_LIST"), pendantGroupList) // 挂件分组列表(带分页)
bg.GET("/pendant/group/all", authSvc.Permit("PENDANT_GROUP_ALL"), pendantGroupAll) // 挂件分组列表(不带分页) 这个筛选列表可不加权限
bg.GET("/pendant/info/all/no/page", authSvc.Permit("PENDANT_INFO_ALL_NO_PAGE"), pendantInfoAllNoPage) // 在售挂件(不带分页) 这个筛选列表可不加权限
bg.POST("/pendant/add/info", authSvc.Permit("PENDANT_ADD_INFO"), addPendantInfo) // 添加挂件
bg.POST("/pendant/up/info", authSvc.Permit("PENDANT_UP_INFO"), upPendantInfo) // 更新挂件
bg.POST("/pendant/up/group/status", authSvc.Permit("PENDANT_UP_GROUP_STATUS"), upPendantGroupStatus) // 更新挂件分组状态
bg.POST("/pendant/up/info/status", authSvc.Permit("PENDANT_UP_INFO_STATUS"), upPendantInfoStatus) // 更新挂件状态
bg.POST("/pendant/add/group", authSvc.Permit("PENDANT_ADD_GROUP"), addPendantGroup) // 添加挂件分组
bg.POST("/pendant/up/group", authSvc.Permit("PENDANT_UP_GROUP"), upPendantGroup) // 更新挂件分组
bg.GET("/pendant/orders", authSvc.Permit("PENDANT_ORDERS"), pendantOrders) // 挂件订单列表
bg.POST("/pendant/equip", authSvc.Permit("PENDANT_EQUIP"), equipPendant) // 装备挂件
bg.GET("/user/pendant/pkg", authSvc.Permit("USER_PENDANT_PKG"), userPendantPKG) // 用户可用挂件背包列表
bg.GET("/user/pkg/details", authSvc.Permit("USER_PKG_DETAILS"), userPKGDetails) // 用户所属挂件详情
bg.POST("/pendant/up/pkg", authSvc.Permit("PENDANT_UP_PKG"), upPendantPKG) // 更新或激活用户挂件
bg.POST("/pendant/mutli/send", authSvc.Permit("PENDANT_MUTLI_SEND"), mutliSend) // 多用户发送挂件
bg.GET("/pendant/oper/log", authSvc.Permit("PENDANT_OPER_LOG"), pendantOperlog) // 发放挂件操作日志
bg.POST("/face/upload", upload) // 上传图片
//medal
bg.GET("/medal", authSvc.Permit("MEDAL_INFO_LIST"), medalList) // 勋章列表
bg.GET("/medal/id", authSvc.Permit("MEDAL_INFO_ID"), medalView) // 勋章查看
bg.POST("/medal/add", authSvc.Permit("MEDAL_INFO_ADD"), medalAdd) // 勋章添加
bg.POST("/medal/edit", authSvc.Permit("MEDAL_INFO_EDIT"), medalEdit) // 勋章编辑
bg.GET("/medal/group", authSvc.Permit("MEDAL_GROUP_LIST"), medalGroup) // 勋章分组列表
bg.GET("/medal/group/view", authSvc.Permit("MEDAL_GROUP_VIEW"), medalGroupView) // 勋章分组查看单个
bg.GET("/medal/group/parent", authSvc.Permit("MEDAL_GROUP_PARENT"), medalGroupParent) // 勋章父辈分组列表
bg.POST("/medal/group/add", authSvc.Permit("MEDAL_GROUP_ADD"), medalGroupAdd) // 勋章分组添加
bg.POST("/medal/group/edit", authSvc.Permit("MEDAL_GROUP_EDIT"), medalGroupEdit) // 勋章分组编辑
bg.GET("/medal/member/mid", authSvc.Permit("MEDAL_MEMBER_MID"), medalMemberMID) // 勋章会员管理
bg.POST("/medal/member/edit", authSvc.Permit("MEDAL_MEMBER_EDIT"), medalOwnerUpActivated) // 勋章会员编辑激活
bg.GET("/medal/member/add/list", authSvc.Permit("MEDAL_MEMBER_ADD_LIST"), medalMemberAddList) // 勋章会员可添加列表
bg.POST("/medal/member/add", authSvc.Permit("MEDAL_MEMBER_ADD"), medalMemberAdd) // 勋章会员添加
bg.POST("/medal/member/del", authSvc.Permit("MEDAL_MEMBER_DEL"), medalMemberDel) // 勋章会员删除
bg.POST("/medal/batch/add", authSvc.Permit("MEDAL_BATCH_ADD"), medalBatchAdd) // 勋章批量添加
bg.GET("/medal/oper/log", authSvc.Permit("MEDAL_OPER_LOG"), medalOperlog) // 勋章操作日志
}
}
// ping check server ok.
func ping(c *bm.Context) {
err := svc.Ping(c)
if err != nil {
log.Error("usersuit admin ping error")
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}

View File

@@ -0,0 +1,132 @@
package http
import (
"strconv"
"time"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
const (
_format = "2006-01-02"
)
var (
_loc = time.Now().Location()
)
// generate generate invite code in batches.
func generate(c *bm.Context) {
var (
err error
params = c.Request.Form
)
numStr := params.Get("num")
if numStr == "" {
httpCode(c, ecode.RequestErr)
return
}
num, err := strconv.ParseInt(numStr, 10, 64)
if err != nil {
httpCode(c, ecode.RequestErr)
return
}
midStr := params.Get("mid")
if midStr == "" {
httpCode(c, ecode.RequestErr)
return
}
mid, err := strconv.ParseInt(midStr, 10, 64)
if err != nil {
httpCode(c, ecode.RequestErr)
return
}
expireDayStr := params.Get("expire")
if expireDayStr == "" {
httpCode(c, ecode.RequestErr)
return
}
expireDay, err := strconv.ParseInt(expireDayStr, 10, 64)
if err != nil {
httpCode(c, ecode.RequestErr)
return
}
invs, err := svc.Generate(c, mid, num, expireDay)
if err != nil {
log.Error("service.Generate(%d, %d, %d) error(%v)", mid, num, expireDay, err)
httpCode(c, err)
return
}
httpData(c, invs, nil)
}
// list get invite codes range from and to.
func list(c *bm.Context) {
params := c.Request.Form
midStr := params.Get("mid")
if midStr == "" {
httpCode(c, ecode.RequestErr)
return
}
mid, err := strconv.ParseInt(midStr, 10, 64)
if err != nil {
httpCode(c, ecode.RequestErr)
return
}
fromStr := params.Get("from")
toStr := params.Get("to")
if fromStr == "" || toStr == "" {
httpCode(c, ecode.RequestErr)
return
}
from, to, ok := rangeDate(fromStr, toStr)
if !ok {
httpCode(c, ecode.RequestErr)
return
}
fromTs := from.Unix()
toTs := to.Unix()
if fromTs < 0 || toTs < 0 || fromTs > toTs {
httpCode(c, ecode.RequestErr)
return
}
invs, err := svc.List(c, mid, fromTs, toTs)
if err != nil {
log.Error("service.List(%d, %d, %d) error(%v)", mid, from, to, err)
httpCode(c, err)
return
}
httpData(c, invs, nil)
}
func rangeDate(fromStr, toStr string) (from, to time.Time, ok bool) {
ok = true
if fromStr == "" || toStr == "" {
ok = false
return
}
fromDate, err := time.ParseInLocation(_format, fromStr, _loc)
if err != nil {
ok = false
return
}
toDate, err := time.ParseInLocation(_format, toStr, _loc)
if err != nil {
ok = false
return
}
from = time.Date(fromDate.Year(), fromDate.Month(), fromDate.Day(), 0, 0, 0, 0, fromDate.Location())
to = time.Date(toDate.Year(), toDate.Month(), toDate.Day(), 23, 59, 59, 0, toDate.Location())
return
}

View File

@@ -0,0 +1,23 @@
package http
import (
"testing"
. "github.com/smartystreets/goconvey/convey"
)
const (
_outFormat = "2006-01-02 15:04:05"
)
func TestInit(t *testing.T) {
Convey("range when from str equal to to str", t, func() {
fromStr := "2017-12-25"
toStr := "2017-12-25"
from, to, ok := rangeDate(fromStr, toStr)
So(ok, ShouldEqual, true)
So(from.Format(_outFormat), ShouldEqual, "2017-12-25 00:00:00")
So(to.Format(_outFormat), ShouldEqual, "2017-12-25 23:59:59")
So(to.Unix()-from.Unix(), ShouldEqual, 86399)
})
}

View File

@@ -0,0 +1,299 @@
package http
import (
"fmt"
"strconv"
"go-common/app/admin/main/usersuit/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// medal.
func medalList(c *bm.Context) {
var (
err error
res []*model.MedalInfo
)
if res, err = svc.Medal(c); err != nil {
httpCode(c, err)
return
}
httpData(c, res, nil)
}
// medalView .
func medalView(c *bm.Context) {
arg := new(struct {
ID int64 `form:"id" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
var (
err error
np *model.MedalInfo
)
if np, err = svc.MedalView(c, arg.ID); err != nil {
httpCode(c, err)
return
}
np.Image = "http://i0.hdslb.com" + np.Image
np.ImageSmall = "http://i0.hdslb.com" + np.ImageSmall
httpData(c, np, nil)
}
// medalAdd add medal .
func medalAdd(c *bm.Context) {
var (
err error
)
arg := new(model.Medal)
if err = c.Bind(arg); err != nil {
return
}
if err = svc.AddMedal(c, arg); err != nil {
httpCode(c, err)
return
}
httpCode(c, nil)
}
func medalEdit(c *bm.Context) {
var (
err error
)
arg := new(model.Medal)
if err = c.Bind(arg); err != nil {
return
}
if err = svc.UpMedal(c, arg.ID, arg); err != nil {
httpCode(c, err)
return
}
httpCode(c, nil)
}
func medalGroup(c *bm.Context) {
var (
err error
res []*model.MedalGroup
)
if res, err = svc.MedalGroupInfo(c); err != nil {
httpCode(c, err)
return
}
httpData(c, res, nil)
}
func medalGroupView(c *bm.Context) {
arg := new(struct {
ID int64 `form:"id" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
var (
err error
res *model.MedalGroup
)
if res, err = svc.MedalGroupByGid(c, arg.ID); err != nil {
httpCode(c, err)
return
}
httpData(c, res, nil)
}
func medalGroupParent(c *bm.Context) {
var (
err error
res []*model.MedalGroup
)
if res, err = svc.MedalGroupParent(c); err != nil {
httpCode(c, err)
return
}
httpData(c, res, nil)
}
func medalGroupAdd(c *bm.Context) {
var (
err error
)
arg := new(model.MedalGroup)
if err = c.Bind(arg); err != nil {
return
}
if err = svc.MedalGroupAdd(c, arg); err != nil {
httpCode(c, err)
return
}
httpCode(c, nil)
}
func medalGroupEdit(c *bm.Context) {
var (
err error
)
arg := new(model.MedalGroup)
if err = c.Bind(arg); err != nil {
return
}
if err = svc.MedalGroupUp(c, arg.ID, arg); err != nil {
httpCode(c, err)
return
}
httpCode(c, nil)
}
func medalMemberMID(c *bm.Context) {
arg := new(struct {
MID int64 `form:"mid" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
var (
err error
res []*model.MedalMemberMID
)
if res, err = svc.MedalOwner(c, arg.MID); err != nil {
httpCode(c, err)
return
}
httpData(c, res, nil)
}
func medalOwnerUpActivated(c *bm.Context) {
arg := new(struct {
ID int64 `form:"id" validate:"required"`
MID int64 `form:"mid" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
var (
err error
)
if err = svc.MedalOwnerUpActivated(c, arg.MID, arg.ID); err != nil {
httpCode(c, err)
return
}
httpCode(c, nil)
}
func medalMemberAddList(c *bm.Context) {
arg := new(struct {
MID int64 `form:"mid" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
var (
err error
res []*model.MedalMemberAddList
)
if res, err = svc.MedalOwnerAddList(c, arg.MID); err != nil {
httpCode(c, err)
return
}
httpData(c, res, nil)
}
func medalMemberAdd(c *bm.Context) {
arg := new(struct {
MID int64 `form:"mid" validate:"required"`
NID int64 `form:"nid" validate:"required"`
Title string `form:"title"`
Message string `form:"message"`
OID int64 `form:"oper_id" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
var (
err error
)
if err = svc.MedalOwnerAdd(c, arg.MID, arg.NID, arg.Title, arg.Message, arg.OID); err != nil {
httpCode(c, err)
return
}
httpCode(c, nil)
}
func medalMemberDel(c *bm.Context) {
arg := new(struct {
MID int64 `form:"mid" validate:"required"`
NID int64 `form:"nid" validate:"required"`
IsDel int8 `form:"is_del"`
Title string `form:"title"`
Message string `form:"message"`
})
if err := c.Bind(arg); err != nil {
return
}
var (
err error
)
if err = svc.MedalOwnerDel(c, arg.MID, arg.NID, arg.IsDel, arg.Title, arg.Message); err != nil {
httpCode(c, err)
return
}
httpCode(c, nil)
}
func medalBatchAdd(c *bm.Context) {
var (
err error
nid int64
)
f, h, err := c.Request.FormFile("file")
if err != nil {
httpCode(c, ecode.RequestErr)
return
}
defer f.Close()
params := c.Request.Form
nidStr := params.Get("nid")
nid, err = strconv.ParseInt(nidStr, 10, 64)
if err != nil || nid <= 0 {
fmt.Printf("nid:%+v\n", nid)
httpCode(c, ecode.RequestErr)
return
}
msg, err := svc.BatchAdd(c, nid, f, h)
if err != nil || msg != "" {
log.Error("svc.BatchAdd error(%v), msg(%v)", err, msg)
httpCode(c, ecode.ServerErr)
return
}
res := new(struct {
Message string `form:"message"`
})
res.Message = msg
httpData(c, res, nil)
}
func medalOperlog(c *bm.Context) {
arg := new(struct {
PN int `form:"pn"`
PS int `form:"ps"`
MID int64 `form:"mid" validate:"required"`
})
arg.PN, arg.PS = 1, 20
if err := c.Bind(arg); err != nil {
return
}
opers, pager, err := svc.MedalOperlog(c, arg.MID, arg.PN, arg.PS)
if err != nil {
log.Error("svc.MedalOperlog(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
if len(opers) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, opers, pager)
}

View File

@@ -0,0 +1,391 @@
package http
import (
"encoding/csv"
"io/ioutil"
"strconv"
"strings"
"go-common/app/admin/main/usersuit/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"go-common/library/xstr"
)
func pendantInfoList(c *bm.Context) {
arg := new(model.ArgPendantGroupList)
arg.PN, arg.PS = 1, 20
if err := c.Bind(arg); err != nil {
return
}
pis, pager, err := svc.PendantInfoList(c, arg)
if err != nil {
log.Error("svc.PendantInfoList(%+v) err(%v)", arg, err)
return
}
if len(pis) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, pis, pager)
}
func pendantInfoID(c *bm.Context) {
arg := new(struct {
PID int64 `form:"pid" validate:"required"`
GID int64 `form:"gid" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
pi, err := svc.PendantInfoID(c, arg.PID, arg.GID)
if err != nil {
log.Error("svc.PendantInfoID(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpData(c, pi, nil)
}
func pendantGroupID(c *bm.Context) {
arg := new(struct {
GID int64 `form:"gid" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
pg, err := svc.PendantGroupID(c, arg.GID)
if err != nil {
log.Error("svc.PendantGroupID(%+v) err(%v)", arg, err)
return
}
httpData(c, pg, nil)
}
func pendantGroupList(c *bm.Context) {
arg := new(model.ArgPendantGroupList)
arg.PN, arg.PS = 1, 20
if err := c.Bind(arg); err != nil {
return
}
pgs, pager, err := svc.PendantGroupList(c, arg)
if err != nil {
log.Error("svc.PendantGroupList(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
if len(pgs) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, pgs, pager)
}
func pendantGroupAll(c *bm.Context) {
pgs, err := svc.PendantGroupAll(c)
if err != nil {
log.Error("svc.PendantGroupAll() err(%v)", err)
httpCode(c, err)
return
}
httpData(c, pgs, nil)
}
func pendantInfoAllNoPage(c *bm.Context) {
pis, err := svc.PendantInfoAllNoPage(c)
if err != nil {
log.Error("svc.pendantInfoAllNoPage() err(%v)", err)
httpCode(c, err)
return
}
httpData(c, pis, nil)
}
func addPendantInfo(c *bm.Context) {
arg := new(model.ArgPendantInfo)
if err := c.Bind(arg); err != nil {
return
}
err := svc.AddPendantInfo(c, arg)
if err != nil {
log.Error("svc.AddPendantInfo(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpCode(c, nil)
}
func upPendantInfo(c *bm.Context) {
arg := new(model.ArgPendantInfo)
if err := c.Bind(arg); err != nil {
return
}
err := svc.UpPendantInfo(c, arg)
if err != nil {
log.Error("svc.UpPendantInfo(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpCode(c, nil)
}
func upPendantGroupStatus(c *bm.Context) {
arg := new(struct {
GID int64 `form:"gid" validate:"required"`
Status int8 `form:"status"`
})
if err := c.Bind(arg); err != nil {
return
}
err := svc.UpPendantGroupStatus(c, arg.GID, arg.Status)
if err != nil {
log.Error("svc.UpPendantGroupStatus(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpCode(c, nil)
}
func upPendantInfoStatus(c *bm.Context) {
arg := new(struct {
PID int64 `form:"pid" validate:"required"`
Status int8 `form:"status"`
})
if err := c.Bind(arg); err != nil {
return
}
err := svc.UpPendantInfoStatus(c, arg.PID, arg.Status)
if err != nil {
log.Error("svc.UpPendantInfoStatus(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpCode(c, nil)
}
func addPendantGroup(c *bm.Context) {
arg := new(model.ArgPendantGroup)
if err := c.Bind(arg); err != nil {
return
}
err := svc.AddPendantGroup(c, arg)
if err != nil {
log.Error("svc.AddPendantGroup(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpCode(c, nil)
}
func upPendantGroup(c *bm.Context) {
arg := new(model.ArgPendantGroup)
if err := c.Bind(arg); err != nil {
return
}
err := svc.UpPendantGroup(c, arg)
if err != nil {
log.Error("svc.UpPendantGroup(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpCode(c, nil)
}
func pendantOrders(c *bm.Context) {
arg := new(model.ArgPendantOrder)
arg.PN, arg.PS = 1, 20
if err := c.Bind(arg); err != nil {
return
}
pos, pager, err := svc.PendantOrders(c, arg)
if err != nil {
log.Error("svc.PendantOrders(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
if len(pos) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, pos, pager)
}
func equipPendant(c *bm.Context) {
arg := new(struct {
UID int64 `form:"uid" validate:"required"`
PID int64 `form:"pid" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
err := svc.EquipPendant(c, arg.UID, arg.PID)
if err != nil {
log.Error("svc.EquipPendant(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpCode(c, nil)
}
func userPendantPKG(c *bm.Context) {
arg := new(struct {
UID int64 `form:"uid" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
pkg, equip, err := svc.PendantPKG(c, arg.UID)
if err != nil {
log.Error("svc.PendantPKG(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpData(c, map[string]interface{}{
"pkg": pkg,
"equip": equip,
}, nil)
}
func userPKGDetails(c *bm.Context) {
arg := new(struct {
UID int64 `form:"uid" validate:"required"`
PID int64 `form:"pid" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
pkgs, err := svc.UserPKGDetails(c, arg.UID, arg.PID)
if err != nil {
log.Error("svc.UserPKGDetails(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpData(c, pkgs, nil)
}
func upPendantPKG(c *bm.Context) {
arg := new(model.ArgPendantPKG)
if err := c.Bind(arg); err != nil {
return
}
msg := &model.SysMsg{IsMsg: arg.IsMsg, Type: arg.Type, Title: arg.Title, Content: arg.Content, RemoteIP: metadata.String(c, metadata.RemoteIP)}
err := svc.UpPendantPKG(c, arg.UID, arg.PID, arg.Day, msg, arg.OID)
if err != nil {
log.Error("svc.UpPendantPKG(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
httpCode(c, nil)
}
// migrate old pedant info to new db.
func mutliSend(c *bm.Context) {
var (
err error
data []byte
uids []int64
)
file, _, err := c.Request.FormFile("file")
if err != nil {
log.Error("upload err(%v)", err)
httpCode(c, err)
return
}
defer file.Close()
data, err = ioutil.ReadAll(file)
if err != nil {
log.Error("ioutil.ReadAll err(%v)", err)
return
}
r := csv.NewReader(strings.NewReader(string(data)))
r.Comma = ','
records, err := r.ReadAll()
if err != nil {
log.Error("r.ReadAll() err(%v)", err)
}
var (
uid int64
muids = make(map[int64]struct{}, len(records))
)
for _, v := range records {
if v[0] == "" {
continue
}
if uid, err = strconv.ParseInt(v[0], 10, 64); err != nil {
log.Error("strconv.ParseInt err(%v)", err)
continue
}
if _, ok := muids[uid]; ok {
continue
}
muids[uid] = struct{}{}
uids = append(uids, uid)
}
if len(uids) == 0 {
log.Warn("uids is nothing to send pendant")
httpCode(c, ecode.RequestErr)
return
}
if len(uids) > 1000 {
httpCode(c, ecode.PendantAboveSendMaxLimit)
return
}
params := c.Request.Form
pidStr := params.Get("pid")
dayStr := params.Get("day")
isMsgStr := params.Get("is_msg")
title := params.Get("title")
content := params.Get("content")
operStr := params.Get("oper_id")
pid, err := strconv.ParseInt(pidStr, 10, 64)
if err != nil {
httpCode(c, ecode.RequestErr)
return
}
day, err := strconv.ParseInt(dayStr, 10, 64)
if err != nil {
httpCode(c, ecode.RequestErr)
return
}
isMsg, err := strconv.ParseBool(isMsgStr)
if err != nil {
httpCode(c, ecode.RequestErr)
return
}
oid, err := strconv.ParseInt(operStr, 10, 64)
if err != nil {
httpCode(c, ecode.RequestErr)
return
}
msg := &model.SysMsg{IsMsg: isMsg, Type: model.MsgTypeCustom, Title: title, Content: content, RemoteIP: metadata.String(c, metadata.RemoteIP)}
if err = svc.MutliSendPendant(c, uids, pid, day, msg, oid); err != nil {
log.Error("svc.MutliSendPendant(%s,%d,%d,%v,%d) err(%v)", xstr.JoinInts(uids), pid, day, msg, oid, err)
httpCode(c, err)
return
}
httpCode(c, nil)
}
func pendantOperlog(c *bm.Context) {
arg := new(struct {
PN int `form:"pn"`
PS int `form:"ps"`
})
arg.PN, arg.PS = 1, 20
if err := c.Bind(arg); err != nil {
return
}
opers, pager, err := svc.PendantOperlog(c, arg.PN, arg.PS)
if err != nil {
log.Error("svc.PendantOperlog(%+v) err(%v)", arg, err)
httpCode(c, err)
return
}
if len(opers) == 0 {
httpData(c, nil, pager)
return
}
httpData(c, opers, pager)
}

View File

@@ -0,0 +1,43 @@
package http
import (
"bytes"
"io/ioutil"
"net/http"
"time"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func upload(c *bm.Context) {
imageFile, _, err := c.Request.FormFile("file")
if err != nil {
log.Error("upload err(%v)", err)
httpCode(c, err)
return
}
defer imageFile.Close()
bs, err := ioutil.ReadAll(imageFile)
if err != nil {
log.Error("ioutil.ReadAll err(%v)", err)
httpCode(c, err)
return
}
filetype := http.DetectContentType(bs)
// var extension string
switch filetype {
case "image/jpeg", "image/jpg", "image/gif", "image/png", "application/pdf":
default:
log.Warn("unknown filetype(%s) ", filetype)
return
}
//重新格式化文件名
local, err := svc.Upload(c, "", filetype, time.Now().Unix(), bytes.NewReader(bs))
if err != nil {
log.Error("svc.Upload error(%v)", err)
httpCode(c, err)
return
}
httpData(c, local, nil)
}