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,54 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"business.go",
"dialog.go",
"http.go",
"jointly.go",
"month.go",
"order.go",
"panel.go",
"platform.go",
"privilege.go",
"push.go",
"resouce.go",
"tips.go",
"version.go",
"vip.go",
"welfare.go",
],
importpath = "go-common/app/admin/main/vip/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/vip/conf:go_default_library",
"//app/admin/main/vip/model:go_default_library",
"//app/admin/main/vip/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/binding:go_default_library",
"//library/net/http/blademaster/middleware/permit: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,83 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
const (
_defpn = 1
_defps = 10
)
func business(c *bm.Context) {
var (
err error
r *model.VipBusinessInfo
)
arg := new(model.ArgID)
if err = c.Bind(arg); err != nil {
return
}
if r, err = vipSvc.BusinessInfo(c, int(arg.ID)); err != nil {
c.JSON(nil, err)
return
}
c.JSON(r, nil)
}
func updateBusiness(c *bm.Context) {
var (
err error
arg = new(model.VipBusinessInfo)
)
if err = c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, vipSvc.UpdateBusinessInfo(c, arg))
}
func addBusiness(c *bm.Context) {
var (
err error
arg = new(model.VipBusinessInfo)
)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.AddBusinessInfo(c, arg))
}
func businessList(c *bm.Context) {
var (
infos []*model.VipBusinessInfo
total int64
err error
arg = new(model.ArgPage)
)
if err = c.Bind(arg); err != nil {
return
}
if arg.Pn == 0 {
arg.Pn = _defpn
}
if arg.Ps == 0 {
arg.Ps = _defps
}
if infos, total, err = vipSvc.BusinessList(c, arg.Pn, arg.Ps, arg.Status); err != nil {
c.JSON(nil, err)
return
}
res := new(struct {
Data []*model.VipBusinessInfo `json:"data"`
Total int64 `json:"total"`
})
res.Data = infos
res.Total = total
c.JSON(res, nil)
}

View File

@ -0,0 +1,74 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func dialogList(c *bm.Context) {
arg := new(struct {
AppID int64 `form:"app_id"`
Platform int64 `form:"platform"`
Status string `form:"status"`
})
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.DialogAll(c, arg.AppID, arg.Platform, arg.Status))
}
func dialogInfo(c *bm.Context) {
arg := new(model.ArgID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.DialogByID(c, arg))
}
func dialogSave(c *bm.Context) {
arg := new(model.ConfDialog)
if err := c.Bind(arg); err != nil {
return
}
if arg.StartTime != 0 && arg.EndTime != 0 && arg.StartTime >= arg.EndTime {
c.JSON(nil, ecode.VipDialogTimeErr)
return
}
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
arg.Operator = username.(string)
c.JSON(vipSvc.DialogSave(c, arg))
}
func dialogEnable(c *bm.Context) {
arg := new(struct {
ID int64 `form:"id" validate:"required"`
Stage bool `form:"stage"`
})
if err := c.Bind(arg); err != nil {
return
}
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
c.JSON(vipSvc.DialogEnable(c, &model.ConfDialog{ID: arg.ID, Stage: arg.Stage, Operator: username.(string)}))
}
func dialogDel(c *bm.Context) {
arg := new(model.ArgID)
if err := c.Bind(arg); err != nil {
return
}
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
c.JSON(vipSvc.DialogDel(c, arg, username.(string)))
}

View File

@ -0,0 +1,183 @@
package http
import (
"go-common/app/admin/main/vip/conf"
"go-common/app/admin/main/vip/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/permit"
)
var (
// depend service
vipSvc *service.Service
authSvc *permit.Permit
cf *conf.Config
)
//Init init http
func Init(c *conf.Config) {
cf = c
initService(c)
// init external router
engine := bm.DefaultServer(c.BM)
initRouter(engine)
// init Outer serve
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
// initService init services.
func initService(c *conf.Config) {
vipSvc = service.New(c)
authSvc = permit.New(c.Auth)
}
// initRouter init outer router api path.
func initRouter(e *bm.Engine) {
e.Ping(moPing)
group := e.Group("/x/admin/vip", authSvc.Verify())
{
monthGroup := group.Group("/month", authSvc.Permit("VIP_MONTH"))
{
monthGroup.GET("/list", monthList)
monthGroup.POST("/edit", monthEdit)
monthGroup.GET("/price/list", priceList)
monthGroup.POST("/price/add", priceAdd)
monthGroup.POST("/price/edit", priceEdit)
}
poolGroup := group.Group("/pool", authSvc.Permit("VIP_POOL"))
{
poolGroup.GET("/list", queryPool)
poolGroup.GET("/info", getPool)
poolGroup.POST("/save", savePool)
batchGroup := poolGroup.Group("/batch")
{
batchGroup.GET("/list", queryBatch)
batchGroup.GET("/info", getBatch)
batchGroup.POST("/add", addBatch)
batchGroup.POST("/edit", saveBatch)
batchGroup.POST("/consume", grantResouce)
}
}
batchCodeGroup := group.Group("/batchCode", authSvc.Permit("VIP_BATCH_CODE"))
{
batchCodeGroup.GET("/list", batchCodes)
batchCodeGroup.POST("/save", saveBatchCode)
batchCodeGroup.POST("/frozen", frozenBatchCode)
batchCodeGroup.GET("/export", exportCodes)
codeGroup := batchCodeGroup.Group("/code")
{
codeGroup.GET("/list", codes)
codeGroup.POST("/frozen", frozenCode)
}
}
pushGroup := group.Group("/push", authSvc.Permit("VIP_PUSH"))
{
pushGroup.GET("/list", pushs)
pushGroup.POST("/save", savePush)
pushGroup.GET("/info", push)
pushGroup.GET("/del", delPush)
pushGroup.GET("/disable", disablePush)
}
vipGroup := group.Group("/user", authSvc.Permit("VIP_USER"))
{
vipGroup.POST("/drawback", drawback)
vipGroup.GET("/log/list", historyList)
vipGroup.GET("/info", vipInfo)
}
bizGroup := group.Group("/biz", authSvc.Permit("VIP_BIZ"))
{
bizGroup.GET("/list", businessList)
bizGroup.POST("/add", addBusiness)
bizGroup.GET("/info", business)
bizGroup.POST("/edit", updateBusiness)
}
verGroup := group.Group("/version", authSvc.Permit("VIP_VERSION"))
{
verGroup.GET("/list", versions)
verGroup.POST("/edit", updateVersion)
}
tipsGroup := group.Group("/tips", authSvc.Permit("VIP_TIPS"))
{
tipsGroup.GET("/list", tips)
tipsGroup.GET("/info", tipbyid)
tipsGroup.POST("/add", tipadd)
tipsGroup.POST("/edit", tipupdate)
tipsGroup.GET("/delete", tipdelete)
tipsGroup.POST("/expire", tipexpire)
}
panelGroup := group.Group("/panel")
{
panelGroup.GET("/conf/types", authSvc.Permit("VIP_PRICE_PANEL"), vipPanelTypes)
panelGroup.GET("/conf/list", authSvc.Permit("VIP_PRICE_PANEL"), vipPriceConfigs)
panelGroup.GET("/conf/info", authSvc.Permit("VIP_PRICE_PANEL"), vipPriceConfigID)
panelGroup.POST("/conf/add", authSvc.Permit("VIP_PRICE_PANEL_CONTROL"), addVipPriceConfig)
panelGroup.POST("/conf/up", authSvc.Permit("VIP_PRICE_PANEL_CONTROL"), upVipPriceConfig)
panelGroup.POST("/conf/del", authSvc.Permit("VIP_PRICE_PANEL_CONTROL"), delVipPriceConfig)
panelGroup.GET("/conf/dprice/list", authSvc.Permit("VIP_PRICE_PANEL"), vipDPriceConfigs)
panelGroup.GET("/conf/dprice/info", authSvc.Permit("VIP_PRICE_PANEL"), vipDPriceConfigID)
panelGroup.POST("/conf/dprice/add", authSvc.Permit("VIP_PRICE_PANEL_CONTROL"), addVipDPriceConfig)
panelGroup.POST("/conf/dprice/up", authSvc.Permit("VIP_PRICE_PANEL_CONTROL"), upVipDPriceConfig)
panelGroup.POST("/conf/dprice/del", authSvc.Permit("VIP_PRICE_PANEL_CONTROL"), delVipDPriceConfig)
}
pgGroup := group.Group("/privilege", authSvc.Permit("VIP_PRIVILEGE"))
{
pgGroup.GET("/list", privileges)
pgGroup.POST("/update/state", updatePrivilegeState)
pgGroup.POST("/delete", deletePrivilege)
pgGroup.POST("/update/order", updateOrder)
pgGroup.POST("/add", addPrivilege)
pgGroup.POST("/modify", updatePrivilege)
}
jointlyGroup := group.Group("/jointly", authSvc.Permit("VIP_JOINTLY"))
{
jointlyGroup.GET("/list", jointlys)
jointlyGroup.POST("/add", addJointly)
jointlyGroup.POST("/modify", modifyJointly)
jointlyGroup.POST("/delete", deleteJointly)
}
refundGroup := group.Group("/order", authSvc.Permit("VIP_ORDER"))
{
refundGroup.GET("/list", orderList)
refundGroup.POST("/refund", authSvc.Permit("VIP_REFUND"), refund)
}
dialogGroup := group.Group("/dialog", authSvc.Permit("VIP_DIALOG"))
{
dialogGroup.GET("/list", dialogList)
dialogGroup.GET("/info", dialogInfo)
dialogGroup.POST("/save", dialogSave)
dialogGroup.POST("/enable", dialogEnable)
dialogGroup.POST("/del", dialogDel)
}
platformGroup := group.Group("/platform", authSvc.Permit("VIP_PLATFORM"))
{
platformGroup.GET("/list", platformList)
platformGroup.GET("/info", platformInfo)
platformGroup.POST("/save", platformSave)
platformGroup.POST("/del", platformDel)
}
welfareGroup := group.Group("/welfare", authSvc.Permit("VIP_WELFARE"))
{
welfareGroup.POST("/type/save", welfareTypeSave)
welfareGroup.POST("/type/state", welfareTypeState)
welfareGroup.GET("/type/list", welfareTypeList)
welfareGroup.POST("/save", welfareSave)
welfareGroup.POST("/state", welfareState)
welfareGroup.GET("/list", welfareList)
welfareGroup.POST("/batch/upload", welfareBatchUpload)
welfareGroup.GET("/batch/list", welfareBatchList)
welfareGroup.POST("/batch/state", welfareBatchState)
}
}
}
func moPing(c *bm.Context) {
vipSvc.Ping(c)
}

View File

@ -0,0 +1,51 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func jointlys(c *bm.Context) {
arg := new(model.ArgQueryJointly)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.JointlysByState(c, arg.State))
}
func addJointly(c *bm.Context) {
arg := new(model.ArgAddJointly)
if err := c.Bind(arg); err != nil {
return
}
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
arg.Operator = username.(string)
c.JSON(nil, vipSvc.AddJointly(c, arg))
}
func modifyJointly(c *bm.Context) {
arg := new(model.ArgModifyJointly)
if err := c.Bind(arg); err != nil {
return
}
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
arg.Operator = username.(string)
c.JSON(nil, vipSvc.ModifyJointly(c, arg))
}
func deleteJointly(c *bm.Context) {
arg := new(model.ArgJointlyID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.DeleteJointly(c, arg.ID))
}

View File

@ -0,0 +1,92 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func monthList(c *bm.Context) {
var (
res []*model.VipMonth
err error
)
if res, err = vipSvc.MonthList(c); err != nil {
c.JSON(nil, err)
return
}
page := &model.PageInfo{Count: len(res), Item: res}
c.JSON(page, nil)
}
func monthEdit(c *bm.Context) {
var (
err error
arg = new(model.ArgIDExtra)
)
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
if err = c.Bind(arg); err != nil {
return
}
arg.Operator = username.(string)
c.JSON(nil, vipSvc.MonthEdit(c, arg.ID, arg.Status, arg.Operator))
}
func priceList(c *bm.Context) {
var (
res []*model.VipMonthPrice
err error
arg = new(model.ArgID)
)
if err = c.Bind(arg); err != nil {
return
}
if res, err = vipSvc.PriceList(c, arg.ID); err != nil {
c.JSON(nil, err)
return
}
page := &model.PageInfo{Count: len(res), Item: res}
c.JSON(page, nil)
}
func priceAdd(c *bm.Context) {
var (
err error
mp = new(model.VipMonthPrice)
)
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
mp.Operator = username.(string)
if err = c.Bind(mp); err != nil {
return
}
c.JSON(nil, vipSvc.PriceAdd(c, mp))
}
func priceEdit(c *bm.Context) {
var (
err error
mp = new(model.VipMonthPrice)
)
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
mp.Operator = username.(string)
if err = c.Bind(mp); err != nil {
return
}
if mp.ID <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, vipSvc.PriceEdit(c, mp))
}

View File

@ -0,0 +1,36 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func orderList(c *bm.Context) {
arg := new(model.ArgPayOrder)
if err := c.Bind(arg); err != nil {
return
}
res, count, err := vipSvc.OrderList(c, arg)
info := new(model.PageInfo)
info.Count = int(count)
info.Item = res
info.CurrentPage = arg.PN
c.JSON(info, err)
}
func refund(c *bm.Context) {
arg := new(struct {
OrderNo string `form:"order_no" validate:"required"`
RefundAmount float64 `form:"refund_amount" validate:"required"`
})
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.Refund(c, arg.OrderNo, username.(string), arg.RefundAmount))
}

View File

@ -0,0 +1,95 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func vipPriceConfigs(c *bm.Context) {
arg := new(model.ArgVipPrice)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.VipPriceConfigs(c, arg))
}
func vipPriceConfigID(c *bm.Context) {
arg := new(model.ArgVipPriceID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.VipPriceConfigID(c, arg))
}
func addVipPriceConfig(c *bm.Context) {
arg := new(model.ArgAddOrUpVipPrice)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.AddVipPriceConfig(c, arg))
}
func upVipPriceConfig(c *bm.Context) {
arg := new(model.ArgAddOrUpVipPrice)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, vipSvc.UpVipPriceConfig(c, arg))
}
func delVipPriceConfig(c *bm.Context) {
arg := new(model.ArgVipPriceID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.DelVipPriceConfig(c, arg))
}
func vipDPriceConfigs(c *bm.Context) {
arg := new(model.ArgVipPriceID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.VipDPriceConfigs(c, arg))
}
func vipDPriceConfigID(c *bm.Context) {
arg := new(model.ArgVipDPriceID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.VipDPriceConfigID(c, arg))
}
func addVipDPriceConfig(c *bm.Context) {
arg := new(model.ArgAddOrUpVipDPrice)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.AddVipDPriceConfig(c, arg))
}
func upVipDPriceConfig(c *bm.Context) {
arg := new(model.ArgAddOrUpVipDPrice)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.UpVipDPriceConfig(c, arg))
}
func delVipDPriceConfig(c *bm.Context) {
arg := new(model.ArgVipDPriceID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.DelVipDPriceConfig(c, arg))
}
func vipPanelTypes(c *bm.Context) {
c.JSON(vipSvc.PanelPlatFormTypes(c))
}

View File

@ -0,0 +1,59 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func platformList(c *bm.Context) {
arg := new(struct {
Order string `form:"order" default:"desc"`
// PN int `form:"pn" default:"1"`
// PS int `form:"ps" default:"20"`
})
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.PlatformAll(c, arg.Order))
}
func platformInfo(c *bm.Context) {
arg := new(model.ArgID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.PlatformByID(c, arg))
}
func platformSave(c *bm.Context) {
arg := new(model.ConfPlatform)
if err := c.Bind(arg); err != nil {
return
}
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
// platform必填可选项为android、ios、web、public
if _, ok := model.PlatformMap[arg.Platform]; !ok {
c.JSON(nil, ecode.RequestErr)
return
}
arg.Operator = username.(string)
c.JSON(vipSvc.PlatformSave(c, arg))
}
func platformDel(c *bm.Context) {
arg := new(model.ArgID)
if err := c.Bind(arg); err != nil {
return
}
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
c.JSON(vipSvc.PlatformDel(c, arg, username.(string)))
}

View File

@ -0,0 +1,234 @@
package http
import (
"io/ioutil"
"mime/multipart"
"net/http"
"regexp"
"strings"
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/binding"
)
const (
_maxnamelen = 30
_maxtitlelen = 60
_maxexplainlen = 1200
)
// regexp utf8 char 0x0e0d~0e4A
var (
_emptyUnicodeReg = []*regexp.Regexp{
regexp.MustCompile(`[\x{202e}]+`), // right-to-left override
regexp.MustCompile(`[\x{200b}]+`), // zeroWithChar
regexp.MustCompile(`[\x{1f6ab}]+`), // no_entry_sign
}
// trim
returnReg = regexp.MustCompile(`[\n]{3,}`)
returnReg2 = regexp.MustCompile(`(\r\n){3,}`)
spaceReg = regexp.MustCompile(`[ ]{5,}`) // Chinese quanjiao space character
)
func privileges(c *bm.Context) {
var err error
arg := new(struct {
Langtype int8 `form:"lang_type"`
})
if err = c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.Privileges(c, arg.Langtype))
}
func updatePrivilegeState(c *bm.Context) {
var err error
arg := new(model.ArgStatePrivilege)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.UpdatePrivilegeState(c, &model.Privilege{
ID: arg.ID,
State: arg.Status,
}))
}
func deletePrivilege(c *bm.Context) {
var err error
arg := new(model.ArgPivilegeID)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.DeletePrivilege(c, arg.ID))
}
func updateOrder(c *bm.Context) {
var err error
arg := new(model.ArgOrder)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.UpdateOrder(c, arg))
}
func addPrivilege(c *bm.Context) {
var err error
arg := new(model.ArgAddPrivilege)
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
arg.Operator = username.(string)
if err = c.BindWith(arg, binding.FormMultipart); err != nil {
return
}
if len(arg.Name) > _maxnamelen {
c.JSON(nil, ecode.VipPrivilegeNameTooLongErr)
return
}
if len(arg.Title) > _maxtitlelen {
c.JSON(nil, ecode.VipPrivilegeTitleTooLongErr)
return
}
if len(arg.Explain) > _maxexplainlen {
c.JSON(nil, ecode.VipPrivilegeExplainTooLongErr)
return
}
img := new(model.ArgImage)
if img.IconBody, img.IconFileType, err = file(c, "icon"); err != nil {
c.JSON(nil, err)
return
}
if img.IconFileType == "" {
c.JSON(nil, ecode.VipFileImgEmptyErr)
return
}
if img.IconGrayBody, img.IconGrayFileType, err = file(c, "gray_icon"); err != nil {
c.JSON(nil, err)
return
}
if img.IconGrayFileType == "" {
c.JSON(nil, ecode.VipFileImgEmptyErr)
return
}
if img.WebImageBody, img.WebImageFileType, err = file(c, "web_image"); err != nil {
c.JSON(nil, err)
return
}
if img.AppImageBody, img.AppImageFileType, err = file(c, "app_image"); err != nil {
c.JSON(nil, err)
return
}
arg.Explain = filterContent(arg.Explain)
c.JSON(nil, vipSvc.AddPrivilege(c, arg, img))
}
func updatePrivilege(c *bm.Context) {
var (
err error
)
arg := new(model.ArgUpdatePrivilege)
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
arg.Operator = username.(string)
if err = c.BindWith(arg, binding.FormMultipart); err != nil {
return
}
if len(arg.Name) > _maxnamelen {
c.JSON(nil, ecode.VipPrivilegeNameTooLongErr)
return
}
if len(arg.Title) > _maxtitlelen {
c.JSON(nil, ecode.VipPrivilegeTitleTooLongErr)
return
}
if len(arg.Explain) > _maxexplainlen {
c.JSON(nil, ecode.VipPrivilegeExplainTooLongErr)
return
}
img := new(model.ArgImage)
if img.IconBody, img.IconFileType, err = file(c, "icon"); err != nil {
c.JSON(nil, err)
return
}
if img.IconGrayBody, img.IconGrayFileType, err = file(c, "gray_icon"); err != nil {
c.JSON(nil, err)
return
}
if img.WebImageBody, img.WebImageFileType, err = file(c, "web_image"); err != nil {
c.JSON(nil, err)
return
}
if img.AppImageBody, img.AppImageFileType, err = file(c, "app_image"); err != nil {
c.JSON(nil, err)
return
}
arg.Explain = filterContent(arg.Explain)
c.JSON(nil, vipSvc.UpdatePrivilege(c, arg, img))
}
func file(c *bm.Context, name string) (body []byte, filetype string, err error) {
var file multipart.File
if file, _, err = c.Request.FormFile(name); err != nil {
if err == http.ErrMissingFile {
err = nil
return
}
err = ecode.RequestErr
return
}
if file == nil {
return
}
defer file.Close()
if body, err = ioutil.ReadAll(file); err != nil {
err = ecode.RequestErr
return
}
filetype = http.DetectContentType(body)
if err = checkImgFileType(filetype); err != nil {
return
}
err = checkFileBody(body)
return
}
func checkImgFileType(filetype string) error {
switch filetype {
case "image/jpeg", "image/jpg":
case "image/png":
default:
return ecode.VipFileTypeErr
}
return nil
}
func checkFileBody(body []byte) error {
if len(body) == 0 {
return ecode.FileNotExists
}
if len(body) > cf.Bfs.MaxFileSize {
return ecode.FileTooLarge
}
return nil
}
func filterContent(str string) string {
tmp := str
// check params
tmp = strings.TrimSpace(tmp)
tmp = spaceReg.ReplaceAllString(tmp, "   ")
tmp = returnReg.ReplaceAllString(tmp, "\n\n\n")
tmp = returnReg2.ReplaceAllString(tmp, "\n\n\n")
// checkout empty
for _, reg := range _emptyUnicodeReg {
tmp = reg.ReplaceAllString(tmp, "")
}
return tmp
}

View File

@ -0,0 +1,65 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func pushs(c *bm.Context) {
arg := new(model.ArgPushData)
if err := c.Bind(arg); err != nil {
return
}
res, count, err := vipSvc.PushDatas(c, arg)
result := make(map[string]interface{})
result["data"] = res
result["total"] = count
c.JSON(result, err)
}
func push(c *bm.Context) {
arg := new(model.ArgID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.GetPushData(c, arg.ID))
}
func disablePush(c *bm.Context) {
arg := new(model.ArgID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.DisablePushData(c, arg.ID))
}
func delPush(c *bm.Context) {
arg := new(model.ArgID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.DelPushData(c, arg.ID))
}
func savePush(c *bm.Context) {
arg := new(model.VipPushData)
username, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
if err := c.Bind(arg); err != nil {
return
}
arg.Operator = username.(string)
c.JSON(nil, vipSvc.SavePushData(c, arg))
}

View File

@ -0,0 +1,331 @@
package http
import (
"bufio"
"fmt"
"io"
"mime/multipart"
"net/http"
"strconv"
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func queryPool(c *bm.Context) {
var (
arg = new(model.ResoucePoolBo)
pools []*model.VipResourcePool
count int
err error
)
if err = c.Bind(arg); err != nil {
return
}
if pools, count, err = vipSvc.QueryPool(c, arg); err != nil {
c.JSON(nil, err)
return
}
for _, v := range pools {
var business *model.VipBusinessInfo
if business, err = vipSvc.BusinessInfo(c, v.BusinessID); err != nil {
return
}
v.BusinessName = business.BusinessName
}
dataMap := make(map[string]interface{})
dataMap["item"] = pools
dataMap["count"] = count
c.JSONMap(dataMap, nil)
}
func getPool(c *bm.Context) {
var (
err error
arg = new(model.ArgID)
pool *model.VipResourcePool
business *model.VipBusinessInfo
)
if err = c.Bind(arg); err != nil {
return
}
if pool, err = vipSvc.PoolInfo(c, int(arg.ID)); err != nil {
c.JSON(nil, err)
return
}
if pool == nil {
c.JSON(pool, nil)
return
}
if business, err = vipSvc.BusinessInfo(c, pool.BusinessID); err != nil {
return
}
if business != nil {
pool.BusinessName = business.BusinessName
}
c.JSON(pool, nil)
}
func savePool(c *bm.Context) {
arg := new(model.ResoucePoolBo)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, vipSvc.AddPool(c, arg))
return
}
c.JSON(nil, vipSvc.UpdatePool(c, arg))
}
func getBatch(c *bm.Context) {
var (
err error
arg = new(model.ArgID)
batch *model.VipResourceBatch
pool *model.VipResourcePool
)
if err = c.Bind(arg); err != nil {
return
}
if batch, err = vipSvc.BatchInfo(c, int(arg.ID)); err != nil {
c.JSON(nil, err)
return
}
if batch == nil {
c.JSON(nil, nil)
return
}
if pool, err = vipSvc.PoolInfo(c, batch.PoolID); err != nil {
c.JSON(nil, err)
return
}
if pool == nil {
c.JSON(nil, ecode.VipPoolIDErr)
return
}
vo := new(model.ResouceBatchVo)
vo.Unit = batch.Unit
vo.ID = batch.ID
vo.PoolName = pool.PoolName
vo.SurplusCount = batch.SurplusCount
vo.PoolID = batch.PoolID
vo.Count = batch.Count
vo.StartTime = batch.StartTime
vo.EndTime = batch.EndTime
vo.DirectUseCount = batch.DirectUseCount
vo.Ver = batch.Ver
vo.CodeUseCount = batch.CodeUseCount
c.JSON(vo, nil)
}
func queryBatch(c *bm.Context) {
var (
err error
arg = new(model.ArgPoolID)
)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.BatchInfoOfPool(c, arg.PoolID))
}
func addBatch(c *bm.Context) {
var arg = new(model.ResouceBatchBo)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.AddBatch(c, arg))
}
func saveBatch(c *bm.Context) {
var arg = new(model.ArgReSource)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.UpdateBatch(c, arg.ID, arg.Increment, arg.StartTime, arg.EndTime))
}
func grantResouce(c *bm.Context) {
var (
req = c.Request
mids []int
username string
file multipart.File
err error
failMids []int
uc *http.Cookie
)
if file, _, err = req.FormFile("uploadFile"); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
r := bufio.NewReader(file)
for {
var buf []byte
buf, _, err = r.ReadLine()
if err == io.EOF {
break
}
midStr := string(buf)
if len(midStr) > 0 && midStr != "0" {
mid := 0
if mid, err = strconv.Atoi(midStr); err != nil {
c.JSON(nil, ecode.RequestErr)
return
} else if err == nil {
mids = append(mids, mid)
}
}
}
if uc, err = c.Request.Cookie("username"); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
username = uc.Value
arg := new(struct {
Mid int `form:"mid"`
BatchID int64 `form:"batch_id" validate:"required"`
Remark string `form:"remark" validate:"required"`
})
if err = c.Bind(arg); err != nil {
return
}
if arg.Mid > 0 {
mids = append(mids, arg.Mid)
}
if failMids, err = vipSvc.GrandResouce(c, arg.Remark, arg.BatchID, mids, username); err != nil {
c.JSON(nil, err)
return
}
c.JSON(failMids, nil)
}
func saveBatchCode(c *bm.Context) {
arg := new(model.BatchCode)
if err := c.Bind(arg); err != nil {
return
}
username, exists := c.Get("username")
if exists {
arg.Operator = username.(string)
}
c.JSON(nil, vipSvc.SaveBatchCode(c, arg))
}
func batchCodes(c *bm.Context) {
arg := new(model.ArgBatchCode)
if err := c.Bind(arg); err != nil {
return
}
pageArg := new(struct {
PN int `form:"pn"`
PS int `form:"ps"`
})
if err := c.Bind(pageArg); err != nil {
return
}
res, total, err := vipSvc.SelBatchCode(c, arg, pageArg.PN, pageArg.PS)
result := make(map[string]interface{})
result["data"] = res
result["total"] = total
c.JSON(result, err)
}
func frozenCode(c *bm.Context) {
arg := new(struct {
ID int64 `form:"id" validate:"required"`
Status int8 `form:"status" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.FrozenCode(c, arg.ID, arg.Status))
}
func frozenBatchCode(c *bm.Context) {
arg := new(struct {
ID int64 `form:"id" validate:"required"`
Status int8 `form:"status" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
c.JSON(nil, vipSvc.FrozenBatchCode(c, arg.ID, arg.Status))
}
func codes(c *bm.Context) {
arg := new(model.ArgCode)
if err := c.Bind(arg); err != nil {
return
}
pageArg := new(struct {
PS int `form:"ps"`
Cursor int64 `form:"cursor"`
Username string `form:"username"`
})
if err := c.Bind(pageArg); err != nil {
return
}
username, exists := c.Get("username")
if exists {
pageArg.Username = username.(string)
}
res, cursor, pre, err := vipSvc.SelCode(c, arg, pageArg.Username, pageArg.Cursor, pageArg.PS)
result := make(map[string]interface{})
result["data"] = res
result["cursor"] = cursor
result["pre"] = pre
c.JSON(result, err)
}
func exportCodes(c *bm.Context) {
var (
batchCodes []*model.BatchCode
err error
codes []string
)
arg := new(struct {
ID int64 `form:"id" validate:"required"`
})
if err = c.Bind(arg); err != nil {
return
}
batchIds := []int64{arg.ID}
if batchCodes, err = vipSvc.SelBatchCodes(c, batchIds); err != nil {
c.JSON(nil, err)
return
}
if len(batchCodes) == 0 {
c.JSON(nil, ecode.VipBatchIDErr)
return
}
if codes, err = vipSvc.ExportCode(c, arg.ID); err != nil {
c.JSON(nil, err)
return
}
writer := c.Writer
header := writer.Header()
header.Add("Content-disposition", "attachment; filename="+fmt.Sprintf("%v", batchCodes[0].BatchName)+".txt")
header.Add("Content-Type", "application/x-download;charset=utf-8")
for _, v := range codes {
writer.Write([]byte(fmt.Sprintf("%v\r\n", v)))
}
}

View File

@ -0,0 +1,150 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// tips info.
func tips(c *bm.Context) {
var (
res []*model.Tips
err error
)
arg := new(struct {
State int8 `form:"state"`
Platform int8 `form:"platform"`
Position int8 `form:"position"`
})
if err = c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
if res, err = vipSvc.TipList(c, arg.Platform, arg.State, arg.Position); err != nil {
log.Error("vipSvc.TipList(%+v) err(%+v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(res, nil)
}
// tips info.
func tipbyid(c *bm.Context) {
var (
res *model.Tips
err error
)
arg := new(struct {
ID int64 `form:"id" validate:"required,min=1,gte=1"`
})
if err = c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
if res, err = vipSvc.TipByID(c, arg.ID); err != nil {
log.Error("vipSvc.TipByID(%d) err(%+v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(res, nil)
}
// tips add.
func tipadd(c *bm.Context) {
var (
err error
arg = new(model.Tips)
)
if err = c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
opI, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
arg.Operator = opI.(string)
if err = vipSvc.AddTip(c, arg); err != nil {
log.Error("vipSvc.AddTip(%v) err(%+v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// tips update.
func tipupdate(c *bm.Context) {
var (
err error
arg = new(model.Tips)
)
if err = c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
opI, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
arg.Operator = opI.(string)
if err = vipSvc.TipUpdate(c, arg); err != nil {
log.Error("vipSvc.TipUpdate(%v) err(%+v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// tips delete.
func tipdelete(c *bm.Context) {
var (
err error
)
arg := new(struct {
ID int64 `form:"id" validate:"required,min=1,gte=1"`
})
if err = c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
opI, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
if err = vipSvc.DeleteTip(c, arg.ID, opI.(string)); err != nil {
log.Error("vipSvc.DeleteTip(%d) err(%+v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// tips expire.
func tipexpire(c *bm.Context) {
var (
err error
)
arg := new(struct {
ID int64 `form:"id" validate:"required,min=1,gte=1"`
})
if err = c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
opI, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
if err = vipSvc.ExpireTip(c, arg.ID, opI.(string)); err != nil {
log.Error("vipSvc.ExpireTip(%d) err(%+v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}

View File

@ -0,0 +1,50 @@
package http
import (
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func updateVersion(c *bm.Context) {
var (
err error
)
arg := new(struct {
ID int64 `form:"id" validate:"required"`
Version string `form:"version" `
Tip string `form:"tip"`
Link string `form:"link"`
})
if err = c.Bind(arg); err != nil {
return
}
operator, ok := c.Get("username")
if !ok {
c.JSON(nil, ecode.AccessDenied)
return
}
if err = vipSvc.UpdateVersion(c, &model.VipAppVersion{
ID: arg.ID,
Version: arg.Version,
Tip: arg.Tip,
Operator: operator.(string),
Link: arg.Link,
}); err != nil {
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
func versions(c *bm.Context) {
var (
res []*model.VipAppVersion
err error
)
if res, err = vipSvc.AllVersion(c); err != nil {
c.JSON(nil, err)
return
}
c.JSON(res, nil)
}

View File

@ -0,0 +1,67 @@
package http
import (
"strconv"
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func drawback(c *bm.Context) {
var (
mid int64
params = c.Request.Form
err error
remark = params.Get("remark")
username string
days int
)
if nameInter, ok := c.Get("username"); ok {
username = nameInter.(string)
}
midStr := params.Get("mid")
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
daysStr := params.Get("days")
if days, err = strconv.Atoi(daysStr); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if err = vipSvc.Drawback(c, days, mid, username, remark); err != nil {
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
func historyList(c *bm.Context) {
var (
err error
count int
res []*model.VipChangeHistory
req = new(model.UserChangeHistoryReq)
)
if err = c.Bind(req); err != nil {
return
}
if res, count, err = vipSvc.HistoryPage(c, req); err != nil {
c.JSON(nil, err)
return
}
page := &model.PageInfo{Count: count, Item: res}
c.JSON(page, nil)
}
func vipInfo(c *bm.Context) {
arg := new(struct {
Mid int64 `form:"mid"`
})
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.VipInfo(c, arg.Mid))
}

View File

@ -0,0 +1,147 @@
package http
import (
"io/ioutil"
"mime/multipart"
"net/http"
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
const (
_maxFileSize = 1048576
)
func welfareTypeSave(c *bm.Context) {
arg := new(struct {
ID int `form:"id"`
Name string `form:"name" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
username, _ := c.Get("username")
c.JSON(nil, vipSvc.WelfareTypeSave(arg.ID, arg.Name, username.(string)))
}
func welfareTypeState(c *bm.Context) {
arg := new(struct {
ID int `form:"id" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
username, _ := c.Get("username")
c.JSON(nil, vipSvc.WelfareTypeState(c, arg.ID, username.(string)))
}
func welfareTypeList(c *bm.Context) {
c.JSON(vipSvc.WelfareTypeList())
}
func welfareSave(c *bm.Context) {
const _redirectThridPage = 3
wfReq := new(model.WelfareReq)
if err := c.Bind(wfReq); err != nil {
return
}
if wfReq.UsageForm == _redirectThridPage && wfReq.ReceiveUri == "" {
c.JSON(nil, ecode.VipWelfareRequestErr)
return
}
username, _ := c.Get("username")
c.JSON(nil, vipSvc.WelfareSave(username.(string), wfReq))
}
func welfareState(c *bm.Context) {
arg := new(struct {
ID int `form:"id" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
username, _ := c.Get("username")
c.JSON(nil, vipSvc.WelfareState(arg.ID, username.(string)))
}
func welfareList(c *bm.Context) {
arg := new(struct {
TID int `form:"tid"`
})
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.WelfareList(arg.TID))
}
func welfareBatchUpload(c *bm.Context) {
arg := new(struct {
WID int `form:"wid"`
Filename string `form:"filename"`
Vtime int `form:"vtime"`
})
if err := c.Bind(arg); err != nil {
return
}
fileBody, _, err := getFileBody(c, "file")
if err != nil {
c.JSON(nil, err)
return
}
username, _ := c.Get("username")
c.JSON(nil, vipSvc.WelfareBatchUpload(fileBody, arg.Filename, username.(string), arg.WID, arg.Vtime))
}
func welfareBatchList(c *bm.Context) {
arg := new(struct {
WID int `form:"wid" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.WelfareBatchList(arg.WID))
}
func welfareBatchState(c *bm.Context) {
arg := new(struct {
ID int `form:"id" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
username, _ := c.Get("username")
c.JSON(nil, vipSvc.WelfareBatchState(c, arg.ID, username.(string)))
}
func getFileBody(c *bm.Context, name string) (body []byte, filetype string, err error) {
var file multipart.File
if file, _, err = c.Request.FormFile(name); err != nil {
if err == http.ErrMissingFile {
err = nil
return
}
err = ecode.RequestErr
return
}
if file == nil {
return
}
defer file.Close()
if body, err = ioutil.ReadAll(file); err != nil {
err = ecode.RequestErr
return
}
filetype = http.DetectContentType(body)
if filetype != "text/plain; charset=utf-8" {
err = ecode.VipFileTypeErr
return
}
if len(body) > _maxFileSize {
err = ecode.FileTooLarge
return
}
return
}