From 634f1b958464886459e90fc1068cab0078a7849c Mon Sep 17 00:00:00 2001 From: momo <1012651275@qq.com> Date: Sun, 8 Oct 2023 18:38:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=96=B0=E5=A2=9E=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/handler/closeorderhandler.go | 35 ++++++++++++ server/order/internal/handler/routes.go | 5 ++ .../order/internal/logic/closeorderlogic.go | 56 +++++++++++++++++++ server/order/internal/types/types.go | 4 ++ server_api/order.api | 9 +++ service/repositories/order.go | 4 ++ 6 files changed, 113 insertions(+) create mode 100644 server/order/internal/handler/closeorderhandler.go create mode 100644 server/order/internal/logic/closeorderlogic.go diff --git a/server/order/internal/handler/closeorderhandler.go b/server/order/internal/handler/closeorderhandler.go new file mode 100644 index 00000000..e137a1e3 --- /dev/null +++ b/server/order/internal/handler/closeorderhandler.go @@ -0,0 +1,35 @@ +package handler + +import ( + "net/http" + "reflect" + + "fusenapi/utils/basic" + + "fusenapi/server/order/internal/logic" + "fusenapi/server/order/internal/svc" + "fusenapi/server/order/internal/types" +) + +func CloseOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + + var req types.CloseOrderReq + userinfo, err := basic.RequestParse(w, r, svcCtx, &req) + if err != nil { + return + } + + // 创建一个业务逻辑层实例 + l := logic.NewCloseOrderLogic(r.Context(), svcCtx) + + rl := reflect.ValueOf(l) + basic.BeforeLogic(w, r, rl) + + resp := l.CloseOrder(&req, userinfo) + + if !basic.AfterLogic(w, r, rl, resp) { + basic.NormalAfterLogic(w, r, resp) + } + } +} diff --git a/server/order/internal/handler/routes.go b/server/order/internal/handler/routes.go index c03bd1db..f3dc8b2b 100644 --- a/server/order/internal/handler/routes.go +++ b/server/order/internal/handler/routes.go @@ -32,6 +32,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/api/order/delete", Handler: DeleteOrderHandler(serverCtx), }, + { + Method: http.MethodPost, + Path: "/api/order/close", + Handler: CloseOrderHandler(serverCtx), + }, { Method: http.MethodGet, Path: "/api/order/list", diff --git a/server/order/internal/logic/closeorderlogic.go b/server/order/internal/logic/closeorderlogic.go new file mode 100644 index 00000000..cfca01dd --- /dev/null +++ b/server/order/internal/logic/closeorderlogic.go @@ -0,0 +1,56 @@ +package logic + +import ( + "fusenapi/service/repositories" + "fusenapi/utils/auth" + "fusenapi/utils/basic" + + "context" + + "fusenapi/server/order/internal/svc" + "fusenapi/server/order/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type CloseOrderLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewCloseOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CloseOrderLogic { + return &CloseOrderLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +// 处理进入前逻辑w,r +// func (l *CloseOrderLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { +// } + +func (l *CloseOrderLogic) CloseOrder(req *types.CloseOrderReq, userinfo *auth.UserInfo) (resp *basic.Response) { + // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) + // userinfo 传入值时, 一定不为null + if !userinfo.IsUser() { + // 如果是,返回未授权的错误码 + return resp.SetStatus(basic.CodeUnAuth) + } + res, err := l.svcCtx.Repositories.NewOrder.Close(l.ctx, &repositories.CloseReq{ + UserId: userinfo.UserId, + OrderSn: req.OrderSn, + Type: 1, + }) + + if err != nil { + return resp.SetStatus(&res.ErrorCode) + } + return resp.SetStatus(basic.CodeOK) +} + +// 处理逻辑后 w,r 如:重定向, resp 必须重新处理 +// func (l *CloseOrderLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { +// // httpx.OkJsonCtx(r.Context(), w, resp) +// } diff --git a/server/order/internal/types/types.go b/server/order/internal/types/types.go index f868a96d..02480c1b 100644 --- a/server/order/internal/types/types.go +++ b/server/order/internal/types/types.go @@ -5,6 +5,10 @@ import ( "fusenapi/utils/basic" ) +type CloseOrderReq struct { + OrderSn string `json:"order_sn"` +} + type DeleteOrderReq struct { OrderSn string `json:"order_sn"` } diff --git a/server_api/order.api b/server_api/order.api index 48bb9a61..4e62ecd3 100644 --- a/server_api/order.api +++ b/server_api/order.api @@ -23,6 +23,9 @@ service order { @handler DeleteOrderHandler post /api/order/delete(DeleteOrderReq) returns (response); + @handler CloseOrderHandler + post /api/order/close(CloseOrderReq) returns (response); + @handler OrderListHandler get /api/order/list(OrderListReq) returns (response); @@ -31,6 +34,12 @@ service order { } +type ( + CloseOrderReq { + OrderSn string `json:"order_sn"` + } +) + type DeleteOrderReq { OrderSn string `json:"order_sn"` } diff --git a/service/repositories/order.go b/service/repositories/order.go index dc18b190..39b98d04 100644 --- a/service/repositories/order.go +++ b/service/repositories/order.go @@ -108,6 +108,7 @@ type ( CloseReq struct { Type int64 // type:1=添加购物车 OrderSn string + UserId int64 `json:"user_id"` } CloseRes struct { ErrorCode basic.StatusResponse @@ -342,6 +343,9 @@ func (d *defaultOrder) Close(ctx context.Context, in *CloseReq) (res *CloseRes, err = d.MysqlConn.WithContext(ctx).Transaction(func(tx *gorm.DB) error { var orderInfo gmodel.FsOrder model := tx.Where("status = ?", int64(constants.ORDER_STATUS_UNPAIDDEPOSIT)).Where("pay_status = ?", int(constants.ORDER_PAY_STATUS_UNPAIDDEPOSIT)) + if in.UserId != 0 { + model = model.Where("user_id = ?", in.UserId) + } if in.OrderSn != "" { model = model.Where("order_sn = ?", in.OrderSn) }