From 7410da75fd69bc164ffc02b0976364ba1f720933 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 10:05:26 +0800 Subject: [PATCH] =?UTF-8?q?+GetOrderPay=20GetOrders=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8F=82=E6=95=B0isPurchase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 15 +++++- business/jxstore/cms/cms.go | 2 + business/model/const.go | 3 +- business/model/dao/dao_order.go | 14 ++++++ business/model/order.go | 28 +++++++++-- business/partner/purchase/jx/localjx/order.go | 47 ++++++++++--------- business/partner/purchase/jx/localjx/wxpay.go | 18 +++++-- controllers/jx_order.go | 1 + controllers/jx_order2.go | 14 ++++++ routers/commentsRouter_controllers.go | 9 ++++ 10 files changed, 121 insertions(+), 30 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index b41cef313..aa004da4d 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -229,7 +229,16 @@ func (c *OrderManager) ExportMTWaybills(ctx *jxcontext.Context, fromDateStr, toD func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku, isIncludeFake bool, fromDateStr, toDateStr string, isDateFinish bool, skuIDs []int, isJxFirst bool, params map[string]interface{}, offset, pageSize int) (orders []*model.GoodsOrderExt, totalCount int, err error) { globals.SugarLogger.Debugf("getOrders from:%s to:%s", fromDateStr, toDateStr) - + isPurchase, _ := params["isPurchase"].(bool) + userID := "" + if !isPurchase { + if user := ctx.GetFullUser(); user != nil { + userID = user.GetID() + if user.Type&model.UserTypeNonConsumer == 0 { + isPurchase = true + } + } + } pageSize = jxutils.FormalizePageSize(pageSize) if offset < 0 { offset = 0 @@ -393,6 +402,10 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku, isInclude sqlParams = append(sqlParams, vendorIDs) } } + if isPurchase { + sqlWhere += " AND t1.user_id = ?" + sqlParams = append(sqlParams, userID) + } db := dao.GetDB() sql += sqlWhere if isIncludeSku { diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index d5acfc8aa..a2f8b3889 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -98,6 +98,8 @@ func InitServiceInfo(version string, buildTime time.Time, gitCommit string) { "autoSaleAt": AutoSaleAtStr, "userTypeName": model.UserTypeName, "storePriceTypeName": model.StorePriceTypeName, + "payStatusName": model.PayStatusName, + "refundStatusName": model.RefundStatusName, }, } } diff --git a/business/model/const.go b/business/model/const.go index a20cce891..f9bad6472 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -46,6 +46,7 @@ var ( OrderStatusUnknown: "一般事件", + OrderStatusCreated: "待支付", OrderStatusNew: "新订单", OrderStatusAccepted: "待拣货", OrderStatusFinishedPickup: "待配送", @@ -172,7 +173,7 @@ const ( OrderStatusApplyCancel = -5 OrderStatusUnknown = 0 - OrderStatusPayed = 2 // 已支付 + OrderStatusCreated = 2 // 已支付 OrderStatusNew = 5 // 新订单,实际是已经支付 OrderStatusAccepted = 10 // 已经接单,也即待出库,待拣货 OrderStatusFinishedPickup = 15 // 拣货完成 diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index fd7e3e7ad..673e06405 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -698,3 +698,17 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) } + +func GetOrderPayList(db *DaoDB, vendorOrderID string, vendorID int) (payList []*model.OrderPay, err error) { + sql := ` + SELECT t1.* + FROM order_pay t1 + WHERE t1.deleted_at = ? AND t1.vendor_order_id = ? AND t1.vendor_id = ? + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + vendorOrderID, + vendorID, + } + return payList, GetRows(db, &payList, sql, sqlParams) +} diff --git a/business/model/order.go b/business/model/order.go index 1960b900f..7970201a2 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -11,9 +11,31 @@ const ( const ( PayTypeWX = 1 // 微信支付 - PayStatusNo = 0 - PayStatusYes = 1 - PayStatusFailed = 2 + PayStatusNo = 0 + PayStatusYes = 1 + PayStatusFailed = 2 + PayStatusCanceled = 3 + PayStatusRefund = 4 + + RefundStatusNo = 0 + RefundStatusYes = 1 + RefundStatusFailed = 2 +) + +var ( + PayStatusName = map[int]string{ + PayStatusNo: "待支付", + PayStatusYes: "已支付", + PayStatusFailed: "支付失败", + PayStatusCanceled: "支付取消", + PayStatusRefund: "已退款", + } + + RefundStatusName = map[int]string{ + RefundStatusNo: "待退款", + RefundStatusYes: "已退款", + RefundStatusFailed: "退款失败", + } ) type ModelTimeInfo struct { diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index c5deedb71..7fa1b67ac 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -8,13 +8,13 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/baseapi/utils/errlist" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner/delivery" - "git.rosy.net.cn/jx-callback/globals" ) const ( @@ -112,7 +112,7 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, outJxOrder.OrderID = GenOrderNo(ctx) order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress) if err = err2; err == nil { - order.Status = model.OrderStatusPayed + order.Status = model.OrderStatusCreated partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) } } @@ -433,29 +433,26 @@ func SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) { if order.Status < model.OrderStatusDelivering { - orderPay := &model.OrderPay{ - VendorOrderID: order.VendorOrderID, - VendorID: jxutils.GetPossibleVendorIDFromVendorOrderID(order.VendorOrderID), - Status: model.PayStatusYes, - } - orderPay.DeletedAt = utils.DefaultTimeValue db := dao.GetDB() - if err = dao.GetEntity(db, orderPay, "VendorOrderID", "VendorID", "Status", "DeletedAt"); err == nil || dao.IsNoRowsError(err) { - if err == nil { - refundID := utils.Int64ToStr(GenRefundID(order)) - orderPayRefund, err2 := refundOrderByWX(ctx, orderPay, refundID) - if err = err2; err == nil { - dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName()) - err = dao.CreateEntity(dao.GetDB(), orderPay) - } - } else { - if order.Status >= model.OrderStatusNew { - globals.SugarLogger.Warnf("订单:%s找不到有效的支付方式", order.VendorOrderID) + payList, err2 := dao.GetOrderPayList(db, order.VendorOrderID, jxutils.GetPossibleVendorIDFromVendorOrderID(order.VendorOrderID)) + if err = err2; err == nil { + errList := errlist.New() + for _, orderPay := range payList { + if orderPay.Status == model.PayStatusYes { + refundID := utils.Int64ToStr(GenRefundID(order)) + orderPayRefund, err2 := refundOrderByWX(ctx, orderPay, refundID) + if err = err2; err == nil { + dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName()) + errList.AddErr(dao.CreateEntity(dao.GetDB(), orderPay)) + } + } else { + orderPay.Status = model.PayStatusCanceled + _, err2 := dao.UpdateEntity(db, orderPay) + errList.AddErr(err2) } } - if err == nil { - err = changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason) - } + errList.AddErr(changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason)) + err = errList.GetErrListAsOne() } } else { err = fmt.Errorf("当前订单状态:%s不允许取消", model.OrderStatusName[order.Status]) @@ -477,3 +474,9 @@ func changeOrderStatus(vendorOrderID string, status int, remark string) (err err } return partner.CurOrderManager.OnOrderStatusChanged(orderStatus) } + +func GetOrderPay(ctx *jxcontext.Context, vendorOrderID string) (payList []*model.OrderPay, err error) { + db := dao.GetDB() + payList, err = dao.GetOrderPayList(db, vendorOrderID, jxutils.GetPossibleVendorIDFromVendorOrderID(vendorOrderID)) + return payList, err +} diff --git a/business/partner/purchase/jx/localjx/wxpay.go b/business/partner/purchase/jx/localjx/wxpay.go index f1450aa8c..3fa7d4c79 100644 --- a/business/partner/purchase/jx/localjx/wxpay.go +++ b/business/partner/purchase/jx/localjx/wxpay.go @@ -99,15 +99,27 @@ func onWxpayRefund(msg *wxpay.RefundResultMsg) (err error) { db := dao.GetDB() if err = dao.GetEntity(db, orderPayRefund, "RefundID"); err == nil { if msg.ResultCode == wxpay.ResponseCodeSuccess { - orderPayRefund.Status = model.PayStatusYes + orderPayRefund.Status = model.RefundStatusYes } else { - orderPayRefund.Status = model.PayStatusFailed + orderPayRefund.Status = model.RefundStatusFailed } orderPayRefund.OriginalData = utils.Format4Output(msg, true) dao.UpdateEntity(db, orderPayRefund) } else if dao.IsNoRowsError(err) { globals.SugarLogger.Warnf("收到异常的退款事件, msg:%s", utils.Format4Output(msg, true)) } + + orderPay := &model.OrderPay{ + VendorOrderID: orderPayRefund.VendorOrderID, + VendorID: jxutils.GetPossibleVendorIDFromVendorOrderID(orderPayRefund.VendorOrderID), + PayType: model.PayTypeWX, + Status: model.PayStatusYes, + } + orderPay.DeletedAt = utils.DefaultTimeValue + if err = dao.GetEntity(db, orderPay, "VendorOrderID", "VendorID", "PayType", "Status", "DeletedAt"); err == nil { + orderPay.Status = model.PayStatusRefund + dao.UpdateEntity(db, orderPay) + } return err } @@ -125,7 +137,7 @@ func refundOrderByWX(ctx *jxcontext.Context, orderPay *model.OrderPay, refundID VendorRefundID: result.RefundID, VendorOrderID: orderPay.VendorOrderID, VendorID: orderPay.VendorID, - Status: model.PayStatusNo, + Status: model.RefundStatusNo, TransactionID: orderPay.TransactionID, RefundFee: orderPay.TotalFee, RefundCreatedAt: time.Now(), diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 4fe21002f..80a424c8c 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -279,6 +279,7 @@ func (c *OrderController) ExportMTWaybills() { // @Param isJxFirst query bool false "排序是否京西订单优先(缺省为否)" // @Param adjustCount query int false "最小调整次数" // @Param mustInvoice query bool false "是否必须要求开发票" +// @Param isPurchase query bool false "是否是用户自已的订单,如果角色只有consumer,会被强制设为true" // @Param offset query int false "结果起始序号(以0开始,缺省为0)" // @Param pageSize query int false "结果页大小(缺省为50,-1表示全部)" // @Success 200 {object} controllers.CallResult diff --git a/controllers/jx_order2.go b/controllers/jx_order2.go index 102837b7e..f59c01de5 100644 --- a/controllers/jx_order2.go +++ b/controllers/jx_order2.go @@ -58,3 +58,17 @@ func (c *JxOrderController) GetAvailableDeliverTime() { return retVal, "", err }) } + +// @Title 得到一个订单的支付信息 +// @Description 得到一个订单的支付信息 +// @Param token header string true "认证token" +// @Param vendorOrderID query string true "订单号,如果此项不为空,忽略其它所有查询条件" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetOrderPay [get] +func (c *JxOrderController) GetOrderPay() { + c.callGetOrderPay(func(params *tJxorderGetOrderPayParams) (retVal interface{}, errCode string, err error) { + retVal, err = localjx.GetOrderPay(params.Ctx, params.VendorOrderID) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 20f0c80d2..74b861540 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -601,6 +601,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"], + beego.ControllerComments{ + Method: "GetOrderPay", + Router: `/GetOrderPay`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"], beego.ControllerComments{ Method: "Pay4Order",