Initial commit

This commit is contained in:
Donny
2019-04-22 20:46:32 +08:00
commit 49ab8aadd1
25441 changed files with 4055000 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
name = "go_default_library",
srcs = [
"distrib.go",
"http.go",
"promotion.go",
"promotion_group.go",
"promotion_order.go",
"settle.go",
],
importpath = "go-common/app/service/openplatform/ticket-sales/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/openplatform/ticket-sales/api/grpc/v1:go_default_library",
"//app/service/openplatform/ticket-sales/conf:go_default_library",
"//app/service/openplatform/ticket-sales/model:go_default_library",
"//app/service/openplatform/ticket-sales/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/render:go_default_library",
"//vendor/github.com/pkg/errors:go_default_library",
],
)
go_test(
name = "go_default_test",
srcs = ["http_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/service/openplatform/ticket-sales/conf:go_default_library",
"//app/service/openplatform/ticket-sales/service:go_default_library",
"//library/conf/paladin:go_default_library",
"//library/net/http/blademaster: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,49 @@
package http
import (
"github.com/pkg/errors"
"go-common/app/service/openplatform/ticket-sales/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func syncOrder(c *bm.Context) {
orderStatusMap := make(map[int64]string)
orderStatusMap[model.OrderPaid] = "已付款"
orderStatusMap[model.OrderRefunded] = "已退款"
arg := new(model.DistOrderArg)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
_, ok := orderStatusMap[arg.Stat]
if !ok {
c.JSON("stat", ecode.TicketParamInvalid)
return
}
if arg.Serial == "" {
c.JSON("serial_num is empty", ecode.TicketParamInvalid)
return
}
switch arg.Stat {
case model.OrderPaid:
arg.Stat = model.DistOrderNormal
if arg.RefStat == model.OrderRefundPartly {
arg.Stat = model.DistOrderRefunded
}
case model.OrderRefunded:
arg.Stat = model.DistOrderRefunded
}
c.JSON(svc.SyncOrder(c, arg))
}
func getOrder(c *bm.Context) {
arg := new(model.DistOrderGetArg)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(svc.GetOrder(c, arg.Oid))
}

View File

@@ -0,0 +1,71 @@
package http
import (
"net/http"
"go-common/app/service/openplatform/ticket-sales/conf"
"go-common/app/service/openplatform/ticket-sales/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
var (
svc *service.Service
)
// Init init ticket service.
func Init(c *conf.Config, s *service.Service) {
svc = s
// init router
engine := bm.DefaultServer(c.BM)
initRouter(engine)
outerRouter(engine)
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
// initRouter init inner router.
func initRouter(e *bm.Engine) {
e.Ping(ping)
// 等依赖方修改后,再删除
group := e.Group("/x/internal/ticket/sales")
{
group.POST("/distrib/syncorder", syncOrder)
group.GET("/distrib/getorder", getOrder)
}
//ticket
group = e.Group("/openplatform/internal/ticket/sales")
{
group.POST("/distrib/syncorder", syncOrder)
group.GET("/distrib/getorder", getOrder)
group.POST("/promo/order/check", checkCreatePromoOrder)
group.POST("/promo/order/create", createPromoOrder)
group.GET("/promo/order/pay", payNotify)
group.GET("/promo/order/cancel", cancelOrder)
group.GET("/promo/order/check/issue", checkIssue)
group.POST("/promo/order/finish/issue", finishIssue)
group.GET("/promo/get", getPromo)
group.POST("promo/create", createPromo)
group.POST("promo/operate", operatePromo)
group.POST("promo/edit", editPromo)
group.POST("/settle/compare", settleCompare)
group.POST("/settle/repush", settleRepush)
}
}
// outerRouter init inner router.
func outerRouter(e *bm.Engine) {
}
// ping check server ok.
func ping(c *bm.Context) {
if err := svc.Ping(c); err != nil {
log.Error("ticket http service ping error(%v)", err)
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}

View File

@@ -0,0 +1,59 @@
package http
import (
"context"
"encoding/json"
"fmt"
"net/http"
"net/url"
"sync"
"testing"
"go-common/app/service/openplatform/ticket-sales/conf"
"go-common/app/service/openplatform/ticket-sales/service"
"go-common/library/conf/paladin"
httpx "go-common/library/net/http/blademaster"
)
var (
once sync.Once
client *httpx.Client
syncOrderURL string
)
func startHTTP() {
if err := paladin.Init(); err != nil {
panic(err)
}
if err := paladin.Watch("ticket-sales.toml", conf.Conf); err != nil {
panic(err)
}
client = httpx.NewClient(conf.Conf.HTTPClient.Read)
Init(conf.Conf, service.New(conf.Conf))
}
func TestGetOrder(t *testing.T) {
syncOrderURL = conf.Conf.UT.DistPrefix + "/distrib/getorder"
fmt.Println(syncOrderURL)
once.Do(startHTTP)
params := url.Values{}
params.Set("oid", "100000004421700")
var err error
var req *http.Request
if req, err = client.NewRequest("GET", syncOrderURL, "127.0.0.1", params); err != nil {
t.Errorf("http.NewRequest(GET, %s) error(%v)", syncOrderURL, err)
t.FailNow()
}
reqURI := req.URL.String()
t.Logf("req uri: %s\n", reqURI)
var res struct {
Code int `json:"code"`
Data string `json:"data"`
}
if err = client.Do(context.TODO(), req, &res); err != nil {
t.Errorf("client.Do() error(%v)", err)
t.FailNow()
}
str, _ := json.Marshal(res)
t.Logf("res: %+v", string(str))
}

View File

@@ -0,0 +1,46 @@
package http
import (
rpcV1 "go-common/app/service/openplatform/ticket-sales/api/grpc/v1"
bm "go-common/library/net/http/blademaster"
)
func getPromo(c *bm.Context) {
arg := new(rpcV1.PromoID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.GetPromo(c, arg))
}
func createPromo(c *bm.Context) {
arg := new(rpcV1.CreatePromoRequest)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.CreatePromo(c, arg))
}
func operatePromo(c *bm.Context) {
arg := new(rpcV1.OperatePromoRequest)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.OperatePromo(c, arg))
}
func editPromo(c *bm.Context) {
arg := new(rpcV1.EditPromoRequest)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.EditPromo(c, arg))
}

View File

@@ -0,0 +1 @@
package http

View File

@@ -0,0 +1,66 @@
package http
import (
rpcV1 "go-common/app/service/openplatform/ticket-sales/api/grpc/v1"
bm "go-common/library/net/http/blademaster"
)
func checkCreatePromoOrder(c *bm.Context) {
arg := new(rpcV1.CheckCreatePromoOrderRequest)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.CheckCreateStatus(c, arg))
}
func createPromoOrder(c *bm.Context) {
arg := new(rpcV1.CreatePromoOrderRequest)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.CreatePromoOrder(c, arg))
}
func payNotify(c *bm.Context) {
arg := new(rpcV1.OrderID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.PromoPayNotify(c, arg))
}
func cancelOrder(c *bm.Context) {
arg := new(rpcV1.OrderID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.CancelOrder(c, arg))
}
func checkIssue(c *bm.Context) {
arg := new(rpcV1.OrderID)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.CheckIssue(c, arg))
}
func finishIssue(c *bm.Context) {
arg := new(rpcV1.FinishIssueRequest)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(svc.FinishIssue(c, arg))
}

View File

@@ -0,0 +1,59 @@
package http
import (
"encoding/json"
"go-common/app/service/openplatform/ticket-sales/model"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/render"
"net/http"
"go-common/library/net/http/blademaster/binding"
)
func settleCompare(c *bm.Context) {
req := &model.GetSettleOrdersRequest{}
err := json.NewDecoder(c.Request.Body).Decode(&req)
if err != nil {
c.Status(http.StatusBadRequest)
return
}
if err = binding.Form.Bind(c.Request, req); err != nil {
c.Render(http.StatusOK, render.MapJSON{
"errno": 1,
"msg": err.Error(),
})
return
}
data, err := svc.GetSettleOrders(c, req.Date, req.Ref == 1, req.ExtParams, req.PageSize)
if err != nil {
c.Render(http.StatusOK, render.MapJSON{
"errno": 1,
"msg": err.Error(),
})
return
}
c.Render(http.StatusOK, render.MapJSON{
"errno": 0,
"data": data,
})
}
func settleRepush(c *bm.Context) {
var req interface{}
err := json.NewDecoder(c.Request.Body).Decode(&req)
if err != nil {
c.Status(http.StatusBadRequest)
return
}
err = svc.RepushSettleOrders(c, req)
if err != nil {
c.Render(http.StatusOK, render.MapJSON{
"errno": 1,
"msg": err.Error(),
})
}
c.Render(http.StatusOK, render.MapJSON{
"errno": 0,
"msg": "将在5分钟内重推",
})
}