+GetOrderPay

GetOrders添加参数isPurchase
This commit is contained in:
gazebo
2019-11-27 10:05:26 +08:00
parent 4b1b011459
commit 7410da75fd
10 changed files with 121 additions and 30 deletions

View File

@@ -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) { 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) 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) pageSize = jxutils.FormalizePageSize(pageSize)
if offset < 0 { if offset < 0 {
offset = 0 offset = 0
@@ -393,6 +402,10 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku, isInclude
sqlParams = append(sqlParams, vendorIDs) sqlParams = append(sqlParams, vendorIDs)
} }
} }
if isPurchase {
sqlWhere += " AND t1.user_id = ?"
sqlParams = append(sqlParams, userID)
}
db := dao.GetDB() db := dao.GetDB()
sql += sqlWhere sql += sqlWhere
if isIncludeSku { if isIncludeSku {

View File

@@ -98,6 +98,8 @@ func InitServiceInfo(version string, buildTime time.Time, gitCommit string) {
"autoSaleAt": AutoSaleAtStr, "autoSaleAt": AutoSaleAtStr,
"userTypeName": model.UserTypeName, "userTypeName": model.UserTypeName,
"storePriceTypeName": model.StorePriceTypeName, "storePriceTypeName": model.StorePriceTypeName,
"payStatusName": model.PayStatusName,
"refundStatusName": model.RefundStatusName,
}, },
} }
} }

View File

@@ -46,6 +46,7 @@ var (
OrderStatusUnknown: "一般事件", OrderStatusUnknown: "一般事件",
OrderStatusCreated: "待支付",
OrderStatusNew: "新订单", OrderStatusNew: "新订单",
OrderStatusAccepted: "待拣货", OrderStatusAccepted: "待拣货",
OrderStatusFinishedPickup: "待配送", OrderStatusFinishedPickup: "待配送",
@@ -172,7 +173,7 @@ const (
OrderStatusApplyCancel = -5 OrderStatusApplyCancel = -5
OrderStatusUnknown = 0 OrderStatusUnknown = 0
OrderStatusPayed = 2 // 已支付 OrderStatusCreated = 2 // 已支付
OrderStatusNew = 5 // 新订单,实际是已经支付 OrderStatusNew = 5 // 新订单,实际是已经支付
OrderStatusAccepted = 10 // 已经接单,也即待出库,待拣货 OrderStatusAccepted = 10 // 已经接单,也即待出库,待拣货
OrderStatusFinishedPickup = 15 // 拣货完成 OrderStatusFinishedPickup = 15 // 拣货完成

View File

@@ -698,3 +698,17 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList
return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) 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)
}

View File

@@ -11,9 +11,31 @@ const (
const ( const (
PayTypeWX = 1 // 微信支付 PayTypeWX = 1 // 微信支付
PayStatusNo = 0 PayStatusNo = 0
PayStatusYes = 1 PayStatusYes = 1
PayStatusFailed = 2 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 { type ModelTimeInfo struct {

View File

@@ -8,13 +8,13 @@ import (
"time" "time"
"git.rosy.net.cn/baseapi/utils" "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"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "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"
"git.rosy.net.cn/jx-callback/business/model/dao" "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"
"git.rosy.net.cn/jx-callback/business/partner/delivery" "git.rosy.net.cn/jx-callback/business/partner/delivery"
"git.rosy.net.cn/jx-callback/globals"
) )
const ( const (
@@ -112,7 +112,7 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64,
outJxOrder.OrderID = GenOrderNo(ctx) outJxOrder.OrderID = GenOrderNo(ctx)
order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress) order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress)
if err = err2; err == nil { if err = err2; err == nil {
order.Status = model.OrderStatusPayed order.Status = model.OrderStatusCreated
partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) 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) { func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) {
if order.Status < model.OrderStatusDelivering { 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() db := dao.GetDB()
if err = dao.GetEntity(db, orderPay, "VendorOrderID", "VendorID", "Status", "DeletedAt"); err == nil || dao.IsNoRowsError(err) { payList, err2 := dao.GetOrderPayList(db, order.VendorOrderID, jxutils.GetPossibleVendorIDFromVendorOrderID(order.VendorOrderID))
if err == nil { if err = err2; err == nil {
refundID := utils.Int64ToStr(GenRefundID(order)) errList := errlist.New()
orderPayRefund, err2 := refundOrderByWX(ctx, orderPay, refundID) for _, orderPay := range payList {
if err = err2; err == nil { if orderPay.Status == model.PayStatusYes {
dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName()) refundID := utils.Int64ToStr(GenRefundID(order))
err = dao.CreateEntity(dao.GetDB(), orderPay) orderPayRefund, err2 := refundOrderByWX(ctx, orderPay, refundID)
} if err = err2; err == nil {
} else { dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName())
if order.Status >= model.OrderStatusNew { errList.AddErr(dao.CreateEntity(dao.GetDB(), orderPay))
globals.SugarLogger.Warnf("订单:%s找不到有效的支付方式", order.VendorOrderID) }
} else {
orderPay.Status = model.PayStatusCanceled
_, err2 := dao.UpdateEntity(db, orderPay)
errList.AddErr(err2)
} }
} }
if err == nil { errList.AddErr(changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason))
err = changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason) err = errList.GetErrListAsOne()
}
} }
} else { } else {
err = fmt.Errorf("当前订单状态:%s不允许取消", model.OrderStatusName[order.Status]) 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) 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
}

View File

@@ -99,15 +99,27 @@ func onWxpayRefund(msg *wxpay.RefundResultMsg) (err error) {
db := dao.GetDB() db := dao.GetDB()
if err = dao.GetEntity(db, orderPayRefund, "RefundID"); err == nil { if err = dao.GetEntity(db, orderPayRefund, "RefundID"); err == nil {
if msg.ResultCode == wxpay.ResponseCodeSuccess { if msg.ResultCode == wxpay.ResponseCodeSuccess {
orderPayRefund.Status = model.PayStatusYes orderPayRefund.Status = model.RefundStatusYes
} else { } else {
orderPayRefund.Status = model.PayStatusFailed orderPayRefund.Status = model.RefundStatusFailed
} }
orderPayRefund.OriginalData = utils.Format4Output(msg, true) orderPayRefund.OriginalData = utils.Format4Output(msg, true)
dao.UpdateEntity(db, orderPayRefund) dao.UpdateEntity(db, orderPayRefund)
} else if dao.IsNoRowsError(err) { } else if dao.IsNoRowsError(err) {
globals.SugarLogger.Warnf("收到异常的退款事件, msg:%s", utils.Format4Output(msg, true)) 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 return err
} }
@@ -125,7 +137,7 @@ func refundOrderByWX(ctx *jxcontext.Context, orderPay *model.OrderPay, refundID
VendorRefundID: result.RefundID, VendorRefundID: result.RefundID,
VendorOrderID: orderPay.VendorOrderID, VendorOrderID: orderPay.VendorOrderID,
VendorID: orderPay.VendorID, VendorID: orderPay.VendorID,
Status: model.PayStatusNo, Status: model.RefundStatusNo,
TransactionID: orderPay.TransactionID, TransactionID: orderPay.TransactionID,
RefundFee: orderPay.TotalFee, RefundFee: orderPay.TotalFee,
RefundCreatedAt: time.Now(), RefundCreatedAt: time.Now(),

View File

@@ -279,6 +279,7 @@ func (c *OrderController) ExportMTWaybills() {
// @Param isJxFirst query bool false "排序是否京西订单优先(缺省为否)" // @Param isJxFirst query bool false "排序是否京西订单优先(缺省为否)"
// @Param adjustCount query int false "最小调整次数" // @Param adjustCount query int false "最小调整次数"
// @Param mustInvoice query bool false "是否必须要求开发票" // @Param mustInvoice query bool false "是否必须要求开发票"
// @Param isPurchase query bool false "是否是用户自已的订单如果角色只有consumer会被强制设为true"
// @Param offset query int false "结果起始序号以0开始缺省为0" // @Param offset query int false "结果起始序号以0开始缺省为0"
// @Param pageSize query int false "结果页大小缺省为50-1表示全部" // @Param pageSize query int false "结果页大小缺省为50-1表示全部"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult

View File

@@ -58,3 +58,17 @@ func (c *JxOrderController) GetAvailableDeliverTime() {
return retVal, "", err 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
})
}

View File

@@ -601,6 +601,15 @@ func init() {
Filters: nil, Filters: nil,
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "Pay4Order", Method: "Pay4Order",