Create & Init Project...
This commit is contained in:
52
app/service/openplatform/ticket-sales/server/grpc/BUILD
Normal file
52
app/service/openplatform/ticket-sales/server/grpc/BUILD
Normal file
@ -0,0 +1,52 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
"go_test",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["server.go"],
|
||||
importpath = "go-common/app/service/openplatform/ticket-sales/server/grpc",
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//app/service/openplatform/ticket-sales/api/grpc/v1:go_default_library",
|
||||
"//app/service/openplatform/ticket-sales/service:go_default_library",
|
||||
"//app/service/openplatform/ticket-sales/service/mis:go_default_library",
|
||||
"//library/net/rpc/warden:go_default_library",
|
||||
"@org_golang_google_grpc//: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"],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "go_default_test",
|
||||
srcs = ["server_test.go"],
|
||||
embed = [":go_default_library"],
|
||||
rundir = ".",
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//app/service/openplatform/ticket-sales/api/grpc/type:go_default_library",
|
||||
"//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/service:go_default_library",
|
||||
"//library/conf/paladin:go_default_library",
|
||||
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
|
||||
],
|
||||
)
|
34
app/service/openplatform/ticket-sales/server/grpc/server.go
Normal file
34
app/service/openplatform/ticket-sales/server/grpc/server.go
Normal file
@ -0,0 +1,34 @@
|
||||
package grpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
rpc "go-common/app/service/openplatform/ticket-sales/api/grpc/v1"
|
||||
"go-common/app/service/openplatform/ticket-sales/service"
|
||||
"go-common/library/net/rpc/warden"
|
||||
|
||||
"go-common/app/service/openplatform/ticket-sales/service/mis"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
//New 生成rpc服务
|
||||
func New(srv *service.Service, misSrv *mis.Mis) *warden.Server {
|
||||
s := warden.NewServer(nil)
|
||||
s.Use(middleware())
|
||||
rpc.RegisterTradeServer(s.Server(), srv)
|
||||
rpc.RegisterPromotionServer(s.Server(), srv)
|
||||
rpc.RegisterPromotionMisServer(s.Server(), misSrv)
|
||||
rpc.RegisterTicketServer(s.Server(), srv)
|
||||
_, err := s.Start()
|
||||
if err != nil {
|
||||
panic("run server failed!" + err.Error())
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
func middleware() grpc.UnaryServerInterceptor {
|
||||
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
|
||||
//call chain
|
||||
resp, err = handler(ctx, req)
|
||||
return
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package grpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
sales "go-common/app/service/openplatform/ticket-sales/api/grpc/v1"
|
||||
"go-common/app/service/openplatform/ticket-sales/conf"
|
||||
"go-common/app/service/openplatform/ticket-sales/service"
|
||||
|
||||
"go-common/app/service/openplatform/ticket-sales/api/grpc/type"
|
||||
"go-common/library/conf/paladin"
|
||||
|
||||
. "github.com/smartystreets/goconvey/convey"
|
||||
)
|
||||
|
||||
var (
|
||||
s *service.Service
|
||||
)
|
||||
|
||||
func init() {
|
||||
dir, _ := filepath.Abs("../../cmd/ticket-sales.toml")
|
||||
flag.Set("conf", dir)
|
||||
if err := paladin.Init(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := paladin.Watch("ticket-sales.toml", conf.Conf); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
s = service.New(conf.Conf)
|
||||
}
|
||||
|
||||
//Test_Info
|
||||
func TestInfo(t *testing.T) {
|
||||
Convey("get data", t, func() {
|
||||
|
||||
data := &sales.UpBuyerRequest{}
|
||||
|
||||
data.OrderID = 10000012002571
|
||||
data.Buyers = &_type.OrderBuyer{
|
||||
ID: 1,
|
||||
Name: "wlt",
|
||||
Tel: "1388888888",
|
||||
PersonalID: "360822199207227275",
|
||||
}
|
||||
res, err := s.UpdateBuyer(context.TODO(), data)
|
||||
fmt.Println(res)
|
||||
So(err, ShouldBeNil)
|
||||
So(res, ShouldNotBeNil)
|
||||
So(res, ShouldNotBeEmpty)
|
||||
})
|
||||
|
||||
}
|
60
app/service/openplatform/ticket-sales/server/http/BUILD
Normal file
60
app/service/openplatform/ticket-sales/server/http/BUILD
Normal 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"],
|
||||
)
|
49
app/service/openplatform/ticket-sales/server/http/distrib.go
Normal file
49
app/service/openplatform/ticket-sales/server/http/distrib.go
Normal 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))
|
||||
}
|
71
app/service/openplatform/ticket-sales/server/http/http.go
Normal file
71
app/service/openplatform/ticket-sales/server/http/http.go
Normal 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)
|
||||
}
|
||||
}
|
@ -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))
|
||||
}
|
@ -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))
|
||||
}
|
@ -0,0 +1 @@
|
||||
package http
|
@ -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))
|
||||
}
|
59
app/service/openplatform/ticket-sales/server/http/settle.go
Normal file
59
app/service/openplatform/ticket-sales/server/http/settle.go
Normal 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分钟内重推",
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user