diff --git a/model/gmodel/fs_order_logic.go b/model/gmodel/fs_order_logic.go index 6301bac4..d8164aae 100755 --- a/model/gmodel/fs_order_logic.go +++ b/model/gmodel/fs_order_logic.go @@ -20,6 +20,6 @@ func (o *FsOrderModel) FindOne(ctx context.Context, userId int64, OrderId int64) return order, err } -func (o *FsOrderModel) Update(ctx context.Context, id int64, data FsOrder) error { - return o.db.WithContext(ctx).Model(&FsOrder{}).Where("`id` = ?", id).Updates(data).Error +func (o *FsOrderModel) Update(ctx context.Context, data *FsOrder) error { + return o.db.WithContext(ctx).Model(data).Where("`id` = ?", data.Id).Updates(data).Error } diff --git a/model/gmodel/fs_refund_reason_logic.go b/model/gmodel/fs_refund_reason_logic.go index e68225aa..7844bfaa 100644 --- a/model/gmodel/fs_refund_reason_logic.go +++ b/model/gmodel/fs_refund_reason_logic.go @@ -1,2 +1,9 @@ package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file + +import "context" + +// TODO: 使用model的属性做你想做的 + +func (fsRefundReason *FsRefundReasonModel) Update(cxt context.Context) { + +} diff --git a/server/home-user-auth/internal/logic/userfontslogic.go b/server/home-user-auth/internal/logic/userfontslogic.go index 268d0e7d..c74ae7e5 100644 --- a/server/home-user-auth/internal/logic/userfontslogic.go +++ b/server/home-user-auth/internal/logic/userfontslogic.go @@ -2,6 +2,7 @@ package logic import ( "context" + "errors" "fusenapi/model/gmodel" "fusenapi/server/home-user-auth/internal/svc" @@ -29,7 +30,7 @@ func NewUserFontsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserFon func (l *UserFontsLogic) UserFonts(req *types.Request, userinfo *auth.UserInfo) (resp *basic.Response) { data, err := gmodel.NewFsFontModel(l.svcCtx.MysqlConn).FindAllOrderSortByDesc(l.ctx) - if err != gorm.ErrRecordNotFound && err != nil { + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { logx.Error(err) return resp.SetStatus(basic.CodeOK) } diff --git a/server/home-user-auth/internal/logic/userloginlogic.go b/server/home-user-auth/internal/logic/userloginlogic.go index 1c13dfa6..528fc64b 100644 --- a/server/home-user-auth/internal/logic/userloginlogic.go +++ b/server/home-user-auth/internal/logic/userloginlogic.go @@ -2,6 +2,7 @@ package logic import ( "context" + "errors" "time" "fusenapi/model/gmodel" @@ -34,7 +35,7 @@ func (l *UserLoginLogic) UserLogin(req *types.RequestUserLogin) (resp *basic.Res // 在用户数据表中根据登录名(email)查找用户记录,并返回 UserModel 类型的结构体对象 userModel。 user, err := m.FindUserByEmail(l.ctx, req.Name) - if err == gorm.ErrRecordNotFound { + if errors.Is(err, gorm.ErrRecordNotFound) { return resp.SetStatus(basic.CodeEmailNotFoundErr), "" } diff --git a/server/home-user-auth/internal/logic/useroderdeletelogic.go b/server/home-user-auth/internal/logic/useroderdeletelogic.go index 0afe4b94..e587cd22 100644 --- a/server/home-user-auth/internal/logic/useroderdeletelogic.go +++ b/server/home-user-auth/internal/logic/useroderdeletelogic.go @@ -1,11 +1,11 @@ package logic import ( + "errors" "fusenapi/constants" "fusenapi/model/gmodel" "fusenapi/utils/auth" "fusenapi/utils/basic" - "log" "time" "context" @@ -35,8 +35,6 @@ func (l *UserOderDeleteLogic) UserOderDelete(req *types.RequestOrderId, userinfo // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) // userinfo 传入值时, 一定不为null - log.Println(req) - if !userinfo.IsUser() { return resp.SetStatus(basic.CodeUnAuth) // 如果不是用户信息, 返回未授权错误 } @@ -50,7 +48,7 @@ func (l *UserOderDeleteLogic) UserOderDelete(req *types.RequestOrderId, userinfo m := gmodel.NewFsOrderModel(l.svcCtx.MysqlConn) order, err := m.FindOne(l.ctx, userinfo.UserId, orderId) if err != nil { - if err == gorm.ErrRecordNotFound { + if errors.Is(err, gorm.ErrRecordNotFound) { return resp.SetStatus(basic.CodeOrderNotFoundErr) } logx.Error(err) @@ -71,6 +69,63 @@ func (l *UserOderDeleteLogic) UserOderDelete(req *types.RequestOrderId, userinfo return resp.SetStatus(basic.CodeOrderNotCancelledErr) } + //这里是将给定的PHP代码翻译成Golang代码: + + uOrder := &gmodel.FsOrder{ + Id: orderId, + } + + var ( + isCancel int64 = 1 + ustatus int64 = int64(constants.STATUS_NEW_CANCEL) + ) + // 修改取消状态和取消原因 + uOrder.Status = &ustatus + uOrder.IsCancel = &isCancel + uOrder.RefundReasonId = &req.RefundReasonId + uOrder.RefundReason = &req.RefundReason + + err = m.Update(l.ctx, uOrder) + if err != nil { + logx.Error(err) + return resp.SetStatus(basic.CodeDbUpdateErr) + } + + var ( + IsRefund int64 = 0 + CreatedAt = time.Now().Unix() + ) + + refund := &gmodel.FsRefundReason{ + IsRefund: &IsRefund, + RefundReasonId: &req.RefundReasonId, + RefundReason: &req.RefundReason, + OrderId: &order.Id, + CreatedAt: &CreatedAt, + } + + mFsRefund := gmodel.NewFsRefundReasonModel(l.svcCtx.MysqlConn) + + err = refund.Save() + + // 退款 + // 调用第三方接口发起退款 + config := GetStripeConfig() + + // 查询支付信息 + pays, err := Pay.Find(db.Where("order_number = ? AND is_refund = ? AND pay_status = ?", order.SN, 0, 1)) + for _, pay := range pays { + stripe := stripe.New(config.SK) + _, err := stripe.Refunds.Create(stripe.RefundParams{ + PaymentIntent: pay.TradeNo, + }) + } + + if err == nil && err == nil { + return ResponseSuccess(200, "Cancel successfully", order) + } + return ResponseError(500, "Cancellation failure") + return resp.SetStatus(basic.CodeOK) } diff --git a/server/home-user-auth/internal/types/types.go b/server/home-user-auth/internal/types/types.go index 6bad9122..b5e34494 100644 --- a/server/home-user-auth/internal/types/types.go +++ b/server/home-user-auth/internal/types/types.go @@ -44,7 +44,9 @@ type RequestAddAddress struct { } type RequestOrderId struct { - OrderId int64 `json:"id"` + OrderId int64 `json:"id"` //订单id + RefundReasonId int64 `json:"refund_reason_id"` //取消原因id + RefundReason string `json:"refund_reason"` //取消原因 } type DataUserLogin struct { diff --git a/server/shopping-cart-confirmation/internal/logic/changeordermethodlogic.go b/server/shopping-cart-confirmation/internal/logic/changeordermethodlogic.go index d6fffd18..234504f5 100644 --- a/server/shopping-cart-confirmation/internal/logic/changeordermethodlogic.go +++ b/server/shopping-cart-confirmation/internal/logic/changeordermethodlogic.go @@ -50,7 +50,7 @@ func (l *ChangeOrderMethodLogic) ChangeOrderMethod(req *types.ChangeOrderMethodR if *orderInfo.PayedAmount > 0 { return resp.SetStatusWithMessage(basic.CodeApiErr, "the order`s address cannot be changed for it is paid") } - updData := gmodel.FsOrder{} + updData := &gmodel.FsOrder{Id: orderInfo.Id} //地址 if req.AddressId > 0 { addressModel := gmodel.NewFsAddressModel(l.svcCtx.MysqlConn) @@ -69,7 +69,7 @@ func (l *ChangeOrderMethodLogic) ChangeOrderMethod(req *types.ChangeOrderMethodR updData.DeliveryMethod = &req.DeliveryMethod updData.AddressId = &req.AddressId updData.PayMethod = &req.PayMethod - if err = orderModel.Update(l.ctx, orderInfo.Id, updData); err != nil { + if err = orderModel.Update(l.ctx, updData); err != nil { logx.Error(err) return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to save data") } diff --git a/server_api/home-user-auth.api b/server_api/home-user-auth.api index 838f050a..97b0246a 100644 --- a/server_api/home-user-auth.api +++ b/server_api/home-user-auth.api @@ -87,7 +87,9 @@ type RequestAddAddress { // RequestOrderId 传入订单id的结构 type RequestOrderId { - OrderId int64 `json:"id"` + OrderId int64 `json:"id"` //订单id + RefundReasonId int64 `json:"refund_reason_id"` //取消原因id + RefundReason string `json:"refund_reason"` //取消原因 } // UserLoginHandler 用户登录请求结构